hs-bibutils-5.5/0000755000000000000000000000000012445605732012006 5ustar0000000000000000hs-bibutils-5.5/LICENSE0000644000000000000000000004311312445605732013015 0ustar0000000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. hs-bibutils-5.5/hs-bibutils.cabal0000644000000000000000000001176512445605732015231 0ustar0000000000000000name: hs-bibutils version: 5.5 homepage: http://istitutocolli.org/repos/hs-bibutils/ synopsis: Haskell bindings to bibutils, the bibliography conversion utilities. description: Haskell bindings to Chris Putnam's bibutils, a library that interconverts between various bibliography formats using a common MODS-format XML intermediate. . hs-bibutils is available under the GNU GPL license. See the LICENSE file for details. . For more details about bibutils, please check: . . The original API documentation is available here: . . The package release number refers to the release number of the included bibutils library. category: Text license: GPL license-file: LICENSE author: Andrea Rossato maintainer: andrea.rossato@unitn.it cabal-version: >= 1.4 build-type: Simple extra-source-files: bibutils/adsout.c bibutils/adsout.h bibutils/adsout_journals.c bibutils/bibcore.c bibutils/bibl.c bibutils/bibl.h bibutils/biblatexin.c bibutils/biblatexin.h bibutils/bibtexin.c bibutils/bibtexin.h bibutils/bibtexout.c bibutils/bibtexout.h bibutils/bibtextypes.c bibutils/bibutils.c bibutils/bibutils.h bibutils/bltypes.c bibutils/charsets.c bibutils/charsets.h bibutils/copacin.c bibutils/copacin.h bibutils/copactypes.c bibutils/doi.c bibutils/doi.h bibutils/ebiin.c bibutils/ebiin.h bibutils/endin.c bibutils/endin.h bibutils/endout.c bibutils/endout.h bibutils/endtypes.c bibutils/endxmlin.c bibutils/endxmlin.h bibutils/entities.c bibutils/entities.h bibutils/fields.c bibutils/fields.h bibutils/gb18030.c bibutils/gb18030.h bibutils/gb18030_enumeration.c bibutils/intlist.c bibutils/intlist.h bibutils/is_ws.c bibutils/is_ws.h bibutils/isiin.c bibutils/isiin.h bibutils/isiout.c bibutils/isiout.h bibutils/isitypes.c bibutils/iso639_1.c bibutils/iso639_1.h bibutils/iso639_2.c bibutils/iso639_2.h bibutils/iso639_3.c bibutils/iso639_3.h bibutils/latex.c bibutils/latex.h bibutils/list.c bibutils/list.h bibutils/marc.c bibutils/marc.h bibutils/medin.c bibutils/medin.h bibutils/modsin.c bibutils/modsin.h bibutils/modsout.c bibutils/modsout.h bibutils/modstypes.c bibutils/modstypes.h bibutils/name.c bibutils/name.h bibutils/newstr.c bibutils/newstr.h bibutils/newstr_conv.c bibutils/newstr_conv.h bibutils/reftypes.c bibutils/reftypes.h bibutils/risin.c bibutils/risin.h bibutils/risout.c bibutils/risout.h bibutils/ristypes.c bibutils/serialno.c bibutils/serialno.h bibutils/strsearch.c bibutils/strsearch.h bibutils/title.c bibutils/title.h bibutils/unicode.c bibutils/unicode.h bibutils/utf8.c bibutils/utf8.h bibutils/vplist.c bibutils/vplist.h bibutils/wordin.c bibutils/wordin.h bibutils/wordout.c bibutils/wordout.h bibutils/xml.c bibutils/xml.h bibutils/xml_encoding.c bibutils/xml_encoding.h library exposed-modules: Text.Bibutils other-modules: ghc-options: -funbox-strict-fields -Wall ghc-prof-options: -prof -auto-all hs-source-dirs: src extensions: ForeignFunctionInterface include-dirs: bibutils includes: bibutils.h c-sources: cbits/stub.c bibutils/adsout.c bibutils/adsout_journals.c bibutils/bibcore.c bibutils/bibl.c bibutils/biblatexin.c bibutils/bibtexin.c bibutils/bibtexout.c bibutils/bibtextypes.c bibutils/bibutils.c bibutils/bltypes.c bibutils/charsets.c bibutils/copacin.c bibutils/copactypes.c bibutils/doi.c bibutils/ebiin.c bibutils/endin.c bibutils/endout.c bibutils/endtypes.c bibutils/endxmlin.c bibutils/entities.c bibutils/fields.c bibutils/gb18030.c bibutils/intlist.c bibutils/is_ws.c bibutils/isiin.c bibutils/isiout.c bibutils/isitypes.c bibutils/iso639_1.c bibutils/iso639_2.c bibutils/iso639_3.c bibutils/latex.c bibutils/list.c bibutils/marc.c bibutils/medin.c bibutils/modsin.c bibutils/modsout.c bibutils/modstypes.c bibutils/name.c bibutils/newstr.c bibutils/newstr_conv.c bibutils/reftypes.c bibutils/risin.c bibutils/risout.c bibutils/ristypes.c bibutils/serialno.c bibutils/strsearch.c bibutils/title.c bibutils/unicode.c bibutils/utf8.c bibutils/vplist.c bibutils/wordin.c bibutils/wordout.c bibutils/xml.c bibutils/xml_encoding.c if impl(ghc >= 6.10) build-depends: base >= 4, syb else build-depends: base >= 3 && < 4 hs-bibutils-5.5/README0000644000000000000000000000654012445605732012673 0ustar0000000000000000% Haskell Bindings to Bibutils, the Bibliography Conversion Utilities % Andrea Rossato About ----- [hs-bibutils] is library with Haskell bindings to Chris Putnam's [bibutils], a library that interconverts between various bibliography formats using a common MODS-format XML intermediate. [hs-bibutils] can be used with [citeproc-hs] and [pandoc] to read and use various bibliographic database formats for processing and automatically formatting citations and references according to a [CSL] style. [citeproc-hs] adds to [pandoc], the famous [Haskell] text processing tool, a Bibtex like citation and bibliographic formatting and generation facility. [CSL] is an XML language for specifying citation and bibliographic formatting, similar in principle to BibTeX `.bst` files or the binary style files in commercial products like Endnote or Reference Manager. Download -------- [hs-bibutils] can be downloaded from [Hackage]: To get the darcs source run: darcs get http://code.haskell.org/hs-bibutils/ Installation ------------ [hs-bibutils] does not require [bibutils] to be installed, since it ships with its one version of the library. To build and install [hs-bibutils] unpack the tar archive, in the source directory run: runhaskell Setup.lhs configure runhaskell Setup.lhs build runhaskell Setup.lhs install This last step requires `root` privileges. If you don't have `root` privileges you can install [hs-bibutils] locally with these commands: runhaskell Setup.lhs configure --user --prefix=$HOME runhaskell Setup.lhs build runhaskell Setup.lhs install --user [hs-bibutils] should be compatible with cabal-install. Documentation ------------- The [Haddock] generated documentation is available here: The original API documentation is available here: Bug Reports ----------- To submit bug reports you can use the [citeproc-hs] bug tracking system available at the following address: Credits ------- Thanks to [Chris Putnam] for his help. Author ------ Andrea Rossato `andrea.rossato at unitn.it` Links to Related Projects ---------------- Bibutils : Pandoc : Citeproc-hs: : CSL : Legal ----- This software is released under the GNU GPL. See LICENSE for more details. This is an early, "alpha" release. It carries no warranties of any kind. Copyright © 2008 - 2010 Andrea Rossato [hs-bibutils]: http://code.haskell.org/hs-bibutils [bibutils]: http://www.scripps.edu/~cdputnam/software/bibutils/ [Hackage]: http://hackage.haskell.org/cgi-bin/hackage-scripts/package/hs-bibutils [citeproc-hs]: http://code.haskell.org/citeproc-hs [CSL]: http://citationstyles.org/ [pandoc]: http://johnmacfarlane.net/pandoc/ [Zotero]: http://www.zotero.org [MODS]: http://www.loc.gov/mods/ [Bruce D'Arcus]: http://community.muohio.edu/blogs/darcusb/ [John MacFarlane]: http://johnmacfarlane.net/ [Chris Putnam]: http://www.scripps.edu/~cdputnam/ [Haskell]: http://www.haskell.org/ [Haddock]: http://www.haskell.org/haddock/ hs-bibutils-5.5/Setup.lhs0000644000000000000000000000011412445605732013612 0ustar0000000000000000#!/usr/bin/env runhaskell > import Distribution.Simple > main = defaultMain hs-bibutils-5.5/bibutils/0000755000000000000000000000000012445605732013623 5ustar0000000000000000hs-bibutils-5.5/bibutils/iso639_3.h0000644000000000000000000000017212445605732015252 0ustar0000000000000000/* * iso639_3.h */ #ifndef ISO639_3_H #define iSO639_3_H extern char * iso639_3_from_code( const char *code ); #endif hs-bibutils-5.5/bibutils/fields.h0000644000000000000000000000561012445605732015244 0ustar0000000000000000/* * fields.h * * Copyright (c) Chris Putnam 2003-2014 * * Source code released under the GPL version 2 * */ #ifndef FIELDS_H #define FIELDS_H #define FIELDS_OK (1) #define FIELDS_ERR (0) #define LEVEL_ANY (-1) #define LEVEL_MAIN (0) #define LEVEL_HOST (1) #define LEVEL_SERIES (2) #define LEVEL_ORIG (-2) #include #include "newstr.h" #include "vplist.h" typedef struct { newstr *tag; newstr *data; int *used; int *level; int n; int max; } fields; extern void fields_init( fields *f ); extern fields *fields_new( void ); extern void fields_free( fields *f ); extern int fields_add( fields *f, char *tag, char *data, int level ); extern int fields_add_tagsuffix( fields *f, char *tag, char *suffix, char *data, int level ); extern int fields_maxlevel( fields *f ); extern void fields_clearused( fields *f ); extern void fields_setused( fields *f, int n ); extern int fields_replace_or_add( fields *f, char *tag, char *data, int level ); extern inline int fields_num( fields *f ); extern inline int fields_used( fields *f, int n ); extern inline int fields_nodata( fields *f, int n ); extern inline int fields_match_level( fields *f, int n, int level ); extern inline int fields_match_tag( fields *f, int n, char *tag ); extern inline int fields_match_casetag( fields *f, int n, char *tag ); extern inline int fields_match_tag_level( fields *f, int n, char *tag, int level ); extern inline int fields_match_casetag_level( fields *f, int n, char *tag, int level ); #define FIELDS_STRP_FLAG (2) #define FIELDS_POSP_FLAG (4) #define FIELDS_NOLENOK_FLAG (8) #define FIELDS_SETUSE_FLAG (16) #define FIELDS_CHRP (FIELDS_SETUSE_FLAG ) #define FIELDS_STRP (FIELDS_SETUSE_FLAG | FIELDS_STRP_FLAG ) #define FIELDS_POSP (FIELDS_SETUSE_FLAG | FIELDS_POSP_FLAG ) #define FIELDS_CHRP_NOLEN (FIELDS_SETUSE_FLAG | FIELDS_NOLENOK_FLAG) #define FIELDS_STRP_NOLEN (FIELDS_SETUSE_FLAG | FIELDS_STRP_FLAG | FIELDS_NOLENOK_FLAG) #define FIELDS_POSP_NOLEN (FIELDS_SETUSE_FLAG | FIELDS_POSP_FLAG | FIELDS_NOLENOK_FLAG) #define FIELDS_CHRP_NOUSE ( 0 ) #define FIELDS_STRP_NOUSE ( FIELDS_STRP_FLAG ) extern void *fields_tag( fields *f, int n, int mode ); extern void *fields_value( fields *f, int n, int mode ); extern int fields_level( fields *f, int n ); extern int fields_find( fields *f, char *searchtag, int level ); extern void *fields_findv( fields *f, int level, int mode, char *tag ); extern void *fields_findv_firstof( fields *f, int level, int mode, ... ); extern void fields_findv_each( fields *f, int level, int mode, vplist *a, char *tag ); extern void fields_findv_eachof( fields *f, int level, int mode, vplist *a, ... ); #endif hs-bibutils-5.5/bibutils/endxmlin.h0000644000000000000000000000101612445605732015610 0ustar0000000000000000/* * endxmlin.h * * Copyright (c) Chris Putnam 2006-2014 * * Source code released under the GPL version 2 * */ #ifndef ENDXMLIN_H #define ENDXMLIN_H #include "newstr.h" #include "fields.h" #include "reftypes.h" #include "bibutils.h" extern int endxmlin_readf( FILE *fp, char *buf, int bufsize, int *bufpos, newstr *line, newstr *reference, int *fcharset ); extern int endxmlin_processf( fields *endin, char *p, char *filename, long nref ); extern void endxmlin_initparams( param *p, const char *progname ); #endif hs-bibutils-5.5/bibutils/newstr_conv.c0000644000000000000000000001171412445605732016342 0ustar0000000000000000/* * newstr_conv.c * * Copyright (c) Chris Putnam 1999-2014 * * Source code released under the GPL version 2 * * newstring routines for converting newstrings between character sets * */ #include #include #include #include #include #include "newstr.h" #include "latex.h" #include "entities.h" #include "utf8.h" #include "gb18030.h" #include "charsets.h" #include "newstr_conv.h" static void addentity( newstr *s, unsigned int ch ) { char buf[512]; sprintf( buf, "&#%d;", ch ); newstr_strcat( s, buf ); } /* These are the five minimal predefined entites in XML */ static int minimalxmlchars( newstr *s, unsigned int ch ) { if ( ch==34 ) { newstr_strcat( s, """ ); return 1; } else if ( ch==38 ) { newstr_strcat( s, "&" ); return 1; } else if ( ch==39 ) { newstr_strcat( s, "'" ); return 1; } else if ( ch==60 ) { newstr_strcat( s, "<" ); return 1; } else if ( ch==62 ) { newstr_strcat( s, ">" ); return 1; } return 0; } static void addxmlchar( newstr *s, unsigned int ch ) { if ( minimalxmlchars( s, ch ) ) return; if ( ch > 127 ) addentity( s, ch ); else newstr_addchar( s, ch ); } static void addutf8char( newstr *s, unsigned int ch, int xmlout ) { unsigned char code[6]; int nc, i; if ( xmlout ) { if ( minimalxmlchars( s, ch ) ) return; if ( ch > 127 && xmlout == NEWSTR_CONV_XMLOUT_ENTITIES ) { addentity( s, ch ); return; } } nc = utf8_encode( ch, code ); for ( i=0; i 127 && xmlout == NEWSTR_CONV_XMLOUT_ENTITIES ) { addentity( s, ch ); return; } } nc = gb18030_encode( ch, code ); for ( i=0; i 128 or by numeric xml entities such as "Ȗ" * then the output of decode_entity() and utf8_decode will necessarily * be in the charsetin character set. On the other hand, if it's a * fancy latex expression, such as "\alpha", or a non-numeric xml entity * like "&", then we'll get the Unicode value (because our lists only * keep the Unicode equivalent). * * The unicode variable indicates whether or not a Unicode-based listing * was used to convert the character (remember that charsetin could be * Unicode independently). * * The charset variable is used to keep track of what character set * the character is in prior to conversion. * */ static unsigned int get_unicode( newstr *s, unsigned int *pi, int charsetin, int latexin, int utf8in, int xmlin ) { unsigned int ch; int unicode = 0, err = 0; if ( xmlin && s->data[*pi]=='&' ) { ch = decode_entity( s->data, pi, &unicode, &err ); } else if ( charsetin==CHARSET_GB18030 ) { ch = gb18030_decode( s->data, pi ); unicode = 1; } else if ( latexin ) { /* Must handle bibtex files in UTF8/Unicode */ if ( utf8in && ( s->data[*pi] & 128 ) ) { ch = utf8_decode( s->data, pi ); unicode = 1; } else ch = latex2char( s->data, pi, &unicode ); } else if ( utf8in ) ch = utf8_decode( s->data, pi ); else { ch = (unsigned int) s->data[*pi]; *pi = *pi + 1; } if ( !unicode && charsetin!=CHARSET_UNICODE ) ch = charset_lookupchar( charsetin, ch ); return ch; } static int write_unicode( newstr *s, unsigned int ch, int charsetout, int latexout, int utf8out, int xmlout ) { unsigned int c; if ( latexout ) { addlatexchar( s, ch, xmlout, utf8out ); } else if ( utf8out ) { addutf8char( s, ch, xmlout ); } else if ( charsetout==CHARSET_GB18030 ) { addgb18030char( s, ch, xmlout ); } else { c = charset_lookupuni( charsetout, ch ); if ( xmlout ) addxmlchar( s, c ); else newstr_addchar( s, c ); } return 1; } /* * Returns 1 on memory error condition */ int newstr_convert( newstr *s, int charsetin, int latexin, int utf8in, int xmlin, int charsetout, int latexout, int utf8out, int xmlout ) { unsigned int pos = 0; unsigned int ch; newstr ns; int ok = 1; if ( !s || s->len==0 ) return ok; newstr_init( &ns ); if ( charsetin==CHARSET_UNKNOWN ) charsetin = CHARSET_DEFAULT; if ( charsetout==CHARSET_UNKNOWN ) charsetout = CHARSET_DEFAULT; while ( s->data[pos] ) { ch = get_unicode( s, &pos, charsetin, latexin, utf8in, xmlin ); ok = write_unicode( &ns, ch, charsetout, latexout, utf8out, xmlout ); if ( !ok ) goto out; } newstr_swapstrings( s, &ns ); out: newstr_free( &ns ); return ok; } hs-bibutils-5.5/bibutils/is_ws.h0000644000000000000000000000037712445605732015127 0ustar0000000000000000/* * is_ws.h * * Copyright (c) Chris Putnam 2003-2013 * * Source code released under the GPL version 2 * */ #ifndef IS_WS_H #define IS_WS_H extern int is_ws( char ch ); extern char *skip_ws( char *p ); extern char *skip_notws( char *p ); #endif hs-bibutils-5.5/bibutils/utf8.c0000644000000000000000000000741112445605732014660 0ustar0000000000000000/* * utf8.c * * Copyright (c) Chris Putnam 2004-2013 * * Source code released under the GPL version 2 * */ #include #include "utf8.h" /* UTF-8 encoding U-00000000 - U-0000007F: 0xxxxxxx U-00000080 - U-000007FF: 110xxxxx 10xxxxxx U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx */ static void utf8_build( unsigned int value, unsigned char out[6], int in_pos, int out_pos ) { unsigned int in_mask, out_mask; int byte = 0; while ( in_pos < 32 ) { in_mask = 1 << ( 31 - in_pos ); out_mask = 1 << ( 7 - out_pos ); if ( value & in_mask ) out[byte] |= out_mask; in_pos++; out_pos++; if ( out_pos > 7 ) { out_pos=2; byte++; } } } /* int utf8( in, out[6] ); * * in is character code 0x0 -> 0x7FFFFFFF * int is number of characters for output * */ int utf8_encode( unsigned int value, unsigned char out[6] ) { int i; for ( i=1; i<6; ++i ) out[i] = 0x80; /* 10xxxxxx */ if ( value < 0x80 ) { out[0] = 0x0; /* 0xxxxxxx */ utf8_build( value, out, 25, 1 ); return 1; } else if ( value < 0x800 ) { out[0] = 0xC0; /* 110xxxxx */ utf8_build( value, out, 21, 3 ); return 2; } else if ( value < 0x10000 ) { out[0] = 0xE0; /* 1110xxxx */ utf8_build( value, out, 16, 4 ); return 3; } else if ( value < 0x200000 ) { out[0] = 0xF0; /* 11110xxx */ utf8_build( value, out, 11, 5 ); return 4; } else if ( value < 0x4000000 ) { out[0] = 0xF8; /* 111110xx */ utf8_build( value, out, 6, 6 ); return 5; } else if ( value < (unsigned int ) 0x80000000 ) { out[0] = 0xFC; /* 1111110x */ utf8_build( value, out, 1, 7 ); return 6; } else { /* error, above 2^31 bits encodable by UTF-8 */ return 0; } } /* Generate UTF8 character as null-terminated string */ void utf8_encode_str( unsigned int value, char outstr[7] ) { unsigned char encoded[6]; int i, n; n = utf8_encode( value, encoded ); for ( i=0; i #include typedef struct intlist { int n, max; int *data; } intlist; extern void intlist_init( intlist *il ); extern int intlist_init_range( intlist *il, int low, int high, int step ); extern intlist * intlist_new( void ); extern intlist * intlist_new_range( int low, int high, int step ); extern void intlist_delete( intlist *il ); extern void intlist_sort( intlist *il ); extern void intlist_randomize( intlist *il ); extern int intlist_add( intlist *il, int value ); extern int intlist_add_unique( intlist *il, int value ); extern int intlist_find( intlist *il, int searchvalue ); extern int intlist_find_or_add( intlist *il, int searchvalue ); extern void intlist_empty( intlist *il ); extern void intlist_free( intlist *il ); extern int intlist_copy( intlist *to, intlist *from ); extern int intlist_get( intlist *il, int pos ); extern int intlist_set( intlist *il, int pos, int value ); extern int intlist_remove( intlist *il, int searchvalue ); extern int intlist_remove_pos( intlist *il, int pos ); extern int intlist_append( intlist *to, intlist *from ); extern int intlist_append_unique( intlist *to, intlist *from ); extern float intlist_median( intlist *il ); extern float intlist_mean( intlist *il ); #endif hs-bibutils-5.5/bibutils/xml_encoding.h0000644000000000000000000000034312445605732016442 0ustar0000000000000000/* * xml_getencoding.h * * Copyright (c) Chris Putnam 2007-2013 * * Source code released under the GPL version 2 * */ #ifndef XML_GETENCODING_H #define XML_GETENCODING_H extern int xml_getencoding( newstr *s ); #endif hs-bibutils-5.5/bibutils/name.c0000644000000000000000000003016112445605732014710 0ustar0000000000000000/* * name.c * * mangle names w/ and w/o commas * * Copyright (c) Chris Putnam 2004-2014 * * Source code released under the GPL version 2 * */ #include #include #include #include "utf8.h" #include "unicode.h" #include "is_ws.h" #include "newstr.h" #include "fields.h" #include "list.h" #include "intlist.h" #include "name.h" /* name_build_withcomma() * * reconstruct parsed names in format: 'family|given|given||suffix' * to 'family suffix, given given */ void name_build_withcomma( newstr *s, char *p ) { int nseps = 0, nch; char *suffix, *stopat; newstr_empty( s ); suffix = strstr( p, "||" ); if ( suffix ) stopat = suffix; else stopat = strchr( p, '\0' ); while ( p != stopat ) { nch = 0; if ( nseps==1 ) { if ( suffix ) { newstr_addchar( s, ' ' ); newstr_strcat( s, suffix+2 ); } newstr_addchar( s, ',' ); } if ( nseps ) newstr_addchar( s, ' ' ); while ( p!=stopat && *p!='|' ) { newstr_addchar( s, *p++ ); nch++; } if ( p!=stopat && *p=='|' ) p++; if ( nseps!=0 && nch==1 ) newstr_addchar( s, '.' ); nseps++; } } /* name_findetal() * * Returns number of final tokens to be skipped in processing * of name lists. */ int name_findetal( list *tokens ) { newstr *s1, *s2; if ( tokens->n==0 ) return 0; /* ...check last entry for full 'et al.' or variant */ s2 = list_get( tokens, tokens->n - 1 ); if ( !strcasecmp( s2->data, "et alia" ) || !strcasecmp( s2->data, "et al." ) || !strcasecmp( s2->data, "et al.," ) || !strcasecmp( s2->data, "et al" ) || !strcasecmp( s2->data, "etalia" ) || !strcasecmp( s2->data, "etal." ) || !strcasecmp( s2->data, "etal" ) ) { return 1; } if ( tokens->n==1 ) return 0; /* ...check last two entries for full 'et' and 'al.' */ s1 = list_get( tokens, tokens->n - 2 ); if ( !strcasecmp( s1->data, "et" ) ) { if ( !strcasecmp( s2->data, "alia" ) || !strcasecmp( s2->data, "al." ) || !strcasecmp( s2->data, "al.," ) || !strcasecmp( s2->data, "al" ) ) { return 2; } } return 0; } #define WITHCOMMA (1) #define JUNIOR (2) #define SENIOR (4) #define THIRD (8) #define FOURTH (16) typedef struct { char *s; unsigned short value; } suffix_value_t; static int identify_suffix( char *p ) { suffix_value_t suffixes[] = { { "Jr." , JUNIOR }, { "Jr" , JUNIOR }, { "Jr.," , JUNIOR | WITHCOMMA }, { "Jr," , JUNIOR | WITHCOMMA }, { "Sr." , SENIOR }, { "Sr" , SENIOR }, { "Sr.," , SENIOR | WITHCOMMA }, { "Sr," , SENIOR | WITHCOMMA }, { "III" , THIRD }, { "III," , THIRD | WITHCOMMA }, { "IV" , FOURTH }, { "IV," , FOURTH | WITHCOMMA }, }; int i, nsuffixes = sizeof( suffixes ) / sizeof( suffixes[0] ); for ( i=0; idata ); if ( ret ) { *suffixpos = end - 1; return ret; } /* ...try to find one after a comma, e.g. "Author, Sr., H. F." */ for ( i=begin; ilen && s->data[ s->len - 1 ]==',' ) { s = list_get( tokens, i+1 ); ret = identify_suffix( s->data ); if ( ret ) { *suffixpos = i+1; return ret; } } } return 0; } static int add_given_split( newstr *name, newstr *s ) { unsigned int unicode_char; unsigned int pos = 0; char utf8s[7]; while ( pos < s->len ) { unicode_char = utf8_decode( s->data, &pos ); if ( is_ws( (char) unicode_char ) ) continue; else if ( unicode_char==(unsigned int)'.' ) { if ( s->data[pos]=='-' ) { newstr_strcat( name, ".-" ); pos += 1; unicode_char = utf8_decode( s->data, &pos ); utf8_encode_str( unicode_char, utf8s ); newstr_strcat( name, utf8s ); newstr_addchar( name, '.' ); } } else if ( unicode_char==(unsigned int)'-' ) { newstr_strcat( name, ".-" ); unicode_char = utf8_decode( s->data, &pos ); utf8_encode_str( unicode_char, utf8s ); newstr_strcat( name, utf8s ); newstr_addchar( name, '.' ); } else if ( unicode_char==(unsigned int)',' ) { /* nothing */ } else { newstr_addchar( name, '|' ); utf8_encode_str( unicode_char, utf8s ); newstr_strcat( name, utf8s ); } } return 1; } static unsigned char token_has_no_upper( list *tokens, int n ) { unsigned short m; newstr *s; s = list_get( tokens, n ); m = unicode_utf8_classify_newstr( s ); if ( m & UNICODE_UPPER ) return 0; else return 1; } static unsigned char token_has_upper( list *tokens, int n ) { if ( token_has_no_upper( tokens, n ) ) return 0; else return 1; } static int name_multielement_nocomma( intlist *given, intlist *family, list *tokens, int begin, int end, int suffixpos ) { int family_start, family_end; int i, n; /* ...family name(s) */ family_start = family_end = end - 1; if ( family_start == suffixpos ) family_start = family_end = end - 2; /* ...if family name is capitalized, then look for first non-capitalized * ...token and combine range to family name, e.g. single quoted parts of * ..."Ludwig 'von Beethoven'" * ..."Johannes Diderik 'van der Waals'" * ..."Charles Louis Xavier Joseph 'de la Valla Poussin' */ if ( token_has_upper( tokens, family_start ) ) { i = family_start - 1; n = -1; while ( i >= begin && ( n==-1 || token_has_no_upper( tokens, i ) ) ) { if ( token_has_no_upper( tokens, i ) ) n = i; i--; } if ( n != -1 ) family_start = n; } for ( i=family_start; i=family_start && i<=family_end ) continue; if ( i==suffixpos ) continue; intlist_add( given, i ); } return 1; } static int name_multielement_comma( intlist *given, intlist *family, list *tokens, int begin, int end, int comma, int suffixpos ) { newstr *s; int i; /* ...family names */ for ( i=begin; in; ++i ) { m = intlist_get( family, i ); s = list_get( tokens, m ); if ( i ) newstr_addchar( name, ' ' ); newstr_newstrcat( name, s ); case_family |= unicode_utf8_classify_newstr( s ); } /* ...check given name case */ for ( i=0; in; ++i ) { m = intlist_get( given, i ); s = list_get( tokens, m ); case_given |= unicode_utf8_classify_newstr( s ); } if ( ( ( case_family & UNICODE_MIXEDCASE ) == UNICODE_MIXEDCASE ) && ( ( case_given & UNICODE_MIXEDCASE ) == UNICODE_UPPER ) ) { should_split = 1; } for ( i=0; in; ++i ) { m = intlist_get( given, i ); s = list_get( tokens, m ); if ( !should_split ) { newstr_addchar( name, '|' ); newstr_newstrcat( name, s ); } else add_given_split( name, s ); } return 1; } static int name_construct_multi( newstr *outname, list *tokens, int begin, int end ) { int i, suffix, suffixpos=-1, comma=-1; intlist given, family; newstr *s; intlist_init( &family ); intlist_init( &given ); newstr_empty( outname ); suffix = has_suffix( tokens, begin, end, &suffixpos ); for ( i=begin; idata[ s->len -1 ] == ',' ) { if ( suffix && i==suffixpos-1 && !(suffix&WITHCOMMA) ) newstr_trimend( s, 1 ); else comma = i; } } if ( comma != -1 ) name_multielement_comma( &given, &family, tokens, begin, end, comma, suffixpos ); else name_multielement_nocomma( &given, &family, tokens, begin, end, suffixpos ); name_mutlielement_build( outname, &given, &family, tokens ); if ( suffix ) { if ( suffix & JUNIOR ) newstr_strcat( outname, "||Jr." ); if ( suffix & SENIOR ) newstr_strcat( outname, "||Sr." ); if ( suffix & THIRD ) newstr_strcat( outname, "||III" ); if ( suffix & FOURTH ) newstr_strcat( outname, "||IV" ); } intlist_free( &given ); intlist_free( &family ); return 1; } int name_addmultielement( fields *info, char *tag, list *tokens, int begin, int end, int level ) { int status, ok = 1; newstr name; newstr_init( &name ); name_construct_multi( &name, tokens, begin, end ); status = fields_add( info, tag, name.data, level ); if ( status!=FIELDS_OK ) ok = 0; newstr_free( &name ); return ok; } /* name_addsingleelement() * * Treat names that are single tokens, e.g. {Random Corporation, Inc.} in bibtex * as a name that should not be mangled (e.g. AUTHOR:ASIS or AUTHOR:CORP, if corp * is set). */ int name_addsingleelement( fields *info, char *tag, char *name, int level, int corp ) { int status, ok = 1; newstr outtag; newstr_init( &outtag ); newstr_strcpy( &outtag, tag ); if ( !corp ) newstr_strcat( &outtag, ":ASIS" ); else newstr_strcat( &outtag, ":CORP" ); status = fields_add( info, outtag.data, name, level ); if ( status!=FIELDS_OK ) ok = 0; newstr_free( &outtag ); return ok; } /* * Takes a single name in a string and parses it. * Skipped by bibtex/biblatex that come pre-parsed. * * Returns 0 on error. * Returns 1 on ok. * Returns 2 on ok and name in asis list * Returns 3 on ok and name in corps list */ int name_parse( newstr *outname, newstr *inname, list *asis, list *corps ) { list tokens; int ret = 1; newstr_empty( outname ); if ( !inname || !inname->len ) return ret; list_init( &tokens ); if ( asis && list_find( asis, inname->data ) !=-1 ) { newstr_newstrcpy( outname, inname ); ret = 2; goto out; } else if ( corps && list_find( corps, inname->data ) != -1 ) { newstr_newstrcpy( outname, inname ); ret = 3; goto out; } newstr_findreplace( inname, ",", ", " ); list_tokenize( &tokens, inname, " ", 1 ); if ( tokens.n==1 ) { newstr_newstrcpy( outname, inname ); ret = 2; } else { name_construct_multi( outname, &tokens, 0, tokens.n ); ret = 1; } out: list_free( &tokens ); return ret; } static char * name_copy( newstr *name, char *p ) { char *start, *end, *q; newstr_empty( name ); start = p = skip_ws( p ); /* strip tailing whitespace and commas */ while ( *p && *p!='|' ) p++; end = p; while ( is_ws( *end ) || *end==',' || *end=='|' || *end=='\0' ) end--; if ( *p=='|' ) p++; for ( q=start; q<=end; q++ ) newstr_addchar( name, *q ); return p; } /* * name_add( info, newtag, data, level ) * * take name(s) in data, multiple names should be separated by * '|' characters and divide into individual name, e.g. * "H. F. Author|W. G. Author|Q. X. Author" * * for each name, compare to names in the "as is" or "corporation" * lists...these are not personal names and should be added to the * bibliography fields directly and should not be mangled * * for each personal name, send to appropriate algorithm depending * on if the author name is in the format "H. F. Author" or * "Author, H. F." */ int name_add( fields *info, char *tag, char *q, int level, list *asis, list *corps ) { int ok, status, nametype, ret = 1; newstr inname, outname; list tokens; if ( !q ) return 0; list_init( &tokens ); newstrs_init( &inname, &outname, NULL ); while ( *q ) { q = name_copy( &inname, q ); nametype = name_parse( &outname, &inname, asis, corps ); if ( !nametype ) { ret = 0; goto out; } if ( nametype==1 ) { status = fields_add( info, tag, outname.data, level ); ok = ( status==FIELDS_OK ) ? 1 : 0; } else if ( nametype==2 ) ok = name_addsingleelement( info, tag, outname.data, level, 0 ); else ok = name_addsingleelement( info, tag, outname.data, level, 1 ); if ( !ok ) { ret = 0; goto out; } } out: newstrs_free( &inname, &outname, NULL ); list_free( &tokens ); return ret; } hs-bibutils-5.5/bibutils/newstr.c0000644000000000000000000004136412445605732015321 0ustar0000000000000000/* * newstr.c * * Version: 04/27/14 * * Copyright (c) Chris Putnam 1999-2014 * * Source code released under the GPL version 2 * * * routines for dynamically allocated strings * */ #include #include #include #include #include #include #include "newstr.h" #include "is_ws.h" /* Do not use asserts in NEWSTR_NOASSERT defined */ #ifdef NEWSTR_NOASSERT #define NDEBUG #endif #include #define newstr_initlen (64) /* Clear memory in resize/free if NEWSTR_PARANOIA defined */ #ifndef NEWSTR_PARANOIA static void newstr_realloc( newstr *s, unsigned long minsize ) { char *newptr; unsigned long size; assert( s ); size = 2 * s->dim; if (size < minsize) size = minsize; newptr = (char *) realloc( s->data, sizeof( *(s->data) )*size ); if ( !newptr ) { fprintf(stderr,"Error. Cannot reallocate memory (%ld bytes) in newstr_realloc.\n", sizeof(*(s->data))*size); exit( EXIT_FAILURE ); } s->data = newptr; s->dim = size; } /* define as a no-op */ #define newstr_nullify( s ) #else static void newstr_realloc( newstr *s, unsigned long minsize ) { char *newptr; unsigned long size; assert( s ); size = 2 * s->dim; if ( size < minsize ) size = minsize; newptr = (char *) malloc( sizeof( *(s->data) ) * size ); if ( !newptr ) { fprintf( stderr, "Error. Cannot reallocate memory (%d bytes)" " in newstr_realloc.\n", sizeof(*(s->data))*size ); exit( EXIT_FAILURE ); } if ( s->data ) { newstr_nullify( s ); free( s->data ); } s->data = newptr; s->dim = size; } static inline void newstr_nullify( newstr *s ) { memset( s->data, 0, s->dim ); } #endif void newstr_init( newstr *s ) { assert( s ); s->dim = 0; s->len = 0; s->data = NULL; } void newstr_initstr( newstr *s, const char *initstr ) { assert( s ); assert( initstr ); newstr_init( s ); newstr_strcpy( s, initstr ); } void newstrs_init( newstr *s, ... ) { newstr *s2; va_list ap; newstr_init( s ); va_start( ap, s ); do { s2 = va_arg( ap, newstr * ); if ( s2 ) newstr_init( s2 ); } while ( s2 ); va_end( ap ); } /* * This is currently a stub. Later it will * report whether or not a newstr function * could not be performed due to a memory * error. */ int newstr_memerr( newstr *s ) { return 0; } void newstr_mergestrs( newstr *s, ... ) { va_list ap; const char *cp; newstr_empty( s ); va_start( ap, s ); do { cp = va_arg( ap, const char * ); if ( cp ) newstr_strcat( s, cp ); } while ( cp ); va_end( ap ); } static void newstr_initalloc( newstr *s, unsigned long minsize ) { unsigned long size = newstr_initlen; assert( s ); if ( minsize > newstr_initlen ) size = minsize; s->data = (char *) malloc (sizeof( *(s->data) ) * size); if ( !s->data ) { fprintf(stderr,"Error. Cannot allocate memory in newstr_initalloc.\n"); exit( EXIT_FAILURE ); } s->data[0]='\0'; s->dim=size; s->len=0; } newstr * newstr_new( void ) { newstr *s = (newstr *) malloc( sizeof( *s ) ); if ( s ) newstr_initalloc( s, newstr_initlen ); return s; } void newstr_free( newstr *s ) { assert( s ); if ( s->data ) { newstr_nullify( s ); free( s->data ); } s->dim = 0; s->len = 0; s->data = NULL; } void newstrs_free( newstr *s, ... ) { newstr *s2; va_list ap; newstr_free( s ); va_start( ap, s ); do { s2 = va_arg( ap, newstr * ); if ( s2 ) newstr_free( s2 ); } while ( s2 ); va_end( ap ); } void newstr_delete( newstr *s ) { assert( s ); newstr_free( s ); free( s ); } void newstr_empty( newstr *s ) { assert( s ); if ( s->data ) { newstr_nullify( s ); s->data[0] = '\0'; } s->len = 0; } void newstrs_empty( newstr *s, ... ) { newstr *s2; va_list ap; newstr_empty( s ); va_start( ap, s ); do { s2 = va_arg( ap, newstr * ); if ( s2 ) newstr_empty( s2 ); } while ( s2 ); va_end( ap ); } void newstr_addchar( newstr *s, char newchar ) { assert( s ); if ( newchar=='\0' ) return; /* appending '\0' is a null operation */ if ( !s->data || s->dim==0 ) newstr_initalloc( s, newstr_initlen ); if ( s->len + 2 > s->dim ) newstr_realloc( s, s->len*2 ); s->data[s->len++] = newchar; s->data[s->len] = '\0'; } /* newstr_addutf8 * * Add potential multibyte character to s starting at pointer p. * Multibyte Unicode characters have the high bit set. * * Since we can progress more than one byte at p, return the * properly updated pointer p. */ const char * newstr_addutf8( newstr *s, const char *p ) { if ( ! ((*p) & 128 ) ) { newstr_addchar( s, *p ); p++; } else { while ( ((*p) & 128) ) { newstr_addchar( s, *p ); p++; } } return p; } void newstr_fprintf( FILE *fp, newstr *s ) { assert( s ); if ( s->data ) fprintf( fp, "%s", s->data ); } void newstr_prepend( newstr *s, const char *addstr ) { unsigned long lenaddstr, i; assert( s && addstr ); lenaddstr = strlen( addstr ); if ( lenaddstr==0 ) return; if ( !s->data || !s->dim ) newstr_initalloc( s, lenaddstr+1 ); else { if ( s->len + lenaddstr + 1 > s->dim ) newstr_realloc( s, s->len + lenaddstr + 1 ); for ( i=s->len+lenaddstr-1; i>=lenaddstr; i-- ) s->data[i] = s->data[i-lenaddstr]; } strncpy( s->data, addstr, lenaddstr ); s->len += lenaddstr; s->data[ s->len ] = '\0'; } static inline void newstr_strcat_ensurespace( newstr *s, unsigned long n ) { unsigned long m = s->len + n + 1; if ( !s->data || !s->dim ) newstr_initalloc( s, m ); else if ( s->len + n + 1 > s->dim ) newstr_realloc( s, m ); } static inline void newstr_strcat_internal( newstr *s, const char *addstr, unsigned long n ) { newstr_strcat_ensurespace( s, n ); strncat( &(s->data[s->len]), addstr, n ); s->len += n; s->data[s->len]='\0'; } void newstr_newstrcat( newstr *s, newstr *old ) { assert ( s && old ); if ( !old->data ) return; else newstr_strcat_internal( s, old->data, old->len ); } void newstr_strcat( newstr *s, const char *addstr ) { unsigned long n; assert( s && addstr ); n = strlen( addstr ); newstr_strcat_internal( s, addstr, n ); } void newstr_segcat( newstr *s, char *startat, char *endat ) { unsigned long n; char *p; assert( s && startat && endat ); assert( (size_t) startat < (size_t) endat ); if ( startat==endat ) return; n = 0; p = startat; while ( p!=endat ) { n++; p++; } newstr_strcat_internal( s, startat, n ); } void newstr_indxcat( newstr *s, char *p, unsigned long start, unsigned long stop ) { unsigned long i; assert( s && p ); assert( start <= stop ); for ( i=start; idata || !s->dim ) newstr_initalloc( s, m ); else if ( m > s->dim ) newstr_realloc( s, m ); } static inline void newstr_strcpy_internal( newstr *s, const char *p, unsigned long n ) { newstr_strcpy_ensurespace( s, n ); strncpy( s->data, p, n ); s->data[n] = '\0'; s->len = n; } void newstr_newstrcpy( newstr *s, newstr *old ) { assert( s ); if ( s==old ) return; else if ( !old || old->len==0 ) newstr_empty( s ); else newstr_strcpy_internal( s, old->data, old->len ); } void newstr_strcpy( newstr *s, const char *addstr ) { unsigned long n; assert( s && addstr ); n = strlen( addstr ); newstr_strcpy_internal( s, addstr, n ); } /* newstr_segcpy( s, start, end ); * * copies [start,end) into s */ void newstr_segcpy( newstr *s, char *startat, char *endat ) { unsigned long n; char *p; assert( s && startat && endat ); assert( ((size_t) startat) <= ((size_t) endat) ); if ( startat==endat ) { newstr_empty( s ); return; } n = 0; p = startat; while ( p!=endat ) { p++; n++; } newstr_strcpy_internal( s, startat, n ); } /* * newstr_indxcpy( s, in, start, stop ); * * copies in[start,stop) (excludes stop) into s */ void newstr_indxcpy( newstr *s, char *p, unsigned long start, unsigned long stop ) { unsigned long i; assert( s && p ); assert( start <= stop ); if ( start == stop ) { newstr_empty( s ); return; } newstr_strcpy_ensurespace( s, stop-start+1 ); for ( i=start; idata[i-start] = p[i]; s->len = stop-start; s->data[s->len] = '\0'; } newstr * newstr_strdup( const char *s1 ) { newstr *s2 = newstr_new(); if ( s2 ) newstr_strcpy( s2, s1 ); return s2; } void newstr_segdel( newstr *s, char *p, char *q ) { newstr tmp1, tmp2; char *r; assert( s ); r = &(s->data[s->len]); newstr_init( &tmp1 ); newstr_init( &tmp2 ); newstr_segcpy( &tmp1, s->data, p ); newstr_segcpy( &tmp2, q, r ); newstr_empty( s ); if ( tmp1.data ) newstr_strcat( s, tmp1.data ); if ( tmp2.data ) newstr_strcat( s, tmp2.data ); newstr_free( &tmp2 ); newstr_free( &tmp1 ); } /* * newstr_findreplace() * * if replace is "" or NULL, then delete find */ int newstr_findreplace( newstr *s, const char *find, const char *replace ) { long diff; size_t findstart, searchstart; size_t p1, p2; size_t find_len, rep_len, curr_len; char empty[2] = ""; unsigned long minsize; char *p; int n = 0; assert( s && find ); if ( !s->data || !s->dim ) return n; if ( !replace ) replace = empty; find_len = strlen( find ); rep_len = strlen( replace ); diff = rep_len - find_len; if ( diff < 0 ) diff = 0; searchstart=0; while ((p=strstr(s->data + searchstart,find))!=NULL) { curr_len = strlen(s->data); findstart=(size_t) p - (size_t) s->data; minsize = curr_len + diff + 1; if (s->dim <= minsize) newstr_realloc( s, minsize ); if ( find_len > rep_len ) { p1 = findstart + rep_len; p2 = findstart + find_len; while( s->data[p2] ) s->data[p1++]=s->data[p2++]; s->data[p1]='\0'; n++; } else if ( find_len < rep_len ) { for ( p1=curr_len; p1>=findstart+find_len; p1-- ) s->data[p1+diff] = s->data[p1]; n++; } for (p1=0; p1data[findstart+p1]=replace[p1]; searchstart = findstart + rep_len; s->len += rep_len - find_len; } return n; } /* newstr_fget() * returns 0 if we're done, 1 if we're not done * extracts line by line (regardless of end characters) * and feeds from buf.... */ int newstr_fget( FILE *fp, char *buf, int bufsize, int *pbufpos, newstr *outs ) { int bufpos = *pbufpos, done = 0; char *ok; assert( fp && outs ); newstr_empty( outs ); while ( !done ) { while ( buf[bufpos] && buf[bufpos]!='\r' && buf[bufpos]!='\n' ) newstr_addchar( outs, buf[bufpos++] ); if ( buf[bufpos]=='\0' ) { ok = fgets( buf, bufsize, fp ); bufpos=*pbufpos=0; if ( !ok && feof(fp) ) { /* end-of-file */ buf[bufpos] = 0; if ( outs->len==0 ) return 0; /*nothing in out*/ else return 1; /*one last out */ } } else if ( buf[bufpos]=='\r' || buf[bufpos]=='\n' ) done=1; } if ( ( buf[bufpos]=='\n' && buf[bufpos+1]=='\r') || ( buf[bufpos]=='\r' && buf[bufpos+1]=='\n') ) bufpos+=2; else if ( buf[bufpos]=='\n' || buf[bufpos]=='\r' ) bufpos+=1; *pbufpos = bufpos; return 1; } void newstr_toupper( newstr *s ) { unsigned long i; assert( s ); for ( i=0; ilen; ++i ) s->data[i] = toupper( (unsigned char)s->data[i] ); } void newstr_tolower( newstr *s ) { unsigned long i; assert( s ); for ( i=0; ilen; ++i ) s->data[i] = tolower( (unsigned char)s->data[i] ); } /* newstr_swapstrings( s1, s2 ) * be sneaky and swap internal newstring data from one * string to another */ void newstr_swapstrings( newstr *s1, newstr *s2 ) { char *tmpp; int tmp; assert( s1 && s2 ); /* swap dimensioning info */ tmp = s1->dim; s1->dim = s2->dim; s2->dim = tmp; /* swap length info */ tmp = s1->len; s1->len = s2->len; s2->len = tmp; /* swap data */ tmpp = s1->data; s1->data = s2->data; s2->data = tmpp; } void newstr_trimstartingws( newstr *s ) { char *p, *q; int n; assert( s ); if ( s->len==0 || !is_ws( s->data[0] ) ) return; n = 0; p = s->data; while ( is_ws( *p ) ) p++; q = s->data; while ( *p ) { *q++ = *p++; n++; } *q = '\0'; s->len = n; } void newstr_trimendingws( newstr *s ) { assert( s ); while ( s->len > 0 && is_ws( s->data[s->len-1] ) ) { s->data[s->len-1] = '\0'; s->len--; } } int newstr_match_first( newstr *s, char ch ) { assert( s ); if ( !s->len ) return 0; if ( s->data[0] == ch ) return 1; return 0; } int newstr_match_end( newstr *s, char ch ) { assert( s ); if ( !s->len ) return 0; if ( s->data[ s->len - 1 ] == ch ) return 1; return 0; } void newstr_trimbegin( newstr *s, unsigned long n ) { char *p, *q; assert( s ); if ( n==0 ) return; if ( s->len==0 ) return; if ( n >= s->len ) { newstr_empty( s ); return; } p = s->data; while ( n-- > 0 ) p++; n = 0; q = s->data; while ( *p ) { *q++ = *p++; n++; } *q = '\0'; s->len = n; } void newstr_trimend( newstr *s, unsigned long n ) { assert( s ); if ( n==0 ) return; if ( n >= s->len ) { newstr_empty( s ); return; } s->len -= n; s->data[ s->len ] = '\0'; } void newstr_pad( newstr *s, unsigned long len, char ch ) { unsigned long i; assert( s ); for ( i=s->len; i in->len ) max = in->len; for ( i=pos; idata[i] ); } static void newstr_check_case( newstr *s, int *lowercase, int *uppercase ) { int i; assert( s ); *lowercase = 0; *uppercase = 0; if ( s->len < 1 ) return; for ( i=0; ilen && !( *lowercase && *uppercase ); ++i ) { if ( isalpha( (unsigned char)s->data[i] ) ) { if ( isupper( (unsigned char)s->data[i] ) ) *uppercase += 1; else if ( islower( (unsigned char)s->data[i] ) ) *lowercase += 1; } } } int newstr_is_mixedcase( newstr *s ) { int lowercase, uppercase; newstr_check_case( s, &lowercase, &uppercase ); if ( lowercase > 0 && uppercase > 0 ) return 1; return 0; } int newstr_is_lowercase( newstr *s ) { int lowercase, uppercase; newstr_check_case( s, &lowercase, &uppercase ); if ( lowercase > 0 && uppercase == 0 ) return 1; return 0; } int newstr_is_uppercase( newstr *s ) { int lowercase, uppercase; newstr_check_case( s, &lowercase, &uppercase ); if ( lowercase == 0 && uppercase > 0 ) return 1; return 0; } void newstr_stripws( newstr *s ) { unsigned long len = 0; char *p, *q; assert( s ); if ( s->len ) { p = q = s->data; while ( *p ) { if ( !is_ws( *p ) ) { *q = *p; q++; len++; } p++; } *q = '\0'; } s->len = len; } int newstr_newstrcmp( const newstr *s, const newstr *t ) { assert( s ); assert( t ); if ( s->len == 0 && t->len == 0 ) return 0; if ( s->len == 0 ) return strcmp( "", t->data ); if ( t->len == 0 ) return strcmp( s->data, "" ); return strcmp( s->data, t->data ); } void newstr_reverse( newstr *s ) { unsigned long i, max; char tmp; assert( s ); max = s->len / 2; for ( i=0; idata[ i ]; s->data[ i ] = s->data[ s->len - 1 - i ]; s->data[ s->len - 1 - i ] = tmp; } } int newstr_fgetline( newstr *s, FILE *fp ) { int ch, eol = 0; assert( s ); assert( fp ); newstr_empty( s ); if ( feof( fp ) ) return 0; while ( !feof( fp ) && !eol ) { ch = fgetc( fp ); if ( ch == EOF ) { if ( s->len ) return 1; else return 0; } else if ( ch == '\n' ) eol = 1; else if ( ch == '\r' ) { ch = fgetc( fp ); if ( ch != '\n' ) ungetc( ch, fp ); eol = 1; } else { newstr_addchar( s, (char) ch ); } } return 1; } /* * s = "Hi!\0", s.len = 3 * * newstr_char( s, 0 ) = 'H' newstr_revchar( s, 0 ) = '!' * newstr_char( s, 1 ) = 'i' newstr_revchar( s, 1 ) = 'i' * newstr_char( s, 2 ) = '!' newstr_revchar( s, 2 ) = 'H' * newstr_char( s, 3 ) = '\0' newstr_revchar( s, 3 ) = '\0' */ char newstr_char( newstr *s, unsigned long n ) { assert( s ); if ( s->len==0 || n >= s->len ) return '\0'; return s->data[ n ]; } char newstr_revchar( newstr *s, unsigned long n ) { assert( s ); if ( s->len==0 || n >= s->len ) return '\0'; return s->data[ s->len - n - 1]; } void newstr_makepath( newstr *path, const char *dirname, const char *filename, char sep ) { assert( path ); if ( dirname ) newstr_strcpy( path, dirname ); else newstr_empty( path ); if ( path->len && path->data[path->len-1]!=sep ) newstr_addchar( path, sep ); if ( filename ) newstr_strcat( path, filename ); } hs-bibutils-5.5/bibutils/fields.c0000644000000000000000000002363712445605732015250 0ustar0000000000000000/* * fields.c * * Copyright (c) Chris Putnam 2003-2013 * * Source code released under the GPL version 2 * */ #include #include #include #include #include "fields.h" fields* fields_new( void ) { fields *f = ( fields * ) malloc( sizeof( fields ) ); if ( f ) fields_init( f ); return f; } void fields_init( fields *f ) { f->used = NULL; f->level = NULL; f->tag = NULL; f->data = NULL; f->max = f->n = 0; } void fields_free( fields *f ) { int i; for ( i=0; imax; ++i ) { newstr_free( &(f->tag[i]) ); newstr_free( &(f->data[i]) ); } if ( f->tag ) free( f->tag ); if ( f->data ) free( f->data ); if ( f->used ) free( f->used ); if ( f->level ) free( f->level ); fields_init( f ); } static int fields_alloc( fields *f ) { int i, alloc = 20; f->tag = (newstr *) malloc( sizeof(newstr) * alloc ); f->data = (newstr *) malloc( sizeof(newstr) * alloc ); f->used = (int *) calloc( alloc, sizeof(int) ); f->level = (int *) calloc( alloc, sizeof(int) ); if ( !f->tag || !f->data || !f->used || !f->level ){ if ( f->tag ) free( f->tag ); if ( f->data ) free( f->data ); if ( f->used ) free( f->used ); if ( f->level ) free( f->level ); fields_init( f ); return FIELDS_ERR; } f->max = alloc; f->n = 0; for ( i=0; itag[i]) ); newstr_init( &(f->data[i]) ); } return FIELDS_OK; } static int fields_realloc( fields *f ) { newstr *newtags, *newdata; int *newused, *newlevel; int i, alloc = f->max * 2; newtags = (newstr*) realloc( f->tag, sizeof(newstr) * alloc ); newdata = (newstr*) realloc( f->data, sizeof(newstr) * alloc ); newused = (int*) realloc( f->used, sizeof(int) * alloc ); newlevel= (int*) realloc( f->level, sizeof(int) * alloc ); if ( newtags ) f->tag = newtags; if ( newdata ) f->data = newdata; if ( newused ) f->used = newused; if ( newlevel ) f->level = newlevel; if ( !newtags || !newdata || !newused || !newlevel ) return FIELDS_ERR; f->max = alloc; for ( i=f->n; itag[i]) ); newstr_init( &(f->data[i]) ); } return FIELDS_OK; } int fields_add( fields *f, char *tag, char *data, int level ) { int i, status, found; if ( !tag || !data ) return FIELDS_OK; if ( f->max==0 ) { status = fields_alloc( f ); if ( status!=FIELDS_OK ) return status; } else if ( f->n >= f->max ) { status = fields_realloc( f ); if ( status!=FIELDS_OK ) return status; } /* Don't duplicate identical entries */ found = 0; for ( i=0; in && !found; ++i ) { if ( f->level[i]==level && !strcasecmp( f->tag[i].data, tag ) && !strcasecmp( f->data[i].data, data ) ) found = 1; } if ( !found ) { f->used[ f->n ] = 0; f->level[ f->n ] = level; newstr_strcpy( &(f->tag[f->n]), tag ); newstr_strcpy( &(f->data[f->n]), data ); if ( newstr_memerr( &(f->tag[f->n]) ) || newstr_memerr( &(f->data[f->n] ) ) ) return FIELDS_ERR; f->n++; } return FIELDS_OK; } int fields_add_tagsuffix( fields *f, char *tag, char *suffix, char *data, int level ) { newstr newtag; int ret; newstr_init( &newtag ); newstr_mergestrs( &newtag, tag, suffix, NULL ); if ( newstr_memerr( &newtag ) ) ret = FIELDS_ERR; else ret = fields_add( f, newtag.data, data, level ); newstr_free( &newtag ); return ret; } /* fields_match_level() * * returns 1 if level matched, 0 if not * * level==LEVEL_ANY is a special flag meaning any level can match */ inline int fields_match_level( fields *f, int n, int level ) { if ( level==LEVEL_ANY ) return 1; if ( fields_level( f, n )==level ) return 1; return 0; } /* fields_match_tag() * * returns 1 if tag matches, 0 if not * */ inline int fields_match_tag( fields *info, int n, char *tag ) { if ( !strcmp( fields_tag( info, n, FIELDS_CHRP ), tag ) ) return 1; return 0; } inline int fields_match_casetag( fields *info, int n, char *tag ) { if ( !strcasecmp( fields_tag( info, n, FIELDS_CHRP ), tag ) ) return 1; return 0; } inline int fields_match_tag_level( fields *info, int n, char *tag, int level ) { if ( !fields_match_level( info, n, level ) ) return 0; return fields_match_tag( info, n, tag ); } inline int fields_match_casetag_level( fields *info, int n, char *tag, int level ) { if ( !fields_match_level( info, n, level ) ) return 0; return fields_match_casetag( info, n, tag ); } /* fields_find() * * Return position [0,f->n) for match of the tag. * Return -1 if tag isn't found. */ int fields_find( fields *f, char *tag, int level ) { int i; for ( i=0; in; ++i ) { if ( !fields_match_casetag_level( f, i, tag, level ) ) continue; if ( f->data[i].len ) return i; else { /* if there is no data for the tag, don't "find" it */ /* and set "used" so noise is suppressed */ f->used[i] = 1; } } return -1; } int fields_maxlevel( fields *f ) { int i, max = 0; if ( f->n ) { max = f->level[0]; for ( i=1; in; ++i ) { if ( f->level[i] > max ) max = f->level[i]; } } return max; } void fields_clearused( fields *f ) { int i; for ( i=0; in; ++i ) f->used[i] = 0; } void fields_setused( fields *f, int n ) { if ( n >= 0 && n < f->n ) f->used[n] = 1; } /* fields_replace_or_add() * * return FIELDS_OK on success, FIELDS_ERR on memory error */ int fields_replace_or_add( fields *f, char *tag, char *data, int level ) { int n = fields_find( f, tag, level ); if ( n==-1 ) return fields_add( f, tag, data, level ); else { newstr_strcpy( &(f->data[n]), data ); if ( newstr_memerr( &(f->data[n]) ) ) return FIELDS_ERR; return FIELDS_OK; } } char *fields_null_value = "\0"; inline int fields_used( fields *f, int n ) { if ( n >= 0 && n < f->n ) return f->used[n]; else return 0; } inline int fields_nodata( fields *f, int n ) { newstr *d; if ( n >= 0 && n < f->n ) { d = &( f->data[n] ); if ( d->len > 0 ) return 0; return 1; } else { return 1; } } inline int fields_num( fields *f ) { return f->n; } /* * #define FIELDS_CHRP * #define FIELDS_STRP * #define FIELDS_CHRP_NOLEN * #define FIELDS_STRP_NOLEN * * If the length of the tagged value is zero and the mode is * FIELDS_STRP_NOLEN or FIELDS_CHRP_NOLEN, return a pointer to * a static null string as the data field could be new due to * the way newstr handles initialized strings with no data. * */ void * fields_value( fields *f, int n, int mode ) { intptr_t retn; if ( n<0 || n>= f->n ) return NULL; if ( mode & FIELDS_SETUSE_FLAG ) fields_setused( f, n ); if ( mode & FIELDS_STRP_FLAG ) return &(f->data[n]); else if ( mode & FIELDS_POSP_FLAG ) { retn = n; return ( void * ) retn; /* Rather pointless */ } else { if ( f->data[n].len ) return f->data[n].data; else return fields_null_value; } } void * fields_tag( fields *f, int n, int mode ) { intptr_t retn; if ( n<0 || n>= f->n ) return NULL; if ( mode & FIELDS_STRP_FLAG ) return &(f->tag[n]); else if ( mode & FIELDS_POSP_FLAG ) { retn = n; return ( void * ) retn; /* Rather pointless */ } else { if ( f->tag[n].len ) return f->tag[n].data; else return fields_null_value; } } int fields_level( fields *f, int n ) { if ( n<0 || n>= f->n ) return 0; return f->level[n]; } void * fields_findv( fields *f, int level, int mode, char *tag ) { int i, found = -1; intptr_t retn; for ( i=0; in && found==-1; ++i ) { if ( !fields_match_level( f, i, level ) ) continue; if ( !fields_match_casetag( f, i, tag ) ) continue; if ( f->data[i].len!=0 ) found = i; else { if ( mode & FIELDS_NOLENOK_FLAG ) { return (void *) fields_null_value; } else if ( mode & FIELDS_SETUSE_FLAG ) { f->used[i] = 1; /* Suppress "noise" of unused */ } } } if ( found==-1 ) return NULL; if ( mode & FIELDS_SETUSE_FLAG ) fields_setused( f, found ); if ( mode & FIELDS_STRP_FLAG ) return (void *) &(f->data[found]); else if ( mode & FIELDS_POSP_FLAG ) { retn = found; return (void *) retn; } else return (void *) f->data[found].data; } void * fields_findv_firstof( fields *f, int level, int mode, ... ) { char *tag, *value; va_list argp; va_start( argp, mode ); while ( ( tag = ( char * ) va_arg( argp, char * ) ) ) { value = fields_findv( f, level, mode, tag ); if ( value ) { va_end( argp ); return value; } } va_end( argp ); return NULL; } static void fields_findv_each_add( fields *f, int mode, int n, vplist *a ) { intptr_t retn; if ( n<0 || n>= f->n ) return; if ( mode & FIELDS_SETUSE_FLAG ) fields_setused( f, n ); if ( mode & FIELDS_STRP_FLAG ) { vplist_add( a, (void *) &(f->data[n]) ); } else if ( mode & FIELDS_POSP_FLAG ) { retn = n; vplist_add( a, (void *) retn ); } else { vplist_add( a, (void *) f->data[n].data ); } } void fields_findv_each( fields *f, int level, int mode, vplist *a, char *tag ) { int i; for ( i=0; in; ++i ) { if ( !fields_match_level( f, i, level ) ) continue; if ( !fields_match_casetag( f, i, tag ) ) continue; if ( f->data[i].len!=0 ) { fields_findv_each_add( f, mode, i, a ); } else { if ( mode & FIELDS_NOLENOK_FLAG ) { fields_findv_each_add( f, mode, i, a ); } else { f->used[i] = 1; /* Suppress "noise" of unused */ } } } } void fields_findv_eachof( fields *f, int level, int mode, vplist *a, ... ) { va_list argp; vplist tags; char *tag; int i, j, found; vplist_init( &tags ); /* build list of tags to search for */ va_start( argp, a ); while ( ( tag = ( char * ) va_arg( argp, char * ) ) ) vplist_add( &tags, tag ); va_end( argp ); /* search list */ for ( i=0; in; ++i ) { if ( !fields_match_level( f, i, level ) ) continue; found = 0; for ( j=0; jdata[i].len!=0 ) { fields_findv_each_add( f, mode, i, a ); } else { if ( mode & FIELDS_NOLENOK_FLAG ) { fields_findv_each_add( f, mode, i, a ); } else { f->used[i] = 1; /* Suppress "noise" of unused */ } } } vplist_free( &tags ); } hs-bibutils-5.5/bibutils/modstypes.h0000644000000000000000000000076712445605732016035 0ustar0000000000000000/* * modstypes.h * * Copyright (c) Chris Putnam 2008-2013 * * Source code released under the GPL version 2 * */ #ifndef MODSTYPES_H #define MODSTYPES_H typedef struct convert { char *mods; /* old */ char *internal; /* new */ int code; } convert; extern convert identifier_types[]; extern int nidentifier_types; extern char *mods_find_attrib( char *internal_name, convert *data, int ndata ); extern char *mods_find_internal( char *mods_name, convert *data, int ndata ); #endif hs-bibutils-5.5/bibutils/endtypes.c0000644000000000000000000015750712445605732015641 0ustar0000000000000000/* * endtypes.c * * Copyright (c) Chris Putnam 2003-2013 * * Program and source code released under the GPL version 2 * */ #include #include #include "is_ws.h" #include "fields.h" #include "reftypes.h" /* if no specific type can be identified */ static lookups generic[] = { { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN }, { "%A", "AUTHOR", PERSON, LEVEL_MAIN }, { "%H", "TRANSLATOR",PERSON, LEVEL_MAIN }, { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN }, { "%D", "YEAR", SIMPLE, LEVEL_MAIN }, { "%T", "TITLE" , TITLE, LEVEL_MAIN }, { "%J", "TITLE", TITLE, LEVEL_HOST }, /* for refer formats */ { "%E", "2ND_AUTHOR",PERSON, LEVEL_MAIN }, { "%B", "2ND_TITLE", SIMPLE, LEVEL_MAIN }, { "%C", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "%I", "PUBLISHER", SIMPLE, LEVEL_MAIN }, { "%V", "VOLUME" , SIMPLE, LEVEL_MAIN }, { "%6", "NUMVOLUMES",SIMPLE, LEVEL_HOST }, { "%N", "NUMBER", SIMPLE, LEVEL_MAIN }, { "%P", "PAGES", PAGES, LEVEL_MAIN }, { "%&", "SECTION", SIMPLE, LEVEL_MAIN }, { "%Y", "AUTHOR", PERSON, LEVEL_SERIES }, { "%S", "TITLE", TITLE, LEVEL_SERIES }, { "%7", "EDITION", SIMPLE, LEVEL_MAIN }, { "%8", "MONTH", DATE, LEVEL_MAIN }, { "%9", "GENRE", SIMPLE, LEVEL_MAIN }, { "%?", "SUB_AUTHOR", PERSON, LEVEL_MAIN }, /* subsidiary-authors */ { "%!", "SHORTTITLE", TITLE, LEVEL_MAIN }, { "%@", "SERIALNUMBER", SERIALNO, LEVEL_MAIN }, { "%(", "TITLE", SIMPLE, LEVEL_ORIG }, /* original pub */ { "%)", "REPRINTEDITION",SIMPLE,LEVEL_MAIN }, { "%*", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, { "%1", "CUSTOM1", NOTES, LEVEL_MAIN }, { "%2", "CUSTOM2", NOTES, LEVEL_MAIN }, { "%3", "CUSTOM3", NOTES, LEVEL_MAIN }, { "%4", "CUSTOM4", NOTES, LEVEL_MAIN }, { "%#", "CUSTOM5", NOTES, LEVEL_MAIN }, { "%$", "CUSTOM6", NOTES, LEVEL_MAIN }, { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN }, { "%L", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, { "%F", "REFNUM", SIMPLE, LEVEL_MAIN }, { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN }, { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "%O", "NOTES", NOTES, LEVEL_MAIN }, { "%U", "URL", SIMPLE, LEVEL_MAIN }, { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN }, { "%Z", "NOTES", SIMPLE, LEVEL_MAIN }, { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */ { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "%+", "AUTHORADDRESS",SIMPLE, LEVEL_MAIN }, { "%^", "CAPTION", SIMPLE, LEVEL_MAIN }, { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN }, { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN }, { "%~", "DATABASE", SIMPLE, LEVEL_MAIN } }; static lookups journalarticle[] = { { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN }, { "%A", "AUTHOR", PERSON, LEVEL_MAIN }, { "%H", "TRANSLATOR", PERSON, LEVEL_MAIN }, { "%Q", "TRANSLATEDTITLE",SIMPLE, LEVEL_MAIN }, { "%D", "PARTYEAR", SIMPLE, LEVEL_MAIN }, { "%T", "TITLE" , TITLE, LEVEL_MAIN }, { "%J", "TITLE", TITLE, LEVEL_HOST }, /* journal title */ { "%B", "TITLE", TITLE, LEVEL_HOST }, /* journal title */ { "%C", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "%V", "VOLUME" , SIMPLE, LEVEL_MAIN }, { "%N", "ISSUE", SIMPLE, LEVEL_MAIN }, { "%P", "PAGES", PAGES, LEVEL_MAIN }, { "%I", "PUBLISHER", SIMPLE, LEVEL_HOST }, { "%8", "PARTMONTH", DATE, LEVEL_MAIN }, { "%9", "GENRE", SIMPLE, LEVEL_MAIN }, { "%!", "SHORTTITLE", TITLE, LEVEL_MAIN }, { "%@", "SERIALNUMBER", SERIALNO, LEVEL_HOST }, { "%(", "TITLE", SIMPLE, LEVEL_ORIG }, /* original pub */ { "%)", "REPRINTEDITION",SIMPLE, LEVEL_MAIN }, { "%*", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN }, { "%L", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, { "%F", "REFNUM", SIMPLE, LEVEL_MAIN }, { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN }, { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "%U", "URL", SIMPLE, LEVEL_MAIN }, { "%O", "NOTES", NOTES, LEVEL_MAIN }, { "%Z", "NOTES", NOTES, LEVEL_MAIN }, { "%1", "CUSTOM1", NOTES, LEVEL_MAIN }, { "%2", "CUSTOM2", NOTES, LEVEL_MAIN }, { "%3", "CUSTOM3", NOTES, LEVEL_MAIN }, { "%4", "CUSTOM4", NOTES, LEVEL_MAIN }, { "%#", "CUSTOM5", NOTES, LEVEL_MAIN }, { "%$", "CUSTOM6", NOTES, LEVEL_MAIN }, { "%+", "AUTHORADDRESS",SIMPLE, LEVEL_MAIN }, { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN }, { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */ { "%^", "CAPTION", SIMPLE, LEVEL_MAIN }, { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN }, { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN }, { "%~", "DATABASE", SIMPLE, LEVEL_MAIN }, { " ", "ISSUANCE|continuing", ALWAYS, LEVEL_HOST }, { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { " ", "GENRE|journal article", ALWAYS, LEVEL_MAIN }, { " ", "GENRE|periodical", ALWAYS, LEVEL_HOST }, { " ", "GENRE|academic journal", ALWAYS, LEVEL_HOST } }; static lookups magazinearticle[] = { { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN }, { "%A", "AUTHOR", PERSON, LEVEL_MAIN }, { "%H", "TRANSLATOR",PERSON, LEVEL_MAIN }, { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN }, { "%D", "PARTYEAR", SIMPLE, LEVEL_MAIN }, { "%T", "TITLE", TITLE, LEVEL_MAIN }, { "%J", "TITLE", TITLE, LEVEL_HOST }, /* magazine name */ { "%B", "TITLE", TITLE, LEVEL_HOST }, /* magazine name */ { "%C", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "%V", "VOLUME", SIMPLE, LEVEL_MAIN }, { "%N", "ISSUE", SIMPLE, LEVEL_MAIN }, { "%P", "PAGES", PAGES, LEVEL_MAIN }, { "%I", "PUBLISHER", SIMPLE, LEVEL_HOST }, { "%8", "PARTMONTH", DATE, LEVEL_MAIN }, { "%!", "SHORTTITLE",TITLE, LEVEL_MAIN }, { "%@", "SERIALNUMBER", SERIALNO,LEVEL_HOST }, { "%(", "TITLE", SIMPLE, LEVEL_ORIG }, /* original pub */ { "%)", "REPRINTEDITION",SIMPLE,LEVEL_MAIN }, { "%*", "REVIEWEDITEM",SIMPLE,LEVEL_MAIN }, { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN }, { "%L", "CALLNUMBER",SIMPLE, LEVEL_MAIN }, { "%F", "REFNUM", SIMPLE, LEVEL_MAIN }, { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN }, { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "%U", "URL", SIMPLE, LEVEL_MAIN }, { "%O", "NOTES", SIMPLE, LEVEL_MAIN }, { "%Z", "NOTES", SIMPLE, LEVEL_MAIN }, { "%1", "CUSTOM1", NOTES, LEVEL_MAIN }, { "%2", "CUSTOM2", NOTES, LEVEL_MAIN }, { "%3", "CUSTOM3", NOTES, LEVEL_MAIN }, { "%4", "CUSTOM4", NOTES, LEVEL_MAIN }, { "%#", "CUSTOM5", NOTES, LEVEL_MAIN }, { "%$", "CUSTOM6", NOTES, LEVEL_MAIN }, { "%+", "AUTHORADDRESS",SIMPLE,LEVEL_MAIN }, { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN }, { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */ { "%^", "CAPTION", SIMPLE, LEVEL_MAIN }, { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN }, { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN }, { "%~", "DATABASE", SIMPLE, LEVEL_MAIN }, { " ", "ISSUANCE|continuing", ALWAYS, LEVEL_HOST }, { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { " ", "GENRE|periodical", ALWAYS, LEVEL_HOST }, { " ", "GENRE|magazine", ALWAYS, LEVEL_HOST } }; static lookups newspaperarticle[] = { { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN }, { "%A", "REPORTER", PERSON, LEVEL_MAIN }, { "%H", "TRANSLATOR",PERSON, LEVEL_MAIN }, { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN }, { "%D", "PARTYEAR", SIMPLE, LEVEL_MAIN }, { "%T", "TITLE" , TITLE, LEVEL_MAIN }, { "%J", "TITLE", TITLE, LEVEL_HOST }, /* newspaper name */ { "%B", "TITLE", TITLE, LEVEL_HOST }, /* newspaper name */ { "%V", "VOLUME" , SIMPLE, LEVEL_MAIN }, { "%C", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "%N", "ISSUE", SIMPLE, LEVEL_MAIN }, { "%P", "PAGES", PAGES, LEVEL_MAIN }, { "%7", "EDITION", SIMPLE, LEVEL_MAIN }, { "%8", "PARTMONTH", DATE, LEVEL_MAIN }, { "%!", "SHORTTITLE",TITLE, LEVEL_MAIN }, { "%@", "SERIALNUMBER", SERIALNO, LEVEL_MAIN }, { "%(", "TITLE", SIMPLE, LEVEL_ORIG }, /* original pub */ { "%)", "REPRINTEDITION",SIMPLE, LEVEL_MAIN }, { "%*", "REVIEWEDITEM",SIMPLE,LEVEL_MAIN }, { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN }, { "%L", "CALLNUMBER",SIMPLE, LEVEL_MAIN }, { "%F", "REFNUM", SIMPLE, LEVEL_MAIN }, { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN }, { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "%U", "URL", SIMPLE, LEVEL_MAIN }, { "%O", "NOTES", SIMPLE, LEVEL_MAIN }, { "%Z", "NOTES", SIMPLE, LEVEL_MAIN }, { "%1", "CUSTOM1", NOTES, LEVEL_MAIN }, { "%2", "CUSTOM2", NOTES, LEVEL_MAIN }, { "%3", "CUSTOM3", NOTES, LEVEL_MAIN }, { "%4", "CUSTOM4", NOTES, LEVEL_MAIN }, { "%#", "CUSTOM5", NOTES, LEVEL_MAIN }, { "%$", "CUSTOM6", NOTES, LEVEL_MAIN }, { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */ { "%+", "AUTHORADDRESS",SIMPLE,LEVEL_MAIN }, { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN }, { "%^", "CAPTION", SIMPLE, LEVEL_MAIN }, { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN }, { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN }, { "%~", "DATABASE", SIMPLE, LEVEL_MAIN }, { " ", "ISSUANCE|continuing", ALWAYS, LEVEL_HOST }, { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { " ", "GENRE|newspaper", ALWAYS, LEVEL_HOST } }; static lookups book[] = { { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN }, { "%A", "AUTHOR", PERSON, LEVEL_MAIN }, { "%H", "TRANSLATOR",PERSON, LEVEL_MAIN }, { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN }, { "%D", "YEAR", SIMPLE, LEVEL_MAIN }, { "%T", "TITLE" , TITLE, LEVEL_MAIN }, { "%E", "AUTHOR", PERSON, LEVEL_HOST }, /* SERIES_AUTHOR */ { "%B", "TITLE", TITLE, LEVEL_HOST }, /* SERIES_TITLE */ { "%S", "TITLE", TITLE, LEVEL_SERIES }, { "%C", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "%I", "PUBLISHER", SIMPLE, LEVEL_MAIN }, { "%V", "VOLUME" , SIMPLE, LEVEL_MAIN }, { "%N", "NUMBER", SIMPLE, LEVEL_MAIN }, { "%6", "NUMVOLUMES",SIMPLE, LEVEL_MAIN }, { "%P", "TOTALPAGES", SIMPLE,LEVEL_MAIN }, { "%7", "EDITION", SIMPLE, LEVEL_MAIN }, { "%?", "TRANSLATOR",PERSON, LEVEL_MAIN }, { "%!", "SHORTTITLE",TITLE, LEVEL_MAIN }, { "%@", "SERIALNUMBER", SERIALNO, LEVEL_MAIN }, { "%(", "TITLE", SIMPLE, LEVEL_ORIG }, /* original pub */ { "%)", "REPRINTEDITION",SIMPLE,LEVEL_MAIN }, { "%1", "CUSTOM1", NOTES, LEVEL_MAIN }, { "%2", "CUSTOM2", NOTES, LEVEL_MAIN }, { "%3", "CUSTOM3", NOTES, LEVEL_MAIN }, { "%4", "CUSTOM4", NOTES, LEVEL_MAIN }, { "%#", "CUSTOM5", NOTES, LEVEL_MAIN }, { "%$", "CUSTOM6", NOTES, LEVEL_MAIN }, { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN }, { "%L", "CALLNUMBER",SIMPLE, LEVEL_MAIN }, { "%F", "REFNUM", SIMPLE, LEVEL_MAIN }, { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN }, { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "%O", "NOTES", NOTES, LEVEL_MAIN }, { "%U", "URL", SIMPLE, LEVEL_MAIN }, { "%Z", "NOTES", SIMPLE, LEVEL_MAIN }, { "%+", "AUTHORADDRESS",SIMPLE, LEVEL_MAIN }, { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN }, { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */ { "%^", "CAPTION", SIMPLE, LEVEL_MAIN }, { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN }, { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN }, { "%~", "DATABASE", SIMPLE, LEVEL_MAIN }, { " ", "GENRE|book", ALWAYS, LEVEL_MAIN }, { " ", "ISSUANCE|monographic", ALWAYS, LEVEL_MAIN }, { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN } }; static lookups booksection[] = { { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN }, { "%A", "AUTHOR", PERSON, LEVEL_MAIN }, { "%H", "TRANSLATOR",PERSON, LEVEL_MAIN }, { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN }, { "%D", "YEAR", SIMPLE, LEVEL_HOST }, { "%T", "TITLE" , TITLE, LEVEL_MAIN }, { "%E", "EDITOR", PERSON, LEVEL_HOST }, /* editor for book */ { "%B", "TITLE", TITLE, LEVEL_HOST }, /* book title */ { "%C", "ADDRESS", SIMPLE, LEVEL_HOST }, { "%I", "PUBLISHER", SIMPLE, LEVEL_HOST }, { "%N", "NUMBER", SIMPLE, LEVEL_HOST }, { "%V", "VOLUME" , SIMPLE, LEVEL_MAIN }, { "%6", "NUMVOLUMES",SIMPLE, LEVEL_HOST }, { "%P", "PAGES", PAGES, LEVEL_MAIN }, { "%Y", "EDITOR", PERSON, LEVEL_SERIES }, { "%S", "TITLE", TITLE, LEVEL_SERIES }, { "%7", "EDITION", SIMPLE, LEVEL_HOST }, { "%?", "TRANSLATOR",PERSON, LEVEL_HOST }, { "%!", "SHORTTITLE",TITLE, LEVEL_MAIN }, { "%@", "SERIALNUMBER", SERIALNO, LEVEL_HOST }, { "%(", "TITLE", SIMPLE, LEVEL_ORIG }, /* original pub */ { "%)", "REPRINTEDITION",SIMPLE,LEVEL_HOST }, { "%1", "CUSTOM1", NOTES, LEVEL_MAIN }, { "%2", "CUSTOM2", NOTES, LEVEL_MAIN }, { "%3", "CUSTOM3", NOTES, LEVEL_MAIN }, { "%4", "CUSTOM4", NOTES, LEVEL_MAIN }, { "%#", "CUSTOM5", NOTES, LEVEL_MAIN }, { "%$", "CUSTOM6", NOTES, LEVEL_MAIN }, { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN }, { "%L", "CALLNUMBER",SIMPLE, LEVEL_MAIN }, { "%F", "REFNUM", SIMPLE, LEVEL_MAIN }, { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN }, { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "%O", "NOTES", NOTES, LEVEL_MAIN }, { "%U", "URL", SIMPLE, LEVEL_MAIN }, { "%Z", "NOTES", SIMPLE, LEVEL_MAIN }, { "%+", "AUTHORADDRESS",SIMPLE, LEVEL_MAIN }, { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN }, { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */ { "%^", "CAPTION", SIMPLE, LEVEL_MAIN }, { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN }, { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN }, { "%~", "DATABASE", SIMPLE, LEVEL_MAIN }, { " ", "GENRE|book chapter", ALWAYS, LEVEL_MAIN }, { " ", "GENRE|book", ALWAYS, LEVEL_HOST }, { " ", "ISSUANCE|monographic", ALWAYS, LEVEL_HOST }, { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN } }; static lookups editedbook[] = { { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN }, { "%A", "EDITOR", PERSON, LEVEL_MAIN }, { "%H", "TRANSLATOR",PERSON, LEVEL_MAIN }, { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN }, { "%D", "YEAR", SIMPLE, LEVEL_MAIN }, { "%T", "TITLE" , TITLE, LEVEL_MAIN }, { "%E", "EDITOR", PERSON, LEVEL_HOST }, /* SERIES_EDITOR */ { "%B", "TITLE", TITLE, LEVEL_HOST }, /* SERIES_TITLE */ { "%C", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "%I", "PUBLISHER", SIMPLE, LEVEL_MAIN }, { "%N", "NUMBER", SIMPLE, LEVEL_MAIN }, { "%V", "VOLUME" , SIMPLE, LEVEL_MAIN }, { "%6", "NUMVOLUMES",SIMPLE, LEVEL_HOST }, { "%P", "TOTALPAGES", SIMPLE,LEVEL_MAIN }, { "%7", "EDITION", SIMPLE, LEVEL_MAIN }, { "%?", "TRANSLATOR",PERSON, LEVEL_MAIN }, { "%!", "SHORTTITLE",TITLE, LEVEL_MAIN }, { "%@", "SERIALNUMBER", SERIALNO, LEVEL_MAIN }, { "%(", "TITLE", SIMPLE, LEVEL_ORIG }, /* original pub */ { "%)", "REPRINTEDITION",SIMPLE,LEVEL_MAIN }, { "%1", "CUSTOM1", NOTES, LEVEL_MAIN }, { "%2", "CUSTOM2", NOTES, LEVEL_MAIN }, { "%3", "CUSTOM3", NOTES, LEVEL_MAIN }, { "%4", "CUSTOM4", NOTES, LEVEL_MAIN }, { "%#", "CUSTOM5", NOTES, LEVEL_MAIN }, { "%$", "CUSTOM6", NOTES, LEVEL_MAIN }, { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN }, { "%L", "CALLNUMBER",SIMPLE, LEVEL_MAIN }, { "%F", "REFNUM", SIMPLE, LEVEL_MAIN }, { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN }, { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "%O", "NOTES", NOTES, LEVEL_MAIN }, { "%U", "URL", SIMPLE, LEVEL_MAIN }, { "%Z", "NOTES", NOTES, LEVEL_MAIN }, { "%+", "AUTHORADDRESS",SIMPLE, LEVEL_MAIN }, { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN }, { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */ { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "%^", "CAPTION", SIMPLE, LEVEL_MAIN }, { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN }, { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN }, { "%~", "DATABASE", SIMPLE, LEVEL_MAIN }, { " ", "GENRE|book", ALWAYS, LEVEL_MAIN }, { " ", "ISSUANCE|monographic", ALWAYS, LEVEL_MAIN }, { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN } }; static lookups manuscript[] = { { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN }, { "%A", "AUTHOR", PERSON, LEVEL_MAIN }, { "%H", "TRANSLATOR",PERSON, LEVEL_MAIN }, { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN }, { "%D", "YEAR", SIMPLE, LEVEL_MAIN }, { "%T", "TITLE", TITLE, LEVEL_MAIN }, { "%B", "TITLE", TITLE, LEVEL_HOST }, /* COLLECTION_TITLE */ { "%C", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "%N", "NUMBER", SIMPLE, LEVEL_MAIN }, { "%P", "PAGES", PAGES, LEVEL_MAIN }, { "%8", "MONTH", DATE, LEVEL_MAIN }, { "%9", "GENRE", SIMPLE, LEVEL_MAIN }, { "%!", "SHORTTITLE",TITLE, LEVEL_MAIN }, { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN }, { "%L", "CALLNUMBER",SIMPLE, LEVEL_MAIN }, { "%F", "REFNUM", SIMPLE, LEVEL_MAIN }, { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN }, { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "%O", "NOTES", NOTES, LEVEL_MAIN }, { "%U", "URL", SIMPLE, LEVEL_MAIN }, { "%Z", "NOTES", NOTES, LEVEL_MAIN }, { "%1", "CUSTOM1", NOTES, LEVEL_MAIN }, { "%2", "CUSTOM2", NOTES, LEVEL_MAIN }, { "%3", "CUSTOM3", NOTES, LEVEL_MAIN }, { "%4", "CUSTOM4", NOTES, LEVEL_MAIN }, { "%#", "CUSTOM5", NOTES, LEVEL_MAIN }, { "%$", "CUSTOM6", NOTES, LEVEL_MAIN }, { "%+", "AUTHORADDRESS",SIMPLE,LEVEL_MAIN}, { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN }, { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */ { "%^", "CAPTION", SIMPLE, LEVEL_MAIN }, { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN }, { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN }, { "%~", "DATABASE", SIMPLE, LEVEL_MAIN }, { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { " ", "GENRE|manuscript", ALWAYS, LEVEL_MAIN } }; static lookups communication[] = { { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN }, { "%A", "AUTHOR", PERSON, LEVEL_MAIN }, { "%H", "TRANSLATOR",PERSON, LEVEL_MAIN }, { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN }, { "%D", "YEAR", SIMPLE, LEVEL_MAIN }, { "%T", "TITLE" , TITLE, LEVEL_MAIN }, { "%E", "RECIPIENT", PERSON, LEVEL_MAIN }, { "%C", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "%V", "VOLUME", SIMPLE, LEVEL_MAIN }, { "%I", "PUBLISHER", SIMPLE, LEVEL_MAIN }, { "%8", "MONTH", DATE, LEVEL_MAIN }, { "%9", "GENRE", SIMPLE, LEVEL_MAIN }, { "%!", "SHORTTITLE",TITLE, LEVEL_MAIN }, { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN }, { "%L", "CALLNUMBER",SIMPLE, LEVEL_MAIN }, { "%F", "REFNUM", SIMPLE, LEVEL_MAIN }, { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN }, { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "%O", "NOTES", NOTES, LEVEL_MAIN }, { "%U", "URL", SIMPLE, LEVEL_MAIN }, { "%Z", "NOTES", NOTES, LEVEL_MAIN }, { "%1", "CUSTOM1", NOTES, LEVEL_MAIN }, { "%2", "CUSTOM2", NOTES, LEVEL_MAIN }, { "%3", "CUSTOM3", NOTES, LEVEL_MAIN }, { "%4", "CUSTOM4", NOTES, LEVEL_MAIN }, { "%#", "CUSTOM5", NOTES, LEVEL_MAIN }, { "%$", "CUSTOM6", NOTES, LEVEL_MAIN }, { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */ { "%+", "AUTHORADDRESS",SIMPLE,LEVEL_MAIN}, { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN }, { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "%^", "CAPTION", SIMPLE, LEVEL_MAIN }, { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN }, { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN }, { "%~", "DATABASE", SIMPLE, LEVEL_MAIN }, { " ", "GENRE|communication", ALWAYS, LEVEL_MAIN} }; static lookups proceedings[] = { { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN }, { "%A", "AUTHOR", PERSON, LEVEL_MAIN }, { "%H", "TRANSLATOR",PERSON, LEVEL_MAIN }, { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN }, { "%D", "YEAR", SIMPLE, LEVEL_HOST }, { "%T", "TITLE" , TITLE, LEVEL_MAIN }, { "%E", "EDITOR", PERSON, LEVEL_MAIN }, { "%B", "TITLE", SIMPLE, LEVEL_HOST }, { "%C", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "%I", "PUBLISHER", SIMPLE, LEVEL_MAIN }, { "%V", "VOLUME" , SIMPLE, LEVEL_MAIN }, { "%6", "NUMVOLUMES",SIMPLE, LEVEL_HOST }, { "%N", "NUMBER", SIMPLE, LEVEL_MAIN }, { "%P", "PAGES", PAGES, LEVEL_MAIN }, { "%Y", "EDITOR", PERSON, LEVEL_SERIES }, { "%S", "TITLE", TITLE, LEVEL_SERIES }, { "%7", "EDITION", SIMPLE, LEVEL_HOST }, { "%8", "MONTH", DATE, LEVEL_MAIN }, { "%!", "SHORTTITLE",TITLE, LEVEL_MAIN }, { "%1", "CUSTOM1", NOTES, LEVEL_MAIN }, { "%2", "CUSTOM2", NOTES, LEVEL_MAIN }, { "%3", "CUSTOM3", NOTES, LEVEL_MAIN }, { "%4", "CUSTOM4", NOTES, LEVEL_MAIN }, { "%#", "CUSTOM5", NOTES, LEVEL_MAIN }, { "%$", "CUSTOM6", NOTES, LEVEL_MAIN }, { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN }, { "%L", "CALLNUMBER",SIMPLE, LEVEL_MAIN }, { "%F", "REFNUM", SIMPLE, LEVEL_MAIN }, { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN }, { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "%O", "NOTES", NOTES, LEVEL_MAIN }, { "%U", "URL", SIMPLE, LEVEL_MAIN }, { "%Z", "NOTES", NOTES, LEVEL_MAIN }, { "%+", "AUTHORADDRESS",SIMPLE,LEVEL_MAIN}, { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN }, { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */ { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "%^", "CAPTION", SIMPLE, LEVEL_MAIN }, { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN }, { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN }, { "%~", "DATABASE", SIMPLE, LEVEL_MAIN }, { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { " ", "GENRE|conference publication", ALWAYS, LEVEL_MAIN } }; static lookups conferencepaper[] = { { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN }, { "%A", "AUTHOR", PERSON, LEVEL_MAIN }, { "%H", "TRANSLATOR", PERSON, LEVEL_MAIN }, { "%Q", "TRANSLATEDTITLE",SIMPLE, LEVEL_MAIN }, { "%D", "PARTYEAR", SIMPLE, LEVEL_MAIN }, { "%T", "TITLE" , TITLE, LEVEL_MAIN }, { "%J", "TITLE", TITLE, LEVEL_HOST }, /* journal title */ { "%B", "TITLE", TITLE, LEVEL_HOST }, /* journal title */ { "%C", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "%V", "VOLUME" , SIMPLE, LEVEL_MAIN }, { "%N", "ISSUE", SIMPLE, LEVEL_MAIN }, { "%P", "PAGES", PAGES, LEVEL_MAIN }, { "%I", "PUBLISHER", SIMPLE, LEVEL_HOST }, { "%8", "PARTMONTH", DATE, LEVEL_MAIN }, { "%9", "GENRE", SIMPLE, LEVEL_MAIN }, { "%!", "SHORTTITLE", TITLE, LEVEL_MAIN }, { "%@", "SERIALNUMBER", SERIALNO, LEVEL_HOST }, { "%(", "TITLE", SIMPLE, LEVEL_ORIG }, /* original pub */ { "%)", "REPRINTEDITION",SIMPLE, LEVEL_MAIN }, { "%*", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN }, { "%L", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, { "%F", "REFNUM", SIMPLE, LEVEL_MAIN }, { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN }, { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "%U", "URL", SIMPLE, LEVEL_MAIN }, { "%O", "NOTES", NOTES, LEVEL_MAIN }, { "%Z", "NOTES", NOTES, LEVEL_MAIN }, { "%1", "CUSTOM1", NOTES, LEVEL_MAIN }, { "%2", "CUSTOM2", NOTES, LEVEL_MAIN }, { "%3", "CUSTOM3", NOTES, LEVEL_MAIN }, { "%4", "CUSTOM4", NOTES, LEVEL_MAIN }, { "%#", "CUSTOM5", NOTES, LEVEL_MAIN }, { "%$", "CUSTOM6", NOTES, LEVEL_MAIN }, { "%+", "AUTHORADDRESS",SIMPLE, LEVEL_MAIN }, { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN }, { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */ { "%^", "CAPTION", SIMPLE, LEVEL_MAIN }, { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN }, { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN }, { "%~", "DATABASE", SIMPLE, LEVEL_MAIN }, { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { " ", "GENRE|conference publication", ALWAYS, LEVEL_HOST } }; static lookups thesis[] = { { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN }, { "%A", "AUTHOR", PERSON, LEVEL_MAIN }, { "%H", "TRANSLATOR", PERSON, LEVEL_MAIN }, { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN }, { "%D", "YEAR", SIMPLE, LEVEL_MAIN }, { "%T", "TITLE" , TITLE, LEVEL_MAIN }, { "%B", "ACADEMIC_DEPARTMENT", SIMPLE, LEVEL_MAIN }, { "%C", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "%I", "PUBLISHER", SIMPLE, LEVEL_MAIN }, { "%V", "VOLUME", SIMPLE, LEVEL_MAIN }, { "%P", "NUMPAGES", PAGES, LEVEL_MAIN }, { "%9", "GENRE", SIMPLE, LEVEL_MAIN }, /* thesis type */ { "%8", "MONTH", DATE, LEVEL_MAIN }, { "%!", "SHORTTITLE", TITLE, LEVEL_MAIN }, { "%1", "CUSTOM1", NOTES, LEVEL_MAIN }, { "%2", "CUSTOM2", NOTES, LEVEL_MAIN }, { "%3", "CUSTOM3", NOTES, LEVEL_MAIN }, { "%4", "CUSTOM4", NOTES, LEVEL_MAIN }, { "%#", "CUSTOM5", NOTES, LEVEL_MAIN }, { "%$", "CUSTOM6", NOTES, LEVEL_MAIN }, { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN }, { "%L", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, { "%F", "REFNUM", SIMPLE, LEVEL_MAIN }, { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN }, { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "%O", "NOTES", NOTES, LEVEL_MAIN }, { "%U", "URL", SIMPLE, LEVEL_MAIN }, { "%Z", "NOTES", NOTES, LEVEL_MAIN }, { "%+", "AUTHORADDRESS",SIMPLE, LEVEL_MAIN }, { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN }, { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */ { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "%^", "CAPTION", SIMPLE, LEVEL_MAIN }, { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN }, { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN }, { "%~", "DATABASE", SIMPLE, LEVEL_MAIN }, { " ", "RESOURCE|text",ALWAYS, LEVEL_MAIN }, { " ", "GENRE|thesis", ALWAYS, LEVEL_MAIN } }; static lookups program[] = { { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN }, { "%A", "AUTHOR", PERSON , LEVEL_MAIN }, { "%H", "TRANSLATOR",PERSON, LEVEL_MAIN }, { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN }, { "%D", "YEAR", SIMPLE , LEVEL_MAIN }, { "%T", "TITLE" , TITLE , LEVEL_MAIN }, { "%C", "ADDRESS", SIMPLE , LEVEL_MAIN }, { "%I", "PUBLISHER", SIMPLE , LEVEL_MAIN }, { "%7", "VERSION", SIMPLE , LEVEL_MAIN }, { "%9", "GENRE", SIMPLE , LEVEL_MAIN }, { "%M", "ACCESSNUM", SIMPLE , LEVEL_MAIN }, { "%L", "CALLNUMBER",SIMPLE , LEVEL_MAIN }, { "%F", "REFNUM", SIMPLE , LEVEL_MAIN }, { "%K", "KEYWORD", SIMPLE , LEVEL_MAIN }, { "%X", "ABSTRACT", SIMPLE , LEVEL_MAIN }, { "%O", "NOTES", SIMPLE , LEVEL_MAIN }, { "%U", "URL", SIMPLE , LEVEL_MAIN }, { "%Z", "NOTES", SIMPLE , LEVEL_MAIN }, { "%1", "COMPUTER", SIMPLE , LEVEL_MAIN }, { "%2", "CUSTOM2", SIMPLE , LEVEL_MAIN }, { "%3", "CUSTOM3", SIMPLE , LEVEL_MAIN }, { "%4", "CUSTOM4", SIMPLE , LEVEL_MAIN }, { "%#", "CUSTOM5", SIMPLE , LEVEL_MAIN }, { "%$", "CUSTOM6", SIMPLE , LEVEL_MAIN }, { "%!", "SHORTTITLE",TITLE , LEVEL_MAIN }, { "%+", "AUTHORADDRESS",SIMPLE, LEVEL_MAIN }, { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN }, { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */ { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "%^", "CAPTION", SIMPLE, LEVEL_MAIN }, { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN }, { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN }, { "%~", "DATABASE", SIMPLE, LEVEL_MAIN }, { " ", "RESOURCE|software, multimedia", ALWAYS, LEVEL_MAIN } }; static lookups audiovisual[] = { { "%0", "INTERNAL_TYPE", TYPE , LEVEL_MAIN }, { "%A", "WRITER", PERSON , LEVEL_MAIN }, { "%H", "TRANSLATOR",PERSON, LEVEL_MAIN }, { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN }, { "%D", "YEAR", SIMPLE , LEVEL_MAIN }, { "%T", "TITLE" , TITLE , LEVEL_MAIN }, { "%B", "TITLE", TITLE , LEVEL_HOST }, /* COLLECTION_TITLE */ { "%C", "ADDRESS", SIMPLE , LEVEL_MAIN }, { "%I", "PUBLISHER", SIMPLE , LEVEL_MAIN }, { "%V", "EXTENTOFWORK", SIMPLE , LEVEL_MAIN }, { "%N", "NUMBER", SIMPLE , LEVEL_MAIN }, { "%8", "MONTH", DATE , LEVEL_MAIN }, { "%9", "GENRE", SIMPLE , LEVEL_MAIN }, { "%?", "PERFORMER", PERSON , LEVEL_MAIN }, { "%!", "SHORTTITLE",TITLE , LEVEL_MAIN }, { "%M", "ACCESSNUM", SIMPLE , LEVEL_MAIN }, { "%L", "CALLNUMBER",SIMPLE , LEVEL_MAIN }, { "%F", "REFNUM", SIMPLE , LEVEL_MAIN }, { "%K", "KEYWORD", SIMPLE , LEVEL_MAIN }, { "%X", "ABSTRACT", SIMPLE , LEVEL_MAIN }, { "%O", "NOTES", NOTES, LEVEL_MAIN }, { "%U", "URL", SIMPLE , LEVEL_MAIN }, { "%Z", "NOTES", NOTES, LEVEL_MAIN }, { "%1", "CUSTOM1", NOTES, LEVEL_MAIN }, { "%2", "CUSTOM2", NOTES, LEVEL_MAIN }, { "%3", "CUSTOM3", NOTES, LEVEL_MAIN }, { "%4", "CUSTOM4", NOTES, LEVEL_MAIN }, { "%#", "CUSTOM5", NOTES, LEVEL_MAIN }, { "%$", "CUSTOM6", NOTES, LEVEL_MAIN }, { "%+", "AUTHORADDRESS",SIMPLE, LEVEL_MAIN }, { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN }, { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */ { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "%^", "CAPTION", SIMPLE, LEVEL_MAIN }, { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN }, { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN }, { "%~", "DATABASE", SIMPLE, LEVEL_MAIN }, { " ", "RESOURCE|mixed material", ALWAYS, LEVEL_MAIN } }; static lookups broadcast[] = { { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN }, { "%A", "AUTHOR", PERSON, LEVEL_MAIN }, { "%H", "TRANSLATOR", PERSON, LEVEL_MAIN }, { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN }, { "%D", "YEAR", SIMPLE, LEVEL_MAIN }, { "%T", "TITLE" , TITLE, LEVEL_MAIN }, { "%E", "DIRECTOR", PERSON, LEVEL_MAIN }, { "%B", "TITLE", TITLE, LEVEL_HOST }, /* SERIES_TITLE */ { "%C", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "%I", "PUBLISHER", SIMPLE, LEVEL_MAIN }, { "%Y", "PRODUCER", PERSON, LEVEL_MAIN }, { "%8", "MONTH", DATE, LEVEL_MAIN }, { "%9", "GENRE", SIMPLE, LEVEL_MAIN }, { "%!", "SHORTTITLE", TITLE, LEVEL_MAIN }, { "%@", "SERIALNUMBER", SERIALNO, LEVEL_MAIN }, { "%?", "PERFORMER", PERSON, LEVEL_MAIN }, { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN }, { "%L", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, { "%F", "REFNUM", SIMPLE, LEVEL_MAIN }, { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN }, { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "%O", "NOTES", NOTES, LEVEL_MAIN }, { "%U", "URL", SIMPLE, LEVEL_MAIN }, { "%Z", "NOTES", SIMPLE, LEVEL_MAIN }, { "%1", "CUSTOM1", NOTES, LEVEL_MAIN }, { "%2", "CUSTOM2", NOTES, LEVEL_MAIN }, { "%3", "CUSTOM3", NOTES, LEVEL_MAIN }, { "%4", "CUSTOM4", NOTES, LEVEL_MAIN }, { "%#", "CUSTOM5", NOTES, LEVEL_MAIN }, { "%$", "CUSTOM6", NOTES, LEVEL_MAIN }, { "%+", "AUTHORADDRESS",SIMPLE, LEVEL_MAIN }, { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN }, { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */ { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "%^", "CAPTION", SIMPLE, LEVEL_MAIN }, { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN }, { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN }, { "%~", "DATABASE", SIMPLE, LEVEL_MAIN }, { " ", "RESOURCE|moving image", ALWAYS, LEVEL_MAIN } }; static lookups electronic[] = { { "%0", "INTERNAL_TYPE", TYPE , LEVEL_MAIN }, { "%A", "AUTHOR", PERSON , LEVEL_MAIN }, { "%H", "TRANSLATOR",PERSON, LEVEL_MAIN }, { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN }, { "%D", "YEAR", SIMPLE , LEVEL_MAIN }, { "%T", "TITLE" , TITLE , LEVEL_MAIN }, { "%C", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "%I", "PUBLISHER", SIMPLE , LEVEL_MAIN }, { "%V", "ACCESS_YEAR", SIMPLE , LEVEL_MAIN }, { "%N", "ACCESS_DATE", DATE , LEVEL_MAIN }, { "%7", "EDITION", SIMPLE, LEVEL_MAIN }, { "%8", "UPDATE_DATE", DATE, LEVEL_MAIN }, { "%9", "GENRE", SIMPLE, LEVEL_MAIN }, { "%!", "SHORTTITLE",TITLE, LEVEL_MAIN }, { "%1", "CUSTOM1", NOTES, LEVEL_MAIN }, { "%2", "CUSTOM2", NOTES, LEVEL_MAIN }, { "%3", "CUSTOM3", NOTES, LEVEL_MAIN }, { "%4", "CUSTOM4", NOTES, LEVEL_MAIN }, { "%#", "CUSTOM5", NOTES, LEVEL_MAIN }, { "%$", "CUSTOM6", NOTES, LEVEL_MAIN }, { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN }, { "%F", "REFNUM", SIMPLE, LEVEL_MAIN }, { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN }, { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "%O", "NOTES", NOTES, LEVEL_MAIN }, { "%U", "URL", SIMPLE, LEVEL_MAIN }, { "%V", "VOLUME", SIMPLE, LEVEL_MAIN }, { "%Z", "NOTES", NOTES, LEVEL_MAIN }, { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */ { "%+", "AUTHORADDRESS",SIMPLE , LEVEL_MAIN }, { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN }, { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "%^", "CAPTION", SIMPLE, LEVEL_MAIN }, { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN }, { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN }, { "%~", "DATABASE", SIMPLE, LEVEL_MAIN }, { " ", "RESOURCE|software, multimedia", ALWAYS, LEVEL_MAIN }, { " ", "GENRE|electronic", ALWAYS, LEVEL_MAIN }, }; static lookups webpage[] = { { "%0", "INTERNAL_TYPE", TYPE , LEVEL_MAIN }, { "%A", "AUTHOR", PERSON , LEVEL_MAIN }, { "%H", "TRANSLATOR",PERSON, LEVEL_MAIN }, { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN }, { "%D", "YEAR", SIMPLE , LEVEL_MAIN }, { "%T", "TITLE" , TITLE , LEVEL_MAIN }, { "%C", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "%I", "PUBLISHER", SIMPLE , LEVEL_MAIN }, { "%V", "ACCESS_YEAR", SIMPLE , LEVEL_MAIN }, { "%N", "ACCESS_DATE", DATE , LEVEL_MAIN }, { "%7", "EDITION", SIMPLE, LEVEL_MAIN }, { "%8", "UPDATE_DATE", DATE, LEVEL_MAIN }, { "%9", "GENRE", SIMPLE, LEVEL_MAIN }, { "%!", "SHORTTITLE",TITLE, LEVEL_MAIN }, { "%1", "CUSTOM1", NOTES, LEVEL_MAIN }, { "%2", "CUSTOM2", NOTES, LEVEL_MAIN }, { "%3", "CUSTOM3", NOTES, LEVEL_MAIN }, { "%4", "CUSTOM4", NOTES, LEVEL_MAIN }, { "%#", "CUSTOM5", NOTES, LEVEL_MAIN }, { "%$", "CUSTOM6", NOTES, LEVEL_MAIN }, { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN }, { "%F", "REFNUM", SIMPLE, LEVEL_MAIN }, { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN }, { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "%O", "NOTES", NOTES, LEVEL_MAIN }, { "%U", "URL", SIMPLE, LEVEL_MAIN }, { "%V", "VOLUME", SIMPLE, LEVEL_MAIN }, { "%Z", "NOTES", NOTES, LEVEL_MAIN }, { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */ { "%+", "AUTHORADDRESS",SIMPLE , LEVEL_MAIN }, { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN }, { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "%^", "CAPTION", SIMPLE, LEVEL_MAIN }, { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN }, { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN }, { "%~", "DATABASE", SIMPLE, LEVEL_MAIN }, { " ", "RESOURCE|software, multimedia", ALWAYS, LEVEL_MAIN }, { " ", "GENRE|web page", ALWAYS, LEVEL_MAIN }, }; static lookups artwork[] = { { "%0", "INTERNAL_TYPE", TYPE , LEVEL_MAIN }, { "%A", "ARTIST", PERSON , LEVEL_MAIN }, { "%H", "TRANSLATOR",PERSON, LEVEL_MAIN }, { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN }, { "%D", "YEAR", SIMPLE , LEVEL_MAIN }, { "%T", "TITLE" , TITLE , LEVEL_MAIN }, { "%C", "ADDRESS", SIMPLE , LEVEL_MAIN }, { "%I", "PUBLISHER", SIMPLE , LEVEL_MAIN }, { "%8", "MONTH", DATE, LEVEL_MAIN }, { "%9", "GENRE", SIMPLE, LEVEL_MAIN }, { "%!", "SHORTTITLE", TITLE, LEVEL_MAIN }, { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN }, { "%L", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, { "%F", "REFNUM", SIMPLE, LEVEL_MAIN }, { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN }, { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "%O", "NOTES", NOTES, LEVEL_MAIN }, { "%U", "URL", SIMPLE, LEVEL_MAIN }, { "%Z", "NOTES", NOTES, LEVEL_MAIN }, { "%1", "CUSTOM1", NOTES, LEVEL_MAIN }, { "%2", "CUSTOM2", NOTES, LEVEL_MAIN }, { "%3", "CUSTOM3", NOTES, LEVEL_MAIN }, { "%4", "CUSTOM4", NOTES, LEVEL_MAIN }, { "%#", "CUSTOM5", NOTES, LEVEL_MAIN }, { "%$", "CUSTOM6", NOTES, LEVEL_MAIN }, { "%+", "AUTHORADDRESS",SIMPLE, LEVEL_MAIN }, { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN }, { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */ { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "%^", "CAPTION", SIMPLE, LEVEL_MAIN }, { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN }, { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN }, { "%~", "DATABASE", SIMPLE, LEVEL_MAIN }, { " ", "GENRE|art original", ALWAYS, LEVEL_MAIN } }; static lookups report[] = { { "%0", "INTERNAL_TYPE", TYPE , LEVEL_MAIN }, { "%A", "AUTHOR", PERSON , LEVEL_MAIN }, { "%H", "TRANSLATOR",PERSON, LEVEL_MAIN }, { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN }, { "%D", "YEAR", SIMPLE , LEVEL_MAIN }, { "%T", "TITLE" , TITLE , LEVEL_MAIN }, { "%C", "ADDRESS", SIMPLE , LEVEL_MAIN }, { "%I", "PUBLISHER", SIMPLE, LEVEL_MAIN }, { "%P", "PAGES", PAGES, LEVEL_MAIN }, { "%8", "MONTH", DATE, LEVEL_MAIN }, { "%9", "GENRE", SIMPLE, LEVEL_MAIN }, { "%N", "NUMBER", SIMPLE, LEVEL_MAIN }, { "%@", "SERIALNUMBER", SERIALNO, LEVEL_MAIN }, { "%!", "SHORTTITLE",TITLE, LEVEL_MAIN }, { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN }, { "%L", "CALLNUMBER",SIMPLE, LEVEL_MAIN }, { "%F", "REFNUM", SIMPLE, LEVEL_MAIN }, { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN }, { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "%O", "NOTES", NOTES, LEVEL_MAIN }, { "%U", "URL", SIMPLE, LEVEL_MAIN }, { "%Z", "NOTES", NOTES, LEVEL_MAIN }, { "%1", "CUSTOM1", NOTES, LEVEL_MAIN }, { "%2", "CUSTOM2", NOTES, LEVEL_MAIN }, { "%3", "CUSTOM3", NOTES, LEVEL_MAIN }, { "%4", "CUSTOM4", NOTES, LEVEL_MAIN }, { "%#", "CUSTOM5", NOTES, LEVEL_MAIN }, { "%$", "CUSTOM6", NOTES, LEVEL_MAIN }, { "%+", "AUTHORADDRESS",SIMPLE, LEVEL_MAIN }, { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN }, { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */ { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "%^", "CAPTION", SIMPLE, LEVEL_MAIN }, { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN }, { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN }, { "%~", "DATABASE", SIMPLE, LEVEL_MAIN }, { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { " ", "GENRE|report", ALWAYS, LEVEL_MAIN } }; static lookups map[] = { { "%0", "INTERNAL_TYPE", TYPE , LEVEL_MAIN }, { "%A", "CARTOGRAPHER", PERSON , LEVEL_MAIN }, { "%H", "TRANSLATOR",PERSON, LEVEL_MAIN }, { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN }, { "%D", "YEAR", SIMPLE , LEVEL_MAIN }, { "%T", "TITLE" , TITLE , LEVEL_MAIN }, { "%C", "ADDRESS", SIMPLE , LEVEL_MAIN }, { "%I", "PUBLISHER", SIMPLE , LEVEL_MAIN }, { "%7", "EDITION", SIMPLE , LEVEL_MAIN }, { "%9", "GENRE", SIMPLE , LEVEL_MAIN }, { "%!", "SHORTTITLE",TITLE , LEVEL_MAIN }, { "%M", "ACCESSNUM", SIMPLE , LEVEL_MAIN }, { "%L", "CALLNUMBER",SIMPLE , LEVEL_MAIN }, { "%F", "REFNUM", SIMPLE , LEVEL_MAIN }, { "%K", "KEYWORD", SIMPLE , LEVEL_MAIN }, { "%X", "ABSTRACT", SIMPLE , LEVEL_MAIN }, { "%O", "NOTES", SIMPLE , LEVEL_MAIN }, { "%U", "URL", SIMPLE , LEVEL_MAIN }, { "%Z", "NOTES", SIMPLE , LEVEL_MAIN }, { "%1", "SCALE", SIMPLE , LEVEL_MAIN }, { "%2", "CUSTOM2", SIMPLE , LEVEL_MAIN }, { "%3", "CUSTOM3", SIMPLE , LEVEL_MAIN }, { "%4", "CUSTOM4", SIMPLE , LEVEL_MAIN }, { "%#", "CUSTOM5", SIMPLE , LEVEL_MAIN }, { "%$", "CUSTOM6", SIMPLE , LEVEL_MAIN }, { "%+", "AUTHORADDRESS",SIMPLE, LEVEL_MAIN }, { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN }, { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */ { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "%^", "CAPTION", SIMPLE, LEVEL_MAIN }, { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN }, { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN }, { "%~", "DATABASE", SIMPLE, LEVEL_MAIN }, { " ", "RESOURCE|cartographic", ALWAYS, LEVEL_MAIN }, { " ", "GENRE|map", ALWAYS, LEVEL_MAIN } }; static lookups patent[] = { { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN }, { "%A", "AUTHOR", PERSON, LEVEL_MAIN }, { "%H", "TRANSLATOR",PERSON, LEVEL_MAIN }, { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN }, { "%D", "YEAR", SIMPLE, LEVEL_MAIN }, { "%T", "TITLE" , TITLE, LEVEL_MAIN }, { "%B", "PUBLISHED_SOURCE", SIMPLE, LEVEL_MAIN}, { "%C", "COUNTRY", SIMPLE, LEVEL_MAIN }, { "%I", "ASSIGNEE", SIMPLE, LEVEL_MAIN }, { "%V", "VOLUME", SIMPLE, LEVEL_MAIN }, { "%N", "ISSUE", SIMPLE, LEVEL_MAIN }, { "%P", "PAGES", SIMPLE, LEVEL_MAIN }, { "%@", "NUMBER", SIMPLE, LEVEL_MAIN }, { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN }, { "%L", "CALLNUMBER",SIMPLE, LEVEL_MAIN }, { "%F", "REFNUM", SIMPLE, LEVEL_MAIN }, { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN }, { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "%O", "NOTES", SIMPLE, LEVEL_MAIN }, { "%U", "URL", SIMPLE, LEVEL_MAIN }, { "%Z", "NOTES", SIMPLE, LEVEL_MAIN }, { "%1", "SCALE", SIMPLE, LEVEL_MAIN }, { "%2", "CUSTOM2", SIMPLE, LEVEL_MAIN }, { "%3", "CUSTOM3", SIMPLE, LEVEL_MAIN }, { "%4", "CUSTOM4", SIMPLE, LEVEL_MAIN }, { "%#", "CUSTOM5", SIMPLE, LEVEL_MAIN }, { "%$", "CUSTOM6", SIMPLE, LEVEL_MAIN }, { "%+", "AUTHORADDRESS",SIMPLE, LEVEL_MAIN }, { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN }, { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */ { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "%^", "CAPTION", SIMPLE, LEVEL_MAIN }, { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN }, { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN }, { "%~", "DATABASE", SIMPLE, LEVEL_MAIN }, { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { " ", "GENRE|patent", ALWAYS, LEVEL_MAIN } }; static lookups hearing[] = { { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN }, { "%D", "YEAR", SIMPLE, LEVEL_MAIN }, { "%H", "TRANSLATOR", PERSON, LEVEL_MAIN }, { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN }, { "%T", "TITLE" , TITLE, LEVEL_MAIN }, { "%B", "COMMITTEE:CORP", SIMPLE, LEVEL_MAIN }, { "%C", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "%I", "PUBLISHER", SIMPLE, LEVEL_MAIN }, { "%6", "NUMVOLUMES", SIMPLE, LEVEL_MAIN }, { "%N", "NUMBER", SIMPLE, LEVEL_MAIN }, { "%P", "NUMPAGES", PAGES, LEVEL_MAIN }, { "%S", "LEGISLATIVEBODY:CORP", SIMPLE, LEVEL_MAIN }, { "%7", "SESSION", SIMPLE, LEVEL_MAIN }, { "%8", "MONTH", DATE, LEVEL_MAIN }, { "%!", "SHORTTITLE", TITLE, LEVEL_MAIN }, { "%(", "TITLE", SIMPLE, LEVEL_ORIG }, /* orig publication */ { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN }, { "%L", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, { "%F", "REFNUM", SIMPLE, LEVEL_MAIN }, { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN }, { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "%O", "NOTES", NOTES, LEVEL_MAIN }, { "%U", "URL", SIMPLE, LEVEL_MAIN }, { "%Z", "NOTES", NOTES, LEVEL_MAIN }, { "%1", "CUSTOM1", NOTES, LEVEL_MAIN }, { "%2", "CUSTOM2", NOTES, LEVEL_MAIN }, { "%3", "CUSTOM3", NOTES, LEVEL_MAIN }, { "%4", "CUSTOM4", NOTES, LEVEL_MAIN }, { "%9", "GENRE", SIMPLE, LEVEL_MAIN }, { "%#", "CUSTOM5", NOTES, LEVEL_MAIN }, { "%$", "CUSTOM6", NOTES, LEVEL_MAIN }, { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN }, { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */ { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "%^", "CAPTION", SIMPLE, LEVEL_MAIN }, { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN }, { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN }, { "%~", "DATABASE", SIMPLE, LEVEL_MAIN }, { " ", "GENRE|hearing", ALWAYS, LEVEL_MAIN } }; static lookups bill[] = { { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN }, { "%D", "YEAR", SIMPLE, LEVEL_MAIN }, { "%H", "TRANSLATOR",PERSON, LEVEL_MAIN }, { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN }, { "%T", "TITLE" , TITLE, LEVEL_MAIN }, { "%B", "CODE", SIMPLE, LEVEL_MAIN }, { "%V", "CODEVOLUME",SIMPLE, LEVEL_MAIN }, { "%N", "BILLNUMBER",SIMPLE, LEVEL_MAIN }, { "%P", "CODEPAGES", SIMPLE, LEVEL_MAIN }, { "%&", "CODESECTION",SIMPLE, LEVEL_MAIN }, { "%S", "LEGISLATIVEBODY:CORP", SIMPLE, LEVEL_MAIN }, { "%7", "SESSION", SIMPLE, LEVEL_MAIN }, { "%8", "MONTH", DATE, LEVEL_MAIN }, { "%?", "SPONSOR", PERSON, LEVEL_MAIN }, { "%!", "SHORTTITLE",TITLE, LEVEL_MAIN }, { "%(", "TITLE", SIMPLE, LEVEL_ORIG }, /* original pub */ { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN }, { "%L", "CALLNUMBER",SIMPLE, LEVEL_MAIN }, { "%F", "REFNUM", SIMPLE, LEVEL_MAIN }, { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN }, { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "%O", "NOTES", NOTES, LEVEL_MAIN }, { "%U", "URL", SIMPLE, LEVEL_MAIN }, { "%Z", "NOTES", NOTES, LEVEL_MAIN }, { "%1", "CUSTOM1", NOTES, LEVEL_MAIN }, { "%2", "CUSTOM2", NOTES, LEVEL_MAIN }, { "%3", "CUSTOM3", NOTES, LEVEL_MAIN }, { "%4", "CUSTOM4", NOTES, LEVEL_MAIN }, { "%#", "CUSTOM5", NOTES, LEVEL_MAIN }, { "%$", "CUSTOM6", NOTES, LEVEL_MAIN }, { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */ { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN }, { "%^", "CAPTION", SIMPLE, LEVEL_MAIN }, { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN }, { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN }, { "%~", "DATABASE", SIMPLE, LEVEL_MAIN }, { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { " ", "GENRE|legislation", ALWAYS, LEVEL_MAIN } }; static lookups statute[] = { { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN }, { "%D", "YEAR", SIMPLE, LEVEL_MAIN }, { "%H", "TRANSLATOR",PERSON, LEVEL_MAIN }, { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN }, { "%T", "TITLE" , TITLE, LEVEL_MAIN }, { "%B", "CODE", SIMPLE, LEVEL_MAIN }, { "%V", "CODENUMBER",SIMPLE, LEVEL_MAIN }, { "%N", "PUBLICLAWNUMBER", SIMPLE, LEVEL_MAIN }, { "%P", "PAGES", PAGES, LEVEL_MAIN }, { "%&", "SECTION", SIMPLE, LEVEL_MAIN }, { "%7", "SESSION", SIMPLE, LEVEL_MAIN }, { "%8", "MONTH", DATE, LEVEL_MAIN }, { "%!", "SHORTTITLE",TITLE, LEVEL_MAIN }, { "%(", "TITLE", SIMPLE, LEVEL_ORIG }, /* original pub */ { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN }, { "%L", "CALLNUMBER",SIMPLE, LEVEL_MAIN }, { "%F", "REFNUM", SIMPLE, LEVEL_MAIN }, { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN }, { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "%O", "NOTES", NOTES, LEVEL_MAIN }, { "%U", "URL", SIMPLE, LEVEL_MAIN }, { "%Z", "NOTES", NOTES, LEVEL_MAIN }, { "%1", "CUSTOM1", NOTES, LEVEL_MAIN }, { "%2", "CUSTOM2", NOTES, LEVEL_MAIN }, { "%3", "CUSTOM3", NOTES, LEVEL_MAIN }, { "%4", "CUSTOM4", NOTES, LEVEL_MAIN }, { "%#", "CUSTOM5", NOTES, LEVEL_MAIN }, { "%$", "CUSTOM6", NOTES, LEVEL_MAIN }, { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */ { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN }, { "%^", "CAPTION", SIMPLE, LEVEL_MAIN }, { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN }, { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN }, { "%~", "DATABASE", SIMPLE, LEVEL_MAIN }, { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { " ", "GENRE|legislation", ALWAYS, LEVEL_MAIN } }; static lookups lawcase[] = { { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN }, { "%D", "YEAR", SIMPLE, LEVEL_MAIN }, { "%H", "TRANSLATOR",PERSON, LEVEL_MAIN }, { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN }, { "%T", "TITLE" , TITLE, LEVEL_MAIN }, { "%E", "REPORTER", TITLE, LEVEL_HOST }, /*Reporter is name of book*/ { "%B", "CODE", SIMPLE, LEVEL_MAIN }, { "%I", "COURT:CORP", SIMPLE, LEVEL_MAIN }, { "%V", "VOLUME", SIMPLE, LEVEL_MAIN }, { "%N", "PUBLICLAWNUMBER", SIMPLE, LEVEL_MAIN }, { "%P", "STARTPAGE", SIMPLE, LEVEL_MAIN }, { "%8", "MONTH", DATE, LEVEL_MAIN }, { "%?", "COUNSEL", PERSON, LEVEL_MAIN }, { "%!", "SHORTTITLE",TITLE, LEVEL_MAIN }, { "%(", "TITLE", SIMPLE, LEVEL_ORIG }, /* original pub */ { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN }, { "%L", "CALLNUMBER",SIMPLE, LEVEL_MAIN }, { "%F", "REFNUM", SIMPLE, LEVEL_MAIN }, { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN }, { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "%O", "NOTES", NOTES, LEVEL_MAIN }, { "%U", "URL", SIMPLE, LEVEL_MAIN }, { "%Z", "NOTES", NOTES, LEVEL_MAIN }, { "%1", "CUSTOM1", NOTES, LEVEL_MAIN }, { "%2", "CUSTOM2", NOTES, LEVEL_MAIN }, { "%3", "CUSTOM3", NOTES, LEVEL_MAIN }, { "%4", "CUSTOM4", NOTES, LEVEL_MAIN }, { "%#", "CUSTOM5", NOTES, LEVEL_MAIN }, { "%$", "CUSTOM6", NOTES, LEVEL_MAIN }, { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */ { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN }, { "%^", "CAPTION", SIMPLE, LEVEL_MAIN }, { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN }, { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN }, { "%~", "DATABASE", SIMPLE, LEVEL_MAIN }, { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { " ", "GENRE|legal case and case notes", ALWAYS, LEVEL_MAIN } }; static lookups chart[] = { { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN }, { "%A", "AUTHOR", PERSON, LEVEL_MAIN }, { "%H", "TRANSLATOR",PERSON, LEVEL_MAIN }, { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN }, { "%D", "YEAR", SIMPLE, LEVEL_MAIN }, { "%T", "TITLE" , TITLE, LEVEL_MAIN }, { "%J", "TITLE", TITLE, LEVEL_HOST }, /* for refer formats */ { "%E", "2ND_AUTHOR",PERSON, LEVEL_MAIN }, { "%B", "2ND_TITLE", SIMPLE, LEVEL_MAIN }, { "%C", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "%I", "PUBLISHER", SIMPLE, LEVEL_MAIN }, { "%V", "VOLUME" , SIMPLE, LEVEL_MAIN }, { "%6", "NUMVOLUMES",SIMPLE, LEVEL_HOST }, { "%N", "NUMBER", SIMPLE, LEVEL_MAIN }, { "%P", "PAGES", PAGES, LEVEL_MAIN }, { "%&", "SECTION", SIMPLE, LEVEL_MAIN }, { "%Y", "AUTHOR", PERSON, LEVEL_SERIES }, { "%S", "TITLE", TITLE, LEVEL_SERIES }, { "%7", "EDITION", SIMPLE, LEVEL_MAIN }, { "%8", "MONTH", DATE, LEVEL_MAIN }, { "%9", "GENRE", SIMPLE, LEVEL_MAIN }, { "%?", "SUB_AUTHOR", PERSON, LEVEL_MAIN }, /* subsidiary-authors */ { "%!", "SHORTTITLE", TITLE, LEVEL_MAIN }, { "%@", "SERIALNUMBER", SERIALNO, LEVEL_MAIN }, { "%(", "TITLE", SIMPLE, LEVEL_ORIG }, /* original pub */ { "%)", "REPRINTEDITION",SIMPLE,LEVEL_MAIN }, { "%*", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, { "%1", "CUSTOM1", NOTES, LEVEL_MAIN }, { "%2", "CUSTOM2", NOTES, LEVEL_MAIN }, { "%3", "CUSTOM3", NOTES, LEVEL_MAIN }, { "%4", "CUSTOM4", NOTES, LEVEL_MAIN }, { "%#", "CUSTOM5", NOTES, LEVEL_MAIN }, { "%$", "CUSTOM6", NOTES, LEVEL_MAIN }, { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN }, { "%L", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, { "%F", "REFNUM", SIMPLE, LEVEL_MAIN }, { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN }, { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "%O", "NOTES", NOTES, LEVEL_MAIN }, { "%U", "URL", SIMPLE, LEVEL_MAIN }, { "%Z", "NOTES", NOTES, LEVEL_MAIN }, { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */ { "%+", "AUTHORADDRESS",SIMPLE, LEVEL_MAIN }, { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN }, { "%^", "CAPTION", SIMPLE, LEVEL_MAIN }, { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN }, { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN }, { "%~", "DATABASE", SIMPLE, LEVEL_MAIN }, { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { " ", "GENRE|chart", ALWAYS, LEVEL_MAIN } }; static lookups unpublished[] = { { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN }, { "%A", "AUTHOR", PERSON, LEVEL_MAIN }, { "%H", "TRANSLATOR",PERSON, LEVEL_MAIN }, { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN }, { "%D", "YEAR", SIMPLE, LEVEL_MAIN }, { "%T", "TITLE" , TITLE, LEVEL_MAIN }, { "%J", "TITLE", TITLE, LEVEL_HOST }, /* for refer formats */ { "%E", "2ND_AUTHOR",PERSON, LEVEL_MAIN }, { "%B", "2ND_TITLE", SIMPLE, LEVEL_MAIN }, { "%C", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "%I", "PUBLISHER", SIMPLE, LEVEL_MAIN }, { "%V", "VOLUME" , SIMPLE, LEVEL_MAIN }, { "%6", "NUMVOLUMES",SIMPLE, LEVEL_HOST }, { "%N", "NUMBER", SIMPLE, LEVEL_MAIN }, { "%P", "PAGES", PAGES, LEVEL_MAIN }, { "%&", "SECTION", SIMPLE, LEVEL_MAIN }, { "%Y", "AUTHOR", PERSON, LEVEL_SERIES }, { "%S", "TITLE", TITLE, LEVEL_SERIES }, { "%7", "EDITION", SIMPLE, LEVEL_MAIN }, { "%8", "MONTH", DATE, LEVEL_MAIN }, { "%9", "GENRE", SIMPLE, LEVEL_MAIN }, { "%?", "SUB_AUTHOR", PERSON, LEVEL_MAIN }, /* subsidiary-authors */ { "%!", "SHORTTITLE", TITLE, LEVEL_MAIN }, { "%@", "SERIALNUMBER", SERIALNO, LEVEL_MAIN }, { "%(", "TITLE", SIMPLE, LEVEL_ORIG }, /* original pub */ { "%)", "REPRINTEDITION",SIMPLE,LEVEL_MAIN }, { "%*", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, { "%1", "CUSTOM1", NOTES, LEVEL_MAIN }, { "%2", "CUSTOM2", NOTES, LEVEL_MAIN }, { "%3", "CUSTOM3", NOTES, LEVEL_MAIN }, { "%4", "CUSTOM4", NOTES, LEVEL_MAIN }, { "%#", "CUSTOM5", NOTES, LEVEL_MAIN }, { "%$", "CUSTOM6", NOTES, LEVEL_MAIN }, { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN }, { "%L", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, { "%F", "REFNUM", SIMPLE, LEVEL_MAIN }, { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN }, { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "%O", "NOTES", NOTES, LEVEL_MAIN }, { "%U", "URL", SIMPLE, LEVEL_MAIN }, { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN }, { "%Z", "NOTES", NOTES, LEVEL_MAIN }, { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */ { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "%+", "AUTHORADDRESS",SIMPLE, LEVEL_MAIN }, { "%^", "CAPTION", SIMPLE, LEVEL_MAIN }, { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN }, { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN }, { "%~", "DATABASE", SIMPLE, LEVEL_MAIN }, { " ", "INTERNAL_TYPE|BOOK", ALWAYS, LEVEL_MAIN }, { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { " ", "GENRE|unpublished", ALWAYS, LEVEL_MAIN }, }; /* order is important....."Book" matches "Book" and "Book Section", hence * "Book Section must come first */ #define ORIG(a) ( &(a[0]) ) #define SIZE(a) ( sizeof( a ) / sizeof( lookups ) ) #define REFTYPE(a,b) { a, ORIG(b), SIZE(b) } variants end_all[] = { REFTYPE( "Generic", generic ), REFTYPE( "Artwork", artwork ), REFTYPE( "Audiovisual Material", audiovisual ), REFTYPE( "Bill", bill ), REFTYPE( "Book Section", booksection ), REFTYPE( "Book", book ), REFTYPE( "Case", lawcase ), REFTYPE( "Chart or Table", chart ), REFTYPE( "Classical Work", generic ), REFTYPE( "Computer Program", program ), REFTYPE( "Conference Paper", conferencepaper ), REFTYPE( "Conference Proceeding", proceedings ), REFTYPE( "Edited Book", editedbook ), /* REFTYPE( "Equation", equation ), */ /* REFTYPE( "Electronic Article", electronicarticle ), */ /* REFTYPE( "Electronic Book", electronicbook ), */ /* REFTYPE( "Figure", figure ), */ REFTYPE( "Film or Broadcast", broadcast ), REFTYPE( "Electronic Source", electronic ), /* REFTYPE( "Government Document", governmentdocument ), */ REFTYPE( "Hearing", hearing ), REFTYPE( "Journal Article", journalarticle ), /* REFTYPE( "Legal Rule/Regulation", legalrule ), */ REFTYPE( "Magazine Article", magazinearticle ), REFTYPE( "Manuscript", manuscript ), REFTYPE( "Map", map ), REFTYPE( "Newspaper Article", newspaperarticle ), /* REFTYPE( "Online Database", onlinedatabase ), */ /* REFTYPE( "Online Multimedia", onlinemultimedia ), */ REFTYPE( "Patent", patent ), REFTYPE( "Personal Communication", communication ), REFTYPE( "Report", report ), REFTYPE( "Statute", statute ), REFTYPE( "Thesis", thesis ), REFTYPE( "Unpublished Work", unpublished ), REFTYPE( "Web Page", webpage ), }; int end_nall = sizeof( end_all ) / sizeof( variants ); hs-bibutils-5.5/bibutils/risin.h0000644000000000000000000000137612445605732015127 0ustar0000000000000000/* * risin.h * * Copyright (c) Chris Putnam 2003-2014 * * Source code released under the GPL version 2 * */ #ifndef RISIN_H #define RISIN_H #include "newstr.h" #include "fields.h" #include "reftypes.h" #include "bibutils.h" extern int risin_readf( FILE *fp, char *buf, int bufsize, int *bufpos, newstr *line, newstr *reference, int *fcharset ); extern int risin_processf( fields *risin, char *p, char *filename, long nref ); extern int risin_typef( fields *risin, char *filename, int nref, param *p, variants *all, int nall ); extern int risin_convertf( fields *risin, fields *info, int reftype, param *p, variants *all, int nall ); extern void risin_initparams( param *p, const char *progname ); extern variants ris_all[]; extern int ris_nall; #endif hs-bibutils-5.5/bibutils/medin.h0000644000000000000000000000106012445605732015065 0ustar0000000000000000/* * medin.h * * Copyright (c) Chris Putnam 2004-2014 * * Source code released under the GPL version 2 * */ #ifndef MEDIN_H #define MEDIN_H #include "newstr.h" #include "fields.h" #include "reftypes.h" #include "bibutils.h" extern int medin_readf( FILE *fp, char *buf, int bufsize, int *bufpos, newstr *line, newstr *reference, int *fcharset ); extern int medin_processf( fields *medin, char *data, char *filename, long nref ); extern void medin_initparams( param *p, const char *progname ); extern variants med_all[]; extern int med_nall; #endif hs-bibutils-5.5/bibutils/utf8.h0000644000000000000000000000063612445605732014667 0ustar0000000000000000/* * utf8.h * * Copyright (c) Chris Putnam 2004-2013 * * Source code released under the GPL version 2 * */ #ifndef UTF8_H #define UTF8_H #include extern int utf8_encode( unsigned int value, unsigned char out[6] ); extern void utf8_encode_str( unsigned int value, char outstr[7] ); extern unsigned int utf8_decode( char *s, unsigned int *pi ); extern void utf8_writebom( FILE *outptr ); #endif hs-bibutils-5.5/bibutils/bibutils.h0000644000000000000000000001006412445605732015612 0ustar0000000000000000/* * bibutils.h * * Copyright (c) Chris Putnam 2005-2014 * * Source code released under GPL version 2 * */ #ifndef BIBUTILS_H #define BIBUTILS_H #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include #include "bibl.h" #include "list.h" #include "charsets.h" #include "newstr_conv.h" #define BIBL_OK (0) #define BIBL_ERR_BADINPUT (-1) #define BIBL_ERR_MEMERR (-2) #define BIBL_ERR_CANTOPEN (-3) #define BIBL_FIRSTIN (100) #define BIBL_MODSIN (BIBL_FIRSTIN) #define BIBL_BIBTEXIN (BIBL_FIRSTIN+1) #define BIBL_RISIN (BIBL_FIRSTIN+2) #define BIBL_ENDNOTEIN (BIBL_FIRSTIN+3) #define BIBL_COPACIN (BIBL_FIRSTIN+4) #define BIBL_ISIIN (BIBL_FIRSTIN+5) #define BIBL_MEDLINEIN (BIBL_FIRSTIN+6) #define BIBL_ENDNOTEXMLIN (BIBL_FIRSTIN+7) #define BIBL_BIBLATEXIN (BIBL_FIRSTIN+8) #define BIBL_EBIIN (BIBL_FIRSTIN+9) #define BIBL_WORDIN (BIBL_FIRSTIN+10) #define BIBL_LASTIN (BIBL_FIRSTIN+10) #define BIBL_FIRSTOUT (200) #define BIBL_MODSOUT (BIBL_FIRSTOUT) #define BIBL_BIBTEXOUT (BIBL_FIRSTOUT+1) #define BIBL_RISOUT (BIBL_FIRSTOUT+2) #define BIBL_ENDNOTEOUT (BIBL_FIRSTOUT+3) #define BIBL_ISIOUT (BIBL_FIRSTOUT+4) #define BIBL_WORD2007OUT (BIBL_FIRSTOUT+5) #define BIBL_ADSABSOUT (BIBL_FIRSTOUT+6) #define BIBL_LASTOUT (BIBL_FIRSTOUT+6) #define BIBL_FORMAT_VERBOSE (1) #define BIBL_RAW_WITHCHARCONVERT (4) #define BIBL_RAW_WITHMAKEREFID (8) #define BIBL_CHARSET_UNKNOWN CHARSET_UNKNOWN #define BIBL_CHARSET_UNICODE CHARSET_UNICODE #define BIBL_CHARSET_GB18030 CHARSET_GB18030 #define BIBL_CHARSET_DEFAULT CHARSET_DEFAULT #define BIBL_CHARSET_UTF8_DEFAULT CHARSET_UTF8_DEFAULT #define BIBL_CHARSET_BOM_DEFAULT CHARSET_BOM_DEFAULT #define BIBL_SRC_DEFAULT (0) /* value from program default */ #define BIBL_SRC_FILE (1) /* value from file, priority over default */ #define BIBL_SRC_USER (2) /* value from user, priority over file, default */ #define BIBL_XMLOUT_FALSE NEWSTR_CONV_XMLOUT_FALSE #define BIBL_XMLOUT_TRUE NEWSTR_CONV_XMLOUT_TRUE #define BIBL_XMLOUT_ENTITIES NEWSTR_CONV_XMLOUT_ENTITIES typedef unsigned char uchar; typedef struct param { int readformat; int writeformat; int charsetin; uchar charsetin_src; /*BIBL_SRC_DEFAULT, BIBL_SRC_FILE, BIBL_SRC_USER*/ uchar latexin; uchar utf8in; uchar xmlin; uchar nosplittitle; int charsetout; uchar charsetout_src; /* BIBL_SRC_PROG, BIBL_SRC_USER */ uchar latexout; /* If true, write Latex codes */ uchar utf8out; /* If true, write characters encoded by utf8 */ uchar utf8bom; /* If true, write utf8 byte-order-mark */ uchar xmlout; /* If true, write characters in XML entities */ int format_opts; /* options for specific formats */ int addcount; /* add reference count to reference id */ uchar output_raw; uchar verbose; uchar singlerefperfile; list asis; /* Names that shouldn't be mangled */ list corps; /* Names that shouldn't be mangled-MODS corporation type */ char *progname; int (*readf)(FILE*,char*,int,int*,newstr*,newstr*,int*); int (*processf)(fields*,char*,char*,long); int (*cleanf)(bibl*,struct param*); int (*typef) (fields*,char*,int,struct param*,variants*,int); int (*convertf)(fields*,fields*,int,struct param*,variants*,int); void (*headerf)(FILE*,struct param*); void (*footerf)(FILE*); void (*writef)(fields*,FILE*,struct param*,unsigned long); variants *all; int nall; } param; extern void bibl_initparams( param *p, int readmode, int writemode, char *progname ); extern void bibl_freeparams( param *p ); extern int bibl_readasis( param *p, char *filename ); extern int bibl_addtoasis( param *p, char *entry ); extern int bibl_readcorps( param *p, char *filename ); extern int bibl_addtocorps( param *p, char *entry ); extern int bibl_read( bibl *b, FILE *fp, char *filename, param *p ); extern int bibl_write( bibl *b, FILE *fp, param *p ); extern void bibl_reporterr( int err ); #ifdef __cplusplus } #endif /* __cplusplus */ #endif hs-bibutils-5.5/bibutils/iso639_1.c0000644000000000000000000001073712445605732015253 0ustar0000000000000000/* * iso639_1.c */ #include #include "iso639_1.h" typedef struct { char *code; char *language; } iso639_1_t; static iso639_1_t iso639_1[] = { { "aa", "Afar" }, { "ab", "Abkhazian" }, { "ae", "Avestan" }, { "af", "Afrikaans" }, { "ak", "Akan" }, { "am", "Amharic" }, { "an", "Aragonese" }, { "ar", "Arabic" }, { "as", "Assamese" }, { "av", "Avaric" }, { "ay", "Aymara" }, { "az", "Azerbaijani" }, { "ba", "Bashkir" }, { "be", "Belarusian" }, { "bg", "Bulgarian" }, { "bh", "Bihari languages" }, { "bi", "Bislama" }, { "bm", "Bambara" }, { "bn", "Bengali" }, { "bo", "Tibetan" }, { "br", "Breton" }, { "bs", "Bosnian" }, { "ca", "Catalan" }, { "ce", "Chechen" }, { "ch", "Chamorro" }, { "co", "Corsican" }, { "cr", "Cree" }, { "cs", "Czech" }, { "cu", "Church Slavic" }, { "cv", "Chuvash" }, { "cy", "Welsh" }, { "da", "Danish" }, { "de", "German" }, { "dv", "Dhivehi" }, { "dz", "Dzongkha" }, { "ee", "Ewe" }, { "el", "Modern Greek" }, { "en", "English" }, { "eo", "Esperanto" }, { "es", "Spanish" }, { "et", "Estonian" }, { "eu", "Basque" }, { "fa", "Persian" }, { "ff", "Fulah" }, { "fi", "Finnish" }, { "fj", "Fijian" }, { "fo", "Faroese" }, { "fr", "French" }, { "fy", "Western Frisian" }, { "ga", "Irish" }, { "gd", "Scottish Gaelic" }, { "gl", "Galician" }, { "gn", "Guarani" }, { "gu", "Gujarati" }, { "gv", "Manx" }, { "ha", "Hausa" }, { "he", "Hebrew" }, { "hi", "Hindi" }, { "ho", "Hiri Motu" }, { "hr", "Croatian" }, { "ht", "Haitian" }, { "hu", "Hungarian" }, { "hy", "Armenian" }, { "hz", "Herero" }, { "ia", "Interlingua" }, { "id", "Indonesian" }, { "ie", "Interlingue" }, { "ig", "Igbo" }, { "ii", "Sichuan Yi" }, { "ik", "Inupiaq" }, { "io", "Ido" }, { "is", "Icelandic" }, { "it", "Italian" }, { "iu", "Inuktitut" }, { "ja", "Japanese" }, { "jv", "Javanese" }, { "ka", "Georgian" }, { "kg", "Kongo" }, { "ki", "Kikuyu" }, { "kj", "Kuanyama" }, { "kk", "Kazakh" }, { "kl", "Kalaallisut" }, { "km", "Central Khmer" }, { "kn", "Kannada" }, { "ko", "Korean" }, { "kr", "Kanuri" }, { "ks", "Kashmiri" }, { "ku", "Kurdish" }, { "kv", "Komi" }, { "kw", "Cornish" }, { "ky", "Kirghiz" }, { "la", "Latin" }, { "lb", "Luxembourgish" }, { "lg", "Ganda" }, { "li", "Limburgan" }, { "ln", "Lingala" }, { "lo", "Lao" }, { "lt", "Lithuanian" }, { "lu", "Luba-Katanga" }, { "lv", "Latvian" }, { "mg", "Malagasy" }, { "mh", "Marshallese" }, { "mi", "Maori" }, { "mk", "Macedonian" }, { "ml", "Malayalam" }, { "mn", "Mongolian" }, { "mr", "Marathi" }, { "ms", "Malay" }, { "mt", "Maltese" }, { "my", "Burmese" }, { "na", "Nauru" }, { "nb", "Norwegian Bokmål" }, { "nd", "North Ndebele" }, { "ne", "Nepali" }, { "ng", "Ndonga" }, { "nl", "Dutch" }, { "nn", "Norwegian Nynorsk" }, { "no", "Norwegian" }, { "nr", "South Ndebele" }, { "nv", "Navajo" }, { "ny", "Nyanja" }, { "oc", "Occitan" }, { "oj", "Ojibwa" }, { "om", "Oromo" }, { "or", "Oriya" }, { "os", "Ossetian" }, { "pa", "Panjabi" }, { "pi", "Pali" }, { "pl", "Polish" }, { "ps", "Pushto" }, { "pt", "Portuguese" }, { "qu", "Quechua" }, { "rm", "Romansh" }, { "rn", "Rundi" }, { "ro", "Romanian" }, { "ru", "Russian" }, { "rw", "Kinyarwanda" }, { "sa", "Sanskrit" }, { "sc", "Sardinian" }, { "sd", "Sindhi" }, { "se", "Northern Sami" }, { "sg", "Sango" }, { "sh", "Serbo-Croatian" }, { "si", "Sinhala" }, { "sk", "Slovak" }, { "sl", "Slovenian" }, { "sm", "Samoan" }, { "sn", "Shona" }, { "so", "Somali" }, { "sq", "Albanian" }, { "sr", "Serbian" }, { "ss", "Swati" }, { "st", "Southern 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" }, { "ty", "Tahitian" }, { "ug", "Uighur" }, { "uk", "Ukrainian" }, { "ur", "Urdu" }, { "uz", "Uzbek" }, { "ve", "Venda" }, { "vi", "Vietnamese" }, { "vo", "Volapük" }, { "wa", "Walloon" }, { "wo", "Wolof" }, { "xh", "Xhosa" }, { "yi", "Yiddish" }, { "yo", "Yoruba" }, { "za", "Zhuang" }, { "zh", "Chinese" }, { "zu", "Zulu" }, }; static int niso639_1= sizeof( iso639_1 ) / sizeof( iso639_1[0] ); char * iso639_1_from_code( const char *code ) { int i; for ( i=0; i #include "bibutils.h" extern void isiout_write( fields *info, FILE *fp, param *p, unsigned long refnum ); extern void isiout_writeheader( FILE *outptr, param *p ); extern void isiout_initparams( param *p, const char *progname ); #endif hs-bibutils-5.5/bibutils/ristypes.c0000644000000000000000000032263112445605732015660 0ustar0000000000000000/* * ristypes.c * * Copyright (c) Chris Putnam 2003-2013 * * Source code released under the GPL version 2 * */ #include #include #include #include "fields.h" #include "reftypes.h" static lookups generic[] = { { "A1", "AUTHOR", PERSON, LEVEL_MAIN }, /* Deprecated? */ { "A2", "AUTHOR", PERSON, LEVEL_HOST }, /* 'Secondary' Author */ { "A3", "EDITOR", PERSON, LEVEL_SERIES }, /* 'Tertiary' Author -- Series editors */ { "A4", "AUTHOR", PERSON, LEVEL_SERIES }, /* 'Subsidiary' Author */ { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Abstract */ { "AD", "AUTHORADDRESS",SIMPLE, LEVEL_MAIN }, /* Author Address */ { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, /* Author */ { "BT", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "C1", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C2", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C3", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C4", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C5", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C6", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C7", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C8", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "CA", "CAPTION", SIMPLE, LEVEL_MAIN }, /* Caption */ { "CN", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, /* Call Number */ { "CP", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "CT", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "CY", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Place Published */ { "DA", "YEAR", DATE, LEVEL_MAIN }, /* Date */ { "DB", "DATABASE", SIMPLE, LEVEL_MAIN }, /* Name of Database */ { "DI", "DOI", DOI, LEVEL_MAIN }, /* Deprecated? */ { "DO", "DOI", DOI, LEVEL_MAIN }, /* DOI */ { "DP", "DATABASEPROV", SIMPLE, LEVEL_MAIN }, /* Database Provider */ { "ED", "EDITOR", PERSON, LEVEL_MAIN }, /* Deprecated? */ { "EP", "PAGEEND", SIMPLE, LEVEL_MAIN }, /* End Page */ { "ET", "EDITION", SIMPLE, LEVEL_MAIN }, /* Edition */ { "ID", "REFNUM", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "IS", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Number */ { "JA", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "J1", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "J2", "TITLE", SIMPLE, LEVEL_HOST }, /* Alternate Title, abbreviated book or journal */ { "JF", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "JO", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "KW", "KEYWORD", SIMPLE, LEVEL_MAIN }, /* Keywords */ { "L1", "FILEATTACH", LINKEDFILE, LEVEL_MAIN }, /* File Attachments (local, not URL) */ { "L4", "FIGATTACH", LINKEDFILE, LEVEL_MAIN }, /* Figure Attachment (local, not URL) */ { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, /* Language */ { "LB", "LABEL", SIMPLE, LEVEL_MAIN }, /* Label */ { "M1", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Number? */ { "M2", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */ { "M3", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Type of Work? */ { "N1", "NOTES", NOTES, LEVEL_MAIN }, /* Notes */ { "N2", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "NV", "NUMVOLUMES", SIMPLE, LEVEL_MAIN }, /* Number of Volumes */ { "OP", "ORIGPUB", SIMPLE, LEVEL_MAIN }, /* Original Publication */ { "PB", "PUBLISHER", SIMPLE, LEVEL_MAIN }, /* Publisher */ { "PY", "YEAR", DATE, LEVEL_MAIN }, /* Year */ { "RI", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, /* Reviewed Item */ { "RN", "NOTES", SIMPLE, LEVEL_MAIN }, /* Resarch Notes -> Notes */ { "RP", "REPRINTSTATUS",SIMPLE, LEVEL_MAIN }, /* Reprint Edition */ { "SE", "SECTION", SIMPLE, LEVEL_MAIN }, /* Section */ { "SN", "SERIALNUMBER", SERIALNO,LEVEL_MAIN }, /* ISBN/ISSN */ { "SP", "PAGESTART", SIMPLE, LEVEL_MAIN }, /* Start Page */ { "ST", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, /* Short Title */ { "T1", "TITLE", TITLE, LEVEL_MAIN }, /* Deprecated? */ { "T2", "SHORTTITLE", SIMPLE, LEVEL_HOST }, /* 'Secondary' Title */ { "T3", "TITLE", SIMPLE, LEVEL_SERIES }, /* 'Tertiary' Title */ { "TI", "TITLE", TITLE, LEVEL_MAIN }, /* Title */ { "TT", "TRANSTITLE", TITLE, LEVEL_MAIN }, /* Translated Title */ { "U1", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U2", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U3", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U4", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U5", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "UR", "URL", SIMPLE, LEVEL_MAIN }, /* URL */ { "VL", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Volume */ { "VO", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "Y1", "YEAR", DATE, LEVEL_MAIN }, /* Deprecated? */ { "Y2", "MONTH", SIMPLE, LEVEL_MAIN }, /* Access Date */ }; static lookups article[] = { { "A1", "AUTHOR", PERSON, LEVEL_MAIN }, /* Deprecated? */ { "A2", "AUTHOR", PERSON, LEVEL_HOST }, /* 'Secondary' Author */ { "A3", "EDITOR", PERSON, LEVEL_SERIES }, /* 'Tertiary' Author -- Series editor */ { "A4", "AUTHOR", PERSON, LEVEL_SERIES }, /* 'Subsidiary' Author */ { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Abstract */ { "AD", "AUTHORADDRESS",SIMPLE, LEVEL_MAIN }, /* Author Address */ { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, /* Author */ { "C1", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C2", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C3", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C4", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C5", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C6", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C7", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C8", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "CA", "CAPTION", SIMPLE, LEVEL_MAIN }, /* Caption */ { "CN", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, /* Call Number */ { "CP", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "CT", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "CY", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Place Published */ { "DA", "YEAR", DATE, LEVEL_MAIN }, /* Date */ { "DB", "DATABASE", SIMPLE, LEVEL_MAIN }, /* Database */ { "DI", "DOI", DOI, LEVEL_MAIN }, /* Deprecated? */ { "DO", "DOI", DOI, LEVEL_MAIN }, /* DOI */ { "DP", "DATABASEPROV", SIMPLE, LEVEL_MAIN }, /* Database Provider */ { "ED", "EDITOR", PERSON, LEVEL_HOST }, /* Deprecated? */ { "EP", "PAGEEND", SIMPLE, LEVEL_MAIN }, /* End Page */ { "ET", "EDITION", SIMPLE, LEVEL_MAIN }, /* Edition */ { "ID", "REFNUM", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "IS", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Number */ { "J1", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "J2", "TITLE", SIMPLE, LEVEL_SERIES }, /* Alternate Title, abbreviated book or journal */ { "JA", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "JF", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "JO", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "KW", "KEYWORD", SIMPLE, LEVEL_MAIN }, /* Keywords */ { "L1", "FILEATTACH", LINKEDFILE, LEVEL_MAIN }, /* File Attachment (local, not URL) */ { "L4", "FIGATTACH", LINKEDFILE, LEVEL_MAIN }, /* Figure Attachment (local, not URL) */ { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, /* Language */ { "LB", "LABEL", SIMPLE, LEVEL_MAIN }, /* Label */ { "M1", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Number? */ { "M2", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */ { "M3", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Type of Work? */ { "N1", "NOTES", NOTES, LEVEL_MAIN }, /* Notes */ { "N2", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "NV", "NUMVOLUMES", SIMPLE, LEVEL_MAIN }, /* Number of Volumes */ { "OP", "ORIGPUB", SIMPLE, LEVEL_MAIN }, /* Original Publication */ { "PB", "PUBLISHER", SIMPLE, LEVEL_HOST }, /* Publisher */ { "PY", "PARTYEAR", DATE, LEVEL_MAIN }, /* Year */ { "RI", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, /* Reviewed Item */ { "RN", "NOTES", SIMPLE, LEVEL_MAIN }, /* Research Notes */ { "RP", "REPRINTSTATUS",SIMPLE, LEVEL_MAIN }, /* Reprint Edition */ { "SE", "SECTION", SIMPLE, LEVEL_MAIN }, /* Section */ { "SN", "SERIALNUMBER", SERIALNO,LEVEL_HOST }, /* ISBN/ISSN */ { "SP", "PAGESTART", SIMPLE, LEVEL_MAIN }, /* Start Page */ { "ST", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, /* Short Title */ { "T1", "TITLE", TITLE, LEVEL_MAIN }, /* Deprecated? */ { "T2", "SHORTTITLE", SIMPLE, LEVEL_HOST }, /* 'Secondary' Title */ { "T3", "TITLE", SIMPLE, LEVEL_SERIES }, /* 'Tertiary' Title */ { "TI", "TITLE", TITLE, LEVEL_MAIN }, /* Title */ { "TT", "TRANSTITLE", TITLE, LEVEL_MAIN }, /* Translated Title */ { "U1", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U2", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U3", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U4", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U5", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "UR", "URL", SIMPLE, LEVEL_MAIN }, /* URL */ { "VL", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Volume */ { "VO", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "Y1", "PARTYEAR", DATE, LEVEL_MAIN }, /* Deprecated */ { "Y2", "PARTMONTH", SIMPLE, LEVEL_MAIN }, /* Access Date */ { " ", "INTERNAL_TYPE|ARTICLE", ALWAYS, LEVEL_MAIN }, { " ", "ISSUANCE|continuing", ALWAYS, LEVEL_HOST }, { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { " ", "GENRE|journal article", ALWAYS, LEVEL_MAIN }, { " ", "GENRE|periodical", ALWAYS, LEVEL_HOST }, { " ", "GENRE|academic journal", ALWAYS, LEVEL_HOST } }; /* magazine article */ static lookups magarticle[] = { { "A1", "AUTHOR", PERSON, LEVEL_MAIN }, /* Deprecated? */ { "A2", "AUTHOR", PERSON, LEVEL_HOST }, /* 'Secondary' Author */ { "A3", "EDITOR", PERSON, LEVEL_SERIES }, /* 'Tertiary' Author - Series editors */ { "A4", "AUTHOR", PERSON, LEVEL_SERIES }, /* 'Subsidiary' Author */ { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Abstract */ { "AD", "AUTHORADDRESS",SIMPLE, LEVEL_MAIN }, /* Author Address */ { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, /* Author */ { "C1", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C2", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C3", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C4", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C5", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C6", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C7", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C8", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "CA", "CAPTION", SIMPLE, LEVEL_MAIN }, /* Caption */ { "CN", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, /* Call Number */ { "CP", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "CT", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "CY", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Place Published */ { "DA", "YEAR", DATE, LEVEL_MAIN }, /* Date */ { "DB", "DATABASE", SIMPLE, LEVEL_MAIN }, /* Database */ { "DI", "DOI", DOI, LEVEL_MAIN }, /* Deprecated? */ { "DO", "DOI", DOI, LEVEL_MAIN }, /* DOI */ { "DP", "DATABASEPROV", SIMPLE, LEVEL_MAIN }, /* Database Provider */ { "ED", "EDITOR", PERSON, LEVEL_HOST }, /* Deprecated? */ { "EP", "PAGEEND", SIMPLE, LEVEL_MAIN }, /* End Page */ { "ET", "EDITION", SIMPLE, LEVEL_MAIN }, /* Edition */ { "ID", "REFNUM", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "IS", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Number */ { "J1", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "J2", "TITLE", SIMPLE, LEVEL_SERIES }, /* Alternate Title, abbreviated book or journal */ { "JA", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "JF", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "JO", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "KW", "KEYWORD", SIMPLE, LEVEL_MAIN }, /* Keywords */ { "L1", "FILEATTACH", LINKEDFILE, LEVEL_MAIN }, /* File Attachment (local, not URL) */ { "L4", "FIGATTACH", LINKEDFILE, LEVEL_MAIN }, /* Figure Attachment (local, not URL) */ { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, /* Language */ { "LB", "LABEL", SIMPLE, LEVEL_MAIN }, /* Label */ { "M1", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Number? */ { "M2", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */ { "M3", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Type of Work? */ { "N1", "NOTES", NOTES, LEVEL_MAIN }, /* Notes */ { "N2", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "NV", "NUMVOLUMES", SIMPLE, LEVEL_MAIN }, /* Number of Volumes */ { "OP", "ORIGPUB", SIMPLE, LEVEL_MAIN }, /* Original Publication */ { "PB", "PUBLISHER", SIMPLE, LEVEL_HOST }, /* Publisher */ { "PY", "PARTYEAR", DATE, LEVEL_MAIN }, /* Year */ { "RI", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, /* Reviewed Item */ { "RN", "NOTES", SIMPLE, LEVEL_MAIN }, /* Research Notes */ { "RP", "REPRINTSTATUS",SIMPLE, LEVEL_MAIN }, /* Reprint Edition */ { "SE", "SECTION", SIMPLE, LEVEL_MAIN }, /* Section */ { "SN", "SERIALNUMBER", SERIALNO,LEVEL_HOST }, /* ISBN/ISSN */ { "SP", "PAGESTART", SIMPLE, LEVEL_MAIN }, /* Start Page */ { "ST", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, /* Short Title */ { "T1", "TITLE", TITLE, LEVEL_MAIN }, /* Deprecated? */ { "T2", "SHORTTITLE", SIMPLE, LEVEL_HOST }, /* 'Secondary' Title */ { "T3", "TITLE", SIMPLE, LEVEL_SERIES }, /* 'Tertiary' Title */ { "TI", "TITLE", TITLE, LEVEL_MAIN }, /* Title */ { "TT", "TRANSTITLE", TITLE, LEVEL_MAIN }, /* Translated Title */ { "U1", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U2", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U3", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U4", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U5", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "UR", "URL", SIMPLE, LEVEL_MAIN }, /* URL */ { "VL", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Volume */ { "VO", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "Y1", "PARTYEAR", DATE, LEVEL_MAIN }, /* Deprecated */ { "Y2", "PARTMONTH", SIMPLE, LEVEL_MAIN }, /* Access Date */ { " ", "ISSUANCE|continuing", ALWAYS, LEVEL_HOST }, { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { " ", "GENRE|periodical", ALWAYS, LEVEL_HOST }, { " ", "GENRE|magazine", ALWAYS, LEVEL_HOST } }; static lookups newsarticle[] = { { "A1", "AUTHOR", PERSON, LEVEL_MAIN }, /* Deprecated? */ { "A2", "AUTHOR", PERSON, LEVEL_HOST }, /* 'Secondary' Author */ { "A3", "EDITOR", PERSON, LEVEL_SERIES }, /* 'Tertiary' Author - Series editor */ { "A4", "AUTHOR", PERSON, LEVEL_SERIES }, /* 'Subsidiary' Author */ { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Abstract */ { "AD", "AUTHORADDRESS",SIMPLE, LEVEL_MAIN }, /* Author Address */ { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, /* Author */ { "C1", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C2", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C3", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C4", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C5", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C6", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C7", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C8", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "CA", "CAPTION", SIMPLE, LEVEL_MAIN }, /* Caption */ { "CN", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, /* Call Number */ { "CP", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "CT", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "CY", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Place Published */ { "DA", "YEAR", DATE, LEVEL_MAIN }, /* Date */ { "DB", "DATABASE", SIMPLE, LEVEL_MAIN }, /* Database */ { "DI", "DOI", DOI, LEVEL_MAIN }, /* Deprecated? */ { "DO", "DOI", DOI, LEVEL_MAIN }, /* DOI */ { "DP", "DATABASEPROV", SIMPLE, LEVEL_MAIN }, /* Database Provider */ { "ED", "EDITOR", PERSON, LEVEL_HOST }, /* Deprecated? */ { "EP", "PAGEEND", SIMPLE, LEVEL_MAIN }, /* End Page */ { "ET", "EDITION", SIMPLE, LEVEL_MAIN }, /* Edition */ { "ID", "REFNUM", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "IS", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Number */ { "J1", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "J2", "TITLE", SIMPLE, LEVEL_SERIES }, /* Alternate Title, abbreviated book or journal */ { "JA", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "JF", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "JO", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "KW", "KEYWORD", SIMPLE, LEVEL_MAIN }, /* Keywords */ { "L1", "FILEATTACH", LINKEDFILE, LEVEL_MAIN }, /* File Attachment (local, not URL) */ { "L4", "FIGATTACH", LINKEDFILE, LEVEL_MAIN }, /* Figure Attachment (local, not URL) */ { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, /* Language */ { "LB", "LABEL", SIMPLE, LEVEL_MAIN }, /* Label */ { "M1", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Number? */ { "M2", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */ { "M3", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Type of Work? */ { "N1", "NOTES", NOTES, LEVEL_MAIN }, /* Notes */ { "N2", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "NV", "NUMVOLUMES", SIMPLE, LEVEL_MAIN }, /* Number of Volumes */ { "OP", "ORIGPUB", SIMPLE, LEVEL_MAIN }, /* Original Publication */ { "PB", "PUBLISHER", SIMPLE, LEVEL_HOST }, /* Publisher */ { "PY", "PARTYEAR", DATE, LEVEL_MAIN }, /* Year */ { "RI", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, /* Reviewed Item */ { "RN", "NOTES", SIMPLE, LEVEL_MAIN }, /* Research Notes */ { "RP", "REPRINTSTATUS",SIMPLE, LEVEL_MAIN }, /* Reprint Edition */ { "SE", "SECTION", SIMPLE, LEVEL_MAIN }, /* Section */ { "SN", "SERIALNUMBER", SERIALNO,LEVEL_HOST }, /* ISBN/ISSN */ { "SP", "PAGESTART", SIMPLE, LEVEL_MAIN }, /* Start Page */ { "ST", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, /* Short Title */ { "T1", "TITLE", TITLE, LEVEL_MAIN }, /* Deprecated? */ { "T2", "SHORTTITLE", SIMPLE, LEVEL_HOST }, /* 'Secondary' Title */ { "T3", "TITLE", SIMPLE, LEVEL_SERIES }, /* 'Tertiary' Title */ { "TI", "TITLE", TITLE, LEVEL_MAIN }, /* Title */ { "TT", "TRANSTITLE", TITLE, LEVEL_MAIN }, /* Translated Title */ { "U1", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U2", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U3", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U4", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U5", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "UR", "URL", SIMPLE, LEVEL_MAIN }, /* URL */ { "VL", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Volume */ { "VO", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "Y1", "PARTYEAR", DATE, LEVEL_MAIN }, /* Deprecated */ { "Y2", "PARTMONTH", SIMPLE, LEVEL_MAIN }, /* Access Date */ { " ", "INTERNAL_TYPE|NEWSARTICLE", ALWAYS, LEVEL_MAIN }, { " ", "ISSUANCE|continuing", ALWAYS, LEVEL_HOST }, { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { " ", "GENRE|newspaper", ALWAYS, LEVEL_HOST } }; static lookups book[] = { { "A1", "AUTHOR", PERSON, LEVEL_MAIN }, /* Deprecated? */ { "A2", "AUTHOR", PERSON, LEVEL_HOST }, /* 'Secondary' Author */ { "A3", "EDITOR", PERSON, LEVEL_HOST }, /* 'Tertiary' Author - Series editor */ { "A4", "AUTHOR", PERSON, LEVEL_SERIES }, /* 'Subsidiary' Author */ { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Abstract */ { "AD", "AUTHORADDRESS",SIMPLE, LEVEL_MAIN }, /* Author Address */ { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, /* Author */ { "BT", "TITLE", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "C1", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C2", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C3", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C4", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C5", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C6", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C7", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C8", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "CA", "CAPTION", SIMPLE, LEVEL_MAIN }, /* Caption */ { "CN", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, /* Call Number */ { "CP", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "CT", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "CY", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Place Published */ { "DA", "YEAR", DATE, LEVEL_MAIN }, /* Date */ { "DB", "DATABASE", SIMPLE, LEVEL_MAIN }, /* Database */ { "DI", "DOI", DOI, LEVEL_MAIN }, /* Deprecated? */ { "DO", "DOI", DOI, LEVEL_MAIN }, /* DOI */ { "DP", "DATABASEPROV", SIMPLE, LEVEL_MAIN }, /* Database Provider */ { "ED", "EDITOR", PERSON, LEVEL_MAIN }, /* Deprecated? */ { "EP", "PAGEEND", SIMPLE, LEVEL_MAIN }, /* End Page */ { "ET", "EDITION", SIMPLE, LEVEL_MAIN }, /* Edition */ { "ID", "REFNUM", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "IS", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Number */ { "J1", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "J2", "TITLE", SIMPLE, LEVEL_HOST }, /* Alternate Title, abbreviated book or journal */ { "JA", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "JF", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "JO", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "KW", "KEYWORD", SIMPLE, LEVEL_MAIN }, /* Keywords */ { "L1", "FILEATTACH", LINKEDFILE, LEVEL_MAIN }, /* File Attachment (local, not URL) */ { "L4", "FIGATTACH", LINKEDFILE, LEVEL_MAIN }, /* Figure Attachment (local, not URL) */ { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, /* Language */ { "LB", "LABEL", SIMPLE, LEVEL_MAIN }, /* Label */ { "M1", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Number? */ { "M2", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */ { "M3", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Type of Work? */ { "N1", "NOTES", NOTES, LEVEL_MAIN }, /* Notes */ { "N2", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "NV", "NUMVOLUMES", SIMPLE, LEVEL_MAIN }, /* Number of Volumes */ { "OP", "ORIGPUB", SIMPLE, LEVEL_MAIN }, /* Original Publication */ { "PB", "PUBLISHER", SIMPLE, LEVEL_MAIN }, /* Publisher */ { "PY", "YEAR", DATE, LEVEL_MAIN }, /* Year */ { "RI", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, /* Reviewed Item */ { "RN", "NOTES", SIMPLE, LEVEL_MAIN }, /* Research Notes */ { "RP", "REPRINTSTATUS",SIMPLE, LEVEL_MAIN }, /* Reprint Edition */ { "SE", "SECTION", SIMPLE, LEVEL_MAIN }, /* Section */ { "SN", "SERIALNUMBER", SERIALNO,LEVEL_MAIN }, /* ISBN/ISSN */ { "SP", "PAGESTART", SIMPLE, LEVEL_MAIN }, /* Start Page */ { "ST", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, /* Short Title */ { "T1", "TITLE", TITLE, LEVEL_MAIN }, /* Deprecated? */ { "T2", "SHORTTITLE", SIMPLE, LEVEL_HOST }, /* 'Secondary' Title -- here abbreviated title for series*/ { "T3", "TITLE", SIMPLE, LEVEL_HOST }, /* 'Tertiary' Title -- series title */ { "TI", "TITLE", TITLE, LEVEL_MAIN }, /* Title */ { "TT", "TRANSTITLE", TITLE, LEVEL_MAIN }, /* Translated Title */ { "U1", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U2", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U3", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U4", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U5", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "UR", "URL", SIMPLE, LEVEL_MAIN }, /* URL */ { "VL", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Volume */ { "VO", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "Y1", "YEAR", DATE, LEVEL_MAIN }, /* Deprecated */ { "Y2", "MONTH", SIMPLE, LEVEL_MAIN }, /* Access Date */ { " ", "ISSUANCE|monographic", ALWAYS, LEVEL_MAIN }, { " ", "GENRE|book", ALWAYS, LEVEL_MAIN }, { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN } }; static lookups inbook[] = { { "A1", "AUTHOR", PERSON, LEVEL_MAIN }, /* Deprecated? */ { "A2", "AUTHOR", PERSON, LEVEL_HOST }, /* 'Secondary' Author */ { "A3", "EDITOR", PERSON, LEVEL_SERIES }, /* 'Tertiary' Author - series editor */ { "A4", "AUTHOR", PERSON, LEVEL_SERIES }, /* 'Subsidiary' Author */ { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Abstract */ { "AD", "AUTHORADDRESS",SIMPLE, LEVEL_MAIN }, /* Author Address */ { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, /* Author */ { "BT", "TITLE", SIMPLE, LEVEL_HOST }, /* Book Title - Deprecated? */ { "C1", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C2", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C3", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C4", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C5", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C6", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C7", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C8", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "CA", "CAPTION", SIMPLE, LEVEL_MAIN }, /* Caption */ { "CN", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, /* Call Number */ { "CP", "ISSUE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "CT", "ADDRESS", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "CY", "ADDRESS", SIMPLE, LEVEL_HOST }, /* Place Published */ { "DA", "YEAR", DATE, LEVEL_MAIN }, /* Date */ { "DB", "DATABASE", SIMPLE, LEVEL_MAIN }, /* Database */ { "DI", "DOI", DOI, LEVEL_MAIN }, /* Deprecated? */ { "DO", "DOI", DOI, LEVEL_MAIN }, /* DOI */ { "DP", "DATABASEPROV", SIMPLE, LEVEL_MAIN }, /* Database Provider */ { "ED", "EDITOR", PERSON, LEVEL_HOST }, /* Deprecated? */ { "EP", "PAGEEND", SIMPLE, LEVEL_MAIN }, /* End Page */ { "ET", "EDITION", SIMPLE, LEVEL_HOST }, /* Edition */ { "ID", "REFNUM", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "IS", "ISSUE", SIMPLE, LEVEL_HOST }, /* Number */ { "J1", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "J2", "TITLE", SIMPLE, LEVEL_HOST }, /* Alternate Title, abbreviated book or journal */ { "JA", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "JF", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "JO", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "KW", "KEYWORD", SIMPLE, LEVEL_MAIN }, /* Keywords */ { "L1", "FILEATTACH", LINKEDFILE, LEVEL_MAIN }, /* File Attachment (local, not URL) */ { "L4", "FIGATTACH", LINKEDFILE, LEVEL_MAIN }, /* Figure Attachment (local, not URL) */ { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, /* Language */ { "LB", "LABEL", SIMPLE, LEVEL_MAIN }, /* Label */ { "M1", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Number? */ { "M2", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */ { "M3", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Type of Work? */ { "N1", "NOTES", NOTES, LEVEL_MAIN }, /* Notes */ { "N2", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "NV", "NUMVOLUMES", SIMPLE, LEVEL_MAIN }, /* Number of Volumes */ { "OP", "ORIGPUB", SIMPLE, LEVEL_MAIN }, /* Original Publication */ { "PB", "PUBLISHER", SIMPLE, LEVEL_HOST }, /* Publisher */ { "PY", "YEAR", DATE, LEVEL_HOST }, /* Year */ { "RI", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, /* Reviewed Item */ { "RN", "NOTES", SIMPLE, LEVEL_MAIN }, /* Research Notes */ { "RP", "REPRINTSTATUS",SIMPLE, LEVEL_MAIN }, /* Reprint Edition */ { "SE", "SECTION", SIMPLE, LEVEL_MAIN }, /* Section */ { "SN", "SERIALNUMBER", SERIALNO,LEVEL_HOST }, /* ISBN/ISSN */ { "SP", "PAGESTART", SIMPLE, LEVEL_MAIN }, /* Start Page */ { "ST", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, /* Short Title */ { "T1", "TITLE", TITLE, LEVEL_MAIN }, /* Deprecated? */ { "T2", "SHORTTITLE", SIMPLE, LEVEL_SERIES }, /* 'Secondary' Title -- here abbreviated title for series*/ { "T3", "TITLE", SIMPLE, LEVEL_SERIES }, /* 'Tertiary' Title */ { "TI", "TITLE", TITLE, LEVEL_MAIN }, /* Title */ { "TT", "TRANSTITLE", TITLE, LEVEL_MAIN }, /* Translated Title */ { "U1", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U2", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U3", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U4", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U5", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "UR", "URL", SIMPLE, LEVEL_MAIN }, /* URL */ { "VL", "VOLUME", SIMPLE, LEVEL_HOST }, /* Volume */ { "VO", "VOLUME", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "Y1", "YEAR", DATE, LEVEL_HOST }, /* Deprecated */ { "Y2", "MONTH", SIMPLE, LEVEL_HOST }, /* Access Date */ { " ", "GENRE|book chapter", ALWAYS, LEVEL_MAIN }, { " ", "GENRE|book", ALWAYS, LEVEL_HOST }, { " ", "ISSUANCE|monographic", ALWAYS, LEVEL_HOST }, { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN } }; static lookups conference[] = { { "A1", "AUTHOR", PERSON, LEVEL_MAIN }, /* Deprecated? */ { "A2", "AUTHOR:ASIS", SIMPLE, LEVEL_HOST }, /* 'Secondary' Author - Name of conference */ { "A3", "EDITOR", PERSON, LEVEL_SERIES }, /* 'Tertiary' Author - Series editor */ { "A4", "AUTHOR", PERSON, LEVEL_SERIES }, /* 'Subsidiary' Author */ { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Abstract */ { "AD", "AUTHORADDRESS",SIMPLE, LEVEL_MAIN }, /* Author Address */ { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, /* Author */ { "C1", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C2", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C3", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C4", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C5", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C6", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C7", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C8", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "CA", "CAPTION", SIMPLE, LEVEL_MAIN }, /* Caption */ { "CN", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, /* Call Number */ { "CP", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "CT", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "CY", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Place Published */ { "DA", "YEAR", DATE, LEVEL_MAIN }, /* Date */ { "DB", "DATABASE", SIMPLE, LEVEL_MAIN }, /* Database */ { "DI", "DOI", DOI, LEVEL_MAIN }, /* Deprecated? */ { "DO", "DOI", DOI, LEVEL_MAIN }, /* DOI */ { "DP", "DATABASEPROV", SIMPLE, LEVEL_MAIN }, /* Database Provider */ { "ED", "EDITOR", PERSON, LEVEL_MAIN }, /* Deprecated? */ { "EP", "PAGEEND", SIMPLE, LEVEL_MAIN }, /* End Page */ { "ET", "EDITION", SIMPLE, LEVEL_MAIN }, /* Edition */ { "ID", "REFNUM", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "IS", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Number */ { "J1", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "J2", "TITLE", SIMPLE, LEVEL_HOST }, /* Alternate Title, abbreviated book or journal */ { "JA", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "JF", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "JO", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "KW", "KEYWORD", SIMPLE, LEVEL_MAIN }, /* Keywords */ { "L1", "FILEATTACH", LINKEDFILE, LEVEL_MAIN }, /* File Attachment (local, not URL) */ { "L4", "FIGATTACH", LINKEDFILE, LEVEL_MAIN }, /* Figure Attachment (local, not URL) */ { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, /* Language */ { "LB", "LABEL", SIMPLE, LEVEL_MAIN }, /* Label */ { "M1", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Number? */ { "M2", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */ { "M3", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Type of Work? */ { "N1", "NOTES", NOTES, LEVEL_MAIN }, /* Notes */ { "N2", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "NV", "NUMVOLUMES", SIMPLE, LEVEL_MAIN }, /* Number of Volumes */ { "OP", "ORIGPUB", SIMPLE, LEVEL_MAIN }, /* Original Publication */ { "PB", "PUBLISHER", SIMPLE, LEVEL_HOST }, /* Publisher */ { "PY", "YEAR", DATE, LEVEL_HOST }, /* Year */ { "RI", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, /* Reviewed Item */ { "RN", "NOTES", SIMPLE, LEVEL_MAIN }, /* Research Notes */ { "RP", "REPRINTSTATUS",SIMPLE, LEVEL_MAIN }, /* Reprint Edition */ { "SE", "SECTION", SIMPLE, LEVEL_MAIN }, /* Section */ { "SN", "SERIALNUMBER", SERIALNO,LEVEL_MAIN }, /* ISBN/ISSN */ { "SP", "PAGESTART", SIMPLE, LEVEL_MAIN }, /* Start Page */ { "ST", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, /* Short Title */ { "T1", "TITLE", TITLE, LEVEL_MAIN }, /* Deprecated? */ { "BT", "TITLE", SIMPLE, LEVEL_HOST }, /* Book Title */ { "T2", "SHORTTITLE", SIMPLE, LEVEL_SERIES }, /* 'Secondary' Title - Abbreviated series TItle*/ { "T3", "TITLE", SIMPLE, LEVEL_SERIES }, /* 'Tertiary' Title - Series Title*/ { "TI", "TITLE", TITLE, LEVEL_MAIN }, /* Title */ { "TT", "TRANSTITLE", TITLE, LEVEL_MAIN }, /* Translated Title */ { "U1", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U2", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U3", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U4", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U5", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "UR", "URL", SIMPLE, LEVEL_MAIN }, /* URL */ { "VL", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Volume */ { "VO", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "Y1", "YEAR", DATE, LEVEL_HOST }, /* Deprecated */ { "Y2", "MONTH", SIMPLE, LEVEL_HOST }, /* Access Date */ { " ", "INTERNAL_TYPE|CONFERENCE", ALWAYS, LEVEL_MAIN }, { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { " ", "GENRE|conference publication", ALWAYS, LEVEL_HOST } }; static lookups statute[] = { { "A1", "AUTHOR", PERSON, LEVEL_MAIN }, /* Deprecated? */ { "A2", "AUTHOR", PERSON, LEVEL_HOST }, /* 'Secondary' Author */ { "A3", "EDITOR", PERSON, LEVEL_SERIES }, /* 'Tertiary' Author - Series editor */ { "A4", "AUTHOR", PERSON, LEVEL_SERIES }, /* 'Subsidiary' Author */ { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Abstract */ { "AD", "AUTHORADDRESS",SIMPLE, LEVEL_MAIN }, /* Author Address */ { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, /* Author */ { "BT", "TITLE", SIMPLE, LEVEL_HOST }, /* Book Title - Deprecated? */ { "C1", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C2", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C3", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C4", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C5", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C6", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C7", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C8", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "CA", "CAPTION", SIMPLE, LEVEL_MAIN }, /* Caption */ { "CN", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, /* Call Number */ { "CP", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "CT", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "CY", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Place Published */ { "DA", "YEAR", DATE, LEVEL_MAIN }, /* Date */ { "DB", "DATABASE", SIMPLE, LEVEL_MAIN }, /* Database */ { "DI", "DOI", DOI, LEVEL_MAIN }, /* Deprecated? */ { "DO", "DOI", DOI, LEVEL_MAIN }, /* DOI */ { "DP", "DATABASEPROV", SIMPLE, LEVEL_MAIN }, /* Database Provider */ { "ED", "EDITOR", PERSON, LEVEL_MAIN }, /* Deprecated? */ { "EP", "PAGEEND", SIMPLE, LEVEL_MAIN }, /* End Page */ { "ET", "EDITION", SIMPLE, LEVEL_MAIN }, /* Edition */ { "ID", "REFNUM", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "IS", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Number */ { "J1", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "J2", "TITLE", SIMPLE, LEVEL_HOST }, /* Alternate Title, abbreviated book or journal */ { "JA", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "JF", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "JO", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "KW", "KEYWORD", SIMPLE, LEVEL_MAIN }, /* Keywords */ { "L1", "FILEATTACH", LINKEDFILE, LEVEL_MAIN }, /* File Attachment (local, not URL) */ { "L4", "FIGATTACH", LINKEDFILE, LEVEL_MAIN }, /* Figure Attachment (local, not URL) */ { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, /* Language */ { "LB", "LABEL", SIMPLE, LEVEL_MAIN }, /* Label */ { "M1", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Number? */ { "M2", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */ { "M3", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Type of Work? */ { "N1", "NOTES", NOTES, LEVEL_MAIN }, /* Notes */ { "N2", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "NV", "NUMVOLUMES", SIMPLE, LEVEL_MAIN }, /* Number of Volumes */ { "OP", "ORIGPUB", SIMPLE, LEVEL_MAIN }, /* Original Publication */ { "PB", "PUBLISHER", SIMPLE, LEVEL_MAIN }, /* Publisher */ { "PY", "YEAR", DATE, LEVEL_MAIN }, /* Year */ { "RI", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, /* Reviewed Item */ { "RN", "NOTES", SIMPLE, LEVEL_MAIN }, /* Research Notes */ { "RP", "REPRINTSTATUS",SIMPLE, LEVEL_MAIN }, /* Reprint Edition */ { "SE", "SECTION", SIMPLE, LEVEL_MAIN }, /* Section */ { "SN", "SERIALNUMBER", SERIALNO,LEVEL_MAIN }, /* ISBN/ISSN */ { "SP", "PAGESTART", SIMPLE, LEVEL_MAIN }, /* Start Page */ { "ST", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, /* Short Title */ { "T1", "TITLE", TITLE, LEVEL_MAIN }, /* Deprecated? */ { "T2", "SHORTTITLE", SIMPLE, LEVEL_HOST }, /* 'Secondary' Title */ { "T3", "TITLE", SIMPLE, LEVEL_SERIES }, /* 'Tertiary' Title */ { "TI", "TITLE", TITLE, LEVEL_MAIN }, /* Title */ { "TT", "TRANSTITLE", TITLE, LEVEL_MAIN }, /* Translated Title */ { "U1", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U2", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U3", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U4", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U5", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "UR", "URL", SIMPLE, LEVEL_MAIN }, /* URL */ { "VL", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Volume */ { "VO", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "Y1", "YEAR", DATE, LEVEL_MAIN }, /* Deprecated */ { "Y2", "MONTH", SIMPLE, LEVEL_MAIN }, /* Access Date */ { " ", "INTERNAL_TYPE|STATUTE", ALWAYS, LEVEL_MAIN }, { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { " ", "GENRE|legislation", ALWAYS, LEVEL_MAIN } }; static lookups hearing[] = { { "A1", "AUTHOR", PERSON, LEVEL_MAIN }, /* Deprecated? */ { "A2", "AUTHOR", PERSON, LEVEL_HOST }, /* 'Secondary' Author */ { "A3", "EDITOR", PERSON, LEVEL_SERIES }, /* 'Tertiary' Author - series editor */ { "A4", "AUTHOR", PERSON, LEVEL_SERIES }, /* 'Subsidiary' Author */ { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Abstract */ { "AD", "AUTHORADDRESS",SIMPLE, LEVEL_MAIN }, /* Author Address */ { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, /* Author */ { "BT", "TITLE", SIMPLE, LEVEL_MAIN }, /* Book Title - Deprecated? */ { "C1", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C2", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C3", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C4", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C5", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C6", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C7", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C8", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "CA", "CAPTION", SIMPLE, LEVEL_MAIN }, /* Caption */ { "CN", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, /* Call Number */ { "CP", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "CT", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "CY", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Place Published */ { "DA", "YEAR", DATE, LEVEL_MAIN }, /* Date */ { "DB", "DATABASE", SIMPLE, LEVEL_MAIN }, /* Database */ { "DI", "DOI", DOI, LEVEL_MAIN }, /* Deprecated? */ { "DO", "DOI", DOI, LEVEL_MAIN }, /* DOI */ { "DP", "DATABASEPROV", SIMPLE, LEVEL_MAIN }, /* Database Provider */ { "ED", "EDITOR", PERSON, LEVEL_MAIN }, /* Deprecated? */ { "EP", "PAGEEND", SIMPLE, LEVEL_MAIN }, /* End Page */ { "ET", "EDITION", SIMPLE, LEVEL_MAIN }, /* Edition */ { "ID", "REFNUM", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "IS", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Number */ { "J1", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "J2", "TITLE", SIMPLE, LEVEL_HOST }, /* Alternate Title, abbreviated book or journal */ { "JA", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "JF", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "JO", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "KW", "KEYWORD", SIMPLE, LEVEL_MAIN }, /* Keywords */ { "L1", "FILEATTACH", LINKEDFILE, LEVEL_MAIN }, /* File Attachment (local, not URL) */ { "L4", "FIGATTACH", LINKEDFILE, LEVEL_MAIN }, /* Figure Attachment (local, not URL) */ { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, /* Language */ { "LB", "LABEL", SIMPLE, LEVEL_MAIN }, /* Label */ { "M1", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Number? */ { "M2", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */ { "M3", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Type of Work? */ { "N1", "NOTES", NOTES, LEVEL_MAIN }, /* Notes */ { "N2", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "NV", "NUMVOLUMES", SIMPLE, LEVEL_MAIN }, /* Number of Volumes */ { "OP", "ORIGPUB", SIMPLE, LEVEL_MAIN }, /* Original Publication */ { "PB", "PUBLISHER", SIMPLE, LEVEL_MAIN }, /* Publisher */ { "PY", "YEAR", DATE, LEVEL_MAIN }, /* Year */ { "RI", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, /* Reviewed Item */ { "RN", "NOTES", SIMPLE, LEVEL_MAIN }, /* Research Notes */ { "RP", "REPRINTSTATUS",SIMPLE, LEVEL_MAIN }, /* Reprint Edition */ { "SE", "SECTION", SIMPLE, LEVEL_MAIN }, /* Section */ { "SN", "SERIALNUMBER", SERIALNO,LEVEL_MAIN }, /* ISBN/ISSN */ { "SP", "PAGESTART", SIMPLE, LEVEL_MAIN }, /* Start Page */ { "ST", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, /* Short Title */ { "T1", "TITLE", TITLE, LEVEL_MAIN }, /* Deprecated? */ { "T2", "SHORTTITLE", SIMPLE, LEVEL_HOST }, /* 'Secondary' Title */ { "T3", "TITLE", SIMPLE, LEVEL_SERIES }, /* 'Tertiary' Title */ { "TI", "TITLE", TITLE, LEVEL_MAIN }, /* Title */ { "TT", "TRANSTITLE", TITLE, LEVEL_MAIN }, /* Translated Title */ { "U1", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U2", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U3", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U4", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U5", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "UR", "URL", SIMPLE, LEVEL_MAIN }, /* URL */ { "VL", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Volume */ { "VO", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "Y1", "YEAR", DATE, LEVEL_MAIN }, /* Deprecated */ { "Y2", "MONTH", SIMPLE, LEVEL_MAIN }, /* Access Date */ { " ", "INTERNAL_TYPE|HEARING", ALWAYS, LEVEL_MAIN }, { " ", "GENRE|hearing", ALWAYS, LEVEL_MAIN } }; static lookups cases[] = { { "A1", "AUTHOR", PERSON, LEVEL_MAIN }, /* Deprecated? */ { "A2", "AUTHOR", PERSON, LEVEL_HOST }, /* 'Secondary' Author */ { "A3", "EDITOR", PERSON, LEVEL_SERIES }, /* 'Tertiary' Author - series editor */ { "A4", "AUTHOR", PERSON, LEVEL_SERIES }, /* 'Subsidiary' Author */ { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Abstract */ { "AD", "AUTHORADDRESS",SIMPLE, LEVEL_MAIN }, /* Author Address */ { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, /* Author */ { "BT", "TITLE", SIMPLE, LEVEL_MAIN }, /* Book Title - Deprecated? */ { "C1", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C2", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C3", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C4", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C5", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C6", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C7", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C8", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "CA", "CAPTION", SIMPLE, LEVEL_MAIN }, /* Caption */ { "CN", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, /* Call Number */ { "CP", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "CT", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "CY", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Place Published */ { "DA", "YEAR", DATE, LEVEL_MAIN }, /* Date */ { "DB", "DATABASE", SIMPLE, LEVEL_MAIN }, /* Database */ { "DI", "DOI", DOI, LEVEL_MAIN }, /* Deprecated? */ { "DO", "DOI", DOI, LEVEL_MAIN }, /* DOI */ { "DP", "DATABASEPROV", SIMPLE, LEVEL_MAIN }, /* Database Provider */ { "ED", "EDITOR", PERSON, LEVEL_MAIN }, /* Deprecated? */ { "EP", "PAGEEND", SIMPLE, LEVEL_MAIN }, /* End Page */ { "ET", "EDITION", SIMPLE, LEVEL_MAIN }, /* Edition */ { "ID", "REFNUM", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "IS", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Number */ { "J1", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "J2", "TITLE", SIMPLE, LEVEL_HOST }, /* Alternate Title, abbreviated book or journal */ { "JA", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "JF", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "JO", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "KW", "KEYWORD", SIMPLE, LEVEL_MAIN }, /* Keywords */ { "L1", "FILEATTACH", LINKEDFILE, LEVEL_MAIN }, /* File Attachment (local, not URL) */ { "L4", "FIGATTACH", LINKEDFILE, LEVEL_MAIN }, /* Figure Attachment (local, not URL) */ { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, /* Language */ { "LB", "LABEL", SIMPLE, LEVEL_MAIN }, /* Label */ { "M1", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Number? */ { "M2", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */ { "M3", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Type of Work? */ { "N1", "NOTES", NOTES, LEVEL_MAIN }, /* Notes */ { "N2", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "NV", "NUMVOLUMES", SIMPLE, LEVEL_MAIN }, /* Number of Volumes */ { "OP", "ORIGPUB", SIMPLE, LEVEL_MAIN }, /* Original Publication */ { "PB", "PUBLISHER", SIMPLE, LEVEL_MAIN }, /* Publisher */ { "PY", "YEAR", DATE, LEVEL_MAIN }, /* Year */ { "RI", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, /* Reviewed Item */ { "RN", "NOTES", SIMPLE, LEVEL_MAIN }, /* Research Notes */ { "RP", "REPRINTSTATUS",SIMPLE, LEVEL_MAIN }, /* Reprint Edition */ { "SE", "SECTION", SIMPLE, LEVEL_MAIN }, /* Section */ { "SN", "SERIALNUMBER", SERIALNO,LEVEL_MAIN }, /* ISBN/ISSN */ { "SP", "PAGESTART", SIMPLE, LEVEL_MAIN }, /* Start Page */ { "ST", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, /* Short Title */ { "T1", "TITLE", TITLE, LEVEL_MAIN }, /* Deprecated? */ { "T2", "SHORTTITLE", SIMPLE, LEVEL_HOST }, /* 'Secondary' Title */ { "T3", "TITLE", SIMPLE, LEVEL_SERIES }, /* 'Tertiary' Title */ { "TI", "TITLE", TITLE, LEVEL_MAIN }, /* Title */ { "TT", "TRANSTITLE", TITLE, LEVEL_MAIN }, /* Translated Title */ { "U1", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U2", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U3", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U4", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U5", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "UR", "URL", SIMPLE, LEVEL_MAIN }, /* URL */ { "VL", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Volume */ { "VO", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "Y1", "YEAR", DATE, LEVEL_MAIN }, /* Deprecated */ { "Y2", "MONTH", SIMPLE, LEVEL_MAIN }, /* Access Date */ { " ", "INTERNAL_TYPE|CASE", ALWAYS, LEVEL_MAIN }, { " ", "GENRE|legal case and case notes", ALWAYS, LEVEL_MAIN } }; static lookups communication[] = { { "A1", "AUTHOR", PERSON, LEVEL_MAIN }, /* Deprecated? */ { "A2", "RECIPIENT", PERSON, LEVEL_MAIN }, /* SPECIAL */ { "A3", "EDITOR", PERSON, LEVEL_SERIES }, /* 'Tertiary' Author - Series editor */ { "A4", "AUTHOR", PERSON, LEVEL_SERIES }, /* 'Subsidiary' Author */ { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Abstract */ { "AD", "AUTHORADDRESS",SIMPLE, LEVEL_MAIN }, /* Author Address */ { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, /* Author */ { "BT", "TITLE", SIMPLE, LEVEL_MAIN }, /* Book Title - Deprecated? */ { "C1", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C2", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C3", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C4", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C5", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C6", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C7", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C8", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "CA", "CAPTION", SIMPLE, LEVEL_MAIN }, /* Caption */ { "CN", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, /* Call Number */ { "CP", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "CT", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "CY", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Place Published */ { "DA", "YEAR", DATE, LEVEL_MAIN }, /* Date */ { "DB", "DATABASE", SIMPLE, LEVEL_MAIN }, /* Database */ { "DI", "DOI", DOI, LEVEL_MAIN }, /* Deprecated? */ { "DO", "DOI", DOI, LEVEL_MAIN }, /* DOI */ { "DP", "DATABASEPROV", SIMPLE, LEVEL_MAIN }, /* Database Provider */ { "ED", "EDITOR", PERSON, LEVEL_MAIN }, /* Deprecated? */ { "EP", "PAGEEND", SIMPLE, LEVEL_MAIN }, /* End Page */ { "ET", "EDITION", SIMPLE, LEVEL_MAIN }, /* Edition */ { "ID", "REFNUM", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "IS", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Number */ { "J1", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "J2", "TITLE", SIMPLE, LEVEL_HOST }, /* Alternate Title, abbreviated book or journal */ { "JA", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "JF", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "JO", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "KW", "KEYWORD", SIMPLE, LEVEL_MAIN }, /* Keywords */ { "L1", "FILEATTACH", LINKEDFILE, LEVEL_MAIN }, /* File Attachment (local, not URL) */ { "L4", "FIGATTACH", LINKEDFILE, LEVEL_MAIN }, /* Figure Attachment (local, not URL) */ { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, /* Language */ { "LB", "LABEL", SIMPLE, LEVEL_MAIN }, /* Label */ { "M1", "GENRE", SIMPLE, LEVEL_MAIN }, /* Misc or Number? */ { "M2", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */ { "M3", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Type of Work? */ { "N1", "NOTES", NOTES, LEVEL_MAIN }, /* Notes */ { "N2", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "NV", "NUMVOLUMES", SIMPLE, LEVEL_MAIN }, /* Number of Volumes */ { "OP", "ORIGPUB", SIMPLE, LEVEL_MAIN }, /* Original Publication */ { "PB", "PUBLISHER", SIMPLE, LEVEL_MAIN }, /* Publisher */ { "PY", "YEAR", DATE, LEVEL_MAIN }, /* Year */ { "RI", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, /* Reviewed Item */ { "RN", "NOTES", SIMPLE, LEVEL_MAIN }, /* Research Notes */ { "RP", "REPRINTSTATUS",SIMPLE, LEVEL_MAIN }, /* Reprint Edition */ { "SE", "SECTION", SIMPLE, LEVEL_MAIN }, /* Section */ { "SN", "SERIALNUMBER", SERIALNO,LEVEL_MAIN }, /* ISBN/ISSN */ { "SP", "PAGESTART", SIMPLE, LEVEL_MAIN }, /* Start Page */ { "ST", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, /* Short Title */ { "T1", "TITLE", TITLE, LEVEL_MAIN }, /* Deprecated? */ { "T2", "SHORTTITLE", SIMPLE, LEVEL_HOST }, /* 'Secondary' Title */ { "T3", "TITLE", SIMPLE, LEVEL_SERIES }, /* 'Tertiary' Title */ { "TI", "TITLE", TITLE, LEVEL_MAIN }, /* Title */ { "TT", "TRANSTITLE", TITLE, LEVEL_MAIN }, /* Translated Title */ { "U1", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U2", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U3", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U4", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U5", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "UR", "URL", SIMPLE, LEVEL_MAIN }, /* URL */ { "VL", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Volume */ { "VO", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "Y1", "YEAR", DATE, LEVEL_MAIN }, /* Deprecated */ { "Y2", "MONTH", SIMPLE, LEVEL_MAIN }, /* Access Date */ { " ", "INTERNAL_TYPE|ARTICLE", ALWAYS, LEVEL_MAIN }, { " ", "GENRE|communication", ALWAYS, LEVEL_MAIN } }; static lookups thesis[] = { { "A1", "AUTHOR", PERSON, LEVEL_MAIN }, /* Deprecated? */ { "A2", "AUTHOR", PERSON, LEVEL_HOST }, /* 'Secondary' Author */ { "A3", "EDITOR", PERSON, LEVEL_SERIES }, /* 'Tertiary' Author - Series editor */ { "A4", "AUTHOR", PERSON, LEVEL_SERIES }, /* 'Subsidiary' Author */ { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Abstract */ { "AD", "AUTHORADDRESS",SIMPLE, LEVEL_MAIN }, /* Author Address */ { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, /* Author */ { "BT", "TITLE", SIMPLE, LEVEL_MAIN }, /* Book Title - Deprecated? */ { "C1", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C2", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C3", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C4", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C5", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C6", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C7", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C8", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "CA", "CAPTION", SIMPLE, LEVEL_MAIN }, /* Caption */ { "CN", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, /* Call Number */ { "CP", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "CT", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "CY", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Place Published */ { "DA", "YEAR", DATE, LEVEL_MAIN }, /* Date */ { "DB", "DATABASE", SIMPLE, LEVEL_MAIN }, /* Database */ { "DI", "DOI", DOI, LEVEL_MAIN }, /* Deprecated? */ { "DO", "DOI", DOI, LEVEL_MAIN }, /* DOI */ { "DP", "DATABASEPROV", SIMPLE, LEVEL_MAIN }, /* Database Provider */ { "ED", "EDITOR", PERSON, LEVEL_MAIN }, /* Deprecated? */ { "EP", "PAGEEND", SIMPLE, LEVEL_MAIN }, /* End Page */ { "ET", "EDITION", SIMPLE, LEVEL_MAIN }, /* Edition */ { "ID", "REFNUM", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "IS", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Number */ { "J1", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "J2", "TITLE", SIMPLE, LEVEL_HOST }, /* Alternate Title, abbreviated book or journal */ { "JA", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "JF", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "JO", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "KW", "KEYWORD", SIMPLE, LEVEL_MAIN }, /* Keywords */ { "L1", "FILEATTACH", LINKEDFILE, LEVEL_MAIN }, /* File Attachment (local, not URL) */ { "L4", "FIGATTACH", LINKEDFILE, LEVEL_MAIN }, /* Figure Attachment (local, not URL) */ { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, /* Language */ { "LB", "LABEL", SIMPLE, LEVEL_MAIN }, /* Label */ { "M1", "NOTES", SIMPLE, LEVEL_MAIN }, /* Misc or Number? */ { "M2", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */ { "M3", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Type of Work? */ { "N1", "NOTES", NOTES, LEVEL_MAIN }, /* Notes */ { "N2", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "NV", "NUMVOLUMES", SIMPLE, LEVEL_MAIN }, /* Number of Volumes */ { "OP", "ORIGPUB", SIMPLE, LEVEL_MAIN }, /* Original Publication */ { "PB", "PUBLISHER", SIMPLE, LEVEL_MAIN }, /* Publisher */ { "PY", "YEAR", DATE, LEVEL_MAIN }, /* Year */ { "RI", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, /* Reviewed Item */ { "RN", "NOTES", SIMPLE, LEVEL_MAIN }, /* Research Notes */ { "RP", "REPRINTSTATUS",SIMPLE, LEVEL_MAIN }, /* Reprint Edition */ { "SE", "SECTION", SIMPLE, LEVEL_MAIN }, /* Section */ { "SN", "SERIALNUMBER", SERIALNO,LEVEL_MAIN }, /* ISBN/ISSN */ { "SP", "PAGESTART", SIMPLE, LEVEL_MAIN }, /* Start Page */ { "ST", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, /* Short Title */ { "T1", "TITLE", TITLE, LEVEL_MAIN }, /* Deprecated? */ { "T2", "SHORTTITLE", SIMPLE, LEVEL_HOST }, /* 'Secondary' Title */ { "T3", "TITLE", SIMPLE, LEVEL_SERIES }, /* 'Tertiary' Title */ { "TI", "TITLE", TITLE, LEVEL_MAIN }, /* Title */ { "TT", "TRANSTITLE", TITLE, LEVEL_MAIN }, /* Translated Title */ { "U1", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U2", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U3", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U4", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U5", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "UR", "URL", SIMPLE, LEVEL_MAIN }, /* URL */ { "VL", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Volume */ { "VO", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "Y1", "YEAR", DATE, LEVEL_MAIN }, /* Deprecated */ { "Y2", "MONTH", SIMPLE, LEVEL_MAIN }, /* Access Date */ { " ", "INTERNAL_TYPE|THESIS", ALWAYS, LEVEL_MAIN }, { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { " ", "GENRE|thesis", ALWAYS, LEVEL_MAIN }, }; static lookups report[] = { { "A1", "AUTHOR", PERSON, LEVEL_MAIN }, /* Deprecated? */ { "A2", "AUTHOR", PERSON, LEVEL_HOST }, /* 'Secondary' Author */ { "A3", "EDITOR", PERSON, LEVEL_SERIES }, /* 'Tertiary' Author - Series editor */ { "A4", "AUTHOR", PERSON, LEVEL_SERIES }, /* 'Subsidiary' Author */ { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Abstract */ { "AD", "AUTHORADDRESS",SIMPLE, LEVEL_MAIN }, /* Author Address */ { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, /* Author */ { "BT", "TITLE", SIMPLE, LEVEL_MAIN }, /* Book Title - Deprecated? */ { "C1", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C2", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C3", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C4", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C5", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C6", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C7", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C8", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "CA", "CAPTION", SIMPLE, LEVEL_MAIN }, /* Caption */ { "CN", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, /* Call Number */ { "CP", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "CT", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "CY", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Place Published */ { "DA", "YEAR", DATE, LEVEL_MAIN }, /* Date */ { "DB", "DATABASE", SIMPLE, LEVEL_MAIN }, /* Database */ { "DI", "DOI", DOI, LEVEL_MAIN }, /* Deprecated? */ { "DO", "DOI", DOI, LEVEL_MAIN }, /* DOI */ { "DP", "DATABASEPROV", SIMPLE, LEVEL_MAIN }, /* Database Provider */ { "ED", "EDITOR", PERSON, LEVEL_MAIN }, /* Deprecated? */ { "EP", "PAGEEND", SIMPLE, LEVEL_MAIN }, /* End Page */ { "ET", "EDITION", SIMPLE, LEVEL_MAIN }, /* Edition */ { "ID", "REFNUM", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "IS", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Number */ { "J1", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "J2", "TITLE", SIMPLE, LEVEL_HOST }, /* Alternate Title, abbreviated book or journal */ { "JA", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "JF", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "JO", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "KW", "KEYWORD", SIMPLE, LEVEL_MAIN }, /* Keywords */ { "L1", "FILEATTACH", LINKEDFILE, LEVEL_MAIN }, /* File Attachment (local, not URL) */ { "L4", "FIGATTACH", LINKEDFILE, LEVEL_MAIN }, /* Figure Attachment (local, not URL) */ { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, /* Language */ { "LB", "LABEL", SIMPLE, LEVEL_MAIN }, /* Label */ { "M1", "NOTES", SIMPLE, LEVEL_MAIN }, /* Misc or Number? */ { "M2", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */ { "M3", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Type of Work? */ { "N1", "NOTES", NOTES, LEVEL_MAIN }, /* Notes */ { "N2", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "NV", "NUMVOLUMES", SIMPLE, LEVEL_MAIN }, /* Number of Volumes */ { "OP", "ORIGPUB", SIMPLE, LEVEL_MAIN }, /* Original Publication */ { "PB", "PUBLISHER", SIMPLE, LEVEL_MAIN }, /* Publisher */ { "PY", "YEAR", DATE, LEVEL_MAIN }, /* Year */ { "RI", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, /* Reviewed Item */ { "RN", "NOTES", SIMPLE, LEVEL_MAIN }, /* Research Notes */ { "RP", "REPRINTSTATUS",SIMPLE, LEVEL_MAIN }, /* Reprint Edition */ { "SE", "SECTION", SIMPLE, LEVEL_MAIN }, /* Section */ { "SN", "SERIALNUMBER", SERIALNO,LEVEL_MAIN }, /* ISBN/ISSN */ { "SP", "PAGESTART", SIMPLE, LEVEL_MAIN }, /* Start Page */ { "ST", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, /* Short Title */ { "T1", "TITLE", TITLE, LEVEL_MAIN }, /* Deprecated? */ { "T2", "SHORTTITLE", SIMPLE, LEVEL_HOST }, /* 'Secondary' Title */ { "T3", "TITLE", SIMPLE, LEVEL_SERIES }, /* 'Tertiary' Title */ { "TI", "TITLE", TITLE, LEVEL_MAIN }, /* Title */ { "TT", "TRANSTITLE", TITLE, LEVEL_MAIN }, /* Translated Title */ { "U1", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U2", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U3", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U4", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U5", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "UR", "URL", SIMPLE, LEVEL_MAIN }, /* URL */ { "VL", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Volume */ { "VO", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "Y1", "YEAR", DATE, LEVEL_MAIN }, /* Deprecated */ { "Y2", "MONTH", SIMPLE, LEVEL_MAIN }, /* Access Date */ { " ", "INTERNAL_TYPE|REPORT", ALWAYS, LEVEL_MAIN }, { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { " ", "GENRE|report", ALWAYS, LEVEL_MAIN } }; static lookups abstract[] = { { "A1", "AUTHOR", PERSON, LEVEL_MAIN }, /* Deprecated? */ { "A2", "AUTHOR", PERSON, LEVEL_HOST }, /* 'Secondary' Author */ { "A3", "EDITOR", PERSON, LEVEL_SERIES }, /* 'Tertiary' Author - Series editor */ { "A4", "AUTHOR", PERSON, LEVEL_SERIES }, /* 'Subsidiary' Author */ { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Abstract */ { "AD", "AUTHORADDRESS",SIMPLE, LEVEL_MAIN }, /* Author Address */ { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, /* Author */ { "BT", "TITLE", SIMPLE, LEVEL_MAIN }, /* Book Title - Deprecated? */ { "C1", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C2", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C3", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C4", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C5", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C6", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C7", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C8", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "CA", "CAPTION", SIMPLE, LEVEL_MAIN }, /* Caption */ { "CN", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, /* Call Number */ { "CP", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "CT", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "CY", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Place Published */ { "DA", "YEAR", DATE, LEVEL_MAIN }, /* Date */ { "DB", "DATABASE", SIMPLE, LEVEL_MAIN }, /* Database */ { "DI", "DOI", DOI, LEVEL_MAIN }, /* Deprecated? */ { "DO", "DOI", DOI, LEVEL_MAIN }, /* DOI */ { "DP", "DATABASEPROV", SIMPLE, LEVEL_MAIN }, /* Database Provider */ { "ED", "EDITOR", PERSON, LEVEL_MAIN }, /* Deprecated? */ { "EP", "PAGEEND", SIMPLE, LEVEL_MAIN }, /* End Page */ { "ET", "EDITION", SIMPLE, LEVEL_MAIN }, /* Edition */ { "ID", "REFNUM", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "IS", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Number */ { "J1", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "J2", "TITLE", SIMPLE, LEVEL_HOST }, /* Alternate Title, abbreviated book or journal */ { "JA", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "JF", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "JO", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "KW", "KEYWORD", SIMPLE, LEVEL_MAIN }, /* Keywords */ { "L1", "FILEATTACH", LINKEDFILE, LEVEL_MAIN }, /* File Attachment (local, not URL) */ { "L4", "FIGATTACH", LINKEDFILE, LEVEL_MAIN }, /* Figure Attachment (local, not URL) */ { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, /* Language */ { "LB", "LABEL", SIMPLE, LEVEL_MAIN }, /* Label */ { "M1", "NOTES", SIMPLE, LEVEL_MAIN }, /* Misc or Number? */ { "M2", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */ { "M3", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Type of Work? */ { "N1", "NOTES", NOTES, LEVEL_MAIN }, /* Notes */ { "N2", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "NV", "NUMVOLUMES", SIMPLE, LEVEL_MAIN }, /* Number of Volumes */ { "OP", "ORIGPUB", SIMPLE, LEVEL_MAIN }, /* Original Publication */ { "PB", "PUBLISHER", SIMPLE, LEVEL_MAIN }, /* Publisher */ { "PY", "YEAR", DATE, LEVEL_MAIN }, /* Year */ { "RI", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, /* Reviewed Item */ { "RN", "NOTES", SIMPLE, LEVEL_MAIN }, /* Research Notes */ { "RP", "REPRINTSTATUS",SIMPLE, LEVEL_MAIN }, /* Reprint Edition */ { "SE", "SECTION", SIMPLE, LEVEL_MAIN }, /* Section */ { "SN", "SERIALNUMBER", SERIALNO,LEVEL_MAIN }, /* ISBN/ISSN */ { "SP", "PAGESTART", SIMPLE, LEVEL_MAIN }, /* Start Page */ { "ST", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, /* Short Title */ { "T1", "TITLE", TITLE, LEVEL_MAIN }, /* Deprecated? */ { "T2", "SHORTTITLE", SIMPLE, LEVEL_HOST }, /* 'Secondary' Title */ { "T3", "TITLE", SIMPLE, LEVEL_SERIES }, /* 'Tertiary' Title */ { "TI", "TITLE", TITLE, LEVEL_MAIN }, /* Title */ { "TT", "TRANSTITLE", TITLE, LEVEL_MAIN }, /* Translated Title */ { "U1", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U2", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U3", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U4", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U5", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "UR", "URL", SIMPLE, LEVEL_MAIN }, /* URL */ { "VL", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Volume */ { "VO", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "Y1", "YEAR", DATE, LEVEL_MAIN }, /* Deprecated */ { "Y2", "MONTH", SIMPLE, LEVEL_MAIN }, /* Access Date */ { " ", "GENRE|abstract or summary", ALWAYS, LEVEL_MAIN } }; static lookups program[] = { { "A1", "AUTHOR", PERSON, LEVEL_MAIN }, /* Deprecated? */ { "A2", "AUTHOR", PERSON, LEVEL_HOST }, /* 'Secondary' Author */ { "A3", "EDITOR", PERSON, LEVEL_SERIES }, /* 'Tertiary' Author - Series editor */ { "A4", "AUTHOR", PERSON, LEVEL_SERIES }, /* 'Subsidiary' Author */ { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Abstract */ { "AD", "AUTHORADDRESS",SIMPLE, LEVEL_MAIN }, /* Author Address */ { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, /* Author */ { "BT", "TITLE", SIMPLE, LEVEL_MAIN }, /* Book Title - Deprecated? */ { "C1", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C2", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C3", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C4", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C5", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C6", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C7", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C8", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "CA", "CAPTION", SIMPLE, LEVEL_MAIN }, /* Caption */ { "CN", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, /* Call Number */ { "CP", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "CT", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "CY", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Place Published */ { "DA", "YEAR", DATE, LEVEL_MAIN }, /* Date */ { "DB", "DATABASE", SIMPLE, LEVEL_MAIN }, /* Database */ { "DI", "DOI", DOI, LEVEL_MAIN }, /* Deprecated? */ { "DO", "DOI", DOI, LEVEL_MAIN }, /* DOI */ { "DP", "DATABASEPROV", SIMPLE, LEVEL_MAIN }, /* Database Provider */ { "ED", "EDITOR", PERSON, LEVEL_MAIN }, /* Deprecated? */ { "EP", "PAGEEND", SIMPLE, LEVEL_MAIN }, /* End Page */ { "ET", "EDITION", SIMPLE, LEVEL_MAIN }, /* Edition */ { "ID", "REFNUM", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "IS", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Number */ { "J1", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "J2", "TITLE", SIMPLE, LEVEL_HOST }, /* Alternate Title, abbreviated book or journal */ { "JA", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "JF", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "JO", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "KW", "KEYWORD", SIMPLE, LEVEL_MAIN }, /* Keywords */ { "L1", "FILEATTACH", LINKEDFILE, LEVEL_MAIN }, /* File Attachment (local, not URL) */ { "L4", "FIGATTACH", LINKEDFILE, LEVEL_MAIN }, /* Figure Attachment (local, not URL) */ { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, /* Language */ { "LB", "LABEL", SIMPLE, LEVEL_MAIN }, /* Label */ { "M1", "NOTES", SIMPLE, LEVEL_MAIN }, /* Misc or Number? */ { "M2", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */ { "M3", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Type of Work? */ { "N1", "NOTES", NOTES, LEVEL_MAIN }, /* Notes */ { "N2", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "NV", "NUMVOLUMES", SIMPLE, LEVEL_MAIN }, /* Number of Volumes */ { "OP", "ORIGPUB", SIMPLE, LEVEL_MAIN }, /* Original Publication */ { "PB", "PUBLISHER", SIMPLE, LEVEL_MAIN }, /* Publisher */ { "PY", "YEAR", DATE, LEVEL_MAIN }, /* Year */ { "RI", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, /* Reviewed Item */ { "RN", "NOTES", SIMPLE, LEVEL_MAIN }, /* Research Notes */ { "RP", "REPRINTSTATUS",SIMPLE, LEVEL_MAIN }, /* Reprint Edition */ { "SE", "SECTION", SIMPLE, LEVEL_MAIN }, /* Section */ { "SN", "SERIALNUMBER", SERIALNO,LEVEL_MAIN }, /* ISBN/ISSN */ { "SP", "PAGESTART", SIMPLE, LEVEL_MAIN }, /* Start Page */ { "ST", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, /* Short Title */ { "T1", "TITLE", TITLE, LEVEL_MAIN }, /* Deprecated? */ { "T2", "SHORTTITLE", SIMPLE, LEVEL_HOST }, /* 'Secondary' Title */ { "T3", "TITLE", SIMPLE, LEVEL_SERIES }, /* 'Tertiary' Title */ { "TI", "TITLE", TITLE, LEVEL_MAIN }, /* Title */ { "TT", "TRANSTITLE", TITLE, LEVEL_MAIN }, /* Translated Title */ { "U1", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U2", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U3", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U4", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U5", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "UR", "URL", SIMPLE, LEVEL_MAIN }, /* URL */ { "VL", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Volume */ { "VO", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "Y1", "YEAR", DATE, LEVEL_MAIN }, /* Deprecated */ { "Y2", "MONTH", SIMPLE, LEVEL_MAIN }, /* Access Date */ { " ", "RESOURCE|software, multimedia", ALWAYS, LEVEL_MAIN } }; static lookups patent[] = { { "A1", "AUTHOR", PERSON, LEVEL_MAIN }, /* Deprecated? */ { "A2", "AUTHOR", PERSON, LEVEL_HOST }, /* 'Secondary' Author */ { "A3", "EDITOR", PERSON, LEVEL_SERIES }, /* 'Tertiary' Author - Series editor */ { "A4", "AUTHOR", PERSON, LEVEL_SERIES }, /* 'Subsidiary' Author */ { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Abstract */ { "AD", "AUTHORADDRESS",SIMPLE, LEVEL_MAIN }, /* Author Address */ { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, /* Author */ { "BT", "TITLE", SIMPLE, LEVEL_MAIN }, /* Book Title - Deprecated? */ { "C1", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C2", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C3", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C4", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C5", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C6", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C7", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C8", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "CA", "CAPTION", SIMPLE, LEVEL_MAIN }, /* Caption */ { "CN", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, /* Call Number */ { "CP", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "CT", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "CY", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Place Published */ { "DA", "YEAR", DATE, LEVEL_MAIN }, /* Date */ { "DB", "DATABASE", SIMPLE, LEVEL_MAIN }, /* Database */ { "DI", "DOI", DOI, LEVEL_MAIN }, /* Deprecated? */ { "DO", "DOI", DOI, LEVEL_MAIN }, /* DOI */ { "DP", "DATABASEPROV", SIMPLE, LEVEL_MAIN }, /* Database Provider */ { "ED", "EDITOR", PERSON, LEVEL_MAIN }, /* Deprecated? */ { "EP", "PAGEEND", SIMPLE, LEVEL_MAIN }, /* End Page */ { "ET", "EDITION", SIMPLE, LEVEL_MAIN }, /* Edition */ { "ID", "REFNUM", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "IS", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Number */ { "J1", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "J2", "TITLE", SIMPLE, LEVEL_HOST }, /* Alternate Title, abbreviated book or journal */ { "JA", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "JF", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "JO", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "KW", "KEYWORD", SIMPLE, LEVEL_MAIN }, /* Keywords */ { "L1", "FILEATTACH", LINKEDFILE, LEVEL_MAIN }, /* File Attachment (local, not URL) */ { "L4", "FIGATTACH", LINKEDFILE, LEVEL_MAIN }, /* Figure Attachment (local, not URL) */ { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, /* Language */ { "LB", "LABEL", SIMPLE, LEVEL_MAIN }, /* Label */ { "M1", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */ { "M2", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */ { "M3", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Type of Work? */ { "N1", "NOTES", NOTES, LEVEL_MAIN }, /* Notes */ { "N2", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "NV", "NUMVOLUMES", SIMPLE, LEVEL_MAIN }, /* Number of Volumes */ { "OP", "ORIGPUB", SIMPLE, LEVEL_MAIN }, /* Original Publication */ { "PB", "PUBLISHER", SIMPLE, LEVEL_MAIN }, /* Publisher */ { "PY", "YEAR", DATE, LEVEL_MAIN }, /* Year */ { "RI", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, /* Reviewed Item */ { "RN", "NOTES", SIMPLE, LEVEL_MAIN }, /* Research Notes */ { "RP", "REPRINTSTATUS",SIMPLE, LEVEL_MAIN }, /* Reprint Edition */ { "SE", "SECTION", SIMPLE, LEVEL_MAIN }, /* Section */ { "SN", "SERIALNUMBER", SERIALNO,LEVEL_MAIN }, /* ISBN/ISSN */ { "SP", "PAGESTART", SIMPLE, LEVEL_MAIN }, /* Start Page */ { "ST", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, /* Short Title */ { "T1", "TITLE", TITLE, LEVEL_MAIN }, /* Deprecated? */ { "T2", "SHORTTITLE", SIMPLE, LEVEL_HOST }, /* 'Secondary' Title */ { "T3", "TITLE", SIMPLE, LEVEL_SERIES }, /* 'Tertiary' Title */ { "TI", "TITLE", TITLE, LEVEL_MAIN }, /* Title */ { "TT", "TRANSTITLE", TITLE, LEVEL_MAIN }, /* Translated Title */ { "U1", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U2", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U3", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U4", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U5", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "UR", "URL", SIMPLE, LEVEL_MAIN }, /* URL */ { "VL", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Volume */ { "VO", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "Y1", "YEAR", DATE, LEVEL_MAIN }, /* Deprecated */ { "Y2", "MONTH", SIMPLE, LEVEL_MAIN }, /* Access Date */ { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { " ", "GENRE|patent", ALWAYS, LEVEL_MAIN } }; static lookups electric[] = { { "A1", "AUTHOR", PERSON, LEVEL_MAIN }, /* Deprecated? */ { "A2", "AUTHOR", PERSON, LEVEL_HOST }, /* 'Secondary' Author */ { "A3", "EDITOR", PERSON, LEVEL_SERIES }, /* 'Tertiary' Author - Series editor */ { "A4", "AUTHOR", PERSON, LEVEL_SERIES }, /* 'Subsidiary' Author */ { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Abstract */ { "AD", "AUTHORADDRESS",SIMPLE, LEVEL_MAIN }, /* Author Address */ { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, /* Author */ { "BT", "TITLE", SIMPLE, LEVEL_MAIN }, /* Book Title - Deprecated? */ { "C1", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C2", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C3", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C4", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C5", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C6", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C7", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C8", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "CA", "CAPTION", SIMPLE, LEVEL_MAIN }, /* Caption */ { "CN", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, /* Call Number */ { "CP", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "CT", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "CY", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Place Published */ { "DA", "YEAR", DATE, LEVEL_MAIN }, /* Date */ { "DB", "DATABASE", SIMPLE, LEVEL_MAIN }, /* Database */ { "DI", "DOI", DOI, LEVEL_MAIN }, /* Deprecated? */ { "DO", "DOI", DOI, LEVEL_MAIN }, /* DOI */ { "DP", "DATABASEPROV", SIMPLE, LEVEL_MAIN }, /* Database Provider */ { "ED", "EDITOR", PERSON, LEVEL_MAIN }, /* Deprecated? */ { "EP", "PAGEEND", SIMPLE, LEVEL_MAIN }, /* End Page */ { "ET", "EDITION", SIMPLE, LEVEL_MAIN }, /* Edition */ { "ID", "REFNUM", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "IS", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Number */ { "J1", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "J2", "TITLE", SIMPLE, LEVEL_HOST }, /* Alternate Title, abbreviated book or journal */ { "JA", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "JF", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "JO", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "KW", "KEYWORD", SIMPLE, LEVEL_MAIN }, /* Keywords */ { "L1", "FILEATTACH", LINKEDFILE, LEVEL_MAIN }, /* File Attachment (local, not URL) */ { "L4", "FIGATTACH", LINKEDFILE, LEVEL_MAIN }, /* Figure Attachment (local, not URL) */ { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, /* Language */ { "LB", "LABEL", SIMPLE, LEVEL_MAIN }, /* Label */ { "M1", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */ { "M2", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */ { "M3", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Type of Work? */ { "N1", "NOTES", NOTES, LEVEL_MAIN }, /* Notes */ { "N2", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "NV", "NUMVOLUMES", SIMPLE, LEVEL_MAIN }, /* Number of Volumes */ { "OP", "ORIGPUB", SIMPLE, LEVEL_MAIN }, /* Original Publication */ { "PB", "PUBLISHER", SIMPLE, LEVEL_MAIN }, /* Publisher */ { "PY", "YEAR", DATE, LEVEL_MAIN }, /* Year */ { "RI", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, /* Reviewed Item */ { "RN", "NOTES", SIMPLE, LEVEL_MAIN }, /* Research Notes */ { "RP", "REPRINTSTATUS",SIMPLE, LEVEL_MAIN }, /* Reprint Edition */ { "SE", "SECTION", SIMPLE, LEVEL_MAIN }, /* Section */ { "SN", "SERIALNUMBER", SERIALNO,LEVEL_MAIN }, /* ISBN/ISSN */ { "SP", "PAGESTART", SIMPLE, LEVEL_MAIN }, /* Start Page */ { "ST", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, /* Short Title */ { "T1", "TITLE", TITLE, LEVEL_MAIN }, /* Deprecated? */ { "T2", "SHORTTITLE", SIMPLE, LEVEL_HOST }, /* 'Secondary' Title */ { "T3", "TITLE", SIMPLE, LEVEL_SERIES }, /* 'Tertiary' Title */ { "TI", "TITLE", TITLE, LEVEL_MAIN }, /* Title */ { "TT", "TRANSTITLE", TITLE, LEVEL_MAIN }, /* Translated Title */ { "U1", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U2", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U3", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U4", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U5", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "UR", "URL", SIMPLE, LEVEL_MAIN }, /* URL */ { "VL", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Volume */ { "VO", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "Y1", "YEAR", DATE, LEVEL_MAIN }, /* Deprecated */ { "Y2", "MONTH", SIMPLE, LEVEL_MAIN }, /* Access Date */ { " ", "RESOURCE|software, multimedia", ALWAYS, LEVEL_MAIN }, { " ", "GENRE|electronic", ALWAYS, LEVEL_MAIN }, }; static lookups pamphlet[] = { { "A1", "AUTHOR", PERSON, LEVEL_MAIN }, /* Deprecated? */ { "A2", "AUTHOR", PERSON, LEVEL_HOST }, /* 'Secondary' Author */ { "A3", "EDITOR", PERSON, LEVEL_SERIES }, /* 'Tertiary' Author - Series editor */ { "A4", "AUTHOR", PERSON, LEVEL_SERIES }, /* 'Subsidiary' Author */ { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Abstract */ { "AD", "AUTHORADDRESS",SIMPLE, LEVEL_MAIN }, /* Author Address */ { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, /* Author */ { "BT", "TITLE", SIMPLE, LEVEL_MAIN }, /* Book Title - Deprecated? */ { "C1", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C2", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C3", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C4", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C5", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C6", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C7", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C8", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "CA", "CAPTION", SIMPLE, LEVEL_MAIN }, /* Caption */ { "CN", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, /* Call Number */ { "CP", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "CT", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "CY", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Place Published */ { "DA", "YEAR", DATE, LEVEL_MAIN }, /* Date */ { "DB", "DATABASE", SIMPLE, LEVEL_MAIN }, /* Database */ { "DI", "DOI", DOI, LEVEL_MAIN }, /* Deprecated? */ { "DO", "DOI", DOI, LEVEL_MAIN }, /* DOI */ { "DP", "DATABASEPROV", SIMPLE, LEVEL_MAIN }, /* Database Provider */ { "ED", "EDITOR", PERSON, LEVEL_MAIN }, /* Deprecated? */ { "EP", "PAGEEND", SIMPLE, LEVEL_MAIN }, /* End Page */ { "ET", "EDITION", SIMPLE, LEVEL_MAIN }, /* Edition */ { "ID", "REFNUM", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "IS", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Number */ { "J1", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "J2", "TITLE", SIMPLE, LEVEL_HOST }, /* Alternate Title, abbreviated book or journal */ { "JA", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "JF", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "JO", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "KW", "KEYWORD", SIMPLE, LEVEL_MAIN }, /* Keywords */ { "L1", "FILEATTACH", LINKEDFILE, LEVEL_MAIN }, /* File Attachment (local, not URL) */ { "L4", "FIGATTACH", LINKEDFILE, LEVEL_MAIN }, /* Figure Attachment (local, not URL) */ { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, /* Language */ { "LB", "LABEL", SIMPLE, LEVEL_MAIN }, /* Label */ { "M1", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */ { "M2", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */ { "M3", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Type of Work? */ { "N1", "NOTES", NOTES, LEVEL_MAIN }, /* Notes */ { "N2", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "NV", "NUMVOLUMES", SIMPLE, LEVEL_MAIN }, /* Number of Volumes */ { "OP", "ORIGPUB", SIMPLE, LEVEL_MAIN }, /* Original Publication */ { "PB", "PUBLISHER", SIMPLE, LEVEL_MAIN }, /* Publisher */ { "PY", "YEAR", DATE, LEVEL_MAIN }, /* Year */ { "RI", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, /* Reviewed Item */ { "RN", "NOTES", SIMPLE, LEVEL_MAIN }, /* Research Notes */ { "RP", "REPRINTSTATUS",SIMPLE, LEVEL_MAIN }, /* Reprint Edition */ { "SE", "SECTION", SIMPLE, LEVEL_MAIN }, /* Section */ { "SN", "SERIALNUMBER", SERIALNO,LEVEL_MAIN }, /* ISBN/ISSN */ { "SP", "PAGESTART", SIMPLE, LEVEL_MAIN }, /* Start Page */ { "ST", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, /* Short Title */ { "T1", "TITLE", TITLE, LEVEL_MAIN }, /* Deprecated? */ { "T2", "SHORTTITLE", SIMPLE, LEVEL_HOST }, /* 'Secondary' Title */ { "T3", "TITLE", SIMPLE, LEVEL_SERIES }, /* 'Tertiary' Title */ { "TI", "TITLE", TITLE, LEVEL_MAIN }, /* Title */ { "TT", "TRANSTITLE", TITLE, LEVEL_MAIN }, /* Translated Title */ { "U1", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U2", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U3", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U4", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U5", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "UR", "URL", SIMPLE, LEVEL_MAIN }, /* URL */ { "VL", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Volume */ { "VO", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "Y1", "YEAR", DATE, LEVEL_MAIN }, /* Deprecated */ { "Y2", "MONTH", SIMPLE, LEVEL_MAIN }, /* Access Date */ { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { " ", "GENRE|pamphlet", ALWAYS, LEVEL_MAIN }, }; static lookups map[] = { { "A1", "AUTHOR", PERSON, LEVEL_MAIN }, /* Deprecated? */ { "A2", "AUTHOR", PERSON, LEVEL_HOST }, /* 'Secondary' Author */ { "A3", "EDITOR", PERSON, LEVEL_SERIES }, /* 'Tertiary' Author - Series editor */ { "A4", "AUTHOR", PERSON, LEVEL_SERIES }, /* 'Subsidiary' Author */ { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Abstract */ { "AD", "AUTHORADDRESS",SIMPLE, LEVEL_MAIN }, /* Author Address */ { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, /* Author */ { "BT", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "C1", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C2", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C3", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C4", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C5", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C6", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C7", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C8", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "CA", "CAPTION", SIMPLE, LEVEL_MAIN }, /* Caption */ { "CN", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, /* Call Number */ { "CP", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "CT", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "CY", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Place Published */ { "DA", "YEAR", DATE, LEVEL_MAIN }, /* Date */ { "DB", "DATABASE", SIMPLE, LEVEL_MAIN }, /* Name of Database */ { "DI", "DOI", DOI, LEVEL_MAIN }, /* Deprecated? */ { "DO", "DOI", DOI, LEVEL_MAIN }, /* DOI */ { "DP", "DATABASEPROV", SIMPLE, LEVEL_MAIN }, /* Database Provider */ { "ED", "EDITOR", PERSON, LEVEL_MAIN }, /* Deprecated? */ { "EP", "PAGEEND", SIMPLE, LEVEL_MAIN }, /* End Page */ { "ET", "EDITION", SIMPLE, LEVEL_MAIN }, /* Edition */ { "ID", "REFNUM", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "IS", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Number */ { "JA", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "J1", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "J2", "TITLE", SIMPLE, LEVEL_HOST }, /* Alternate Title, abbreviated book or journal */ { "JF", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "JO", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "KW", "KEYWORD", SIMPLE, LEVEL_MAIN }, /* Keywords */ { "L1", "FILEATTACH", LINKEDFILE, LEVEL_MAIN }, /* File Attachments (local, not URL) */ { "L4", "FIGATTACH", LINKEDFILE, LEVEL_MAIN }, /* Figure Attachment (local, not URL) */ { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, /* Language */ { "LB", "LABEL", SIMPLE, LEVEL_MAIN }, /* Label */ { "M1", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Number? */ { "M2", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */ { "M3", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Type of Work? */ { "N1", "NOTES", NOTES, LEVEL_MAIN }, /* Notes */ { "N2", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "NV", "NUMVOLUMES", SIMPLE, LEVEL_MAIN }, /* Number of Volumes */ { "OP", "ORIGPUB", SIMPLE, LEVEL_MAIN }, /* Original Publication */ { "PB", "PUBLISHER", SIMPLE, LEVEL_MAIN }, /* Publisher */ { "PY", "YEAR", DATE, LEVEL_MAIN }, /* Year */ { "RI", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, /* Reviewed Item */ { "RN", "NOTES", SIMPLE, LEVEL_MAIN }, /* Resarch Notes -> Notes */ { "RP", "REPRINTSTATUS",SIMPLE, LEVEL_MAIN }, /* Reprint Edition */ { "SE", "SECTION", SIMPLE, LEVEL_MAIN }, /* Section */ { "SN", "SERIALNUMBER", SERIALNO,LEVEL_MAIN }, /* ISBN/ISSN */ { "SP", "PAGESTART", SIMPLE, LEVEL_MAIN }, /* Start Page */ { "ST", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, /* Short Title */ { "T1", "TITLE", TITLE, LEVEL_MAIN }, /* Deprecated? */ { "T2", "SHORTTITLE", SIMPLE, LEVEL_HOST }, /* 'Secondary' Title */ { "T3", "TITLE", SIMPLE, LEVEL_SERIES }, /* 'Tertiary' Title */ { "TI", "TITLE", TITLE, LEVEL_MAIN }, /* Title */ { "TT", "TRANSTITLE", TITLE, LEVEL_MAIN }, /* Translated Title */ { "U1", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U2", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U3", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U4", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U5", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "UR", "URL", SIMPLE, LEVEL_MAIN }, /* URL */ { "VL", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Volume */ { "VO", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "Y1", "YEAR", DATE, LEVEL_MAIN }, /* Deprecated? */ { "Y2", "MONTH", SIMPLE, LEVEL_MAIN }, /* Access Date */ { " ", "RESOURCE|cartographic", ALWAYS, LEVEL_MAIN }, { " ", "GENRE|map", ALWAYS, LEVEL_MAIN } }; static lookups unpublished[] = { { "A1", "AUTHOR", PERSON, LEVEL_MAIN }, /* Deprecated? */ { "A2", "AUTHOR", PERSON, LEVEL_HOST }, /* 'Secondary' Author */ { "A3", "EDITOR", PERSON, LEVEL_SERIES }, /* 'Tertiary' Author - Series editor */ { "A4", "AUTHOR", PERSON, LEVEL_SERIES }, /* 'Subsidiary' Author */ { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Abstract */ { "AD", "AUTHORADDRESS",SIMPLE, LEVEL_MAIN }, /* Author Address */ { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, /* Author */ { "BT", "TITLE", SIMPLE, LEVEL_MAIN }, /* Book Title - Deprecated? */ { "C1", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C2", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C3", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C4", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C5", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C6", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C7", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "C8", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */ { "CA", "CAPTION", SIMPLE, LEVEL_MAIN }, /* Caption */ { "CN", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, /* Call Number */ { "CP", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "CT", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "CY", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Place Published */ { "DA", "YEAR", DATE, LEVEL_MAIN }, /* Date */ { "DB", "DATABASE", SIMPLE, LEVEL_MAIN }, /* Database */ { "DI", "DOI", DOI, LEVEL_MAIN }, /* Deprecated? */ { "DO", "DOI", DOI, LEVEL_MAIN }, /* DOI */ { "DP", "DATABASEPROV", SIMPLE, LEVEL_MAIN }, /* Database Provider */ { "ED", "EDITOR", PERSON, LEVEL_MAIN }, /* Deprecated? */ { "EP", "PAGEEND", SIMPLE, LEVEL_MAIN }, /* End Page */ { "ET", "EDITION", SIMPLE, LEVEL_MAIN }, /* Edition */ { "ID", "REFNUM", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "IS", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Number */ { "J1", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "J2", "TITLE", SIMPLE, LEVEL_HOST }, /* Alternate Title, abbreviated book or journal */ { "JA", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "JF", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "JO", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */ { "KW", "KEYWORD", SIMPLE, LEVEL_MAIN }, /* Keywords */ { "L1", "FILEATTACH", LINKEDFILE, LEVEL_MAIN }, /* File Attachment (local, not URL) */ { "L4", "FIGATTACH", LINKEDFILE, LEVEL_MAIN }, /* Figure Attachment (local, not URL) */ { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, /* Language */ { "LB", "LABEL", SIMPLE, LEVEL_MAIN }, /* Label */ { "M1", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */ { "M2", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */ { "M3", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Type of Work? */ { "N1", "NOTES", NOTES, LEVEL_MAIN }, /* Notes */ { "N2", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "NV", "NUMVOLUMES", SIMPLE, LEVEL_MAIN }, /* Number of Volumes */ { "OP", "ORIGPUB", SIMPLE, LEVEL_MAIN }, /* Original Publication */ { "PB", "PUBLISHER", SIMPLE, LEVEL_MAIN }, /* Publisher */ { "PY", "YEAR", DATE, LEVEL_MAIN }, /* Year */ { "RI", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, /* Reviewed Item */ { "RN", "NOTES", SIMPLE, LEVEL_MAIN }, /* Research Notes */ { "RP", "REPRINTSTATUS",SIMPLE, LEVEL_MAIN }, /* Reprint Edition */ { "SE", "SECTION", SIMPLE, LEVEL_MAIN }, /* Section */ { "SN", "SERIALNUMBER", SERIALNO,LEVEL_MAIN }, /* ISBN/ISSN */ { "SP", "PAGESTART", SIMPLE, LEVEL_MAIN }, /* Start Page */ { "ST", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, /* Short Title */ { "T1", "TITLE", TITLE, LEVEL_MAIN }, /* Deprecated? */ { "T2", "SHORTTITLE", SIMPLE, LEVEL_HOST }, /* 'Secondary' Title */ { "T3", "TITLE", SIMPLE, LEVEL_SERIES }, /* 'Tertiary' Title */ { "TI", "TITLE", TITLE, LEVEL_MAIN }, /* Title */ { "TT", "TRANSTITLE", TITLE, LEVEL_MAIN }, /* Translated Title */ { "U1", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U2", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U3", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U4", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "U5", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */ { "UR", "URL", SIMPLE, LEVEL_MAIN }, /* URL */ { "VL", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Volume */ { "VO", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Deprecated? */ { "Y1", "YEAR", DATE, LEVEL_MAIN }, /* Deprecated */ { "Y2", "MONTH", SIMPLE, LEVEL_MAIN }, /* Access Date */ { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { " ", "GENRE|unpublished", ALWAYS, LEVEL_MAIN } }; #define ORIG(a) ( &(a[0]) ) #define SIZE(a) ( sizeof( a ) / sizeof( lookups ) ) #define REFTYPE(a,b) { a, ORIG(b), SIZE(b) } variants ris_all[] = { REFTYPE( "STD", generic ), REFTYPE( "GEN", generic ), REFTYPE( "JOUR", article ), REFTYPE( "MGZN", magarticle ), REFTYPE( "BOOK", book ), REFTYPE( "CHAP", inbook ), REFTYPE( "CONF", conference ), REFTYPE( "STAT", statute ), REFTYPE( "HEAR", hearing ), REFTYPE( "CASE", cases ), REFTYPE( "NEWS", newsarticle ), REFTYPE( "MPCT", generic ), REFTYPE( "PCOMM", communication ), REFTYPE( "PAMP", pamphlet ), REFTYPE( "ELEC", electric ), REFTYPE( "THES", thesis ), REFTYPE( "RPRT", report ), REFTYPE( "ABST", abstract ), REFTYPE( "COMP", program ), REFTYPE( "PAT", patent ), REFTYPE( "MAP", map ), REFTYPE( "UNPB", unpublished ), }; int ris_nall = sizeof( ris_all ) / sizeof( variants ); hs-bibutils-5.5/bibutils/entities.h0000644000000000000000000000040112445605732015613 0ustar0000000000000000/* * entities.h * * Copyright (c) Chris Putnam 2003-2013 * * Source code released under the GPL version 2 * */ #ifndef ENTITIES_H #define ENTITIES_H extern unsigned int decode_entity( char *s, unsigned int *pi, int *unicode, int *err ); #endif hs-bibutils-5.5/bibutils/xml_encoding.c0000644000000000000000000000316512445605732016442 0ustar0000000000000000/* * xml_getencoding.c * * Copyright (c) Chris Putnam 2007-2013 * * Source code released under the GPL version 2 * */ #include #include #include #include "charsets.h" #include "newstr.h" #include "newstr_conv.h" #include "xml.h" #include "xml_encoding.h" static int xml_getencodingr( xml *node ) { newstr *s; int n = CHARSET_UNKNOWN, m; if ( xml_tagexact( node, "xml" ) ) { s = xml_getattrib( node, "encoding" ); if ( s && s->data ) { if ( !strcasecmp( s->data, "UTF-8" ) ) n = CHARSET_UNICODE; else if ( !strcasecmp( s->data, "UTF8" ) ) n = CHARSET_UNICODE; else if ( !strcasecmp( s->data, "GB18030" ) ) n = CHARSET_GB18030; else n = charset_find( s->data ); if ( n==CHARSET_UNKNOWN ) { fprintf( stderr, "Warning: did not recognize " "encoding '%s'\n", s->data ); } } } if ( node->down ) { m = xml_getencodingr( node->down ); if ( m!=CHARSET_UNKNOWN ) n = m; } if ( node->next ) { m = xml_getencodingr( node->next ); if ( m!=CHARSET_UNKNOWN ) n = m; } return n; } int xml_getencoding( newstr *s ) { newstr descriptor; xml descriptxml; int file_charset = CHARSET_UNKNOWN; char *p, *q; p = strstr( s->data, "data, "" ); if ( q ) { newstr_init( &descriptor ); newstr_segcpy( &descriptor, p, q+2 ); xml_init( &descriptxml ); xml_tree( descriptor.data, &descriptxml ); file_charset = xml_getencodingr( &descriptxml ); xml_free( &descriptxml ); newstr_free( &descriptor ); newstr_segdel( s, p, q+2 ); } } return file_charset; } hs-bibutils-5.5/bibutils/iso639_2.c0000644000000000000000000005210412445605732015246 0ustar0000000000000000/* * iso639-2 language codes */ #include #include "iso639_2.h" typedef struct { char *code1; char *code2; unsigned char main; char *language; } iso639_2_t; static iso639_2_t iso639_2[] = { { "abk", "", 1, "Abkhazian" }, { "ace", "", 1, "Achenese" }, { "ace", "", 1, "Achinese" }, { "ach", "", 1, "Acoli" }, { "ada", "", 1, "Adangme" }, { "ady", "", 1, "Adygei" }, { "ady", "", 1, "Adyghe" }, { "aar", "", 1, "Afar" }, { "afh", "", 1, "Afrihili" }, { "afr", "", 1, "Afrikaans" }, { "afa", "", 1, "Afroasiatic languages" }, { "ain", "", 1, "Ainu" }, { "aka", "", 1, "Akan" }, { "akk", "", 1, "Akkadian" }, { "alb", "sqi", 1, "Albanian" }, { "gsw", "", 1, "Alemannic" }, { "ale", "", 1, "Aleut" }, { "alg", "", 1, "Algonquian languages" }, { "gsw", "", 1, "Alsatian" }, { "alt", "", 1, "Altai, Southern" }, { "tut", "", 1, "Altaic languages" }, { "amh", "", 1, "Amharic" }, { "egy", "", 1, "Ancient Egyptian" }, { "grc", "", 1, "Ancient Greek" }, { "anp", "", 1, "Angika" }, { "apa", "", 1, "Apache languages" }, { "arc", "", 1, "Aramaic, Imperial" }, { "arc", "", 1, "Aramaic, Official" }, { "arp", "", 1, "Arapaho" }, { "arw", "", 1, "Arawak" }, { "arg", "", 1, "Argonese" }, { "arm", "hye", 1, "Armenian" }, { "rup", "", 1, "Aromanian" }, { "art", "", 1, "Artificial languages" }, { "rup", "", 1, "Arumanian" }, { "asm", "", 1, "Assamese" }, { "ast", "", 1, "Asturian" }, { "ast", "", 1, "Asturleonese" }, { "ath", "", 1, "Athabaskan languages" }, { "aus", "", 1, "Australian languages" }, { "map", "", 1, "Austronesian languages" }, { "ava", "", 1, "Avaric" }, { "ave", "", 1, "Avestan" }, { "awa", "", 1, "Awadhi" }, { "aze", "", 1, "Azerbaijani" }, { "ast", "", 1, "Bable" }, { "ban", "", 1, "Balinese" }, { "bat", "", 1, "Baltic languages" }, { "bal", "", 1, "Baluchi" }, { "bam", "", 1, "Bambara" }, { "bai", "", 1, "Bamileke languages" }, { "bad", "", 1, "Banda languages" }, { "bnt", "", 1, "Bantu languages" }, { "bas", "", 1, "Basa" }, { "bak", "", 1, "Bashkir" }, { "baq", "eus", 1, "Basque" }, { "bej", "", 1, "Bedawiyet" }, { "bej", "", 1, "Beja" }, { "bel", "", 1, "Belarusian" }, { "bem", "", 1, "Bemba" }, { "ben", "", 1, "Bengali" }, { "ber", "", 1, "Berber languages" }, { "bho", "", 1, "Bhojpuri" }, { "bih", "", 1, "Bihari languages" }, { "bik", "", 1, "Bikol" }, { "byn", "", 1, "Bilin" }, { "bin", "", 1, "Bini" }, { "bis", "", 1, "Bislama" }, { "bla", "", 1, "Blackfoot" }, { "byn", "", 1, "Blin" }, { "zbl", "", 1, "Blissymbols" }, { "bos", "", 1, "Bosnian" }, { "bra", "", 1, "Braj" }, { "btk", "", 1, "Bratak languages" }, { "bre", "", 1, "Breton" }, { "bug", "", 1, "Buginese" }, { "bul", "", 1, "Bulgarian" }, { "bua", "", 1, "Buriat" }, { "bur", "mya", 1, "Burmese" }, { "cad", "", 1, "Caddo" }, { "spa", "", 0, "Castilian" }, { "cat", "", 1, "Catalan" }, { "cau", "", 1, "Caucasian languages" }, { "ceb", "", 1, "Cebuano" }, { "cel", "", 1, "Celtic languages" }, { "cai", "", 1, "Central American Indian languages" }, { "khm", "", 1, "Central Khmer" }, { "chg", "", 1, "Chagatai" }, { "cmc", "", 1, "Chamic languages" }, { "cha", "", 1, "Chamorro" }, { "che", "", 1, "Chechen" }, { "chr", "", 1, "Cherokee" }, { "nya", "", 1, "Chewa" }, { "chy", "", 1, "Cheyenne" }, { "chb", "", 1, "Chibcha" }, { "nya", "", 1, "Chichewa" }, { "chi", "zho", 1, "Chinese" }, { "chn", "", 1, "Chinook Jargon" }, { "chp", "", 1, "Chipewyan" }, { "cho", "", 1, "Choctaw" }, { "zha", "", 1, "Chuang" }, { "chu", "", 1, "Church Slavic" }, { "chu", "", 1, "Church Slavonic" }, { "chk", "", 1, "Chuukese" }, { "chv", "", 1, "Chuvash" }, { "kbd", "", 1, "Circassian" }, { "nwc", "", 1, "Classical Nepal Bhasa" }, { "nwc", "", 1, "Classical Newari" }, { "syc", "", 1, "Classical Syriac" }, { "rar", "", 1, "Cook Islands Maori" }, { "cop", "", 1, "Coptic" }, { "cor", "", 1, "Cornish" }, { "cos", "", 1, "Corsican" }, { "cre", "", 1, "Cree" }, { "mus", "", 1, "Creek" }, { "crp", "", 1, "creoles and pidgins" }, { "cpe", "", 1, "creoles and pidgins, English-based" }, { "cpf", "", 1, "creoles and pidgins, French-based" }, { "cpp", "", 1, "creoles and pidgins, Portuguese-based" }, { "crh", "", 1, "Crimean Tartar" }, { "crh", "", 1, "Crimean Turkish" }, { "hrv", "", 1, "Croatian" }, { "cus", "", 1, "Cushitic languages" }, { "cze", "ces", 1, "Czech" }, { "dak", "", 1, "Dakota" }, { "dan", "", 1, "Danish" }, { "dar", "", 1, "Dargwa" }, { "del", "", 1, "Delaware" }, { "chp", "", 1, "Dene Suline" }, { "div", "", 1, "Dhivehi" }, { "din", "", 1, "Dinka" }, { "div", "", 1, "Divehi" }, { "doi", "", 1, "Dogri" }, { "dgr", "", 1, "Dogrib" }, { "dra", "", 1, "Dravidian languages" }, { "dua", "", 1, "Duala" }, { "dut", "", 1, "Dutch" }, { "dum", "", 1, "Dutch, Middle" }, { "dyu", "", 1, "Dyula" }, { "dzo", "", 1, "Dzongkha" }, { "frs", "", 1, "Eastern Frisian" }, { "bin", "", 1, "Edo" }, { "efi", "", 1, "Efik" }, { "egy", "", 1, "Egyptian (Ancient)" }, { "eka", "", 1, "Ekajuk" }, { "elx", "", 1, "Elamite" }, { "eng", "", 1, "English" }, { "enm", "", 0, "English, Middle" }, { "ang", "", 0, "English, Old" }, { "myv", "", 1, "Erzya" }, { "epo", "", 1, "Esperanto" }, { "est", "", 1, "Estonian" }, { "ewe", "", 1, "Ewe" }, { "ewo", "", 1, "Ewondo" }, { "fan", "", 1, "Fang" }, { "fat", "", 1, "Fanti" }, { "fao", "", 1, "Faroese" }, { "fij", "", 1, "Fijian" }, { "fil", "", 1, "Filipino" }, { "fin", "", 1, "Finnish" }, { "fiu", "", 1, "Finno-Ugric languages" }, { "dut", "", 1, "Flemish" }, { "fon", "", 1, "Fon" }, { "fre", "fra", 1, "French" }, { "frm", "", 0, "French, Middle" }, { "fro", "", 0, "French, Old" }, { "frs", "", 1, "Frisian, Eastern" }, { "frr", "", 1, "Frisian, Northern" }, { "fry", "", 1, "Frisian, Western" }, { "fur", "", 1, "Friulian" }, { "ful", "", 1, "Fulah" }, { "gaa", "", 1, "Ga" }, { "gla", "", 1, "Gaelic" }, { "car", "", 1, "Galibi Carib" }, { "lug", "", 1, "Ganda" }, { "gay", "", 1, "Gayo" }, { "gba", "", 1, "Gbaya" }, { "gez", "", 1, "Ge'ez" }, { "geo", "kat", 1, "Georgian" }, { "ger", "deu", 1, "German" }, { "nds", "", 1, "German, Low" }, { "gmh", "", 1, "German, Middle High" }, { "goh", "", 1, "German, Old High" }, { "gem", "", 1, "Germanic languages" }, { "kik", "", 1, "Gikuyu" }, { "gil", "", 1, "Gilbertese" }, { "gon", "", 1, "Gondi" }, { "gor", "", 1, "Gorontalo" }, { "got", "", 1, "Gothic" }, { "grb", "", 1, "Grebo" }, { "grc", "", 1, "Greek, Ancient" }, { "gre", "ell", 1, "Greek, Modern" }, { "kal", "", 1, "Greenlandic" }, { "grn", "", 1, "Guarani" }, { "guj", "", 1, "Gujarati" }, { "gwi", "", 1, "Gwich'in" }, { "hai", "", 1, "Haida" }, { "hat", "", 1, "Haitian" }, { "hat", "", 1, "Haitian Creole" }, { "hau", "", 1, "Hausa" }, { "haw", "", 1, "Hawaiian" }, { "heb", "", 1, "Hebrew" }, { "hil", "", 1, "Hiligaynon" }, { "him", "", 1, "Himachali languages" }, { "hin", "", 1, "Hindi" }, { "hmo", "", 1, "Hiri Motu" }, { "hit", "", 1, "Hittite" }, { "hmn", "", 1, "Hmong" }, { "hun", "", 1, "Hungarian" }, { "hup", "", 1, "Hupa" }, { "iba", "", 1, "Iban" }, { "ice", "isl", 1, "Icelandic" }, { "ido", "", 1, "Ido" }, { "ibo", "", 1, "Igbo" }, { "ijo", "", 1, "Ijo languages" }, { "ilo", "", 1, "Iloko" }, { "arc", "", 1, "Imperial Aramaic" }, { "smn", "", 1, "Inari Sami" }, { "inc", "", 1, "Indic languages" }, { "ine", "", 1, "Indo-European languages" }, { "ind", "", 1, "Indonesian" }, { "inh", "", 1, "Ingush" }, { "ina", "", 1, "Interlingua" }, { "ile", "", 1, "Interlingue, Occidental" }, { "iku", "", 1, "Inuktitut" }, { "ipk", "", 1, "Inupiaq" }, { "ira", "", 1, "Iranian languages" }, { "mga", "", 1, "Irish, Middle" }, { "sga", "", 1, "Irish, Old" }, { "iro", "", 1, "Iroquoian languages" }, { "ita", "", 1, "Italian" }, { "jpn", "", 1, "Japanese" }, { "jav", "", 1, "Javanese" }, { "kac", "", 1, "Jingpho" }, { "jrb", "", 1, "Judaeo-Arabic" }, { "jpr", "", 1, "Judaeo-Persian" }, { "kab", "", 1, "Kabyle" }, { "kac", "", 1, "Kachin" }, { "kal", "", 1, "Kalaallisut" }, { "xal", "", 1, "Kalmyk" }, { "kam", "", 1, "Kamba" }, { "kan", "", 1, "Kannada" }, { "kau", "", 1, "Kanuri" }, { "pam", "", 1, "Kapampangan" }, { "kaa", "", 1, "Kara-Kalpak" }, { "krc", "", 1, "Karachay-Balkar" }, { "krl", "", 1, "Karelian" }, { "kar", "", 1, "Karen languages" }, { "kas", "", 1, "Kashmiri" }, { "csb", "", 1, "Kashubian" }, { "kaw", "", 1, "Kawi" }, { "kaz", "", 1, "Kazakh" }, { "kha", "", 1, "Khasi" }, { "khi", "", 1, "Khoisan languages" }, { "kho", "", 1, "Khotanese" }, { "kik", "", 1, "Kikuyu" }, { "kmb", "", 1, "Kimbundu" }, { "kin", "", 1, "Kinyarwanda" }, { "kir", "", 1, "Kirghiz" }, { "gil", "", 1, "Kiribati" }, { "tlh", "", 1, "Klingon" }, { "kom", "", 1, "Komi" }, { "kon", "", 1, "Kongo" }, { "kok", "", 1, "Konkani" }, { "kor", "", 1, "Korean" }, { "kos", "", 1, "Kosraean" }, { "kpe", "", 1, "Kpelle" }, { "kro", "", 1, "Kru languages" }, { "kua", "", 1, "Kuanyama" }, { "kum", "", 1, "Kumyk" }, { "kur", "", 1, "Kurdish" }, { "kru", "", 1, "Kurukh" }, { "kut", "", 1, "Kutenai" }, { "kua", "", 1, "Kwanyama" }, { "kir", "", 1, "Kyrgyz" }, { "lad", "", 1, "Ladino" }, { "lah", "", 1, "Lahnda" }, { "lam", "", 1, "Lamba" }, { "day", "", 1, "Land Dayak languages" }, { "lao", "", 1, "Lao" }, { "lat", "", 1, "Latin" }, { "lav", "", 1, "Latvian" }, { "ast", "", 1, "Leonese" }, { "ltz", "", 1, "Letzeburgesch" }, { "lez", "", 1, "Lezghian" }, { "lim", "", 1, "Limburgan" }, { "lim", "", 1, "Limburger" }, { "lim", "", 1, "Limburgish" }, { "lin", "", 1, "Lingala" }, { "lit", "", 1, "Lithuanian" }, { "jbo", "", 1, "Lojban" }, { "nds", "", 1, "Low German" }, { "nds", "", 1, "Low Saxon" }, { "dsb", "", 1, "Lower Sorbian" }, { "loz", "", 1, "Lozi" }, { "lub", "", 1, "Luba-Katanga" }, { "lua", "", 1, "Luba-Lulua" }, { "lui", "", 1, "Luiseno" }, { "smj", "", 1, "Lule Sami" }, { "lun", "", 1, "Lunda" }, { "luo", "", 1, "Luo" }, { "luo", "", 1, "Luo (Kenya and Tanzania)" }, { "lus", "", 1, "Lushai" }, { "ltz", "", 1, "Luxembourgish" }, { "mas", "", 1, "Maasai" }, { "rup", "", 1, "Macedo-Romanian" }, { "mac", "mkd", 1, "Macedonian" }, { "mad", "", 1, "Madurese" }, { "mag", "", 1, "Magahi" }, { "mai", "", 1, "Maithili" }, { "mak", "", 1, "Makasar" }, { "mlg", "", 1, "Malagasy" }, { "may", "msa", 1, "Malay" }, { "mal", "", 1, "Malayalam" }, { "div", "", 1, "Maldivian" }, { "mlt", "", 1, "Maltese" }, { "mnc", "", 1, "Manchu" }, { "mdr", "", 1, "Mandar" }, { "man", "", 1, "Mandingo" }, { "mni", "", 1, "Manipuri" }, { "mno", "", 1, "Manobo languages" }, { "glv", "", 1, "Manx" }, { "mao", "mri", 1, "Maori" }, { "arn", "", 1, "Mapuche" }, { "arn", "", 1, "Mapudungun" }, { "mar", "", 1, "Marathi" }, { "chm", "", 1, "Mari" }, { "mah", "", 1, "Marshallese" }, { "mwr", "", 1, "Marwari" }, { "myn", "", 1, "Mayan languages" }, { "men", "", 1, "Mende" }, { "mic", "", 1, "Mi'kmaq" }, { "mic", "", 1, "Micmac" }, { "dum", "", 1, "Middle Dutch" }, { "enm", "", 1, "Middle English" }, { "frm", "", 1, "Middle French" }, { "gmh", "", 1, "Middle High German" }, { "mga", "", 1, "Middle Irish" }, { "pal", "", 1, "Middle Persian" }, { "min", "", 1, "Minangkabau" }, { "mwl", "", 1, "Mirandese" }, { "gre", "ell", 1, "Modern Greek" }, { "moh", "", 1, "Mohawk" }, { "mdf", "", 1, "Moksha" }, { "mkh", "", 1, "Mon-Khmer languages" }, { "lol", "", 1, "Mongo" }, { "mon", "", 1, "Mongolian" }, { "mos", "", 1, "Mossi" }, { "mul", "", 1, "Multiple languages" }, { "mun", "", 1, "Munda languages" }, { "nqo", "", 1, "N'Ko" }, { "nah", "", 1, "Nahuatl" }, { "nau", "", 1, "Nauruan" }, { "nav", "", 1, "Navaho" }, { "nav", "", 1, "Navajo" }, { "ndo", "", 1, "Ndonga" }, { "nap", "", 1, "Neapolitan" }, { "new", "", 1, "Nepal Bhasa" }, { "nep", "", 1, "Nepali" }, { "new", "", 1, "Newari" }, { "nia", "", 1, "Nias" }, { "nic", "", 1, "Niger-Congo languages" }, { "ssa", "", 1, "Nilo-Saharan languages" }, { "niu", "", 1, "Niuean" }, { "nog", "", 1, "Nogai" }, { "non", "", 0, "Norse, Old" }, { "nai", "", 1, "North American Indian languages" }, { "frr", "", 1, "Northern Frisian" }, { "nde", "", 1, "Northern Ndebele" }, { "sme", "", 1, "Northern Sami" }, { "nso", "", 1, "Northern Sotho" }, { "nob", "", 1, "Norwegian Bokmaal" }, { "nno", "", 1, "Norwegian Nynorsk" }, { "zxx", "", 1, "Not linguistic content; not applicable" }, { "nub", "", 1, "Nubian languages" }, { "iii", "", 1, "Nuosu" }, { "nym", "", 1, "Nyamwezi" }, { "nya", "", 1, "Nyanja" }, { "nyn", "", 1, "Nyankole" }, { "nyr", "", 1, "Nyoro" }, { "nzi", "", 1, "Nzima" }, { "oci", "", 1, "Occitan" }, { "pro", "", 0, "Occitan, Old" }, { "arc", "", 1, "Official Aramaic" }, { "xal", "", 1, "Oirat" }, { "oji", "", 1, "Ojibwa" }, { "chu", "", 1, "Old Bulgarian" }, { "chu", "", 1, "Old Church Slavonic" }, { "ang", "", 1, "Old English" }, { "fro", "", 1, "Old French" }, { "goh", "", 1, "Old High German" }, { "sga", "", 1, "Old Irish" }, { "nwc", "", 1, "Old Newari" }, { "non", "", 1, "Old Norse" }, { "pro", "", 1, "Old Occitan" }, { "peo", "", 1, "Old Persian" }, { "pro", "", 1, "Old Provencal" }, { "chu", "", 1, "Old Slavonic" }, { "ori", "", 1, "Oriya" }, { "orm", "", 1, "Oromo" }, { "osa", "", 1, "Osage" }, { "oss", "", 1, "Ossetian" }, { "oss", "", 1, "Ossetic" }, { "oto", "", 1, "Otomian languages" }, { "ota", "", 1, "Ottoman Turkish" }, { "pal", "", 1, "Pahlavi" }, { "pau", "", 1, "Palauan" }, { "pli", "", 1, "Pali" }, { "pam", "", 1, "Pampanga" }, { "pag", "", 1, "Pangasinan" }, { "pan", "", 1, "Panjabi" }, { "pap", "", 1, "Papiamento" }, { "paa", "", 1, "Papuan languages" }, { "pus", "", 1, "Pashto" }, { "pus", "", 1, "Pashto language" }, { "nso", "", 1, "Pedi" }, { "per", "fas", 1, "Persian" }, { "pal", "", 0, "Persian, Middle" }, { "peo", "", 0, "Persian, Old" }, { "phi", "", 1, "Philippine languages" }, { "phn", "", 1, "Phoenician" }, { "fil", "", 0, "Pilipino" }, { "pon", "", 1, "Pohnpeian" }, { "pol", "", 1, "Polish" }, { "por", "", 1, "Portuguese" }, { "pra", "", 1, "Prakit" }, { "pro", "", 0, "Provencal, Old" }, { "pan", "", 1, "Punjabi" }, { "que", "", 1, "Quechua" }, { "raj", "", 1, "Rajasthani" }, { "rap", "", 1, "Rapanui" }, { "rar", "", 1, "Rarotongan" }, { "roa", "", 1, "Romance languages" }, { "rum", "ron", 1, "Romanian" }, { "roh", "", 1, "Romansh" }, { "rom", "", 1, "Romany" }, { "run", "", 1, "Rundi" }, { "rus", "", 1, "Russian" }, { "kho", "", 1, "Sakan" }, { "sal", "", 1, "Salishan languages" }, { "sam", "", 1, "Samaritan Aramaic" }, { "smi", "", 1, "Sami languages" }, { "smo", "", 1, "Samoan" }, { "sad", "", 1, "Sandawe" }, { "sag", "", 1, "Sango" }, { "san", "", 1, "Sanskrit" }, { "sat", "", 1, "Santali" }, { "srd", "", 1, "Sardinian" }, { "sas", "", 1, "Sasak" }, { "nds", "", 1, "Saxon, Low" }, { "sco", "", 1, "Scots" }, { "gla", "", 1, "Scottish Gaelic" }, { "sel", "", 1, "Selkup" }, { "sem", "", 1, "Semitic languages" }, { "nso", "", 1, "Sepedi" }, { "srp", "", 1, "Serbian" }, { "srr", "", 1, "Serer" }, { "shn", "", 1, "Shan" }, { "sna", "", 1, "Shona" }, { "iii", "", 1, "Sichuan Yi" }, { "scn", "", 1, "Sicilian" }, { "sid", "", 1, "Sidamo" }, { "sgn", "", 1, "Sign languages" }, { "bla", "", 1, "Siksika" }, { "snd", "", 1, "Sindhi" }, { "sin", "", 1, "Sinhala" }, { "sin", "", 1, "Sinhalese" }, { "sit", "", 1, "Sino-Tibetan languages" }, { "sio", "", 1, "Siouan languages" }, { "sms", "", 1, "Skolt Sami" }, { "den", "", 1, "Slave (Athapascan)" }, { "sla", "", 1, "Slavic languages" }, { "slo", "slk", 1, "Slovak" }, { "slv", "", 1, "Slovenian" }, { "sog", "", 1, "Sogdian" }, { "som", "", 1, "Somali" }, { "son", "", 1, "Songhay languages" }, { "snk", "", 1, "Soninke" }, { "wen", "", 1, "Sorbian languages" }, { "dsb", "", 1, "Sorbian, Lower" }, { "hsb", "", 1, "Sorbian, Upper" }, { "sai", "", 1, "South American Indian languages" }, { "alt", "", 1, "Southern Altai" }, { "nbl", "", 1, "Southern Ndebele" }, { "sma", "", 1, "Southern Sami" }, { "sot", "", 1, "Southern Sotho" }, { "spa", "", 1, "Spanish" }, { "srn", "", 1, "Sranan Tongo" }, { "zgh", "", 1, "Standard Moroccan Tamazight" }, { "suk", "", 1, "Sukuma" }, { "sux", "", 1, "Sumerian" }, { "sun", "", 1, "Sundanese" }, { "sus", "", 1, "Susu" }, { "swa", "", 1, "Swahili" }, { "ssw", "", 1, "Swati" }, { "swe", "", 1, "Swedish" }, { "gsw", "", 1, "Swiss German" }, { "syr", "", 1, "Syriac" }, { "tgl", "", 1, "Tagalog" }, { "tah", "", 1, "Tahitian" }, { "tai", "", 1, "Tai languages" }, { "tgk", "", 1, "Tajik" }, { "tmh", "", 1, "Tamashek" }, { "tam", "", 1, "Tamil" }, { "tat", "", 1, "Tatar" }, { "tel", "", 1, "Telugu" }, { "ter", "", 1, "Tereno" }, { "tet", "", 1, "Tetum" }, { "tha", "", 1, "Thai" }, { "tib", "bod", 1, "Tibetan" }, { "tig", "", 1, "Tigre" }, { "tir", "", 1, "Tigrinya" }, { "tem", "", 1, "Time" }, { "tiv", "", 1, "Tiv" }, { "tli", "", 1, "Tlingit" }, { "tpi", "", 1, "Tok Pisin" }, { "tkl", "", 1, "Tokelau" }, { "tog", "", 1, "Tonga (Nyasa)" }, { "ton", "", 1, "Tonga (Tonga Islands)" }, { "tsi", "", 1, "Tsimshian" }, { "tso", "", 1, "Tsonga" }, { "tsn", "", 1, "Tswana" }, { "tum", "", 1, "Tumbuka" }, { "tup", "", 1, "Tupian languages" }, { "tur", "", 1, "Turkish" }, { "ota", "", 1, "Turkish, Ottoman" }, { "tuk", "", 1, "Turkmen" }, { "tvl", "", 1, "Tuvalu" }, { "tyv", "", 1, "Tuvinian" }, { "twi", "", 1, "Twi" }, { "udm", "", 1, "Udmurt" }, { "uga", "", 1, "Ugaritic" }, { "uig", "", 1, "Uighur" }, { "ukr", "", 1, "Ukranian" }, { "umb", "", 1, "Umbundu" }, { "mis", "", 1, "Uncoded languages" }, { "und", "", 1, "Undetermined language" }, { "hsb", "", 1, "Upper Sorbian" }, { "urd", "", 1, "Urdu" }, { "uig", "", 1, "Uyghur" }, { "uzb", "", 1, "Uzbek" }, { "vai", "", 1, "Vai" }, { "cat", "", 1, "Valencian" }, { "ven", "", 1, "Venda" }, { "vie", "", 1, "Vietnamese" }, { "vol", "", 1, "Volapuk" }, { "vot", "", 1, "Voltic" }, { "wak", "", 1, "Wakashan languages" }, { "wln", "", 1, "Walloon" }, { "war", "", 1, "Waray-Waray" }, { "was", "", 1, "Washo" }, { "wel", "cym", 1, "Welsh" }, { "fry", "", 1, "Western Frisian" }, { "wal", "", 1, "Wolaitta" }, { "wal", "", 1, "Wolaytta" }, { "wol", "", 1, "Wolof" }, { "xho", "", 1, "Xhosa" }, { "sah", "", 1, "Yakut" }, { "yao", "", 1, "Yao" }, { "yap", "", 1, "Yapese" }, { "yid", "", 1, "Yidish" }, { "yor", "", 1, "Yoruba" }, { "ypk", "", 1, "Yupik languages" }, { "znd", "", 1, "Zande languages" }, { "zap", "", 1, "Zapotec" }, { "zza", "", 1, "Zaza" }, { "zza", "", 1, "Zazaki" }, { "zen", "", 1, "Zenaga" }, { "zha", "", 1, "Zhuang" }, { "zul", "", 1, "Zulu" }, { "zun", "", 1, "Zuni" }, }; static int niso639_2= sizeof( iso639_2 ) / sizeof( iso639_2[0] ); char * iso639_2_from_code( char *code ) { int i; for ( i=0; i 0 ) return NULL; } return NULL; } #ifdef TEST #include #include static int check_alphabetical( void ) { char *l1, *l2; int i, ret = 1; l1 = iso639_2[0].language; for ( i=0; i= 0 ) { fprintf( stderr, "Swap '%s' and '%s'\n", l1, l2 ); ret = 0; } l1 = l2; } return ret; } int main( int argc, char *argv[] ) { int ok; ok = check_alphabetical(); return EXIT_SUCCESS; } #endif hs-bibutils-5.5/bibutils/copacin.c0000644000000000000000000001643312445605732015412 0ustar0000000000000000/* * copacin.c * * Copyright (c) Chris Putnam 2004-2014 * * Program and source code released under the GPL version 2 * */ #include #include #include #include "is_ws.h" #include "newstr.h" #include "newstr_conv.h" #include "list.h" #include "name.h" #include "title.h" #include "fields.h" #include "reftypes.h" #include "serialno.h" #include "copacin.h" /***************************************************** PUBLIC: void copacin_initparams() *****************************************************/ void copacin_initparams( param *p, const char *progname ) { p->readformat = BIBL_COPACIN; p->charsetin = BIBL_CHARSET_DEFAULT; p->charsetin_src = BIBL_SRC_DEFAULT; p->latexin = 0; p->xmlin = 0; p->utf8in = 0; p->nosplittitle = 0; p->verbose = 0; p->addcount = 0; p->output_raw = 0; p->readf = copacin_readf; p->processf = copacin_processf; p->cleanf = NULL; p->typef = NULL; p->convertf = copacin_convertf; p->all = copac_all; p->nall = copac_nall; list_init( &(p->asis) ); list_init( &(p->corps) ); if ( !progname ) p->progname = NULL; else p->progname = strdup( progname ); } /***************************************************** PUBLIC: int copacin_readf() *****************************************************/ /* Endnote-Refer/Copac tag definition: character 1 = alphabetic character character 2 = alphabetic character character 3 = dash character 4 = space */ static int copacin_istag( char *buf ) { if (! ((buf[0]>='A' && buf[0]<='Z')) || (buf[0]>='a' && buf[0]<='z') ) return 0; if (! ((buf[1]>='A' && buf[1]<='Z')) || (buf[1]>='a' && buf[1]<='z') ) return 0; if (buf[2]!='-' ) return 0; if (buf[3]!=' ' ) return 0; return 1; } static int readmore( FILE *fp, char *buf, int bufsize, int *bufpos, newstr *line ) { if ( line->len ) return 1; else return newstr_fget( fp, buf, bufsize, bufpos, line ); } int copacin_readf( FILE *fp, char *buf, int bufsize, int *bufpos, newstr *line, newstr *reference, int *fcharset ) { int haveref = 0, inref=0; char *p; *fcharset = CHARSET_UNKNOWN; while ( !haveref && readmore( fp, buf, bufsize, bufpos, line ) ) { /* blank line separates */ if ( line->data==NULL ) continue; if ( inref && line->len==0 ) haveref=1; p = &(line->data[0]); /* Recognize UTF8 BOM */ if ( line->len > 2 && (unsigned char)(p[0])==0xEF && (unsigned char)(p[1])==0xBB && (unsigned char)(p[2])==0xBF ) { *fcharset = CHARSET_UNICODE; p += 3; } if ( copacin_istag( p ) ) { if ( inref ) newstr_addchar( reference, '\n' ); newstr_strcat( reference, p ); newstr_empty( line ); inref = 1; } else if ( inref ) { if ( p ) { /* copac puts tag only on 1st line */ newstr_addchar( reference, ' ' ); if ( *p ) p++; if ( *p ) p++; if ( *p ) p++; newstr_strcat( reference, p ); } newstr_empty( line ); } else { newstr_empty( line ); } } return haveref; } /***************************************************** PUBLIC: int copacin_processf() *****************************************************/ static char* copacin_addtag2( char *p, newstr *tag, newstr *data ) { int i; i =0; while ( i<3 && *p ) { newstr_addchar( tag, *p++ ); i++; } while ( *p==' ' || *p=='\t' ) p++; while ( *p && *p!='\r' && *p!='\n' ) { newstr_addchar( data, *p ); p++; } newstr_trimendingws( data ); while ( *p=='\n' || *p=='\r' ) p++; return p; } static char * copacin_nextline( char *p ) { while ( *p && *p!='\n' && *p!='\r') p++; while ( *p=='\n' || *p=='\r' ) p++; return p; } int copacin_processf( fields *copacin, char *p, char *filename, long nref ) { newstr tag, data; int status; newstr_init( &tag ); newstr_init( &data ); while ( *p ) { p = skip_ws( p ); if ( copacin_istag( p ) ) { p = copacin_addtag2( p, &tag, &data ); /* don't add empty strings */ if ( tag.len && data.len ) { status = fields_add( copacin, tag.data, data.data, 0 ); if ( status!=FIELDS_OK ) return 0; } newstr_empty( &tag ); newstr_empty( &data ); } else p = copacin_nextline( p ); } newstr_free( &tag ); newstr_free( &data ); return 1; } /***************************************************** PUBLIC: int copacin_convertf(), returns BIBL_OK or BIBL_ERR_MEMERR *****************************************************/ /* copac names appear to always start with last name first, but don't * always seem to have a comma after the name * * editors seem to be stuck in as authors with the tag "[Editor]" in it */ static int copacin_addname( fields *info, char *tag, newstr *name, int level, list *asis, list *corps ) { char *usetag = tag, editor[]="EDITOR"; newstr usename, *s; list tokens; int comma = 0, i, ok; if ( list_find( asis, name->data ) !=-1 || list_find( corps, name->data ) !=-1 ) { ok = name_add( info, tag, name->data, level, asis, corps ); if ( ok ) return BIBL_OK; else return BIBL_ERR_MEMERR; } list_init( &tokens ); newstr_init( &usename ); list_tokenize( &tokens, name, " ", 1 ); for ( i=0; idata, "[Editor]" ) ) { usetag = editor; newstr_strcpy( s, "" ); } else if ( s->len && s->data[s->len-1]==',' ) { comma++; } } if ( comma==0 && tokens.n ) { s = list_get( &tokens, 0 ); newstr_addchar( s, ',' ); } for ( i=0; iverbose ) { if ( p->progname ) fprintf( stderr, "%s: ", p->progname ); fprintf( stderr, "Cannot find tag '%s'\n", tag ); } } static int copacin_simple( fields *out, char *tag, char *value, int level ) { int fstatus = fields_add( out, tag, value, level ); if ( fstatus==FIELDS_OK ) return BIBL_OK; else return BIBL_ERR_MEMERR; } int copacin_convertf( fields *copacin, fields *out, int reftype, param *p, variants *all, int nall ) { int process, level, i, n, nfields, ok, status = BIBL_OK; newstr *tag, *data; char *newtag; nfields = fields_num( copacin ); for ( i=0; idata, reftype, all, nall, &process, &level, &newtag ); if ( n==-1 ) { copacin_report_notag( p, tag->data ); continue; } if ( process == ALWAYS ) continue; /*add these later*/ data = fields_value( copacin, i, FIELDS_STRP ); switch ( process ) { case SIMPLE: status = copacin_simple( out, newtag, data->data, level ); break; case TITLE: ok = title_process( out, newtag, data->data, level, p->nosplittitle ); if ( ok ) status = BIBL_OK; else status = BIBL_ERR_MEMERR; break; case PERSON: status = copacin_addname( out, newtag, data, level, &(p->asis), &(p->corps) ); break; case SERIALNO: ok = addsn( out, data->data, level ); if ( ok ) status = BIBL_OK; else status = BIBL_ERR_MEMERR; break; default: fprintf(stderr,"%s: internal error -- " "illegal process value %d\n", p->progname, process ); status = BIBL_OK; break; } if ( status!=BIBL_OK ) return status; } return status; } hs-bibutils-5.5/bibutils/iso639_3.c0000644000000000000000000065060012445605732015254 0ustar0000000000000000/* * iso639_3.c */ #include #include "iso639_3.h" typedef struct { char *code; char *language; } iso639_3_t; static iso639_3_t iso639_3[] = { { "aaa", "Ghotuo" }, { "aab", "Alumu-Tesu" }, { "aac", "Ari" }, { "aad", "Amal" }, { "aae", "Arbëreshë Albanian" }, { "aaf", "Aranadan" }, { "aag", "Ambrak" }, { "aah", "Abu' Arapesh" }, { "aai", "Arifama-Miniafia" }, { "aak", "Ankave" }, { "aal", "Afade" }, { "aam", "Aramanik" }, { "aan", "Anambé" }, { "aao", "Algerian Saharan Arabic" }, { "aap", "Pará Arára" }, { "aaq", "Eastern Abnaki" }, { "aar", "Afar" }, { "aas", "Aasáx" }, { "aat", "Arvanitika Albanian" }, { "aau", "Abau" }, { "aaw", "Solong" }, { "aax", "Mandobo Atas" }, { "aaz", "Amarasi" }, { "aba", "Abé" }, { "abb", "Bankon" }, { "abc", "Ambala Ayta" }, { "abd", "Manide" }, { "abe", "Western Abnaki" }, { "abf", "Abai Sungai" }, { "abg", "Abaga" }, { "abh", "Tajiki Arabic" }, { "abi", "Abidji" }, { "abj", "Aka-Bea" }, { "abk", "Abkhazian" }, { "abl", "Lampung Nyo" }, { "abm", "Abanyom" }, { "abn", "Abua" }, { "abo", "Abon" }, { "abp", "Abellen Ayta" }, { "abq", "Abaza" }, { "abr", "Abron" }, { "abs", "Ambonese Malay" }, { "abt", "Ambulas" }, { "abu", "Abure" }, { "abv", "Baharna Arabic" }, { "abw", "Pal" }, { "abx", "Inabaknon" }, { "aby", "Aneme Wake" }, { "abz", "Abui" }, { "aca", "Achagua" }, { "acb", "Áncá" }, { "acd", "Gikyode" }, { "ace", "Achinese" }, { "acf", "Saint Lucian Creole French" }, { "ach", "Acoli" }, { "aci", "Aka-Cari" }, { "ack", "Aka-Kora" }, { "acl", "Akar-Bale" }, { "acm", "Mesopotamian Arabic" }, { "acn", "Achang" }, { "acp", "Eastern Acipa" }, { "acq", "Ta'izzi-Adeni Arabic" }, { "acr", "Achi" }, { "acs", "Acroá" }, { "act", "Achterhoeks" }, { "acu", "Achuar-Shiwiar" }, { "acv", "Achumawi" }, { "acw", "Hijazi Arabic" }, { "acx", "Omani Arabic" }, { "acy", "Cypriot Arabic" }, { "acz", "Acheron" }, { "ada", "Adangme" }, { "adb", "Adabe" }, { "add", "Dzodinka" }, { "ade", "Adele" }, { "adf", "Dhofari Arabic" }, { "adg", "Andegerebinha" }, { "adh", "Adhola" }, { "adi", "Adi" }, { "adj", "Adioukrou" }, { "adl", "Galo" }, { "adn", "Adang" }, { "ado", "Abu" }, { "adp", "Adap" }, { "adq", "Adangbe" }, { "adr", "Adonara" }, { "ads", "Adamorobe Sign Language" }, { "adt", "Adnyamathanha" }, { "adu", "Aduge" }, { "adw", "Amundava" }, { "adx", "Amdo Tibetan" }, { "ady", "Adyghe" }, { "adz", "Adzera" }, { "aea", "Areba" }, { "aeb", "Tunisian Arabic" }, { "aec", "Saidi Arabic" }, { "aed", "Argentine Sign Language" }, { "aee", "Northeast Pashayi" }, { "aek", "Haeke" }, { "ael", "Ambele" }, { "aem", "Arem" }, { "aen", "Armenian Sign Language" }, { "aeq", "Aer" }, { "aer", "Eastern Arrernte" }, { "aes", "Alsea" }, { "aeu", "Akeu" }, { "aew", "Ambakich" }, { "aey", "Amele" }, { "aez", "Aeka" }, { "afb", "Gulf Arabic" }, { "afd", "Andai" }, { "afe", "Putukwam" }, { "afg", "Afghan Sign Language" }, { "afh", "Afrihili" }, { "afi", "Akrukay" }, { "afk", "Nanubae" }, { "afn", "Defaka" }, { "afo", "Eloyi" }, { "afp", "Tapei" }, { "afr", "Afrikaans" }, { "afs", "Afro-Seminole Creole" }, { "aft", "Afitti" }, { "afu", "Awutu" }, { "afz", "Obokuitai" }, { "aga", "Aguano" }, { "agb", "Legbo" }, { "agc", "Agatu" }, { "agd", "Agarabi" }, { "age", "Angal" }, { "agf", "Arguni" }, { "agg", "Angor" }, { "agh", "Ngelima" }, { "agi", "Agariya" }, { "agj", "Argobba" }, { "agk", "Isarog Agta" }, { "agl", "Fembe" }, { "agm", "Angaataha" }, { "agn", "Agutaynen" }, { "ago", "Tainae" }, { "agq", "Aghem" }, { "agr", "Aguaruna" }, { "ags", "Esimbi" }, { "agt", "Central Cagayan Agta" }, { "agu", "Aguacateco" }, { "agv", "Remontado Dumagat" }, { "agw", "Kahua" }, { "agx", "Aghul" }, { "agy", "Southern Alta" }, { "agz", "Mt. Iriga Agta" }, { "aha", "Ahanta" }, { "ahb", "Axamb" }, { "ahg", "Qimant" }, { "ahh", "Aghu" }, { "ahi", "Tiagbamrin Aizi" }, { "ahk", "Akha" }, { "ahl", "Igo" }, { "ahm", "Mobumrin Aizi" }, { "ahn", "Àhàn" }, { "aho", "Ahom" }, { "ahp", "Aproumu Aizi" }, { "ahr", "Ahirani" }, { "ahs", "Ashe" }, { "aht", "Ahtena" }, { "aia", "Arosi" }, { "aib", "Ainu (China)" }, { "aic", "Ainbai" }, { "aid", "Alngith" }, { "aie", "Amara" }, { "aif", "Agi" }, { "aig", "Antigua and Barbuda Creole English" }, { "aih", "Ai-Cham" }, { "aii", "Assyrian Neo-Aramaic" }, { "aij", "Lishanid Noshan" }, { "aik", "Ake" }, { "ail", "Aimele" }, { "aim", "Aimol" }, { "ain", "Ainu (Japan)" }, { "aio", "Aiton" }, { "aip", "Burumakok" }, { "aiq", "Aimaq" }, { "air", "Airoran" }, { "ais", "Nataoran Amis" }, { "ait", "Arikem" }, { "aiw", "Aari" }, { "aix", "Aighon" }, { "aiy", "Ali" }, { "aja", "Aja (Sudan)" }, { "ajg", "Aja (Benin)" }, { "aji", "Ajië" }, { "ajn", "Andajin" }, { "ajp", "South Levantine Arabic" }, { "ajt", "Judeo-Tunisian Arabic" }, { "aju", "Judeo-Moroccan Arabic" }, { "ajw", "Ajawa" }, { "ajz", "Amri Karbi" }, { "aka", "Akan" }, { "akb", "Batak Angkola" }, { "akc", "Mpur" }, { "akd", "Ukpet-Ehom" }, { "ake", "Akawaio" }, { "akf", "Akpa" }, { "akg", "Anakalangu" }, { "akh", "Angal Heneng" }, { "aki", "Aiome" }, { "akj", "Aka-Jeru" }, { "akk", "Akkadian" }, { "akl", "Aklanon" }, { "akm", "Aka-Bo" }, { "ako", "Akurio" }, { "akp", "Siwu" }, { "akq", "Ak" }, { "akr", "Araki" }, { "aks", "Akaselem" }, { "akt", "Akolet" }, { "aku", "Akum" }, { "akv", "Akhvakh" }, { "akw", "Akwa" }, { "akx", "Aka-Kede" }, { "aky", "Aka-Kol" }, { "akz", "Alabama" }, { "ala", "Alago" }, { "alc", "Qawasqar" }, { "ald", "Alladian" }, { "ale", "Aleut" }, { "alf", "Alege" }, { "alh", "Alawa" }, { "ali", "Amaimon" }, { "alj", "Alangan" }, { "alk", "Alak" }, { "all", "Allar" }, { "alm", "Amblong" }, { "aln", "Gheg Albanian" }, { "alo", "Larike-Wakasihu" }, { "alp", "Alune" }, { "alq", "Algonquin" }, { "alr", "Alutor" }, { "als", "Tosk Albanian" }, { "alt", "Southern Altai" }, { "alu", "'Are'are" }, { "alw", "Alaba-K’abeena" }, { "alx", "Amol" }, { "aly", "Alyawarr" }, { "alz", "Alur" }, { "ama", "Amanayé" }, { "amb", "Ambo" }, { "amc", "Amahuaca" }, { "ame", "Yanesha'" }, { "amf", "Hamer-Banna" }, { "amg", "Amurdak" }, { "amh", "Amharic" }, { "ami", "Amis" }, { "amj", "Amdang" }, { "amk", "Ambai" }, { "aml", "War-Jaintia" }, { "amm", "Ama (Papua New Guinea)" }, { "amn", "Amanab" }, { "amo", "Amo" }, { "amp", "Alamblak" }, { "amq", "Amahai" }, { "amr", "Amarakaeri" }, { "ams", "Southern Amami-Oshima" }, { "amt", "Amto" }, { "amu", "Guerrero Amuzgo" }, { "amv", "Ambelau" }, { "amw", "Western Neo-Aramaic" }, { "amx", "Anmatyerre" }, { "amy", "Ami" }, { "amz", "Atampaya" }, { "ana", "Andaqui" }, { "anb", "Andoa" }, { "anc", "Ngas" }, { "and", "Ansus" }, { "ane", "Xârâcùù" }, { "anf", "Animere" }, { "ang", "Old English (ca. 450-1100)" }, { "anh", "Nend" }, { "ani", "Andi" }, { "anj", "Anor" }, { "ank", "Goemai" }, { "anl", "Anu-Hkongso Chin" }, { "anm", "Anal" }, { "ann", "Obolo" }, { "ano", "Andoque" }, { "anp", "Angika" }, { "anq", "Jarawa (India)" }, { "anr", "Andh" }, { "ans", "Anserma" }, { "ant", "Antakarinya" }, { "anu", "Anuak" }, { "anv", "Denya" }, { "anw", "Anaang" }, { "anx", "Andra-Hus" }, { "any", "Anyin" }, { "anz", "Anem" }, { "aoa", "Angolar" }, { "aob", "Abom" }, { "aoc", "Pemon" }, { "aod", "Andarum" }, { "aoe", "Angal Enen" }, { "aof", "Bragat" }, { "aog", "Angoram" }, { "aoh", "Arma" }, { "aoi", "Anindilyakwa" }, { "aoj", "Mufian" }, { "aok", "Arhö" }, { "aol", "Alor" }, { "aom", "Ömie" }, { "aon", "Bumbita Arapesh" }, { "aor", "Aore" }, { "aos", "Taikat" }, { "aot", "A'tong" }, { "aou", "A'ou" }, { "aox", "Atorada" }, { "aoz", "Uab Meto" }, { "apb", "Sa'a" }, { "apc", "North Levantine Arabic" }, { "apd", "Sudanese Arabic" }, { "ape", "Bukiyip" }, { "apf", "Pahanan Agta" }, { "apg", "Ampanang" }, { "aph", "Athpariya" }, { "api", "Apiaká" }, { "apj", "Jicarilla Apache" }, { "apk", "Kiowa Apache" }, { "apl", "Lipan Apache" }, { "apm", "Mescalero-Chiricahua Apache" }, { "apn", "Apinayé" }, { "apo", "Ambul" }, { "app", "Apma" }, { "apq", "A-Pucikwar" }, { "apr", "Arop-Lokep" }, { "aps", "Arop-Sissano" }, { "apt", "Apatani" }, { "apu", "Apurinã" }, { "apv", "Alapmunte" }, { "apw", "Western Apache" }, { "apx", "Aputai" }, { "apy", "Apalaí" }, { "apz", "Safeyoka" }, { "aqc", "Archi" }, { "aqd", "Ampari Dogon" }, { "aqg", "Arigidi" }, { "aqm", "Atohwaim" }, { "aqn", "Northern Alta" }, { "aqp", "Atakapa" }, { "aqr", "Arhâ" }, { "aqz", "Akuntsu" }, { "ara", "Arabic" }, { "arb", "Standard Arabic" }, { "arc", "Official Aramaic (700-300 BCE)" }, { "ard", "Arabana" }, { "are", "Western Arrarnta" }, { "arg", "Aragonese" }, { "arh", "Arhuaco" }, { "ari", "Arikara" }, { "arj", "Arapaso" }, { "ark", "Arikapú" }, { "arl", "Arabela" }, { "arn", "Mapudungun" }, { "aro", "Araona" }, { "arp", "Arapaho" }, { "arq", "Algerian Arabic" }, { "arr", "Karo (Brazil)" }, { "ars", "Najdi Arabic" }, { "aru", "Aruá (Amazonas State)" }, { "arv", "Arbore" }, { "arw", "Arawak" }, { "arx", "Aruá (Rodonia State)" }, { "ary", "Moroccan Arabic" }, { "arz", "Egyptian Arabic" }, { "asa", "Asu (Tanzania)" }, { "asb", "Assiniboine" }, { "asc", "Casuarina Coast Asmat" }, { "asd", "Asas" }, { "ase", "American Sign Language" }, { "asf", "Australian Sign Language" }, { "asg", "Cishingini" }, { "ash", "Abishira" }, { "asi", "Buruwai" }, { "asj", "Sari" }, { "ask", "Ashkun" }, { "asl", "Asilulu" }, { "asm", "Assamese" }, { "asn", "Xingú Asuriní" }, { "aso", "Dano" }, { "asp", "Algerian Sign Language" }, { "asq", "Austrian Sign Language" }, { "asr", "Asuri" }, { "ass", "Ipulo" }, { "ast", "Asturian" }, { "asu", "Tocantins Asurini" }, { "asv", "Asoa" }, { "asw", "Australian Aborigines Sign Language" }, { "asx", "Muratayak" }, { "asy", "Yaosakor Asmat" }, { "asz", "As" }, { "ata", "Pele-Ata" }, { "atb", "Zaiwa" }, { "atc", "Atsahuaca" }, { "atd", "Ata Manobo" }, { "ate", "Atemble" }, { "atg", "Ivbie North-Okpela-Arhe" }, { "ati", "Attié" }, { "atj", "Atikamekw" }, { "atk", "Ati" }, { "atl", "Mt. Iraya Agta" }, { "atm", "Ata" }, { "atn", "Ashtiani" }, { "ato", "Atong" }, { "atp", "Pudtol Atta" }, { "atq", "Aralle-Tabulahan" }, { "atr", "Waimiri-Atroari" }, { "ats", "Gros Ventre" }, { "att", "Pamplona Atta" }, { "atu", "Reel" }, { "atv", "Northern Altai" }, { "atw", "Atsugewi" }, { "atx", "Arutani" }, { "aty", "Aneityum" }, { "atz", "Arta" }, { "aua", "Asumboa" }, { "aub", "Alugu" }, { "auc", "Waorani" }, { "aud", "Anuta" }, { "aue", "=Kx'au'ein" }, { "aug", "Aguna" }, { "auh", "Aushi" }, { "aui", "Anuki" }, { "auj", "Awjilah" }, { "auk", "Heyo" }, { "aul", "Aulua" }, { "aum", "Asu (Nigeria)" }, { "aun", "Molmo One" }, { "auo", "Auyokawa" }, { "aup", "Makayam" }, { "auq", "Anus" }, { "aur", "Aruek" }, { "aut", "Austral" }, { "auu", "Auye" }, { "auw", "Awyi" }, { "aux", "Aurá" }, { "auy", "Awiyaana" }, { "auz", "Uzbeki Arabic" }, { "ava", "Avaric" }, { "avb", "Avau" }, { "avd", "Alviri-Vidari" }, { "ave", "Avestan" }, { "avi", "Avikam" }, { "avk", "Kotava" }, { "avl", "Eastern Egyptian Bedawi Arabic" }, { "avm", "Angkamuthi" }, { "avn", "Avatime" }, { "avo", "Agavotaguerra" }, { "avs", "Aushiri" }, { "avt", "Au" }, { "avu", "Avokaya" }, { "avv", "Avá-Canoeiro" }, { "awa", "Awadhi" }, { "awb", "Awa (Papua New Guinea)" }, { "awc", "Cicipu" }, { "awe", "Awetí" }, { "awg", "Anguthimri" }, { "awh", "Awbono" }, { "awi", "Aekyom" }, { "awk", "Awabakal" }, { "awm", "Arawum" }, { "awn", "Awngi" }, { "awo", "Awak" }, { "awr", "Awera" }, { "aws", "South Awyu" }, { "awt", "Araweté" }, { "awu", "Central Awyu" }, { "awv", "Jair Awyu" }, { "aww", "Awun" }, { "awx", "Awara" }, { "awy", "Edera Awyu" }, { "axb", "Abipon" }, { "axe", "Ayerrerenge" }, { "axg", "Mato Grosso Arára" }, { "axk", "Yaka (Central African Republic)" }, { "axl", "Lower Southern Aranda" }, { "axm", "Middle Armenian" }, { "axx", "Xârâgurè" }, { "aya", "Awar" }, { "ayb", "Ayizo Gbe" }, { "ayc", "Southern Aymara" }, { "ayd", "Ayabadhu" }, { "aye", "Ayere" }, { "ayg", "Ginyanga" }, { "ayh", "Hadrami Arabic" }, { "ayi", "Leyigha" }, { "ayk", "Akuku" }, { "ayl", "Libyan Arabic" }, { "aym", "Aymara" }, { "ayn", "Sanaani Arabic" }, { "ayo", "Ayoreo" }, { "ayp", "North Mesopotamian Arabic" }, { "ayq", "Ayi (Papua New Guinea)" }, { "ayr", "Central Aymara" }, { "ays", "Sorsogon Ayta" }, { "ayt", "Magbukun Ayta" }, { "ayu", "Ayu" }, { "ayy", "Tayabas Ayta" }, { "ayz", "Mai Brat" }, { "aza", "Azha" }, { "azb", "South Azerbaijani" }, { "azd", "Eastern Durango Nahuatl" }, { "aze", "Azerbaijani" }, { "azg", "San Pedro Amuzgos Amuzgo" }, { "azj", "North Azerbaijani" }, { "azm", "Ipalapa Amuzgo" }, { "azn", "Western Durango Nahuatl" }, { "azo", "Awing" }, { "azt", "Faire Atta" }, { "azz", "Highland Puebla Nahuatl" }, { "baa", "Babatana" }, { "bab", "Bainouk-Gunyuño" }, { "bac", "Badui" }, { "bae", "Baré" }, { "baf", "Nubaca" }, { "bag", "Tuki" }, { "bah", "Bahamas Creole English" }, { "baj", "Barakai" }, { "bak", "Bashkir" }, { "bal", "Baluchi" }, { "bam", "Bambara" }, { "ban", "Balinese" }, { "bao", "Waimaha" }, { "bap", "Bantawa" }, { "bar", "Bavarian" }, { "bas", "Basa (Cameroon)" }, { "bau", "Bada (Nigeria)" }, { "bav", "Vengo" }, { "baw", "Bambili-Bambui" }, { "bax", "Bamun" }, { "bay", "Batuley" }, { "bba", "Baatonum" }, { "bbb", "Barai" }, { "bbc", "Batak Toba" }, { "bbd", "Bau" }, { "bbe", "Bangba" }, { "bbf", "Baibai" }, { "bbg", "Barama" }, { "bbh", "Bugan" }, { "bbi", "Barombi" }, { "bbj", "Ghomálá'" }, { "bbk", "Babanki" }, { "bbl", "Bats" }, { "bbm", "Babango" }, { "bbn", "Uneapa" }, { "bbo", "Northern Bobo Madaré" }, { "bbp", "West Central Banda" }, { "bbq", "Bamali" }, { "bbr", "Girawa" }, { "bbs", "Bakpinka" }, { "bbt", "Mburku" }, { "bbu", "Kulung (Nigeria)" }, { "bbv", "Karnai" }, { "bbw", "Baba" }, { "bbx", "Bubia" }, { "bby", "Befang" }, { "bbz", "Babalia Creole Arabic" }, { "bca", "Central Bai" }, { "bcb", "Bainouk-Samik" }, { "bcc", "Southern Balochi" }, { "bcd", "North Babar" }, { "bce", "Bamenyam" }, { "bcf", "Bamu" }, { "bcg", "Baga Binari" }, { "bch", "Bariai" }, { "bci", "Baoulé" }, { "bcj", "Bardi" }, { "bck", "Bunaba" }, { "bcl", "Central Bikol" }, { "bcm", "Bannoni" }, { "bcn", "Bali (Nigeria)" }, { "bco", "Kaluli" }, { "bcp", "Bali (Democratic Republic of Congo)" }, { "bcq", "Bench" }, { "bcr", "Babine" }, { "bcs", "Kohumono" }, { "bct", "Bendi" }, { "bcu", "Awad Bing" }, { "bcv", "Shoo-Minda-Nye" }, { "bcw", "Bana" }, { "bcy", "Bacama" }, { "bcz", "Bainouk-Gunyaamolo" }, { "bda", "Bayot" }, { "bdb", "Basap" }, { "bdc", "Emberá-Baudó" }, { "bdd", "Bunama" }, { "bde", "Bade" }, { "bdf", "Biage" }, { "bdg", "Bonggi" }, { "bdh", "Baka (Sudan)" }, { "bdi", "Burun" }, { "bdj", "Bai" }, { "bdk", "Budukh" }, { "bdl", "Indonesian Bajau" }, { "bdm", "Buduma" }, { "bdn", "Baldemu" }, { "bdo", "Morom" }, { "bdp", "Bende" }, { "bdq", "Bahnar" }, { "bdr", "West Coast Bajau" }, { "bds", "Burunge" }, { "bdt", "Bokoto" }, { "bdu", "Oroko" }, { "bdv", "Bodo Parja" }, { "bdw", "Baham" }, { "bdx", "Budong-Budong" }, { "bdy", "Bandjalang" }, { "bdz", "Badeshi" }, { "bea", "Beaver" }, { "beb", "Bebele" }, { "bec", "Iceve-Maci" }, { "bed", "Bedoanas" }, { "bee", "Byangsi" }, { "bef", "Benabena" }, { "beg", "Belait" }, { "beh", "Biali" }, { "bei", "Bekati'" }, { "bej", "Beja" }, { "bek", "Bebeli" }, { "bel", "Belarusian" }, { "bem", "Bemba (Zambia)" }, { "ben", "Bengali" }, { "beo", "Beami" }, { "bep", "Besoa" }, { "beq", "Beembe" }, { "bes", "Besme" }, { "bet", "Guiberoua Béte" }, { "beu", "Blagar" }, { "bev", "Daloa Bété" }, { "bew", "Betawi" }, { "bex", "Jur Modo" }, { "bey", "Beli (Papua New Guinea)" }, { "bez", "Bena (Tanzania)" }, { "bfa", "Bari" }, { "bfb", "Pauri Bareli" }, { "bfc", "Northern Bai" }, { "bfd", "Bafut" }, { "bfe", "Betaf" }, { "bff", "Bofi" }, { "bfg", "Busang Kayan" }, { "bfh", "Blafe" }, { "bfi", "British Sign Language" }, { "bfj", "Bafanji" }, { "bfk", "Ban Khor Sign Language" }, { "bfl", "Banda-Ndélé" }, { "bfm", "Mmen" }, { "bfn", "Bunak" }, { "bfo", "Malba Birifor" }, { "bfp", "Beba" }, { "bfq", "Badaga" }, { "bfr", "Bazigar" }, { "bfs", "Southern Bai" }, { "bft", "Balti" }, { "bfu", "Gahri" }, { "bfw", "Bondo" }, { "bfx", "Bantayanon" }, { "bfy", "Bagheli" }, { "bfz", "Mahasu Pahari" }, { "bga", "Gwamhi-Wuri" }, { "bgb", "Bobongko" }, { "bgc", "Haryanvi" }, { "bgd", "Rathwi Bareli" }, { "bge", "Bauria" }, { "bgf", "Bangandu" }, { "bgg", "Bugun" }, { "bgi", "Giangan" }, { "bgj", "Bangolan" }, { "bgk", "Bit" }, { "bgl", "Bo (Laos)" }, { "bgm", "Baga Mboteni" }, { "bgn", "Western Balochi" }, { "bgo", "Baga Koga" }, { "bgp", "Eastern Balochi" }, { "bgq", "Bagri" }, { "bgr", "Bawm Chin" }, { "bgs", "Tagabawa" }, { "bgt", "Bughotu" }, { "bgu", "Mbongno" }, { "bgv", "Warkay-Bipim" }, { "bgw", "Bhatri" }, { "bgx", "Balkan Gagauz Turkish" }, { "bgy", "Benggoi" }, { "bgz", "Banggai" }, { "bha", "Bharia" }, { "bhb", "Bhili" }, { "bhc", "Biga" }, { "bhd", "Bhadrawahi" }, { "bhe", "Bhaya" }, { "bhf", "Odiai" }, { "bhg", "Binandere" }, { "bhh", "Bukharic" }, { "bhi", "Bhilali" }, { "bhj", "Bahing" }, { "bhl", "Bimin" }, { "bhm", "Bathari" }, { "bhn", "Bohtan Neo-Aramaic" }, { "bho", "Bhojpuri" }, { "bhp", "Bima" }, { "bhq", "Tukang Besi South" }, { "bhr", "Bara Malagasy" }, { "bhs", "Buwal" }, { "bht", "Bhattiyali" }, { "bhu", "Bhunjia" }, { "bhv", "Bahau" }, { "bhw", "Biak" }, { "bhx", "Bhalay" }, { "bhy", "Bhele" }, { "bhz", "Bada (Indonesia)" }, { "bia", "Badimaya" }, { "bib", "Bissa" }, { "bic", "Bikaru" }, { "bid", "Bidiyo" }, { "bie", "Bepour" }, { "bif", "Biafada" }, { "big", "Biangai" }, { "bij", "Vaghat-Ya-Bijim-Legeri" }, { "bik", "Bikol" }, { "bil", "Bile" }, { "bim", "Bimoba" }, { "bin", "Bini" }, { "bio", "Nai" }, { "bip", "Bila" }, { "biq", "Bipi" }, { "bir", "Bisorio" }, { "bis", "Bislama" }, { "bit", "Berinomo" }, { "biu", "Biete" }, { "biv", "Southern Birifor" }, { "biw", "Kol (Cameroon)" }, { "bix", "Bijori" }, { "biy", "Birhor" }, { "biz", "Baloi" }, { "bja", "Budza" }, { "bjb", "Banggarla" }, { "bjc", "Bariji" }, { "bje", "Biao-Jiao Mien" }, { "bjf", "Barzani Jewish Neo-Aramaic" }, { "bjg", "Bidyogo" }, { "bjh", "Bahinemo" }, { "bji", "Burji" }, { "bjj", "Kanauji" }, { "bjk", "Barok" }, { "bjl", "Bulu (Papua New Guinea)" }, { "bjm", "Bajelani" }, { "bjn", "Banjar" }, { "bjo", "Mid-Southern Banda" }, { "bjp", "Fanamaket" }, { "bjr", "Binumarien" }, { "bjs", "Bajan" }, { "bjt", "Balanta-Ganja" }, { "bju", "Busuu" }, { "bjv", "Bedjond" }, { "bjw", "Bakwé" }, { "bjx", "Banao Itneg" }, { "bjy", "Bayali" }, { "bjz", "Baruga" }, { "bka", "Kyak" }, { "bkc", "Baka (Cameroon)" }, { "bkd", "Binukid" }, { "bkf", "Beeke" }, { "bkg", "Buraka" }, { "bkh", "Bakoko" }, { "bki", "Baki" }, { "bkj", "Pande" }, { "bkk", "Brokskat" }, { "bkl", "Berik" }, { "bkm", "Kom (Cameroon)" }, { "bkn", "Bukitan" }, { "bko", "Kwa'" }, { "bkp", "Boko (Democratic Republic of Congo)" }, { "bkq", "Bakairí" }, { "bkr", "Bakumpai" }, { "bks", "Northern Sorsoganon" }, { "bkt", "Boloki" }, { "bku", "Buhid" }, { "bkv", "Bekwarra" }, { "bkw", "Bekwel" }, { "bkx", "Baikeno" }, { "bky", "Bokyi" }, { "bkz", "Bungku" }, { "bla", "Siksika" }, { "blb", "Bilua" }, { "blc", "Bella Coola" }, { "bld", "Bolango" }, { "ble", "Balanta-Kentohe" }, { "blf", "Buol" }, { "blg", "Balau" }, { "blh", "Kuwaa" }, { "bli", "Bolia" }, { "blj", "Bolongan" }, { "blk", "Pa'o Karen" }, { "bll", "Biloxi" }, { "blm", "Beli (Sudan)" }, { "bln", "Southern Catanduanes Bikol" }, { "blo", "Anii" }, { "blp", "Blablanga" }, { "blq", "Baluan-Pam" }, { "blr", "Blang" }, { "bls", "Balaesang" }, { "blt", "Tai Dam" }, { "blv", "Bolo" }, { "blw", "Balangao" }, { "blx", "Mag-Indi Ayta" }, { "bly", "Notre" }, { "blz", "Balantak" }, { "bma", "Lame" }, { "bmb", "Bembe" }, { "bmc", "Biem" }, { "bmd", "Baga Manduri" }, { "bme", "Limassa" }, { "bmf", "Bom" }, { "bmg", "Bamwe" }, { "bmh", "Kein" }, { "bmi", "Bagirmi" }, { "bmj", "Bote-Majhi" }, { "bmk", "Ghayavi" }, { "bml", "Bomboli" }, { "bmm", "Northern Betsimisaraka Malagasy" }, { "bmn", "Bina (Papua New Guinea)" }, { "bmo", "Bambalang" }, { "bmp", "Bulgebi" }, { "bmq", "Bomu" }, { "bmr", "Muinane" }, { "bms", "Bilma Kanuri" }, { "bmt", "Biao Mon" }, { "bmu", "Somba-Siawari" }, { "bmv", "Bum" }, { "bmw", "Bomwali" }, { "bmx", "Baimak" }, { "bmy", "Bemba (Democratic Republic of Congo)" }, { "bmz", "Baramu" }, { "bna", "Bonerate" }, { "bnb", "Bookan" }, { "bnc", "Bontok" }, { "bnd", "Banda (Indonesia)" }, { "bne", "Bintauna" }, { "bnf", "Masiwang" }, { "bng", "Benga" }, { "bni", "Bangi" }, { "bnj", "Eastern Tawbuid" }, { "bnk", "Bierebo" }, { "bnl", "Boon" }, { "bnm", "Batanga" }, { "bnn", "Bunun" }, { "bno", "Bantoanon" }, { "bnp", "Bola" }, { "bnq", "Bantik" }, { "bnr", "Butmas-Tur" }, { "bns", "Bundeli" }, { "bnu", "Bentong" }, { "bnv", "Bonerif" }, { "bnw", "Bisis" }, { "bnx", "Bangubangu" }, { "bny", "Bintulu" }, { "bnz", "Beezen" }, { "boa", "Bora" }, { "bob", "Aweer" }, { "bod", "Tibetan" }, { "boe", "Mundabli" }, { "bof", "Bolon" }, { "bog", "Bamako Sign Language" }, { "boh", "Boma" }, { "boi", "Barbareño" }, { "boj", "Anjam" }, { "bok", "Bonjo" }, { "bol", "Bole" }, { "bom", "Berom" }, { "bon", "Bine" }, { "boo", "Tiemacèwè Bozo" }, { "bop", "Bonkiman" }, { "boq", "Bogaya" }, { "bor", "Borôro" }, { "bos", "Bosnian" }, { "bot", "Bongo" }, { "bou", "Bondei" }, { "bov", "Tuwuli" }, { "bow", "Rema" }, { "box", "Buamu" }, { "boy", "Bodo (Central African Republic)" }, { "boz", "Tiéyaxo Bozo" }, { "bpa", "Daakaka" }, { "bpb", "Barbacoas" }, { "bpd", "Banda-Banda" }, { "bpg", "Bonggo" }, { "bph", "Botlikh" }, { "bpi", "Bagupi" }, { "bpj", "Binji" }, { "bpk", "Orowe" }, { "bpl", "Broome Pearling Lugger Pidgin" }, { "bpm", "Biyom" }, { "bpn", "Dzao Min" }, { "bpo", "Anasi" }, { "bpp", "Kaure" }, { "bpq", "Banda Malay" }, { "bpr", "Koronadal Blaan" }, { "bps", "Sarangani Blaan" }, { "bpt", "Barrow Point" }, { "bpu", "Bongu" }, { "bpv", "Bian Marind" }, { "bpw", "Bo (Papua New Guinea)" }, { "bpx", "Palya Bareli" }, { "bpy", "Bishnupriya" }, { "bpz", "Bilba" }, { "bqa", "Tchumbuli" }, { "bqb", "Bagusa" }, { "bqc", "Boko (Benin)" }, { "bqd", "Bung" }, { "bqf", "Baga Kaloum" }, { "bqg", "Bago-Kusuntu" }, { "bqh", "Baima" }, { "bqi", "Bakhtiari" }, { "bqj", "Bandial" }, { "bqk", "Banda-Mbrès" }, { "bql", "Bilakura" }, { "bqm", "Wumboko" }, { "bqn", "Bulgarian Sign Language" }, { "bqo", "Balo" }, { "bqp", "Busa" }, { "bqq", "Biritai" }, { "bqr", "Burusu" }, { "bqs", "Bosngun" }, { "bqt", "Bamukumbit" }, { "bqu", "Boguru" }, { "bqv", "Koro Wachi" }, { "bqw", "Buru (Nigeria)" }, { "bqx", "Baangi" }, { "bqy", "Bengkala Sign Language" }, { "bqz", "Bakaka" }, { "bra", "Braj" }, { "brb", "Lave" }, { "brc", "Berbice Creole Dutch" }, { "brd", "Baraamu" }, { "bre", "Breton" }, { "brf", "Bera" }, { "brg", "Baure" }, { "brh", "Brahui" }, { "bri", "Mokpwe" }, { "brj", "Bieria" }, { "brk", "Birked" }, { "brl", "Birwa" }, { "brm", "Barambu" }, { "brn", "Boruca" }, { "bro", "Brokkat" }, { "brp", "Barapasi" }, { "brq", "Breri" }, { "brr", "Birao" }, { "brs", "Baras" }, { "brt", "Bitare" }, { "bru", "Eastern Bru" }, { "brv", "Western Bru" }, { "brw", "Bellari" }, { "brx", "Bodo (India)" }, { "bry", "Burui" }, { "brz", "Bilbil" }, { "bsa", "Abinomn" }, { "bsb", "Brunei Bisaya" }, { "bsc", "Bassari" }, { "bse", "Wushi" }, { "bsf", "Bauchi" }, { "bsg", "Bashkardi" }, { "bsh", "Kati" }, { "bsi", "Bassossi" }, { "bsj", "Bangwinji" }, { "bsk", "Burushaski" }, { "bsl", "Basa-Gumna" }, { "bsm", "Busami" }, { "bsn", "Barasana-Eduria" }, { "bso", "Buso" }, { "bsp", "Baga Sitemu" }, { "bsq", "Bassa" }, { "bsr", "Bassa-Kontagora" }, { "bss", "Akoose" }, { "bst", "Basketo" }, { "bsu", "Bahonsuai" }, { "bsv", "Baga Sobané" }, { "bsw", "Baiso" }, { "bsx", "Yangkam" }, { "bsy", "Sabah Bisaya" }, { "bta", "Bata" }, { "btc", "Bati (Cameroon)" }, { "btd", "Batak Dairi" }, { "bte", "Gamo-Ningi" }, { "btf", "Birgit" }, { "btg", "Gagnoa Bété" }, { "bth", "Biatah Bidayuh" }, { "bti", "Burate" }, { "btj", "Bacanese Malay" }, { "btl", "Bhatola" }, { "btm", "Batak Mandailing" }, { "btn", "Ratagnon" }, { "bto", "Rinconada Bikol" }, { "btp", "Budibud" }, { "btq", "Batek" }, { "btr", "Baetora" }, { "bts", "Batak Simalungun" }, { "btt", "Bete-Bendi" }, { "btu", "Batu" }, { "btv", "Bateri" }, { "btw", "Butuanon" }, { "btx", "Batak Karo" }, { "bty", "Bobot" }, { "btz", "Batak Alas-Kluet" }, { "bua", "Buriat" }, { "bub", "Bua" }, { "buc", "Bushi" }, { "bud", "Ntcham" }, { "bue", "Beothuk" }, { "buf", "Bushoong" }, { "bug", "Buginese" }, { "buh", "Younuo Bunu" }, { "bui", "Bongili" }, { "buj", "Basa-Gurmana" }, { "buk", "Bugawac" }, { "bul", "Bulgarian" }, { "bum", "Bulu (Cameroon)" }, { "bun", "Sherbro" }, { "buo", "Terei" }, { "bup", "Busoa" }, { "buq", "Brem" }, { "bus", "Bokobaru" }, { "but", "Bungain" }, { "buu", "Budu" }, { "buv", "Bun" }, { "buw", "Bubi" }, { "bux", "Boghom" }, { "buy", "Bullom So" }, { "buz", "Bukwen" }, { "bva", "Barein" }, { "bvb", "Bube" }, { "bvc", "Baelelea" }, { "bvd", "Baeggu" }, { "bve", "Berau Malay" }, { "bvf", "Boor" }, { "bvg", "Bonkeng" }, { "bvh", "Bure" }, { "bvi", "Belanda Viri" }, { "bvj", "Baan" }, { "bvk", "Bukat" }, { "bvl", "Bolivian Sign Language" }, { "bvm", "Bamunka" }, { "bvn", "Buna" }, { "bvo", "Bolgo" }, { "bvp", "Bumang" }, { "bvq", "Birri" }, { "bvr", "Burarra" }, { "bvt", "Bati (Indonesia)" }, { "bvu", "Bukit Malay" }, { "bvv", "Baniva" }, { "bvw", "Boga" }, { "bvx", "Dibole" }, { "bvy", "Baybayanon" }, { "bvz", "Bauzi" }, { "bwa", "Bwatoo" }, { "bwb", "Namosi-Naitasiri-Serua" }, { "bwc", "Bwile" }, { "bwd", "Bwaidoka" }, { "bwe", "Bwe Karen" }, { "bwf", "Boselewa" }, { "bwg", "Barwe" }, { "bwh", "Bishuo" }, { "bwi", "Baniwa" }, { "bwj", "Láá Láá Bwamu" }, { "bwk", "Bauwaki" }, { "bwl", "Bwela" }, { "bwm", "Biwat" }, { "bwn", "Wunai Bunu" }, { "bwo", "Boro (Ethiopia)" }, { "bwp", "Mandobo Bawah" }, { "bwq", "Southern Bobo Madaré" }, { "bwr", "Bura-Pabir" }, { "bws", "Bomboma" }, { "bwt", "Bafaw-Balong" }, { "bwu", "Buli (Ghana)" }, { "bww", "Bwa" }, { "bwx", "Bu-Nao Bunu" }, { "bwy", "Cwi Bwamu" }, { "bwz", "Bwisi" }, { "bxa", "Tairaha" }, { "bxb", "Belanda Bor" }, { "bxc", "Molengue" }, { "bxd", "Pela" }, { "bxe", "Birale" }, { "bxf", "Bilur" }, { "bxg", "Bangala" }, { "bxh", "Buhutu" }, { "bxi", "Pirlatapa" }, { "bxj", "Bayungu" }, { "bxk", "Bukusu" }, { "bxl", "Jalkunan" }, { "bxm", "Mongolia Buriat" }, { "bxn", "Burduna" }, { "bxo", "Barikanchi" }, { "bxp", "Bebil" }, { "bxq", "Beele" }, { "bxr", "Russia Buriat" }, { "bxs", "Busam" }, { "bxu", "China Buriat" }, { "bxv", "Berakou" }, { "bxw", "Bankagooma" }, { "bxx", "Borna (Democratic Republic of Congo)" }, { "bxz", "Binahari" }, { "bya", "Batak" }, { "byb", "Bikya" }, { "byc", "Ubaghara" }, { "byd", "Benyadu'" }, { "bye", "Pouye" }, { "byf", "Bete" }, { "byg", "Baygo" }, { "byh", "Bhujel" }, { "byi", "Buyu" }, { "byj", "Bina (Nigeria)" }, { "byk", "Biao" }, { "byl", "Bayono" }, { "bym", "Bidyara" }, { "byn", "Bilin" }, { "byo", "Biyo" }, { "byp", "Bumaji" }, { "byq", "Basay" }, { "byr", "Baruya" }, { "bys", "Burak" }, { "byt", "Berti" }, { "byv", "Medumba" }, { "byw", "Belhariya" }, { "byx", "Qaqet" }, { "byy", "Buya" }, { "byz", "Banaro" }, { "bza", "Bandi" }, { "bzb", "Andio" }, { "bzc", "Southern Betsimisaraka Malagasy" }, { "bzd", "Bribri" }, { "bze", "Jenaama Bozo" }, { "bzf", "Boikin" }, { "bzg", "Babuza" }, { "bzh", "Mapos Buang" }, { "bzi", "Bisu" }, { "bzj", "Belize Kriol English" }, { "bzk", "Nicaragua Creole English" }, { "bzl", "Boano (Sulawesi)" }, { "bzm", "Bolondo" }, { "bzn", "Boano (Maluku)" }, { "bzo", "Bozaba" }, { "bzp", "Kemberano" }, { "bzq", "Buli (Indonesia)" }, { "bzr", "Biri" }, { "bzs", "Brazilian Sign Language" }, { "bzt", "Brithenig" }, { "bzu", "Burmeso" }, { "bzv", "Naami" }, { "bzw", "Basa (Nigeria)" }, { "bzx", "Kɛlɛngaxo Bozo" }, { "bzy", "Obanliku" }, { "bzz", "Evant" }, { "caa", "Chortí" }, { "cab", "Garifuna" }, { "cac", "Chuj" }, { "cad", "Caddo" }, { "cae", "Lehar" }, { "caf", "Southern Carrier" }, { "cag", "Nivaclé" }, { "cah", "Cahuarano" }, { "caj", "Chané" }, { "cak", "Kaqchikel" }, { "cal", "Carolinian" }, { "cam", "Cemuhî" }, { "can", "Chambri" }, { "cao", "Chácobo" }, { "cap", "Chipaya" }, { "caq", "Car Nicobarese" }, { "car", "Galibi Carib" }, { "cas", "Tsimané" }, { "cat", "Catalan" }, { "cav", "Cavineña" }, { "caw", "Callawalla" }, { "cax", "Chiquitano" }, { "cay", "Cayuga" }, { "caz", "Canichana" }, { "cbb", "Cabiyarí" }, { "cbc", "Carapana" }, { "cbd", "Carijona" }, { "cbe", "Chipiajes" }, { "cbg", "Chimila" }, { "cbh", "Cagua" }, { "cbi", "Chachi" }, { "cbj", "Ede Cabe" }, { "cbk", "Chavacano" }, { "cbl", "Bualkhaw Chin" }, { "cbn", "Nyahkur" }, { "cbo", "Izora" }, { "cbr", "Cashibo-Cacataibo" }, { "cbs", "Cashinahua" }, { "cbt", "Chayahuita" }, { "cbu", "Candoshi-Shapra" }, { "cbv", "Cacua" }, { "cbw", "Kinabalian" }, { "cby", "Carabayo" }, { "cca", "Cauca" }, { "ccc", "Chamicuro" }, { "ccd", "Cafundo Creole" }, { "cce", "Chopi" }, { "ccg", "Samba Daka" }, { "cch", "Atsam" }, { "ccj", "Kasanga" }, { "ccl", "Cutchi-Swahili" }, { "ccm", "Malaccan Creole Malay" }, { "cco", "Comaltepec Chinantec" }, { "ccp", "Chakma" }, { "ccr", "Cacaopera" }, { "cda", "Choni" }, { "cde", "Chenchu" }, { "cdf", "Chiru" }, { "cdg", "Chamari" }, { "cdh", "Chambeali" }, { "cdi", "Chodri" }, { "cdj", "Churahi" }, { "cdm", "Chepang" }, { "cdn", "Chaudangsi" }, { "cdo", "Min Dong Chinese" }, { "cdr", "Cinda-Regi-Tiyal" }, { "cds", "Chadian Sign Language" }, { "cdy", "Chadong" }, { "cdz", "Koda" }, { "cea", "Lower Chehalis" }, { "ceb", "Cebuano" }, { "ceg", "Chamacoco" }, { "cek", "Eastern Khumi Chin" }, { "cen", "Cen" }, { "ces", "Czech" }, { "cet", "Centúúm" }, { "cfa", "Dijim-Bwilim" }, { "cfd", "Cara" }, { "cfg", "Como Karim" }, { "cfm", "Falam Chin" }, { "cga", "Changriwa" }, { "cgc", "Kagayanen" }, { "cgg", "Chiga" }, { "cgk", "Chocangacakha" }, { "cha", "Chamorro" }, { "chb", "Chibcha" }, { "chc", "Catawba" }, { "chd", "Highland Oaxaca Chontal" }, { "che", "Chechen" }, { "chf", "Tabasco Chontal" }, { "chg", "Chagatai" }, { "chh", "Chinook" }, { "chj", "Ojitlán Chinantec" }, { "chk", "Chuukese" }, { "chl", "Cahuilla" }, { "chm", "Mari (Russia)" }, { "chn", "Chinook jargon" }, { "cho", "Choctaw" }, { "chp", "Chipewyan" }, { "chq", "Quiotepec Chinantec" }, { "chr", "Cherokee" }, { "cht", "Cholón" }, { "chu", "Church Slavic" }, { "chv", "Chuvash" }, { "chw", "Chuwabu" }, { "chx", "Chantyal" }, { "chy", "Cheyenne" }, { "chz", "Ozumacín Chinantec" }, { "cia", "Cia-Cia" }, { "cib", "Ci Gbe" }, { "cic", "Chickasaw" }, { "cid", "Chimariko" }, { "cie", "Cineni" }, { "cih", "Chinali" }, { "cik", "Chitkuli Kinnauri" }, { "cim", "Cimbrian" }, { "cin", "Cinta Larga" }, { "cip", "Chiapanec" }, { "cir", "Tiri" }, { "ciw", "Chippewa" }, { "ciy", "Chaima" }, { "cja", "Western Cham" }, { "cje", "Chru" }, { "cjh", "Upper Chehalis" }, { "cji", "Chamalal" }, { "cjk", "Chokwe" }, { "cjm", "Eastern Cham" }, { "cjn", "Chenapian" }, { "cjo", "Ashéninka Pajonal" }, { "cjp", "Cabécar" }, { "cjs", "Shor" }, { "cjv", "Chuave" }, { "cjy", "Jinyu Chinese" }, { "ckb", "Central Kurdish" }, { "ckh", "Chak" }, { "ckl", "Cibak" }, { "ckn", "Kaang Chin" }, { "cko", "Anufo" }, { "ckq", "Kajakse" }, { "ckr", "Kairak" }, { "cks", "Tayo" }, { "ckt", "Chukot" }, { "cku", "Koasati" }, { "ckv", "Kavalan" }, { "ckx", "Caka" }, { "cky", "Cakfem-Mushere" }, { "ckz", "Cakchiquel-Quiché Mixed Language" }, { "cla", "Ron" }, { "clc", "Chilcotin" }, { "cld", "Chaldean Neo-Aramaic" }, { "cle", "Lealao Chinantec" }, { "clh", "Chilisso" }, { "cli", "Chakali" }, { "clj", "Laitu Chin" }, { "clk", "Idu-Mishmi" }, { "cll", "Chala" }, { "clm", "Clallam" }, { "clo", "Lowland Oaxaca Chontal" }, { "clt", "Lautu Chin" }, { "clu", "Caluyanun" }, { "clw", "Chulym" }, { "cly", "Eastern Highland Chatino" }, { "cma", "Maa" }, { "cme", "Cerma" }, { "cmg", "Classical Mongolian" }, { "cmi", "Emberá-Chamí" }, { "cml", "Campalagian" }, { "cmm", "Michigamea" }, { "cmn", "Mandarin Chinese" }, { "cmo", "Central Mnong" }, { "cmr", "Mro-Khimi Chin" }, { "cms", "Messapic" }, { "cmt", "Camtho" }, { "cna", "Changthang" }, { "cnb", "Chinbon Chin" }, { "cnc", "Côông" }, { "cng", "Northern Qiang" }, { "cnh", "Haka Chin" }, { "cni", "Asháninka" }, { "cnk", "Khumi Chin" }, { "cnl", "Lalana Chinantec" }, { "cno", "Con" }, { "cns", "Central Asmat" }, { "cnt", "Tepetotutla Chinantec" }, { "cnu", "Chenoua" }, { "cnw", "Ngawn Chin" }, { "cnx", "Middle Cornish" }, { "coa", "Cocos Islands Malay" }, { "cob", "Chicomuceltec" }, { "coc", "Cocopa" }, { "cod", "Cocama-Cocamilla" }, { "coe", "Koreguaje" }, { "cof", "Colorado" }, { "cog", "Chong" }, { "coh", "Chonyi-Dzihana-Kauma" }, { "coj", "Cochimi" }, { "cok", "Santa Teresa Cora" }, { "col", "Columbia-Wenatchi" }, { "com", "Comanche" }, { "con", "Cofán" }, { "coo", "Comox" }, { "cop", "Coptic" }, { "coq", "Coquille" }, { "cor", "Cornish" }, { "cos", "Corsican" }, { "cot", "Caquinte" }, { "cou", "Wamey" }, { "cov", "Cao Miao" }, { "cow", "Cowlitz" }, { "cox", "Nanti" }, { "coy", "Coyaima" }, { "coz", "Chochotec" }, { "cpa", "Palantla Chinantec" }, { "cpb", "Ucayali-Yurúa Ashéninka" }, { "cpc", "Ajyíninka Apurucayali" }, { "cpg", "Cappadocian Greek" }, { "cpi", "Chinese Pidgin English" }, { "cpn", "Cherepon" }, { "cpo", "Kpeego" }, { "cps", "Capiznon" }, { "cpu", "Pichis Ashéninka" }, { "cpx", "Pu-Xian Chinese" }, { "cpy", "South Ucayali Ashéninka" }, { "cqd", "Chuanqiandian Cluster Miao" }, { "cqu", "Chilean Quechua" }, { "cra", "Chara" }, { "crb", "Island Carib" }, { "crc", "Lonwolwol" }, { "crd", "Coeur d'Alene" }, { "cre", "Cree" }, { "crf", "Caramanta" }, { "crg", "Michif" }, { "crh", "Crimean Tatar" }, { "cri", "Sãotomense" }, { "crj", "Southern East Cree" }, { "crk", "Plains Cree" }, { "crl", "Northern East Cree" }, { "crm", "Moose Cree" }, { "crn", "El Nayar Cora" }, { "cro", "Crow" }, { "crq", "Iyo'wujwa Chorote" }, { "crr", "Carolina Algonquian" }, { "crs", "Seselwa Creole French" }, { "crt", "Iyojwa'ja Chorote" }, { "crv", "Chaura" }, { "crw", "Chrau" }, { "crx", "Carrier" }, { "cry", "Cori" }, { "crz", "Cruzeño" }, { "csa", "Chiltepec Chinantec" }, { "csb", "Kashubian" }, { "csc", "Catalan Sign Language" }, { "csd", "Chiangmai Sign Language" }, { "cse", "Czech Sign Language" }, { "csf", "Cuba Sign Language" }, { "csg", "Chilean Sign Language" }, { "csh", "Asho Chin" }, { "csi", "Coast Miwok" }, { "csj", "Songlai Chin" }, { "csk", "Jola-Kasa" }, { "csl", "Chinese Sign Language" }, { "csm", "Central Sierra Miwok" }, { "csn", "Colombian Sign Language" }, { "cso", "Sochiapam Chinantec" }, { "csq", "Croatia Sign Language" }, { "csr", "Costa Rican Sign Language" }, { "css", "Southern Ohlone" }, { "cst", "Northern Ohlone" }, { "csv", "Sumtu Chin" }, { "csw", "Swampy Cree" }, { "csy", "Siyin Chin" }, { "csz", "Coos" }, { "cta", "Tataltepec Chatino" }, { "ctc", "Chetco" }, { "ctd", "Tedim Chin" }, { "cte", "Tepinapa Chinantec" }, { "ctg", "Chittagonian" }, { "cth", "Thaiphum Chin" }, { "ctl", "Tlacoatzintepec Chinantec" }, { "ctm", "Chitimacha" }, { "ctn", "Chhintange" }, { "cto", "Emberá-Catío" }, { "ctp", "Western Highland Chatino" }, { "cts", "Northern Catanduanes Bikol" }, { "ctt", "Wayanad Chetti" }, { "ctu", "Chol" }, { "ctz", "Zacatepec Chatino" }, { "cua", "Cua" }, { "cub", "Cubeo" }, { "cuc", "Usila Chinantec" }, { "cug", "Cung" }, { "cuh", "Chuka" }, { "cui", "Cuiba" }, { "cuj", "Mashco Piro" }, { "cuk", "San Blas Kuna" }, { "cul", "Culina" }, { "cum", "Cumeral" }, { "cuo", "Cumanagoto" }, { "cup", "Cupeño" }, { "cuq", "Cun" }, { "cur", "Chhulung" }, { "cut", "Teutila Cuicatec" }, { "cuu", "Tai Ya" }, { "cuv", "Cuvok" }, { "cuw", "Chukwa" }, { "cux", "Tepeuxila Cuicatec" }, { "cvg", "Chug" }, { "cvn", "Valle Nacional Chinantec" }, { "cwa", "Kabwa" }, { "cwb", "Maindo" }, { "cwd", "Woods Cree" }, { "cwe", "Kwere" }, { "cwg", "Chewong" }, { "cwt", "Kuwaataay" }, { "cya", "Nopala Chatino" }, { "cyb", "Cayubaba" }, { "cym", "Welsh" }, { "cyo", "Cuyonon" }, { "czh", "Huizhou Chinese" }, { "czk", "Knaanic" }, { "czn", "Zenzontepec Chatino" }, { "czo", "Min Zhong Chinese" }, { "czt", "Zotung Chin" }, { "daa", "Dangaléat" }, { "dac", "Dambi" }, { "dad", "Marik" }, { "dae", "Duupa" }, { "dag", "Dagbani" }, { "dah", "Gwahatike" }, { "dai", "Day" }, { "daj", "Dar Fur Daju" }, { "dak", "Dakota" }, { "dal", "Dahalo" }, { "dam", "Damakawa" }, { "dan", "Danish" }, { "dao", "Daai Chin" }, { "daq", "Dandami Maria" }, { "dar", "Dargwa" }, { "das", "Daho-Doo" }, { "dau", "Dar Sila Daju" }, { "dav", "Taita" }, { "daw", "Davawenyo" }, { "dax", "Dayi" }, { "daz", "Dao" }, { "dba", "Bangime" }, { "dbb", "Deno" }, { "dbd", "Dadiya" }, { "dbe", "Dabe" }, { "dbf", "Edopi" }, { "dbg", "Dogul Dom Dogon" }, { "dbi", "Doka" }, { "dbj", "Ida'an" }, { "dbl", "Dyirbal" }, { "dbm", "Duguri" }, { "dbn", "Duriankere" }, { "dbo", "Dulbu" }, { "dbp", "Duwai" }, { "dbq", "Daba" }, { "dbr", "Dabarre" }, { "dbt", "Ben Tey Dogon" }, { "dbu", "Bondum Dom Dogon" }, { "dbv", "Dungu" }, { "dbw", "Bankan Tey Dogon" }, { "dby", "Dibiyaso" }, { "dcc", "Deccan" }, { "dcr", "Negerhollands" }, { "dda", "Dadi Dadi" }, { "ddd", "Dongotono" }, { "dde", "Doondo" }, { "ddg", "Fataluku" }, { "ddi", "West Goodenough" }, { "ddj", "Jaru" }, { "ddn", "Dendi (Benin)" }, { "ddo", "Dido" }, { "ddr", "Dhudhuroa" }, { "dds", "Donno So Dogon" }, { "ddw", "Dawera-Daweloor" }, { "dec", "Dagik" }, { "ded", "Dedua" }, { "dee", "Dewoin" }, { "def", "Dezfuli" }, { "deg", "Degema" }, { "deh", "Dehwari" }, { "dei", "Demisa" }, { "dek", "Dek" }, { "del", "Delaware" }, { "dem", "Dem" }, { "den", "Slave (Athapascan)" }, { "dep", "Pidgin Delaware" }, { "deq", "Dendi (Central African Republic)" }, { "der", "Deori" }, { "des", "Desano" }, { "deu", "German" }, { "dev", "Domung" }, { "dez", "Dengese" }, { "dga", "Southern Dagaare" }, { "dgb", "Bunoge Dogon" }, { "dgc", "Casiguran Dumagat Agta" }, { "dgd", "Dagaari Dioula" }, { "dge", "Degenan" }, { "dgg", "Doga" }, { "dgh", "Dghwede" }, { "dgi", "Northern Dagara" }, { "dgk", "Dagba" }, { "dgl", "Andaandi" }, { "dgn", "Dagoman" }, { "dgo", "Dogri (individual language)" }, { "dgr", "Dogrib" }, { "dgs", "Dogoso" }, { "dgt", "Ndra'ngith" }, { "dgu", "Degaru" }, { "dgw", "Daungwurrung" }, { "dgx", "Doghoro" }, { "dgz", "Daga" }, { "dhd", "Dhundari" }, { "dhg", "Djangu" }, { "dhi", "Dhimal" }, { "dhl", "Dhalandji" }, { "dhm", "Zemba" }, { "dhn", "Dhanki" }, { "dho", "Dhodia" }, { "dhr", "Dhargari" }, { "dhs", "Dhaiso" }, { "dhu", "Dhurga" }, { "dhv", "Dehu" }, { "dhw", "Dhanwar (Nepal)" }, { "dhx", "Dhungaloo" }, { "dia", "Dia" }, { "dib", "South Central Dinka" }, { "dic", "Lakota Dida" }, { "did", "Didinga" }, { "dif", "Dieri" }, { "dig", "Digo" }, { "dih", "Kumiai" }, { "dii", "Dimbong" }, { "dij", "Dai" }, { "dik", "Southwestern Dinka" }, { "dil", "Dilling" }, { "dim", "Dime" }, { "din", "Dinka" }, { "dio", "Dibo" }, { "dip", "Northeastern Dinka" }, { "diq", "Dimli (individual language)" }, { "dir", "Dirim" }, { "dis", "Dimasa" }, { "dit", "Dirari" }, { "diu", "Diriku" }, { "div", "Dhivehi" }, { "diw", "Northwestern Dinka" }, { "dix", "Dixon Reef" }, { "diy", "Diuwe" }, { "diz", "Ding" }, { "dja", "Djadjawurrung" }, { "djb", "Djinba" }, { "djc", "Dar Daju Daju" }, { "djd", "Djamindjung" }, { "dje", "Zarma" }, { "djf", "Djangun" }, { "dji", "Djinang" }, { "djj", "Djeebbana" }, { "djk", "Eastern Maroon Creole" }, { "djm", "Jamsay Dogon" }, { "djn", "Djauan" }, { "djo", "Jangkang" }, { "djr", "Djambarrpuyngu" }, { "dju", "Kapriman" }, { "djw", "Djawi" }, { "dka", "Dakpakha" }, { "dkk", "Dakka" }, { "dkr", "Kuijau" }, { "dks", "Southeastern Dinka" }, { "dkx", "Mazagway" }, { "dlg", "Dolgan" }, { "dlk", "Dahalik" }, { "dlm", "Dalmatian" }, { "dln", "Darlong" }, { "dma", "Duma" }, { "dmb", "Mombo Dogon" }, { "dmc", "Gavak" }, { "dmd", "Madhi Madhi" }, { "dme", "Dugwor" }, { "dmg", "Upper Kinabatangan" }, { "dmk", "Domaaki" }, { "dml", "Dameli" }, { "dmm", "Dama" }, { "dmo", "Kemedzung" }, { "dmr", "East Damar" }, { "dms", "Dampelas" }, { "dmu", "Dubu" }, { "dmv", "Dumpas" }, { "dmw", "Mudburra" }, { "dmx", "Dema" }, { "dmy", "Demta" }, { "dna", "Upper Grand Valley Dani" }, { "dnd", "Daonda" }, { "dne", "Ndendeule" }, { "dng", "Dungan" }, { "dni", "Lower Grand Valley Dani" }, { "dnj", "Dan" }, { "dnk", "Dengka" }, { "dnn", "Dzùùngoo" }, { "dnr", "Danaru" }, { "dnt", "Mid Grand Valley Dani" }, { "dnu", "Danau" }, { "dnv", "Danu" }, { "dnw", "Western Dani" }, { "dny", "Dení" }, { "doa", "Dom" }, { "dob", "Dobu" }, { "doc", "Northern Dong" }, { "doe", "Doe" }, { "dof", "Domu" }, { "doh", "Dong" }, { "doi", "Dogri (macrolanguage)" }, { "dok", "Dondo" }, { "dol", "Doso" }, { "don", "Toura (Papua New Guinea)" }, { "doo", "Dongo" }, { "dop", "Lukpa" }, { "doq", "Dominican Sign Language" }, { "dor", "Dori'o" }, { "dos", "Dogosé" }, { "dot", "Dass" }, { "dov", "Dombe" }, { "dow", "Doyayo" }, { "dox", "Bussa" }, { "doy", "Dompo" }, { "doz", "Dorze" }, { "dpp", "Papar" }, { "drb", "Dair" }, { "drc", "Minderico" }, { "drd", "Darmiya" }, { "dre", "Dolpo" }, { "drg", "Rungus" }, { "dri", "C'lela" }, { "drl", "Paakantyi" }, { "drn", "West Damar" }, { "dro", "Daro-Matu Melanau" }, { "drq", "Dura" }, { "drr", "Dororo" }, { "drs", "Gedeo" }, { "drt", "Drents" }, { "dru", "Rukai" }, { "dry", "Darai" }, { "dsb", "Lower Sorbian" }, { "dse", "Dutch Sign Language" }, { "dsh", "Daasanach" }, { "dsi", "Disa" }, { "dsl", "Danish Sign Language" }, { "dsn", "Dusner" }, { "dso", "Desiya" }, { "dsq", "Tadaksahak" }, { "dta", "Daur" }, { "dtb", "Labuk-Kinabatangan Kadazan" }, { "dtd", "Ditidaht" }, { "dth", "Adithinngithigh" }, { "dti", "Ana Tinga Dogon" }, { "dtk", "Tene Kan Dogon" }, { "dtm", "Tomo Kan Dogon" }, { "dto", "Tommo So Dogon" }, { "dtp", "Central Dusun" }, { "dtr", "Lotud" }, { "dts", "Toro So Dogon" }, { "dtt", "Toro Tegu Dogon" }, { "dtu", "Tebul Ure Dogon" }, { "dty", "Dotyali" }, { "dua", "Duala" }, { "dub", "Dubli" }, { "duc", "Duna" }, { "dud", "Hun-Saare" }, { "due", "Umiray Dumaget Agta" }, { "duf", "Dumbea" }, { "dug", "Duruma" }, { "duh", "Dungra Bhil" }, { "dui", "Dumun" }, { "duj", "Dhuwal" }, { "duk", "Uyajitaya" }, { "dul", "Alabat Island Agta" }, { "dum", "Middle Dutch (ca. 1050-1350)" }, { "dun", "Dusun Deyah" }, { "duo", "Dupaninan Agta" }, { "dup", "Duano" }, { "duq", "Dusun Malang" }, { "dur", "Dii" }, { "dus", "Dumi" }, { "duu", "Drung" }, { "duv", "Duvle" }, { "duw", "Dusun Witu" }, { "dux", "Duungooma" }, { "duy", "Dicamay Agta" }, { "duz", "Duli" }, { "dva", "Duau" }, { "dwa", "Diri" }, { "dwr", "Dawro" }, { "dws", "Dutton World Speedwords" }, { "dww", "Dawawa" }, { "dya", "Dyan" }, { "dyb", "Dyaberdyaber" }, { "dyd", "Dyugun" }, { "dyg", "Villa Viciosa Agta" }, { "dyi", "Djimini Senoufo" }, { "dym", "Yanda Dom Dogon" }, { "dyn", "Dyangadi" }, { "dyo", "Jola-Fonyi" }, { "dyu", "Dyula" }, { "dyy", "Dyaabugay" }, { "dza", "Tunzu" }, { "dzd", "Daza" }, { "dze", "Djiwarli" }, { "dzg", "Dazaga" }, { "dzl", "Dzalakha" }, { "dzn", "Dzando" }, { "dzo", "Dzongkha" }, { "eaa", "Karenggapa" }, { "ebg", "Ebughu" }, { "ebk", "Eastern Bontok" }, { "ebo", "Teke-Ebo" }, { "ebr", "Ebrié" }, { "ebu", "Embu" }, { "ecr", "Eteocretan" }, { "ecs", "Ecuadorian Sign Language" }, { "ecy", "Eteocypriot" }, { "eee", "E" }, { "efa", "Efai" }, { "efe", "Efe" }, { "efi", "Efik" }, { "ega", "Ega" }, { "egl", "Emilian" }, { "ego", "Eggon" }, { "egy", "Egyptian (Ancient)" }, { "ehu", "Ehueun" }, { "eip", "Eipomek" }, { "eit", "Eitiep" }, { "eiv", "Askopan" }, { "eja", "Ejamat" }, { "eka", "Ekajuk" }, { "ekc", "Eastern Karnic" }, { "eke", "Ekit" }, { "ekg", "Ekari" }, { "eki", "Eki" }, { "ekk", "Standard Estonian" }, { "ekl", "Kol (Bangladesh)" }, { "ekm", "Elip" }, { "eko", "Koti" }, { "ekp", "Ekpeye" }, { "ekr", "Yace" }, { "eky", "Eastern Kayah" }, { "ele", "Elepi" }, { "elh", "El Hugeirat" }, { "eli", "Nding" }, { "elk", "Elkei" }, { "ell", "Modern Greek (1453-)" }, { "elm", "Eleme" }, { "elo", "El Molo" }, { "elu", "Elu" }, { "elx", "Elamite" }, { "ema", "Emai-Iuleha-Ora" }, { "emb", "Embaloh" }, { "eme", "Emerillon" }, { "emg", "Eastern Meohang" }, { "emi", "Mussau-Emira" }, { "emk", "Eastern Maninkakan" }, { "emm", "Mamulique" }, { "emn", "Eman" }, { "emo", "Emok" }, { "emp", "Northern Emberá" }, { "ems", "Pacific Gulf Yupik" }, { "emu", "Eastern Muria" }, { "emw", "Emplawas" }, { "emx", "Erromintxela" }, { "emy", "Epigraphic Mayan" }, { "ena", "Apali" }, { "enb", "Markweeta" }, { "enc", "En" }, { "end", "Ende" }, { "enf", "Forest Enets" }, { "eng", "English" }, { "enh", "Tundra Enets" }, { "enm", "Middle English (1100-1500)" }, { "enn", "Engenni" }, { "eno", "Enggano" }, { "enq", "Enga" }, { "enr", "Emumu" }, { "enu", "Enu" }, { "env", "Enwan (Edu State)" }, { "enw", "Enwan (Akwa Ibom State)" }, { "eot", "Beti (Côte d'Ivoire)" }, { "epi", "Epie" }, { "epo", "Esperanto" }, { "era", "Eravallan" }, { "erg", "Sie" }, { "erh", "Eruwa" }, { "eri", "Ogea" }, { "erk", "South Efate" }, { "ero", "Horpa" }, { "err", "Erre" }, { "ers", "Ersu" }, { "ert", "Eritai" }, { "erw", "Erokwanas" }, { "ese", "Ese Ejja" }, { "esh", "Eshtehardi" }, { "esi", "North Alaskan Inupiatun" }, { "esk", "Northwest Alaska Inupiatun" }, { "esl", "Egypt Sign Language" }, { "esm", "Esuma" }, { "esn", "Salvadoran Sign Language" }, { "eso", "Estonian Sign Language" }, { "esq", "Esselen" }, { "ess", "Central Siberian Yupik" }, { "est", "Estonian" }, { "esu", "Central Yupik" }, { "etb", "Etebi" }, { "etc", "Etchemin" }, { "eth", "Ethiopian Sign Language" }, { "etn", "Eton (Vanuatu)" }, { "eto", "Eton (Cameroon)" }, { "etr", "Edolo" }, { "ets", "Yekhee" }, { "ett", "Etruscan" }, { "etu", "Ejagham" }, { "etx", "Eten" }, { "etz", "Semimi" }, { "eus", "Basque" }, { "eve", "Even" }, { "evh", "Uvbie" }, { "evn", "Evenki" }, { "ewe", "Ewe" }, { "ewo", "Ewondo" }, { "ext", "Extremaduran" }, { "eya", "Eyak" }, { "eyo", "Keiyo" }, { "eza", "Ezaa" }, { "eze", "Uzekwe" }, { "faa", "Fasu" }, { "fab", "Fa d'Ambu" }, { "fad", "Wagi" }, { "faf", "Fagani" }, { "fag", "Finongan" }, { "fah", "Baissa Fali" }, { "fai", "Faiwol" }, { "faj", "Faita" }, { "fak", "Fang (Cameroon)" }, { "fal", "South Fali" }, { "fam", "Fam" }, { "fan", "Fang (Equatorial Guinea)" }, { "fao", "Faroese" }, { "fap", "Palor" }, { "far", "Fataleka" }, { "fas", "Persian" }, { "fat", "Fanti" }, { "fau", "Fayu" }, { "fax", "Fala" }, { "fay", "Southwestern Fars" }, { "faz", "Northwestern Fars" }, { "fbl", "West Albay Bikol" }, { "fcs", "Quebec Sign Language" }, { "fer", "Feroge" }, { "ffi", "Foia Foia" }, { "ffm", "Maasina Fulfulde" }, { "fgr", "Fongoro" }, { "fia", "Nobiin" }, { "fie", "Fyer" }, { "fij", "Fijian" }, { "fil", "Filipino" }, { "fin", "Finnish" }, { "fip", "Fipa" }, { "fir", "Firan" }, { "fit", "Tornedalen Finnish" }, { "fiw", "Fiwaga" }, { "fkk", "Kirya-Konzəl" }, { "fkv", "Kven Finnish" }, { "fla", "Kalispel-Pend d'Oreille" }, { "flh", "Foau" }, { "fli", "Fali" }, { "fll", "North Fali" }, { "fln", "Flinders Island" }, { "flr", "Fuliiru" }, { "fly", "Tsotsitaal" }, { "fmp", "Fe'fe'" }, { "fmu", "Far Western Muria" }, { "fng", "Fanagalo" }, { "fni", "Fania" }, { "fod", "Foodo" }, { "foi", "Foi" }, { "fom", "Foma" }, { "fon", "Fon" }, { "for", "Fore" }, { "fos", "Siraya" }, { "fpe", "Fernando Po Creole English" }, { "fqs", "Fas" }, { "fra", "French" }, { "frc", "Cajun French" }, { "frd", "Fordata" }, { "frk", "Frankish" }, { "frm", "Middle French (ca. 1400-1600)" }, { "fro", "Old French (842-ca. 1400)" }, { "frp", "Arpitan" }, { "frq", "Forak" }, { "frr", "Northern Frisian" }, { "frs", "Eastern Frisian" }, { "frt", "Fortsenal" }, { "fry", "Western Frisian" }, { "fse", "Finnish Sign Language" }, { "fsl", "French Sign Language" }, { "fss", "Finland-Swedish Sign Language" }, { "fub", "Adamawa Fulfulde" }, { "fuc", "Pulaar" }, { "fud", "East Futuna" }, { "fue", "Borgu Fulfulde" }, { "fuf", "Pular" }, { "fuh", "Western Niger Fulfulde" }, { "fui", "Bagirmi Fulfulde" }, { "fuj", "Ko" }, { "ful", "Fulah" }, { "fum", "Fum" }, { "fun", "Fulniô" }, { "fuq", "Central-Eastern Niger Fulfulde" }, { "fur", "Friulian" }, { "fut", "Futuna-Aniwa" }, { "fuu", "Furu" }, { "fuv", "Nigerian Fulfulde" }, { "fuy", "Fuyug" }, { "fvr", "Fur" }, { "fwa", "Fwâi" }, { "fwe", "Fwe" }, { "gaa", "Ga" }, { "gab", "Gabri" }, { "gac", "Mixed Great Andamanese" }, { "gad", "Gaddang" }, { "gae", "Guarequena" }, { "gaf", "Gende" }, { "gag", "Gagauz" }, { "gah", "Alekano" }, { "gai", "Borei" }, { "gaj", "Gadsup" }, { "gak", "Gamkonora" }, { "gal", "Galolen" }, { "gam", "Kandawo" }, { "gan", "Gan Chinese" }, { "gao", "Gants" }, { "gap", "Gal" }, { "gaq", "Gata'" }, { "gar", "Galeya" }, { "gas", "Adiwasi Garasia" }, { "gat", "Kenati" }, { "gau", "Mudhili Gadaba" }, { "gaw", "Nobonob" }, { "gax", "Borana-Arsi-Guji Oromo" }, { "gay", "Gayo" }, { "gaz", "West Central Oromo" }, { "gba", "Gbaya (Central African Republic)" }, { "gbb", "Kaytetye" }, { "gbd", "Karadjeri" }, { "gbe", "Niksek" }, { "gbf", "Gaikundi" }, { "gbg", "Gbanziri" }, { "gbh", "Defi Gbe" }, { "gbi", "Galela" }, { "gbj", "Bodo Gadaba" }, { "gbk", "Gaddi" }, { "gbl", "Gamit" }, { "gbm", "Garhwali" }, { "gbn", "Mo'da" }, { "gbo", "Northern Grebo" }, { "gbp", "Gbaya-Bossangoa" }, { "gbq", "Gbaya-Bozoum" }, { "gbr", "Gbagyi" }, { "gbs", "Gbesi Gbe" }, { "gbu", "Gagadu" }, { "gbv", "Gbanu" }, { "gbw", "Gabi-Gabi" }, { "gbx", "Eastern Xwla Gbe" }, { "gby", "Gbari" }, { "gbz", "Zoroastrian Dari" }, { "gcc", "Mali" }, { "gcd", "Ganggalida" }, { "gce", "Galice" }, { "gcf", "Guadeloupean Creole French" }, { "gcl", "Grenadian Creole English" }, { "gcn", "Gaina" }, { "gcr", "Guianese Creole French" }, { "gct", "Colonia Tovar German" }, { "gda", "Gade Lohar" }, { "gdb", "Pottangi Ollar Gadaba" }, { "gdc", "Gugu Badhun" }, { "gdd", "Gedaged" }, { "gde", "Gude" }, { "gdf", "Guduf-Gava" }, { "gdg", "Ga'dang" }, { "gdh", "Gadjerawang" }, { "gdi", "Gundi" }, { "gdj", "Gurdjar" }, { "gdk", "Gadang" }, { "gdl", "Dirasha" }, { "gdm", "Laal" }, { "gdn", "Umanakaina" }, { "gdo", "Ghodoberi" }, { "gdq", "Mehri" }, { "gdr", "Wipi" }, { "gds", "Ghandruk Sign Language" }, { "gdt", "Kungardutyi" }, { "gdu", "Gudu" }, { "gdx", "Godwari" }, { "gea", "Geruma" }, { "geb", "Kire" }, { "gec", "Gboloo Grebo" }, { "ged", "Gade" }, { "geg", "Gengle" }, { "geh", "Hutterite German" }, { "gei", "Gebe" }, { "gej", "Gen" }, { "gek", "Yiwom" }, { "gel", "ut-Ma'in" }, { "geq", "Geme" }, { "ges", "Geser-Gorom" }, { "gew", "Gera" }, { "gex", "Garre" }, { "gey", "Enya" }, { "gez", "Geez" }, { "gfk", "Patpatar" }, { "gft", "Gafat" }, { "gfx", "Mangetti Dune !Xung" }, { "gga", "Gao" }, { "ggb", "Gbii" }, { "ggd", "Gugadj" }, { "gge", "Guragone" }, { "ggg", "Gurgula" }, { "ggk", "Kungarakany" }, { "ggl", "Ganglau" }, { "ggm", "Gugu Mini" }, { "ggn", "Eastern Gurung" }, { "ggo", "Southern Gondi" }, { "ggt", "Gitua" }, { "ggu", "Gagu" }, { "ggw", "Gogodala" }, { "gha", "Ghadamès" }, { "ghc", "Hiberno-Scottish Gaelic" }, { "ghe", "Southern Ghale" }, { "ghh", "Northern Ghale" }, { "ghk", "Geko Karen" }, { "ghl", "Ghulfan" }, { "ghn", "Ghanongga" }, { "gho", "Ghomara" }, { "ghr", "Ghera" }, { "ghs", "Guhu-Samane" }, { "ght", "Kuke" }, { "gia", "Kitja" }, { "gib", "Gibanawa" }, { "gic", "Gail" }, { "gid", "Gidar" }, { "gig", "Goaria" }, { "gih", "Githabul" }, { "gil", "Gilbertese" }, { "gim", "Gimi (Eastern Highlands)" }, { "gin", "Hinukh" }, { "gip", "Gimi (West New Britain)" }, { "giq", "Green Gelao" }, { "gir", "Red Gelao" }, { "gis", "North Giziga" }, { "git", "Gitxsan" }, { "giu", "Mulao" }, { "giw", "White Gelao" }, { "gix", "Gilima" }, { "giy", "Giyug" }, { "giz", "South Giziga" }, { "gji", "Geji" }, { "gjk", "Kachi Koli" }, { "gjm", "Gunditjmara" }, { "gjn", "Gonja" }, { "gju", "Gujari" }, { "gka", "Guya" }, { "gke", "Ndai" }, { "gkn", "Gokana" }, { "gko", "Kok-Nar" }, { "gkp", "Guinea Kpelle" }, { "gla", "Scottish Gaelic" }, { "glc", "Bon Gula" }, { "gld", "Nanai" }, { "gle", "Irish" }, { "glg", "Galician" }, { "glh", "Northwest Pashayi" }, { "gli", "Guliguli" }, { "glj", "Gula Iro" }, { "glk", "Gilaki" }, { "gll", "Garlali" }, { "glo", "Galambu" }, { "glr", "Glaro-Twabo" }, { "glu", "Gula (Chad)" }, { "glv", "Manx" }, { "glw", "Glavda" }, { "gly", "Gule" }, { "gma", "Gambera" }, { "gmb", "Gula'alaa" }, { "gmd", "Mághdì" }, { "gmh", "Middle High German (ca. 1050-1500)" }, { "gml", "Middle Low German" }, { "gmm", "Gbaya-Mbodomo" }, { "gmn", "Gimnime" }, { "gmu", "Gumalu" }, { "gmv", "Gamo" }, { "gmx", "Magoma" }, { "gmy", "Mycenaean Greek" }, { "gmz", "Mgbolizhia" }, { "gna", "Kaansa" }, { "gnb", "Gangte" }, { "gnc", "Guanche" }, { "gnd", "Zulgo-Gemzek" }, { "gne", "Ganang" }, { "gng", "Ngangam" }, { "gnh", "Lere" }, { "gni", "Gooniyandi" }, { "gnk", "Gana" }, { "gnl", "Gangulu" }, { "gnm", "Ginuman" }, { "gnn", "Gumatj" }, { "gno", "Northern Gondi" }, { "gnq", "Gana" }, { "gnr", "Gureng Gureng" }, { "gnt", "Guntai" }, { "gnu", "Gnau" }, { "gnw", "Western Bolivian Guaraní" }, { "gnz", "Ganzi" }, { "goa", "Guro" }, { "gob", "Playero" }, { "goc", "Gorakor" }, { "god", "Godié" }, { "goe", "Gongduk" }, { "gof", "Gofa" }, { "gog", "Gogo" }, { "goh", "Old High German (ca. 750-1050)" }, { "goi", "Gobasi" }, { "goj", "Gowlan" }, { "gok", "Gowli" }, { "gol", "Gola" }, { "gom", "Goan Konkani" }, { "gon", "Gondi" }, { "goo", "Gone Dau" }, { "gop", "Yeretuar" }, { "goq", "Gorap" }, { "gor", "Gorontalo" }, { "gos", "Gronings" }, { "got", "Gothic" }, { "gou", "Gavar" }, { "gow", "Gorowa" }, { "gox", "Gobu" }, { "goy", "Goundo" }, { "goz", "Gozarkhani" }, { "gpa", "Gupa-Abawa" }, { "gpe", "Ghanaian Pidgin English" }, { "gpn", "Taiap" }, { "gqa", "Ga'anda" }, { "gqi", "Guiqiong" }, { "gqn", "Guana (Brazil)" }, { "gqr", "Gor" }, { "gqu", "Qau" }, { "gra", "Rajput Garasia" }, { "grb", "Grebo" }, { "grc", "Ancient Greek (to 1453)" }, { "grd", "Guruntum-Mbaaru" }, { "grg", "Madi" }, { "grh", "Gbiri-Niragu" }, { "gri", "Ghari" }, { "grj", "Southern Grebo" }, { "grm", "Kota Marudu Talantang" }, { "grn", "Guarani" }, { "gro", "Groma" }, { "grq", "Gorovu" }, { "grr", "Taznatit" }, { "grs", "Gresi" }, { "grt", "Garo" }, { "gru", "Kistane" }, { "grv", "Central Grebo" }, { "grw", "Gweda" }, { "grx", "Guriaso" }, { "gry", "Barclayville Grebo" }, { "grz", "Guramalum" }, { "gse", "Ghanaian Sign Language" }, { "gsg", "German Sign Language" }, { "gsl", "Gusilay" }, { "gsm", "Guatemalan Sign Language" }, { "gsn", "Gusan" }, { "gso", "Southwest Gbaya" }, { "gsp", "Wasembo" }, { "gss", "Greek Sign Language" }, { "gsw", "Swiss German" }, { "gta", "Guató" }, { "gti", "Gbati-ri" }, { "gtu", "Aghu-Tharnggala" }, { "gua", "Shiki" }, { "gub", "Guajajára" }, { "guc", "Wayuu" }, { "gud", "Yocoboué Dida" }, { "gue", "Gurinji" }, { "guf", "Gupapuyngu" }, { "gug", "Paraguayan Guaraní" }, { "guh", "Guahibo" }, { "gui", "Eastern Bolivian Guaraní" }, { "guj", "Gujarati" }, { "guk", "Gumuz" }, { "gul", "Sea Island Creole English" }, { "gum", "Guambiano" }, { "gun", "Mbyá Guaraní" }, { "guo", "Guayabero" }, { "gup", "Gunwinggu" }, { "guq", "Aché" }, { "gur", "Farefare" }, { "gus", "Guinean Sign Language" }, { "gut", "Maléku Jaíka" }, { "guu", "Yanomamö" }, { "guv", "Gey" }, { "guw", "Gun" }, { "gux", "Gourmanchéma" }, { "guz", "Gusii" }, { "gva", "Guana (Paraguay)" }, { "gvc", "Guanano" }, { "gve", "Duwet" }, { "gvf", "Golin" }, { "gvj", "Guajá" }, { "gvl", "Gulay" }, { "gvm", "Gurmana" }, { "gvn", "Kuku-Yalanji" }, { "gvo", "Gavião Do Jiparaná" }, { "gvp", "Pará Gavião" }, { "gvr", "Western Gurung" }, { "gvs", "Gumawana" }, { "gvy", "Guyani" }, { "gwa", "Mbato" }, { "gwb", "Gwa" }, { "gwc", "Kalami" }, { "gwd", "Gawwada" }, { "gwe", "Gweno" }, { "gwf", "Gowro" }, { "gwg", "Moo" }, { "gwi", "Gwichʼin" }, { "gwj", "Gwi" }, { "gwm", "Awngthim" }, { "gwn", "Gwandara" }, { "gwr", "Gwere" }, { "gwt", "Gawar-Bati" }, { "gwu", "Guwamu" }, { "gww", "Kwini" }, { "gwx", "Gua" }, { "gxx", "Wè Southern" }, { "gya", "Northwest Gbaya" }, { "gyb", "Garus" }, { "gyd", "Kayardild" }, { "gye", "Gyem" }, { "gyf", "Gungabula" }, { "gyg", "Gbayi" }, { "gyi", "Gyele" }, { "gyl", "Gayil" }, { "gym", "Ngäbere" }, { "gyn", "Guyanese Creole English" }, { "gyr", "Guarayu" }, { "gyy", "Gunya" }, { "gza", "Ganza" }, { "gzi", "Gazi" }, { "gzn", "Gane" }, { "haa", "Han" }, { "hab", "Hanoi Sign Language" }, { "hac", "Gurani" }, { "had", "Hatam" }, { "hae", "Eastern Oromo" }, { "haf", "Haiphong Sign Language" }, { "hag", "Hanga" }, { "hah", "Hahon" }, { "hai", "Haida" }, { "haj", "Hajong" }, { "hak", "Hakka Chinese" }, { "hal", "Halang" }, { "ham", "Hewa" }, { "han", "Hangaza" }, { "hao", "Hakö" }, { "hap", "Hupla" }, { "haq", "Ha" }, { "har", "Harari" }, { "has", "Haisla" }, { "hat", "Haitian" }, { "hau", "Hausa" }, { "hav", "Havu" }, { "haw", "Hawaiian" }, { "hax", "Southern Haida" }, { "hay", "Haya" }, { "haz", "Hazaragi" }, { "hba", "Hamba" }, { "hbb", "Huba" }, { "hbn", "Heiban" }, { "hbo", "Ancient Hebrew" }, { "hbs", "Serbo-Croatian" }, { "hbu", "Habu" }, { "hca", "Andaman Creole Hindi" }, { "hch", "Huichol" }, { "hdn", "Northern Haida" }, { "hds", "Honduras Sign Language" }, { "hdy", "Hadiyya" }, { "hea", "Northern Qiandong Miao" }, { "heb", "Hebrew" }, { "hed", "Herdé" }, { "heg", "Helong" }, { "heh", "Hehe" }, { "hei", "Heiltsuk" }, { "hem", "Hemba" }, { "her", "Herero" }, { "hgm", "Haiom" }, { "hgw", "Haigwai" }, { "hhi", "Hoia Hoia" }, { "hhr", "Kerak" }, { "hhy", "Hoyahoya" }, { "hia", "Lamang" }, { "hib", "Hibito" }, { "hid", "Hidatsa" }, { "hif", "Fiji Hindi" }, { "hig", "Kamwe" }, { "hih", "Pamosu" }, { "hii", "Hinduri" }, { "hij", "Hijuk" }, { "hik", "Seit-Kaitetu" }, { "hil", "Hiligaynon" }, { "hin", "Hindi" }, { "hio", "Tsoa" }, { "hir", "Himarimã" }, { "hit", "Hittite" }, { "hiw", "Hiw" }, { "hix", "Hixkaryána" }, { "hji", "Haji" }, { "hka", "Kahe" }, { "hke", "Hunde" }, { "hkk", "Hunjara-Kaina Ke" }, { "hks", "Hong Kong Sign Language" }, { "hla", "Halia" }, { "hlb", "Halbi" }, { "hld", "Halang Doan" }, { "hle", "Hlersu" }, { "hlt", "Matu Chin" }, { "hlu", "Hieroglyphic Luwian" }, { "hma", "Southern Mashan Hmong" }, { "hmb", "Humburi Senni Songhay" }, { "hmc", "Central Huishui Hmong" }, { "hmd", "Large Flowery Miao" }, { "hme", "Eastern Huishui Hmong" }, { "hmf", "Hmong Don" }, { "hmg", "Southwestern Guiyang Hmong" }, { "hmh", "Southwestern Huishui Hmong" }, { "hmi", "Northern Huishui Hmong" }, { "hmj", "Ge" }, { "hmk", "Maek" }, { "hml", "Luopohe Hmong" }, { "hmm", "Central Mashan Hmong" }, { "hmn", "Hmong" }, { "hmo", "Hiri Motu" }, { "hmp", "Northern Mashan Hmong" }, { "hmq", "Eastern Qiandong Miao" }, { "hmr", "Hmar" }, { "hms", "Southern Qiandong Miao" }, { "hmt", "Hamtai" }, { "hmu", "Hamap" }, { "hmv", "Hmong Dô" }, { "hmw", "Western Mashan Hmong" }, { "hmy", "Southern Guiyang Hmong" }, { "hmz", "Hmong Shua" }, { "hna", "Mina (Cameroon)" }, { "hnd", "Southern Hindko" }, { "hne", "Chhattisgarhi" }, { "hnh", "Ani" }, { "hni", "Hani" }, { "hnj", "Hmong Njua" }, { "hnn", "Hanunoo" }, { "hno", "Northern Hindko" }, { "hns", "Caribbean Hindustani" }, { "hnu", "Hung" }, { "hoa", "Hoava" }, { "hob", "Mari (Madang Province)" }, { "hoc", "Ho" }, { "hod", "Holma" }, { "hoe", "Horom" }, { "hoh", "Hobyót" }, { "hoi", "Holikachuk" }, { "hoj", "Hadothi" }, { "hol", "Holu" }, { "hom", "Homa" }, { "hoo", "Holoholo" }, { "hop", "Hopi" }, { "hor", "Horo" }, { "hos", "Ho Chi Minh City Sign Language" }, { "hot", "Hote" }, { "hov", "Hovongan" }, { "how", "Honi" }, { "hoy", "Holiya" }, { "hoz", "Hozo" }, { "hpo", "Hpon" }, { "hps", "Hawai'i Pidgin Sign Language" }, { "hra", "Hrangkhol" }, { "hrc", "Niwer Mil" }, { "hre", "Hre" }, { "hrk", "Haruku" }, { "hrm", "Horned Miao" }, { "hro", "Haroi" }, { "hrp", "Nhirrpi" }, { "hrt", "Hértevin" }, { "hru", "Hruso" }, { "hrv", "Croatian" }, { "hrw", "Warwar Feni" }, { "hrx", "Hunsrik" }, { "hrz", "Harzani" }, { "hsb", "Upper Sorbian" }, { "hsh", "Hungarian Sign Language" }, { "hsl", "Hausa Sign Language" }, { "hsn", "Xiang Chinese" }, { "hss", "Harsusi" }, { "hti", "Hoti" }, { "hto", "Minica Huitoto" }, { "hts", "Hadza" }, { "htu", "Hitu" }, { "htx", "Middle Hittite" }, { "hub", "Huambisa" }, { "huc", "=Hua" }, { "hud", "Huaulu" }, { "hue", "San Francisco Del Mar Huave" }, { "huf", "Humene" }, { "hug", "Huachipaeri" }, { "huh", "Huilliche" }, { "hui", "Huli" }, { "huj", "Northern Guiyang Hmong" }, { "huk", "Hulung" }, { "hul", "Hula" }, { "hum", "Hungana" }, { "hun", "Hungarian" }, { "huo", "Hu" }, { "hup", "Hupa" }, { "huq", "Tsat" }, { "hur", "Halkomelem" }, { "hus", "Huastec" }, { "hut", "Humla" }, { "huu", "Murui Huitoto" }, { "huv", "San Mateo Del Mar Huave" }, { "huw", "Hukumina" }, { "hux", "Nüpode Huitoto" }, { "huy", "Hulaulá" }, { "huz", "Hunzib" }, { "hvc", "Haitian Vodoun Culture Language" }, { "hve", "San Dionisio Del Mar Huave" }, { "hvk", "Haveke" }, { "hvn", "Sabu" }, { "hvv", "Santa María Del Mar Huave" }, { "hwa", "Wané" }, { "hwc", "Hawai'i Creole English" }, { "hwo", "Hwana" }, { "hya", "Hya" }, { "hye", "Armenian" }, { "iai", "Iaai" }, { "ian", "Iatmul" }, { "iap", "Iapama" }, { "iar", "Purari" }, { "iba", "Iban" }, { "ibb", "Ibibio" }, { "ibd", "Iwaidja" }, { "ibe", "Akpes" }, { "ibg", "Ibanag" }, { "ibl", "Ibaloi" }, { "ibm", "Agoi" }, { "ibn", "Ibino" }, { "ibo", "Igbo" }, { "ibr", "Ibuoro" }, { "ibu", "Ibu" }, { "iby", "Ibani" }, { "ica", "Ede Ica" }, { "ich", "Etkywan" }, { "icl", "Icelandic Sign Language" }, { "icr", "Islander Creole English" }, { "ida", "Idakho-Isukha-Tiriki" }, { "idb", "Indo-Portuguese" }, { "idc", "Idon" }, { "idd", "Ede Idaca" }, { "ide", "Idere" }, { "idi", "Idi" }, { "ido", "Ido" }, { "idr", "Indri" }, { "ids", "Idesa" }, { "idt", "Idaté" }, { "idu", "Idoma" }, { "ifa", "Amganad Ifugao" }, { "ifb", "Batad Ifugao" }, { "ife", "Ifè" }, { "iff", "Ifo" }, { "ifk", "Tuwali Ifugao" }, { "ifm", "Teke-Fuumu" }, { "ifu", "Mayoyao Ifugao" }, { "ify", "Keley-I Kallahan" }, { "igb", "Ebira" }, { "ige", "Igede" }, { "igg", "Igana" }, { "igl", "Igala" }, { "igm", "Kanggape" }, { "ign", "Ignaciano" }, { "igo", "Isebe" }, { "igs", "Interglossa" }, { "igw", "Igwe" }, { "ihb", "Iha Based Pidgin" }, { "ihi", "Ihievbe" }, { "ihp", "Iha" }, { "ihw", "Bidhawal" }, { "iii", "Sichuan Yi" }, { "iin", "Thiin" }, { "ijc", "Izon" }, { "ije", "Biseni" }, { "ijj", "Ede Ije" }, { "ijn", "Kalabari" }, { "ijs", "Southeast Ijo" }, { "ike", "Eastern Canadian Inuktitut" }, { "iki", "Iko" }, { "ikk", "Ika" }, { "ikl", "Ikulu" }, { "iko", "Olulumo-Ikom" }, { "ikp", "Ikpeshi" }, { "ikr", "Ikaranggal" }, { "ikt", "Inuinnaqtun" }, { "iku", "Inuktitut" }, { "ikv", "Iku-Gora-Ankwa" }, { "ikw", "Ikwere" }, { "ikx", "Ik" }, { "ikz", "Ikizu" }, { "ila", "Ile Ape" }, { "ilb", "Ila" }, { "ile", "Interlingue" }, { "ilg", "Garig-Ilgar" }, { "ili", "Ili Turki" }, { "ilk", "Ilongot" }, { "ill", "Iranun" }, { "ilo", "Iloko" }, { "ils", "International Sign" }, { "ilu", "Ili'uun" }, { "ilv", "Ilue" }, { "ima", "Mala Malasar" }, { "ime", "Imeraguen" }, { "imi", "Anamgura" }, { "iml", "Miluk" }, { "imn", "Imonda" }, { "imo", "Imbongu" }, { "imr", "Imroing" }, { "ims", "Marsian" }, { "imy", "Milyan" }, { "ina", "Interlingua (International Auxiliary Language Association)" }, { "inb", "Inga" }, { "ind", "Indonesian" }, { "ing", "Degexit'an" }, { "inh", "Ingush" }, { "inj", "Jungle Inga" }, { "inl", "Indonesian Sign Language" }, { "inm", "Minaean" }, { "inn", "Isinai" }, { "ino", "Inoke-Yate" }, { "inp", "Iñapari" }, { "ins", "Indian Sign Language" }, { "int", "Intha" }, { "inz", "Ineseño" }, { "ior", "Inor" }, { "iou", "Tuma-Irumu" }, { "iow", "Iowa-Oto" }, { "ipi", "Ipili" }, { "ipk", "Inupiaq" }, { "ipo", "Ipiko" }, { "iqu", "Iquito" }, { "iqw", "Ikwo" }, { "ire", "Iresim" }, { "irh", "Irarutu" }, { "iri", "Irigwe" }, { "irk", "Iraqw" }, { "irn", "Irántxe" }, { "irr", "Ir" }, { "iru", "Irula" }, { "irx", "Kamberau" }, { "iry", "Iraya" }, { "isa", "Isabi" }, { "isc", "Isconahua" }, { "isd", "Isnag" }, { "ise", "Italian Sign Language" }, { "isg", "Irish Sign Language" }, { "ish", "Esan" }, { "isi", "Nkem-Nkum" }, { "isk", "Ishkashimi" }, { "isl", "Icelandic" }, { "ism", "Masimasi" }, { "isn", "Isanzu" }, { "iso", "Isoko" }, { "isr", "Israeli Sign Language" }, { "ist", "Istriot" }, { "isu", "Isu (Menchum Division)" }, { "ita", "Italian" }, { "itb", "Binongan Itneg" }, { "ite", "Itene" }, { "iti", "Inlaod Itneg" }, { "itk", "Judeo-Italian" }, { "itl", "Itelmen" }, { "itm", "Itu Mbon Uzo" }, { "ito", "Itonama" }, { "itr", "Iteri" }, { "its", "Isekiri" }, { "itt", "Maeng Itneg" }, { "itv", "Itawit" }, { "itw", "Ito" }, { "itx", "Itik" }, { "ity", "Moyadan Itneg" }, { "itz", "Itzá" }, { "ium", "Iu Mien" }, { "ivb", "Ibatan" }, { "ivv", "Ivatan" }, { "iwk", "I-Wak" }, { "iwm", "Iwam" }, { "iwo", "Iwur" }, { "iws", "Sepik Iwam" }, { "ixc", "Ixcatec" }, { "ixl", "Ixil" }, { "iya", "Iyayu" }, { "iyo", "Mesaka" }, { "iyx", "Yaka (Congo)" }, { "izh", "Ingrian" }, { "izr", "Izere" }, { "izz", "Izii" }, { "jaa", "Jamamadí" }, { "jab", "Hyam" }, { "jac", "Popti'" }, { "jad", "Jahanka" }, { "jae", "Yabem" }, { "jaf", "Jara" }, { "jah", "Jah Hut" }, { "jaj", "Zazao" }, { "jak", "Jakun" }, { "jal", "Yalahatan" }, { "jam", "Jamaican Creole English" }, { "jan", "Jandai" }, { "jao", "Yanyuwa" }, { "jaq", "Yaqay" }, { "jas", "New Caledonian Javanese" }, { "jat", "Jakati" }, { "jau", "Yaur" }, { "jav", "Javanese" }, { "jax", "Jambi Malay" }, { "jay", "Yan-nhangu" }, { "jaz", "Jawe" }, { "jbe", "Judeo-Berber" }, { "jbi", "Badjiri" }, { "jbj", "Arandai" }, { "jbk", "Barikewa" }, { "jbn", "Nafusi" }, { "jbo", "Lojban" }, { "jbr", "Jofotek-Bromnya" }, { "jbt", "Jabutí" }, { "jbu", "Jukun Takum" }, { "jbw", "Yawijibaya" }, { "jcs", "Jamaican Country Sign Language" }, { "jct", "Krymchak" }, { "jda", "Jad" }, { "jdg", "Jadgali" }, { "jdt", "Judeo-Tat" }, { "jeb", "Jebero" }, { "jee", "Jerung" }, { "jeg", "Jeng" }, { "jeh", "Jeh" }, { "jei", "Yei" }, { "jek", "Jeri Kuo" }, { "jel", "Yelmek" }, { "jen", "Dza" }, { "jer", "Jere" }, { "jet", "Manem" }, { "jeu", "Jonkor Bourmataguil" }, { "jgb", "Ngbee" }, { "jge", "Judeo-Georgian" }, { "jgk", "Gwak" }, { "jgo", "Ngomba" }, { "jhi", "Jehai" }, { "jhs", "Jhankot Sign Language" }, { "jia", "Jina" }, { "jib", "Jibu" }, { "jic", "Tol" }, { "jid", "Bu" }, { "jie", "Jilbe" }, { "jig", "Djingili" }, { "jih", "sTodsde" }, { "jii", "Jiiddu" }, { "jil", "Jilim" }, { "jim", "Jimi (Cameroon)" }, { "jio", "Jiamao" }, { "jiq", "Guanyinqiao" }, { "jit", "Jita" }, { "jiu", "Youle Jinuo" }, { "jiv", "Shuar" }, { "jiy", "Buyuan Jinuo" }, { "jjr", "Bankal" }, { "jkm", "Mobwa Karen" }, { "jko", "Kubo" }, { "jkp", "Paku Karen" }, { "jkr", "Koro (India)" }, { "jku", "Labir" }, { "jle", "Ngile" }, { "jls", "Jamaican Sign Language" }, { "jma", "Dima" }, { "jmb", "Zumbun" }, { "jmc", "Machame" }, { "jmd", "Yamdena" }, { "jmi", "Jimi (Nigeria)" }, { "jml", "Jumli" }, { "jmn", "Makuri Naga" }, { "jmr", "Kamara" }, { "jms", "Mashi (Nigeria)" }, { "jmw", "Mouwase" }, { "jmx", "Western Juxtlahuaca Mixtec" }, { "jna", "Jangshung" }, { "jnd", "Jandavra" }, { "jng", "Yangman" }, { "jni", "Janji" }, { "jnj", "Yemsa" }, { "jnl", "Rawat" }, { "jns", "Jaunsari" }, { "job", "Joba" }, { "jod", "Wojenaka" }, { "jor", "Jorá" }, { "jos", "Jordanian Sign Language" }, { "jow", "Jowulu" }, { "jpa", "Jewish Palestinian Aramaic" }, { "jpn", "Japanese" }, { "jpr", "Judeo-Persian" }, { "jqr", "Jaqaru" }, { "jra", "Jarai" }, { "jrb", "Judeo-Arabic" }, { "jrr", "Jiru" }, { "jrt", "Jorto" }, { "jru", "Japrería" }, { "jsl", "Japanese Sign Language" }, { "jua", "Júma" }, { "jub", "Wannu" }, { "juc", "Jurchen" }, { "jud", "Worodougou" }, { "juh", "Hõne" }, { "jui", "Ngadjuri" }, { "juk", "Wapan" }, { "jul", "Jirel" }, { "jum", "Jumjum" }, { "jun", "Juang" }, { "juo", "Jiba" }, { "jup", "Hupdë" }, { "jur", "Jurúna" }, { "jus", "Jumla Sign Language" }, { "jut", "Jutish" }, { "juu", "Ju" }, { "juw", "Wãpha" }, { "juy", "Juray" }, { "jvd", "Javindo" }, { "jvn", "Caribbean Javanese" }, { "jwi", "Jwira-Pepesa" }, { "jya", "Jiarong" }, { "jye", "Judeo-Yemeni Arabic" }, { "jyy", "Jaya" }, { "kaa", "Kara-Kalpak" }, { "kab", "Kabyle" }, { "kac", "Kachin" }, { "kad", "Adara" }, { "kae", "Ketangalan" }, { "kaf", "Katso" }, { "kag", "Kajaman" }, { "kah", "Kara (Central African Republic)" }, { "kai", "Karekare" }, { "kaj", "Jju" }, { "kak", "Kayapa Kallahan" }, { "kal", "Kalaallisut" }, { "kam", "Kamba (Kenya)" }, { "kan", "Kannada" }, { "kao", "Xaasongaxango" }, { "kap", "Bezhta" }, { "kaq", "Capanahua" }, { "kas", "Kashmiri" }, { "kat", "Georgian" }, { "kau", "Kanuri" }, { "kav", "Katukína" }, { "kaw", "Kawi" }, { "kax", "Kao" }, { "kay", "Kamayurá" }, { "kaz", "Kazakh" }, { "kba", "Kalarko" }, { "kbb", "Kaxuiâna" }, { "kbc", "Kadiwéu" }, { "kbd", "Kabardian" }, { "kbe", "Kanju" }, { "kbf", "Kakauhua" }, { "kbg", "Khamba" }, { "kbh", "Camsá" }, { "kbi", "Kaptiau" }, { "kbj", "Kari" }, { "kbk", "Grass Koiari" }, { "kbl", "Kanembu" }, { "kbm", "Iwal" }, { "kbn", "Kare (Central African Republic)" }, { "kbo", "Keliko" }, { "kbp", "Kabiyè" }, { "kbq", "Kamano" }, { "kbr", "Kafa" }, { "kbs", "Kande" }, { "kbt", "Abadi" }, { "kbu", "Kabutra" }, { "kbv", "Dera (Indonesia)" }, { "kbw", "Kaiep" }, { "kbx", "Ap Ma" }, { "kby", "Manga Kanuri" }, { "kbz", "Duhwa" }, { "kca", "Khanty" }, { "kcb", "Kawacha" }, { "kcc", "Lubila" }, { "kcd", "Ngkâlmpw Kanum" }, { "kce", "Kaivi" }, { "kcf", "Ukaan" }, { "kcg", "Tyap" }, { "kch", "Vono" }, { "kci", "Kamantan" }, { "kcj", "Kobiana" }, { "kck", "Kalanga" }, { "kcl", "Kela (Papua New Guinea)" }, { "kcm", "Gula (Central African Republic)" }, { "kcn", "Nubi" }, { "kco", "Kinalakna" }, { "kcp", "Kanga" }, { "kcq", "Kamo" }, { "kcr", "Katla" }, { "kcs", "Koenoem" }, { "kct", "Kaian" }, { "kcu", "Kami (Tanzania)" }, { "kcv", "Kete" }, { "kcw", "Kabwari" }, { "kcx", "Kachama-Ganjule" }, { "kcy", "Korandje" }, { "kcz", "Konongo" }, { "kda", "Worimi" }, { "kdc", "Kutu" }, { "kdd", "Yankunytjatjara" }, { "kde", "Makonde" }, { "kdf", "Mamusi" }, { "kdg", "Seba" }, { "kdh", "Tem" }, { "kdi", "Kumam" }, { "kdj", "Karamojong" }, { "kdk", "Numèè" }, { "kdl", "Tsikimba" }, { "kdm", "Kagoma" }, { "kdn", "Kunda" }, { "kdp", "Kaningdon-Nindem" }, { "kdq", "Koch" }, { "kdr", "Karaim" }, { "kdt", "Kuy" }, { "kdu", "Kadaru" }, { "kdw", "Koneraw" }, { "kdx", "Kam" }, { "kdy", "Keder" }, { "kdz", "Kwaja" }, { "kea", "Kabuverdianu" }, { "keb", "Kélé" }, { "kec", "Keiga" }, { "ked", "Kerewe" }, { "kee", "Eastern Keres" }, { "kef", "Kpessi" }, { "keg", "Tese" }, { "keh", "Keak" }, { "kei", "Kei" }, { "kej", "Kadar" }, { "kek", "Kekchí" }, { "kel", "Kela (Democratic Republic of Congo)" }, { "kem", "Kemak" }, { "ken", "Kenyang" }, { "keo", "Kakwa" }, { "kep", "Kaikadi" }, { "keq", "Kamar" }, { "ker", "Kera" }, { "kes", "Kugbo" }, { "ket", "Ket" }, { "keu", "Akebu" }, { "kev", "Kanikkaran" }, { "kew", "West Kewa" }, { "kex", "Kukna" }, { "key", "Kupia" }, { "kez", "Kukele" }, { "kfa", "Kodava" }, { "kfb", "Northwestern Kolami" }, { "kfc", "Konda-Dora" }, { "kfd", "Korra Koraga" }, { "kfe", "Kota (India)" }, { "kff", "Koya" }, { "kfg", "Kudiya" }, { "kfh", "Kurichiya" }, { "kfi", "Kannada Kurumba" }, { "kfj", "Kemiehua" }, { "kfk", "Kinnauri" }, { "kfl", "Kung" }, { "kfm", "Khunsari" }, { "kfn", "Kuk" }, { "kfo", "Koro (Côte d'Ivoire)" }, { "kfp", "Korwa" }, { "kfq", "Korku" }, { "kfr", "Kachchi" }, { "kfs", "Bilaspuri" }, { "kft", "Kanjari" }, { "kfu", "Katkari" }, { "kfv", "Kurmukar" }, { "kfw", "Kharam Naga" }, { "kfx", "Kullu Pahari" }, { "kfy", "Kumaoni" }, { "kfz", "Koromfé" }, { "kga", "Koyaga" }, { "kgb", "Kawe" }, { "kgc", "Kasseng" }, { "kgd", "Kataang" }, { "kge", "Komering" }, { "kgf", "Kube" }, { "kgg", "Kusunda" }, { "kgi", "Selangor Sign Language" }, { "kgj", "Gamale Kham" }, { "kgk", "Kaiwá" }, { "kgl", "Kunggari" }, { "kgm", "Karipúna" }, { "kgn", "Karingani" }, { "kgo", "Krongo" }, { "kgp", "Kaingang" }, { "kgq", "Kamoro" }, { "kgr", "Abun" }, { "kgs", "Kumbainggar" }, { "kgt", "Somyev" }, { "kgu", "Kobol" }, { "kgv", "Karas" }, { "kgw", "Karon Dori" }, { "kgx", "Kamaru" }, { "kgy", "Kyerung" }, { "kha", "Khasi" }, { "khb", "Lü" }, { "khc", "Tukang Besi North" }, { "khd", "Bädi Kanum" }, { "khe", "Korowai" }, { "khf", "Khuen" }, { "khg", "Khams Tibetan" }, { "khh", "Kehu" }, { "khj", "Kuturmi" }, { "khk", "Halh Mongolian" }, { "khl", "Lusi" }, { "khm", "Central Khmer" }, { "khn", "Khandesi" }, { "kho", "Khotanese" }, { "khp", "Kapori" }, { "khq", "Koyra Chiini Songhay" }, { "khr", "Kharia" }, { "khs", "Kasua" }, { "kht", "Khamti" }, { "khu", "Nkhumbi" }, { "khv", "Khvarshi" }, { "khw", "Khowar" }, { "khx", "Kanu" }, { "khy", "Kele (Democratic Republic of Congo)" }, { "khz", "Keapara" }, { "kia", "Kim" }, { "kib", "Koalib" }, { "kic", "Kickapoo" }, { "kid", "Koshin" }, { "kie", "Kibet" }, { "kif", "Eastern Parbate Kham" }, { "kig", "Kimaama" }, { "kih", "Kilmeri" }, { "kii", "Kitsai" }, { "kij", "Kilivila" }, { "kik", "Kikuyu" }, { "kil", "Kariya" }, { "kim", "Karagas" }, { "kin", "Kinyarwanda" }, { "kio", "Kiowa" }, { "kip", "Sheshi Kham" }, { "kiq", "Kosadle" }, { "kir", "Kirghiz" }, { "kis", "Kis" }, { "kit", "Agob" }, { "kiu", "Kirmanjki (individual language)" }, { "kiv", "Kimbu" }, { "kiw", "Northeast Kiwai" }, { "kix", "Khiamniungan Naga" }, { "kiy", "Kirikiri" }, { "kiz", "Kisi" }, { "kja", "Mlap" }, { "kjb", "Q'anjob'al" }, { "kjc", "Coastal Konjo" }, { "kjd", "Southern Kiwai" }, { "kje", "Kisar" }, { "kjf", "Khalaj" }, { "kjg", "Khmu" }, { "kjh", "Khakas" }, { "kji", "Zabana" }, { "kjj", "Khinalugh" }, { "kjk", "Highland Konjo" }, { "kjl", "Western Parbate Kham" }, { "kjm", "Kháng" }, { "kjn", "Kunjen" }, { "kjo", "Harijan Kinnauri" }, { "kjp", "Pwo Eastern Karen" }, { "kjq", "Western Keres" }, { "kjr", "Kurudu" }, { "kjs", "East Kewa" }, { "kjt", "Phrae Pwo Karen" }, { "kju", "Kashaya" }, { "kjx", "Ramopa" }, { "kjy", "Erave" }, { "kjz", "Bumthangkha" }, { "kka", "Kakanda" }, { "kkb", "Kwerisa" }, { "kkc", "Odoodee" }, { "kkd", "Kinuku" }, { "kke", "Kakabe" }, { "kkf", "Kalaktang Monpa" }, { "kkg", "Mabaka Valley Kalinga" }, { "kkh", "Khün" }, { "kki", "Kagulu" }, { "kkj", "Kako" }, { "kkk", "Kokota" }, { "kkl", "Kosarek Yale" }, { "kkm", "Kiong" }, { "kkn", "Kon Keu" }, { "kko", "Karko" }, { "kkp", "Gugubera" }, { "kkq", "Kaiku" }, { "kkr", "Kir-Balar" }, { "kks", "Giiwo" }, { "kkt", "Koi" }, { "kku", "Tumi" }, { "kkv", "Kangean" }, { "kkw", "Teke-Kukuya" }, { "kkx", "Kohin" }, { "kky", "Guguyimidjir" }, { "kkz", "Kaska" }, { "kla", "Klamath-Modoc" }, { "klb", "Kiliwa" }, { "klc", "Kolbila" }, { "kld", "Gamilaraay" }, { "kle", "Kulung (Nepal)" }, { "klf", "Kendeje" }, { "klg", "Tagakaulo" }, { "klh", "Weliki" }, { "kli", "Kalumpang" }, { "klj", "Turkic Khalaj" }, { "klk", "Kono (Nigeria)" }, { "kll", "Kagan Kalagan" }, { "klm", "Migum" }, { "kln", "Kalenjin" }, { "klo", "Kapya" }, { "klp", "Kamasa" }, { "klq", "Rumu" }, { "klr", "Khaling" }, { "kls", "Kalasha" }, { "klt", "Nukna" }, { "klu", "Klao" }, { "klv", "Maskelynes" }, { "klw", "Lindu" }, { "klx", "Koluwawa" }, { "kly", "Kalao" }, { "klz", "Kabola" }, { "kma", "Konni" }, { "kmb", "Kimbundu" }, { "kmc", "Southern Dong" }, { "kmd", "Majukayang Kalinga" }, { "kme", "Bakole" }, { "kmf", "Kare (Papua New Guinea)" }, { "kmg", "Kâte" }, { "kmh", "Kalam" }, { "kmi", "Kami (Nigeria)" }, { "kmj", "Kumarbhag Paharia" }, { "kmk", "Limos Kalinga" }, { "kml", "Tanudan Kalinga" }, { "kmm", "Kom (India)" }, { "kmn", "Awtuw" }, { "kmo", "Kwoma" }, { "kmp", "Gimme" }, { "kmq", "Kwama" }, { "kmr", "Northern Kurdish" }, { "kms", "Kamasau" }, { "kmt", "Kemtuik" }, { "kmu", "Kanite" }, { "kmv", "Karipúna Creole French" }, { "kmw", "Komo (Democratic Republic of Congo)" }, { "kmx", "Waboda" }, { "kmy", "Koma" }, { "kmz", "Khorasani Turkish" }, { "kna", "Dera (Nigeria)" }, { "knb", "Lubuagan Kalinga" }, { "knc", "Central Kanuri" }, { "knd", "Konda" }, { "kne", "Kankanaey" }, { "knf", "Mankanya" }, { "kng", "Koongo" }, { "kni", "Kanufi" }, { "knj", "Western Kanjobal" }, { "knk", "Kuranko" }, { "knl", "Keninjal" }, { "knm", "Kanamarí" }, { "knn", "Konkani (individual language)" }, { "kno", "Kono (Sierra Leone)" }, { "knp", "Kwanja" }, { "knq", "Kintaq" }, { "knr", "Kaningra" }, { "kns", "Kensiu" }, { "knt", "Panoan Katukína" }, { "knu", "Kono (Guinea)" }, { "knv", "Tabo" }, { "knw", "Kung-Ekoka" }, { "knx", "Kendayan" }, { "kny", "Kanyok" }, { "knz", "Kalamsé" }, { "koa", "Konomala" }, { "koc", "Kpati" }, { "kod", "Kodi" }, { "koe", "Kacipo-Balesi" }, { "kof", "Kubi" }, { "kog", "Cogui" }, { "koh", "Koyo" }, { "koi", "Komi-Permyak" }, { "koj", "Sara Dunjo" }, { "kok", "Konkani (macrolanguage)" }, { "kol", "Kol (Papua New Guinea)" }, { "kom", "Komi" }, { "kon", "Kongo" }, { "koo", "Konzo" }, { "kop", "Waube" }, { "koq", "Kota (Gabon)" }, { "kor", "Korean" }, { "kos", "Kosraean" }, { "kot", "Lagwan" }, { "kou", "Koke" }, { "kov", "Kudu-Camo" }, { "kow", "Kugama" }, { "kox", "Coxima" }, { "koy", "Koyukon" }, { "koz", "Korak" }, { "kpa", "Kutto" }, { "kpb", "Mullu Kurumba" }, { "kpc", "Curripaco" }, { "kpd", "Koba" }, { "kpe", "Kpelle" }, { "kpf", "Komba" }, { "kpg", "Kapingamarangi" }, { "kph", "Kplang" }, { "kpi", "Kofei" }, { "kpj", "Karajá" }, { "kpk", "Kpan" }, { "kpl", "Kpala" }, { "kpm", "Koho" }, { "kpn", "Kepkiriwát" }, { "kpo", "Ikposo" }, { "kpq", "Korupun-Sela" }, { "kpr", "Korafe-Yegha" }, { "kps", "Tehit" }, { "kpt", "Karata" }, { "kpu", "Kafoa" }, { "kpv", "Komi-Zyrian" }, { "kpw", "Kobon" }, { "kpx", "Mountain Koiali" }, { "kpy", "Koryak" }, { "kpz", "Kupsabiny" }, { "kqa", "Mum" }, { "kqb", "Kovai" }, { "kqc", "Doromu-Koki" }, { "kqd", "Koy Sanjaq Surat" }, { "kqe", "Kalagan" }, { "kqf", "Kakabai" }, { "kqg", "Khe" }, { "kqh", "Kisankasa" }, { "kqi", "Koitabu" }, { "kqj", "Koromira" }, { "kqk", "Kotafon Gbe" }, { "kql", "Kyenele" }, { "kqm", "Khisa" }, { "kqn", "Kaonde" }, { "kqo", "Eastern Krahn" }, { "kqp", "Kimré" }, { "kqq", "Krenak" }, { "kqr", "Kimaragang" }, { "kqs", "Northern Kissi" }, { "kqt", "Klias River Kadazan" }, { "kqu", "Seroa" }, { "kqv", "Okolod" }, { "kqw", "Kandas" }, { "kqx", "Mser" }, { "kqy", "Koorete" }, { "kqz", "Korana" }, { "kra", "Kumhali" }, { "krb", "Karkin" }, { "krc", "Karachay-Balkar" }, { "krd", "Kairui-Midiki" }, { "kre", "Panará" }, { "krf", "Koro (Vanuatu)" }, { "krh", "Kurama" }, { "kri", "Krio" }, { "krj", "Kinaray-A" }, { "krk", "Kerek" }, { "krl", "Karelian" }, { "krm", "Krim" }, { "krn", "Sapo" }, { "krp", "Korop" }, { "krr", "Kru'ng 2" }, { "krs", "Gbaya (Sudan)" }, { "krt", "Tumari Kanuri" }, { "kru", "Kurukh" }, { "krv", "Kavet" }, { "krw", "Western Krahn" }, { "krx", "Karon" }, { "kry", "Kryts" }, { "krz", "Sota Kanum" }, { "ksa", "Shuwa-Zamani" }, { "ksb", "Shambala" }, { "ksc", "Southern Kalinga" }, { "ksd", "Kuanua" }, { "kse", "Kuni" }, { "ksf", "Bafia" }, { "ksg", "Kusaghe" }, { "ksh", "Kölsch" }, { "ksi", "Krisa" }, { "ksj", "Uare" }, { "ksk", "Kansa" }, { "ksl", "Kumalu" }, { "ksm", "Kumba" }, { "ksn", "Kasiguranin" }, { "kso", "Kofa" }, { "ksp", "Kaba" }, { "ksq", "Kwaami" }, { "ksr", "Borong" }, { "kss", "Southern Kisi" }, { "kst", "Winyé" }, { "ksu", "Khamyang" }, { "ksv", "Kusu" }, { "ksw", "S'gaw Karen" }, { "ksx", "Kedang" }, { "ksy", "Kharia Thar" }, { "ksz", "Kodaku" }, { "kta", "Katua" }, { "ktb", "Kambaata" }, { "ktc", "Kholok" }, { "ktd", "Kokata" }, { "kte", "Nubri" }, { "ktf", "Kwami" }, { "ktg", "Kalkutung" }, { "kth", "Karanga" }, { "kti", "North Muyu" }, { "ktj", "Plapo Krumen" }, { "ktk", "Kaniet" }, { "ktl", "Koroshi" }, { "ktm", "Kurti" }, { "ktn", "Karitiâna" }, { "kto", "Kuot" }, { "ktp", "Kaduo" }, { "ktq", "Katabaga" }, { "ktr", "Kota Marudu Tinagas" }, { "kts", "South Muyu" }, { "ktt", "Ketum" }, { "ktu", "Kituba (Democratic Republic of Congo)" }, { "ktv", "Eastern Katu" }, { "ktw", "Kato" }, { "ktx", "Kaxararí" }, { "kty", "Kango (Bas-Uélé District)" }, { "ktz", "Ju'hoan" }, { "kua", "Kuanyama" }, { "kub", "Kutep" }, { "kuc", "Kwinsu" }, { "kud", "'Auhelawa" }, { "kue", "Kuman" }, { "kuf", "Western Katu" }, { "kug", "Kupa" }, { "kuh", "Kushi" }, { "kui", "Kuikúro-Kalapálo" }, { "kuj", "Kuria" }, { "kuk", "Kepo'" }, { "kul", "Kulere" }, { "kum", "Kumyk" }, { "kun", "Kunama" }, { "kuo", "Kumukio" }, { "kup", "Kunimaipa" }, { "kuq", "Karipuna" }, { "kur", "Kurdish" }, { "kus", "Kusaal" }, { "kut", "Kutenai" }, { "kuu", "Upper Kuskokwim" }, { "kuv", "Kur" }, { "kuw", "Kpagua" }, { "kux", "Kukatja" }, { "kuy", "Kuuku-Ya'u" }, { "kuz", "Kunza" }, { "kva", "Bagvalal" }, { "kvb", "Kubu" }, { "kvc", "Kove" }, { "kvd", "Kui (Indonesia)" }, { "kve", "Kalabakan" }, { "kvf", "Kabalai" }, { "kvg", "Kuni-Boazi" }, { "kvh", "Komodo" }, { "kvi", "Kwang" }, { "kvj", "Psikye" }, { "kvk", "Korean Sign Language" }, { "kvl", "Kayaw" }, { "kvm", "Kendem" }, { "kvn", "Border Kuna" }, { "kvo", "Dobel" }, { "kvp", "Kompane" }, { "kvq", "Geba Karen" }, { "kvr", "Kerinci" }, { "kvs", "Kunggara" }, { "kvt", "Lahta Karen" }, { "kvu", "Yinbaw Karen" }, { "kvv", "Kola" }, { "kvw", "Wersing" }, { "kvx", "Parkari Koli" }, { "kvy", "Yintale Karen" }, { "kvz", "Tsakwambo" }, { "kwa", "Dâw" }, { "kwb", "Kwa" }, { "kwc", "Likwala" }, { "kwd", "Kwaio" }, { "kwe", "Kwerba" }, { "kwf", "Kwara'ae" }, { "kwg", "Sara Kaba Deme" }, { "kwh", "Kowiai" }, { "kwi", "Awa-Cuaiquer" }, { "kwj", "Kwanga" }, { "kwk", "Kwakiutl" }, { "kwl", "Kofyar" }, { "kwm", "Kwambi" }, { "kwn", "Kwangali" }, { "kwo", "Kwomtari" }, { "kwp", "Kodia" }, { "kwq", "Kwak" }, { "kwr", "Kwer" }, { "kws", "Kwese" }, { "kwt", "Kwesten" }, { "kwu", "Kwakum" }, { "kwv", "Sara Kaba Náà" }, { "kww", "Kwinti" }, { "kwx", "Khirwar" }, { "kwy", "San Salvador Kongo" }, { "kwz", "Kwadi" }, { "kxa", "Kairiru" }, { "kxb", "Krobu" }, { "kxc", "Konso" }, { "kxd", "Brunei" }, { "kxe", "Kakihum" }, { "kxf", "Manumanaw Karen" }, { "kxh", "Karo (Ethiopia)" }, { "kxi", "Keningau Murut" }, { "kxj", "Kulfa" }, { "kxk", "Zayein Karen" }, { "kxl", "Nepali Kurux" }, { "kxm", "Northern Khmer" }, { "kxn", "Kanowit-Tanjong Melanau" }, { "kxo", "Kanoé" }, { "kxp", "Wadiyara Koli" }, { "kxq", "Smärky Kanum" }, { "kxr", "Koro (Papua New Guinea)" }, { "kxs", "Kangjia" }, { "kxt", "Koiwat" }, { "kxu", "Kui (India)" }, { "kxv", "Kuvi" }, { "kxw", "Konai" }, { "kxx", "Likuba" }, { "kxy", "Kayong" }, { "kxz", "Kerewo" }, { "kya", "Kwaya" }, { "kyb", "Butbut Kalinga" }, { "kyc", "Kyaka" }, { "kyd", "Karey" }, { "kye", "Krache" }, { "kyf", "Kouya" }, { "kyg", "Keyagana" }, { "kyh", "Karok" }, { "kyi", "Kiput" }, { "kyj", "Karao" }, { "kyk", "Kamayo" }, { "kyl", "Kalapuya" }, { "kym", "Kpatili" }, { "kyn", "Northern Binukidnon" }, { "kyo", "Kelon" }, { "kyp", "Kang" }, { "kyq", "Kenga" }, { "kyr", "Kuruáya" }, { "kys", "Baram Kayan" }, { "kyt", "Kayagar" }, { "kyu", "Western Kayah" }, { "kyv", "Kayort" }, { "kyw", "Kudmali" }, { "kyx", "Rapoisi" }, { "kyy", "Kambaira" }, { "kyz", "Kayabí" }, { "kza", "Western Karaboro" }, { "kzb", "Kaibobo" }, { "kzc", "Bondoukou Kulango" }, { "kzd", "Kadai" }, { "kze", "Kosena" }, { "kzf", "Da'a Kaili" }, { "kzg", "Kikai" }, { "kzi", "Kelabit" }, { "kzj", "Coastal Kadazan" }, { "kzk", "Kazukuru" }, { "kzl", "Kayeli" }, { "kzm", "Kais" }, { "kzn", "Kokola" }, { "kzo", "Kaningi" }, { "kzp", "Kaidipang" }, { "kzq", "Kaike" }, { "kzr", "Karang" }, { "kzs", "Sugut Dusun" }, { "kzt", "Tambunan Dusun" }, { "kzu", "Kayupulau" }, { "kzv", "Komyandaret" }, { "kzw", "Karirí-Xocó" }, { "kzx", "Kamarian" }, { "kzy", "Kango (Tshopo District)" }, { "kzz", "Kalabra" }, { "laa", "Southern Subanen" }, { "lab", "Linear A" }, { "lac", "Lacandon" }, { "lad", "Ladino" }, { "lae", "Pattani" }, { "laf", "Lafofa" }, { "lag", "Langi" }, { "lah", "Lahnda" }, { "lai", "Lambya" }, { "laj", "Lango (Uganda)" }, { "lak", "Laka (Nigeria)" }, { "lal", "Lalia" }, { "lam", "Lamba" }, { "lan", "Laru" }, { "lao", "Lao" }, { "lap", "Laka (Chad)" }, { "laq", "Qabiao" }, { "lar", "Larteh" }, { "las", "Lama (Togo)" }, { "lat", "Latin" }, { "lau", "Laba" }, { "lav", "Latvian" }, { "law", "Lauje" }, { "lax", "Tiwa" }, { "lay", "Lama (Myanmar)" }, { "laz", "Aribwatsa" }, { "lba", "Lui" }, { "lbb", "Label" }, { "lbc", "Lakkia" }, { "lbe", "Lak" }, { "lbf", "Tinani" }, { "lbg", "Laopang" }, { "lbi", "La'bi" }, { "lbj", "Ladakhi" }, { "lbk", "Central Bontok" }, { "lbl", "Libon Bikol" }, { "lbm", "Lodhi" }, { "lbn", "Lamet" }, { "lbo", "Laven" }, { "lbq", "Wampar" }, { "lbr", "Lohorung" }, { "lbs", "Libyan Sign Language" }, { "lbt", "Lachi" }, { "lbu", "Labu" }, { "lbv", "Lavatbura-Lamusong" }, { "lbw", "Tolaki" }, { "lbx", "Lawangan" }, { "lby", "Lamu-Lamu" }, { "lbz", "Lardil" }, { "lcc", "Legenyem" }, { "lcd", "Lola" }, { "lce", "Loncong" }, { "lcf", "Lubu" }, { "lch", "Luchazi" }, { "lcl", "Lisela" }, { "lcm", "Tungag" }, { "lcp", "Western Lawa" }, { "lcq", "Luhu" }, { "lcs", "Lisabata-Nuniali" }, { "lda", "Kla-Dan" }, { "ldb", "Dũya" }, { "ldd", "Luri" }, { "ldg", "Lenyima" }, { "ldh", "Lamja-Dengsa-Tola" }, { "ldi", "Laari" }, { "ldj", "Lemoro" }, { "ldk", "Leelau" }, { "ldl", "Kaan" }, { "ldm", "Landoma" }, { "ldn", "Láadan" }, { "ldo", "Loo" }, { "ldp", "Tso" }, { "ldq", "Lufu" }, { "lea", "Lega-Shabunda" }, { "leb", "Lala-Bisa" }, { "lec", "Leco" }, { "led", "Lendu" }, { "lee", "Lyélé" }, { "lef", "Lelemi" }, { "leg", "Lengua" }, { "leh", "Lenje" }, { "lei", "Lemio" }, { "lej", "Lengola" }, { "lek", "Leipon" }, { "lel", "Lele (Democratic Republic of Congo)" }, { "lem", "Nomaande" }, { "len", "Lenca" }, { "leo", "Leti (Cameroon)" }, { "lep", "Lepcha" }, { "leq", "Lembena" }, { "ler", "Lenkau" }, { "les", "Lese" }, { "let", "Lesing-Gelimi" }, { "leu", "Kara (Papua New Guinea)" }, { "lev", "Lamma" }, { "lew", "Ledo Kaili" }, { "lex", "Luang" }, { "ley", "Lemolang" }, { "lez", "Lezghian" }, { "lfa", "Lefa" }, { "lfn", "Lingua Franca Nova" }, { "lga", "Lungga" }, { "lgb", "Laghu" }, { "lgg", "Lugbara" }, { "lgh", "Laghuu" }, { "lgi", "Lengilu" }, { "lgk", "Lingarak" }, { "lgl", "Wala" }, { "lgm", "Lega-Mwenga" }, { "lgn", "Opuuo" }, { "lgq", "Logba" }, { "lgr", "Lengo" }, { "lgt", "Pahi" }, { "lgu", "Longgu" }, { "lgz", "Ligenza" }, { "lha", "Laha (Viet Nam)" }, { "lhh", "Laha (Indonesia)" }, { "lhi", "Lahu Shi" }, { "lhl", "Lahul Lohar" }, { "lhm", "Lhomi" }, { "lhn", "Lahanan" }, { "lhp", "Lhokpu" }, { "lhs", "Mlahsö" }, { "lht", "Lo-Toga" }, { "lhu", "Lahu" }, { "lia", "West-Central Limba" }, { "lib", "Likum" }, { "lic", "Hlai" }, { "lid", "Nyindrou" }, { "lie", "Likila" }, { "lif", "Limbu" }, { "lig", "Ligbi" }, { "lih", "Lihir" }, { "lii", "Lingkhim" }, { "lij", "Ligurian" }, { "lik", "Lika" }, { "lil", "Lillooet" }, { "lim", "Limburgan" }, { "lin", "Lingala" }, { "lio", "Liki" }, { "lip", "Sekpele" }, { "liq", "Libido" }, { "lir", "Liberian English" }, { "lis", "Lisu" }, { "lit", "Lithuanian" }, { "liu", "Logorik" }, { "liv", "Liv" }, { "liw", "Col" }, { "lix", "Liabuku" }, { "liy", "Banda-Bambari" }, { "liz", "Libinza" }, { "lja", "Golpa" }, { "lje", "Rampi" }, { "lji", "Laiyolo" }, { "ljl", "Li'o" }, { "ljp", "Lampung Api" }, { "ljw", "Yirandali" }, { "ljx", "Yuru" }, { "lka", "Lakalei" }, { "lkb", "Kabras" }, { "lkc", "Kucong" }, { "lkd", "Lakondê" }, { "lke", "Kenyi" }, { "lkh", "Lakha" }, { "lki", "Laki" }, { "lkj", "Remun" }, { "lkl", "Laeko-Libuat" }, { "lkm", "Kalaamaya" }, { "lkn", "Lakon" }, { "lko", "Khayo" }, { "lkr", "Päri" }, { "lks", "Kisa" }, { "lkt", "Lakota" }, { "lku", "Kungkari" }, { "lky", "Lokoya" }, { "lla", "Lala-Roba" }, { "llb", "Lolo" }, { "llc", "Lele (Guinea)" }, { "lld", "Ladin" }, { "lle", "Lele (Papua New Guinea)" }, { "llf", "Hermit" }, { "llg", "Lole" }, { "llh", "Lamu" }, { "lli", "Teke-Laali" }, { "llj", "Ladji Ladji" }, { "llk", "Lelak" }, { "lll", "Lilau" }, { "llm", "Lasalimu" }, { "lln", "Lele (Chad)" }, { "llo", "Khlor" }, { "llp", "North Efate" }, { "llq", "Lolak" }, { "lls", "Lithuanian Sign Language" }, { "llu", "Lau" }, { "llx", "Lauan" }, { "lma", "East Limba" }, { "lmb", "Merei" }, { "lmc", "Limilngan" }, { "lmd", "Lumun" }, { "lme", "Pévé" }, { "lmf", "South Lembata" }, { "lmg", "Lamogai" }, { "lmh", "Lambichhong" }, { "lmi", "Lombi" }, { "lmj", "West Lembata" }, { "lmk", "Lamkang" }, { "lml", "Hano" }, { "lmm", "Lamam" }, { "lmn", "Lambadi" }, { "lmo", "Lombard" }, { "lmp", "Limbum" }, { "lmq", "Lamatuka" }, { "lmr", "Lamalera" }, { "lmu", "Lamenu" }, { "lmv", "Lomaiviti" }, { "lmw", "Lake Miwok" }, { "lmx", "Laimbue" }, { "lmy", "Lamboya" }, { "lmz", "Lumbee" }, { "lna", "Langbashe" }, { "lnb", "Mbalanhu" }, { "lnd", "Lundayeh" }, { "lng", "Langobardic" }, { "lnh", "Lanoh" }, { "lni", "Daantanai'" }, { "lnj", "Leningitij" }, { "lnl", "South Central Banda" }, { "lnm", "Langam" }, { "lnn", "Lorediakarkar" }, { "lno", "Lango (Sudan)" }, { "lns", "Lamnso'" }, { "lnu", "Longuda" }, { "lnw", "Lanima" }, { "lnz", "Lonzo" }, { "loa", "Loloda" }, { "lob", "Lobi" }, { "loc", "Inonhan" }, { "loe", "Saluan" }, { "lof", "Logol" }, { "log", "Logo" }, { "loh", "Narim" }, { "loi", "Loma (Côte d'Ivoire)" }, { "loj", "Lou" }, { "lok", "Loko" }, { "lol", "Mongo" }, { "lom", "Loma (Liberia)" }, { "lon", "Malawi Lomwe" }, { "loo", "Lombo" }, { "lop", "Lopa" }, { "loq", "Lobala" }, { "lor", "Téén" }, { "los", "Loniu" }, { "lot", "Otuho" }, { "lou", "Louisiana Creole French" }, { "lov", "Lopi" }, { "low", "Tampias Lobu" }, { "lox", "Loun" }, { "loy", "Loke" }, { "loz", "Lozi" }, { "lpa", "Lelepa" }, { "lpe", "Lepki" }, { "lpn", "Long Phuri Naga" }, { "lpo", "Lipo" }, { "lpx", "Lopit" }, { "lra", "Rara Bakati'" }, { "lrc", "Northern Luri" }, { "lre", "Laurentian" }, { "lrg", "Laragia" }, { "lri", "Marachi" }, { "lrk", "Loarki" }, { "lrl", "Lari" }, { "lrm", "Marama" }, { "lrn", "Lorang" }, { "lro", "Laro" }, { "lrr", "Southern Yamphu" }, { "lrt", "Larantuka Malay" }, { "lrv", "Larevat" }, { "lrz", "Lemerig" }, { "lsa", "Lasgerdi" }, { "lsd", "Lishana Deni" }, { "lse", "Lusengo" }, { "lsg", "Lyons Sign Language" }, { "lsh", "Lish" }, { "lsi", "Lashi" }, { "lsl", "Latvian Sign Language" }, { "lsm", "Saamia" }, { "lso", "Laos Sign Language" }, { "lsp", "Panamanian Sign Language" }, { "lsr", "Aruop" }, { "lss", "Lasi" }, { "lst", "Trinidad and Tobago Sign Language" }, { "lsy", "Mauritian Sign Language" }, { "ltc", "Late Middle Chinese" }, { "ltg", "Latgalian" }, { "lti", "Leti (Indonesia)" }, { "ltn", "Latundê" }, { "lto", "Tsotso" }, { "lts", "Tachoni" }, { "ltu", "Latu" }, { "ltz", "Luxembourgish" }, { "lua", "Luba-Lulua" }, { "lub", "Luba-Katanga" }, { "luc", "Aringa" }, { "lud", "Ludian" }, { "lue", "Luvale" }, { "luf", "Laua" }, { "lug", "Ganda" }, { "lui", "Luiseno" }, { "luj", "Luna" }, { "luk", "Lunanakha" }, { "lul", "Olu'bo" }, { "lum", "Luimbi" }, { "lun", "Lunda" }, { "luo", "Luo (Kenya and Tanzania)" }, { "lup", "Lumbu" }, { "luq", "Lucumi" }, { "lur", "Laura" }, { "lus", "Lushai" }, { "lut", "Lushootseed" }, { "luu", "Lumba-Yakkha" }, { "luv", "Luwati" }, { "luw", "Luo (Cameroon)" }, { "luy", "Luyia" }, { "luz", "Southern Luri" }, { "lva", "Maku'a" }, { "lvk", "Lavukaleve" }, { "lvs", "Standard Latvian" }, { "lvu", "Levuka" }, { "lwa", "Lwalu" }, { "lwe", "Lewo Eleng" }, { "lwg", "Wanga" }, { "lwh", "White Lachi" }, { "lwl", "Eastern Lawa" }, { "lwm", "Laomian" }, { "lwo", "Luwo" }, { "lwt", "Lewotobi" }, { "lwu", "Lawu" }, { "lww", "Lewo" }, { "lya", "Layakha" }, { "lyg", "Lyngngam" }, { "lyn", "Luyana" }, { "lzh", "Literary Chinese" }, { "lzl", "Litzlitz" }, { "lzn", "Leinong Naga" }, { "lzz", "Laz" }, { "maa", "San Jerónimo Tecóatl Mazatec" }, { "mab", "Yutanduchi Mixtec" }, { "mad", "Madurese" }, { "mae", "Bo-Rukul" }, { "maf", "Mafa" }, { "mag", "Magahi" }, { "mah", "Marshallese" }, { "mai", "Maithili" }, { "maj", "Jalapa De Díaz Mazatec" }, { "mak", "Makasar" }, { "mal", "Malayalam" }, { "mam", "Mam" }, { "man", "Mandingo" }, { "maq", "Chiquihuitlán Mazatec" }, { "mar", "Marathi" }, { "mas", "Masai" }, { "mat", "San Francisco Matlatzinca" }, { "mau", "Huautla Mazatec" }, { "mav", "Sateré-Mawé" }, { "maw", "Mampruli" }, { "max", "North Moluccan Malay" }, { "maz", "Central Mazahua" }, { "mba", "Higaonon" }, { "mbb", "Western Bukidnon Manobo" }, { "mbc", "Macushi" }, { "mbd", "Dibabawon Manobo" }, { "mbe", "Molale" }, { "mbf", "Baba Malay" }, { "mbh", "Mangseng" }, { "mbi", "Ilianen Manobo" }, { "mbj", "Nadëb" }, { "mbk", "Malol" }, { "mbl", "Maxakalí" }, { "mbm", "Ombamba" }, { "mbn", "Macaguán" }, { "mbo", "Mbo (Cameroon)" }, { "mbp", "Malayo" }, { "mbq", "Maisin" }, { "mbr", "Nukak Makú" }, { "mbs", "Sarangani Manobo" }, { "mbt", "Matigsalug Manobo" }, { "mbu", "Mbula-Bwazza" }, { "mbv", "Mbulungish" }, { "mbw", "Maring" }, { "mbx", "Mari (East Sepik Province)" }, { "mby", "Memoni" }, { "mbz", "Amoltepec Mixtec" }, { "mca", "Maca" }, { "mcb", "Machiguenga" }, { "mcc", "Bitur" }, { "mcd", "Sharanahua" }, { "mce", "Itundujia Mixtec" }, { "mcf", "Matsés" }, { "mcg", "Mapoyo" }, { "mch", "Maquiritari" }, { "mci", "Mese" }, { "mcj", "Mvanip" }, { "mck", "Mbunda" }, { "mcl", "Macaguaje" }, { "mcm", "Malaccan Creole Portuguese" }, { "mcn", "Masana" }, { "mco", "Coatlán Mixe" }, { "mcp", "Makaa" }, { "mcq", "Ese" }, { "mcr", "Menya" }, { "mcs", "Mambai" }, { "mct", "Mengisa" }, { "mcu", "Cameroon Mambila" }, { "mcv", "Minanibai" }, { "mcw", "Mawa (Chad)" }, { "mcx", "Mpiemo" }, { "mcy", "South Watut" }, { "mcz", "Mawan" }, { "mda", "Mada (Nigeria)" }, { "mdb", "Morigi" }, { "mdc", "Male (Papua New Guinea)" }, { "mdd", "Mbum" }, { "mde", "Maba (Chad)" }, { "mdf", "Moksha" }, { "mdg", "Massalat" }, { "mdh", "Maguindanaon" }, { "mdi", "Mamvu" }, { "mdj", "Mangbetu" }, { "mdk", "Mangbutu" }, { "mdl", "Maltese Sign Language" }, { "mdm", "Mayogo" }, { "mdn", "Mbati" }, { "mdp", "Mbala" }, { "mdq", "Mbole" }, { "mdr", "Mandar" }, { "mds", "Maria (Papua New Guinea)" }, { "mdt", "Mbere" }, { "mdu", "Mboko" }, { "mdv", "Santa Lucía Monteverde Mixtec" }, { "mdw", "Mbosi" }, { "mdx", "Dizin" }, { "mdy", "Male (Ethiopia)" }, { "mdz", "Suruí Do Pará" }, { "mea", "Menka" }, { "meb", "Ikobi" }, { "mec", "Mara" }, { "med", "Melpa" }, { "mee", "Mengen" }, { "mef", "Megam" }, { "meh", "Southwestern Tlaxiaco Mixtec" }, { "mei", "Midob" }, { "mej", "Meyah" }, { "mek", "Mekeo" }, { "mel", "Central Melanau" }, { "mem", "Mangala" }, { "men", "Mende (Sierra Leone)" }, { "meo", "Kedah Malay" }, { "mep", "Miriwung" }, { "meq", "Merey" }, { "mer", "Meru" }, { "mes", "Masmaje" }, { "met", "Mato" }, { "meu", "Motu" }, { "mev", "Mano" }, { "mew", "Maaka" }, { "mey", "Hassaniyya" }, { "mez", "Menominee" }, { "mfa", "Pattani Malay" }, { "mfb", "Bangka" }, { "mfc", "Mba" }, { "mfd", "Mendankwe-Nkwen" }, { "mfe", "Morisyen" }, { "mff", "Naki" }, { "mfg", "Mogofin" }, { "mfh", "Matal" }, { "mfi", "Wandala" }, { "mfj", "Mefele" }, { "mfk", "North Mofu" }, { "mfl", "Putai" }, { "mfm", "Marghi South" }, { "mfn", "Cross River Mbembe" }, { "mfo", "Mbe" }, { "mfp", "Makassar Malay" }, { "mfq", "Moba" }, { "mfr", "Marithiel" }, { "mfs", "Mexican Sign Language" }, { "mft", "Mokerang" }, { "mfu", "Mbwela" }, { "mfv", "Mandjak" }, { "mfw", "Mulaha" }, { "mfx", "Melo" }, { "mfy", "Mayo" }, { "mfz", "Mabaan" }, { "mga", "Middle Irish (900-1200)" }, { "mgb", "Mararit" }, { "mgc", "Morokodo" }, { "mgd", "Moru" }, { "mge", "Mango" }, { "mgf", "Maklew" }, { "mgg", "Mpumpong" }, { "mgh", "Makhuwa-Meetto" }, { "mgi", "Lijili" }, { "mgj", "Abureni" }, { "mgk", "Mawes" }, { "mgl", "Maleu-Kilenge" }, { "mgm", "Mambae" }, { "mgn", "Mbangi" }, { "mgo", "Meta'" }, { "mgp", "Eastern Magar" }, { "mgq", "Malila" }, { "mgr", "Mambwe-Lungu" }, { "mgs", "Manda (Tanzania)" }, { "mgt", "Mongol" }, { "mgu", "Mailu" }, { "mgv", "Matengo" }, { "mgw", "Matumbi" }, { "mgy", "Mbunga" }, { "mgz", "Mbugwe" }, { "mha", "Manda (India)" }, { "mhb", "Mahongwe" }, { "mhc", "Mocho" }, { "mhd", "Mbugu" }, { "mhe", "Besisi" }, { "mhf", "Mamaa" }, { "mhg", "Margu" }, { "mhh", "Maskoy Pidgin" }, { "mhi", "Ma'di" }, { "mhj", "Mogholi" }, { "mhk", "Mungaka" }, { "mhl", "Mauwake" }, { "mhm", "Makhuwa-Moniga" }, { "mhn", "Mócheno" }, { "mho", "Mashi (Zambia)" }, { "mhp", "Balinese Malay" }, { "mhq", "Mandan" }, { "mhr", "Eastern Mari" }, { "mhs", "Buru (Indonesia)" }, { "mht", "Mandahuaca" }, { "mhu", "Digaro-Mishmi" }, { "mhw", "Mbukushu" }, { "mhx", "Maru" }, { "mhy", "Ma'anyan" }, { "mhz", "Mor (Mor Islands)" }, { "mia", "Miami" }, { "mib", "Atatláhuca Mixtec" }, { "mic", "Mi'kmaq" }, { "mid", "Mandaic" }, { "mie", "Ocotepec Mixtec" }, { "mif", "Mofu-Gudur" }, { "mig", "San Miguel El Grande Mixtec" }, { "mih", "Chayuco Mixtec" }, { "mii", "Chigmecatitlán Mixtec" }, { "mij", "Abar" }, { "mik", "Mikasuki" }, { "mil", "Peñoles Mixtec" }, { "mim", "Alacatlatzala Mixtec" }, { "min", "Minangkabau" }, { "mio", "Pinotepa Nacional Mixtec" }, { "mip", "Apasco-Apoala Mixtec" }, { "miq", "Mískito" }, { "mir", "Isthmus Mixe" }, { "mis", "Uncoded languages" }, { "mit", "Southern Puebla Mixtec" }, { "miu", "Cacaloxtepec Mixtec" }, { "miw", "Akoye" }, { "mix", "Mixtepec Mixtec" }, { "miy", "Ayutla Mixtec" }, { "miz", "Coatzospan Mixtec" }, { "mjc", "San Juan Colorado Mixtec" }, { "mjd", "Northwest Maidu" }, { "mje", "Muskum" }, { "mjg", "Tu" }, { "mjh", "Mwera (Nyasa)" }, { "mji", "Kim Mun" }, { "mjj", "Mawak" }, { "mjk", "Matukar" }, { "mjl", "Mandeali" }, { "mjm", "Medebur" }, { "mjn", "Ma (Papua New Guinea)" }, { "mjo", "Malankuravan" }, { "mjp", "Malapandaram" }, { "mjq", "Malaryan" }, { "mjr", "Malavedan" }, { "mjs", "Miship" }, { "mjt", "Sauria Paharia" }, { "mju", "Manna-Dora" }, { "mjv", "Mannan" }, { "mjw", "Karbi" }, { "mjx", "Mahali" }, { "mjy", "Mahican" }, { "mjz", "Majhi" }, { "mka", "Mbre" }, { "mkb", "Mal Paharia" }, { "mkc", "Siliput" }, { "mkd", "Macedonian" }, { "mke", "Mawchi" }, { "mkf", "Miya" }, { "mkg", "Mak (China)" }, { "mki", "Dhatki" }, { "mkj", "Mokilese" }, { "mkk", "Byep" }, { "mkl", "Mokole" }, { "mkm", "Moklen" }, { "mkn", "Kupang Malay" }, { "mko", "Mingang Doso" }, { "mkp", "Moikodi" }, { "mkq", "Bay Miwok" }, { "mkr", "Malas" }, { "mks", "Silacayoapan Mixtec" }, { "mkt", "Vamale" }, { "mku", "Konyanka Maninka" }, { "mkv", "Mafea" }, { "mkw", "Kituba (Congo)" }, { "mkx", "Kinamiging Manobo" }, { "mky", "East Makian" }, { "mkz", "Makasae" }, { "mla", "Malo" }, { "mlb", "Mbule" }, { "mlc", "Cao Lan" }, { "mle", "Manambu" }, { "mlf", "Mal" }, { "mlg", "Malagasy" }, { "mlh", "Mape" }, { "mli", "Malimpung" }, { "mlj", "Miltu" }, { "mlk", "Ilwana" }, { "mll", "Malua Bay" }, { "mlm", "Mulam" }, { "mln", "Malango" }, { "mlo", "Mlomp" }, { "mlp", "Bargam" }, { "mlq", "Western Maninkakan" }, { "mlr", "Vame" }, { "mls", "Masalit" }, { "mlt", "Maltese" }, { "mlu", "To'abaita" }, { "mlv", "Motlav" }, { "mlw", "Moloko" }, { "mlx", "Malfaxal" }, { "mlz", "Malaynon" }, { "mma", "Mama" }, { "mmb", "Momina" }, { "mmc", "Michoacán Mazahua" }, { "mmd", "Maonan" }, { "mme", "Mae" }, { "mmf", "Mundat" }, { "mmg", "North Ambrym" }, { "mmh", "Mehináku" }, { "mmi", "Musar" }, { "mmj", "Majhwar" }, { "mmk", "Mukha-Dora" }, { "mml", "Man Met" }, { "mmm", "Maii" }, { "mmn", "Mamanwa" }, { "mmo", "Mangga Buang" }, { "mmp", "Siawi" }, { "mmq", "Musak" }, { "mmr", "Western Xiangxi Miao" }, { "mmt", "Malalamai" }, { "mmu", "Mmaala" }, { "mmv", "Miriti" }, { "mmw", "Emae" }, { "mmx", "Madak" }, { "mmy", "Migaama" }, { "mmz", "Mabaale" }, { "mna", "Mbula" }, { "mnb", "Muna" }, { "mnc", "Manchu" }, { "mnd", "Mondé" }, { "mne", "Naba" }, { "mnf", "Mundani" }, { "mng", "Eastern Mnong" }, { "mnh", "Mono (Democratic Republic of Congo)" }, { "mni", "Manipuri" }, { "mnj", "Munji" }, { "mnk", "Mandinka" }, { "mnl", "Tiale" }, { "mnm", "Mapena" }, { "mnn", "Southern Mnong" }, { "mnp", "Min Bei Chinese" }, { "mnq", "Minriq" }, { "mnr", "Mono (USA)" }, { "mns", "Mansi" }, { "mnu", "Mer" }, { "mnv", "Rennell-Bellona" }, { "mnw", "Mon" }, { "mnx", "Manikion" }, { "mny", "Manyawa" }, { "mnz", "Moni" }, { "moa", "Mwan" }, { "moc", "Mocoví" }, { "mod", "Mobilian" }, { "moe", "Montagnais" }, { "mog", "Mongondow" }, { "moh", "Mohawk" }, { "moi", "Mboi" }, { "moj", "Monzombo" }, { "mok", "Morori" }, { "mom", "Mangue" }, { "mon", "Mongolian" }, { "moo", "Monom" }, { "mop", "Mopán Maya" }, { "moq", "Mor (Bomberai Peninsula)" }, { "mor", "Moro" }, { "mos", "Mossi" }, { "mot", "Barí" }, { "mou", "Mogum" }, { "mov", "Mohave" }, { "mow", "Moi (Congo)" }, { "mox", "Molima" }, { "moy", "Shekkacho" }, { "moz", "Mukulu" }, { "mpa", "Mpoto" }, { "mpb", "Mullukmulluk" }, { "mpc", "Mangarayi" }, { "mpd", "Machinere" }, { "mpe", "Majang" }, { "mpg", "Marba" }, { "mph", "Maung" }, { "mpi", "Mpade" }, { "mpj", "Martu Wangka" }, { "mpk", "Mbara (Chad)" }, { "mpl", "Middle Watut" }, { "mpm", "Yosondúa Mixtec" }, { "mpn", "Mindiri" }, { "mpo", "Miu" }, { "mpp", "Migabac" }, { "mpq", "Matís" }, { "mpr", "Vangunu" }, { "mps", "Dadibi" }, { "mpt", "Mian" }, { "mpu", "Makuráp" }, { "mpv", "Mungkip" }, { "mpw", "Mapidian" }, { "mpx", "Misima-Panaeati" }, { "mpy", "Mapia" }, { "mpz", "Mpi" }, { "mqa", "Maba (Indonesia)" }, { "mqb", "Mbuko" }, { "mqc", "Mangole" }, { "mqe", "Matepi" }, { "mqf", "Momuna" }, { "mqg", "Kota Bangun Kutai Malay" }, { "mqh", "Tlazoyaltepec Mixtec" }, { "mqi", "Mariri" }, { "mqj", "Mamasa" }, { "mqk", "Rajah Kabunsuwan Manobo" }, { "mql", "Mbelime" }, { "mqm", "South Marquesan" }, { "mqn", "Moronene" }, { "mqo", "Modole" }, { "mqp", "Manipa" }, { "mqq", "Minokok" }, { "mqr", "Mander" }, { "mqs", "West Makian" }, { "mqt", "Mok" }, { "mqu", "Mandari" }, { "mqv", "Mosimo" }, { "mqw", "Murupi" }, { "mqx", "Mamuju" }, { "mqy", "Manggarai" }, { "mqz", "Pano" }, { "mra", "Mlabri" }, { "mrb", "Marino" }, { "mrc", "Maricopa" }, { "mrd", "Western Magar" }, { "mre", "Martha's Vineyard Sign Language" }, { "mrf", "Elseng" }, { "mrg", "Mising" }, { "mrh", "Mara Chin" }, { "mri", "Maori" }, { "mrj", "Western Mari" }, { "mrk", "Hmwaveke" }, { "mrl", "Mortlockese" }, { "mrm", "Merlav" }, { "mrn", "Cheke Holo" }, { "mro", "Mru" }, { "mrp", "Morouas" }, { "mrq", "North Marquesan" }, { "mrr", "Maria (India)" }, { "mrs", "Maragus" }, { "mrt", "Marghi Central" }, { "mru", "Mono (Cameroon)" }, { "mrv", "Mangareva" }, { "mrw", "Maranao" }, { "mrx", "Maremgi" }, { "mry", "Mandaya" }, { "mrz", "Marind" }, { "msa", "Malay (macrolanguage)" }, { "msb", "Masbatenyo" }, { "msc", "Sankaran Maninka" }, { "msd", "Yucatec Maya Sign Language" }, { "mse", "Musey" }, { "msf", "Mekwei" }, { "msg", "Moraid" }, { "msh", "Masikoro Malagasy" }, { "msi", "Sabah Malay" }, { "msj", "Ma (Democratic Republic of Congo)" }, { "msk", "Mansaka" }, { "msl", "Molof" }, { "msm", "Agusan Manobo" }, { "msn", "Vurës" }, { "mso", "Mombum" }, { "msp", "Maritsauá" }, { "msq", "Caac" }, { "msr", "Mongolian Sign Language" }, { "mss", "West Masela" }, { "msu", "Musom" }, { "msv", "Maslam" }, { "msw", "Mansoanka" }, { "msx", "Moresada" }, { "msy", "Aruamu" }, { "msz", "Momare" }, { "mta", "Cotabato Manobo" }, { "mtb", "Anyin Morofo" }, { "mtc", "Munit" }, { "mtd", "Mualang" }, { "mte", "Mono (Solomon Islands)" }, { "mtf", "Murik (Papua New Guinea)" }, { "mtg", "Una" }, { "mth", "Munggui" }, { "mti", "Maiwa (Papua New Guinea)" }, { "mtj", "Moskona" }, { "mtk", "Mbe'" }, { "mtl", "Montol" }, { "mtm", "Mator" }, { "mtn", "Matagalpa" }, { "mto", "Totontepec Mixe" }, { "mtp", "Wichí Lhamtés Nocten" }, { "mtq", "Muong" }, { "mtr", "Mewari" }, { "mts", "Yora" }, { "mtt", "Mota" }, { "mtu", "Tututepec Mixtec" }, { "mtv", "Asaro'o" }, { "mtw", "Southern Binukidnon" }, { "mtx", "Tidaá Mixtec" }, { "mty", "Nabi" }, { "mua", "Mundang" }, { "mub", "Mubi" }, { "muc", "Ajumbu" }, { "mud", "Mednyj Aleut" }, { "mue", "Media Lengua" }, { "mug", "Musgu" }, { "muh", "Mündü" }, { "mui", "Musi" }, { "muj", "Mabire" }, { "muk", "Mugom" }, { "mul", "Multiple languages" }, { "mum", "Maiwala" }, { "muo", "Nyong" }, { "mup", "Malvi" }, { "muq", "Eastern Xiangxi Miao" }, { "mur", "Murle" }, { "mus", "Creek" }, { "mut", "Western Muria" }, { "muu", "Yaaku" }, { "muv", "Muthuvan" }, { "mux", "Bo-Ung" }, { "muy", "Muyang" }, { "muz", "Mursi" }, { "mva", "Manam" }, { "mvb", "Mattole" }, { "mvd", "Mamboru" }, { "mve", "Marwari (Pakistan)" }, { "mvf", "Peripheral Mongolian" }, { "mvg", "Yucuañe Mixtec" }, { "mvh", "Mulgi" }, { "mvi", "Miyako" }, { "mvk", "Mekmek" }, { "mvl", "Mbara (Australia)" }, { "mvm", "Muya" }, { "mvn", "Minaveha" }, { "mvo", "Marovo" }, { "mvp", "Duri" }, { "mvq", "Moere" }, { "mvr", "Marau" }, { "mvs", "Massep" }, { "mvt", "Mpotovoro" }, { "mvu", "Marfa" }, { "mvv", "Tagal Murut" }, { "mvw", "Machinga" }, { "mvx", "Meoswar" }, { "mvy", "Indus Kohistani" }, { "mvz", "Mesqan" }, { "mwa", "Mwatebu" }, { "mwb", "Juwal" }, { "mwc", "Are" }, { "mwe", "Mwera (Chimwera)" }, { "mwf", "Murrinh-Patha" }, { "mwg", "Aiklep" }, { "mwh", "Mouk-Aria" }, { "mwi", "Labo" }, { "mwj", "Maligo" }, { "mwk", "Kita Maninkakan" }, { "mwl", "Mirandese" }, { "mwm", "Sar" }, { "mwn", "Nyamwanga" }, { "mwo", "Central Maewo" }, { "mwp", "Kala Lagaw Ya" }, { "mwq", "Mün Chin" }, { "mwr", "Marwari" }, { "mws", "Mwimbi-Muthambi" }, { "mwt", "Moken" }, { "mwu", "Mittu" }, { "mwv", "Mentawai" }, { "mww", "Hmong Daw" }, { "mwx", "Mediak" }, { "mwy", "Mosiro" }, { "mwz", "Moingi" }, { "mxa", "Northwest Oaxaca Mixtec" }, { "mxb", "Tezoatlán Mixtec" }, { "mxc", "Manyika" }, { "mxd", "Modang" }, { "mxe", "Mele-Fila" }, { "mxf", "Malgbe" }, { "mxg", "Mbangala" }, { "mxh", "Mvuba" }, { "mxi", "Mozarabic" }, { "mxj", "Miju-Mishmi" }, { "mxk", "Monumbo" }, { "mxl", "Maxi Gbe" }, { "mxm", "Meramera" }, { "mxn", "Moi (Indonesia)" }, { "mxo", "Mbowe" }, { "mxp", "Tlahuitoltepec Mixe" }, { "mxq", "Juquila Mixe" }, { "mxr", "Murik (Malaysia)" }, { "mxs", "Huitepec Mixtec" }, { "mxt", "Jamiltepec Mixtec" }, { "mxu", "Mada (Cameroon)" }, { "mxv", "Metlatónoc Mixtec" }, { "mxw", "Namo" }, { "mxx", "Mahou" }, { "mxy", "Southeastern Nochixtlán Mixtec" }, { "mxz", "Central Masela" }, { "mya", "Burmese" }, { "myb", "Mbay" }, { "myc", "Mayeka" }, { "myd", "Maramba" }, { "mye", "Myene" }, { "myf", "Bambassi" }, { "myg", "Manta" }, { "myh", "Makah" }, { "myi", "Mina (India)" }, { "myj", "Mangayat" }, { "myk", "Mamara Senoufo" }, { "myl", "Moma" }, { "mym", "Me'en" }, { "myo", "Anfillo" }, { "myp", "Pirahã" }, { "myr", "Muniche" }, { "mys", "Mesmes" }, { "myu", "Mundurukú" }, { "myv", "Erzya" }, { "myw", "Muyuw" }, { "myx", "Masaaba" }, { "myy", "Macuna" }, { "myz", "Classical Mandaic" }, { "mza", "Santa María Zacatepec Mixtec" }, { "mzb", "Tumzabt" }, { "mzc", "Madagascar Sign Language" }, { "mzd", "Malimba" }, { "mze", "Morawa" }, { "mzg", "Monastic Sign Language" }, { "mzh", "Wichí Lhamtés Güisnay" }, { "mzi", "Ixcatlán Mazatec" }, { "mzj", "Manya" }, { "mzk", "Nigeria Mambila" }, { "mzl", "Mazatlán Mixe" }, { "mzm", "Mumuye" }, { "mzn", "Mazanderani" }, { "mzo", "Matipuhy" }, { "mzp", "Movima" }, { "mzq", "Mori Atas" }, { "mzr", "Marúbo" }, { "mzs", "Macanese" }, { "mzt", "Mintil" }, { "mzu", "Inapang" }, { "mzv", "Manza" }, { "mzw", "Deg" }, { "mzx", "Mawayana" }, { "mzy", "Mozambican Sign Language" }, { "mzz", "Maiadomu" }, { "naa", "Namla" }, { "nab", "Southern Nambikuára" }, { "nac", "Narak" }, { "nad", "Nijadali" }, { "nae", "Naka'ela" }, { "naf", "Nabak" }, { "nag", "Naga Pidgin" }, { "naj", "Nalu" }, { "nak", "Nakanai" }, { "nal", "Nalik" }, { "nam", "Ngan'gityemerri" }, { "nan", "Min Nan Chinese" }, { "nao", "Naaba" }, { "nap", "Neapolitan" }, { "naq", "Nama (Namibia)" }, { "nar", "Iguta" }, { "nas", "Naasioi" }, { "nat", "Hungworo" }, { "nau", "Nauru" }, { "nav", "Navajo" }, { "naw", "Nawuri" }, { "nax", "Nakwi" }, { "nay", "Narrinyeri" }, { "naz", "Coatepec Nahuatl" }, { "nba", "Nyemba" }, { "nbb", "Ndoe" }, { "nbc", "Chang Naga" }, { "nbd", "Ngbinda" }, { "nbe", "Konyak Naga" }, { "nbg", "Nagarchal" }, { "nbh", "Ngamo" }, { "nbi", "Mao Naga" }, { "nbj", "Ngarinman" }, { "nbk", "Nake" }, { "nbl", "South Ndebele" }, { "nbm", "Ngbaka Ma'bo" }, { "nbn", "Kuri" }, { "nbo", "Nkukoli" }, { "nbp", "Nnam" }, { "nbq", "Nggem" }, { "nbr", "Numana-Nunku-Gbantu-Numbu" }, { "nbs", "Namibian Sign Language" }, { "nbt", "Na" }, { "nbu", "Rongmei Naga" }, { "nbv", "Ngamambo" }, { "nbw", "Southern Ngbandi" }, { "nby", "Ningera" }, { "nca", "Iyo" }, { "ncb", "Central Nicobarese" }, { "ncc", "Ponam" }, { "ncd", "Nachering" }, { "nce", "Yale" }, { "ncf", "Notsi" }, { "ncg", "Nisga'a" }, { "nch", "Central Huasteca Nahuatl" }, { "nci", "Classical Nahuatl" }, { "ncj", "Northern Puebla Nahuatl" }, { "nck", "Nakara" }, { "ncl", "Michoacán Nahuatl" }, { "ncm", "Nambo" }, { "ncn", "Nauna" }, { "nco", "Sibe" }, { "ncp", "Ndaktup" }, { "ncr", "Ncane" }, { "ncs", "Nicaraguan Sign Language" }, { "nct", "Chothe Naga" }, { "ncu", "Chumburung" }, { "ncx", "Central Puebla Nahuatl" }, { "ncz", "Natchez" }, { "nda", "Ndasa" }, { "ndb", "Kenswei Nsei" }, { "ndc", "Ndau" }, { "ndd", "Nde-Nsele-Nta" }, { "nde", "North Ndebele" }, { "ndf", "Nadruvian" }, { "ndg", "Ndengereko" }, { "ndh", "Ndali" }, { "ndi", "Samba Leko" }, { "ndj", "Ndamba" }, { "ndk", "Ndaka" }, { "ndl", "Ndolo" }, { "ndm", "Ndam" }, { "ndn", "Ngundi" }, { "ndo", "Ndonga" }, { "ndp", "Ndo" }, { "ndq", "Ndombe" }, { "ndr", "Ndoola" }, { "nds", "Low German" }, { "ndt", "Ndunga" }, { "ndu", "Dugun" }, { "ndv", "Ndut" }, { "ndw", "Ndobo" }, { "ndx", "Nduga" }, { "ndy", "Lutos" }, { "ndz", "Ndogo" }, { "nea", "Eastern Ngad'a" }, { "neb", "Toura (Côte d'Ivoire)" }, { "nec", "Nedebang" }, { "ned", "Nde-Gbite" }, { "nee", "Nêlêmwa-Nixumwak" }, { "nef", "Nefamese" }, { "neg", "Negidal" }, { "neh", "Nyenkha" }, { "nei", "Neo-Hittite" }, { "nej", "Neko" }, { "nek", "Neku" }, { "nem", "Nemi" }, { "nen", "Nengone" }, { "neo", "Ná-Meo" }, { "nep", "Nepali (macrolanguage)" }, { "neq", "North Central Mixe" }, { "ner", "Yahadian" }, { "nes", "Bhoti Kinnauri" }, { "net", "Nete" }, { "neu", "Neo" }, { "nev", "Nyaheun" }, { "new", "Newari" }, { "nex", "Neme" }, { "ney", "Neyo" }, { "nez", "Nez Perce" }, { "nfa", "Dhao" }, { "nfd", "Ahwai" }, { "nfl", "Ayiwo" }, { "nfr", "Nafaanra" }, { "nfu", "Mfumte" }, { "nga", "Ngbaka" }, { "ngb", "Northern Ngbandi" }, { "ngc", "Ngombe (Democratic Republic of Congo)" }, { "ngd", "Ngando (Central African Republic)" }, { "nge", "Ngemba" }, { "ngg", "Ngbaka Manza" }, { "ngh", "Nu" }, { "ngi", "Ngizim" }, { "ngj", "Ngie" }, { "ngk", "Dalabon" }, { "ngl", "Lomwe" }, { "ngm", "Ngatik Men's Creole" }, { "ngn", "Ngwo" }, { "ngo", "Ngoni" }, { "ngp", "Ngulu" }, { "ngq", "Ngurimi" }, { "ngr", "Engdewu" }, { "ngs", "Gvoko" }, { "ngt", "Ngeq" }, { "ngu", "Guerrero Nahuatl" }, { "ngv", "Nagumi" }, { "ngw", "Ngwaba" }, { "ngx", "Nggwahyi" }, { "ngy", "Tibea" }, { "ngz", "Ngungwel" }, { "nha", "Nhanda" }, { "nhb", "Beng" }, { "nhc", "Tabasco Nahuatl" }, { "nhd", "Chiripá" }, { "nhe", "Eastern Huasteca Nahuatl" }, { "nhf", "Nhuwala" }, { "nhg", "Tetelcingo Nahuatl" }, { "nhh", "Nahari" }, { "nhi", "Zacatlán-Ahuacatlán-Tepetzintla Nahuatl" }, { "nhk", "Isthmus-Cosoleacaque Nahuatl" }, { "nhm", "Morelos Nahuatl" }, { "nhn", "Central Nahuatl" }, { "nho", "Takuu" }, { "nhp", "Isthmus-Pajapan Nahuatl" }, { "nhq", "Huaxcaleca Nahuatl" }, { "nhr", "Naro" }, { "nht", "Ometepec Nahuatl" }, { "nhu", "Noone" }, { "nhv", "Temascaltepec Nahuatl" }, { "nhw", "Western Huasteca Nahuatl" }, { "nhx", "Isthmus-Mecayapan Nahuatl" }, { "nhy", "Northern Oaxaca Nahuatl" }, { "nhz", "Santa María La Alta Nahuatl" }, { "nia", "Nias" }, { "nib", "Nakame" }, { "nid", "Ngandi" }, { "nie", "Niellim" }, { "nif", "Nek" }, { "nig", "Ngalakan" }, { "nih", "Nyiha (Tanzania)" }, { "nii", "Nii" }, { "nij", "Ngaju" }, { "nik", "Southern Nicobarese" }, { "nil", "Nila" }, { "nim", "Nilamba" }, { "nin", "Ninzo" }, { "nio", "Nganasan" }, { "niq", "Nandi" }, { "nir", "Nimboran" }, { "nis", "Nimi" }, { "nit", "Southeastern Kolami" }, { "niu", "Niuean" }, { "niv", "Gilyak" }, { "niw", "Nimo" }, { "nix", "Hema" }, { "niy", "Ngiti" }, { "niz", "Ningil" }, { "nja", "Nzanyi" }, { "njb", "Nocte Naga" }, { "njd", "Ndonde Hamba" }, { "njh", "Lotha Naga" }, { "nji", "Gudanji" }, { "njj", "Njen" }, { "njl", "Njalgulgule" }, { "njm", "Angami Naga" }, { "njn", "Liangmai Naga" }, { "njo", "Ao Naga" }, { "njr", "Njerep" }, { "njs", "Nisa" }, { "njt", "Ndyuka-Trio Pidgin" }, { "nju", "Ngadjunmaya" }, { "njx", "Kunyi" }, { "njy", "Njyem" }, { "njz", "Nyishi" }, { "nka", "Nkoya" }, { "nkb", "Khoibu Naga" }, { "nkc", "Nkongho" }, { "nkd", "Koireng" }, { "nke", "Duke" }, { "nkf", "Inpui Naga" }, { "nkg", "Nekgini" }, { "nkh", "Khezha Naga" }, { "nki", "Thangal Naga" }, { "nkj", "Nakai" }, { "nkk", "Nokuku" }, { "nkm", "Namat" }, { "nkn", "Nkangala" }, { "nko", "Nkonya" }, { "nkp", "Niuatoputapu" }, { "nkq", "Nkami" }, { "nkr", "Nukuoro" }, { "nks", "North Asmat" }, { "nkt", "Nyika (Tanzania)" }, { "nku", "Bouna Kulango" }, { "nkv", "Nyika (Malawi and Zambia)" }, { "nkw", "Nkutu" }, { "nkx", "Nkoroo" }, { "nkz", "Nkari" }, { "nla", "Ngombale" }, { "nlc", "Nalca" }, { "nld", "Dutch" }, { "nle", "East Nyala" }, { "nlg", "Gela" }, { "nli", "Grangali" }, { "nlj", "Nyali" }, { "nlk", "Ninia Yali" }, { "nll", "Nihali" }, { "nlo", "Ngul" }, { "nlq", "Lao Naga" }, { "nlu", "Nchumbulu" }, { "nlv", "Orizaba Nahuatl" }, { "nlw", "Walangama" }, { "nlx", "Nahali" }, { "nly", "Nyamal" }, { "nlz", "Nalögo" }, { "nma", "Maram Naga" }, { "nmb", "Big Nambas" }, { "nmc", "Ngam" }, { "nmd", "Ndumu" }, { "nme", "Mzieme Naga" }, { "nmf", "Tangkhul Naga (India)" }, { "nmg", "Kwasio" }, { "nmh", "Monsang Naga" }, { "nmi", "Nyam" }, { "nmj", "Ngombe (Central African Republic)" }, { "nmk", "Namakura" }, { "nml", "Ndemli" }, { "nmm", "Manangba" }, { "nmn", "!Xóõ" }, { "nmo", "Moyon Naga" }, { "nmp", "Nimanbur" }, { "nmq", "Nambya" }, { "nmr", "Nimbari" }, { "nms", "Letemboi" }, { "nmt", "Namonuito" }, { "nmu", "Northeast Maidu" }, { "nmv", "Ngamini" }, { "nmw", "Nimoa" }, { "nmx", "Nama (Papua New Guinea)" }, { "nmy", "Namuyi" }, { "nmz", "Nawdm" }, { "nna", "Nyangumarta" }, { "nnb", "Nande" }, { "nnc", "Nancere" }, { "nnd", "West Ambae" }, { "nne", "Ngandyera" }, { "nnf", "Ngaing" }, { "nng", "Maring Naga" }, { "nnh", "Ngiemboon" }, { "nni", "North Nuaulu" }, { "nnj", "Nyangatom" }, { "nnk", "Nankina" }, { "nnl", "Northern Rengma Naga" }, { "nnm", "Namia" }, { "nnn", "Ngete" }, { "nno", "Norwegian Nynorsk" }, { "nnp", "Wancho Naga" }, { "nnq", "Ngindo" }, { "nnr", "Narungga" }, { "nns", "Ningye" }, { "nnt", "Nanticoke" }, { "nnu", "Dwang" }, { "nnv", "Nugunu (Australia)" }, { "nnw", "Southern Nuni" }, { "nnx", "Ngong" }, { "nny", "Nyangga" }, { "nnz", "Nda'nda'" }, { "noa", "Woun Meu" }, { "nob", "Norwegian Bokmål" }, { "noc", "Nuk" }, { "nod", "Northern Thai" }, { "noe", "Nimadi" }, { "nof", "Nomane" }, { "nog", "Nogai" }, { "noh", "Nomu" }, { "noi", "Noiri" }, { "noj", "Nonuya" }, { "nok", "Nooksack" }, { "nol", "Nomlaki" }, { "nom", "Nocamán" }, { "non", "Old Norse" }, { "nop", "Numanggang" }, { "noq", "Ngongo" }, { "nor", "Norwegian" }, { "nos", "Eastern Nisu" }, { "not", "Nomatsiguenga" }, { "nou", "Ewage-Notu" }, { "nov", "Novial" }, { "now", "Nyambo" }, { "noy", "Noy" }, { "noz", "Nayi" }, { "npa", "Nar Phu" }, { "npb", "Nupbikha" }, { "npg", "Ponyo-Gongwang Naga" }, { "nph", "Phom Naga" }, { "npi", "Nepali (individual language)" }, { "npl", "Southeastern Puebla Nahuatl" }, { "npn", "Mondropolon" }, { "npo", "Pochuri Naga" }, { "nps", "Nipsan" }, { "npu", "Puimei Naga" }, { "npy", "Napu" }, { "nqg", "Southern Nago" }, { "nqk", "Kura Ede Nago" }, { "nqm", "Ndom" }, { "nqn", "Nen" }, { "nqo", "N'Ko" }, { "nqq", "Kyan-Karyaw Naga" }, { "nqy", "Akyaung Ari Naga" }, { "nra", "Ngom" }, { "nrb", "Nara" }, { "nrc", "Noric" }, { "nre", "Southern Rengma Naga" }, { "nrg", "Narango" }, { "nri", "Chokri Naga" }, { "nrk", "Ngarla" }, { "nrl", "Ngarluma" }, { "nrm", "Narom" }, { "nrn", "Norn" }, { "nrp", "North Picene" }, { "nrr", "Norra" }, { "nrt", "Northern Kalapuya" }, { "nru", "Narua" }, { "nrx", "Ngurmbur" }, { "nrz", "Lala" }, { "nsa", "Sangtam Naga" }, { "nsc", "Nshi" }, { "nsd", "Southern Nisu" }, { "nse", "Nsenga" }, { "nsf", "Northwestern Nisu" }, { "nsg", "Ngasa" }, { "nsh", "Ngoshie" }, { "nsi", "Nigerian Sign Language" }, { "nsk", "Naskapi" }, { "nsl", "Norwegian Sign Language" }, { "nsm", "Sumi Naga" }, { "nsn", "Nehan" }, { "nso", "Pedi" }, { "nsp", "Nepalese Sign Language" }, { "nsq", "Northern Sierra Miwok" }, { "nsr", "Maritime Sign Language" }, { "nss", "Nali" }, { "nst", "Tase Naga" }, { "nsu", "Sierra Negra Nahuatl" }, { "nsv", "Southwestern Nisu" }, { "nsw", "Navut" }, { "nsx", "Nsongo" }, { "nsy", "Nasal" }, { "nsz", "Nisenan" }, { "nte", "Nathembo" }, { "ntg", "Ngantangarra" }, { "nti", "Natioro" }, { "ntj", "Ngaanyatjarra" }, { "ntk", "Ikoma-Nata-Isenye" }, { "ntm", "Nateni" }, { "nto", "Ntomba" }, { "ntp", "Northern Tepehuan" }, { "ntr", "Delo" }, { "nts", "Natagaimas" }, { "ntu", "Natügu" }, { "ntw", "Nottoway" }, { "ntx", "Tangkhul Naga (Myanmar)" }, { "nty", "Mantsi" }, { "ntz", "Natanzi" }, { "nua", "Yuanga" }, { "nuc", "Nukuini" }, { "nud", "Ngala" }, { "nue", "Ngundu" }, { "nuf", "Nusu" }, { "nug", "Nungali" }, { "nuh", "Ndunda" }, { "nui", "Ngumbi" }, { "nuj", "Nyole" }, { "nuk", "Nuu-chah-nulth" }, { "nul", "Nusa Laut" }, { "num", "Niuafo'ou" }, { "nun", "Anong" }, { "nuo", "Nguôn" }, { "nup", "Nupe-Nupe-Tako" }, { "nuq", "Nukumanu" }, { "nur", "Nukuria" }, { "nus", "Nuer" }, { "nut", "Nung (Viet Nam)" }, { "nuu", "Ngbundu" }, { "nuv", "Northern Nuni" }, { "nuw", "Nguluwan" }, { "nux", "Mehek" }, { "nuy", "Nunggubuyu" }, { "nuz", "Tlamacazapa Nahuatl" }, { "nvh", "Nasarian" }, { "nvm", "Namiae" }, { "nvo", "Nyokon" }, { "nwa", "Nawathinehena" }, { "nwb", "Nyabwa" }, { "nwc", "Classical Newari" }, { "nwe", "Ngwe" }, { "nwg", "Ngayawung" }, { "nwi", "Southwest Tanna" }, { "nwm", "Nyamusa-Molo" }, { "nwo", "Nauo" }, { "nwr", "Nawaru" }, { "nwx", "Middle Newar" }, { "nwy", "Nottoway-Meherrin" }, { "nxa", "Nauete" }, { "nxd", "Ngando (Democratic Republic of Congo)" }, { "nxe", "Nage" }, { "nxg", "Ngad'a" }, { "nxi", "Nindi" }, { "nxk", "Koki Naga" }, { "nxl", "South Nuaulu" }, { "nxm", "Numidian" }, { "nxn", "Ngawun" }, { "nxq", "Naxi" }, { "nxr", "Ninggerum" }, { "nxu", "Narau" }, { "nxx", "Nafri" }, { "nya", "Nyanja" }, { "nyb", "Nyangbo" }, { "nyc", "Nyanga-li" }, { "nyd", "Nyore" }, { "nye", "Nyengo" }, { "nyf", "Giryama" }, { "nyg", "Nyindu" }, { "nyh", "Nyigina" }, { "nyi", "Ama (Sudan)" }, { "nyj", "Nyanga" }, { "nyk", "Nyaneka" }, { "nyl", "Nyeu" }, { "nym", "Nyamwezi" }, { "nyn", "Nyankole" }, { "nyo", "Nyoro" }, { "nyp", "Nyang'i" }, { "nyq", "Nayini" }, { "nyr", "Nyiha (Malawi)" }, { "nys", "Nyunga" }, { "nyt", "Nyawaygi" }, { "nyu", "Nyungwe" }, { "nyv", "Nyulnyul" }, { "nyw", "Nyaw" }, { "nyx", "Nganyaywana" }, { "nyy", "Nyakyusa-Ngonde" }, { "nza", "Tigon Mbembe" }, { "nzb", "Njebi" }, { "nzi", "Nzima" }, { "nzk", "Nzakara" }, { "nzm", "Zeme Naga" }, { "nzs", "New Zealand Sign Language" }, { "nzu", "Teke-Nzikou" }, { "nzy", "Nzakambay" }, { "nzz", "Nanga Dama Dogon" }, { "oaa", "Orok" }, { "oac", "Oroch" }, { "oar", "Old Aramaic (up to 700 BCE)" }, { "oav", "Old Avar" }, { "obi", "Obispeño" }, { "obk", "Southern Bontok" }, { "obl", "Oblo" }, { "obm", "Moabite" }, { "obo", "Obo Manobo" }, { "obr", "Old Burmese" }, { "obt", "Old Breton" }, { "obu", "Obulom" }, { "oca", "Ocaina" }, { "och", "Old Chinese" }, { "oci", "Occitan (post 1500)" }, { "oco", "Old Cornish" }, { "ocu", "Atzingo Matlatzinca" }, { "oda", "Odut" }, { "odk", "Od" }, { "odt", "Old Dutch" }, { "odu", "Odual" }, { "ofo", "Ofo" }, { "ofs", "Old Frisian" }, { "ofu", "Efutop" }, { "ogb", "Ogbia" }, { "ogc", "Ogbah" }, { "oge", "Old Georgian" }, { "ogg", "Ogbogolo" }, { "ogo", "Khana" }, { "ogu", "Ogbronuagum" }, { "oht", "Old Hittite" }, { "ohu", "Old Hungarian" }, { "oia", "Oirata" }, { "oin", "Inebu One" }, { "ojb", "Northwestern Ojibwa" }, { "ojc", "Central Ojibwa" }, { "ojg", "Eastern Ojibwa" }, { "oji", "Ojibwa" }, { "ojp", "Old Japanese" }, { "ojs", "Severn Ojibwa" }, { "ojv", "Ontong Java" }, { "ojw", "Western Ojibwa" }, { "oka", "Okanagan" }, { "okb", "Okobo" }, { "okd", "Okodia" }, { "oke", "Okpe (Southwestern Edo)" }, { "okg", "Koko Babangk" }, { "okh", "Koresh-e Rostam" }, { "oki", "Okiek" }, { "okj", "Oko-Juwoi" }, { "okk", "Kwamtim One" }, { "okl", "Old Kentish Sign Language" }, { "okm", "Middle Korean (10th-16th cent.)" }, { "okn", "Oki-No-Erabu" }, { "oko", "Old Korean (3rd-9th cent.)" }, { "okr", "Kirike" }, { "oks", "Oko-Eni-Osayen" }, { "oku", "Oku" }, { "okv", "Orokaiva" }, { "okx", "Okpe (Northwestern Edo)" }, { "ola", "Walungge" }, { "old", "Mochi" }, { "ole", "Olekha" }, { "olk", "Olkol" }, { "olm", "Oloma" }, { "olo", "Livvi" }, { "olr", "Olrat" }, { "oma", "Omaha-Ponca" }, { "omb", "East Ambae" }, { "omc", "Mochica" }, { "ome", "Omejes" }, { "omg", "Omagua" }, { "omi", "Omi" }, { "omk", "Omok" }, { "oml", "Ombo" }, { "omn", "Minoan" }, { "omo", "Utarmbung" }, { "omp", "Old Manipuri" }, { "omr", "Old Marathi" }, { "omt", "Omotik" }, { "omu", "Omurano" }, { "omw", "South Tairora" }, { "omx", "Old Mon" }, { "ona", "Ona" }, { "onb", "Lingao" }, { "one", "Oneida" }, { "ong", "Olo" }, { "oni", "Onin" }, { "onj", "Onjob" }, { "onk", "Kabore One" }, { "onn", "Onobasulu" }, { "ono", "Onondaga" }, { "onp", "Sartang" }, { "onr", "Northern One" }, { "ons", "Ono" }, { "ont", "Ontenu" }, { "onu", "Unua" }, { "onw", "Old Nubian" }, { "onx", "Onin Based Pidgin" }, { "ood", "Tohono O'odham" }, { "oog", "Ong" }, { "oon", "Önge" }, { "oor", "Oorlams" }, { "oos", "Old Ossetic" }, { "opa", "Okpamheri" }, { "opk", "Kopkaka" }, { "opm", "Oksapmin" }, { "opo", "Opao" }, { "opt", "Opata" }, { "opy", "Ofayé" }, { "ora", "Oroha" }, { "orc", "Orma" }, { "ore", "Orejón" }, { "org", "Oring" }, { "orh", "Oroqen" }, { "ori", "Oriya (macrolanguage)" }, { "orm", "Oromo" }, { "orn", "Orang Kanaq" }, { "oro", "Orokolo" }, { "orr", "Oruma" }, { "ors", "Orang Seletar" }, { "ort", "Adivasi Oriya" }, { "oru", "Ormuri" }, { "orv", "Old Russian" }, { "orw", "Oro Win" }, { "orx", "Oro" }, { "ory", "Oriya (individual language)" }, { "orz", "Ormu" }, { "osa", "Osage" }, { "osc", "Oscan" }, { "osi", "Osing" }, { "oso", "Ososo" }, { "osp", "Old Spanish" }, { "oss", "Ossetian" }, { "ost", "Osatu" }, { "osu", "Southern One" }, { "osx", "Old Saxon" }, { "ota", "Ottoman Turkish (1500-1928)" }, { "otb", "Old Tibetan" }, { "otd", "Ot Danum" }, { "ote", "Mezquital Otomi" }, { "oti", "Oti" }, { "otk", "Old Turkish" }, { "otl", "Tilapa Otomi" }, { "otm", "Eastern Highland Otomi" }, { "otn", "Tenango Otomi" }, { "otq", "Querétaro Otomi" }, { "otr", "Otoro" }, { "ots", "Estado de México Otomi" }, { "ott", "Temoaya Otomi" }, { "otu", "Otuke" }, { "otw", "Ottawa" }, { "otx", "Texcatepec Otomi" }, { "oty", "Old Tamil" }, { "otz", "Ixtenco Otomi" }, { "oua", "Tagargrent" }, { "oub", "Glio-Oubi" }, { "oue", "Oune" }, { "oui", "Old Uighur" }, { "oum", "Ouma" }, { "oun", "!O!ung" }, { "owi", "Owiniga" }, { "owl", "Old Welsh" }, { "oyb", "Oy" }, { "oyd", "Oyda" }, { "oym", "Wayampi" }, { "oyy", "Oya'oya" }, { "ozm", "Koonzime" }, { "pab", "Parecís" }, { "pac", "Pacoh" }, { "pad", "Paumarí" }, { "pae", "Pagibete" }, { "paf", "Paranawát" }, { "pag", "Pangasinan" }, { "pah", "Tenharim" }, { "pai", "Pe" }, { "pak", "Parakanã" }, { "pal", "Pahlavi" }, { "pam", "Pampanga" }, { "pan", "Panjabi" }, { "pao", "Northern Paiute" }, { "pap", "Papiamento" }, { "paq", "Parya" }, { "par", "Panamint" }, { "pas", "Papasena" }, { "pat", "Papitalai" }, { "pau", "Palauan" }, { "pav", "Pakaásnovos" }, { "paw", "Pawnee" }, { "pax", "Pankararé" }, { "pay", "Pech" }, { "paz", "Pankararú" }, { "pbb", "Páez" }, { "pbc", "Patamona" }, { "pbe", "Mezontla Popoloca" }, { "pbf", "Coyotepec Popoloca" }, { "pbg", "Paraujano" }, { "pbh", "E'ñapa Woromaipu" }, { "pbi", "Parkwa" }, { "pbl", "Mak (Nigeria)" }, { "pbn", "Kpasam" }, { "pbo", "Papel" }, { "pbp", "Badyara" }, { "pbr", "Pangwa" }, { "pbs", "Central Pame" }, { "pbt", "Southern Pashto" }, { "pbu", "Northern Pashto" }, { "pbv", "Pnar" }, { "pby", "Pyu" }, { "pca", "Santa Inés Ahuatempan Popoloca" }, { "pcb", "Pear" }, { "pcc", "Bouyei" }, { "pcd", "Picard" }, { "pce", "Ruching Palaung" }, { "pcf", "Paliyan" }, { "pcg", "Paniya" }, { "pch", "Pardhan" }, { "pci", "Duruwa" }, { "pcj", "Parenga" }, { "pck", "Paite Chin" }, { "pcl", "Pardhi" }, { "pcm", "Nigerian Pidgin" }, { "pcn", "Piti" }, { "pcp", "Pacahuara" }, { "pcw", "Pyapun" }, { "pda", "Anam" }, { "pdc", "Pennsylvania German" }, { "pdi", "Pa Di" }, { "pdn", "Podena" }, { "pdo", "Padoe" }, { "pdt", "Plautdietsch" }, { "pdu", "Kayan" }, { "pea", "Peranakan Indonesian" }, { "peb", "Eastern Pomo" }, { "ped", "Mala (Papua New Guinea)" }, { "pee", "Taje" }, { "pef", "Northeastern Pomo" }, { "peg", "Pengo" }, { "peh", "Bonan" }, { "pei", "Chichimeca-Jonaz" }, { "pej", "Northern Pomo" }, { "pek", "Penchal" }, { "pel", "Pekal" }, { "pem", "Phende" }, { "peo", "Old Persian (ca. 600-400 B.C.)" }, { "pep", "Kunja" }, { "peq", "Southern Pomo" }, { "pes", "Iranian Persian" }, { "pev", "Pémono" }, { "pex", "Petats" }, { "pey", "Petjo" }, { "pez", "Eastern Penan" }, { "pfa", "Pááfang" }, { "pfe", "Peere" }, { "pfl", "Pfaelzisch" }, { "pga", "Sudanese Creole Arabic" }, { "pgg", "Pangwali" }, { "pgi", "Pagi" }, { "pgk", "Rerep" }, { "pgl", "Primitive Irish" }, { "pgn", "Paelignian" }, { "pgs", "Pangseng" }, { "pgu", "Pagu" }, { "pha", "Pa-Hng" }, { "phd", "Phudagi" }, { "phg", "Phuong" }, { "phh", "Phukha" }, { "phk", "Phake" }, { "phl", "Phalura" }, { "phm", "Phimbi" }, { "phn", "Phoenician" }, { "pho", "Phunoi" }, { "phq", "Phana'" }, { "phr", "Pahari-Potwari" }, { "pht", "Phu Thai" }, { "phu", "Phuan" }, { "phv", "Pahlavani" }, { "phw", "Phangduwali" }, { "pia", "Pima Bajo" }, { "pib", "Yine" }, { "pic", "Pinji" }, { "pid", "Piaroa" }, { "pie", "Piro" }, { "pif", "Pingelapese" }, { "pig", "Pisabo" }, { "pih", "Pitcairn-Norfolk" }, { "pii", "Pini" }, { "pij", "Pijao" }, { "pil", "Yom" }, { "pim", "Powhatan" }, { "pin", "Piame" }, { "pio", "Piapoco" }, { "pip", "Pero" }, { "pir", "Piratapuyo" }, { "pis", "Pijin" }, { "pit", "Pitta Pitta" }, { "piu", "Pintupi-Luritja" }, { "piv", "Pileni" }, { "piw", "Pimbwe" }, { "pix", "Piu" }, { "piy", "Piya-Kwonci" }, { "piz", "Pije" }, { "pjt", "Pitjantjatjara" }, { "pka", "Ardhamāgadhī Prākrit" }, { "pkb", "Pokomo" }, { "pkc", "Paekche" }, { "pkg", "Pak-Tong" }, { "pkh", "Pankhu" }, { "pkn", "Pakanha" }, { "pko", "Pökoot" }, { "pkp", "Pukapuka" }, { "pkr", "Attapady Kurumba" }, { "pks", "Pakistan Sign Language" }, { "pkt", "Maleng" }, { "pku", "Paku" }, { "pla", "Miani" }, { "plb", "Polonombauk" }, { "plc", "Central Palawano" }, { "pld", "Polari" }, { "ple", "Palu'e" }, { "plg", "Pilagá" }, { "plh", "Paulohi" }, { "pli", "Pali" }, { "plj", "Polci" }, { "plk", "Kohistani Shina" }, { "pll", "Shwe Palaung" }, { "pln", "Palenquero" }, { "plo", "Oluta Popoluca" }, { "plp", "Palpa" }, { "plq", "Palaic" }, { "plr", "Palaka Senoufo" }, { "pls", "San Marcos Tlalcoyalco Popoloca" }, { "plt", "Plateau Malagasy" }, { "plu", "Palikúr" }, { "plv", "Southwest Palawano" }, { "plw", "Brooke's Point Palawano" }, { "ply", "Bolyu" }, { "plz", "Paluan" }, { "pma", "Paama" }, { "pmb", "Pambia" }, { "pmc", "Palumata" }, { "pmd", "Pallanganmiddang" }, { "pme", "Pwaamei" }, { "pmf", "Pamona" }, { "pmh", "Māhārāṣṭri Prākrit" }, { "pmi", "Northern Pumi" }, { "pmj", "Southern Pumi" }, { "pmk", "Pamlico" }, { "pml", "Lingua Franca" }, { "pmm", "Pomo" }, { "pmn", "Pam" }, { "pmo", "Pom" }, { "pmq", "Northern Pame" }, { "pmr", "Paynamar" }, { "pms", "Piemontese" }, { "pmt", "Tuamotuan" }, { "pmu", "Mirpur Panjabi" }, { "pmw", "Plains Miwok" }, { "pmx", "Poumei Naga" }, { "pmy", "Papuan Malay" }, { "pmz", "Southern Pame" }, { "pna", "Punan Bah-Biau" }, { "pnb", "Western Panjabi" }, { "pnc", "Pannei" }, { "pne", "Western Penan" }, { "png", "Pongu" }, { "pnh", "Penrhyn" }, { "pni", "Aoheng" }, { "pnj", "Pinjarup" }, { "pnk", "Paunaka" }, { "pnl", "Paleni" }, { "pnm", "Punan Batu 1" }, { "pnn", "Pinai-Hagahai" }, { "pno", "Panobo" }, { "pnp", "Pancana" }, { "pnq", "Pana (Burkina Faso)" }, { "pnr", "Panim" }, { "pns", "Ponosakan" }, { "pnt", "Pontic" }, { "pnu", "Jiongnai Bunu" }, { "pnv", "Pinigura" }, { "pnw", "Panytyima" }, { "pnx", "Phong-Kniang" }, { "pny", "Pinyin" }, { "pnz", "Pana (Central African Republic)" }, { "poc", "Poqomam" }, { "pod", "Ponares" }, { "poe", "San Juan Atzingo Popoloca" }, { "pof", "Poke" }, { "pog", "Potiguára" }, { "poh", "Poqomchi'" }, { "poi", "Highland Popoluca" }, { "pok", "Pokangá" }, { "pol", "Polish" }, { "pom", "Southeastern Pomo" }, { "pon", "Pohnpeian" }, { "poo", "Central Pomo" }, { "pop", "Pwapwâ" }, { "poq", "Texistepec Popoluca" }, { "por", "Portuguese" }, { "pos", "Sayula Popoluca" }, { "pot", "Potawatomi" }, { "pov", "Upper Guinea Crioulo" }, { "pow", "San Felipe Otlaltepec Popoloca" }, { "pox", "Polabian" }, { "poy", "Pogolo" }, { "ppa", "Pao" }, { "ppe", "Papi" }, { "ppi", "Paipai" }, { "ppk", "Uma" }, { "ppl", "Pipil" }, { "ppm", "Papuma" }, { "ppn", "Papapana" }, { "ppo", "Folopa" }, { "ppp", "Pelende" }, { "ppq", "Pei" }, { "pps", "San Luís Temalacayuca Popoloca" }, { "ppt", "Pare" }, { "ppu", "Papora" }, { "pqa", "Pa'a" }, { "pqm", "Malecite-Passamaquoddy" }, { "prb", "Lua'" }, { "prc", "Parachi" }, { "prd", "Parsi-Dari" }, { "pre", "Principense" }, { "prf", "Paranan" }, { "prg", "Prussian" }, { "prh", "Porohanon" }, { "pri", "Paicî" }, { "prk", "Parauk" }, { "prl", "Peruvian Sign Language" }, { "prm", "Kibiri" }, { "prn", "Prasuni" }, { "pro", "Old Provençal (to 1500)" }, { "prp", "Parsi" }, { "prq", "Ashéninka Perené" }, { "prr", "Puri" }, { "prs", "Dari" }, { "prt", "Phai" }, { "pru", "Puragi" }, { "prw", "Parawen" }, { "prx", "Purik" }, { "pry", "Pray 3" }, { "prz", "Providencia Sign Language" }, { "psa", "Asue Awyu" }, { "psc", "Persian Sign Language" }, { "psd", "Plains Indian Sign Language" }, { "pse", "Central Malay" }, { "psg", "Penang Sign Language" }, { "psh", "Southwest Pashayi" }, { "psi", "Southeast Pashayi" }, { "psl", "Puerto Rican Sign Language" }, { "psm", "Pauserna" }, { "psn", "Panasuan" }, { "pso", "Polish Sign Language" }, { "psp", "Philippine Sign Language" }, { "psq", "Pasi" }, { "psr", "Portuguese Sign Language" }, { "pss", "Kaulong" }, { "pst", "Central Pashto" }, { "psu", "Sauraseni Prākrit" }, { "psw", "Port Sandwich" }, { "psy", "Piscataway" }, { "pta", "Pai Tavytera" }, { "pth", "Pataxó Hã-Ha-Hãe" }, { "pti", "Pintiini" }, { "ptn", "Patani" }, { "pto", "Zo'é" }, { "ptp", "Patep" }, { "ptr", "Piamatsina" }, { "ptt", "Enrekang" }, { "ptu", "Bambam" }, { "ptv", "Port Vato" }, { "ptw", "Pentlatch" }, { "pty", "Pathiya" }, { "pua", "Western Highland Purepecha" }, { "pub", "Purum" }, { "puc", "Punan Merap" }, { "pud", "Punan Aput" }, { "pue", "Puelche" }, { "puf", "Punan Merah" }, { "pug", "Phuie" }, { "pui", "Puinave" }, { "puj", "Punan Tubu" }, { "puk", "Pu Ko" }, { "pum", "Puma" }, { "puo", "Puoc" }, { "pup", "Pulabu" }, { "puq", "Puquina" }, { "pur", "Puruborá" }, { "pus", "Pushto" }, { "put", "Putoh" }, { "puu", "Punu" }, { "puw", "Puluwatese" }, { "pux", "Puare" }, { "puy", "Purisimeño" }, { "puz", "Purum Naga" }, { "pwa", "Pawaia" }, { "pwb", "Panawa" }, { "pwg", "Gapapaiwa" }, { "pwi", "Patwin" }, { "pwm", "Molbog" }, { "pwn", "Paiwan" }, { "pwo", "Pwo Western Karen" }, { "pwr", "Powari" }, { "pww", "Pwo Northern Karen" }, { "pxm", "Quetzaltepec Mixe" }, { "pye", "Pye Krumen" }, { "pym", "Fyam" }, { "pyn", "Poyanáwa" }, { "pys", "Paraguayan Sign Language" }, { "pyu", "Puyuma" }, { "pyx", "Pyu (Myanmar)" }, { "pyy", "Pyen" }, { "pzn", "Para Naga" }, { "qaa", "Reserved for local use" }, { "qab", "Reserved for local use" }, { "qac", "Reserved for local use" }, { "qad", "Reserved for local use" }, { "qae", "Reserved for local use" }, { "qaf", "Reserved for local use" }, { "qag", "Reserved for local use" }, { "qah", "Reserved for local use" }, { "qai", "Reserved for local use" }, { "qaj", "Reserved for local use" }, { "qak", "Reserved for local use" }, { "qal", "Reserved for local use" }, { "qam", "Reserved for local use" }, { "qan", "Reserved for local use" }, { "qao", "Reserved for local use" }, { "qap", "Reserved for local use" }, { "qaq", "Reserved for local use" }, { "qar", "Reserved for local use" }, { "qas", "Reserved for local use" }, { "qat", "Reserved for local use" }, { "qau", "Reserved for local use" }, { "qav", "Reserved for local use" }, { "qaw", "Reserved for local use" }, { "qax", "Reserved for local use" }, { "qay", "Reserved for local use" }, { "qaz", "Reserved for local use" }, { "qba", "Reserved for local use" }, { "qbb", "Reserved for local use" }, { "qbc", "Reserved for local use" }, { "qbd", "Reserved for local use" }, { "qbe", "Reserved for local use" }, { "qbf", "Reserved for local use" }, { "qbg", "Reserved for local use" }, { "qbh", "Reserved for local use" }, { "qbi", "Reserved for local use" }, { "qbj", "Reserved for local use" }, { "qbk", "Reserved for local use" }, { "qbl", "Reserved for local use" }, { "qbm", "Reserved for local use" }, { "qbn", "Reserved for local use" }, { "qbo", "Reserved for local use" }, { "qbp", "Reserved for local use" }, { "qbq", "Reserved for local use" }, { "qbr", "Reserved for local use" }, { "qbs", "Reserved for local use" }, { "qbt", "Reserved for local use" }, { "qbu", "Reserved for local use" }, { "qbv", "Reserved for local use" }, { "qbw", "Reserved for local use" }, { "qbx", "Reserved for local use" }, { "qby", "Reserved for local use" }, { "qbz", "Reserved for local use" }, { "qca", "Reserved for local use" }, { "qcb", "Reserved for local use" }, { "qcc", "Reserved for local use" }, { "qcd", "Reserved for local use" }, { "qce", "Reserved for local use" }, { "qcf", "Reserved for local use" }, { "qcg", "Reserved for local use" }, { "qch", "Reserved for local use" }, { "qci", "Reserved for local use" }, { "qcj", "Reserved for local use" }, { "qck", "Reserved for local use" }, { "qcl", "Reserved for local use" }, { "qcm", "Reserved for local use" }, { "qcn", "Reserved for local use" }, { "qco", "Reserved for local use" }, { "qcp", "Reserved for local use" }, { "qcq", "Reserved for local use" }, { "qcr", "Reserved for local use" }, { "qcs", "Reserved for local use" }, { "qct", "Reserved for local use" }, { "qcu", "Reserved for local use" }, { "qcv", "Reserved for local use" }, { "qcw", "Reserved for local use" }, { "qcx", "Reserved for local use" }, { "qcy", "Reserved for local use" }, { "qcz", "Reserved for local use" }, { "qda", "Reserved for local use" }, { "qdb", "Reserved for local use" }, { "qdc", "Reserved for local use" }, { "qdd", "Reserved for local use" }, { "qde", "Reserved for local use" }, { "qdf", "Reserved for local use" }, { "qdg", "Reserved for local use" }, { "qdh", "Reserved for local use" }, { "qdi", "Reserved for local use" }, { "qdj", "Reserved for local use" }, { "qdk", "Reserved for local use" }, { "qdl", "Reserved for local use" }, { "qdm", "Reserved for local use" }, { "qdn", "Reserved for local use" }, { "qdo", "Reserved for local use" }, { "qdp", "Reserved for local use" }, { "qdq", "Reserved for local use" }, { "qdr", "Reserved for local use" }, { "qds", "Reserved for local use" }, { "qdt", "Reserved for local use" }, { "qdu", "Reserved for local use" }, { "qdv", "Reserved for local use" }, { "qdw", "Reserved for local use" }, { "qdx", "Reserved for local use" }, { "qdy", "Reserved for local use" }, { "qdz", "Reserved for local use" }, { "qea", "Reserved for local use" }, { "qeb", "Reserved for local use" }, { "qec", "Reserved for local use" }, { "qed", "Reserved for local use" }, { "qee", "Reserved for local use" }, { "qef", "Reserved for local use" }, { "qeg", "Reserved for local use" }, { "qeh", "Reserved for local use" }, { "qei", "Reserved for local use" }, { "qej", "Reserved for local use" }, { "qek", "Reserved for local use" }, { "qel", "Reserved for local use" }, { "qem", "Reserved for local use" }, { "qen", "Reserved for local use" }, { "qeo", "Reserved for local use" }, { "qep", "Reserved for local use" }, { "qeq", "Reserved for local use" }, { "qer", "Reserved for local use" }, { "qes", "Reserved for local use" }, { "qet", "Reserved for local use" }, { "qeu", "Reserved for local use" }, { "qev", "Reserved for local use" }, { "qew", "Reserved for local use" }, { "qex", "Reserved for local use" }, { "qey", "Reserved for local use" }, { "qez", "Reserved for local use" }, { "qfa", "Reserved for local use" }, { "qfb", "Reserved for local use" }, { "qfc", "Reserved for local use" }, { "qfd", "Reserved for local use" }, { "qfe", "Reserved for local use" }, { "qff", "Reserved for local use" }, { "qfg", "Reserved for local use" }, { "qfh", "Reserved for local use" }, { "qfi", "Reserved for local use" }, { "qfj", "Reserved for local use" }, { "qfk", "Reserved for local use" }, { "qfl", "Reserved for local use" }, { "qfm", "Reserved for local use" }, { "qfn", "Reserved for local use" }, { "qfo", "Reserved for local use" }, { "qfp", "Reserved for local use" }, { "qfq", "Reserved for local use" }, { "qfr", "Reserved for local use" }, { "qfs", "Reserved for local use" }, { "qft", "Reserved for local use" }, { "qfu", "Reserved for local use" }, { "qfv", "Reserved for local use" }, { "qfw", "Reserved for local use" }, { "qfx", "Reserved for local use" }, { "qfy", "Reserved for local use" }, { "qfz", "Reserved for local use" }, { "qga", "Reserved for local use" }, { "qgb", "Reserved for local use" }, { "qgc", "Reserved for local use" }, { "qgd", "Reserved for local use" }, { "qge", "Reserved for local use" }, { "qgf", "Reserved for local use" }, { "qgg", "Reserved for local use" }, { "qgh", "Reserved for local use" }, { "qgi", "Reserved for local use" }, { "qgj", "Reserved for local use" }, { "qgk", "Reserved for local use" }, { "qgl", "Reserved for local use" }, { "qgm", "Reserved for local use" }, { "qgn", "Reserved for local use" }, { "qgo", "Reserved for local use" }, { "qgp", "Reserved for local use" }, { "qgq", "Reserved for local use" }, { "qgr", "Reserved for local use" }, { "qgs", "Reserved for local use" }, { "qgt", "Reserved for local use" }, { "qgu", "Reserved for local use" }, { "qgv", "Reserved for local use" }, { "qgw", "Reserved for local use" }, { "qgx", "Reserved for local use" }, { "qgy", "Reserved for local use" }, { "qgz", "Reserved for local use" }, { "qha", "Reserved for local use" }, { "qhb", "Reserved for local use" }, { "qhc", "Reserved for local use" }, { "qhd", "Reserved for local use" }, { "qhe", "Reserved for local use" }, { "qhf", "Reserved for local use" }, { "qhg", "Reserved for local use" }, { "qhh", "Reserved for local use" }, { "qhi", "Reserved for local use" }, { "qhj", "Reserved for local use" }, { "qhk", "Reserved for local use" }, { "qhl", "Reserved for local use" }, { "qhm", "Reserved for local use" }, { "qhn", "Reserved for local use" }, { "qho", "Reserved for local use" }, { "qhp", "Reserved for local use" }, { "qhq", "Reserved for local use" }, { "qhr", "Reserved for local use" }, { "qhs", "Reserved for local use" }, { "qht", "Reserved for local use" }, { "qhu", "Reserved for local use" }, { "qhv", "Reserved for local use" }, { "qhw", "Reserved for local use" }, { "qhx", "Reserved for local use" }, { "qhy", "Reserved for local use" }, { "qhz", "Reserved for local use" }, { "qia", "Reserved for local use" }, { "qib", "Reserved for local use" }, { "qic", "Reserved for local use" }, { "qid", "Reserved for local use" }, { "qie", "Reserved for local use" }, { "qif", "Reserved for local use" }, { "qig", "Reserved for local use" }, { "qih", "Reserved for local use" }, { "qii", "Reserved for local use" }, { "qij", "Reserved for local use" }, { "qik", "Reserved for local use" }, { "qil", "Reserved for local use" }, { "qim", "Reserved for local use" }, { "qin", "Reserved for local use" }, { "qio", "Reserved for local use" }, { "qip", "Reserved for local use" }, { "qiq", "Reserved for local use" }, { "qir", "Reserved for local use" }, { "qis", "Reserved for local use" }, { "qit", "Reserved for local use" }, { "qiu", "Reserved for local use" }, { "qiv", "Reserved for local use" }, { "qiw", "Reserved for local use" }, { "qix", "Reserved for local use" }, { "qiy", "Reserved for local use" }, { "qiz", "Reserved for local use" }, { "qja", "Reserved for local use" }, { "qjb", "Reserved for local use" }, { "qjc", "Reserved for local use" }, { "qjd", "Reserved for local use" }, { "qje", "Reserved for local use" }, { "qjf", "Reserved for local use" }, { "qjg", "Reserved for local use" }, { "qjh", "Reserved for local use" }, { "qji", "Reserved for local use" }, { "qjj", "Reserved for local use" }, { "qjk", "Reserved for local use" }, { "qjl", "Reserved for local use" }, { "qjm", "Reserved for local use" }, { "qjn", "Reserved for local use" }, { "qjo", "Reserved for local use" }, { "qjp", "Reserved for local use" }, { "qjq", "Reserved for local use" }, { "qjr", "Reserved for local use" }, { "qjs", "Reserved for local use" }, { "qjt", "Reserved for local use" }, { "qju", "Reserved for local use" }, { "qjv", "Reserved for local use" }, { "qjw", "Reserved for local use" }, { "qjx", "Reserved for local use" }, { "qjy", "Reserved for local use" }, { "qjz", "Reserved for local use" }, { "qka", "Reserved for local use" }, { "qkb", "Reserved for local use" }, { "qkc", "Reserved for local use" }, { "qkd", "Reserved for local use" }, { "qke", "Reserved for local use" }, { "qkf", "Reserved for local use" }, { "qkg", "Reserved for local use" }, { "qkh", "Reserved for local use" }, { "qki", "Reserved for local use" }, { "qkj", "Reserved for local use" }, { "qkk", "Reserved for local use" }, { "qkl", "Reserved for local use" }, { "qkm", "Reserved for local use" }, { "qkn", "Reserved for local use" }, { "qko", "Reserved for local use" }, { "qkp", "Reserved for local use" }, { "qkq", "Reserved for local use" }, { "qkr", "Reserved for local use" }, { "qks", "Reserved for local use" }, { "qkt", "Reserved for local use" }, { "qku", "Reserved for local use" }, { "qkv", "Reserved for local use" }, { "qkw", "Reserved for local use" }, { "qkx", "Reserved for local use" }, { "qky", "Reserved for local use" }, { "qkz", "Reserved for local use" }, { "qla", "Reserved for local use" }, { "qlb", "Reserved for local use" }, { "qlc", "Reserved for local use" }, { "qld", "Reserved for local use" }, { "qle", "Reserved for local use" }, { "qlf", "Reserved for local use" }, { "qlg", "Reserved for local use" }, { "qlh", "Reserved for local use" }, { "qli", "Reserved for local use" }, { "qlj", "Reserved for local use" }, { "qlk", "Reserved for local use" }, { "qll", "Reserved for local use" }, { "qlm", "Reserved for local use" }, { "qln", "Reserved for local use" }, { "qlo", "Reserved for local use" }, { "qlp", "Reserved for local use" }, { "qlq", "Reserved for local use" }, { "qlr", "Reserved for local use" }, { "qls", "Reserved for local use" }, { "qlt", "Reserved for local use" }, { "qlu", "Reserved for local use" }, { "qlv", "Reserved for local use" }, { "qlw", "Reserved for local use" }, { "qlx", "Reserved for local use" }, { "qly", "Reserved for local use" }, { "qlz", "Reserved for local use" }, { "qma", "Reserved for local use" }, { "qmb", "Reserved for local use" }, { "qmc", "Reserved for local use" }, { "qmd", "Reserved for local use" }, { "qme", "Reserved for local use" }, { "qmf", "Reserved for local use" }, { "qmg", "Reserved for local use" }, { "qmh", "Reserved for local use" }, { "qmi", "Reserved for local use" }, { "qmj", "Reserved for local use" }, { "qmk", "Reserved for local use" }, { "qml", "Reserved for local use" }, { "qmm", "Reserved for local use" }, { "qmn", "Reserved for local use" }, { "qmo", "Reserved for local use" }, { "qmp", "Reserved for local use" }, { "qmq", "Reserved for local use" }, { "qmr", "Reserved for local use" }, { "qms", "Reserved for local use" }, { "qmt", "Reserved for local use" }, { "qmu", "Reserved for local use" }, { "qmv", "Reserved for local use" }, { "qmw", "Reserved for local use" }, { "qmx", "Reserved for local use" }, { "qmy", "Reserved for local use" }, { "qmz", "Reserved for local use" }, { "qna", "Reserved for local use" }, { "qnb", "Reserved for local use" }, { "qnc", "Reserved for local use" }, { "qnd", "Reserved for local use" }, { "qne", "Reserved for local use" }, { "qnf", "Reserved for local use" }, { "qng", "Reserved for local use" }, { "qnh", "Reserved for local use" }, { "qni", "Reserved for local use" }, { "qnj", "Reserved for local use" }, { "qnk", "Reserved for local use" }, { "qnl", "Reserved for local use" }, { "qnm", "Reserved for local use" }, { "qnn", "Reserved for local use" }, { "qno", "Reserved for local use" }, { "qnp", "Reserved for local use" }, { "qnq", "Reserved for local use" }, { "qnr", "Reserved for local use" }, { "qns", "Reserved for local use" }, { "qnt", "Reserved for local use" }, { "qnu", "Reserved for local use" }, { "qnv", "Reserved for local use" }, { "qnw", "Reserved for local use" }, { "qnx", "Reserved for local use" }, { "qny", "Reserved for local use" }, { "qnz", "Reserved for local use" }, { "qoa", "Reserved for local use" }, { "qob", "Reserved for local use" }, { "qoc", "Reserved for local use" }, { "qod", "Reserved for local use" }, { "qoe", "Reserved for local use" }, { "qof", "Reserved for local use" }, { "qog", "Reserved for local use" }, { "qoh", "Reserved for local use" }, { "qoi", "Reserved for local use" }, { "qoj", "Reserved for local use" }, { "qok", "Reserved for local use" }, { "qol", "Reserved for local use" }, { "qom", "Reserved for local use" }, { "qon", "Reserved for local use" }, { "qoo", "Reserved for local use" }, { "qop", "Reserved for local use" }, { "qoq", "Reserved for local use" }, { "qor", "Reserved for local use" }, { "qos", "Reserved for local use" }, { "qot", "Reserved for local use" }, { "qou", "Reserved for local use" }, { "qov", "Reserved for local use" }, { "qow", "Reserved for local use" }, { "qox", "Reserved for local use" }, { "qoy", "Reserved for local use" }, { "qoz", "Reserved for local use" }, { "qpa", "Reserved for local use" }, { "qpb", "Reserved for local use" }, { "qpc", "Reserved for local use" }, { "qpd", "Reserved for local use" }, { "qpe", "Reserved for local use" }, { "qpf", "Reserved for local use" }, { "qpg", "Reserved for local use" }, { "qph", "Reserved for local use" }, { "qpi", "Reserved for local use" }, { "qpj", "Reserved for local use" }, { "qpk", "Reserved for local use" }, { "qpl", "Reserved for local use" }, { "qpm", "Reserved for local use" }, { "qpn", "Reserved for local use" }, { "qpo", "Reserved for local use" }, { "qpp", "Reserved for local use" }, { "qpq", "Reserved for local use" }, { "qpr", "Reserved for local use" }, { "qps", "Reserved for local use" }, { "qpt", "Reserved for local use" }, { "qpu", "Reserved for local use" }, { "qpv", "Reserved for local use" }, { "qpw", "Reserved for local use" }, { "qpx", "Reserved for local use" }, { "qpy", "Reserved for local use" }, { "qpz", "Reserved for local use" }, { "qqa", "Reserved for local use" }, { "qqb", "Reserved for local use" }, { "qqc", "Reserved for local use" }, { "qqd", "Reserved for local use" }, { "qqe", "Reserved for local use" }, { "qqf", "Reserved for local use" }, { "qqg", "Reserved for local use" }, { "qqh", "Reserved for local use" }, { "qqi", "Reserved for local use" }, { "qqj", "Reserved for local use" }, { "qqk", "Reserved for local use" }, { "qql", "Reserved for local use" }, { "qqm", "Reserved for local use" }, { "qqn", "Reserved for local use" }, { "qqo", "Reserved for local use" }, { "qqp", "Reserved for local use" }, { "qqq", "Reserved for local use" }, { "qqr", "Reserved for local use" }, { "qqs", "Reserved for local use" }, { "qqt", "Reserved for local use" }, { "qqu", "Reserved for local use" }, { "qqv", "Reserved for local use" }, { "qqw", "Reserved for local use" }, { "qqx", "Reserved for local use" }, { "qqy", "Reserved for local use" }, { "qqz", "Reserved for local use" }, { "qra", "Reserved for local use" }, { "qrb", "Reserved for local use" }, { "qrc", "Reserved for local use" }, { "qrd", "Reserved for local use" }, { "qre", "Reserved for local use" }, { "qrf", "Reserved for local use" }, { "qrg", "Reserved for local use" }, { "qrh", "Reserved for local use" }, { "qri", "Reserved for local use" }, { "qrj", "Reserved for local use" }, { "qrk", "Reserved for local use" }, { "qrl", "Reserved for local use" }, { "qrm", "Reserved for local use" }, { "qrn", "Reserved for local use" }, { "qro", "Reserved for local use" }, { "qrp", "Reserved for local use" }, { "qrq", "Reserved for local use" }, { "qrr", "Reserved for local use" }, { "qrs", "Reserved for local use" }, { "qrt", "Reserved for local use" }, { "qru", "Reserved for local use" }, { "qrv", "Reserved for local use" }, { "qrw", "Reserved for local use" }, { "qrx", "Reserved for local use" }, { "qry", "Reserved for local use" }, { "qrz", "Reserved for local use" }, { "qsa", "Reserved for local use" }, { "qsb", "Reserved for local use" }, { "qsc", "Reserved for local use" }, { "qsd", "Reserved for local use" }, { "qse", "Reserved for local use" }, { "qsf", "Reserved for local use" }, { "qsg", "Reserved for local use" }, { "qsh", "Reserved for local use" }, { "qsi", "Reserved for local use" }, { "qsj", "Reserved for local use" }, { "qsk", "Reserved for local use" }, { "qsl", "Reserved for local use" }, { "qsm", "Reserved for local use" }, { "qsn", "Reserved for local use" }, { "qso", "Reserved for local use" }, { "qsp", "Reserved for local use" }, { "qsq", "Reserved for local use" }, { "qsr", "Reserved for local use" }, { "qss", "Reserved for local use" }, { "qst", "Reserved for local use" }, { "qsu", "Reserved for local use" }, { "qsv", "Reserved for local use" }, { "qsw", "Reserved for local use" }, { "qsx", "Reserved for local use" }, { "qsy", "Reserved for local use" }, { "qsz", "Reserved for local use" }, { "qta", "Reserved for local use" }, { "qtb", "Reserved for local use" }, { "qtc", "Reserved for local use" }, { "qtd", "Reserved for local use" }, { "qte", "Reserved for local use" }, { "qtf", "Reserved for local use" }, { "qtg", "Reserved for local use" }, { "qth", "Reserved for local use" }, { "qti", "Reserved for local use" }, { "qtj", "Reserved for local use" }, { "qtk", "Reserved for local use" }, { "qtl", "Reserved for local use" }, { "qtm", "Reserved for local use" }, { "qtn", "Reserved for local use" }, { "qto", "Reserved for local use" }, { "qtp", "Reserved for local use" }, { "qtq", "Reserved for local use" }, { "qtr", "Reserved for local use" }, { "qts", "Reserved for local use" }, { "qtt", "Reserved for local use" }, { "qtu", "Reserved for local use" }, { "qtv", "Reserved for local use" }, { "qtw", "Reserved for local use" }, { "qtx", "Reserved for local use" }, { "qty", "Reserved for local use" }, { "qtz", "Reserved for local use" }, { "qua", "Quapaw" }, { "qub", "Huallaga Huánuco Quechua" }, { "quc", "K'iche'" }, { "qud", "Calderón Highland Quichua" }, { "que", "Quechua" }, { "quf", "Lambayeque Quechua" }, { "qug", "Chimborazo Highland Quichua" }, { "quh", "South Bolivian Quechua" }, { "qui", "Quileute" }, { "quk", "Chachapoyas Quechua" }, { "qul", "North Bolivian Quechua" }, { "qum", "Sipacapense" }, { "qun", "Quinault" }, { "qup", "Southern Pastaza Quechua" }, { "quq", "Quinqui" }, { "qur", "Yanahuanca Pasco Quechua" }, { "qus", "Santiago del Estero Quichua" }, { "quv", "Sacapulteco" }, { "quw", "Tena Lowland Quichua" }, { "qux", "Yauyos Quechua" }, { "quy", "Ayacucho Quechua" }, { "quz", "Cusco Quechua" }, { "qva", "Ambo-Pasco Quechua" }, { "qvc", "Cajamarca Quechua" }, { "qve", "Eastern Apurímac Quechua" }, { "qvh", "Huamalíes-Dos de Mayo Huánuco Quechua" }, { "qvi", "Imbabura Highland Quichua" }, { "qvj", "Loja Highland Quichua" }, { "qvl", "Cajatambo North Lima Quechua" }, { "qvm", "Margos-Yarowilca-Lauricocha Quechua" }, { "qvn", "North Junín Quechua" }, { "qvo", "Napo Lowland Quechua" }, { "qvp", "Pacaraos Quechua" }, { "qvs", "San Martín Quechua" }, { "qvw", "Huaylla Wanca Quechua" }, { "qvy", "Queyu" }, { "qvz", "Northern Pastaza Quichua" }, { "qwa", "Corongo Ancash Quechua" }, { "qwc", "Classical Quechua" }, { "qwh", "Huaylas Ancash Quechua" }, { "qwm", "Kuman (Russia)" }, { "qws", "Sihuas Ancash Quechua" }, { "qwt", "Kwalhioqua-Tlatskanai" }, { "qxa", "Chiquián Ancash Quechua" }, { "qxc", "Chincha Quechua" }, { "qxh", "Panao Huánuco Quechua" }, { "qxl", "Salasaca Highland Quichua" }, { "qxn", "Northern Conchucos Ancash Quechua" }, { "qxo", "Southern Conchucos Ancash Quechua" }, { "qxp", "Puno Quechua" }, { "qxq", "Qashqa'i" }, { "qxr", "Cañar Highland Quichua" }, { "qxs", "Southern Qiang" }, { "qxt", "Santa Ana de Tusi Pasco Quechua" }, { "qxu", "Arequipa-La Unión Quechua" }, { "qxw", "Jauja Wanca Quechua" }, { "qya", "Quenya" }, { "qyp", "Quiripi" }, { "raa", "Dungmali" }, { "rab", "Camling" }, { "rac", "Rasawa" }, { "rad", "Rade" }, { "raf", "Western Meohang" }, { "rag", "Logooli" }, { "rah", "Rabha" }, { "rai", "Ramoaaina" }, { "raj", "Rajasthani" }, { "rak", "Tulu-Bohuai" }, { "ral", "Ralte" }, { "ram", "Canela" }, { "ran", "Riantana" }, { "rao", "Rao" }, { "rap", "Rapanui" }, { "raq", "Saam" }, { "rar", "Rarotongan" }, { "ras", "Tegali" }, { "rat", "Razajerdi" }, { "rau", "Raute" }, { "rav", "Sampang" }, { "raw", "Rawang" }, { "rax", "Rang" }, { "ray", "Rapa" }, { "raz", "Rahambuu" }, { "rbb", "Rumai Palaung" }, { "rbk", "Northern Bontok" }, { "rbl", "Miraya Bikol" }, { "rbp", "Barababaraba" }, { "rcf", "Réunion Creole French" }, { "rdb", "Rudbari" }, { "rea", "Rerau" }, { "reb", "Rembong" }, { "ree", "Rejang Kayan" }, { "reg", "Kara (Tanzania)" }, { "rei", "Reli" }, { "rej", "Rejang" }, { "rel", "Rendille" }, { "rem", "Remo" }, { "ren", "Rengao" }, { "rer", "Rer Bare" }, { "res", "Reshe" }, { "ret", "Retta" }, { "rey", "Reyesano" }, { "rga", "Roria" }, { "rge", "Romano-Greek" }, { "rgk", "Rangkas" }, { "rgn", "Romagnol" }, { "rgr", "Resígaro" }, { "rgs", "Southern Roglai" }, { "rgu", "Ringgou" }, { "rhg", "Rohingya" }, { "rhp", "Yahang" }, { "ria", "Riang (India)" }, { "rie", "Rien" }, { "rif", "Tarifit" }, { "ril", "Riang (Myanmar)" }, { "rim", "Nyaturu" }, { "rin", "Nungu" }, { "rir", "Ribun" }, { "rit", "Ritarungo" }, { "riu", "Riung" }, { "rjg", "Rajong" }, { "rji", "Raji" }, { "rjs", "Rajbanshi" }, { "rka", "Kraol" }, { "rkb", "Rikbaktsa" }, { "rkh", "Rakahanga-Manihiki" }, { "rki", "Rakhine" }, { "rkm", "Marka" }, { "rkt", "Rangpuri" }, { "rkw", "Arakwal" }, { "rma", "Rama" }, { "rmb", "Rembarunga" }, { "rmc", "Carpathian Romani" }, { "rmd", "Traveller Danish" }, { "rme", "Angloromani" }, { "rmf", "Kalo Finnish Romani" }, { "rmg", "Traveller Norwegian" }, { "rmh", "Murkim" }, { "rmi", "Lomavren" }, { "rmk", "Romkun" }, { "rml", "Baltic Romani" }, { "rmm", "Roma" }, { "rmn", "Balkan Romani" }, { "rmo", "Sinte Romani" }, { "rmp", "Rempi" }, { "rmq", "Caló" }, { "rms", "Romanian Sign Language" }, { "rmt", "Domari" }, { "rmu", "Tavringer Romani" }, { "rmv", "Romanova" }, { "rmw", "Welsh Romani" }, { "rmx", "Romam" }, { "rmy", "Vlax Romani" }, { "rmz", "Marma" }, { "rna", "Runa" }, { "rnd", "Ruund" }, { "rng", "Ronga" }, { "rnl", "Ranglong" }, { "rnn", "Roon" }, { "rnp", "Rongpo" }, { "rnr", "Nari Nari" }, { "rnw", "Rungwa" }, { "rob", "Tae'" }, { "roc", "Cacgia Roglai" }, { "rod", "Rogo" }, { "roe", "Ronji" }, { "rof", "Rombo" }, { "rog", "Northern Roglai" }, { "roh", "Romansh" }, { "rol", "Romblomanon" }, { "rom", "Romany" }, { "ron", "Romanian" }, { "roo", "Rotokas" }, { "rop", "Kriol" }, { "ror", "Rongga" }, { "rou", "Runga" }, { "row", "Dela-Oenale" }, { "rpn", "Repanbitip" }, { "rpt", "Rapting" }, { "rri", "Ririo" }, { "rro", "Waima" }, { "rrt", "Arritinngithigh" }, { "rsb", "Romano-Serbian" }, { "rsi", "Rennellese Sign Language" }, { "rsl", "Russian Sign Language" }, { "rtc", "Rungtu Chin" }, { "rth", "Ratahan" }, { "rtm", "Rotuman" }, { "rtw", "Rathawi" }, { "rub", "Gungu" }, { "ruc", "Ruuli" }, { "rue", "Rusyn" }, { "ruf", "Luguru" }, { "rug", "Roviana" }, { "ruh", "Ruga" }, { "rui", "Rufiji" }, { "ruk", "Che" }, { "run", "Rundi" }, { "ruo", "Istro Romanian" }, { "rup", "Macedo-Romanian" }, { "ruq", "Megleno Romanian" }, { "rus", "Russian" }, { "rut", "Rutul" }, { "ruu", "Lanas Lobu" }, { "ruy", "Mala (Nigeria)" }, { "ruz", "Ruma" }, { "rwa", "Rawo" }, { "rwk", "Rwa" }, { "rwm", "Amba (Uganda)" }, { "rwo", "Rawa" }, { "rwr", "Marwari (India)" }, { "rxd", "Ngardi" }, { "rxw", "Karuwali" }, { "ryn", "Northern Amami-Oshima" }, { "rys", "Yaeyama" }, { "ryu", "Central Okinawan" }, { "saa", "Saba" }, { "sab", "Buglere" }, { "sac", "Meskwaki" }, { "sad", "Sandawe" }, { "sae", "Sabanê" }, { "saf", "Safaliba" }, { "sag", "Sango" }, { "sah", "Yakut" }, { "saj", "Sahu" }, { "sak", "Sake" }, { "sam", "Samaritan Aramaic" }, { "san", "Sanskrit" }, { "sao", "Sause" }, { "sap", "Sanapaná" }, { "saq", "Samburu" }, { "sar", "Saraveca" }, { "sas", "Sasak" }, { "sat", "Santali" }, { "sau", "Saleman" }, { "sav", "Saafi-Saafi" }, { "saw", "Sawi" }, { "sax", "Sa" }, { "say", "Saya" }, { "saz", "Saurashtra" }, { "sba", "Ngambay" }, { "sbb", "Simbo" }, { "sbc", "Kele (Papua New Guinea)" }, { "sbd", "Southern Samo" }, { "sbe", "Saliba" }, { "sbf", "Shabo" }, { "sbg", "Seget" }, { "sbh", "Sori-Harengan" }, { "sbi", "Seti" }, { "sbj", "Surbakhal" }, { "sbk", "Safwa" }, { "sbl", "Botolan Sambal" }, { "sbm", "Sagala" }, { "sbn", "Sindhi Bhil" }, { "sbo", "Sabüm" }, { "sbp", "Sangu (Tanzania)" }, { "sbq", "Sileibi" }, { "sbr", "Sembakung Murut" }, { "sbs", "Subiya" }, { "sbt", "Kimki" }, { "sbu", "Stod Bhoti" }, { "sbv", "Sabine" }, { "sbw", "Simba" }, { "sbx", "Seberuang" }, { "sby", "Soli" }, { "sbz", "Sara Kaba" }, { "scb", "Chut" }, { "sce", "Dongxiang" }, { "scf", "San Miguel Creole French" }, { "scg", "Sanggau" }, { "sch", "Sakachep" }, { "sci", "Sri Lankan Creole Malay" }, { "sck", "Sadri" }, { "scl", "Shina" }, { "scn", "Sicilian" }, { "sco", "Scots" }, { "scp", "Helambu Sherpa" }, { "scq", "Sa'och" }, { "scs", "North Slavey" }, { "scu", "Shumcho" }, { "scv", "Sheni" }, { "scw", "Sha" }, { "scx", "Sicel" }, { "sda", "Toraja-Sa'dan" }, { "sdb", "Shabak" }, { "sdc", "Sassarese Sardinian" }, { "sde", "Surubu" }, { "sdf", "Sarli" }, { "sdg", "Savi" }, { "sdh", "Southern Kurdish" }, { "sdj", "Suundi" }, { "sdk", "Sos Kundi" }, { "sdl", "Saudi Arabian Sign Language" }, { "sdm", "Semandang" }, { "sdn", "Gallurese Sardinian" }, { "sdo", "Bukar-Sadung Bidayuh" }, { "sdp", "Sherdukpen" }, { "sdr", "Oraon Sadri" }, { "sds", "Sened" }, { "sdt", "Shuadit" }, { "sdu", "Sarudu" }, { "sdx", "Sibu Melanau" }, { "sdz", "Sallands" }, { "sea", "Semai" }, { "seb", "Shempire Senoufo" }, { "sec", "Sechelt" }, { "sed", "Sedang" }, { "see", "Seneca" }, { "sef", "Cebaara Senoufo" }, { "seg", "Segeju" }, { "seh", "Sena" }, { "sei", "Seri" }, { "sej", "Sene" }, { "sek", "Sekani" }, { "sel", "Selkup" }, { "sen", "Nanerigé Sénoufo" }, { "seo", "Suarmin" }, { "sep", "Sìcìté Sénoufo" }, { "seq", "Senara Sénoufo" }, { "ser", "Serrano" }, { "ses", "Koyraboro Senni Songhai" }, { "set", "Sentani" }, { "seu", "Serui-Laut" }, { "sev", "Nyarafolo Senoufo" }, { "sew", "Sewa Bay" }, { "sey", "Secoya" }, { "sez", "Senthang Chin" }, { "sfb", "Langue des signes de Belgique Francophone" }, { "sfe", "Eastern Subanen" }, { "sfm", "Small Flowery Miao" }, { "sfs", "South African Sign Language" }, { "sfw", "Sehwi" }, { "sga", "Old Irish (to 900)" }, { "sgb", "Mag-antsi Ayta" }, { "sgc", "Kipsigis" }, { "sgd", "Surigaonon" }, { "sge", "Segai" }, { "sgg", "Swiss-German Sign Language" }, { "sgh", "Shughni" }, { "sgi", "Suga" }, { "sgj", "Surgujia" }, { "sgk", "Sangkong" }, { "sgm", "Singa" }, { "sgo", "Songa" }, { "sgp", "Singpho" }, { "sgr", "Sangisari" }, { "sgs", "Samogitian" }, { "sgt", "Brokpake" }, { "sgu", "Salas" }, { "sgw", "Sebat Bet Gurage" }, { "sgx", "Sierra Leone Sign Language" }, { "sgy", "Sanglechi" }, { "sgz", "Sursurunga" }, { "sha", "Shall-Zwall" }, { "shb", "Ninam" }, { "shc", "Sonde" }, { "shd", "Kundal Shahi" }, { "she", "Sheko" }, { "shg", "Shua" }, { "shh", "Shoshoni" }, { "shi", "Tachelhit" }, { "shj", "Shatt" }, { "shk", "Shilluk" }, { "shl", "Shendu" }, { "shm", "Shahrudi" }, { "shn", "Shan" }, { "sho", "Shanga" }, { "shp", "Shipibo-Conibo" }, { "shq", "Sala" }, { "shr", "Shi" }, { "shs", "Shuswap" }, { "sht", "Shasta" }, { "shu", "Chadian Arabic" }, { "shv", "Shehri" }, { "shw", "Shwai" }, { "shx", "She" }, { "shy", "Tachawit" }, { "shz", "Syenara Senoufo" }, { "sia", "Akkala Sami" }, { "sib", "Sebop" }, { "sid", "Sidamo" }, { "sie", "Simaa" }, { "sif", "Siamou" }, { "sig", "Paasaal" }, { "sih", "Zire" }, { "sii", "Shom Peng" }, { "sij", "Numbami" }, { "sik", "Sikiana" }, { "sil", "Tumulung Sisaala" }, { "sim", "Mende (Papua New Guinea)" }, { "sin", "Sinhala" }, { "sip", "Sikkimese" }, { "siq", "Sonia" }, { "sir", "Siri" }, { "sis", "Siuslaw" }, { "siu", "Sinagen" }, { "siv", "Sumariup" }, { "siw", "Siwai" }, { "six", "Sumau" }, { "siy", "Sivandi" }, { "siz", "Siwi" }, { "sja", "Epena" }, { "sjb", "Sajau Basap" }, { "sjd", "Kildin Sami" }, { "sje", "Pite Sami" }, { "sjg", "Assangori" }, { "sjk", "Kemi Sami" }, { "sjl", "Sajalong" }, { "sjm", "Mapun" }, { "sjn", "Sindarin" }, { "sjo", "Xibe" }, { "sjp", "Surjapuri" }, { "sjr", "Siar-Lak" }, { "sjs", "Senhaja De Srair" }, { "sjt", "Ter Sami" }, { "sju", "Ume Sami" }, { "sjw", "Shawnee" }, { "ska", "Skagit" }, { "skb", "Saek" }, { "skc", "Ma Manda" }, { "skd", "Southern Sierra Miwok" }, { "ske", "Seke (Vanuatu)" }, { "skf", "Sakirabiá" }, { "skg", "Sakalava Malagasy" }, { "skh", "Sikule" }, { "ski", "Sika" }, { "skj", "Seke (Nepal)" }, { "skk", "Sok" }, { "skm", "Kutong" }, { "skn", "Kolibugan Subanon" }, { "sko", "Seko Tengah" }, { "skp", "Sekapan" }, { "skq", "Sininkere" }, { "skr", "Seraiki" }, { "sks", "Maia" }, { "skt", "Sakata" }, { "sku", "Sakao" }, { "skv", "Skou" }, { "skw", "Skepi Creole Dutch" }, { "skx", "Seko Padang" }, { "sky", "Sikaiana" }, { "skz", "Sekar" }, { "slc", "Sáliba" }, { "sld", "Sissala" }, { "sle", "Sholaga" }, { "slf", "Swiss-Italian Sign Language" }, { "slg", "Selungai Murut" }, { "slh", "Southern Puget Sound Salish" }, { "sli", "Lower Silesian" }, { "slj", "Salumá" }, { "slk", "Slovak" }, { "sll", "Salt-Yui" }, { "slm", "Pangutaran Sama" }, { "sln", "Salinan" }, { "slp", "Lamaholot" }, { "slq", "Salchuq" }, { "slr", "Salar" }, { "sls", "Singapore Sign Language" }, { "slt", "Sila" }, { "slu", "Selaru" }, { "slv", "Slovenian" }, { "slw", "Sialum" }, { "slx", "Salampasu" }, { "sly", "Selayar" }, { "slz", "Ma'ya" }, { "sma", "Southern Sami" }, { "smb", "Simbari" }, { "smc", "Som" }, { "smd", "Sama" }, { "sme", "Northern Sami" }, { "smf", "Auwe" }, { "smg", "Simbali" }, { "smh", "Samei" }, { "smj", "Lule Sami" }, { "smk", "Bolinao" }, { "sml", "Central Sama" }, { "smm", "Musasa" }, { "smn", "Inari Sami" }, { "smo", "Samoan" }, { "smp", "Samaritan" }, { "smq", "Samo" }, { "smr", "Simeulue" }, { "sms", "Skolt Sami" }, { "smt", "Simte" }, { "smu", "Somray" }, { "smv", "Samvedi" }, { "smw", "Sumbawa" }, { "smx", "Samba" }, { "smy", "Semnani" }, { "smz", "Simeku" }, { "sna", "Shona" }, { "snb", "Sebuyau" }, { "snc", "Sinaugoro" }, { "snd", "Sindhi" }, { "sne", "Bau Bidayuh" }, { "snf", "Noon" }, { "sng", "Sanga (Democratic Republic of Congo)" }, { "snh", "Shinabo" }, { "sni", "Sensi" }, { "snj", "Riverain Sango" }, { "snk", "Soninke" }, { "snl", "Sangil" }, { "snm", "Southern Ma'di" }, { "snn", "Siona" }, { "sno", "Snohomish" }, { "snp", "Siane" }, { "snq", "Sangu (Gabon)" }, { "snr", "Sihan" }, { "sns", "South West Bay" }, { "snu", "Senggi" }, { "snv", "Sa'ban" }, { "snw", "Selee" }, { "snx", "Sam" }, { "sny", "Saniyo-Hiyewe" }, { "snz", "Sinsauru" }, { "soa", "Thai Song" }, { "sob", "Sobei" }, { "soc", "So (Democratic Republic of Congo)" }, { "sod", "Songoora" }, { "soe", "Songomeno" }, { "sog", "Sogdian" }, { "soh", "Aka" }, { "soi", "Sonha" }, { "soj", "Soi" }, { "sok", "Sokoro" }, { "sol", "Solos" }, { "som", "Somali" }, { "soo", "Songo" }, { "sop", "Songe" }, { "soq", "Kanasi" }, { "sor", "Somrai" }, { "sos", "Seeku" }, { "sot", "Southern Sotho" }, { "sou", "Southern Thai" }, { "sov", "Sonsorol" }, { "sow", "Sowanda" }, { "sox", "Swo" }, { "soy", "Miyobe" }, { "soz", "Temi" }, { "spa", "Spanish" }, { "spb", "Sepa (Indonesia)" }, { "spc", "Sapé" }, { "spd", "Saep" }, { "spe", "Sepa (Papua New Guinea)" }, { "spg", "Sian" }, { "spi", "Saponi" }, { "spk", "Sengo" }, { "spl", "Selepet" }, { "spm", "Akukem" }, { "spo", "Spokane" }, { "spp", "Supyire Senoufo" }, { "spq", "Loreto-Ucayali Spanish" }, { "spr", "Saparua" }, { "sps", "Saposa" }, { "spt", "Spiti Bhoti" }, { "spu", "Sapuan" }, { "spv", "Sambalpuri" }, { "spx", "South Picene" }, { "spy", "Sabaot" }, { "sqa", "Shama-Sambuga" }, { "sqh", "Shau" }, { "sqi", "Albanian" }, { "sqk", "Albanian Sign Language" }, { "sqm", "Suma" }, { "sqn", "Susquehannock" }, { "sqo", "Sorkhei" }, { "sqq", "Sou" }, { "sqr", "Siculo Arabic" }, { "sqs", "Sri Lankan Sign Language" }, { "sqt", "Soqotri" }, { "squ", "Squamish" }, { "sra", "Saruga" }, { "srb", "Sora" }, { "src", "Logudorese Sardinian" }, { "srd", "Sardinian" }, { "sre", "Sara" }, { "srf", "Nafi" }, { "srg", "Sulod" }, { "srh", "Sarikoli" }, { "sri", "Siriano" }, { "srk", "Serudung Murut" }, { "srl", "Isirawa" }, { "srm", "Saramaccan" }, { "srn", "Sranan Tongo" }, { "sro", "Campidanese Sardinian" }, { "srp", "Serbian" }, { "srq", "Sirionó" }, { "srr", "Serer" }, { "srs", "Sarsi" }, { "srt", "Sauri" }, { "sru", "Suruí" }, { "srv", "Southern Sorsoganon" }, { "srw", "Serua" }, { "srx", "Sirmauri" }, { "sry", "Sera" }, { "srz", "Shahmirzadi" }, { "ssb", "Southern Sama" }, { "ssc", "Suba-Simbiti" }, { "ssd", "Siroi" }, { "sse", "Balangingi" }, { "ssf", "Thao" }, { "ssg", "Seimat" }, { "ssh", "Shihhi Arabic" }, { "ssi", "Sansi" }, { "ssj", "Sausi" }, { "ssk", "Sunam" }, { "ssl", "Western Sisaala" }, { "ssm", "Semnam" }, { "ssn", "Waata" }, { "sso", "Sissano" }, { "ssp", "Spanish Sign Language" }, { "ssq", "So'a" }, { "ssr", "Swiss-French Sign Language" }, { "sss", "Sô" }, { "sst", "Sinasina" }, { "ssu", "Susuami" }, { "ssv", "Shark Bay" }, { "ssw", "Swati" }, { "ssx", "Samberigi" }, { "ssy", "Saho" }, { "ssz", "Sengseng" }, { "sta", "Settla" }, { "stb", "Northern Subanen" }, { "std", "Sentinel" }, { "ste", "Liana-Seti" }, { "stf", "Seta" }, { "stg", "Trieng" }, { "sth", "Shelta" }, { "sti", "Bulo Stieng" }, { "stj", "Matya Samo" }, { "stk", "Arammba" }, { "stl", "Stellingwerfs" }, { "stm", "Setaman" }, { "stn", "Owa" }, { "sto", "Stoney" }, { "stp", "Southeastern Tepehuan" }, { "stq", "Saterfriesisch" }, { "str", "Straits Salish" }, { "sts", "Shumashti" }, { "stt", "Budeh Stieng" }, { "stu", "Samtao" }, { "stv", "Silt'e" }, { "stw", "Satawalese" }, { "sty", "Siberian Tatar" }, { "sua", "Sulka" }, { "sub", "Suku" }, { "suc", "Western Subanon" }, { "sue", "Suena" }, { "sug", "Suganga" }, { "sui", "Suki" }, { "suj", "Shubi" }, { "suk", "Sukuma" }, { "sun", "Sundanese" }, { "suq", "Suri" }, { "sur", "Mwaghavul" }, { "sus", "Susu" }, { "sut", "Subtiaba" }, { "suv", "Puroik" }, { "suw", "Sumbwa" }, { "sux", "Sumerian" }, { "suy", "Suyá" }, { "suz", "Sunwar" }, { "sva", "Svan" }, { "svb", "Ulau-Suain" }, { "svc", "Vincentian Creole English" }, { "sve", "Serili" }, { "svk", "Slovakian Sign Language" }, { "svm", "Slavomolisano" }, { "svr", "Savara" }, { "svs", "Savosavo" }, { "svx", "Skalvian" }, { "swa", "Swahili (macrolanguage)" }, { "swb", "Maore Comorian" }, { "swc", "Congo Swahili" }, { "swe", "Swedish" }, { "swf", "Sere" }, { "swg", "Swabian" }, { "swh", "Swahili (individual language)" }, { "swi", "Sui" }, { "swj", "Sira" }, { "swk", "Malawi Sena" }, { "swl", "Swedish Sign Language" }, { "swm", "Samosa" }, { "swn", "Sawknah" }, { "swo", "Shanenawa" }, { "swp", "Suau" }, { "swq", "Sharwa" }, { "swr", "Saweru" }, { "sws", "Seluwasan" }, { "swt", "Sawila" }, { "swu", "Suwawa" }, { "swv", "Shekhawati" }, { "sww", "Sowa" }, { "swx", "Suruahá" }, { "swy", "Sarua" }, { "sxb", "Suba" }, { "sxc", "Sicanian" }, { "sxe", "Sighu" }, { "sxg", "Shixing" }, { "sxk", "Southern Kalapuya" }, { "sxl", "Selian" }, { "sxm", "Samre" }, { "sxn", "Sangir" }, { "sxo", "Sorothaptic" }, { "sxr", "Saaroa" }, { "sxs", "Sasaru" }, { "sxu", "Upper Saxon" }, { "sxw", "Saxwe Gbe" }, { "sya", "Siang" }, { "syb", "Central Subanen" }, { "syc", "Classical Syriac" }, { "syi", "Seki" }, { "syk", "Sukur" }, { "syl", "Sylheti" }, { "sym", "Maya Samo" }, { "syn", "Senaya" }, { "syo", "Suoy" }, { "syr", "Syriac" }, { "sys", "Sinyar" }, { "syw", "Kagate" }, { "syy", "Al-Sayyid Bedouin Sign Language" }, { "sza", "Semelai" }, { "szb", "Ngalum" }, { "szc", "Semaq Beri" }, { "szd", "Seru" }, { "sze", "Seze" }, { "szg", "Sengele" }, { "szl", "Silesian" }, { "szn", "Sula" }, { "szp", "Suabo" }, { "szv", "Isu (Fako Division)" }, { "szw", "Sawai" }, { "taa", "Lower Tanana" }, { "tab", "Tabassaran" }, { "tac", "Lowland Tarahumara" }, { "tad", "Tause" }, { "tae", "Tariana" }, { "taf", "Tapirapé" }, { "tag", "Tagoi" }, { "tah", "Tahitian" }, { "taj", "Eastern Tamang" }, { "tak", "Tala" }, { "tal", "Tal" }, { "tam", "Tamil" }, { "tan", "Tangale" }, { "tao", "Yami" }, { "tap", "Taabwa" }, { "taq", "Tamasheq" }, { "tar", "Central Tarahumara" }, { "tas", "Tay Boi" }, { "tat", "Tatar" }, { "tau", "Upper Tanana" }, { "tav", "Tatuyo" }, { "taw", "Tai" }, { "tax", "Tamki" }, { "tay", "Atayal" }, { "taz", "Tocho" }, { "tba", "Aikanã" }, { "tbb", "Tapeba" }, { "tbc", "Takia" }, { "tbd", "Kaki Ae" }, { "tbe", "Tanimbili" }, { "tbf", "Mandara" }, { "tbg", "North Tairora" }, { "tbh", "Thurawal" }, { "tbi", "Gaam" }, { "tbj", "Tiang" }, { "tbk", "Calamian Tagbanwa" }, { "tbl", "Tboli" }, { "tbm", "Tagbu" }, { "tbn", "Barro Negro Tunebo" }, { "tbo", "Tawala" }, { "tbp", "Taworta" }, { "tbr", "Tumtum" }, { "tbs", "Tanguat" }, { "tbt", "Tembo (Kitembo)" }, { "tbu", "Tubar" }, { "tbv", "Tobo" }, { "tbw", "Tagbanwa" }, { "tbx", "Kapin" }, { "tby", "Tabaru" }, { "tbz", "Ditammari" }, { "tca", "Ticuna" }, { "tcb", "Tanacross" }, { "tcc", "Datooga" }, { "tcd", "Tafi" }, { "tce", "Southern Tutchone" }, { "tcf", "Malinaltepec Me'phaa" }, { "tcg", "Tamagario" }, { "tch", "Turks And Caicos Creole English" }, { "tci", "Wára" }, { "tck", "Tchitchege" }, { "tcl", "Taman (Myanmar)" }, { "tcm", "Tanahmerah" }, { "tcn", "Tichurong" }, { "tco", "Taungyo" }, { "tcp", "Tawr Chin" }, { "tcq", "Kaiy" }, { "tcs", "Torres Strait Creole" }, { "tct", "T'en" }, { "tcu", "Southeastern Tarahumara" }, { "tcw", "Tecpatlán Totonac" }, { "tcx", "Toda" }, { "tcy", "Tulu" }, { "tcz", "Thado Chin" }, { "tda", "Tagdal" }, { "tdb", "Panchpargania" }, { "tdc", "Emberá-Tadó" }, { "tdd", "Tai Nüa" }, { "tde", "Tiranige Diga Dogon" }, { "tdf", "Talieng" }, { "tdg", "Western Tamang" }, { "tdh", "Thulung" }, { "tdi", "Tomadino" }, { "tdj", "Tajio" }, { "tdk", "Tambas" }, { "tdl", "Sur" }, { "tdn", "Tondano" }, { "tdo", "Teme" }, { "tdq", "Tita" }, { "tdr", "Todrah" }, { "tds", "Doutai" }, { "tdt", "Tetun Dili" }, { "tdu", "Tempasuk Dusun" }, { "tdv", "Toro" }, { "tdx", "Tandroy-Mahafaly Malagasy" }, { "tdy", "Tadyawan" }, { "tea", "Temiar" }, { "teb", "Tetete" }, { "tec", "Terik" }, { "ted", "Tepo Krumen" }, { "tee", "Huehuetla Tepehua" }, { "tef", "Teressa" }, { "teg", "Teke-Tege" }, { "teh", "Tehuelche" }, { "tei", "Torricelli" }, { "tek", "Ibali Teke" }, { "tel", "Telugu" }, { "tem", "Timne" }, { "ten", "Tama (Colombia)" }, { "teo", "Teso" }, { "tep", "Tepecano" }, { "teq", "Temein" }, { "ter", "Tereno" }, { "tes", "Tengger" }, { "tet", "Tetum" }, { "teu", "Soo" }, { "tev", "Teor" }, { "tew", "Tewa (USA)" }, { "tex", "Tennet" }, { "tey", "Tulishi" }, { "tfi", "Tofin Gbe" }, { "tfn", "Tanaina" }, { "tfo", "Tefaro" }, { "tfr", "Teribe" }, { "tft", "Ternate" }, { "tga", "Sagalla" }, { "tgb", "Tobilung" }, { "tgc", "Tigak" }, { "tgd", "Ciwogai" }, { "tge", "Eastern Gorkha Tamang" }, { "tgf", "Chalikha" }, { "tgh", "Tobagonian Creole English" }, { "tgi", "Lawunuia" }, { "tgj", "Tagin" }, { "tgk", "Tajik" }, { "tgl", "Tagalog" }, { "tgn", "Tandaganon" }, { "tgo", "Sudest" }, { "tgp", "Tangoa" }, { "tgq", "Tring" }, { "tgr", "Tareng" }, { "tgs", "Nume" }, { "tgt", "Central Tagbanwa" }, { "tgu", "Tanggu" }, { "tgv", "Tingui-Boto" }, { "tgw", "Tagwana Senoufo" }, { "tgx", "Tagish" }, { "tgy", "Togoyo" }, { "tgz", "Tagalaka" }, { "tha", "Thai" }, { "thc", "Tai Hang Tong" }, { "thd", "Thayore" }, { "the", "Chitwania Tharu" }, { "thf", "Thangmi" }, { "thh", "Northern Tarahumara" }, { "thi", "Tai Long" }, { "thk", "Tharaka" }, { "thl", "Dangaura Tharu" }, { "thm", "Aheu" }, { "thn", "Thachanadan" }, { "thp", "Thompson" }, { "thq", "Kochila Tharu" }, { "thr", "Rana Tharu" }, { "ths", "Thakali" }, { "tht", "Tahltan" }, { "thu", "Thuri" }, { "thv", "Tahaggart Tamahaq" }, { "thw", "Thudam" }, { "thx", "The" }, { "thy", "Tha" }, { "thz", "Tayart Tamajeq" }, { "tia", "Tidikelt Tamazight" }, { "tic", "Tira" }, { "tid", "Tidong" }, { "tif", "Tifal" }, { "tig", "Tigre" }, { "tih", "Timugon Murut" }, { "tii", "Tiene" }, { "tij", "Tilung" }, { "tik", "Tikar" }, { "til", "Tillamook" }, { "tim", "Timbe" }, { "tin", "Tindi" }, { "tio", "Teop" }, { "tip", "Trimuris" }, { "tiq", "Tiéfo" }, { "tir", "Tigrinya" }, { "tis", "Masadiit Itneg" }, { "tit", "Tinigua" }, { "tiu", "Adasen" }, { "tiv", "Tiv" }, { "tiw", "Tiwi" }, { "tix", "Southern Tiwa" }, { "tiy", "Tiruray" }, { "tiz", "Tai Hongjin" }, { "tja", "Tajuasohn" }, { "tjg", "Tunjung" }, { "tji", "Northern Tujia" }, { "tjl", "Tai Laing" }, { "tjm", "Timucua" }, { "tjn", "Tonjon" }, { "tjo", "Temacine Tamazight" }, { "tjs", "Southern Tujia" }, { "tju", "Tjurruru" }, { "tjw", "Djabwurrung" }, { "tka", "Truká" }, { "tkb", "Buksa" }, { "tkd", "Tukudede" }, { "tke", "Takwane" }, { "tkf", "Tukumanféd" }, { "tkg", "Tesaka Malagasy" }, { "tkl", "Tokelau" }, { "tkm", "Takelma" }, { "tkn", "Toku-No-Shima" }, { "tkp", "Tikopia" }, { "tkq", "Tee" }, { "tkr", "Tsakhur" }, { "tks", "Takestani" }, { "tkt", "Kathoriya Tharu" }, { "tku", "Upper Necaxa Totonac" }, { "tkw", "Teanu" }, { "tkx", "Tangko" }, { "tkz", "Takua" }, { "tla", "Southwestern Tepehuan" }, { "tlb", "Tobelo" }, { "tlc", "Yecuatla Totonac" }, { "tld", "Talaud" }, { "tlf", "Telefol" }, { "tlg", "Tofanma" }, { "tlh", "Klingon" }, { "tli", "Tlingit" }, { "tlj", "Talinga-Bwisi" }, { "tlk", "Taloki" }, { "tll", "Tetela" }, { "tlm", "Tolomako" }, { "tln", "Talondo'" }, { "tlo", "Talodi" }, { "tlp", "Filomena Mata-Coahuitlán Totonac" }, { "tlq", "Tai Loi" }, { "tlr", "Talise" }, { "tls", "Tambotalo" }, { "tlt", "Teluti" }, { "tlu", "Tulehu" }, { "tlv", "Taliabu" }, { "tlx", "Khehek" }, { "tly", "Talysh" }, { "tma", "Tama (Chad)" }, { "tmb", "Katbol" }, { "tmc", "Tumak" }, { "tmd", "Haruai" }, { "tme", "Tremembé" }, { "tmf", "Toba-Maskoy" }, { "tmg", "Ternateño" }, { "tmh", "Tamashek" }, { "tmi", "Tutuba" }, { "tmj", "Samarokena" }, { "tmk", "Northwestern Tamang" }, { "tml", "Tamnim Citak" }, { "tmm", "Tai Thanh" }, { "tmn", "Taman (Indonesia)" }, { "tmo", "Temoq" }, { "tmp", "Tai Mène" }, { "tmq", "Tumleo" }, { "tmr", "Jewish Babylonian Aramaic (ca. 200-1200 CE)" }, { "tms", "Tima" }, { "tmt", "Tasmate" }, { "tmu", "Iau" }, { "tmv", "Tembo (Motembo)" }, { "tmw", "Temuan" }, { "tmy", "Tami" }, { "tmz", "Tamanaku" }, { "tna", "Tacana" }, { "tnb", "Western Tunebo" }, { "tnc", "Tanimuca-Retuarã" }, { "tnd", "Angosturas Tunebo" }, { "tne", "Tinoc Kallahan" }, { "tng", "Tobanga" }, { "tnh", "Maiani" }, { "tni", "Tandia" }, { "tnk", "Kwamera" }, { "tnl", "Lenakel" }, { "tnm", "Tabla" }, { "tnn", "North Tanna" }, { "tno", "Toromono" }, { "tnp", "Whitesands" }, { "tnq", "Taino" }, { "tnr", "Ménik" }, { "tns", "Tenis" }, { "tnt", "Tontemboan" }, { "tnu", "Tay Khang" }, { "tnv", "Tangchangya" }, { "tnw", "Tonsawang" }, { "tnx", "Tanema" }, { "tny", "Tongwe" }, { "tnz", "Tonga (Thailand)" }, { "tob", "Toba" }, { "toc", "Coyutla Totonac" }, { "tod", "Toma" }, { "toe", "Tomedes" }, { "tof", "Gizrra" }, { "tog", "Tonga (Nyasa)" }, { "toh", "Gitonga" }, { "toi", "Tonga (Zambia)" }, { "toj", "Tojolabal" }, { "tol", "Tolowa" }, { "tom", "Tombulu" }, { "ton", "Tonga (Tonga Islands)" }, { "too", "Xicotepec De Juárez Totonac" }, { "top", "Papantla Totonac" }, { "toq", "Toposa" }, { "tor", "Togbo-Vara Banda" }, { "tos", "Highland Totonac" }, { "tou", "Tho" }, { "tov", "Upper Taromi" }, { "tow", "Jemez" }, { "tox", "Tobian" }, { "toy", "Topoiyo" }, { "toz", "To" }, { "tpa", "Taupota" }, { "tpc", "Azoyú Me'phaa" }, { "tpe", "Tippera" }, { "tpf", "Tarpia" }, { "tpg", "Kula" }, { "tpi", "Tok Pisin" }, { "tpj", "Tapieté" }, { "tpk", "Tupinikin" }, { "tpl", "Tlacoapa Me'phaa" }, { "tpm", "Tampulma" }, { "tpn", "Tupinambá" }, { "tpo", "Tai Pao" }, { "tpp", "Pisaflores Tepehua" }, { "tpq", "Tukpa" }, { "tpr", "Tuparí" }, { "tpt", "Tlachichilco Tepehua" }, { "tpu", "Tampuan" }, { "tpv", "Tanapag" }, { "tpw", "Tupí" }, { "tpx", "Acatepec Me'phaa" }, { "tpy", "Trumai" }, { "tpz", "Tinputz" }, { "tqb", "Tembé" }, { "tql", "Lehali" }, { "tqm", "Turumsa" }, { "tqn", "Tenino" }, { "tqo", "Toaripi" }, { "tqp", "Tomoip" }, { "tqq", "Tunni" }, { "tqr", "Torona" }, { "tqt", "Western Totonac" }, { "tqu", "Touo" }, { "tqw", "Tonkawa" }, { "tra", "Tirahi" }, { "trb", "Terebu" }, { "trc", "Copala Triqui" }, { "trd", "Turi" }, { "tre", "East Tarangan" }, { "trf", "Trinidadian Creole English" }, { "trg", "Lishán Didán" }, { "trh", "Turaka" }, { "tri", "Trió" }, { "trj", "Toram" }, { "trl", "Traveller Scottish" }, { "trm", "Tregami" }, { "trn", "Trinitario" }, { "tro", "Tarao Naga" }, { "trp", "Kok Borok" }, { "trq", "San Martín Itunyoso Triqui" }, { "trr", "Taushiro" }, { "trs", "Chicahuaxtla Triqui" }, { "trt", "Tunggare" }, { "tru", "Turoyo" }, { "trv", "Taroko" }, { "trw", "Torwali" }, { "trx", "Tringgus-Sembaan Bidayuh" }, { "try", "Turung" }, { "trz", "Torá" }, { "tsa", "Tsaangi" }, { "tsb", "Tsamai" }, { "tsc", "Tswa" }, { "tsd", "Tsakonian" }, { "tse", "Tunisian Sign Language" }, { "tsf", "Southwestern Tamang" }, { "tsg", "Tausug" }, { "tsh", "Tsuvan" }, { "tsi", "Tsimshian" }, { "tsj", "Tshangla" }, { "tsk", "Tseku" }, { "tsl", "Ts'ün-Lao" }, { "tsm", "Turkish Sign Language" }, { "tsn", "Tswana" }, { "tso", "Tsonga" }, { "tsp", "Northern Toussian" }, { "tsq", "Thai Sign Language" }, { "tsr", "Akei" }, { "tss", "Taiwan Sign Language" }, { "tst", "Tondi Songway Kiini" }, { "tsu", "Tsou" }, { "tsv", "Tsogo" }, { "tsw", "Tsishingini" }, { "tsx", "Mubami" }, { "tsy", "Tebul Sign Language" }, { "tsz", "Purepecha" }, { "tta", "Tutelo" }, { "ttb", "Gaa" }, { "ttc", "Tektiteko" }, { "ttd", "Tauade" }, { "tte", "Bwanabwana" }, { "ttf", "Tuotomb" }, { "ttg", "Tutong" }, { "tth", "Upper Ta'oih" }, { "tti", "Tobati" }, { "ttj", "Tooro" }, { "ttk", "Totoro" }, { "ttl", "Totela" }, { "ttm", "Northern Tutchone" }, { "ttn", "Towei" }, { "tto", "Lower Ta'oih" }, { "ttp", "Tombelala" }, { "ttq", "Tawallammat Tamajaq" }, { "ttr", "Tera" }, { "tts", "Northeastern Thai" }, { "ttt", "Muslim Tat" }, { "ttu", "Torau" }, { "ttv", "Titan" }, { "ttw", "Long Wat" }, { "tty", "Sikaritai" }, { "ttz", "Tsum" }, { "tua", "Wiarumus" }, { "tub", "Tübatulabal" }, { "tuc", "Mutu" }, { "tud", "Tuxá" }, { "tue", "Tuyuca" }, { "tuf", "Central Tunebo" }, { "tug", "Tunia" }, { "tuh", "Taulil" }, { "tui", "Tupuri" }, { "tuj", "Tugutil" }, { "tuk", "Turkmen" }, { "tul", "Tula" }, { "tum", "Tumbuka" }, { "tun", "Tunica" }, { "tuo", "Tucano" }, { "tuq", "Tedaga" }, { "tur", "Turkish" }, { "tus", "Tuscarora" }, { "tuu", "Tututni" }, { "tuv", "Turkana" }, { "tux", "Tuxináwa" }, { "tuy", "Tugen" }, { "tuz", "Turka" }, { "tva", "Vaghua" }, { "tvd", "Tsuvadi" }, { "tve", "Te'un" }, { "tvk", "Southeast Ambrym" }, { "tvl", "Tuvalu" }, { "tvm", "Tela-Masbuar" }, { "tvn", "Tavoyan" }, { "tvo", "Tidore" }, { "tvs", "Taveta" }, { "tvt", "Tutsa Naga" }, { "tvu", "Tunen" }, { "tvw", "Sedoa" }, { "tvy", "Timor Pidgin" }, { "twa", "Twana" }, { "twb", "Western Tawbuid" }, { "twc", "Teshenawa" }, { "twd", "Twents" }, { "twe", "Tewa (Indonesia)" }, { "twf", "Northern Tiwa" }, { "twg", "Tereweng" }, { "twh", "Tai Dón" }, { "twi", "Twi" }, { "twl", "Tawara" }, { "twm", "Tawang Monpa" }, { "twn", "Twendi" }, { "two", "Tswapong" }, { "twp", "Ere" }, { "twq", "Tasawaq" }, { "twr", "Southwestern Tarahumara" }, { "twt", "Turiwára" }, { "twu", "Termanu" }, { "tww", "Tuwari" }, { "twx", "Tewe" }, { "twy", "Tawoyan" }, { "txa", "Tombonuo" }, { "txb", "Tokharian B" }, { "txc", "Tsetsaut" }, { "txe", "Totoli" }, { "txg", "Tangut" }, { "txh", "Thracian" }, { "txi", "Ikpeng" }, { "txm", "Tomini" }, { "txn", "West Tarangan" }, { "txo", "Toto" }, { "txq", "Tii" }, { "txr", "Tartessian" }, { "txs", "Tonsea" }, { "txt", "Citak" }, { "txu", "Kayapó" }, { "txx", "Tatana" }, { "txy", "Tanosy Malagasy" }, { "tya", "Tauya" }, { "tye", "Kyanga" }, { "tyh", "O'du" }, { "tyi", "Teke-Tsaayi" }, { "tyj", "Tai Do" }, { "tyl", "Thu Lao" }, { "tyn", "Kombai" }, { "typ", "Thaypan" }, { "tyr", "Tai Daeng" }, { "tys", "Tày Sa Pa" }, { "tyt", "Tày Tac" }, { "tyu", "Kua" }, { "tyv", "Tuvinian" }, { "tyx", "Teke-Tyee" }, { "tyz", "Tày" }, { "tza", "Tanzanian Sign Language" }, { "tzh", "Tzeltal" }, { "tzj", "Tz'utujil" }, { "tzl", "Talossan" }, { "tzm", "Central Atlas Tamazight" }, { "tzn", "Tugun" }, { "tzo", "Tzotzil" }, { "tzx", "Tabriak" }, { "uam", "Uamué" }, { "uan", "Kuan" }, { "uar", "Tairuma" }, { "uba", "Ubang" }, { "ubi", "Ubi" }, { "ubl", "Buhi'non Bikol" }, { "ubr", "Ubir" }, { "ubu", "Umbu-Ungu" }, { "uby", "Ubykh" }, { "uda", "Uda" }, { "ude", "Udihe" }, { "udg", "Muduga" }, { "udi", "Udi" }, { "udj", "Ujir" }, { "udl", "Wuzlam" }, { "udm", "Udmurt" }, { "udu", "Uduk" }, { "ues", "Kioko" }, { "ufi", "Ufim" }, { "uga", "Ugaritic" }, { "ugb", "Kuku-Ugbanh" }, { "uge", "Ughele" }, { "ugn", "Ugandan Sign Language" }, { "ugo", "Ugong" }, { "ugy", "Uruguayan Sign Language" }, { "uha", "Uhami" }, { "uhn", "Damal" }, { "uig", "Uighur" }, { "uis", "Uisai" }, { "uiv", "Iyive" }, { "uji", "Tanjijili" }, { "uka", "Kaburi" }, { "ukg", "Ukuriguma" }, { "ukh", "Ukhwejo" }, { "ukl", "Ukrainian Sign Language" }, { "ukp", "Ukpe-Bayobiri" }, { "ukq", "Ukwa" }, { "ukr", "Ukrainian" }, { "uks", "Urubú-Kaapor Sign Language" }, { "uku", "Ukue" }, { "ukw", "Ukwuani-Aboh-Ndoni" }, { "uky", "Kuuk-Yak" }, { "ula", "Fungwa" }, { "ulb", "Ulukwumi" }, { "ulc", "Ulch" }, { "ule", "Lule" }, { "ulf", "Usku" }, { "uli", "Ulithian" }, { "ulk", "Meriam" }, { "ull", "Ullatan" }, { "ulm", "Ulumanda'" }, { "uln", "Unserdeutsch" }, { "ulu", "Uma' Lung" }, { "ulw", "Ulwa" }, { "uma", "Umatilla" }, { "umb", "Umbundu" }, { "umc", "Marrucinian" }, { "umd", "Umbindhamu" }, { "umg", "Umbuygamu" }, { "umi", "Ukit" }, { "umm", "Umon" }, { "umn", "Makyan Naga" }, { "umo", "Umotína" }, { "ump", "Umpila" }, { "umr", "Umbugarla" }, { "ums", "Pendau" }, { "umu", "Munsee" }, { "una", "North Watut" }, { "und", "Undetermined" }, { "une", "Uneme" }, { "ung", "Ngarinyin" }, { "unk", "Enawené-Nawé" }, { "unm", "Unami" }, { "unn", "Kurnai" }, { "unr", "Mundari" }, { "unu", "Unubahe" }, { "unx", "Munda" }, { "unz", "Unde Kaili" }, { "uok", "Uokha" }, { "upi", "Umeda" }, { "upv", "Uripiv-Wala-Rano-Atchin" }, { "ura", "Urarina" }, { "urb", "Urubú-Kaapor" }, { "urc", "Urningangg" }, { "urd", "Urdu" }, { "ure", "Uru" }, { "urf", "Uradhi" }, { "urg", "Urigina" }, { "urh", "Urhobo" }, { "uri", "Urim" }, { "urk", "Urak Lawoi'" }, { "url", "Urali" }, { "urm", "Urapmin" }, { "urn", "Uruangnirin" }, { "uro", "Ura (Papua New Guinea)" }, { "urp", "Uru-Pa-In" }, { "urr", "Lehalurup" }, { "urt", "Urat" }, { "uru", "Urumi" }, { "urv", "Uruava" }, { "urw", "Sop" }, { "urx", "Urimo" }, { "ury", "Orya" }, { "urz", "Uru-Eu-Wau-Wau" }, { "usa", "Usarufa" }, { "ush", "Ushojo" }, { "usi", "Usui" }, { "usk", "Usaghade" }, { "usp", "Uspanteco" }, { "usu", "Uya" }, { "uta", "Otank" }, { "ute", "Ute-Southern Paiute" }, { "utp", "Amba (Solomon Islands)" }, { "utr", "Etulo" }, { "utu", "Utu" }, { "uum", "Urum" }, { "uun", "Kulon-Pazeh" }, { "uur", "Ura (Vanuatu)" }, { "uuu", "U" }, { "uve", "West Uvean" }, { "uvh", "Uri" }, { "uvl", "Lote" }, { "uwa", "Kuku-Uwanh" }, { "uya", "Doko-Uyanga" }, { "uzb", "Uzbek" }, { "uzn", "Northern Uzbek" }, { "uzs", "Southern Uzbek" }, { "vaa", "Vaagri Booli" }, { "vae", "Vale" }, { "vaf", "Vafsi" }, { "vag", "Vagla" }, { "vah", "Varhadi-Nagpuri" }, { "vai", "Vai" }, { "vaj", "Vasekela Bushman" }, { "val", "Vehes" }, { "vam", "Vanimo" }, { "van", "Valman" }, { "vao", "Vao" }, { "vap", "Vaiphei" }, { "var", "Huarijio" }, { "vas", "Vasavi" }, { "vau", "Vanuma" }, { "vav", "Varli" }, { "vay", "Wayu" }, { "vbb", "Southeast Babar" }, { "vbk", "Southwestern Bontok" }, { "vec", "Venetian" }, { "ved", "Veddah" }, { "vel", "Veluws" }, { "vem", "Vemgo-Mabas" }, { "ven", "Venda" }, { "veo", "Ventureño" }, { "vep", "Veps" }, { "ver", "Mom Jango" }, { "vgr", "Vaghri" }, { "vgt", "Vlaamse Gebarentaal" }, { "vic", "Virgin Islands Creole English" }, { "vid", "Vidunda" }, { "vie", "Vietnamese" }, { "vif", "Vili" }, { "vig", "Viemo" }, { "vil", "Vilela" }, { "vin", "Vinza" }, { "vis", "Vishavan" }, { "vit", "Viti" }, { "viv", "Iduna" }, { "vka", "Kariyarra" }, { "vki", "Ija-Zuba" }, { "vkj", "Kujarge" }, { "vkk", "Kaur" }, { "vkl", "Kulisusu" }, { "vkm", "Kamakan" }, { "vko", "Kodeoha" }, { "vkp", "Korlai Creole Portuguese" }, { "vkt", "Tenggarong Kutai Malay" }, { "vku", "Kurrama" }, { "vlp", "Valpei" }, { "vls", "Vlaams" }, { "vma", "Martuyhunira" }, { "vmb", "Barbaram" }, { "vmc", "Juxtlahuaca Mixtec" }, { "vmd", "Mudu Koraga" }, { "vme", "East Masela" }, { "vmf", "Mainfränkisch" }, { "vmg", "Lungalunga" }, { "vmh", "Maraghei" }, { "vmi", "Miwa" }, { "vmj", "Ixtayutla Mixtec" }, { "vmk", "Makhuwa-Shirima" }, { "vml", "Malgana" }, { "vmm", "Mitlatongo Mixtec" }, { "vmp", "Soyaltepec Mazatec" }, { "vmq", "Soyaltepec Mixtec" }, { "vmr", "Marenje" }, { "vms", "Moksela" }, { "vmu", "Muluridyi" }, { "vmv", "Valley Maidu" }, { "vmw", "Makhuwa" }, { "vmx", "Tamazola Mixtec" }, { "vmy", "Ayautla Mazatec" }, { "vmz", "Mazatlán Mazatec" }, { "vnk", "Vano" }, { "vnm", "Vinmavis" }, { "vnp", "Vunapu" }, { "vol", "Volapük" }, { "vor", "Voro" }, { "vot", "Votic" }, { "vra", "Vera'a" }, { "vro", "Võro" }, { "vrs", "Varisi" }, { "vrt", "Burmbar" }, { "vsi", "Moldova Sign Language" }, { "vsl", "Venezuelan Sign Language" }, { "vsv", "Valencian Sign Language" }, { "vto", "Vitou" }, { "vum", "Vumbu" }, { "vun", "Vunjo" }, { "vut", "Vute" }, { "vwa", "Awa (China)" }, { "waa", "Walla Walla" }, { "wab", "Wab" }, { "wac", "Wasco-Wishram" }, { "wad", "Wandamen" }, { "wae", "Walser" }, { "waf", "Wakoná" }, { "wag", "Wa'ema" }, { "wah", "Watubela" }, { "wai", "Wares" }, { "waj", "Waffa" }, { "wal", "Wolaytta" }, { "wam", "Wampanoag" }, { "wan", "Wan" }, { "wao", "Wappo" }, { "wap", "Wapishana" }, { "waq", "Wageman" }, { "war", "Waray (Philippines)" }, { "was", "Washo" }, { "wat", "Kaninuwa" }, { "wau", "Waurá" }, { "wav", "Waka" }, { "waw", "Waiwai" }, { "wax", "Watam" }, { "way", "Wayana" }, { "waz", "Wampur" }, { "wba", "Warao" }, { "wbb", "Wabo" }, { "wbe", "Waritai" }, { "wbf", "Wara" }, { "wbh", "Wanda" }, { "wbi", "Vwanji" }, { "wbj", "Alagwa" }, { "wbk", "Waigali" }, { "wbl", "Wakhi" }, { "wbm", "Wa" }, { "wbp", "Warlpiri" }, { "wbq", "Waddar" }, { "wbr", "Wagdi" }, { "wbt", "Wanman" }, { "wbv", "Wajarri" }, { "wbw", "Woi" }, { "wca", "Yanomámi" }, { "wci", "Waci Gbe" }, { "wdd", "Wandji" }, { "wdg", "Wadaginam" }, { "wdj", "Wadjiginy" }, { "wdk", "Wadikali" }, { "wdu", "Wadjigu" }, { "wdy", "Wadjabangayi" }, { "wea", "Wewaw" }, { "wec", "Wè Western" }, { "wed", "Wedau" }, { "weg", "Wergaia" }, { "weh", "Weh" }, { "wei", "Kiunum" }, { "wem", "Weme Gbe" }, { "weo", "Wemale" }, { "wep", "Westphalien" }, { "wer", "Weri" }, { "wes", "Cameroon Pidgin" }, { "wet", "Perai" }, { "weu", "Rawngtu Chin" }, { "wew", "Wejewa" }, { "wfg", "Yafi" }, { "wga", "Wagaya" }, { "wgb", "Wagawaga" }, { "wgg", "Wangganguru" }, { "wgi", "Wahgi" }, { "wgo", "Waigeo" }, { "wgu", "Wirangu" }, { "wgy", "Warrgamay" }, { "wha", "Manusela" }, { "whg", "North Wahgi" }, { "whk", "Wahau Kenyah" }, { "whu", "Wahau Kayan" }, { "wib", "Southern Toussian" }, { "wic", "Wichita" }, { "wie", "Wik-Epa" }, { "wif", "Wik-Keyangan" }, { "wig", "Wik-Ngathana" }, { "wih", "Wik-Me'anha" }, { "wii", "Minidien" }, { "wij", "Wik-Iiyanh" }, { "wik", "Wikalkan" }, { "wil", "Wilawila" }, { "wim", "Wik-Mungkan" }, { "win", "Ho-Chunk" }, { "wir", "Wiraféd" }, { "wiu", "Wiru" }, { "wiv", "Vitu" }, { "wiy", "Wiyot" }, { "wja", "Waja" }, { "wji", "Warji" }, { "wka", "Kw'adza" }, { "wkb", "Kumbaran" }, { "wkd", "Wakde" }, { "wkl", "Kalanadi" }, { "wku", "Kunduvadi" }, { "wkw", "Wakawaka" }, { "wky", "Wangkayutyuru" }, { "wla", "Walio" }, { "wlc", "Mwali Comorian" }, { "wle", "Wolane" }, { "wlg", "Kunbarlang" }, { "wli", "Waioli" }, { "wlk", "Wailaki" }, { "wll", "Wali (Sudan)" }, { "wlm", "Middle Welsh" }, { "wln", "Walloon" }, { "wlo", "Wolio" }, { "wlr", "Wailapa" }, { "wls", "Wallisian" }, { "wlu", "Wuliwuli" }, { "wlv", "Wichí Lhamtés Vejoz" }, { "wlw", "Walak" }, { "wlx", "Wali (Ghana)" }, { "wly", "Waling" }, { "wma", "Mawa (Nigeria)" }, { "wmb", "Wambaya" }, { "wmc", "Wamas" }, { "wmd", "Mamaindé" }, { "wme", "Wambule" }, { "wmh", "Waima'a" }, { "wmi", "Wamin" }, { "wmm", "Maiwa (Indonesia)" }, { "wmn", "Waamwang" }, { "wmo", "Wom (Papua New Guinea)" }, { "wms", "Wambon" }, { "wmt", "Walmajarri" }, { "wmw", "Mwani" }, { "wmx", "Womo" }, { "wnb", "Wanambre" }, { "wnc", "Wantoat" }, { "wnd", "Wandarang" }, { "wne", "Waneci" }, { "wng", "Wanggom" }, { "wni", "Ndzwani Comorian" }, { "wnk", "Wanukaka" }, { "wnm", "Wanggamala" }, { "wnn", "Wunumara" }, { "wno", "Wano" }, { "wnp", "Wanap" }, { "wnu", "Usan" }, { "wnw", "Wintu" }, { "wny", "Wanyi" }, { "woa", "Tyaraity" }, { "wob", "Wè Northern" }, { "woc", "Wogeo" }, { "wod", "Wolani" }, { "woe", "Woleaian" }, { "wof", "Gambian Wolof" }, { "wog", "Wogamusin" }, { "woi", "Kamang" }, { "wok", "Longto" }, { "wol", "Wolof" }, { "wom", "Wom (Nigeria)" }, { "won", "Wongo" }, { "woo", "Manombai" }, { "wor", "Woria" }, { "wos", "Hanga Hundi" }, { "wow", "Wawonii" }, { "woy", "Weyto" }, { "wpc", "Maco" }, { "wra", "Warapu" }, { "wrb", "Warluwara" }, { "wrd", "Warduji" }, { "wrg", "Warungu" }, { "wrh", "Wiradhuri" }, { "wri", "Wariyangga" }, { "wrk", "Garrwa" }, { "wrl", "Warlmanpa" }, { "wrm", "Warumungu" }, { "wrn", "Warnang" }, { "wro", "Worrorra" }, { "wrp", "Waropen" }, { "wrr", "Wardaman" }, { "wrs", "Waris" }, { "wru", "Waru" }, { "wrv", "Waruna" }, { "wrw", "Gugu Warra" }, { "wrx", "Wae Rana" }, { "wry", "Merwari" }, { "wrz", "Waray (Australia)" }, { "wsa", "Warembori" }, { "wsi", "Wusi" }, { "wsk", "Waskia" }, { "wsr", "Owenia" }, { "wss", "Wasa" }, { "wsu", "Wasu" }, { "wsv", "Wotapuri-Katarqalai" }, { "wtf", "Watiwa" }, { "wth", "Wathawurrung" }, { "wti", "Berta" }, { "wtk", "Watakataui" }, { "wtm", "Mewati" }, { "wtw", "Wotu" }, { "wua", "Wikngenchera" }, { "wub", "Wunambal" }, { "wud", "Wudu" }, { "wuh", "Wutunhua" }, { "wul", "Silimo" }, { "wum", "Wumbvu" }, { "wun", "Bungu" }, { "wur", "Wurrugu" }, { "wut", "Wutung" }, { "wuu", "Wu Chinese" }, { "wuv", "Wuvulu-Aua" }, { "wux", "Wulna" }, { "wuy", "Wauyai" }, { "wwa", "Waama" }, { "wwb", "Wakabunga" }, { "wwo", "Wetamut" }, { "wwr", "Warrwa" }, { "www", "Wawa" }, { "wxa", "Waxianghua" }, { "wxw", "Wardandi" }, { "wya", "Wyandot" }, { "wyb", "Wangaaybuwan-Ngiyambaa" }, { "wyi", "Woiwurrung" }, { "wym", "Wymysorys" }, { "wyr", "Wayoró" }, { "wyy", "Western Fijian" }, { "xaa", "Andalusian Arabic" }, { "xab", "Sambe" }, { "xac", "Kachari" }, { "xad", "Adai" }, { "xae", "Aequian" }, { "xag", "Aghwan" }, { "xai", "Kaimbé" }, { "xal", "Kalmyk" }, { "xam", "Xam" }, { "xan", "Xamtanga" }, { "xao", "Khao" }, { "xap", "Apalachee" }, { "xaq", "Aquitanian" }, { "xar", "Karami" }, { "xas", "Kamas" }, { "xat", "Katawixi" }, { "xau", "Kauwera" }, { "xav", "Xavánte" }, { "xaw", "Kawaiisu" }, { "xay", "Kayan Mahakam" }, { "xba", "Kamba (Brazil)" }, { "xbb", "Lower Burdekin" }, { "xbc", "Bactrian" }, { "xbd", "Bindal" }, { "xbe", "Bigambal" }, { "xbg", "Bunganditj" }, { "xbi", "Kombio" }, { "xbj", "Birrpayi" }, { "xbm", "Middle Breton" }, { "xbn", "Kenaboi" }, { "xbo", "Bolgarian" }, { "xbp", "Bibbulman" }, { "xbr", "Kambera" }, { "xbw", "Kambiwá" }, { "xbx", "Kabixí" }, { "xby", "Batyala" }, { "xcb", "Cumbric" }, { "xcc", "Camunic" }, { "xce", "Celtiberian" }, { "xcg", "Cisalpine Gaulish" }, { "xch", "Chemakum" }, { "xcl", "Classical Armenian" }, { "xcm", "Comecrudo" }, { "xcn", "Cotoname" }, { "xco", "Chorasmian" }, { "xcr", "Carian" }, { "xct", "Classical Tibetan" }, { "xcu", "Curonian" }, { "xcv", "Chuvantsy" }, { "xcw", "Coahuilteco" }, { "xcy", "Cayuse" }, { "xda", "Darkinyung" }, { "xdc", "Dacian" }, { "xdk", "Dharuk" }, { "xdm", "Edomite" }, { "xdy", "Malayic Dayak" }, { "xeb", "Eblan" }, { "xed", "Hdi" }, { "xeg", "Xegwi" }, { "xel", "Kelo" }, { "xem", "Kembayan" }, { "xep", "Epi-Olmec" }, { "xer", "Xerénte" }, { "xes", "Kesawai" }, { "xet", "Xetá" }, { "xeu", "Keoru-Ahia" }, { "xfa", "Faliscan" }, { "xga", "Galatian" }, { "xgb", "Gbin" }, { "xgd", "Gudang" }, { "xgf", "Gabrielino-Fernandeño" }, { "xgg", "Goreng" }, { "xgi", "Garingbal" }, { "xgl", "Galindan" }, { "xgm", "Guwinmal" }, { "xgr", "Garza" }, { "xgu", "Unggumi" }, { "xgw", "Guwa" }, { "xha", "Harami" }, { "xhc", "Hunnic" }, { "xhd", "Hadrami" }, { "xhe", "Khetrani" }, { "xho", "Xhosa" }, { "xhr", "Hernican" }, { "xht", "Hattic" }, { "xhu", "Hurrian" }, { "xhv", "Khua" }, { "xib", "Iberian" }, { "xii", "Xiri" }, { "xil", "Illyrian" }, { "xin", "Xinca" }, { "xip", "Xipináwa" }, { "xir", "Xiriâna" }, { "xiv", "Indus Valley Language" }, { "xiy", "Xipaya" }, { "xjb", "Minjungbal" }, { "xjt", "Jaitmatang" }, { "xka", "Kalkoti" }, { "xkb", "Northern Nago" }, { "xkc", "Kho'ini" }, { "xkd", "Mendalam Kayan" }, { "xke", "Kereho" }, { "xkf", "Khengkha" }, { "xkg", "Kagoro" }, { "xkh", "Karahawyana" }, { "xki", "Kenyan Sign Language" }, { "xkj", "Kajali" }, { "xkk", "Kaco'" }, { "xkl", "Mainstream Kenyah" }, { "xkn", "Kayan River Kayan" }, { "xko", "Kiorr" }, { "xkp", "Kabatei" }, { "xkq", "Koroni" }, { "xkr", "Xakriabá" }, { "xks", "Kumbewaha" }, { "xkt", "Kantosi" }, { "xku", "Kaamba" }, { "xkv", "Kgalagadi" }, { "xkw", "Kembra" }, { "xkx", "Karore" }, { "xky", "Uma' Lasan" }, { "xkz", "Kurtokha" }, { "xla", "Kamula" }, { "xlb", "Loup B" }, { "xlc", "Lycian" }, { "xld", "Lydian" }, { "xle", "Lemnian" }, { "xlg", "Ligurian (Ancient)" }, { "xli", "Liburnian" }, { "xln", "Alanic" }, { "xlo", "Loup A" }, { "xlp", "Lepontic" }, { "xls", "Lusitanian" }, { "xlu", "Cuneiform Luwian" }, { "xly", "Elymian" }, { "xma", "Mushungulu" }, { "xmb", "Mbonga" }, { "xmc", "Makhuwa-Marrevone" }, { "xmd", "Mbudum" }, { "xme", "Median" }, { "xmf", "Mingrelian" }, { "xmg", "Mengaka" }, { "xmh", "Kuku-Muminh" }, { "xmj", "Majera" }, { "xmk", "Ancient Macedonian" }, { "xml", "Malaysian Sign Language" }, { "xmm", "Manado Malay" }, { "xmn", "Manichaean Middle Persian" }, { "xmo", "Morerebi" }, { "xmp", "Kuku-Mu'inh" }, { "xmq", "Kuku-Mangk" }, { "xmr", "Meroitic" }, { "xms", "Moroccan Sign Language" }, { "xmt", "Matbat" }, { "xmu", "Kamu" }, { "xmv", "Antankarana Malagasy" }, { "xmw", "Tsimihety Malagasy" }, { "xmx", "Maden" }, { "xmy", "Mayaguduna" }, { "xmz", "Mori Bawah" }, { "xna", "Ancient North Arabian" }, { "xnb", "Kanakanabu" }, { "xng", "Middle Mongolian" }, { "xnh", "Kuanhua" }, { "xni", "Ngarigu" }, { "xnk", "Nganakarti" }, { "xnn", "Northern Kankanay" }, { "xno", "Anglo-Norman" }, { "xnr", "Kangri" }, { "xns", "Kanashi" }, { "xnt", "Narragansett" }, { "xnu", "Nukunul" }, { "xny", "Nyiyaparli" }, { "xnz", "Kenzi" }, { "xoc", "O'chi'chi'" }, { "xod", "Kokoda" }, { "xog", "Soga" }, { "xoi", "Kominimung" }, { "xok", "Xokleng" }, { "xom", "Komo (Sudan)" }, { "xon", "Konkomba" }, { "xoo", "Xukurú" }, { "xop", "Kopar" }, { "xor", "Korubo" }, { "xow", "Kowaki" }, { "xpa", "Pirriya" }, { "xpc", "Pecheneg" }, { "xpe", "Liberia Kpelle" }, { "xpg", "Phrygian" }, { "xpi", "Pictish" }, { "xpj", "Mpalitjanh" }, { "xpk", "Kulina Pano" }, { "xpm", "Pumpokol" }, { "xpn", "Kapinawá" }, { "xpo", "Pochutec" }, { "xpp", "Puyo-Paekche" }, { "xpq", "Mohegan-Pequot" }, { "xpr", "Parthian" }, { "xps", "Pisidian" }, { "xpt", "Punthamara" }, { "xpu", "Punic" }, { "xpy", "Puyo" }, { "xqa", "Karakhanid" }, { "xqt", "Qatabanian" }, { "xra", "Krahô" }, { "xrb", "Eastern Karaboro" }, { "xrd", "Gundungurra" }, { "xre", "Kreye" }, { "xrg", "Minang" }, { "xri", "Krikati-Timbira" }, { "xrm", "Armazic" }, { "xrn", "Arin" }, { "xrq", "Karranga" }, { "xrr", "Raetic" }, { "xrt", "Aranama-Tamique" }, { "xru", "Marriammu" }, { "xrw", "Karawa" }, { "xsa", "Sabaean" }, { "xsb", "Sambal" }, { "xsc", "Scythian" }, { "xsd", "Sidetic" }, { "xse", "Sempan" }, { "xsh", "Shamang" }, { "xsi", "Sio" }, { "xsj", "Subi" }, { "xsl", "South Slavey" }, { "xsm", "Kasem" }, { "xsn", "Sanga (Nigeria)" }, { "xso", "Solano" }, { "xsp", "Silopi" }, { "xsq", "Makhuwa-Saka" }, { "xsr", "Sherpa" }, { "xss", "Assan" }, { "xsu", "Sanumá" }, { "xsv", "Sudovian" }, { "xsy", "Saisiyat" }, { "xta", "Alcozauca Mixtec" }, { "xtb", "Chazumba Mixtec" }, { "xtc", "Katcha-Kadugli-Miri" }, { "xtd", "Diuxi-Tilantongo Mixtec" }, { "xte", "Ketengban" }, { "xtg", "Transalpine Gaulish" }, { "xth", "Yitha Yitha" }, { "xti", "Sinicahua Mixtec" }, { "xtj", "San Juan Teita Mixtec" }, { "xtl", "Tijaltepec Mixtec" }, { "xtm", "Magdalena Peñasco Mixtec" }, { "xtn", "Northern Tlaxiaco Mixtec" }, { "xto", "Tokharian A" }, { "xtp", "San Miguel Piedras Mixtec" }, { "xtq", "Tumshuqese" }, { "xtr", "Early Tripuri" }, { "xts", "Sindihui Mixtec" }, { "xtt", "Tacahua Mixtec" }, { "xtu", "Cuyamecalco Mixtec" }, { "xtv", "Thawa" }, { "xtw", "Tawandê" }, { "xty", "Yoloxochitl Mixtec" }, { "xtz", "Tasmanian" }, { "xua", "Alu Kurumba" }, { "xub", "Betta Kurumba" }, { "xud", "Umiida" }, { "xug", "Kunigami" }, { "xuj", "Jennu Kurumba" }, { "xul", "Ngunawal" }, { "xum", "Umbrian" }, { "xun", "Unggaranggu" }, { "xuo", "Kuo" }, { "xup", "Upper Umpqua" }, { "xur", "Urartian" }, { "xut", "Kuthant" }, { "xuu", "Kxoe" }, { "xve", "Venetic" }, { "xvi", "Kamviri" }, { "xvn", "Vandalic" }, { "xvo", "Volscian" }, { "xvs", "Vestinian" }, { "xwa", "Kwaza" }, { "xwc", "Woccon" }, { "xwd", "Wadi Wadi" }, { "xwe", "Xwela Gbe" }, { "xwg", "Kwegu" }, { "xwj", "Wajuk" }, { "xwk", "Wangkumara" }, { "xwl", "Western Xwla Gbe" }, { "xwo", "Written Oirat" }, { "xwr", "Kwerba Mamberamo" }, { "xwt", "Wotjobaluk" }, { "xww", "Wemba Wemba" }, { "xxb", "Boro (Ghana)" }, { "xxk", "Ke'o" }, { "xxm", "Minkin" }, { "xxr", "Koropó" }, { "xxt", "Tambora" }, { "xya", "Yaygir" }, { "xyb", "Yandjibara" }, { "xyj", "Mayi-Yapi" }, { "xyk", "Mayi-Kulan" }, { "xyl", "Yalakalore" }, { "xyt", "Mayi-Thakurti" }, { "xyy", "Yorta Yorta" }, { "xzh", "Zhang-Zhung" }, { "xzm", "Zemgalian" }, { "xzp", "Ancient Zapotec" }, { "yaa", "Yaminahua" }, { "yab", "Yuhup" }, { "yac", "Pass Valley Yali" }, { "yad", "Yagua" }, { "yae", "Pumé" }, { "yaf", "Yaka (Democratic Republic of Congo)" }, { "yag", "Yámana" }, { "yah", "Yazgulyam" }, { "yai", "Yagnobi" }, { "yaj", "Banda-Yangere" }, { "yak", "Yakama" }, { "yal", "Yalunka" }, { "yam", "Yamba" }, { "yan", "Mayangna" }, { "yao", "Yao" }, { "yap", "Yapese" }, { "yaq", "Yaqui" }, { "yar", "Yabarana" }, { "yas", "Nugunu (Cameroon)" }, { "yat", "Yambeta" }, { "yau", "Yuwana" }, { "yav", "Yangben" }, { "yaw", "Yawalapití" }, { "yax", "Yauma" }, { "yay", "Agwagwune" }, { "yaz", "Lokaa" }, { "yba", "Yala" }, { "ybb", "Yemba" }, { "ybe", "West Yugur" }, { "ybh", "Yakha" }, { "ybi", "Yamphu" }, { "ybj", "Hasha" }, { "ybk", "Bokha" }, { "ybl", "Yukuben" }, { "ybm", "Yaben" }, { "ybn", "Yabaâna" }, { "ybo", "Yabong" }, { "ybx", "Yawiyo" }, { "yby", "Yaweyuha" }, { "ych", "Chesu" }, { "ycl", "Lolopo" }, { "ycn", "Yucuna" }, { "ycp", "Chepya" }, { "yda", "Yanda" }, { "ydd", "Eastern Yiddish" }, { "yde", "Yangum Dey" }, { "ydg", "Yidgha" }, { "ydk", "Yoidik" }, { "yds", "Yiddish Sign Language" }, { "yea", "Ravula" }, { "yec", "Yeniche" }, { "yee", "Yimas" }, { "yei", "Yeni" }, { "yej", "Yevanic" }, { "yel", "Yela" }, { "yer", "Tarok" }, { "yes", "Nyankpa" }, { "yet", "Yetfa" }, { "yeu", "Yerukula" }, { "yev", "Yapunda" }, { "yey", "Yeyi" }, { "yga", "Malyangapa" }, { "ygi", "Yiningayi" }, { "ygl", "Yangum Gel" }, { "ygm", "Yagomi" }, { "ygp", "Gepo" }, { "ygr", "Yagaria" }, { "ygu", "Yugul" }, { "ygw", "Yagwoia" }, { "yha", "Baha Buyang" }, { "yhd", "Judeo-Iraqi Arabic" }, { "yhl", "Hlepho Phowa" }, { "yia", "Yinggarda" }, { "yid", "Yiddish" }, { "yif", "Ache" }, { "yig", "Wusa Nasu" }, { "yih", "Western Yiddish" }, { "yii", "Yidiny" }, { "yij", "Yindjibarndi" }, { "yik", "Dongshanba Lalo" }, { "yil", "Yindjilandji" }, { "yim", "Yimchungru Naga" }, { "yin", "Yinchia" }, { "yip", "Pholo" }, { "yiq", "Miqie" }, { "yir", "North Awyu" }, { "yis", "Yis" }, { "yit", "Eastern Lalu" }, { "yiu", "Awu" }, { "yiv", "Northern Nisu" }, { "yix", "Axi Yi" }, { "yiz", "Azhe" }, { "yka", "Yakan" }, { "ykg", "Northern Yukaghir" }, { "yki", "Yoke" }, { "ykk", "Yakaikeke" }, { "ykl", "Khlula" }, { "ykm", "Kap" }, { "ykn", "Kua-nsi" }, { "yko", "Yasa" }, { "ykr", "Yekora" }, { "ykt", "Kathu" }, { "yku", "Kuamasi" }, { "yky", "Yakoma" }, { "yla", "Yaul" }, { "ylb", "Yaleba" }, { "yle", "Yele" }, { "ylg", "Yelogu" }, { "yli", "Angguruk Yali" }, { "yll", "Yil" }, { "ylm", "Limi" }, { "yln", "Langnian Buyang" }, { "ylo", "Naluo Yi" }, { "ylr", "Yalarnnga" }, { "ylu", "Aribwaung" }, { "yly", "Nyâlayu" }, { "ymb", "Yambes" }, { "ymc", "Southern Muji" }, { "ymd", "Muda" }, { "yme", "Yameo" }, { "ymg", "Yamongeri" }, { "ymh", "Mili" }, { "ymi", "Moji" }, { "ymk", "Makwe" }, { "yml", "Iamalele" }, { "ymm", "Maay" }, { "ymn", "Yamna" }, { "ymo", "Yangum Mon" }, { "ymp", "Yamap" }, { "ymq", "Qila Muji" }, { "ymr", "Malasar" }, { "yms", "Mysian" }, { "ymt", "Mator-Taygi-Karagas" }, { "ymx", "Northern Muji" }, { "ymz", "Muzi" }, { "yna", "Aluo" }, { "ynd", "Yandruwandha" }, { "yne", "Lang'e" }, { "yng", "Yango" }, { "ynh", "Yangho" }, { "ynk", "Naukan Yupik" }, { "ynl", "Yangulam" }, { "ynn", "Yana" }, { "yno", "Yong" }, { "ynq", "Yendang" }, { "yns", "Yansi" }, { "ynu", "Yahuna" }, { "yob", "Yoba" }, { "yog", "Yogad" }, { "yoi", "Yonaguni" }, { "yok", "Yokuts" }, { "yol", "Yola" }, { "yom", "Yombe" }, { "yon", "Yongkom" }, { "yor", "Yoruba" }, { "yot", "Yotti" }, { "yox", "Yoron" }, { "yoy", "Yoy" }, { "ypa", "Phala" }, { "ypb", "Labo Phowa" }, { "ypg", "Phola" }, { "yph", "Phupha" }, { "ypm", "Phuma" }, { "ypn", "Ani Phowa" }, { "ypo", "Alo Phola" }, { "ypp", "Phupa" }, { "ypz", "Phuza" }, { "yra", "Yerakai" }, { "yrb", "Yareba" }, { "yre", "Yaouré" }, { "yri", "Yarí" }, { "yrk", "Nenets" }, { "yrl", "Nhengatu" }, { "yrm", "Yirrk-Mel" }, { "yrn", "Yerong" }, { "yrs", "Yarsun" }, { "yrw", "Yarawata" }, { "yry", "Yarluyandi" }, { "ysc", "Yassic" }, { "ysd", "Samatao" }, { "ysg", "Sonaga" }, { "ysl", "Yugoslavian Sign Language" }, { "ysn", "Sani" }, { "yso", "Nisi (China)" }, { "ysp", "Southern Lolopo" }, { "ysr", "Sirenik Yupik" }, { "yss", "Yessan-Mayo" }, { "ysy", "Sanie" }, { "yta", "Talu" }, { "ytl", "Tanglang" }, { "ytp", "Thopho" }, { "ytw", "Yout Wam" }, { "yty", "Yatay" }, { "yua", "Yucateco" }, { "yub", "Yugambal" }, { "yuc", "Yuchi" }, { "yud", "Judeo-Tripolitanian Arabic" }, { "yue", "Yue Chinese" }, { "yuf", "Havasupai-Walapai-Yavapai" }, { "yug", "Yug" }, { "yui", "Yurutí" }, { "yuj", "Karkar-Yuri" }, { "yuk", "Yuki" }, { "yul", "Yulu" }, { "yum", "Quechan" }, { "yun", "Bena (Nigeria)" }, { "yup", "Yukpa" }, { "yuq", "Yuqui" }, { "yur", "Yurok" }, { "yut", "Yopno" }, { "yuu", "Yugh" }, { "yuw", "Yau (Morobe Province)" }, { "yux", "Southern Yukaghir" }, { "yuy", "East Yugur" }, { "yuz", "Yuracare" }, { "yva", "Yawa" }, { "yvt", "Yavitero" }, { "ywa", "Kalou" }, { "ywg", "Yinhawangka" }, { "ywl", "Western Lalu" }, { "ywn", "Yawanawa" }, { "ywq", "Wuding-Luquan Yi" }, { "ywr", "Yawuru" }, { "ywt", "Xishanba Lalo" }, { "ywu", "Wumeng Nasu" }, { "yww", "Yawarawarga" }, { "yxa", "Mayawali" }, { "yxg", "Yagara" }, { "yxl", "Yardliyawarra" }, { "yxm", "Yinwum" }, { "yxu", "Yuyu" }, { "yxy", "Yabula Yabula" }, { "yyr", "Yir Yoront" }, { "yyu", "Yau (Sandaun Province)" }, { "yyz", "Ayizi" }, { "yzg", "E'ma Buyang" }, { "yzk", "Zokhuo" }, { "zaa", "Sierra de Juárez Zapotec" }, { "zab", "San Juan Guelavía Zapotec" }, { "zac", "Ocotlán Zapotec" }, { "zad", "Cajonos Zapotec" }, { "zae", "Yareni Zapotec" }, { "zaf", "Ayoquesco Zapotec" }, { "zag", "Zaghawa" }, { "zah", "Zangwal" }, { "zai", "Isthmus Zapotec" }, { "zaj", "Zaramo" }, { "zak", "Zanaki" }, { "zal", "Zauzou" }, { "zam", "Miahuatlán Zapotec" }, { "zao", "Ozolotepec Zapotec" }, { "zap", "Zapotec" }, { "zaq", "Aloápam Zapotec" }, { "zar", "Rincón Zapotec" }, { "zas", "Santo Domingo Albarradas Zapotec" }, { "zat", "Tabaa Zapotec" }, { "zau", "Zangskari" }, { "zav", "Yatzachi Zapotec" }, { "zaw", "Mitla Zapotec" }, { "zax", "Xadani Zapotec" }, { "zay", "Zayse-Zergulla" }, { "zaz", "Zari" }, { "zbc", "Central Berawan" }, { "zbe", "East Berawan" }, { "zbl", "Blissymbols" }, { "zbt", "Batui" }, { "zbw", "West Berawan" }, { "zca", "Coatecas Altas Zapotec" }, { "zch", "Central Hongshuihe Zhuang" }, { "zdj", "Ngazidja Comorian" }, { "zea", "Zeeuws" }, { "zeg", "Zenag" }, { "zeh", "Eastern Hongshuihe Zhuang" }, { "zen", "Zenaga" }, { "zga", "Kinga" }, { "zgb", "Guibei Zhuang" }, { "zgh", "Standard Moroccan Tamazight" }, { "zgm", "Minz Zhuang" }, { "zgn", "Guibian Zhuang" }, { "zgr", "Magori" }, { "zha", "Zhuang" }, { "zhb", "Zhaba" }, { "zhd", "Dai Zhuang" }, { "zhi", "Zhire" }, { "zhn", "Nong Zhuang" }, { "zho", "Chinese" }, { "zhw", "Zhoa" }, { "zia", "Zia" }, { "zib", "Zimbabwe Sign Language" }, { "zik", "Zimakani" }, { "zil", "Zialo" }, { "zim", "Mesme" }, { "zin", "Zinza" }, { "zir", "Ziriya" }, { "ziw", "Zigula" }, { "ziz", "Zizilivakan" }, { "zka", "Kaimbulawa" }, { "zkb", "Koibal" }, { "zkd", "Kadu" }, { "zkg", "Koguryo" }, { "zkh", "Khorezmian" }, { "zkk", "Karankawa" }, { "zkn", "Kanan" }, { "zko", "Kott" }, { "zkp", "São Paulo Kaingáng" }, { "zkr", "Zakhring" }, { "zkt", "Kitan" }, { "zku", "Kaurna" }, { "zkv", "Krevinian" }, { "zkz", "Khazar" }, { "zlj", "Liujiang Zhuang" }, { "zlm", "Malay (individual language)" }, { "zln", "Lianshan Zhuang" }, { "zlq", "Liuqian Zhuang" }, { "zma", "Manda (Australia)" }, { "zmb", "Zimba" }, { "zmc", "Margany" }, { "zmd", "Maridan" }, { "zme", "Mangerr" }, { "zmf", "Mfinu" }, { "zmg", "Marti Ke" }, { "zmh", "Makolkol" }, { "zmi", "Negeri Sembilan Malay" }, { "zmj", "Maridjabin" }, { "zmk", "Mandandanyi" }, { "zml", "Madngele" }, { "zmm", "Marimanindji" }, { "zmn", "Mbangwe" }, { "zmo", "Molo" }, { "zmp", "Mpuono" }, { "zmq", "Mituku" }, { "zmr", "Maranunggu" }, { "zms", "Mbesa" }, { "zmt", "Maringarr" }, { "zmu", "Muruwari" }, { "zmv", "Mbariman-Gudhinma" }, { "zmw", "Mbo (Democratic Republic of Congo)" }, { "zmx", "Bomitaba" }, { "zmy", "Mariyedi" }, { "zmz", "Mbandja" }, { "zna", "Zan Gula" }, { "zne", "Zande (individual language)" }, { "zng", "Mang" }, { "znk", "Manangkari" }, { "zns", "Mangas" }, { "zoc", "Copainalá Zoque" }, { "zoh", "Chimalapa Zoque" }, { "zom", "Zou" }, { "zoo", "Asunción Mixtepec Zapotec" }, { "zoq", "Tabasco Zoque" }, { "zor", "Rayón Zoque" }, { "zos", "Francisco León Zoque" }, { "zpa", "Lachiguiri Zapotec" }, { "zpb", "Yautepec Zapotec" }, { "zpc", "Choapan Zapotec" }, { "zpd", "Southeastern Ixtlán Zapotec" }, { "zpe", "Petapa Zapotec" }, { "zpf", "San Pedro Quiatoni Zapotec" }, { "zpg", "Guevea De Humboldt Zapotec" }, { "zph", "Totomachapan Zapotec" }, { "zpi", "Santa María Quiegolani Zapotec" }, { "zpj", "Quiavicuzas Zapotec" }, { "zpk", "Tlacolulita Zapotec" }, { "zpl", "Lachixío Zapotec" }, { "zpm", "Mixtepec Zapotec" }, { "zpn", "Santa Inés Yatzechi Zapotec" }, { "zpo", "Amatlán Zapotec" }, { "zpp", "El Alto Zapotec" }, { "zpq", "Zoogocho Zapotec" }, { "zpr", "Santiago Xanica Zapotec" }, { "zps", "Coatlán Zapotec" }, { "zpt", "San Vicente Coatlán Zapotec" }, { "zpu", "Yalálag Zapotec" }, { "zpv", "Chichicapan Zapotec" }, { "zpw", "Zaniza Zapotec" }, { "zpx", "San Baltazar Loxicha Zapotec" }, { "zpy", "Mazaltepec Zapotec" }, { "zpz", "Texmelucan Zapotec" }, { "zqe", "Qiubei Zhuang" }, { "zra", "Kara (Korea)" }, { "zrg", "Mirgan" }, { "zrn", "Zerenkel" }, { "zro", "Záparo" }, { "zrp", "Zarphatic" }, { "zrs", "Mairasi" }, { "zsa", "Sarasira" }, { "zsk", "Kaskean" }, { "zsl", "Zambian Sign Language" }, { "zsm", "Standard Malay" }, { "zsr", "Southern Rincon Zapotec" }, { "zsu", "Sukurum" }, { "zte", "Elotepec Zapotec" }, { "ztg", "Xanaguía Zapotec" }, { "ztl", "Lapaguía-Guivini Zapotec" }, { "ztm", "San Agustín Mixtepec Zapotec" }, { "ztn", "Santa Catarina Albarradas Zapotec" }, { "ztp", "Loxicha Zapotec" }, { "ztq", "Quioquitani-Quierí Zapotec" }, { "zts", "Tilquiapan Zapotec" }, { "ztt", "Tejalapan Zapotec" }, { "ztu", "Güilá Zapotec" }, { "ztx", "Zaachila Zapotec" }, { "zty", "Yatee Zapotec" }, { "zua", "Zeem" }, { "zuh", "Tokano" }, { "zul", "Zulu" }, { "zum", "Kumzari" }, { "zun", "Zuni" }, { "zuy", "Zumaya" }, { "zwa", "Zay" }, { "zxx", "No linguistic content" }, { "zyb", "Yongbei Zhuang" }, { "zyg", "Yang Zhuang" }, { "zyj", "Youjiang Zhuang" }, { "zyn", "Yongnan Zhuang" }, { "zyp", "Zyphe Chin" }, { "zza", "Zaza" }, { "zzj", "Zuojiang Zhuang" }, }; static int niso639_3= sizeof( iso639_3 ) / sizeof( iso639_3[0] ); char * iso639_3_from_code( const char *code ) { int i; for ( i=0; i int marc_findgenre( char *query ) { char *marc[] = { "abstract or summary", "art original", "art reproduction", "article", "atlas", "autobiography", "bibliography", "biography", "book", "calendar", "catalog", "chart", "comic or graphic novel", "comic strip", "conference publication", "database", "dictionary", "diorama", "directory", "discography", "drama", "encyclopedia", "essay", "festschrift", "fiction", "filmography", "filmstrip", "finding aid", "flash card", "folktale", "font", "game", "government publication", "graphic", "globe", "handbook", "history", "humor, satire", "hymnal", "index", "instruction", "interview", "issue", "journal", "kit", "language instruction", "law report or digest", "legal article", "legal case and case notes", "legislation", "letter", "loose-leaf", "map", "memoir", "microscope slide", "model", "motion picture", "multivolume monograph", "newspaper", "novel", "numeric data", "offprint", "online system or service", "patent", "periodical", "picture", "poetry", "programmed text", "realia", "rehearsal", "remote sensing image", "reporting", "review", "series", "short story", "slide", "sound", "speech", "standard or specification", "statistics", "survey of literature", "technical drawing", "technical report", "thesis", "toy", "transparency", "treaty", "videorecording", "web site", "yearbook", }; int nmarc = sizeof( marc ) / sizeof( char* ); int i; for ( i=0; i #include #include #include "entities.h" /* HTML 4.0 entities */ typedef struct entities { char html[20]; unsigned int unicode; } entities; entities html_entities[] = { /* Special Entities */ { """, 34 }, /* quotation mark */ { "&", 38 }, /* ampersand */ { "'", 39 }, /* apostrophe (note not defined in HTML) */ { "(", 40 }, /* left parenthesis */ { ")", 41 }, /* right parenthesis */ { "‐", 45 }, /* hyphen */ { "<", 60 }, /* less-than sign */ { ">", 62 }, /* greater-than sign */ { "?", 63 }, /* question mark */ { "Œ", 338 }, /* Latin cap ligature OE */ { "œ", 339 }, /* Latin small ligature OE */ { "Š", 352 }, /* Latin cap S with caron */ { "š", 353 }, /* Latin cap S with caron */ { "Ÿ", 376 }, /* Latin cap y with diaeresis */ { "ˆ", 710 }, /* modifier letter circumflex */ { "˜", 732 }, /* small tilde */ { " ", 8194 }, /* en space */ { " ", 8195 }, /* em space */ { " ", 8201 }, /* thin space */ { "‌", 8204 }, /* zero width non-joiner */ { "‍", 8205 }, /* zero width joiner */ { "‎", 8206 }, /* left-to-right mark */ { "‏", 8207 }, /* right-to-left mark */ { "–", 8211 }, /* en dash */ { "—", 8212 }, /* em dash */ { "‘", 8216 }, /* left single quotation mark */ { "’", 8217 }, /* right single quot. mark */ { "‚", 8218 }, /* single low-9 quot. mark */ { "“", 8220 }, /* left double quot. mark */ { "”", 8221 }, /* right double quot. mark */ { "„", 8222 }, /* double low-9 quot. mark */ { "†", 8224 }, /* dagger */ { "‡", 8225 }, /* double dagger */ { "‰", 8240 }, /* per mille sign */ { "‹", 8249 }, /* sin. left angle quot mark */ { "›", 8250 }, /* sin. right angle quot mark */ { "€", 8364 }, /* euro sign */ /* Symbols and Greek characters */ { "ƒ", 402 }, /* small f with hook = function */ { "Α", 913 }, /* capital alpha */ { "Β", 914 }, /* capital beta */ { "Γ", 915 }, /* capital gamma */ { "Δ", 916 }, /* capital delta */ { "Ε", 917 }, /* capital epsilon */ { "Ζ", 918 }, /* capital zeta */ { "Η", 919 }, /* capital eta */ { "Θ", 920 }, /* capital theta */ { "Ι", 921 }, /* capital iota */ { "Κ", 922 }, /* capital kappa */ { "Λ", 923 }, /* capital lambda */ { "Μ", 924 }, /* capital mu */ { "Ν", 925 }, /* capital nu */ { "Ξ", 926 }, /* capital xi */ { "Ο", 927 }, /* capital omicron */ { "Π", 928 }, /* capital pi */ { "Ρ", 929 }, /* capital rho */ { "Σ", 931 }, /* capital sigma */ { "Τ", 932 }, /* capital tau */ { "Υ", 933 }, /* capital upsilon */ { "Φ", 934 }, /* capital phi */ { "Χ", 935 }, /* capital chi */ { "Ψ", 936 }, /* capital psi */ { "Ω", 937 }, /* capital omega */ { "α", 945 }, /* small alpha */ { "β", 946 }, /* small beta */ { "γ", 947 }, /* small gamma */ { "δ", 948 }, /* small delta */ { "ε", 949 }, /* small epsilon */ { "ζ", 950 }, /* small zeta */ { "η", 951 }, /* small eta */ { "θ", 952 }, /* small theta */ { "ι", 953 }, /* small iota */ { "κ", 954 }, /* small kappa */ { "λ", 955 }, /* small lambda */ { "μ", 956 }, /* small mu */ { "ν", 957 }, /* small nu */ { "ξ", 958 }, /* small xi */ { "ο", 959 }, /* small omicron */ { "π", 960 }, /* small pi */ { "ρ", 961 }, /* small rho */ { "ς", 962 }, /* small final sigma */ { "σ", 963 }, /* small simga */ { "τ", 964 }, /* small tau */ { "υ", 965 }, /* small upsilon */ { "φ", 966 }, /* small phi */ { "χ", 967 }, /* small chi */ { "ψ", 968 }, /* small psi */ { "ω", 969 }, /* small omega */ { "ϑ",977 }, /* small theta symbol */ { "ϒ", 978 }, /* small upsilon with hook */ { "ϖ", 982 }, /* pi symbol */ { "•", 8226 }, /* bullet = small blk circle */ { "…", 8230 }, /* horizontal ellipsis */ { "′", 8242 }, /* prime = minutes = feet */ { "″", 8243 }, /* double prime */ { "‾", 8254 }, /* overline */ { "⁄", 8260 }, /* fraction slash */ { "℘", 8472 }, /* Weierstrass p = power set */ { "ℑ", 8465 }, /* imaginary part-black cap I */ { "ℜ", 8476 }, /* real part-black cap R */ { "™", 8482 }, /* trademark sign */ { "ℵ",8501 }, /* alef symbol */ { "←", 8592 }, /* left arrow */ { "↑", 8593 }, /* up arrow */ { "→", 8594 }, /* right arrow */ { "↓", 8595 }, /* down arrow */ { "↔", 8596 }, /* left/right arrow */ { "↵", 8629 }, /* down arrow with corner left */ { "⇐", 8656 }, /* left double arrow */ { "⇑", 8657 }, /* up double arrow */ { "⇒", 8658 }, /* up double arrow */ { "⇓", 8659 }, /* up double arrow */ { "⇔", 8660 }, /* up double arrow */ { "∀", 8704}, /* for all */ { "∂", 8706}, /* partial differential */ { "∃", 8707}, /* there exists */ { "∅", 8709}, /* empty set */ { "∇", 8711}, /* nabla=backwards difference */ { "∈", 8712}, /* element of */ { "∉", 8713}, /* not an element of */ { "∋", 8715}, /* contains as member */ { "∏", 8719}, /* n-ary product */ { "∑", 8721}, /* n-ary summation */ { "−", 8722}, /* minuss sign */ { "∗", 8727}, /* asterisk operator */ { "√", 8730}, /* square root */ { "∝", 8733}, /* proportional to */ { "∞", 8734}, /* infinity */ { "∠", 8736}, /* angle */ { "∧", 8743}, /* logical and */ { "∨", 8744}, /* logical or */ { "∩", 8745}, /* intersection */ { "∪", 8746}, /* union */ { "∫", 8747}, /* integral */ { "∴", 8756}, /* therefore */ { "∼", 8764}, /* tilde operator */ { "≅", 8773}, /* approximately equal to */ { "≈", 8776}, /* asymptotic to */ { "≠", 8800}, /* not equal to */ { "≡", 8801}, /* identical to */ { "≤", 8804}, /* less-than or equal to */ { "≥", 8805}, /* greater-than or equal to */ { "⊂", 8834}, /* subset of */ { "⊃", 8835}, /* superset of */ { "⊄", 8836}, /* not a subset of */ { "⊆", 8838}, /* subset of or equal to */ { "⊇", 8839}, /* superset of or equal to */ { "⊕", 8853}, /* circled plus = direct sum */ { "⊗", 8855}, /* circled times = vec prod */ { "⊥", 8869}, /* perpendicular */ { "⋅", 8901}, /* dot operator */ { "⌈", 8968}, /* left ceiling */ { "⌉", 8969}, /* right ceiling */ { "⌊", 8970}, /* left floor */ { "⌋", 8971}, /* right floor */ { "⟨", 9001}, /* left angle bracket */ { "⟩", 9002}, /* right angle bracket */ { "◊", 9674}, /* lozenge */ { "♠", 9824}, /* spades */ { "♣", 9827}, /* clubs */ { "♥", 9829}, /* hearts */ { "♦", 9830}, /* diamonds */ /* Latin-1 */ { " ", 32 }, /* non-breaking space */ { "¡", 161 }, /* inverted exclamation mark */ { "¢", 162 }, /* cent sign */ { "£", 163 }, /* pound sign */ { "¤", 164 }, /* currency sign */ { "¥", 165 }, /* yen sign */ { "¦", 166 }, /* broken vertical bar */ { "§", 167 }, /* section sign */ { "¨", 168 }, /* diaeresis - spacing diaeresis */ { "©", 169 }, /* copyright sign */ { "ª", 170 }, /* feminine ordinal indicator */ { "«", 171 }, /* left-pointing guillemet */ { "¬", 172 }, /* not sign */ { "­", 173 }, /* soft (discretionary) hyphen */ { "®", 174 }, /* registered sign */ { "¯", 175 }, /* macron = overline */ { "°", 176 }, /* degree sign */ { "±", 177 }, /* plus-minus sign */ { "²", 178 }, /* superscript two */ { "³", 179 }, /* superscript three */ { "´", 180 }, /* acute accent = spacing acute */ { "µ", 181 }, /* micro sign */ { "¶", 182 }, /* pilcrow (paragraph) sign */ { "·", 183 }, /* middle dot (georgian comma) */ { "¸", 184 }, /* cedilla = spacing cedilla */ { "¹", 185 }, /* superscript one */ { "º", 186 }, /* masculine ordinal indicator */ { "»", 187 }, /* right pointing guillemet */ { "¼", 188 }, /* 1/4 */ { "½", 189 }, /* 1/2 */ { "¾", 190 }, /* 3/4 */ { "¿", 191 }, /* inverted question mark */ { "À", 192 }, /* cap A with grave */ { "Á", 193 }, /* cap A with acute */ { "Â", 194 }, /* cap A with circumflex */ { "Ã", 195 }, /* cap A with tilde */ { "Ä", 196 }, /* cap A with diaeresis */ { "Å", 197 }, /* cap A with ring */ { "Æ", 198 }, /* cap AE ligature */ { "Ç", 199 }, /* cap C with cedilla */ { "È", 200 }, /* cap E with grave */ { "É", 201 }, /* cap E with acute */ { "Ê", 202 }, /* cap E with circumflex */ { "Ë", 203 }, /* cap E with diaeresis */ { "Ì", 204 }, /* cap I with grave */ { "Í", 205 }, /* cap I with acute */ { "Î", 206 }, /* cap I with circumflex */ { "Ï", 207 }, /* cap I with diaeresis */ { "Ð", 208 }, /* cap letter ETH */ { "Ñ", 209 }, /* cap N with tilde */ { "Ò", 210 }, /* cap O with grave */ { "Ó", 211 }, /* cap O with acute */ { "Ô", 212 }, /* cap O with circumflex */ { "Õ", 213 }, /* cap O with tilde */ { "Ö", 214 }, /* cap O with diaeresis */ { "×", 215 }, /* multiplication sign */ { "Ø", 216 }, /* cap O with stroke */ { "Ù", 217 }, /* cap U with grave */ { "Ú", 218 }, /* cap U with acute */ { "Û", 219 }, /* cap U with circumflex */ { "Ü", 220 }, /* cap U with diaeresis */ { "Ý", 221 }, /* cap Y with acute */ { "Þ", 222 }, /* cap letter THORN */ { "ß", 223 }, /* small sharp s = ess-zed */ { "à", 224 }, /* small a with grave */ { "á", 225 }, /* small a with acute */ { "â", 226 }, /* small a with cirucmflex */ { "ã", 227 }, /* small a with tilde */ { "&amul;", 228 }, /* small a with diaeresis */ { "å", 229 }, /* small a with ring */ { "æ", 230 }, /* small ligature ae */ { "ç", 231 }, /* small c with cedilla */ { "è", 232 }, /* small e with grave */ { "é", 233 }, /* small e with acute */ { "ê", 234 }, /* small e with circumflex */ { "&emul;", 235 }, /* small e with diaeresis */ { "ì", 236 }, /* small i with grave */ { "í", 237 }, /* small i with acute */ { "î", 238 }, /* small i with circumflex */ { "ï", 239 }, /* small i with diaeresis */ { "ð", 240 }, /* latin small letter eth */ { "ñ", 241 }, /* small n with tilde */ { "ò", 242 }, /* small o with grave */ { "ó", 243 }, /* small o with acute */ { "ô", 244 }, /* small o with circumflex */ { "õ", 245 }, /* small o with tilde */ { "ö", 246 }, /* small o with diaeresis */ { "÷", 247 }, /* division sign */ { "ø", 248 }, /* small o with slash */ { "ù", 249 }, /* small u with grave */ { "ú", 250 }, /* small u with acute */ { "û", 251 }, /* small u with circumflex */ { "ü", 252 }, /* small u with diaeresis */ { "ý", 253 }, /* small y with acute */ { "þ", 254 }, /* latin small letter thorn */ { "ÿ", 255 }, /* small y with diaeresis */ }; static unsigned int decode_html_entity( char *s, unsigned int *pi, int *err ) { int nhtml_entities = sizeof( html_entities ) / sizeof( entities ); char *e; int i, n=-1, len; for ( i=0; i #include #include "is_ws.h" #include "fields.h" #include "reftypes.h" int get_reftype( char *p, long refnum, char *progname, variants *all, int nall, char *tag ) { int i; p = skip_ws( p ); for ( i=0; intags; ++i ) /* if ( !strcasecmp( ((all[reftype]).tags[i]).oldstr, oldtag ) )*/ if ( !strcasecmp( (v->tags[i]).oldstr, oldtag ) ) return i; return -1; } /* translate_oldtag() */ int translate_oldtag( char *oldtag, int reftype, variants all[], int nall, int *processingtype, int *level, char **newtag ) { int n; n = process_findoldtag( oldtag, reftype, all, nall ); if ( n!=-1 ) { *processingtype = ((all[reftype]).tags[n]).processingtype; *level = ((all[reftype]).tags[n]).level; *newtag = ((all[reftype]).tags[n]).newstr; } return n; } hs-bibutils-5.5/bibutils/bibutils.c0000644000000000000000000000356012445605732015610 0ustar0000000000000000/* * bibutils.c * * Copyright (c) Chris Putnam 2005-2013 * * Source code released under the GPL version 2 * */ #include #include #include "bibutils.h" /* bibl format includes */ #include "adsout.h" #include "biblatexin.h" #include "bibtexin.h" #include "bibtexout.h" #include "copacin.h" #include "ebiin.h" #include "endin.h" #include "endxmlin.h" #include "endout.h" #include "isiin.h" #include "isiout.h" #include "medin.h" #include "modsin.h" #include "modsout.h" #include "risin.h" #include "risout.h" #include "wordin.h" #include "wordout.h" void bibl_initparams( param *p, int readmode, int writemode, char *progname ) { switch ( readmode ) { case BIBL_BIBTEXIN: bibtexin_initparams( p, progname ); break; case BIBL_BIBLATEXIN: biblatexin_initparams( p, progname ); break; case BIBL_COPACIN: copacin_initparams( p, progname ); break; case BIBL_EBIIN: ebiin_initparams( p, progname ); break; case BIBL_ENDNOTEIN: endin_initparams( p, progname ); break; case BIBL_ENDNOTEXMLIN: endxmlin_initparams( p, progname ); break; case BIBL_MEDLINEIN: medin_initparams( p, progname ); break; case BIBL_MODSIN: modsin_initparams( p, progname ); break; case BIBL_RISIN: risin_initparams( p, progname ); break; case BIBL_WORDIN: wordin_initparams( p, progname ); break; default: /* internal error */; } switch ( writemode ) { case BIBL_ADSABSOUT: adsout_initparams( p, progname ); break; case BIBL_BIBTEXOUT: bibtexout_initparams( p, progname ); break; case BIBL_ENDNOTEOUT: endout_initparams( p, progname ); break; case BIBL_ISIOUT: isiout_initparams( p, progname ); break; case BIBL_MODSOUT: modsout_initparams( p, progname ); break; case BIBL_RISOUT: risout_initparams( p, progname ); break; case BIBL_WORD2007OUT: wordout_initparams( p, progname ); break; default: /* internal error */; } } hs-bibutils-5.5/bibutils/modstypes.c0000644000000000000000000000254712445605732016026 0ustar0000000000000000/* * modstypes.c * * Copyright (c) Chris Putnam 2004-2013 * * Source code released under the GPL version 2 * */ #include #include #include "modstypes.h" /* Conversion information for identifier type attributes: * * XXXX-XXXX * */ convert identifier_types[] = { { "citekey", "REFNUM" }, { "issn", "ISSN" }, { "isbn", "ISBN" }, { "doi", "DOI" }, { "url", "URL" }, { "uri", "URL" }, { "pubmed", "PUBMED" }, { "medline", "MEDLINE" }, { "pii", "PII" }, { "isi", "ISIREFNUM" }, { "lccn", "LCCN" }, { "serial number", "SERIALNUMBER" }, { "accessnum", "ACCESSNUM" } }; int nidentifier_types = sizeof( identifier_types ) / sizeof( identifier_types[0] ); char * mods_find_attrib( char *internal_name, convert *data, int ndata ) { int i; for ( i=0; i #include #include #include "charsets.h" #define ARRAYSIZE( a ) ( sizeof(a) / sizeof(a[0]) ) #define ARRAYSTART( a ) ( &(a[0]) ) #define CHARSETARRAY( a ) ARRAYSTART( a ), ARRAYSIZE( a ) #define CHARSET_NALIASES ( 7 ) typedef struct convert_t { unsigned int index, unicode; } convert_t; typedef struct allcharconvert_t { char cmdname[15]; char descriptname[200]; char aliases[CHARSET_NALIASES][25]; convert_t *table; int ntable; } allcharconvert_t; static convert_t adobeiso[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 128 }, { 129, 129 }, { 130, 130 }, { 131, 131 }, { 132, 132 }, { 133, 133 }, { 134, 134 }, { 135, 135 }, { 136, 136 }, { 137, 137 }, { 138, 138 }, { 139, 139 }, { 140, 140 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 305 }, { 145, 768 }, { 146, 769 }, { 147, 770 }, { 148, 771 }, { 149, 772 }, { 150, 774 }, { 151, 775 }, { 152, 776 }, { 153, 153 }, { 154, 778 }, { 155, 807 }, { 156, 156 }, { 157, 779 }, { 158, 808 }, { 159, 780 }, { 160, 160 }, { 161, 161 }, { 162, 162 }, { 163, 163 }, { 164, 164 }, { 165, 165 }, { 166, 166 }, { 167, 167 }, { 168, 168 }, { 169, 169 }, { 170, 170 }, { 171, 171 }, { 172, 172 }, { 173, 173 }, { 174, 174 }, { 175, 175 }, { 176, 176 }, { 177, 177 }, { 178, 178 }, { 179, 179 }, { 180, 180 }, { 181, 181 }, { 182, 182 }, { 183, 183 }, { 184, 184 }, { 185, 185 }, { 186, 186 }, { 187, 187 }, { 188, 188 }, { 189, 189 }, { 190, 190 }, { 191, 191 }, { 192, 192 }, { 193, 193 }, { 194, 194 }, { 195, 195 }, { 196, 196 }, { 197, 197 }, { 198, 198 }, { 199, 199 }, { 200, 200 }, { 201, 201 }, { 202, 202 }, { 203, 203 }, { 204, 204 }, { 205, 205 }, { 206, 206 }, { 207, 207 }, { 208, 208 }, { 209, 209 }, { 210, 210 }, { 211, 211 }, { 212, 212 }, { 213, 213 }, { 214, 214 }, { 215, 215 }, { 216, 216 }, { 217, 217 }, { 218, 218 }, { 219, 219 }, { 220, 220 }, { 221, 221 }, { 222, 222 }, { 223, 223 }, { 224, 224 }, { 225, 225 }, { 226, 226 }, { 227, 227 }, { 228, 228 }, { 229, 229 }, { 230, 230 }, { 231, 231 }, { 232, 232 }, { 233, 233 }, { 234, 234 }, { 235, 235 }, { 236, 236 }, { 237, 237 }, { 238, 238 }, { 239, 239 }, { 240, 240 }, { 241, 241 }, { 242, 242 }, { 243, 243 }, { 244, 244 }, { 245, 245 }, { 246, 246 }, { 247, 247 }, { 248, 248 }, { 249, 249 }, { 250, 250 }, { 251, 251 }, { 252, 252 }, { 253, 253 }, { 254, 254 }, { 255, 255 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 374 }, { 89, 376 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t adobestd[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 128 }, { 129, 129 }, { 130, 130 }, { 131, 131 }, { 132, 132 }, { 133, 133 }, { 134, 134 }, { 135, 135 }, { 136, 136 }, { 137, 137 }, { 138, 138 }, { 139, 139 }, { 140, 140 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 144 }, { 145, 145 }, { 146, 146 }, { 147, 147 }, { 148, 148 }, { 149, 149 }, { 150, 150 }, { 151, 151 }, { 152, 152 }, { 153, 153 }, { 154, 154 }, { 155, 155 }, { 156, 156 }, { 157, 157 }, { 158, 158 }, { 159, 159 }, { 160, 160 }, { 161, 161 }, { 162, 162 }, { 163, 163 }, { 164, 8260 }, { 165, 165 }, { 166, 402 }, { 167, 167 }, { 168, 164 }, { 169, 169 }, { 170, 8220 }, { 171, 171 }, { 172, 8249 }, { 173, 8250 }, { 174, 64257 }, { 175, 64258 }, { 176, 176 }, { 177, 8211 }, { 178, 8224 }, { 179, 8225 }, { 180, 183 }, { 181, 181 }, { 182, 182 }, { 183, 8729 }, { 184, 8218 }, { 185, 8222 }, { 186, 8221 }, { 187, 187 }, { 188, 8943 }, { 189, 8240 }, { 190, 190 }, { 191, 191 }, { 192, 192 }, { 193, 768 }, { 194, 180 }, { 195, 770 }, { 196, 771 }, { 197, 175 }, { 198, 728 }, { 199, 729 }, { 200, 168 }, { 201, 201 }, { 202, 176 }, { 203, 184 }, { 204, 204 }, { 205, 733 }, { 206, 731 }, { 207, 711 }, { 208, 8212 }, { 209, 209 }, { 210, 210 }, { 211, 211 }, { 212, 212 }, { 213, 213 }, { 214, 214 }, { 215, 215 }, { 216, 216 }, { 217, 217 }, { 218, 218 }, { 219, 219 }, { 220, 220 }, { 221, 221 }, { 222, 222 }, { 223, 223 }, { 224, 224 }, { 225, 198 }, { 226, 226 }, { 227, 170 }, { 228, 228 }, { 229, 229 }, { 230, 230 }, { 231, 231 }, { 232, 321 }, { 233, 216 }, { 234, 338 }, { 235, 186 }, { 236, 236 }, { 237, 237 }, { 238, 238 }, { 239, 239 }, { 240, 240 }, { 241, 230 }, { 242, 242 }, { 243, 243 }, { 244, 244 }, { 245, 305 }, { 246, 246 }, { 247, 247 }, { 248, 322 }, { 249, 248 }, { 250, 339 }, { 251, 223 }, { 252, 252 }, { 253, 253 }, { 254, 254 }, { 255, 255 }, { 39, 8216 }, { 39, 8217 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 193 }, { 65, 194 }, { 65, 195 }, { 65, 196 }, { 65, 197 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 225 }, { 97, 227 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 199 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 200 }, { 69, 202 }, { 69, 203 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 232 }, { 101, 233 }, { 101, 234 }, { 101, 235 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 205 }, { 73, 206 }, { 73, 207 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 241 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 245 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 249 }, { 117, 250 }, { 117, 251 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 374 }, { 89, 376 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t adobesym[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 128 }, { 129, 129 }, { 130, 130 }, { 131, 131 }, { 132, 132 }, { 133, 133 }, { 134, 134 }, { 135, 135 }, { 136, 136 }, { 137, 137 }, { 138, 138 }, { 139, 139 }, { 140, 140 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 144 }, { 145, 145 }, { 146, 146 }, { 147, 147 }, { 148, 148 }, { 149, 149 }, { 150, 150 }, { 151, 151 }, { 152, 152 }, { 153, 153 }, { 154, 154 }, { 155, 155 }, { 156, 156 }, { 157, 157 }, { 158, 158 }, { 159, 159 }, { 160, 160 }, { 161, 161 }, { 162, 8242 }, { 163, 8804 }, { 164, 8725 }, { 165, 8734 }, { 166, 402 }, { 167, 9827 }, { 168, 9830 }, { 169, 9829 }, { 170, 9824 }, { 171, 8596 }, { 172, 8592 }, { 173, 8593 }, { 174, 8594 }, { 175, 8595 }, { 176, 176 }, { 177, 177 }, { 178, 8243 }, { 179, 8805 }, { 180, 215 }, { 181, 8733 }, { 182, 8706 }, { 183, 8729 }, { 184, 247 }, { 185, 8800 }, { 186, 8801 }, { 187, 8776 }, { 188, 8943 }, { 189, 189 }, { 190, 190 }, { 191, 191 }, { 192, 192 }, { 193, 193 }, { 194, 194 }, { 195, 195 }, { 196, 196 }, { 197, 197 }, { 198, 8709 }, { 199, 8745 }, { 200, 8746 }, { 201, 8835 }, { 202, 8839 }, { 203, 203 }, { 204, 8834 }, { 205, 8838 }, { 206, 8712 }, { 207, 207 }, { 208, 8736 }, { 209, 8711 }, { 210, 210 }, { 211, 211 }, { 212, 212 }, { 213, 8719 }, { 214, 8730 }, { 215, 8901 }, { 216, 172 }, { 217, 8743 }, { 218, 8744 }, { 219, 8660 }, { 220, 8656 }, { 221, 8657 }, { 222, 8658 }, { 223, 8659 }, { 224, 9674 }, { 225, 9001 }, { 226, 226 }, { 227, 227 }, { 228, 228 }, { 229, 8721 }, { 230, 230 }, { 231, 231 }, { 232, 232 }, { 233, 233 }, { 234, 234 }, { 235, 235 }, { 236, 236 }, { 237, 237 }, { 238, 238 }, { 239, 239 }, { 240, 240 }, { 241, 9002 }, { 242, 8747 }, { 243, 243 }, { 244, 244 }, { 245, 245 }, { 246, 246 }, { 247, 247 }, { 248, 248 }, { 249, 249 }, { 250, 250 }, { 251, 251 }, { 252, 252 }, { 253, 253 }, { 254, 254 }, { 255, 255 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 224 }, { 97, 225 }, { 97, 229 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 199 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 200 }, { 69, 201 }, { 69, 202 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 204 }, { 73, 205 }, { 73, 206 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 209 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 241 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 213 }, { 78, 214 }, { 78, 216 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 242 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 217 }, { 85, 218 }, { 85, 219 }, { 85, 220 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 221 }, { 89, 374 }, { 89, 376 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t applecro[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 196 }, { 129, 197 }, { 130, 199 }, { 131, 201 }, { 132, 209 }, { 133, 214 }, { 134, 220 }, { 135, 225 }, { 136, 224 }, { 137, 226 }, { 138, 228 }, { 139, 227 }, { 140, 229 }, { 141, 231 }, { 142, 233 }, { 143, 232 }, { 144, 234 }, { 145, 235 }, { 146, 237 }, { 147, 236 }, { 148, 238 }, { 149, 239 }, { 150, 241 }, { 151, 243 }, { 152, 242 }, { 153, 244 }, { 154, 246 }, { 155, 245 }, { 156, 250 }, { 157, 249 }, { 158, 251 }, { 159, 252 }, { 160, 8224 }, { 161, 176 }, { 162, 162 }, { 163, 163 }, { 164, 167 }, { 165, 8729 }, { 166, 182 }, { 167, 223 }, { 168, 174 }, { 169, 352 }, { 170, 8482 }, { 171, 180 }, { 172, 168 }, { 173, 8800 }, { 174, 381 }, { 175, 216 }, { 176, 8734 }, { 177, 177 }, { 178, 8804 }, { 179, 8805 }, { 180, 916 }, { 181, 181 }, { 182, 8706 }, { 183, 8721 }, { 184, 8719 }, { 185, 353 }, { 186, 8747 }, { 187, 170 }, { 188, 186 }, { 189, 937 }, { 190, 382 }, { 191, 248 }, { 192, 191 }, { 193, 161 }, { 194, 172 }, { 195, 8730 }, { 196, 402 }, { 197, 8776 }, { 198, 262 }, { 199, 171 }, { 200, 268 }, { 201, 8943 }, { 202, 160 }, { 203, 192 }, { 204, 195 }, { 205, 213 }, { 206, 338 }, { 207, 339 }, { 208, 272 }, { 209, 8212 }, { 210, 8220 }, { 211, 8221 }, { 212, 8216 }, { 213, 8217 }, { 214, 247 }, { 215, 9674 }, { 216, 65534 }, { 217, 169 }, { 218, 8260 }, { 219, 164 }, { 220, 8249 }, { 221, 8250 }, { 222, 198 }, { 223, 187 }, { 224, 8211 }, { 225, 183 }, { 226, 8218 }, { 227, 8222 }, { 228, 8240 }, { 229, 194 }, { 230, 263 }, { 231, 193 }, { 232, 269 }, { 233, 200 }, { 234, 205 }, { 235, 206 }, { 236, 207 }, { 237, 204 }, { 238, 211 }, { 239, 212 }, { 240, 273 }, { 241, 210 }, { 242, 218 }, { 243, 219 }, { 244, 217 }, { 245, 305 }, { 246, 770 }, { 247, 771 }, { 248, 175 }, { 249, 960 }, { 250, 203 }, { 251, 730 }, { 252, 184 }, { 253, 202 }, { 254, 230 }, { 255, 711 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 264 }, { 67, 266 }, { 99, 265 }, { 99, 267 }, { 68, 270 }, { 100, 271 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 221 }, { 89, 374 }, { 89, 376 }, { 121, 253 }, { 121, 255 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 122, 378 }, { 122, 380 }, }; static convert_t applecyr[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 1040 }, { 129, 1041 }, { 130, 1042 }, { 131, 1043 }, { 132, 1044 }, { 133, 1045 }, { 134, 1046 }, { 135, 1047 }, { 136, 1048 }, { 137, 1049 }, { 138, 1050 }, { 139, 1051 }, { 140, 1052 }, { 141, 1053 }, { 142, 1054 }, { 143, 1055 }, { 144, 1056 }, { 145, 1057 }, { 146, 1058 }, { 147, 1059 }, { 148, 1060 }, { 149, 1061 }, { 150, 1062 }, { 151, 1063 }, { 152, 1064 }, { 153, 1065 }, { 154, 1066 }, { 155, 1067 }, { 156, 1068 }, { 157, 1069 }, { 158, 1070 }, { 159, 1071 }, { 160, 8224 }, { 161, 176 }, { 162, 162 }, { 163, 163 }, { 164, 167 }, { 165, 8729 }, { 166, 182 }, { 167, 1030 }, { 168, 174 }, { 169, 169 }, { 170, 8482 }, { 171, 1026 }, { 172, 1106 }, { 173, 8800 }, { 174, 1027 }, { 175, 1107 }, { 176, 8734 }, { 177, 177 }, { 178, 8804 }, { 179, 8805 }, { 180, 1110 }, { 181, 181 }, { 182, 8706 }, { 183, 1032 }, { 184, 1028 }, { 185, 1108 }, { 186, 1031 }, { 187, 1111 }, { 188, 1033 }, { 189, 1113 }, { 190, 1034 }, { 191, 1114 }, { 192, 1112 }, { 193, 1029 }, { 194, 172 }, { 195, 8730 }, { 196, 402 }, { 197, 8776 }, { 198, 916 }, { 199, 171 }, { 200, 187 }, { 201, 8943 }, { 202, 160 }, { 203, 1035 }, { 204, 1115 }, { 205, 1036 }, { 206, 1116 }, { 207, 1109 }, { 208, 8211 }, { 209, 8212 }, { 210, 8220 }, { 211, 8221 }, { 212, 8216 }, { 213, 8217 }, { 214, 247 }, { 215, 8222 }, { 216, 1038 }, { 217, 1118 }, { 218, 1039 }, { 219, 1119 }, { 220, 8470 }, { 221, 1025 }, { 222, 1105 }, { 223, 1103 }, { 224, 1072 }, { 225, 1073 }, { 226, 1074 }, { 227, 1075 }, { 228, 1076 }, { 229, 1077 }, { 230, 1078 }, { 231, 1079 }, { 232, 1080 }, { 233, 1081 }, { 234, 1082 }, { 235, 1083 }, { 236, 1084 }, { 237, 1085 }, { 238, 1086 }, { 239, 1087 }, { 240, 1088 }, { 241, 1089 }, { 242, 1090 }, { 243, 1091 }, { 244, 1092 }, { 245, 1093 }, { 246, 1094 }, { 247, 1095 }, { 248, 1096 }, { 249, 1097 }, { 250, 1098 }, { 251, 1099 }, { 252, 1100 }, { 253, 1101 }, { 254, 1102 }, { 255, 164 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 192 }, { 65, 193 }, { 65, 194 }, { 65, 195 }, { 65, 196 }, { 65, 197 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 224 }, { 97, 225 }, { 97, 226 }, { 97, 227 }, { 97, 228 }, { 97, 229 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 199 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 231 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 200 }, { 69, 201 }, { 69, 202 }, { 69, 203 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 232 }, { 101, 233 }, { 101, 234 }, { 101, 235 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 204 }, { 73, 205 }, { 73, 206 }, { 73, 207 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 236 }, { 105, 237 }, { 105, 238 }, { 105, 239 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 209 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 241 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 210 }, { 78, 211 }, { 78, 212 }, { 78, 213 }, { 78, 214 }, { 78, 216 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 242 }, { 110, 243 }, { 110, 244 }, { 110, 245 }, { 110, 246 }, { 110, 248 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 217 }, { 85, 218 }, { 85, 219 }, { 85, 220 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 249 }, { 117, 250 }, { 117, 251 }, { 117, 252 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 221 }, { 89, 374 }, { 89, 376 }, { 121, 253 }, { 121, 255 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t applegk2[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 196 }, { 129, 913 }, { 130, 914 }, { 131, 915 }, { 132, 916 }, { 133, 214 }, { 134, 220 }, { 135, 917 }, { 136, 224 }, { 137, 226 }, { 138, 228 }, { 139, 918 }, { 140, 919 }, { 141, 231 }, { 142, 233 }, { 143, 232 }, { 144, 234 }, { 145, 235 }, { 146, 163 }, { 147, 8482 }, { 148, 238 }, { 149, 239 }, { 150, 8729 }, { 151, 920 }, { 152, 921 }, { 153, 244 }, { 154, 246 }, { 155, 155 }, { 156, 922 }, { 157, 249 }, { 158, 251 }, { 159, 252 }, { 160, 923 }, { 161, 161 }, { 162, 162 }, { 163, 163 }, { 164, 164 }, { 165, 165 }, { 166, 166 }, { 167, 223 }, { 168, 174 }, { 169, 169 }, { 170, 170 }, { 171, 938 }, { 172, 167 }, { 173, 8800 }, { 174, 924 }, { 175, 903 }, { 176, 925 }, { 177, 177 }, { 178, 8804 }, { 179, 8805 }, { 180, 926 }, { 181, 927 }, { 182, 928 }, { 183, 929 }, { 184, 931 }, { 185, 932 }, { 186, 933 }, { 187, 939 }, { 188, 934 }, { 189, 935 }, { 190, 936 }, { 191, 937 }, { 192, 940 }, { 193, 185 }, { 194, 172 }, { 195, 178 }, { 196, 179 }, { 197, 168 }, { 198, 901 }, { 199, 171 }, { 200, 187 }, { 201, 8943 }, { 202, 160 }, { 203, 166 }, { 204, 189 }, { 205, 902 }, { 206, 904 }, { 207, 176 }, { 208, 8211 }, { 209, 8212 }, { 210, 8220 }, { 211, 8221 }, { 212, 8216 }, { 213, 8217 }, { 214, 900 }, { 215, 905 }, { 216, 906 }, { 217, 908 }, { 218, 910 }, { 219, 941 }, { 220, 942 }, { 221, 943 }, { 222, 972 }, { 223, 911 }, { 224, 973 }, { 225, 945 }, { 226, 946 }, { 227, 968 }, { 228, 948 }, { 229, 949 }, { 230, 966 }, { 231, 947 }, { 232, 951 }, { 233, 953 }, { 234, 958 }, { 235, 954 }, { 236, 955 }, { 237, 956 }, { 238, 957 }, { 239, 959 }, { 240, 960 }, { 241, 974 }, { 242, 961 }, { 243, 963 }, { 244, 964 }, { 245, 952 }, { 246, 969 }, { 247, 962 }, { 248, 967 }, { 249, 965 }, { 250, 950 }, { 251, 970 }, { 252, 971 }, { 253, 912 }, { 254, 944 }, { 255, 8240 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 192 }, { 65, 193 }, { 65, 194 }, { 65, 195 }, { 65, 197 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 225 }, { 97, 227 }, { 97, 229 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 199 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 200 }, { 69, 201 }, { 69, 202 }, { 69, 203 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 204 }, { 73, 205 }, { 73, 206 }, { 73, 207 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 236 }, { 105, 237 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 209 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 241 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 210 }, { 78, 211 }, { 78, 212 }, { 78, 213 }, { 78, 216 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 242 }, { 110, 243 }, { 110, 245 }, { 110, 248 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 217 }, { 85, 218 }, { 85, 219 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 250 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 221 }, { 89, 374 }, { 89, 376 }, { 121, 253 }, { 121, 255 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t applegrk[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 128 }, { 129, 129 }, { 130, 130 }, { 131, 131 }, { 132, 132 }, { 133, 133 }, { 134, 134 }, { 135, 135 }, { 136, 136 }, { 137, 137 }, { 138, 138 }, { 139, 139 }, { 140, 140 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 144 }, { 145, 145 }, { 146, 146 }, { 147, 147 }, { 148, 148 }, { 149, 149 }, { 150, 150 }, { 151, 151 }, { 152, 152 }, { 153, 153 }, { 154, 154 }, { 155, 155 }, { 156, 156 }, { 157, 157 }, { 158, 158 }, { 159, 159 }, { 160, 160 }, { 161, 161 }, { 162, 162 }, { 163, 163 }, { 164, 164 }, { 165, 165 }, { 166, 166 }, { 167, 167 }, { 168, 168 }, { 169, 169 }, { 170, 170 }, { 171, 171 }, { 172, 172 }, { 173, 173 }, { 174, 174 }, { 175, 175 }, { 176, 176 }, { 177, 177 }, { 178, 178 }, { 179, 179 }, { 180, 900 }, { 181, 901 }, { 182, 902 }, { 183, 183 }, { 184, 904 }, { 185, 905 }, { 186, 906 }, { 187, 187 }, { 188, 908 }, { 189, 189 }, { 190, 910 }, { 191, 911 }, { 192, 912 }, { 193, 913 }, { 194, 914 }, { 195, 915 }, { 196, 916 }, { 197, 917 }, { 198, 918 }, { 199, 919 }, { 200, 920 }, { 201, 921 }, { 202, 922 }, { 203, 923 }, { 204, 924 }, { 205, 925 }, { 206, 926 }, { 207, 927 }, { 208, 928 }, { 209, 929 }, { 210, 210 }, { 211, 931 }, { 212, 932 }, { 213, 933 }, { 214, 934 }, { 215, 935 }, { 216, 936 }, { 217, 937 }, { 218, 938 }, { 219, 939 }, { 220, 940 }, { 221, 941 }, { 222, 942 }, { 223, 943 }, { 224, 944 }, { 225, 945 }, { 226, 946 }, { 227, 947 }, { 228, 948 }, { 229, 949 }, { 230, 950 }, { 231, 951 }, { 232, 952 }, { 233, 953 }, { 234, 954 }, { 235, 955 }, { 236, 956 }, { 237, 957 }, { 238, 958 }, { 239, 959 }, { 240, 960 }, { 241, 961 }, { 242, 962 }, { 243, 963 }, { 244, 964 }, { 245, 965 }, { 246, 966 }, { 247, 967 }, { 248, 968 }, { 249, 969 }, { 250, 970 }, { 251, 971 }, { 252, 972 }, { 253, 973 }, { 254, 974 }, { 255, 255 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 192 }, { 65, 193 }, { 65, 194 }, { 65, 195 }, { 65, 196 }, { 65, 197 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 224 }, { 97, 225 }, { 97, 226 }, { 97, 227 }, { 97, 228 }, { 97, 229 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 199 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 231 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 200 }, { 69, 201 }, { 69, 202 }, { 69, 203 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 232 }, { 101, 233 }, { 101, 234 }, { 101, 235 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 204 }, { 73, 205 }, { 73, 206 }, { 73, 207 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 236 }, { 105, 237 }, { 105, 238 }, { 105, 239 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 209 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 241 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 211 }, { 78, 212 }, { 78, 213 }, { 78, 214 }, { 78, 216 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 242 }, { 110, 243 }, { 110, 244 }, { 110, 245 }, { 110, 246 }, { 110, 248 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 217 }, { 85, 218 }, { 85, 219 }, { 85, 220 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 249 }, { 117, 250 }, { 117, 251 }, { 117, 252 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 221 }, { 89, 374 }, { 89, 376 }, { 121, 253 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t macice[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 196 }, { 129, 197 }, { 130, 199 }, { 131, 201 }, { 132, 209 }, { 133, 214 }, { 134, 220 }, { 135, 225 }, { 136, 224 }, { 137, 226 }, { 138, 228 }, { 139, 227 }, { 140, 229 }, { 141, 231 }, { 142, 233 }, { 143, 232 }, { 144, 234 }, { 145, 235 }, { 146, 237 }, { 147, 236 }, { 148, 238 }, { 149, 239 }, { 150, 241 }, { 151, 243 }, { 152, 242 }, { 153, 244 }, { 154, 246 }, { 155, 245 }, { 156, 250 }, { 157, 249 }, { 158, 251 }, { 159, 252 }, { 160, 221 }, { 161, 176 }, { 162, 162 }, { 163, 163 }, { 164, 167 }, { 165, 8729 }, { 166, 182 }, { 167, 223 }, { 168, 174 }, { 169, 169 }, { 170, 8482 }, { 171, 180 }, { 172, 168 }, { 173, 8800 }, { 174, 198 }, { 175, 216 }, { 176, 8734 }, { 177, 177 }, { 178, 8804 }, { 179, 8805 }, { 180, 165 }, { 181, 181 }, { 182, 8706 }, { 183, 8721 }, { 184, 8719 }, { 185, 960 }, { 186, 8747 }, { 187, 170 }, { 188, 186 }, { 189, 937 }, { 190, 230 }, { 191, 248 }, { 192, 191 }, { 193, 161 }, { 194, 172 }, { 195, 8730 }, { 196, 402 }, { 197, 8776 }, { 198, 916 }, { 199, 171 }, { 200, 187 }, { 201, 8943 }, { 202, 160 }, { 203, 192 }, { 204, 195 }, { 205, 213 }, { 206, 338 }, { 207, 339 }, { 208, 8211 }, { 209, 8212 }, { 210, 8220 }, { 211, 8221 }, { 212, 8216 }, { 213, 8217 }, { 214, 247 }, { 215, 9674 }, { 216, 255 }, { 217, 376 }, { 218, 8260 }, { 219, 164 }, { 220, 208 }, { 221, 240 }, { 222, 222 }, { 223, 254 }, { 224, 253 }, { 225, 183 }, { 226, 8218 }, { 227, 8222 }, { 228, 8240 }, { 229, 194 }, { 230, 202 }, { 231, 193 }, { 232, 203 }, { 233, 200 }, { 234, 205 }, { 235, 206 }, { 236, 207 }, { 237, 204 }, { 238, 211 }, { 239, 212 }, { 240, 65534 }, { 241, 210 }, { 242, 218 }, { 243, 219 }, { 244, 217 }, { 245, 305 }, { 246, 770 }, { 247, 771 }, { 248, 175 }, { 249, 728 }, { 250, 729 }, { 251, 730 }, { 252, 184 }, { 253, 733 }, { 254, 731 }, { 255, 711 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 374 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t macroman[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 196 }, { 129, 197 }, { 130, 199 }, { 131, 201 }, { 132, 209 }, { 133, 214 }, { 134, 220 }, { 135, 225 }, { 136, 224 }, { 137, 226 }, { 138, 228 }, { 139, 227 }, { 140, 229 }, { 141, 231 }, { 142, 233 }, { 143, 232 }, { 144, 234 }, { 145, 235 }, { 146, 237 }, { 147, 236 }, { 148, 238 }, { 149, 239 }, { 150, 241 }, { 151, 243 }, { 152, 242 }, { 153, 244 }, { 154, 246 }, { 155, 245 }, { 156, 250 }, { 157, 249 }, { 158, 251 }, { 159, 252 }, { 160, 8224 }, { 161, 176 }, { 162, 162 }, { 163, 163 }, { 164, 167 }, { 165, 8729 }, { 166, 182 }, { 167, 223 }, { 168, 174 }, { 169, 169 }, { 170, 8482 }, { 171, 180 }, { 172, 168 }, { 173, 8800 }, { 174, 198 }, { 175, 216 }, { 176, 8734 }, { 177, 177 }, { 178, 8804 }, { 179, 8805 }, { 180, 165 }, { 181, 181 }, { 182, 8706 }, { 183, 8721 }, { 184, 8719 }, { 185, 960 }, { 186, 8747 }, { 187, 170 }, { 188, 186 }, { 189, 937 }, { 190, 230 }, { 191, 248 }, { 192, 191 }, { 193, 161 }, { 194, 172 }, { 195, 8730 }, { 196, 402 }, { 197, 8776 }, { 198, 916 }, { 199, 171 }, { 200, 187 }, { 201, 8943 }, { 202, 160 }, { 203, 192 }, { 204, 195 }, { 205, 213 }, { 206, 338 }, { 207, 339 }, { 208, 8211 }, { 209, 8212 }, { 210, 8220 }, { 211, 8221 }, { 212, 8216 }, { 213, 8217 }, { 214, 247 }, { 215, 9674 }, { 216, 255 }, { 217, 376 }, { 218, 8260 }, { 219, 164 }, { 220, 8249 }, { 221, 8250 }, { 222, 64257 }, { 223, 64258 }, { 224, 8225 }, { 225, 183 }, { 226, 8218 }, { 227, 8222 }, { 228, 8240 }, { 229, 194 }, { 230, 202 }, { 231, 193 }, { 232, 203 }, { 233, 200 }, { 234, 205 }, { 235, 206 }, { 236, 207 }, { 237, 204 }, { 238, 211 }, { 239, 212 }, { 240, 240 }, { 241, 210 }, { 242, 218 }, { 243, 219 }, { 244, 217 }, { 245, 305 }, { 246, 770 }, { 247, 771 }, { 248, 175 }, { 249, 728 }, { 250, 729 }, { 251, 730 }, { 252, 184 }, { 253, 733 }, { 254, 731 }, { 255, 711 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 221 }, { 89, 374 }, { 121, 253 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t macromanian[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 196 }, { 129, 197 }, { 130, 199 }, { 131, 201 }, { 132, 209 }, { 133, 214 }, { 134, 220 }, { 135, 225 }, { 136, 224 }, { 137, 226 }, { 138, 228 }, { 139, 227 }, { 140, 229 }, { 141, 231 }, { 142, 233 }, { 143, 232 }, { 144, 234 }, { 145, 235 }, { 146, 237 }, { 147, 236 }, { 148, 238 }, { 149, 239 }, { 150, 241 }, { 151, 243 }, { 152, 242 }, { 153, 244 }, { 154, 246 }, { 155, 245 }, { 156, 250 }, { 157, 249 }, { 158, 251 }, { 159, 252 }, { 160, 8224 }, { 161, 176 }, { 162, 162 }, { 163, 163 }, { 164, 167 }, { 165, 8729 }, { 166, 182 }, { 167, 223 }, { 168, 174 }, { 169, 169 }, { 170, 8482 }, { 171, 180 }, { 172, 168 }, { 173, 8800 }, { 174, 258 }, { 175, 350 }, { 176, 8734 }, { 177, 177 }, { 178, 8804 }, { 179, 8805 }, { 180, 165 }, { 181, 181 }, { 182, 8706 }, { 183, 8721 }, { 184, 8719 }, { 185, 960 }, { 186, 8747 }, { 187, 170 }, { 188, 186 }, { 189, 937 }, { 190, 259 }, { 191, 351 }, { 192, 191 }, { 193, 161 }, { 194, 172 }, { 195, 8730 }, { 196, 402 }, { 197, 8776 }, { 198, 916 }, { 199, 171 }, { 200, 187 }, { 201, 8943 }, { 202, 160 }, { 203, 192 }, { 204, 195 }, { 205, 213 }, { 206, 338 }, { 207, 339 }, { 208, 8211 }, { 209, 8212 }, { 210, 8220 }, { 211, 8221 }, { 212, 8216 }, { 213, 8217 }, { 214, 247 }, { 215, 9674 }, { 216, 255 }, { 217, 376 }, { 218, 8260 }, { 219, 164 }, { 220, 8249 }, { 221, 8250 }, { 222, 354 }, { 223, 355 }, { 224, 8225 }, { 225, 183 }, { 226, 8218 }, { 227, 8222 }, { 228, 8240 }, { 229, 194 }, { 230, 202 }, { 231, 193 }, { 232, 203 }, { 233, 200 }, { 234, 205 }, { 235, 206 }, { 236, 207 }, { 237, 204 }, { 238, 211 }, { 239, 212 }, { 240, 65534 }, { 241, 210 }, { 242, 218 }, { 243, 219 }, { 244, 217 }, { 245, 305 }, { 246, 770 }, { 247, 771 }, { 248, 175 }, { 249, 728 }, { 250, 729 }, { 251, 730 }, { 252, 184 }, { 253, 733 }, { 254, 731 }, { 255, 711 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 256 }, { 65, 260 }, { 65, 461 }, { 97, 257 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 216 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 248 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 353 }, { 84, 356 }, { 116, 357 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 221 }, { 89, 374 }, { 121, 253 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t macturkish[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 196 }, { 129, 197 }, { 130, 199 }, { 131, 201 }, { 132, 209 }, { 133, 214 }, { 134, 220 }, { 135, 225 }, { 136, 224 }, { 137, 226 }, { 138, 228 }, { 139, 227 }, { 140, 229 }, { 141, 231 }, { 142, 233 }, { 143, 232 }, { 144, 234 }, { 145, 235 }, { 146, 237 }, { 147, 236 }, { 148, 238 }, { 149, 239 }, { 150, 241 }, { 151, 243 }, { 152, 242 }, { 153, 244 }, { 154, 246 }, { 155, 245 }, { 156, 250 }, { 157, 249 }, { 158, 251 }, { 159, 252 }, { 160, 8224 }, { 161, 176 }, { 162, 162 }, { 163, 163 }, { 164, 167 }, { 165, 8729 }, { 166, 182 }, { 167, 223 }, { 168, 174 }, { 169, 169 }, { 170, 8482 }, { 171, 180 }, { 172, 168 }, { 173, 8800 }, { 174, 198 }, { 175, 216 }, { 176, 8734 }, { 177, 177 }, { 178, 8804 }, { 179, 8805 }, { 180, 165 }, { 181, 181 }, { 182, 8706 }, { 183, 8721 }, { 184, 8719 }, { 185, 960 }, { 186, 8747 }, { 187, 170 }, { 188, 186 }, { 189, 937 }, { 190, 230 }, { 191, 248 }, { 192, 191 }, { 193, 161 }, { 194, 172 }, { 195, 8730 }, { 196, 402 }, { 197, 8776 }, { 198, 916 }, { 199, 171 }, { 200, 187 }, { 201, 8943 }, { 202, 160 }, { 203, 192 }, { 204, 195 }, { 205, 213 }, { 206, 338 }, { 207, 339 }, { 208, 8211 }, { 209, 8212 }, { 210, 8220 }, { 211, 8221 }, { 212, 8216 }, { 213, 8217 }, { 214, 247 }, { 215, 9674 }, { 216, 255 }, { 217, 376 }, { 218, 286 }, { 219, 287 }, { 220, 304 }, { 221, 305 }, { 222, 350 }, { 223, 351 }, { 224, 8225 }, { 225, 183 }, { 226, 8218 }, { 227, 8222 }, { 228, 8240 }, { 229, 194 }, { 230, 202 }, { 231, 193 }, { 232, 203 }, { 233, 200 }, { 234, 205 }, { 235, 206 }, { 236, 207 }, { 237, 204 }, { 238, 211 }, { 239, 212 }, { 240, 65534 }, { 241, 210 }, { 242, 218 }, { 243, 219 }, { 244, 217 }, { 245, 245 }, { 246, 770 }, { 247, 771 }, { 248, 175 }, { 249, 728 }, { 250, 729 }, { 251, 730 }, { 252, 184 }, { 253, 733 }, { 254, 731 }, { 255, 711 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 221 }, { 89, 374 }, { 121, 253 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t atarist[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 199 }, { 129, 252 }, { 130, 233 }, { 131, 226 }, { 132, 228 }, { 133, 224 }, { 134, 229 }, { 135, 231 }, { 136, 234 }, { 137, 235 }, { 138, 232 }, { 139, 239 }, { 140, 238 }, { 141, 236 }, { 142, 196 }, { 143, 197 }, { 144, 201 }, { 145, 230 }, { 146, 198 }, { 147, 244 }, { 148, 246 }, { 149, 242 }, { 150, 251 }, { 151, 249 }, { 152, 255 }, { 153, 214 }, { 154, 220 }, { 155, 162 }, { 156, 163 }, { 157, 165 }, { 158, 223 }, { 159, 402 }, { 160, 225 }, { 161, 237 }, { 162, 243 }, { 163, 250 }, { 164, 241 }, { 165, 209 }, { 166, 170 }, { 167, 186 }, { 168, 191 }, { 169, 8976 }, { 170, 172 }, { 171, 189 }, { 172, 188 }, { 173, 161 }, { 174, 171 }, { 175, 187 }, { 176, 227 }, { 177, 245 }, { 178, 216 }, { 179, 248 }, { 180, 339 }, { 181, 338 }, { 182, 192 }, { 183, 195 }, { 184, 213 }, { 185, 168 }, { 186, 180 }, { 187, 8224 }, { 188, 182 }, { 189, 169 }, { 190, 174 }, { 191, 8482 }, { 192, 307 }, { 193, 306 }, { 194, 1488 }, { 195, 1489 }, { 196, 1490 }, { 197, 1491 }, { 198, 1492 }, { 199, 1493 }, { 200, 1494 }, { 201, 1495 }, { 202, 1496 }, { 203, 1497 }, { 204, 1499 }, { 205, 1500 }, { 206, 1502 }, { 207, 1504 }, { 208, 1505 }, { 209, 1506 }, { 210, 1508 }, { 211, 1510 }, { 212, 1511 }, { 213, 1512 }, { 214, 1513 }, { 215, 1514 }, { 216, 1503 }, { 217, 1498 }, { 218, 1501 }, { 219, 1507 }, { 220, 1509 }, { 221, 167 }, { 222, 8743 }, { 223, 8734 }, { 224, 945 }, { 225, 946 }, { 226, 915 }, { 227, 960 }, { 228, 931 }, { 229, 963 }, { 230, 181 }, { 231, 964 }, { 232, 934 }, { 233, 920 }, { 234, 937 }, { 235, 948 }, { 236, 8750 }, { 237, 966 }, { 238, 949 }, { 239, 8745 }, { 240, 8801 }, { 241, 177 }, { 242, 8805 }, { 243, 8804 }, { 244, 8992 }, { 245, 8993 }, { 246, 247 }, { 247, 8776 }, { 248, 176 }, { 249, 8729 }, { 250, 183 }, { 251, 8730 }, { 252, 8319 }, { 253, 178 }, { 254, 179 }, { 255, 175 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 193 }, { 65, 194 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 200 }, { 69, 202 }, { 69, 203 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 204 }, { 73, 205 }, { 73, 206 }, { 73, 207 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 210 }, { 78, 211 }, { 78, 212 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 217 }, { 85, 218 }, { 85, 219 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 221 }, { 89, 374 }, { 89, 376 }, { 121, 253 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t cp437[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 199 }, { 129, 252 }, { 130, 233 }, { 131, 226 }, { 132, 228 }, { 133, 224 }, { 134, 229 }, { 135, 231 }, { 136, 234 }, { 137, 235 }, { 138, 232 }, { 139, 239 }, { 140, 238 }, { 141, 236 }, { 142, 196 }, { 143, 197 }, { 144, 201 }, { 145, 230 }, { 146, 198 }, { 147, 244 }, { 148, 246 }, { 149, 242 }, { 150, 251 }, { 151, 249 }, { 152, 255 }, { 153, 214 }, { 154, 220 }, { 155, 162 }, { 156, 163 }, { 157, 165 }, { 158, 8359 }, { 159, 402 }, { 160, 225 }, { 161, 237 }, { 162, 243 }, { 163, 250 }, { 164, 241 }, { 165, 209 }, { 166, 170 }, { 167, 186 }, { 168, 191 }, { 169, 8976 }, { 170, 172 }, { 171, 189 }, { 172, 188 }, { 173, 161 }, { 174, 171 }, { 175, 187 }, { 176, 9617 }, { 177, 9618 }, { 178, 9619 }, { 179, 9474 }, { 180, 9508 }, { 181, 9569 }, { 182, 9570 }, { 183, 9558 }, { 184, 9557 }, { 185, 9571 }, { 186, 9553 }, { 187, 9559 }, { 188, 9565 }, { 189, 9564 }, { 190, 9563 }, { 191, 9488 }, { 192, 9492 }, { 193, 9524 }, { 194, 9516 }, { 195, 9500 }, { 196, 9472 }, { 197, 9532 }, { 198, 9566 }, { 199, 9567 }, { 200, 9562 }, { 201, 9556 }, { 202, 9577 }, { 203, 9574 }, { 204, 9568 }, { 205, 9552 }, { 206, 9580 }, { 207, 9575 }, { 208, 9576 }, { 209, 9572 }, { 210, 9573 }, { 211, 9561 }, { 212, 9560 }, { 213, 9554 }, { 214, 9555 }, { 215, 9579 }, { 216, 9578 }, { 217, 9496 }, { 218, 9484 }, { 219, 9608 }, { 220, 9604 }, { 221, 9612 }, { 222, 9616 }, { 223, 9600 }, { 224, 945 }, { 225, 223 }, { 226, 915 }, { 227, 960 }, { 228, 931 }, { 229, 963 }, { 230, 181 }, { 231, 964 }, { 232, 934 }, { 233, 920 }, { 234, 937 }, { 235, 948 }, { 236, 8734 }, { 237, 966 }, { 238, 949 }, { 239, 8745 }, { 240, 8801 }, { 241, 177 }, { 242, 8805 }, { 243, 8804 }, { 244, 8992 }, { 245, 8993 }, { 246, 247 }, { 247, 8776 }, { 248, 176 }, { 249, 8729 }, { 250, 183 }, { 251, 8730 }, { 252, 8319 }, { 253, 178 }, { 254, 9632 }, { 255, 160 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 192 }, { 65, 193 }, { 65, 194 }, { 65, 195 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 227 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 200 }, { 69, 202 }, { 69, 203 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 204 }, { 73, 205 }, { 73, 206 }, { 73, 207 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 210 }, { 78, 211 }, { 78, 212 }, { 78, 213 }, { 78, 216 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 245 }, { 110, 248 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 217 }, { 85, 218 }, { 85, 219 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 221 }, { 89, 374 }, { 89, 376 }, { 121, 253 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t cp737[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 913 }, { 129, 914 }, { 130, 915 }, { 131, 916 }, { 132, 917 }, { 133, 918 }, { 134, 919 }, { 135, 920 }, { 136, 921 }, { 137, 922 }, { 138, 923 }, { 139, 924 }, { 140, 925 }, { 141, 926 }, { 142, 927 }, { 143, 928 }, { 144, 929 }, { 145, 931 }, { 146, 932 }, { 147, 933 }, { 148, 934 }, { 149, 935 }, { 150, 936 }, { 151, 937 }, { 152, 945 }, { 153, 946 }, { 154, 947 }, { 155, 948 }, { 156, 949 }, { 157, 950 }, { 158, 951 }, { 159, 952 }, { 160, 953 }, { 161, 954 }, { 162, 955 }, { 163, 956 }, { 164, 957 }, { 165, 958 }, { 166, 959 }, { 167, 960 }, { 168, 961 }, { 169, 963 }, { 170, 962 }, { 171, 964 }, { 172, 965 }, { 173, 966 }, { 174, 967 }, { 175, 968 }, { 176, 9617 }, { 177, 9618 }, { 178, 9619 }, { 179, 9474 }, { 180, 9508 }, { 181, 9569 }, { 182, 9570 }, { 183, 9558 }, { 184, 9557 }, { 185, 9571 }, { 186, 9553 }, { 187, 9559 }, { 188, 9565 }, { 189, 9564 }, { 190, 9563 }, { 191, 9488 }, { 192, 9492 }, { 193, 9524 }, { 194, 9516 }, { 195, 9500 }, { 196, 9472 }, { 197, 9532 }, { 198, 9566 }, { 199, 9567 }, { 200, 9562 }, { 201, 9556 }, { 202, 9577 }, { 203, 9574 }, { 204, 9568 }, { 205, 9552 }, { 206, 9580 }, { 207, 9575 }, { 208, 9576 }, { 209, 9572 }, { 210, 9573 }, { 211, 9561 }, { 212, 9560 }, { 213, 9554 }, { 214, 9555 }, { 215, 9579 }, { 216, 9578 }, { 217, 9496 }, { 218, 9484 }, { 219, 9608 }, { 220, 9604 }, { 221, 9612 }, { 222, 9616 }, { 223, 9600 }, { 224, 969 }, { 225, 940 }, { 226, 941 }, { 227, 942 }, { 228, 970 }, { 229, 943 }, { 230, 972 }, { 231, 973 }, { 232, 971 }, { 233, 974 }, { 234, 902 }, { 235, 904 }, { 236, 905 }, { 237, 906 }, { 238, 908 }, { 239, 910 }, { 240, 911 }, { 241, 177 }, { 242, 8805 }, { 243, 8804 }, { 244, 938 }, { 245, 939 }, { 246, 247 }, { 247, 8776 }, { 248, 176 }, { 249, 8729 }, { 250, 183 }, { 251, 8730 }, { 252, 8319 }, { 253, 178 }, { 254, 9632 }, { 255, 160 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 192 }, { 65, 193 }, { 65, 194 }, { 65, 195 }, { 65, 196 }, { 65, 197 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 224 }, { 97, 225 }, { 97, 226 }, { 97, 227 }, { 97, 228 }, { 97, 229 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 199 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 231 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 200 }, { 69, 201 }, { 69, 202 }, { 69, 203 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 232 }, { 101, 233 }, { 101, 234 }, { 101, 235 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 204 }, { 73, 205 }, { 73, 206 }, { 73, 207 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 236 }, { 105, 237 }, { 105, 238 }, { 105, 239 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 209 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 241 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 210 }, { 78, 211 }, { 78, 212 }, { 78, 213 }, { 78, 214 }, { 78, 216 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 242 }, { 110, 243 }, { 110, 244 }, { 110, 245 }, { 110, 246 }, { 110, 248 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 217 }, { 85, 218 }, { 85, 219 }, { 85, 220 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 249 }, { 117, 250 }, { 117, 251 }, { 117, 252 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 221 }, { 89, 374 }, { 89, 376 }, { 121, 253 }, { 121, 255 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t cp775[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 262 }, { 129, 252 }, { 130, 233 }, { 131, 257 }, { 132, 228 }, { 133, 291 }, { 134, 229 }, { 135, 263 }, { 136, 322 }, { 137, 275 }, { 138, 342 }, { 139, 343 }, { 140, 299 }, { 141, 377 }, { 142, 196 }, { 143, 197 }, { 144, 201 }, { 145, 230 }, { 146, 198 }, { 147, 333 }, { 148, 246 }, { 149, 290 }, { 150, 162 }, { 151, 346 }, { 152, 347 }, { 153, 214 }, { 154, 220 }, { 155, 248 }, { 156, 163 }, { 157, 216 }, { 158, 215 }, { 159, 164 }, { 160, 256 }, { 161, 298 }, { 162, 243 }, { 163, 379 }, { 164, 380 }, { 165, 378 }, { 166, 8221 }, { 167, 166 }, { 168, 169 }, { 169, 174 }, { 170, 172 }, { 171, 189 }, { 172, 188 }, { 173, 321 }, { 174, 171 }, { 175, 187 }, { 176, 9617 }, { 177, 9618 }, { 178, 9619 }, { 179, 9474 }, { 180, 9508 }, { 181, 260 }, { 182, 268 }, { 183, 280 }, { 184, 278 }, { 185, 9571 }, { 186, 9553 }, { 187, 9559 }, { 188, 9565 }, { 189, 302 }, { 190, 352 }, { 191, 9488 }, { 192, 9492 }, { 193, 9524 }, { 194, 9516 }, { 195, 9500 }, { 196, 9472 }, { 197, 9532 }, { 198, 370 }, { 199, 362 }, { 200, 9562 }, { 201, 9556 }, { 202, 9577 }, { 203, 9574 }, { 204, 9568 }, { 205, 9552 }, { 206, 9580 }, { 207, 381 }, { 208, 261 }, { 209, 269 }, { 210, 281 }, { 211, 279 }, { 212, 303 }, { 213, 353 }, { 214, 371 }, { 215, 363 }, { 216, 382 }, { 217, 9496 }, { 218, 9484 }, { 219, 9608 }, { 220, 9604 }, { 221, 9612 }, { 222, 9616 }, { 223, 9600 }, { 224, 211 }, { 225, 223 }, { 226, 332 }, { 227, 323 }, { 228, 245 }, { 229, 213 }, { 230, 181 }, { 231, 324 }, { 232, 310 }, { 233, 311 }, { 234, 315 }, { 235, 316 }, { 236, 326 }, { 237, 274 }, { 238, 325 }, { 239, 8217 }, { 240, 173 }, { 241, 177 }, { 242, 8220 }, { 243, 190 }, { 244, 182 }, { 245, 167 }, { 246, 247 }, { 247, 8222 }, { 248, 176 }, { 249, 8729 }, { 250, 183 }, { 251, 185 }, { 252, 179 }, { 253, 178 }, { 254, 9632 }, { 255, 160 }, { 39, 8216 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 192 }, { 65, 193 }, { 65, 194 }, { 65, 195 }, { 65, 258 }, { 65, 461 }, { 97, 224 }, { 97, 225 }, { 97, 226 }, { 97, 227 }, { 97, 259 }, { 97, 462 }, { 67, 199 }, { 67, 264 }, { 67, 266 }, { 99, 231 }, { 99, 265 }, { 99, 267 }, { 68, 270 }, { 100, 271 }, { 69, 200 }, { 69, 202 }, { 69, 203 }, { 69, 276 }, { 69, 282 }, { 101, 232 }, { 101, 234 }, { 101, 235 }, { 101, 277 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 204 }, { 73, 205 }, { 73, 206 }, { 73, 207 }, { 73, 296 }, { 73, 300 }, { 73, 304 }, { 73, 463 }, { 105, 236 }, { 105, 237 }, { 105, 238 }, { 105, 239 }, { 105, 297 }, { 105, 301 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 488 }, { 107, 489 }, { 76, 313 }, { 76, 317 }, { 76, 319 }, { 108, 314 }, { 108, 318 }, { 108, 320 }, { 77, 209 }, { 77, 327 }, { 109, 241 }, { 109, 328 }, { 109, 329 }, { 78, 210 }, { 78, 212 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 242 }, { 110, 244 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 344 }, { 114, 341 }, { 114, 345 }, { 83, 348 }, { 83, 350 }, { 115, 349 }, { 115, 351 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 217 }, { 85, 218 }, { 85, 219 }, { 85, 360 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 467 }, { 117, 249 }, { 117, 250 }, { 117, 251 }, { 117, 361 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 221 }, { 89, 374 }, { 89, 376 }, { 121, 253 }, { 121, 255 }, { 121, 375 }, }; static convert_t cp850[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 199 }, { 129, 252 }, { 130, 233 }, { 131, 226 }, { 132, 228 }, { 133, 224 }, { 134, 229 }, { 135, 231 }, { 136, 234 }, { 137, 235 }, { 138, 232 }, { 139, 239 }, { 140, 238 }, { 141, 236 }, { 142, 196 }, { 143, 197 }, { 144, 201 }, { 145, 230 }, { 146, 198 }, { 147, 244 }, { 148, 246 }, { 149, 242 }, { 150, 251 }, { 151, 249 }, { 152, 255 }, { 153, 214 }, { 154, 220 }, { 155, 248 }, { 156, 163 }, { 157, 216 }, { 158, 215 }, { 159, 402 }, { 160, 225 }, { 161, 237 }, { 162, 243 }, { 163, 250 }, { 164, 241 }, { 165, 209 }, { 166, 170 }, { 167, 186 }, { 168, 191 }, { 169, 174 }, { 170, 172 }, { 171, 189 }, { 172, 188 }, { 173, 161 }, { 174, 171 }, { 175, 187 }, { 176, 9617 }, { 177, 9618 }, { 178, 9619 }, { 179, 9474 }, { 180, 9508 }, { 181, 193 }, { 182, 194 }, { 183, 192 }, { 184, 169 }, { 185, 9571 }, { 186, 9553 }, { 187, 9559 }, { 188, 9565 }, { 189, 162 }, { 190, 165 }, { 191, 9488 }, { 192, 9492 }, { 193, 9524 }, { 194, 9516 }, { 195, 9500 }, { 196, 9472 }, { 197, 9532 }, { 198, 227 }, { 199, 195 }, { 200, 9562 }, { 201, 9556 }, { 202, 9577 }, { 203, 9574 }, { 204, 9568 }, { 205, 9552 }, { 206, 9580 }, { 207, 164 }, { 208, 240 }, { 209, 208 }, { 210, 202 }, { 211, 203 }, { 212, 200 }, { 213, 305 }, { 214, 205 }, { 215, 206 }, { 216, 207 }, { 217, 9496 }, { 218, 9484 }, { 219, 9608 }, { 220, 9604 }, { 221, 166 }, { 222, 204 }, { 223, 9600 }, { 224, 211 }, { 225, 223 }, { 226, 212 }, { 227, 210 }, { 228, 245 }, { 229, 213 }, { 230, 181 }, { 231, 254 }, { 232, 222 }, { 233, 218 }, { 234, 219 }, { 235, 217 }, { 236, 253 }, { 237, 221 }, { 238, 175 }, { 239, 180 }, { 240, 173 }, { 241, 177 }, { 242, 8215 }, { 243, 190 }, { 244, 182 }, { 245, 167 }, { 246, 247 }, { 247, 184 }, { 248, 176 }, { 249, 168 }, { 250, 183 }, { 251, 185 }, { 252, 179 }, { 253, 178 }, { 254, 9632 }, { 255, 160 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 374 }, { 89, 376 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t cp851[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 199 }, { 129, 252 }, { 130, 233 }, { 131, 226 }, { 132, 228 }, { 133, 224 }, { 134, 902 }, { 135, 231 }, { 136, 234 }, { 137, 235 }, { 138, 232 }, { 139, 239 }, { 140, 238 }, { 141, 904 }, { 142, 196 }, { 143, 905 }, { 144, 906 }, { 145, 145 }, { 146, 908 }, { 147, 244 }, { 148, 246 }, { 149, 910 }, { 150, 251 }, { 151, 249 }, { 152, 911 }, { 153, 214 }, { 154, 220 }, { 155, 940 }, { 156, 163 }, { 157, 941 }, { 158, 942 }, { 159, 943 }, { 160, 970 }, { 161, 912 }, { 162, 972 }, { 163, 973 }, { 164, 913 }, { 165, 914 }, { 166, 915 }, { 167, 916 }, { 168, 917 }, { 169, 918 }, { 170, 919 }, { 171, 189 }, { 172, 920 }, { 173, 921 }, { 174, 171 }, { 175, 187 }, { 176, 9617 }, { 177, 9618 }, { 178, 9619 }, { 179, 9474 }, { 180, 9508 }, { 181, 922 }, { 182, 923 }, { 183, 924 }, { 184, 925 }, { 185, 9571 }, { 186, 9553 }, { 187, 9559 }, { 188, 9565 }, { 189, 926 }, { 190, 927 }, { 191, 9488 }, { 192, 9492 }, { 193, 9524 }, { 194, 9516 }, { 195, 9500 }, { 196, 9472 }, { 197, 9532 }, { 198, 928 }, { 199, 929 }, { 200, 9562 }, { 201, 9556 }, { 202, 9577 }, { 203, 9574 }, { 204, 9568 }, { 205, 9552 }, { 206, 9580 }, { 207, 931 }, { 208, 932 }, { 209, 933 }, { 210, 934 }, { 211, 935 }, { 212, 936 }, { 213, 937 }, { 214, 945 }, { 215, 946 }, { 216, 947 }, { 217, 9496 }, { 218, 9484 }, { 219, 9608 }, { 220, 9604 }, { 221, 948 }, { 222, 949 }, { 223, 9600 }, { 224, 950 }, { 225, 951 }, { 226, 952 }, { 227, 953 }, { 228, 954 }, { 229, 955 }, { 230, 956 }, { 231, 957 }, { 232, 958 }, { 233, 959 }, { 234, 960 }, { 235, 961 }, { 236, 963 }, { 237, 962 }, { 238, 964 }, { 239, 900 }, { 240, 173 }, { 241, 177 }, { 242, 965 }, { 243, 966 }, { 244, 967 }, { 245, 167 }, { 246, 968 }, { 247, 901 }, { 248, 176 }, { 249, 168 }, { 250, 969 }, { 251, 971 }, { 252, 944 }, { 253, 974 }, { 254, 9632 }, { 255, 160 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 192 }, { 65, 193 }, { 65, 194 }, { 65, 195 }, { 65, 197 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 225 }, { 97, 227 }, { 97, 229 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 200 }, { 69, 201 }, { 69, 202 }, { 69, 203 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 204 }, { 73, 205 }, { 73, 206 }, { 73, 207 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 236 }, { 105, 237 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 209 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 241 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 210 }, { 78, 211 }, { 78, 212 }, { 78, 213 }, { 78, 216 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 242 }, { 110, 243 }, { 110, 245 }, { 110, 248 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 217 }, { 85, 218 }, { 85, 219 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 250 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 221 }, { 89, 374 }, { 89, 376 }, { 121, 253 }, { 121, 255 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t cp852[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 199 }, { 129, 252 }, { 130, 233 }, { 131, 226 }, { 132, 228 }, { 133, 367 }, { 134, 263 }, { 135, 231 }, { 136, 322 }, { 137, 235 }, { 138, 336 }, { 139, 337 }, { 140, 238 }, { 141, 377 }, { 142, 196 }, { 143, 262 }, { 144, 201 }, { 145, 313 }, { 146, 314 }, { 147, 244 }, { 148, 246 }, { 149, 317 }, { 150, 318 }, { 151, 346 }, { 152, 347 }, { 153, 214 }, { 154, 220 }, { 155, 356 }, { 156, 357 }, { 157, 321 }, { 158, 215 }, { 159, 269 }, { 160, 225 }, { 161, 237 }, { 162, 243 }, { 163, 250 }, { 164, 260 }, { 165, 261 }, { 166, 381 }, { 167, 382 }, { 168, 280 }, { 169, 281 }, { 170, 170 }, { 171, 378 }, { 172, 268 }, { 173, 351 }, { 174, 171 }, { 175, 187 }, { 176, 9617 }, { 177, 9618 }, { 178, 9619 }, { 179, 9474 }, { 180, 9508 }, { 181, 193 }, { 182, 194 }, { 183, 282 }, { 184, 350 }, { 185, 9571 }, { 186, 9553 }, { 187, 9559 }, { 188, 9565 }, { 189, 379 }, { 190, 380 }, { 191, 9488 }, { 192, 9492 }, { 193, 9524 }, { 194, 9516 }, { 195, 9500 }, { 196, 9472 }, { 197, 9532 }, { 198, 258 }, { 199, 259 }, { 200, 9562 }, { 201, 9556 }, { 202, 9577 }, { 203, 9574 }, { 204, 9568 }, { 205, 9552 }, { 206, 9580 }, { 207, 164 }, { 208, 273 }, { 209, 272 }, { 210, 270 }, { 211, 203 }, { 212, 271 }, { 213, 327 }, { 214, 205 }, { 215, 206 }, { 216, 283 }, { 217, 9496 }, { 218, 9484 }, { 219, 9608 }, { 220, 9604 }, { 221, 354 }, { 222, 366 }, { 223, 9600 }, { 224, 211 }, { 225, 223 }, { 226, 212 }, { 227, 323 }, { 228, 324 }, { 229, 328 }, { 230, 352 }, { 231, 353 }, { 232, 340 }, { 233, 218 }, { 234, 341 }, { 235, 368 }, { 236, 253 }, { 237, 221 }, { 238, 355 }, { 239, 180 }, { 240, 173 }, { 241, 733 }, { 242, 731 }, { 243, 711 }, { 244, 728 }, { 245, 167 }, { 246, 247 }, { 247, 184 }, { 248, 176 }, { 249, 168 }, { 250, 729 }, { 251, 369 }, { 252, 344 }, { 253, 345 }, { 254, 9632 }, { 255, 160 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 192 }, { 65, 195 }, { 65, 197 }, { 65, 256 }, { 65, 461 }, { 97, 224 }, { 97, 227 }, { 97, 229 }, { 97, 257 }, { 97, 462 }, { 67, 264 }, { 67, 266 }, { 99, 265 }, { 99, 267 }, { 69, 200 }, { 69, 202 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 101, 232 }, { 101, 234 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 204 }, { 73, 207 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 236 }, { 105, 239 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 315 }, { 76, 319 }, { 108, 316 }, { 108, 320 }, { 77, 209 }, { 77, 325 }, { 109, 241 }, { 109, 326 }, { 109, 329 }, { 78, 210 }, { 78, 213 }, { 78, 216 }, { 78, 332 }, { 78, 334 }, { 78, 465 }, { 78, 490 }, { 110, 242 }, { 110, 245 }, { 110, 248 }, { 110, 333 }, { 110, 335 }, { 110, 466 }, { 110, 491 }, { 82, 342 }, { 114, 343 }, { 83, 348 }, { 115, 349 }, { 85, 217 }, { 85, 219 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 370 }, { 85, 467 }, { 117, 249 }, { 117, 251 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 374 }, { 89, 376 }, { 121, 255 }, { 121, 375 }, }; static convert_t cp853[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 199 }, { 129, 252 }, { 130, 233 }, { 131, 226 }, { 132, 228 }, { 133, 224 }, { 134, 265 }, { 135, 231 }, { 136, 234 }, { 137, 235 }, { 138, 232 }, { 139, 239 }, { 140, 238 }, { 141, 236 }, { 142, 196 }, { 143, 264 }, { 144, 201 }, { 145, 267 }, { 146, 266 }, { 147, 244 }, { 148, 246 }, { 149, 242 }, { 150, 251 }, { 151, 249 }, { 152, 304 }, { 153, 214 }, { 154, 220 }, { 155, 285 }, { 156, 163 }, { 157, 284 }, { 158, 215 }, { 159, 309 }, { 160, 225 }, { 161, 237 }, { 162, 243 }, { 163, 250 }, { 164, 241 }, { 165, 209 }, { 166, 286 }, { 167, 287 }, { 168, 292 }, { 169, 293 }, { 170, 170 }, { 171, 189 }, { 172, 308 }, { 173, 351 }, { 174, 171 }, { 175, 187 }, { 176, 9617 }, { 177, 9618 }, { 178, 9619 }, { 179, 9474 }, { 180, 9508 }, { 181, 193 }, { 182, 194 }, { 183, 192 }, { 184, 350 }, { 185, 9571 }, { 186, 9553 }, { 187, 9559 }, { 188, 9565 }, { 189, 379 }, { 190, 380 }, { 191, 9488 }, { 192, 9492 }, { 193, 9524 }, { 194, 9516 }, { 195, 9500 }, { 196, 9472 }, { 197, 9532 }, { 198, 348 }, { 199, 349 }, { 200, 9562 }, { 201, 9556 }, { 202, 9577 }, { 203, 9574 }, { 204, 9568 }, { 205, 9552 }, { 206, 9580 }, { 207, 164 }, { 208, 208 }, { 209, 209 }, { 210, 202 }, { 211, 203 }, { 212, 200 }, { 213, 305 }, { 214, 205 }, { 215, 206 }, { 216, 207 }, { 217, 9496 }, { 218, 9484 }, { 219, 9608 }, { 220, 9604 }, { 221, 221 }, { 222, 204 }, { 223, 9600 }, { 224, 211 }, { 225, 223 }, { 226, 212 }, { 227, 210 }, { 228, 288 }, { 229, 289 }, { 230, 181 }, { 231, 294 }, { 232, 295 }, { 233, 218 }, { 234, 219 }, { 235, 217 }, { 236, 364 }, { 237, 365 }, { 238, 238 }, { 239, 180 }, { 240, 173 }, { 241, 241 }, { 242, 8467 }, { 243, 329 }, { 244, 728 }, { 245, 167 }, { 246, 247 }, { 247, 184 }, { 248, 176 }, { 249, 168 }, { 250, 729 }, { 251, 251 }, { 252, 179 }, { 253, 178 }, { 254, 9632 }, { 255, 160 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 195 }, { 65, 197 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 227 }, { 97, 229 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 268 }, { 99, 263 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 464 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 78, 213 }, { 78, 216 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 245 }, { 110, 248 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 352 }, { 115, 347 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 360 }, { 85, 362 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 374 }, { 89, 376 }, { 121, 253 }, { 121, 255 }, { 121, 375 }, { 90, 377 }, { 90, 381 }, { 122, 378 }, { 122, 382 }, }; static convert_t cp855[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 1106 }, { 129, 1026 }, { 130, 1107 }, { 131, 1027 }, { 132, 1105 }, { 133, 1025 }, { 134, 1108 }, { 135, 1028 }, { 136, 1109 }, { 137, 1029 }, { 138, 1110 }, { 139, 1030 }, { 140, 1111 }, { 141, 1031 }, { 142, 1112 }, { 143, 1032 }, { 144, 1113 }, { 145, 1033 }, { 146, 1114 }, { 147, 1034 }, { 148, 1115 }, { 149, 1035 }, { 150, 1116 }, { 151, 1036 }, { 152, 1118 }, { 153, 1038 }, { 154, 1119 }, { 155, 1039 }, { 156, 1102 }, { 157, 1070 }, { 158, 1098 }, { 159, 1066 }, { 160, 1072 }, { 161, 1040 }, { 162, 1073 }, { 163, 1041 }, { 164, 1094 }, { 165, 1062 }, { 166, 1076 }, { 167, 1044 }, { 168, 1077 }, { 169, 1045 }, { 170, 1092 }, { 171, 1060 }, { 172, 1075 }, { 173, 1043 }, { 174, 171 }, { 175, 187 }, { 176, 9617 }, { 177, 9618 }, { 178, 9619 }, { 179, 9474 }, { 180, 9508 }, { 181, 1093 }, { 182, 1061 }, { 183, 1080 }, { 184, 1048 }, { 185, 9571 }, { 186, 9553 }, { 187, 9559 }, { 188, 9565 }, { 189, 1081 }, { 190, 1049 }, { 191, 9488 }, { 192, 9492 }, { 193, 9524 }, { 194, 9516 }, { 195, 9500 }, { 196, 9472 }, { 197, 9532 }, { 198, 1082 }, { 199, 1050 }, { 200, 9562 }, { 201, 9556 }, { 202, 9577 }, { 203, 9574 }, { 204, 9568 }, { 205, 9552 }, { 206, 9580 }, { 207, 164 }, { 208, 1083 }, { 209, 1051 }, { 210, 1084 }, { 211, 1052 }, { 212, 1085 }, { 213, 1053 }, { 214, 1086 }, { 215, 1054 }, { 216, 1087 }, { 217, 9496 }, { 218, 9484 }, { 219, 9608 }, { 220, 9604 }, { 221, 1055 }, { 222, 1103 }, { 223, 9600 }, { 224, 1071 }, { 225, 1088 }, { 226, 1056 }, { 227, 1089 }, { 228, 1057 }, { 229, 1090 }, { 230, 1058 }, { 231, 1091 }, { 232, 1059 }, { 233, 1078 }, { 234, 1046 }, { 235, 1074 }, { 236, 1042 }, { 237, 1100 }, { 238, 1068 }, { 239, 8470 }, { 240, 173 }, { 241, 1099 }, { 242, 1067 }, { 243, 1079 }, { 244, 1047 }, { 245, 1096 }, { 246, 1064 }, { 247, 1101 }, { 248, 1069 }, { 249, 1097 }, { 250, 1065 }, { 251, 1095 }, { 252, 1063 }, { 253, 167 }, { 254, 9632 }, { 255, 160 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 192 }, { 65, 193 }, { 65, 194 }, { 65, 195 }, { 65, 196 }, { 65, 197 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 224 }, { 97, 225 }, { 97, 226 }, { 97, 227 }, { 97, 228 }, { 97, 229 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 199 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 231 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 200 }, { 69, 201 }, { 69, 202 }, { 69, 203 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 232 }, { 101, 233 }, { 101, 234 }, { 101, 235 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 204 }, { 73, 205 }, { 73, 206 }, { 73, 207 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 236 }, { 105, 237 }, { 105, 238 }, { 105, 239 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 209 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 241 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 210 }, { 78, 211 }, { 78, 212 }, { 78, 213 }, { 78, 214 }, { 78, 216 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 242 }, { 110, 243 }, { 110, 244 }, { 110, 245 }, { 110, 246 }, { 110, 248 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 217 }, { 85, 218 }, { 85, 219 }, { 85, 220 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 249 }, { 117, 250 }, { 117, 251 }, { 117, 252 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 221 }, { 89, 374 }, { 89, 376 }, { 121, 253 }, { 121, 255 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t cp857[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 199 }, { 129, 252 }, { 130, 233 }, { 131, 226 }, { 132, 228 }, { 133, 224 }, { 134, 229 }, { 135, 231 }, { 136, 234 }, { 137, 235 }, { 138, 232 }, { 139, 239 }, { 140, 238 }, { 141, 305 }, { 142, 196 }, { 143, 197 }, { 144, 201 }, { 145, 230 }, { 146, 198 }, { 147, 244 }, { 148, 246 }, { 149, 242 }, { 150, 251 }, { 151, 249 }, { 152, 304 }, { 153, 214 }, { 154, 220 }, { 155, 248 }, { 156, 163 }, { 157, 216 }, { 158, 350 }, { 159, 351 }, { 160, 225 }, { 161, 237 }, { 162, 243 }, { 163, 250 }, { 164, 241 }, { 165, 209 }, { 166, 286 }, { 167, 287 }, { 168, 191 }, { 169, 174 }, { 170, 172 }, { 171, 189 }, { 172, 188 }, { 173, 161 }, { 174, 171 }, { 175, 187 }, { 176, 9617 }, { 177, 9618 }, { 178, 9619 }, { 179, 9474 }, { 180, 9508 }, { 181, 193 }, { 182, 194 }, { 183, 192 }, { 184, 169 }, { 185, 9571 }, { 186, 9553 }, { 187, 9559 }, { 188, 9565 }, { 189, 162 }, { 190, 165 }, { 191, 9488 }, { 192, 9492 }, { 193, 9524 }, { 194, 9516 }, { 195, 9500 }, { 196, 9472 }, { 197, 9532 }, { 198, 227 }, { 199, 195 }, { 200, 9562 }, { 201, 9556 }, { 202, 9577 }, { 203, 9574 }, { 204, 9568 }, { 205, 9552 }, { 206, 9580 }, { 207, 164 }, { 208, 186 }, { 209, 170 }, { 210, 202 }, { 211, 203 }, { 212, 200 }, { 213, 213 }, { 214, 205 }, { 215, 206 }, { 216, 207 }, { 217, 9496 }, { 218, 9484 }, { 219, 9608 }, { 220, 9604 }, { 221, 166 }, { 222, 204 }, { 223, 9600 }, { 224, 211 }, { 225, 223 }, { 226, 212 }, { 227, 210 }, { 228, 245 }, { 229, 213 }, { 230, 181 }, { 231, 231 }, { 232, 215 }, { 233, 218 }, { 234, 219 }, { 235, 217 }, { 236, 236 }, { 237, 255 }, { 238, 175 }, { 239, 180 }, { 240, 173 }, { 241, 177 }, { 242, 242 }, { 243, 190 }, { 244, 182 }, { 245, 167 }, { 246, 247 }, { 247, 184 }, { 248, 176 }, { 249, 168 }, { 250, 183 }, { 251, 185 }, { 252, 179 }, { 253, 178 }, { 254, 9632 }, { 255, 160 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 221 }, { 89, 374 }, { 89, 376 }, { 121, 253 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t cp860[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 199 }, { 129, 252 }, { 130, 233 }, { 131, 226 }, { 132, 227 }, { 133, 224 }, { 134, 193 }, { 135, 231 }, { 136, 234 }, { 137, 202 }, { 138, 232 }, { 139, 205 }, { 140, 212 }, { 141, 236 }, { 142, 195 }, { 143, 194 }, { 144, 201 }, { 145, 192 }, { 146, 200 }, { 147, 244 }, { 148, 245 }, { 149, 242 }, { 150, 218 }, { 151, 249 }, { 152, 204 }, { 153, 213 }, { 154, 220 }, { 155, 162 }, { 156, 163 }, { 157, 217 }, { 158, 8359 }, { 159, 211 }, { 160, 225 }, { 161, 237 }, { 162, 243 }, { 163, 250 }, { 164, 241 }, { 165, 209 }, { 166, 170 }, { 167, 186 }, { 168, 191 }, { 169, 210 }, { 170, 172 }, { 171, 189 }, { 172, 188 }, { 173, 161 }, { 174, 171 }, { 175, 187 }, { 176, 9617 }, { 177, 9618 }, { 178, 9619 }, { 179, 9474 }, { 180, 9508 }, { 181, 9569 }, { 182, 9570 }, { 183, 9558 }, { 184, 9557 }, { 185, 9571 }, { 186, 9553 }, { 187, 9559 }, { 188, 9565 }, { 189, 9564 }, { 190, 9563 }, { 191, 9488 }, { 192, 9492 }, { 193, 9524 }, { 194, 9516 }, { 195, 9500 }, { 196, 9472 }, { 197, 9532 }, { 198, 9566 }, { 199, 9567 }, { 200, 9562 }, { 201, 9556 }, { 202, 9577 }, { 203, 9574 }, { 204, 9568 }, { 205, 9552 }, { 206, 9580 }, { 207, 9575 }, { 208, 9576 }, { 209, 9572 }, { 210, 9573 }, { 211, 9561 }, { 212, 9560 }, { 213, 9554 }, { 214, 9555 }, { 215, 9579 }, { 216, 9578 }, { 217, 9496 }, { 218, 9484 }, { 219, 9608 }, { 220, 9604 }, { 221, 9612 }, { 222, 9616 }, { 223, 9600 }, { 224, 945 }, { 225, 223 }, { 226, 915 }, { 227, 960 }, { 228, 931 }, { 229, 963 }, { 230, 181 }, { 231, 964 }, { 232, 934 }, { 233, 920 }, { 234, 937 }, { 235, 948 }, { 236, 8734 }, { 237, 966 }, { 238, 949 }, { 239, 8745 }, { 240, 8801 }, { 241, 177 }, { 242, 8805 }, { 243, 8804 }, { 244, 8992 }, { 245, 8993 }, { 246, 247 }, { 247, 8776 }, { 248, 176 }, { 249, 8729 }, { 250, 183 }, { 251, 8730 }, { 252, 8319 }, { 253, 178 }, { 254, 9632 }, { 255, 160 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 196 }, { 65, 197 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 228 }, { 97, 229 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 203 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 235 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 206 }, { 73, 207 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 238 }, { 105, 239 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 214 }, { 78, 216 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 246 }, { 110, 248 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 219 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 251 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 221 }, { 89, 374 }, { 89, 376 }, { 121, 253 }, { 121, 255 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t cp861[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 199 }, { 129, 252 }, { 130, 233 }, { 131, 226 }, { 132, 228 }, { 133, 224 }, { 134, 229 }, { 135, 231 }, { 136, 234 }, { 137, 235 }, { 138, 232 }, { 139, 208 }, { 140, 240 }, { 141, 222 }, { 142, 196 }, { 143, 197 }, { 144, 201 }, { 145, 230 }, { 146, 198 }, { 147, 244 }, { 148, 246 }, { 149, 254 }, { 150, 251 }, { 151, 221 }, { 152, 253 }, { 153, 214 }, { 154, 220 }, { 155, 248 }, { 156, 163 }, { 157, 216 }, { 158, 8359 }, { 159, 402 }, { 160, 225 }, { 161, 237 }, { 162, 243 }, { 163, 250 }, { 164, 193 }, { 165, 205 }, { 166, 211 }, { 167, 218 }, { 168, 191 }, { 169, 8976 }, { 170, 172 }, { 171, 189 }, { 172, 188 }, { 173, 161 }, { 174, 171 }, { 175, 187 }, { 176, 9617 }, { 177, 9618 }, { 178, 9619 }, { 179, 9474 }, { 180, 9508 }, { 181, 9569 }, { 182, 9570 }, { 183, 9558 }, { 184, 9557 }, { 185, 9571 }, { 186, 9553 }, { 187, 9559 }, { 188, 9565 }, { 189, 9564 }, { 190, 9563 }, { 191, 9488 }, { 192, 9492 }, { 193, 9524 }, { 194, 9516 }, { 195, 9500 }, { 196, 9472 }, { 197, 9532 }, { 198, 9566 }, { 199, 9567 }, { 200, 9562 }, { 201, 9556 }, { 202, 9577 }, { 203, 9574 }, { 204, 9568 }, { 205, 9552 }, { 206, 9580 }, { 207, 9575 }, { 208, 9576 }, { 209, 9572 }, { 210, 9573 }, { 211, 9561 }, { 212, 9560 }, { 213, 9554 }, { 214, 9555 }, { 215, 9579 }, { 216, 9578 }, { 217, 9496 }, { 218, 9484 }, { 219, 9608 }, { 220, 9604 }, { 221, 9612 }, { 222, 9616 }, { 223, 9600 }, { 224, 945 }, { 225, 223 }, { 226, 915 }, { 227, 960 }, { 228, 931 }, { 229, 963 }, { 230, 181 }, { 231, 964 }, { 232, 934 }, { 233, 920 }, { 234, 937 }, { 235, 948 }, { 236, 8734 }, { 237, 966 }, { 238, 949 }, { 239, 8745 }, { 240, 8801 }, { 241, 177 }, { 242, 8805 }, { 243, 8804 }, { 244, 8992 }, { 245, 8993 }, { 246, 247 }, { 247, 8776 }, { 248, 176 }, { 249, 8729 }, { 250, 183 }, { 251, 8730 }, { 252, 8319 }, { 253, 178 }, { 254, 9632 }, { 255, 160 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 192 }, { 65, 194 }, { 65, 195 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 227 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 200 }, { 69, 202 }, { 69, 203 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 204 }, { 73, 206 }, { 73, 207 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 236 }, { 105, 238 }, { 105, 239 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 209 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 241 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 210 }, { 78, 212 }, { 78, 213 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 242 }, { 110, 245 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 217 }, { 85, 219 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 249 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 374 }, { 89, 376 }, { 121, 255 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t cp862[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 1488 }, { 129, 1489 }, { 130, 1490 }, { 131, 1491 }, { 132, 1492 }, { 133, 1493 }, { 134, 1494 }, { 135, 1495 }, { 136, 1496 }, { 137, 1497 }, { 138, 1498 }, { 139, 1499 }, { 140, 1500 }, { 141, 1501 }, { 142, 1502 }, { 143, 1503 }, { 144, 1504 }, { 145, 1505 }, { 146, 1506 }, { 147, 1507 }, { 148, 1508 }, { 149, 1509 }, { 150, 1510 }, { 151, 1511 }, { 152, 1512 }, { 153, 1513 }, { 154, 1514 }, { 155, 162 }, { 156, 163 }, { 157, 165 }, { 158, 8359 }, { 159, 402 }, { 160, 225 }, { 161, 237 }, { 162, 243 }, { 163, 250 }, { 164, 241 }, { 165, 209 }, { 166, 170 }, { 167, 186 }, { 168, 191 }, { 169, 8976 }, { 170, 172 }, { 171, 189 }, { 172, 188 }, { 173, 161 }, { 174, 171 }, { 175, 187 }, { 176, 9617 }, { 177, 9618 }, { 178, 9619 }, { 179, 9474 }, { 180, 9508 }, { 181, 9569 }, { 182, 9570 }, { 183, 9558 }, { 184, 9557 }, { 185, 9571 }, { 186, 9553 }, { 187, 9559 }, { 188, 9565 }, { 189, 9564 }, { 190, 9563 }, { 191, 9488 }, { 192, 9492 }, { 193, 9524 }, { 194, 9516 }, { 195, 9500 }, { 196, 9472 }, { 197, 9532 }, { 198, 9566 }, { 199, 9567 }, { 200, 9562 }, { 201, 9556 }, { 202, 9577 }, { 203, 9574 }, { 204, 9568 }, { 205, 9552 }, { 206, 9580 }, { 207, 9575 }, { 208, 9576 }, { 209, 9572 }, { 210, 9573 }, { 211, 9561 }, { 212, 9560 }, { 213, 9554 }, { 214, 9555 }, { 215, 9579 }, { 216, 9578 }, { 217, 9496 }, { 218, 9484 }, { 219, 9608 }, { 220, 9604 }, { 221, 9612 }, { 222, 9616 }, { 223, 9600 }, { 224, 945 }, { 225, 223 }, { 226, 915 }, { 227, 960 }, { 228, 931 }, { 229, 963 }, { 230, 181 }, { 231, 964 }, { 232, 934 }, { 233, 920 }, { 234, 937 }, { 235, 948 }, { 236, 8734 }, { 237, 966 }, { 238, 949 }, { 239, 8745 }, { 240, 8801 }, { 241, 177 }, { 242, 8805 }, { 243, 8804 }, { 244, 8992 }, { 245, 8993 }, { 246, 247 }, { 247, 8776 }, { 248, 176 }, { 249, 8729 }, { 250, 183 }, { 251, 8730 }, { 252, 8319 }, { 253, 178 }, { 254, 9632 }, { 255, 160 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 192 }, { 65, 193 }, { 65, 194 }, { 65, 195 }, { 65, 196 }, { 65, 197 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 224 }, { 97, 226 }, { 97, 227 }, { 97, 228 }, { 97, 229 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 199 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 231 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 200 }, { 69, 201 }, { 69, 202 }, { 69, 203 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 232 }, { 101, 233 }, { 101, 234 }, { 101, 235 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 204 }, { 73, 205 }, { 73, 206 }, { 73, 207 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 236 }, { 105, 238 }, { 105, 239 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 210 }, { 78, 211 }, { 78, 212 }, { 78, 213 }, { 78, 214 }, { 78, 216 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 242 }, { 110, 244 }, { 110, 245 }, { 110, 246 }, { 110, 248 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 217 }, { 85, 218 }, { 85, 219 }, { 85, 220 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 249 }, { 117, 251 }, { 117, 252 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 221 }, { 89, 374 }, { 89, 376 }, { 121, 253 }, { 121, 255 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t cp863[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 199 }, { 129, 252 }, { 130, 233 }, { 131, 226 }, { 132, 194 }, { 133, 224 }, { 134, 182 }, { 135, 231 }, { 136, 234 }, { 137, 235 }, { 138, 232 }, { 139, 239 }, { 140, 238 }, { 141, 8215 }, { 142, 192 }, { 143, 167 }, { 144, 201 }, { 145, 200 }, { 146, 202 }, { 147, 244 }, { 148, 203 }, { 149, 207 }, { 150, 251 }, { 151, 249 }, { 152, 164 }, { 153, 212 }, { 154, 220 }, { 155, 162 }, { 156, 163 }, { 157, 217 }, { 158, 219 }, { 159, 402 }, { 160, 166 }, { 161, 180 }, { 162, 243 }, { 163, 250 }, { 164, 168 }, { 165, 184 }, { 166, 179 }, { 167, 175 }, { 168, 206 }, { 169, 8976 }, { 170, 172 }, { 171, 189 }, { 172, 188 }, { 173, 190 }, { 174, 171 }, { 175, 187 }, { 176, 9617 }, { 177, 9618 }, { 178, 9619 }, { 179, 9474 }, { 180, 9508 }, { 181, 9569 }, { 182, 9570 }, { 183, 9558 }, { 184, 9557 }, { 185, 9571 }, { 186, 9553 }, { 187, 9559 }, { 188, 9565 }, { 189, 9564 }, { 190, 9563 }, { 191, 9488 }, { 192, 9492 }, { 193, 9524 }, { 194, 9516 }, { 195, 9500 }, { 196, 9472 }, { 197, 9532 }, { 198, 9566 }, { 199, 9567 }, { 200, 9562 }, { 201, 9556 }, { 202, 9577 }, { 203, 9574 }, { 204, 9568 }, { 205, 9552 }, { 206, 9580 }, { 207, 9575 }, { 208, 9576 }, { 209, 9572 }, { 210, 9573 }, { 211, 9561 }, { 212, 9560 }, { 213, 9554 }, { 214, 9555 }, { 215, 9579 }, { 216, 9578 }, { 217, 9496 }, { 218, 9484 }, { 219, 9608 }, { 220, 9604 }, { 221, 9612 }, { 222, 9616 }, { 223, 9600 }, { 224, 945 }, { 225, 223 }, { 226, 915 }, { 227, 960 }, { 228, 931 }, { 229, 963 }, { 230, 181 }, { 231, 964 }, { 232, 934 }, { 233, 920 }, { 234, 937 }, { 235, 948 }, { 236, 8734 }, { 237, 966 }, { 238, 949 }, { 239, 8745 }, { 240, 8801 }, { 241, 177 }, { 242, 8805 }, { 243, 8804 }, { 244, 8992 }, { 245, 8993 }, { 246, 247 }, { 247, 8776 }, { 248, 176 }, { 249, 8729 }, { 250, 183 }, { 251, 8730 }, { 252, 8319 }, { 253, 178 }, { 254, 9632 }, { 255, 160 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 193 }, { 65, 195 }, { 65, 196 }, { 65, 197 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 225 }, { 97, 227 }, { 97, 228 }, { 97, 229 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 204 }, { 73, 205 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 236 }, { 105, 237 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 209 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 241 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 210 }, { 78, 211 }, { 78, 213 }, { 78, 214 }, { 78, 216 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 242 }, { 110, 245 }, { 110, 246 }, { 110, 248 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 218 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 221 }, { 89, 374 }, { 89, 376 }, { 121, 253 }, { 121, 255 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t cp864[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 176 }, { 129, 183 }, { 130, 8729 }, { 131, 8730 }, { 132, 9618 }, { 133, 9472 }, { 134, 9474 }, { 135, 9532 }, { 136, 9508 }, { 137, 9516 }, { 138, 9500 }, { 139, 9524 }, { 140, 9488 }, { 141, 9484 }, { 142, 9492 }, { 143, 9496 }, { 144, 946 }, { 145, 8734 }, { 146, 966 }, { 147, 177 }, { 148, 189 }, { 149, 188 }, { 150, 8776 }, { 151, 171 }, { 152, 187 }, { 153, 65271 }, { 154, 65272 }, { 155, 155 }, { 156, 156 }, { 157, 65275 }, { 158, 65276 }, { 159, 159 }, { 160, 160 }, { 161, 173 }, { 162, 65154 }, { 163, 163 }, { 164, 164 }, { 165, 65156 }, { 166, 166 }, { 167, 167 }, { 168, 65166 }, { 169, 1576 }, { 170, 1578 }, { 171, 1579 }, { 172, 1548 }, { 173, 1580 }, { 174, 1581 }, { 175, 1582 }, { 176, 1632 }, { 177, 1633 }, { 178, 1634 }, { 179, 1635 }, { 180, 1636 }, { 181, 1637 }, { 182, 1638 }, { 183, 1639 }, { 184, 1640 }, { 185, 1641 }, { 186, 1601 }, { 187, 1563 }, { 188, 1587 }, { 189, 1588 }, { 190, 1589 }, { 191, 1567 }, { 192, 162 }, { 193, 1569 }, { 194, 1570 }, { 195, 1571 }, { 196, 1572 }, { 197, 65226 }, { 198, 65163 }, { 199, 1575 }, { 200, 65169 }, { 201, 1577 }, { 202, 65175 }, { 203, 65179 }, { 204, 65183 }, { 205, 65187 }, { 206, 65191 }, { 207, 1583 }, { 208, 1584 }, { 209, 1585 }, { 210, 1586 }, { 211, 65203 }, { 212, 65207 }, { 213, 65211 }, { 214, 65215 }, { 215, 1591 }, { 216, 1592 }, { 217, 65227 }, { 218, 65231 }, { 219, 166 }, { 220, 172 }, { 221, 247 }, { 222, 215 }, { 223, 1593 }, { 224, 1600 }, { 225, 65235 }, { 226, 65239 }, { 227, 65243 }, { 228, 65247 }, { 229, 65251 }, { 230, 65255 }, { 231, 65259 }, { 232, 1608 }, { 233, 1609 }, { 234, 65267 }, { 235, 1590 }, { 236, 65228 }, { 237, 65230 }, { 238, 1594 }, { 239, 1605 }, { 240, 65149 }, { 241, 1617 }, { 242, 1606 }, { 243, 1607 }, { 244, 65260 }, { 245, 65264 }, { 246, 65266 }, { 247, 65232 }, { 248, 1602 }, { 249, 65269 }, { 250, 65270 }, { 251, 1604 }, { 252, 1603 }, { 253, 1610 }, { 254, 9632 }, { 255, 255 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 192 }, { 65, 193 }, { 65, 194 }, { 65, 195 }, { 65, 196 }, { 65, 197 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 224 }, { 97, 225 }, { 97, 226 }, { 97, 227 }, { 97, 228 }, { 97, 229 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 199 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 231 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 200 }, { 69, 201 }, { 69, 202 }, { 69, 203 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 232 }, { 101, 233 }, { 101, 234 }, { 101, 235 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 204 }, { 73, 205 }, { 73, 206 }, { 73, 207 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 236 }, { 105, 237 }, { 105, 238 }, { 105, 239 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 209 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 241 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 210 }, { 78, 211 }, { 78, 212 }, { 78, 213 }, { 78, 214 }, { 78, 216 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 242 }, { 110, 243 }, { 110, 244 }, { 110, 245 }, { 110, 246 }, { 110, 248 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 217 }, { 85, 218 }, { 85, 219 }, { 85, 220 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 249 }, { 117, 250 }, { 117, 251 }, { 117, 252 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 221 }, { 89, 374 }, { 89, 376 }, { 121, 253 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t cp865[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 199 }, { 129, 252 }, { 130, 233 }, { 131, 226 }, { 132, 228 }, { 133, 224 }, { 134, 229 }, { 135, 231 }, { 136, 234 }, { 137, 235 }, { 138, 232 }, { 139, 239 }, { 140, 238 }, { 141, 236 }, { 142, 196 }, { 143, 197 }, { 144, 201 }, { 145, 230 }, { 146, 198 }, { 147, 244 }, { 148, 246 }, { 149, 242 }, { 150, 251 }, { 151, 249 }, { 152, 255 }, { 153, 214 }, { 154, 220 }, { 155, 248 }, { 156, 163 }, { 157, 216 }, { 158, 8359 }, { 159, 402 }, { 160, 225 }, { 161, 237 }, { 162, 243 }, { 163, 250 }, { 164, 241 }, { 165, 209 }, { 166, 170 }, { 167, 186 }, { 168, 191 }, { 169, 8976 }, { 170, 172 }, { 171, 189 }, { 172, 188 }, { 173, 161 }, { 174, 171 }, { 175, 164 }, { 176, 9617 }, { 177, 9618 }, { 178, 9619 }, { 179, 9474 }, { 180, 9508 }, { 181, 9569 }, { 182, 9570 }, { 183, 9558 }, { 184, 9557 }, { 185, 9571 }, { 186, 9553 }, { 187, 9559 }, { 188, 9565 }, { 189, 9564 }, { 190, 9563 }, { 191, 9488 }, { 192, 9492 }, { 193, 9524 }, { 194, 9516 }, { 195, 9500 }, { 196, 9472 }, { 197, 9532 }, { 198, 9566 }, { 199, 9567 }, { 200, 9562 }, { 201, 9556 }, { 202, 9577 }, { 203, 9574 }, { 204, 9568 }, { 205, 9552 }, { 206, 9580 }, { 207, 9575 }, { 208, 9576 }, { 209, 9572 }, { 210, 9573 }, { 211, 9561 }, { 212, 9560 }, { 213, 9554 }, { 214, 9555 }, { 215, 9579 }, { 216, 9578 }, { 217, 9496 }, { 218, 9484 }, { 219, 9608 }, { 220, 9604 }, { 221, 9612 }, { 222, 9616 }, { 223, 9600 }, { 224, 945 }, { 225, 223 }, { 226, 915 }, { 227, 960 }, { 228, 931 }, { 229, 963 }, { 230, 181 }, { 231, 964 }, { 232, 934 }, { 233, 920 }, { 234, 937 }, { 235, 948 }, { 236, 8734 }, { 237, 966 }, { 238, 949 }, { 239, 8745 }, { 240, 8801 }, { 241, 177 }, { 242, 8805 }, { 243, 8804 }, { 244, 8992 }, { 245, 8993 }, { 246, 247 }, { 247, 8776 }, { 248, 176 }, { 249, 8729 }, { 250, 183 }, { 251, 8730 }, { 252, 8319 }, { 253, 178 }, { 254, 9632 }, { 255, 160 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 192 }, { 65, 193 }, { 65, 194 }, { 65, 195 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 227 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 200 }, { 69, 202 }, { 69, 203 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 204 }, { 73, 205 }, { 73, 206 }, { 73, 207 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 210 }, { 78, 211 }, { 78, 212 }, { 78, 213 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 245 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 217 }, { 85, 218 }, { 85, 219 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 221 }, { 89, 374 }, { 89, 376 }, { 121, 253 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t cp866[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 1040 }, { 129, 1041 }, { 130, 1042 }, { 131, 1043 }, { 132, 1044 }, { 133, 1045 }, { 134, 1046 }, { 135, 1047 }, { 136, 1048 }, { 137, 1049 }, { 138, 1050 }, { 139, 1051 }, { 140, 1052 }, { 141, 1053 }, { 142, 1054 }, { 143, 1055 }, { 144, 1056 }, { 145, 1057 }, { 146, 1058 }, { 147, 1059 }, { 148, 1060 }, { 149, 1061 }, { 150, 1062 }, { 151, 1063 }, { 152, 1064 }, { 153, 1065 }, { 154, 1066 }, { 155, 1067 }, { 156, 1068 }, { 157, 1069 }, { 158, 1070 }, { 159, 1071 }, { 160, 1072 }, { 161, 1073 }, { 162, 1074 }, { 163, 1075 }, { 164, 1076 }, { 165, 1077 }, { 166, 1078 }, { 167, 1079 }, { 168, 1080 }, { 169, 1081 }, { 170, 1082 }, { 171, 1083 }, { 172, 1084 }, { 173, 1085 }, { 174, 1086 }, { 175, 1087 }, { 176, 9617 }, { 177, 9618 }, { 178, 9619 }, { 179, 9474 }, { 180, 9508 }, { 181, 9569 }, { 182, 9570 }, { 183, 9558 }, { 184, 9557 }, { 185, 9571 }, { 186, 9553 }, { 187, 9559 }, { 188, 9565 }, { 189, 9564 }, { 190, 9563 }, { 191, 9488 }, { 192, 9492 }, { 193, 9524 }, { 194, 9516 }, { 195, 9500 }, { 196, 9472 }, { 197, 9532 }, { 198, 9566 }, { 199, 9567 }, { 200, 9562 }, { 201, 9556 }, { 202, 9577 }, { 203, 9574 }, { 204, 9568 }, { 205, 9552 }, { 206, 9580 }, { 207, 9575 }, { 208, 9576 }, { 209, 9572 }, { 210, 9573 }, { 211, 9561 }, { 212, 9560 }, { 213, 9554 }, { 214, 9555 }, { 215, 9579 }, { 216, 9578 }, { 217, 9496 }, { 218, 9484 }, { 219, 9608 }, { 220, 9604 }, { 221, 9612 }, { 222, 9616 }, { 223, 9600 }, { 224, 1088 }, { 225, 1089 }, { 226, 1090 }, { 227, 1091 }, { 228, 1092 }, { 229, 1093 }, { 230, 1094 }, { 231, 1095 }, { 232, 1096 }, { 233, 1097 }, { 234, 1098 }, { 235, 1099 }, { 236, 1100 }, { 237, 1101 }, { 238, 1102 }, { 239, 1103 }, { 240, 1025 }, { 241, 1105 }, { 242, 1028 }, { 243, 1108 }, { 244, 1031 }, { 245, 1111 }, { 246, 1038 }, { 247, 1118 }, { 248, 176 }, { 249, 8729 }, { 250, 183 }, { 251, 8730 }, { 252, 8470 }, { 253, 164 }, { 254, 9632 }, { 255, 160 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 192 }, { 65, 193 }, { 65, 194 }, { 65, 195 }, { 65, 196 }, { 65, 197 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 224 }, { 97, 225 }, { 97, 226 }, { 97, 227 }, { 97, 228 }, { 97, 229 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 199 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 231 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 200 }, { 69, 201 }, { 69, 202 }, { 69, 203 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 232 }, { 101, 233 }, { 101, 234 }, { 101, 235 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 204 }, { 73, 205 }, { 73, 206 }, { 73, 207 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 236 }, { 105, 237 }, { 105, 238 }, { 105, 239 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 209 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 241 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 210 }, { 78, 211 }, { 78, 212 }, { 78, 213 }, { 78, 214 }, { 78, 216 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 242 }, { 110, 243 }, { 110, 244 }, { 110, 245 }, { 110, 246 }, { 110, 248 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 217 }, { 85, 218 }, { 85, 219 }, { 85, 220 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 249 }, { 117, 250 }, { 117, 251 }, { 117, 252 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 221 }, { 89, 374 }, { 89, 376 }, { 121, 253 }, { 121, 255 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t cp869[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 128 }, { 129, 129 }, { 130, 130 }, { 131, 131 }, { 132, 132 }, { 133, 133 }, { 134, 902 }, { 135, 135 }, { 136, 183 }, { 137, 172 }, { 138, 166 }, { 139, 8216 }, { 140, 8217 }, { 141, 904 }, { 142, 8213 }, { 143, 905 }, { 144, 906 }, { 145, 938 }, { 146, 908 }, { 147, 147 }, { 148, 148 }, { 149, 910 }, { 150, 939 }, { 151, 169 }, { 152, 911 }, { 153, 178 }, { 154, 179 }, { 155, 940 }, { 156, 163 }, { 157, 941 }, { 158, 942 }, { 159, 943 }, { 160, 970 }, { 161, 912 }, { 162, 972 }, { 163, 973 }, { 164, 913 }, { 165, 914 }, { 166, 915 }, { 167, 916 }, { 168, 917 }, { 169, 918 }, { 170, 919 }, { 171, 189 }, { 172, 920 }, { 173, 921 }, { 174, 171 }, { 175, 187 }, { 176, 9617 }, { 177, 9618 }, { 178, 9619 }, { 179, 9474 }, { 180, 9508 }, { 181, 922 }, { 182, 923 }, { 183, 924 }, { 184, 925 }, { 185, 9571 }, { 186, 9553 }, { 187, 9559 }, { 188, 9565 }, { 189, 926 }, { 190, 927 }, { 191, 9488 }, { 192, 9492 }, { 193, 9524 }, { 194, 9516 }, { 195, 9500 }, { 196, 9472 }, { 197, 9532 }, { 198, 928 }, { 199, 929 }, { 200, 9562 }, { 201, 9556 }, { 202, 9577 }, { 203, 9574 }, { 204, 9568 }, { 205, 9552 }, { 206, 9580 }, { 207, 931 }, { 208, 932 }, { 209, 933 }, { 210, 934 }, { 211, 935 }, { 212, 936 }, { 213, 937 }, { 214, 945 }, { 215, 946 }, { 216, 947 }, { 217, 9496 }, { 218, 9484 }, { 219, 9608 }, { 220, 9604 }, { 221, 948 }, { 222, 949 }, { 223, 9600 }, { 224, 950 }, { 225, 951 }, { 226, 952 }, { 227, 953 }, { 228, 954 }, { 229, 955 }, { 230, 956 }, { 231, 957 }, { 232, 958 }, { 233, 959 }, { 234, 960 }, { 235, 961 }, { 236, 963 }, { 237, 962 }, { 238, 964 }, { 239, 900 }, { 240, 173 }, { 241, 177 }, { 242, 965 }, { 243, 966 }, { 244, 967 }, { 245, 167 }, { 246, 968 }, { 247, 901 }, { 248, 176 }, { 249, 168 }, { 250, 969 }, { 251, 971 }, { 252, 944 }, { 253, 974 }, { 254, 9632 }, { 255, 160 }, { 34, 8220 }, { 34, 8221 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 192 }, { 65, 193 }, { 65, 194 }, { 65, 195 }, { 65, 196 }, { 65, 197 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 224 }, { 97, 225 }, { 97, 226 }, { 97, 227 }, { 97, 228 }, { 97, 229 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 199 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 231 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 200 }, { 69, 201 }, { 69, 202 }, { 69, 203 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 232 }, { 101, 233 }, { 101, 234 }, { 101, 235 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 204 }, { 73, 205 }, { 73, 206 }, { 73, 207 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 236 }, { 105, 237 }, { 105, 238 }, { 105, 239 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 209 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 241 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 210 }, { 78, 211 }, { 78, 212 }, { 78, 213 }, { 78, 214 }, { 78, 216 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 242 }, { 110, 243 }, { 110, 244 }, { 110, 245 }, { 110, 246 }, { 110, 248 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 217 }, { 85, 218 }, { 85, 219 }, { 85, 220 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 249 }, { 117, 250 }, { 117, 251 }, { 117, 252 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 221 }, { 89, 374 }, { 89, 376 }, { 121, 253 }, { 121, 255 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t cp874[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 8364 }, { 129, 129 }, { 130, 130 }, { 131, 131 }, { 132, 132 }, { 133, 8230 }, { 134, 134 }, { 135, 135 }, { 136, 136 }, { 137, 137 }, { 138, 138 }, { 139, 139 }, { 140, 140 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 144 }, { 145, 8216 }, { 146, 8217 }, { 147, 8220 }, { 148, 8221 }, { 149, 8226 }, { 150, 8211 }, { 151, 8212 }, { 152, 152 }, { 153, 153 }, { 154, 154 }, { 155, 155 }, { 156, 156 }, { 157, 157 }, { 158, 158 }, { 159, 159 }, { 160, 160 }, { 161, 3585 }, { 162, 3586 }, { 163, 3587 }, { 164, 3588 }, { 165, 3589 }, { 166, 3590 }, { 167, 3591 }, { 168, 3592 }, { 169, 3593 }, { 170, 3594 }, { 171, 3595 }, { 172, 3596 }, { 173, 3597 }, { 174, 3598 }, { 175, 3599 }, { 176, 3600 }, { 177, 3601 }, { 178, 3602 }, { 179, 3603 }, { 180, 3604 }, { 181, 3605 }, { 182, 3606 }, { 183, 3607 }, { 184, 3608 }, { 185, 3609 }, { 186, 3610 }, { 187, 3611 }, { 188, 3612 }, { 189, 3613 }, { 190, 3614 }, { 191, 3615 }, { 192, 3616 }, { 193, 3617 }, { 194, 3618 }, { 195, 3619 }, { 196, 3620 }, { 197, 3621 }, { 198, 3622 }, { 199, 3623 }, { 200, 3624 }, { 201, 3625 }, { 202, 3626 }, { 203, 3627 }, { 204, 3628 }, { 205, 3629 }, { 206, 3630 }, { 207, 3631 }, { 208, 3632 }, { 209, 3633 }, { 210, 3634 }, { 211, 3635 }, { 212, 3636 }, { 213, 3637 }, { 214, 3638 }, { 215, 3639 }, { 216, 3640 }, { 217, 3641 }, { 218, 3642 }, { 219, 219 }, { 220, 220 }, { 221, 221 }, { 222, 222 }, { 223, 3647 }, { 224, 3648 }, { 225, 3649 }, { 226, 3650 }, { 227, 3651 }, { 228, 3652 }, { 229, 3653 }, { 230, 3654 }, { 231, 3655 }, { 232, 3656 }, { 233, 3657 }, { 234, 3658 }, { 235, 3659 }, { 236, 3660 }, { 237, 3661 }, { 238, 3662 }, { 239, 3663 }, { 240, 3664 }, { 241, 3665 }, { 242, 3666 }, { 243, 3667 }, { 244, 3668 }, { 245, 3669 }, { 246, 3670 }, { 247, 3671 }, { 248, 3672 }, { 249, 3673 }, { 250, 3674 }, { 251, 3675 }, { 252, 252 }, { 253, 253 }, { 254, 254 }, { 255, 255 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 192 }, { 65, 193 }, { 65, 194 }, { 65, 195 }, { 65, 196 }, { 65, 197 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 224 }, { 97, 225 }, { 97, 226 }, { 97, 227 }, { 97, 228 }, { 97, 229 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 199 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 231 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 200 }, { 69, 201 }, { 69, 202 }, { 69, 203 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 232 }, { 101, 233 }, { 101, 234 }, { 101, 235 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 204 }, { 73, 205 }, { 73, 206 }, { 73, 207 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 236 }, { 105, 237 }, { 105, 238 }, { 105, 239 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 209 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 241 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 210 }, { 78, 211 }, { 78, 212 }, { 78, 213 }, { 78, 214 }, { 78, 216 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 242 }, { 110, 243 }, { 110, 244 }, { 110, 245 }, { 110, 246 }, { 110, 248 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 217 }, { 85, 218 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 249 }, { 117, 250 }, { 117, 251 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 374 }, { 89, 376 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t cp895[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 268 }, { 129, 252 }, { 130, 233 }, { 131, 271 }, { 132, 228 }, { 133, 270 }, { 134, 356 }, { 135, 269 }, { 136, 283 }, { 137, 282 }, { 138, 313 }, { 139, 205 }, { 140, 318 }, { 141, 314 }, { 142, 196 }, { 143, 193 }, { 144, 201 }, { 145, 382 }, { 146, 381 }, { 147, 244 }, { 148, 246 }, { 149, 211 }, { 150, 367 }, { 151, 218 }, { 152, 253 }, { 153, 214 }, { 154, 220 }, { 155, 352 }, { 156, 317 }, { 157, 221 }, { 158, 344 }, { 159, 357 }, { 160, 225 }, { 161, 237 }, { 162, 243 }, { 163, 250 }, { 164, 328 }, { 165, 327 }, { 166, 366 }, { 167, 212 }, { 168, 353 }, { 169, 345 }, { 170, 341 }, { 171, 340 }, { 172, 188 }, { 173, 161 }, { 174, 171 }, { 175, 187 }, { 176, 9617 }, { 177, 9618 }, { 178, 9619 }, { 179, 9474 }, { 180, 9508 }, { 181, 9569 }, { 182, 9570 }, { 183, 9558 }, { 184, 9557 }, { 185, 9571 }, { 186, 9553 }, { 187, 9559 }, { 188, 9565 }, { 189, 9564 }, { 190, 9563 }, { 191, 9488 }, { 192, 9492 }, { 193, 9524 }, { 194, 9516 }, { 195, 9500 }, { 196, 9472 }, { 197, 9532 }, { 198, 9566 }, { 199, 9567 }, { 200, 9562 }, { 201, 9556 }, { 202, 9577 }, { 203, 9574 }, { 204, 9568 }, { 205, 9552 }, { 206, 9580 }, { 207, 9575 }, { 208, 9576 }, { 209, 9572 }, { 210, 9573 }, { 211, 9561 }, { 212, 9560 }, { 213, 9554 }, { 214, 9555 }, { 215, 9579 }, { 216, 9578 }, { 217, 9496 }, { 218, 9484 }, { 219, 9608 }, { 220, 9604 }, { 221, 9612 }, { 222, 9616 }, { 223, 9600 }, { 224, 945 }, { 225, 223 }, { 226, 915 }, { 227, 960 }, { 228, 931 }, { 229, 963 }, { 230, 181 }, { 231, 964 }, { 232, 934 }, { 233, 920 }, { 234, 937 }, { 235, 948 }, { 236, 8734 }, { 237, 966 }, { 238, 949 }, { 239, 8745 }, { 240, 8801 }, { 241, 177 }, { 242, 8805 }, { 243, 8804 }, { 244, 8992 }, { 245, 8993 }, { 246, 247 }, { 247, 8776 }, { 248, 176 }, { 249, 8729 }, { 250, 183 }, { 251, 8730 }, { 252, 8319 }, { 253, 178 }, { 254, 9632 }, { 255, 160 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 192 }, { 65, 194 }, { 65, 195 }, { 65, 197 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 224 }, { 97, 226 }, { 97, 227 }, { 97, 229 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 199 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 99, 231 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 69, 200 }, { 69, 202 }, { 69, 203 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 101, 232 }, { 101, 234 }, { 101, 235 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 204 }, { 73, 206 }, { 73, 207 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 236 }, { 105, 238 }, { 105, 239 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 315 }, { 76, 319 }, { 76, 321 }, { 108, 316 }, { 108, 320 }, { 108, 322 }, { 77, 209 }, { 77, 323 }, { 77, 325 }, { 109, 241 }, { 109, 324 }, { 109, 326 }, { 109, 329 }, { 78, 210 }, { 78, 213 }, { 78, 216 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 242 }, { 110, 245 }, { 110, 248 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 342 }, { 114, 343 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 84, 354 }, { 116, 355 }, { 85, 217 }, { 85, 219 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 249 }, { 117, 251 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 374 }, { 89, 376 }, { 121, 255 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 122, 378 }, { 122, 380 }, }; static convert_t cp1250[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 8364 }, { 129, 129 }, { 130, 8218 }, { 131, 131 }, { 132, 8222 }, { 133, 8230 }, { 134, 8224 }, { 135, 8225 }, { 136, 136 }, { 137, 8240 }, { 138, 352 }, { 139, 8249 }, { 140, 346 }, { 141, 356 }, { 142, 381 }, { 143, 377 }, { 144, 144 }, { 145, 8216 }, { 146, 8217 }, { 147, 8220 }, { 148, 8221 }, { 149, 8226 }, { 150, 8211 }, { 151, 8212 }, { 152, 152 }, { 153, 8482 }, { 154, 353 }, { 155, 8250 }, { 156, 347 }, { 157, 357 }, { 158, 382 }, { 159, 378 }, { 160, 160 }, { 161, 711 }, { 162, 728 }, { 163, 321 }, { 164, 164 }, { 165, 260 }, { 166, 166 }, { 167, 167 }, { 168, 168 }, { 169, 169 }, { 170, 350 }, { 171, 171 }, { 172, 172 }, { 173, 173 }, { 174, 174 }, { 175, 379 }, { 176, 176 }, { 177, 177 }, { 178, 731 }, { 179, 322 }, { 180, 180 }, { 181, 181 }, { 182, 182 }, { 183, 183 }, { 184, 184 }, { 185, 261 }, { 186, 351 }, { 187, 187 }, { 188, 376 }, { 189, 733 }, { 190, 317 }, { 191, 380 }, { 192, 340 }, { 193, 193 }, { 194, 194 }, { 195, 258 }, { 196, 196 }, { 197, 313 }, { 198, 262 }, { 199, 199 }, { 200, 268 }, { 201, 201 }, { 202, 280 }, { 203, 203 }, { 204, 282 }, { 205, 205 }, { 206, 206 }, { 207, 270 }, { 208, 272 }, { 209, 323 }, { 210, 327 }, { 211, 211 }, { 212, 212 }, { 213, 336 }, { 214, 214 }, { 215, 215 }, { 216, 344 }, { 217, 366 }, { 218, 218 }, { 219, 368 }, { 220, 220 }, { 221, 221 }, { 222, 354 }, { 223, 223 }, { 224, 341 }, { 225, 225 }, { 226, 226 }, { 227, 259 }, { 228, 228 }, { 229, 314 }, { 230, 263 }, { 231, 231 }, { 232, 269 }, { 233, 233 }, { 234, 281 }, { 235, 235 }, { 236, 283 }, { 237, 237 }, { 238, 238 }, { 239, 271 }, { 240, 273 }, { 241, 324 }, { 242, 328 }, { 243, 243 }, { 244, 244 }, { 245, 337 }, { 246, 246 }, { 247, 247 }, { 248, 345 }, { 249, 367 }, { 250, 250 }, { 251, 369 }, { 252, 252 }, { 253, 253 }, { 254, 355 }, { 255, 729 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 192 }, { 65, 195 }, { 65, 197 }, { 65, 256 }, { 65, 461 }, { 97, 224 }, { 97, 227 }, { 97, 229 }, { 97, 257 }, { 97, 462 }, { 67, 264 }, { 67, 266 }, { 99, 265 }, { 99, 267 }, { 69, 200 }, { 69, 202 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 101, 232 }, { 101, 234 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 204 }, { 73, 207 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 236 }, { 105, 239 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 315 }, { 76, 319 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 77, 209 }, { 77, 325 }, { 109, 241 }, { 109, 326 }, { 109, 329 }, { 78, 210 }, { 78, 213 }, { 78, 216 }, { 78, 332 }, { 78, 334 }, { 78, 465 }, { 78, 490 }, { 110, 242 }, { 110, 245 }, { 110, 248 }, { 110, 333 }, { 110, 335 }, { 110, 466 }, { 110, 491 }, { 82, 342 }, { 114, 343 }, { 83, 348 }, { 115, 349 }, { 85, 217 }, { 85, 219 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 370 }, { 85, 467 }, { 117, 249 }, { 117, 251 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 374 }, { 121, 255 }, { 121, 375 }, }; static convert_t cp1251[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 1026 }, { 129, 1027 }, { 130, 8218 }, { 131, 1107 }, { 132, 8222 }, { 133, 8230 }, { 134, 8224 }, { 135, 8225 }, { 136, 8364 }, { 137, 8240 }, { 138, 1033 }, { 139, 8249 }, { 140, 1034 }, { 141, 1036 }, { 142, 1035 }, { 143, 1039 }, { 144, 1106 }, { 145, 8216 }, { 146, 8217 }, { 147, 8220 }, { 148, 8221 }, { 149, 8226 }, { 150, 8211 }, { 151, 8212 }, { 152, 152 }, { 153, 8482 }, { 154, 1113 }, { 155, 8250 }, { 156, 1114 }, { 157, 1116 }, { 158, 1115 }, { 159, 1119 }, { 160, 160 }, { 161, 1038 }, { 162, 1118 }, { 163, 1032 }, { 164, 164 }, { 165, 1168 }, { 166, 166 }, { 167, 167 }, { 168, 1025 }, { 169, 169 }, { 170, 1028 }, { 171, 171 }, { 172, 172 }, { 173, 173 }, { 174, 174 }, { 175, 1031 }, { 176, 176 }, { 177, 177 }, { 178, 1030 }, { 179, 1110 }, { 180, 1169 }, { 181, 181 }, { 182, 182 }, { 183, 183 }, { 184, 1105 }, { 185, 8470 }, { 186, 1108 }, { 187, 187 }, { 188, 1112 }, { 189, 1029 }, { 190, 1109 }, { 191, 1111 }, { 192, 1040 }, { 193, 1041 }, { 194, 1042 }, { 195, 1043 }, { 196, 1044 }, { 197, 1045 }, { 198, 1046 }, { 199, 1047 }, { 200, 1048 }, { 201, 1049 }, { 202, 1050 }, { 203, 1051 }, { 204, 1052 }, { 205, 1053 }, { 206, 1054 }, { 207, 1055 }, { 208, 1056 }, { 209, 1057 }, { 210, 1058 }, { 211, 1059 }, { 212, 1060 }, { 213, 1061 }, { 214, 1062 }, { 215, 1063 }, { 216, 1064 }, { 217, 1065 }, { 218, 1066 }, { 219, 1067 }, { 220, 1068 }, { 221, 1069 }, { 222, 1070 }, { 223, 1071 }, { 224, 1072 }, { 225, 1073 }, { 226, 1074 }, { 227, 1075 }, { 228, 1076 }, { 229, 1077 }, { 230, 1078 }, { 231, 1079 }, { 232, 1080 }, { 233, 1081 }, { 234, 1082 }, { 235, 1083 }, { 236, 1084 }, { 237, 1085 }, { 238, 1086 }, { 239, 1087 }, { 240, 1088 }, { 241, 1089 }, { 242, 1090 }, { 243, 1091 }, { 244, 1092 }, { 245, 1093 }, { 246, 1094 }, { 247, 1095 }, { 248, 1096 }, { 249, 1097 }, { 250, 1098 }, { 251, 1099 }, { 252, 1100 }, { 253, 1101 }, { 254, 1102 }, { 255, 1103 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 192 }, { 65, 193 }, { 65, 194 }, { 65, 195 }, { 65, 196 }, { 65, 197 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 224 }, { 97, 225 }, { 97, 226 }, { 97, 227 }, { 97, 228 }, { 97, 229 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 199 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 231 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 200 }, { 69, 201 }, { 69, 202 }, { 69, 203 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 232 }, { 101, 233 }, { 101, 234 }, { 101, 235 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 204 }, { 73, 205 }, { 73, 206 }, { 73, 207 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 236 }, { 105, 237 }, { 105, 238 }, { 105, 239 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 209 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 241 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 210 }, { 78, 211 }, { 78, 212 }, { 78, 213 }, { 78, 214 }, { 78, 216 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 242 }, { 110, 243 }, { 110, 244 }, { 110, 245 }, { 110, 246 }, { 110, 248 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 217 }, { 85, 218 }, { 85, 219 }, { 85, 220 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 249 }, { 117, 250 }, { 117, 251 }, { 117, 252 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 221 }, { 89, 374 }, { 89, 376 }, { 121, 253 }, { 121, 255 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t cp1252[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 8364 }, { 129, 129 }, { 130, 8218 }, { 131, 402 }, { 132, 8222 }, { 133, 8230 }, { 134, 8224 }, { 135, 8225 }, { 136, 710 }, { 137, 8240 }, { 138, 352 }, { 139, 8249 }, { 140, 338 }, { 141, 141 }, { 142, 381 }, { 143, 143 }, { 144, 144 }, { 145, 8216 }, { 146, 8217 }, { 147, 8220 }, { 148, 8221 }, { 149, 8226 }, { 150, 8211 }, { 151, 8212 }, { 152, 732 }, { 153, 8482 }, { 154, 353 }, { 155, 8250 }, { 156, 339 }, { 157, 157 }, { 158, 382 }, { 159, 376 }, { 160, 160 }, { 161, 161 }, { 162, 162 }, { 163, 163 }, { 164, 164 }, { 165, 165 }, { 166, 166 }, { 167, 167 }, { 168, 168 }, { 169, 169 }, { 170, 170 }, { 171, 171 }, { 172, 172 }, { 173, 173 }, { 174, 174 }, { 175, 175 }, { 176, 176 }, { 177, 177 }, { 178, 178 }, { 179, 179 }, { 180, 180 }, { 181, 181 }, { 182, 182 }, { 183, 183 }, { 184, 184 }, { 185, 185 }, { 186, 186 }, { 187, 187 }, { 188, 188 }, { 189, 189 }, { 190, 190 }, { 191, 191 }, { 192, 192 }, { 193, 193 }, { 194, 194 }, { 195, 195 }, { 196, 196 }, { 197, 197 }, { 198, 198 }, { 199, 199 }, { 200, 200 }, { 201, 201 }, { 202, 202 }, { 203, 203 }, { 204, 204 }, { 205, 205 }, { 206, 206 }, { 207, 207 }, { 208, 208 }, { 209, 209 }, { 210, 210 }, { 211, 211 }, { 212, 212 }, { 213, 213 }, { 214, 214 }, { 215, 215 }, { 216, 216 }, { 217, 217 }, { 218, 218 }, { 219, 219 }, { 220, 220 }, { 221, 221 }, { 222, 222 }, { 223, 223 }, { 224, 224 }, { 225, 225 }, { 226, 226 }, { 227, 227 }, { 228, 228 }, { 229, 229 }, { 230, 230 }, { 231, 231 }, { 232, 232 }, { 233, 233 }, { 234, 234 }, { 235, 235 }, { 236, 236 }, { 237, 237 }, { 238, 238 }, { 239, 239 }, { 240, 240 }, { 241, 241 }, { 242, 242 }, { 243, 243 }, { 244, 244 }, { 245, 245 }, { 246, 246 }, { 247, 247 }, { 248, 248 }, { 249, 249 }, { 250, 250 }, { 251, 251 }, { 252, 252 }, { 253, 253 }, { 254, 254 }, { 255, 255 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 374 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 122, 378 }, { 122, 380 }, }; static convert_t cp1253[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 8364 }, { 129, 129 }, { 130, 8218 }, { 131, 402 }, { 132, 8222 }, { 133, 8230 }, { 134, 8224 }, { 135, 8225 }, { 136, 136 }, { 137, 8240 }, { 138, 138 }, { 139, 8249 }, { 140, 140 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 144 }, { 145, 8216 }, { 146, 8217 }, { 147, 8220 }, { 148, 8221 }, { 149, 8226 }, { 150, 8211 }, { 151, 8212 }, { 152, 152 }, { 153, 8482 }, { 154, 154 }, { 155, 8250 }, { 156, 156 }, { 157, 157 }, { 158, 158 }, { 159, 159 }, { 160, 160 }, { 161, 901 }, { 162, 902 }, { 163, 163 }, { 164, 164 }, { 165, 165 }, { 166, 166 }, { 167, 167 }, { 168, 168 }, { 169, 169 }, { 170, 170 }, { 171, 171 }, { 172, 172 }, { 173, 173 }, { 174, 174 }, { 175, 8213 }, { 176, 176 }, { 177, 177 }, { 178, 178 }, { 179, 179 }, { 180, 900 }, { 181, 181 }, { 182, 182 }, { 183, 183 }, { 184, 904 }, { 185, 905 }, { 186, 906 }, { 187, 187 }, { 188, 908 }, { 189, 189 }, { 190, 910 }, { 191, 911 }, { 192, 912 }, { 193, 913 }, { 194, 914 }, { 195, 915 }, { 196, 916 }, { 197, 917 }, { 198, 918 }, { 199, 919 }, { 200, 920 }, { 201, 921 }, { 202, 922 }, { 203, 923 }, { 204, 924 }, { 205, 925 }, { 206, 926 }, { 207, 927 }, { 208, 928 }, { 209, 929 }, { 210, 210 }, { 211, 931 }, { 212, 932 }, { 213, 933 }, { 214, 934 }, { 215, 935 }, { 216, 936 }, { 217, 937 }, { 218, 938 }, { 219, 939 }, { 220, 940 }, { 221, 941 }, { 222, 942 }, { 223, 943 }, { 224, 944 }, { 225, 945 }, { 226, 946 }, { 227, 947 }, { 228, 948 }, { 229, 949 }, { 230, 950 }, { 231, 951 }, { 232, 952 }, { 233, 953 }, { 234, 954 }, { 235, 955 }, { 236, 956 }, { 237, 957 }, { 238, 958 }, { 239, 959 }, { 240, 960 }, { 241, 961 }, { 242, 962 }, { 243, 963 }, { 244, 964 }, { 245, 965 }, { 246, 966 }, { 247, 967 }, { 248, 968 }, { 249, 969 }, { 250, 970 }, { 251, 971 }, { 252, 972 }, { 253, 973 }, { 254, 974 }, { 255, 255 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 192 }, { 65, 193 }, { 65, 194 }, { 65, 195 }, { 65, 196 }, { 65, 197 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 224 }, { 97, 225 }, { 97, 226 }, { 97, 227 }, { 97, 228 }, { 97, 229 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 199 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 231 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 200 }, { 69, 201 }, { 69, 202 }, { 69, 203 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 232 }, { 101, 233 }, { 101, 234 }, { 101, 235 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 204 }, { 73, 205 }, { 73, 206 }, { 73, 207 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 236 }, { 105, 237 }, { 105, 238 }, { 105, 239 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 209 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 241 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 211 }, { 78, 212 }, { 78, 213 }, { 78, 214 }, { 78, 216 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 242 }, { 110, 243 }, { 110, 244 }, { 110, 245 }, { 110, 246 }, { 110, 248 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 217 }, { 85, 218 }, { 85, 219 }, { 85, 220 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 249 }, { 117, 250 }, { 117, 251 }, { 117, 252 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 221 }, { 89, 374 }, { 89, 376 }, { 121, 253 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t cp1254[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 8364 }, { 129, 129 }, { 130, 8218 }, { 131, 402 }, { 132, 8222 }, { 133, 8230 }, { 134, 8224 }, { 135, 8225 }, { 136, 710 }, { 137, 8240 }, { 138, 352 }, { 139, 8249 }, { 140, 338 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 144 }, { 145, 8216 }, { 146, 8217 }, { 147, 8220 }, { 148, 8221 }, { 149, 8226 }, { 150, 8211 }, { 151, 8212 }, { 152, 732 }, { 153, 8482 }, { 154, 353 }, { 155, 8250 }, { 156, 339 }, { 157, 157 }, { 158, 158 }, { 159, 376 }, { 160, 160 }, { 161, 161 }, { 162, 162 }, { 163, 163 }, { 164, 164 }, { 165, 165 }, { 166, 166 }, { 167, 167 }, { 168, 168 }, { 169, 169 }, { 170, 170 }, { 171, 171 }, { 172, 172 }, { 173, 173 }, { 174, 174 }, { 175, 175 }, { 176, 176 }, { 177, 177 }, { 178, 178 }, { 179, 179 }, { 180, 180 }, { 181, 181 }, { 182, 182 }, { 183, 183 }, { 184, 184 }, { 185, 185 }, { 186, 186 }, { 187, 187 }, { 188, 188 }, { 189, 189 }, { 190, 190 }, { 191, 191 }, { 192, 192 }, { 193, 193 }, { 194, 194 }, { 195, 195 }, { 196, 196 }, { 197, 197 }, { 198, 198 }, { 199, 199 }, { 200, 200 }, { 201, 201 }, { 202, 202 }, { 203, 203 }, { 204, 204 }, { 205, 205 }, { 206, 206 }, { 207, 207 }, { 208, 286 }, { 209, 209 }, { 210, 210 }, { 211, 211 }, { 212, 212 }, { 213, 213 }, { 214, 214 }, { 215, 215 }, { 216, 216 }, { 217, 217 }, { 218, 218 }, { 219, 219 }, { 220, 220 }, { 221, 304 }, { 222, 350 }, { 223, 223 }, { 224, 224 }, { 225, 225 }, { 226, 226 }, { 227, 227 }, { 228, 228 }, { 229, 229 }, { 230, 230 }, { 231, 231 }, { 232, 232 }, { 233, 233 }, { 234, 234 }, { 235, 235 }, { 236, 236 }, { 237, 237 }, { 238, 238 }, { 239, 239 }, { 240, 287 }, { 241, 241 }, { 242, 242 }, { 243, 243 }, { 244, 244 }, { 245, 245 }, { 246, 246 }, { 247, 247 }, { 248, 248 }, { 249, 249 }, { 250, 250 }, { 251, 251 }, { 252, 252 }, { 253, 305 }, { 254, 351 }, { 255, 255 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 115, 347 }, { 115, 349 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 221 }, { 89, 374 }, { 121, 253 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t cp1255[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 8364 }, { 129, 129 }, { 130, 8218 }, { 131, 402 }, { 132, 8222 }, { 133, 8230 }, { 134, 8224 }, { 135, 8225 }, { 136, 136 }, { 137, 8240 }, { 138, 138 }, { 139, 8249 }, { 140, 140 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 144 }, { 145, 8216 }, { 146, 8217 }, { 147, 8220 }, { 148, 8221 }, { 149, 8226 }, { 150, 8211 }, { 151, 8212 }, { 152, 152 }, { 153, 8482 }, { 154, 154 }, { 155, 8250 }, { 156, 156 }, { 157, 157 }, { 158, 158 }, { 159, 159 }, { 160, 160 }, { 161, 161 }, { 162, 162 }, { 163, 163 }, { 164, 164 }, { 165, 165 }, { 166, 166 }, { 167, 167 }, { 168, 168 }, { 169, 169 }, { 170, 215 }, { 171, 171 }, { 172, 172 }, { 173, 173 }, { 174, 174 }, { 175, 781 }, { 176, 176 }, { 177, 177 }, { 178, 178 }, { 179, 179 }, { 180, 180 }, { 181, 181 }, { 182, 182 }, { 183, 183 }, { 184, 184 }, { 185, 185 }, { 186, 247 }, { 187, 187 }, { 188, 188 }, { 189, 189 }, { 190, 190 }, { 191, 191 }, { 192, 192 }, { 193, 193 }, { 194, 194 }, { 195, 195 }, { 196, 196 }, { 197, 197 }, { 198, 198 }, { 199, 199 }, { 200, 200 }, { 201, 201 }, { 202, 202 }, { 203, 203 }, { 204, 204 }, { 205, 205 }, { 206, 206 }, { 207, 207 }, { 208, 208 }, { 209, 209 }, { 210, 210 }, { 211, 211 }, { 212, 212 }, { 213, 213 }, { 214, 214 }, { 215, 215 }, { 216, 216 }, { 217, 217 }, { 218, 218 }, { 219, 219 }, { 220, 220 }, { 221, 221 }, { 222, 222 }, { 223, 8215 }, { 224, 1488 }, { 225, 1489 }, { 226, 1490 }, { 227, 1491 }, { 228, 1492 }, { 229, 1493 }, { 230, 1494 }, { 231, 1495 }, { 232, 1496 }, { 233, 1497 }, { 234, 1498 }, { 235, 1499 }, { 236, 1500 }, { 237, 1501 }, { 238, 1502 }, { 239, 1503 }, { 240, 1504 }, { 241, 1505 }, { 242, 1506 }, { 243, 1507 }, { 244, 1508 }, { 245, 1509 }, { 246, 1510 }, { 247, 1511 }, { 248, 1512 }, { 249, 1513 }, { 250, 1514 }, { 251, 251 }, { 252, 252 }, { 253, 253 }, { 254, 254 }, { 255, 255 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 224 }, { 97, 225 }, { 97, 226 }, { 97, 227 }, { 97, 228 }, { 97, 229 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 231 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 232 }, { 101, 233 }, { 101, 234 }, { 101, 235 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 236 }, { 105, 237 }, { 105, 238 }, { 105, 239 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 241 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 242 }, { 110, 243 }, { 110, 244 }, { 110, 245 }, { 110, 246 }, { 110, 248 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 249 }, { 117, 250 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 374 }, { 89, 376 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t cp1256[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 1548 }, { 129, 129 }, { 130, 8218 }, { 131, 131 }, { 132, 8222 }, { 133, 8230 }, { 134, 8224 }, { 135, 8225 }, { 136, 136 }, { 137, 8240 }, { 138, 138 }, { 139, 8249 }, { 140, 140 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 144 }, { 145, 8216 }, { 146, 8217 }, { 147, 8220 }, { 148, 8221 }, { 149, 8226 }, { 150, 8211 }, { 151, 8212 }, { 152, 1563 }, { 153, 8482 }, { 154, 1567 }, { 155, 8250 }, { 156, 1569 }, { 157, 1570 }, { 158, 1571 }, { 159, 376 }, { 160, 160 }, { 161, 1572 }, { 162, 1573 }, { 163, 163 }, { 164, 164 }, { 165, 1574 }, { 166, 166 }, { 167, 167 }, { 168, 1575 }, { 169, 169 }, { 170, 1576 }, { 171, 171 }, { 172, 172 }, { 173, 173 }, { 174, 174 }, { 175, 175 }, { 176, 176 }, { 177, 177 }, { 178, 1577 }, { 179, 1578 }, { 180, 1579 }, { 181, 181 }, { 182, 182 }, { 183, 183 }, { 184, 1580 }, { 185, 185 }, { 186, 1581 }, { 187, 187 }, { 188, 1582 }, { 189, 1583 }, { 190, 1584 }, { 191, 1585 }, { 192, 192 }, { 193, 1586 }, { 194, 194 }, { 195, 195 }, { 196, 1587 }, { 197, 1588 }, { 198, 1589 }, { 199, 199 }, { 200, 200 }, { 201, 201 }, { 202, 202 }, { 203, 203 }, { 204, 1590 }, { 205, 1591 }, { 206, 206 }, { 207, 207 }, { 208, 1592 }, { 209, 1593 }, { 210, 1594 }, { 211, 1600 }, { 212, 212 }, { 213, 1601 }, { 214, 1602 }, { 215, 215 }, { 216, 1603 }, { 217, 217 }, { 218, 1711 }, { 219, 219 }, { 220, 220 }, { 221, 1604 }, { 222, 1605 }, { 223, 1606 }, { 224, 224 }, { 225, 1607 }, { 226, 226 }, { 227, 227 }, { 228, 1608 }, { 229, 1609 }, { 230, 1610 }, { 231, 231 }, { 232, 232 }, { 233, 233 }, { 234, 234 }, { 235, 235 }, { 236, 1611 }, { 237, 1612 }, { 238, 238 }, { 239, 239 }, { 240, 1613 }, { 241, 1614 }, { 242, 1615 }, { 243, 1616 }, { 244, 244 }, { 245, 1617 }, { 246, 1618 }, { 247, 247 }, { 248, 248 }, { 249, 249 }, { 250, 250 }, { 251, 251 }, { 252, 252 }, { 253, 253 }, { 254, 254 }, { 255, 255 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 193 }, { 65, 196 }, { 65, 197 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 225 }, { 97, 228 }, { 97, 229 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 204 }, { 73, 205 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 236 }, { 105, 237 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 209 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 241 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 210 }, { 78, 211 }, { 78, 213 }, { 78, 214 }, { 78, 216 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 242 }, { 110, 243 }, { 110, 245 }, { 110, 246 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 218 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 221 }, { 89, 374 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t cp1257[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 8364 }, { 129, 129 }, { 130, 8218 }, { 131, 131 }, { 132, 8222 }, { 133, 8230 }, { 134, 8224 }, { 135, 8225 }, { 136, 136 }, { 137, 8240 }, { 138, 138 }, { 139, 8249 }, { 140, 140 }, { 141, 168 }, { 142, 711 }, { 143, 184 }, { 144, 144 }, { 145, 8216 }, { 146, 8217 }, { 147, 8220 }, { 148, 8221 }, { 149, 8226 }, { 150, 8211 }, { 151, 8212 }, { 152, 152 }, { 153, 8482 }, { 154, 154 }, { 155, 8250 }, { 156, 156 }, { 157, 175 }, { 158, 731 }, { 159, 159 }, { 160, 160 }, { 161, 161 }, { 162, 162 }, { 163, 163 }, { 164, 164 }, { 165, 165 }, { 166, 166 }, { 167, 167 }, { 168, 216 }, { 169, 169 }, { 170, 342 }, { 171, 171 }, { 172, 172 }, { 173, 173 }, { 174, 174 }, { 175, 198 }, { 176, 176 }, { 177, 177 }, { 178, 178 }, { 179, 179 }, { 180, 180 }, { 181, 181 }, { 182, 182 }, { 183, 183 }, { 184, 248 }, { 185, 185 }, { 186, 343 }, { 187, 187 }, { 188, 188 }, { 189, 189 }, { 190, 190 }, { 191, 230 }, { 192, 260 }, { 193, 302 }, { 194, 256 }, { 195, 262 }, { 196, 196 }, { 197, 197 }, { 198, 280 }, { 199, 274 }, { 200, 268 }, { 201, 201 }, { 202, 377 }, { 203, 278 }, { 204, 290 }, { 205, 310 }, { 206, 298 }, { 207, 315 }, { 208, 352 }, { 209, 323 }, { 210, 325 }, { 211, 211 }, { 212, 332 }, { 213, 213 }, { 214, 214 }, { 215, 215 }, { 216, 370 }, { 217, 321 }, { 218, 340 }, { 219, 362 }, { 220, 220 }, { 221, 379 }, { 222, 381 }, { 223, 223 }, { 224, 261 }, { 225, 303 }, { 226, 257 }, { 227, 263 }, { 228, 228 }, { 229, 229 }, { 230, 281 }, { 231, 275 }, { 232, 269 }, { 233, 233 }, { 234, 378 }, { 235, 279 }, { 236, 291 }, { 237, 311 }, { 238, 299 }, { 239, 316 }, { 240, 353 }, { 241, 324 }, { 242, 326 }, { 243, 243 }, { 244, 333 }, { 245, 245 }, { 246, 246 }, { 247, 247 }, { 248, 371 }, { 249, 322 }, { 250, 347 }, { 251, 363 }, { 252, 252 }, { 253, 380 }, { 254, 382 }, { 255, 729 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 192 }, { 65, 193 }, { 65, 194 }, { 65, 195 }, { 65, 258 }, { 65, 461 }, { 97, 224 }, { 97, 225 }, { 97, 226 }, { 97, 227 }, { 97, 259 }, { 97, 462 }, { 67, 199 }, { 67, 264 }, { 67, 266 }, { 99, 231 }, { 99, 265 }, { 99, 267 }, { 68, 270 }, { 100, 271 }, { 69, 200 }, { 69, 202 }, { 69, 203 }, { 69, 276 }, { 69, 282 }, { 101, 232 }, { 101, 234 }, { 101, 235 }, { 101, 277 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 204 }, { 73, 205 }, { 73, 206 }, { 73, 207 }, { 73, 296 }, { 73, 300 }, { 73, 304 }, { 73, 463 }, { 105, 236 }, { 105, 237 }, { 105, 238 }, { 105, 239 }, { 105, 297 }, { 105, 301 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 488 }, { 107, 489 }, { 76, 313 }, { 76, 317 }, { 76, 319 }, { 108, 314 }, { 108, 318 }, { 108, 320 }, { 77, 209 }, { 77, 327 }, { 109, 241 }, { 109, 328 }, { 109, 329 }, { 78, 210 }, { 78, 212 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 242 }, { 110, 244 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 344 }, { 114, 341 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 115, 349 }, { 115, 351 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 217 }, { 85, 218 }, { 85, 219 }, { 85, 360 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 467 }, { 117, 249 }, { 117, 250 }, { 117, 251 }, { 117, 361 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 221 }, { 89, 374 }, { 89, 376 }, { 121, 253 }, { 121, 255 }, { 121, 375 }, }; static convert_t cp1258[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 8364 }, { 129, 129 }, { 130, 8218 }, { 131, 402 }, { 132, 8222 }, { 133, 8230 }, { 134, 8224 }, { 135, 8225 }, { 136, 710 }, { 137, 8240 }, { 138, 138 }, { 139, 8249 }, { 140, 338 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 144 }, { 145, 8216 }, { 146, 8217 }, { 147, 8220 }, { 148, 8221 }, { 149, 8226 }, { 150, 8211 }, { 151, 8212 }, { 152, 732 }, { 153, 8482 }, { 154, 154 }, { 155, 8250 }, { 156, 339 }, { 157, 157 }, { 158, 158 }, { 159, 376 }, { 160, 160 }, { 161, 161 }, { 162, 162 }, { 163, 163 }, { 164, 164 }, { 165, 165 }, { 166, 166 }, { 167, 167 }, { 168, 168 }, { 169, 169 }, { 170, 170 }, { 171, 171 }, { 172, 172 }, { 173, 173 }, { 174, 174 }, { 175, 175 }, { 176, 176 }, { 177, 177 }, { 178, 178 }, { 179, 179 }, { 180, 180 }, { 181, 181 }, { 182, 182 }, { 183, 183 }, { 184, 184 }, { 185, 185 }, { 186, 186 }, { 187, 187 }, { 188, 188 }, { 189, 189 }, { 190, 190 }, { 191, 191 }, { 192, 192 }, { 193, 193 }, { 194, 194 }, { 195, 258 }, { 196, 196 }, { 197, 197 }, { 198, 198 }, { 199, 199 }, { 200, 200 }, { 201, 201 }, { 202, 202 }, { 203, 203 }, { 204, 832 }, { 205, 205 }, { 206, 206 }, { 207, 207 }, { 208, 272 }, { 209, 209 }, { 210, 777 }, { 211, 211 }, { 212, 212 }, { 213, 416 }, { 214, 214 }, { 215, 215 }, { 216, 216 }, { 217, 217 }, { 218, 218 }, { 219, 219 }, { 220, 220 }, { 221, 431 }, { 222, 771 }, { 223, 223 }, { 224, 224 }, { 225, 225 }, { 226, 226 }, { 227, 259 }, { 228, 228 }, { 229, 229 }, { 230, 230 }, { 231, 231 }, { 232, 232 }, { 233, 233 }, { 234, 234 }, { 235, 235 }, { 236, 833 }, { 237, 237 }, { 238, 238 }, { 239, 239 }, { 240, 273 }, { 241, 241 }, { 242, 803 }, { 243, 243 }, { 244, 244 }, { 245, 417 }, { 246, 246 }, { 247, 247 }, { 248, 248 }, { 249, 249 }, { 250, 250 }, { 251, 251 }, { 252, 252 }, { 253, 432 }, { 254, 8363 }, { 255, 255 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 195 }, { 65, 256 }, { 65, 260 }, { 65, 461 }, { 97, 227 }, { 97, 257 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 204 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 236 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 210 }, { 78, 213 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 242 }, { 110, 245 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 221 }, { 89, 374 }, { 121, 253 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t decmcs[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 128 }, { 129, 129 }, { 130, 130 }, { 131, 131 }, { 132, 132 }, { 133, 133 }, { 134, 134 }, { 135, 135 }, { 136, 136 }, { 137, 137 }, { 138, 138 }, { 139, 139 }, { 140, 140 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 144 }, { 145, 145 }, { 146, 146 }, { 147, 147 }, { 148, 148 }, { 149, 149 }, { 150, 150 }, { 151, 151 }, { 152, 152 }, { 153, 153 }, { 154, 154 }, { 155, 155 }, { 156, 156 }, { 157, 157 }, { 158, 158 }, { 159, 159 }, { 160, 160 }, { 161, 161 }, { 162, 162 }, { 163, 163 }, { 164, 164 }, { 165, 165 }, { 166, 166 }, { 167, 167 }, { 168, 164 }, { 169, 169 }, { 170, 170 }, { 171, 171 }, { 172, 172 }, { 173, 173 }, { 174, 174 }, { 175, 175 }, { 176, 176 }, { 177, 177 }, { 178, 178 }, { 179, 179 }, { 180, 180 }, { 181, 181 }, { 182, 182 }, { 183, 183 }, { 184, 184 }, { 185, 185 }, { 186, 186 }, { 187, 187 }, { 188, 188 }, { 189, 189 }, { 190, 190 }, { 191, 191 }, { 192, 192 }, { 193, 193 }, { 194, 194 }, { 195, 195 }, { 196, 196 }, { 197, 197 }, { 198, 198 }, { 199, 199 }, { 200, 200 }, { 201, 201 }, { 202, 202 }, { 203, 203 }, { 204, 204 }, { 205, 205 }, { 206, 206 }, { 207, 207 }, { 208, 208 }, { 209, 209 }, { 210, 210 }, { 211, 211 }, { 212, 212 }, { 213, 213 }, { 214, 214 }, { 215, 338 }, { 216, 216 }, { 217, 217 }, { 218, 218 }, { 219, 219 }, { 220, 220 }, { 221, 376 }, { 222, 222 }, { 223, 223 }, { 224, 224 }, { 225, 225 }, { 226, 226 }, { 227, 227 }, { 228, 228 }, { 229, 229 }, { 230, 230 }, { 231, 231 }, { 232, 232 }, { 233, 233 }, { 234, 234 }, { 235, 235 }, { 236, 236 }, { 237, 237 }, { 238, 238 }, { 239, 239 }, { 240, 240 }, { 241, 241 }, { 242, 242 }, { 243, 243 }, { 244, 244 }, { 245, 245 }, { 246, 246 }, { 247, 339 }, { 248, 248 }, { 249, 249 }, { 250, 250 }, { 251, 251 }, { 252, 252 }, { 253, 255 }, { 254, 254 }, { 255, 255 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 221 }, { 89, 374 }, { 121, 253 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t ebc037[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 32 }, { 65, 160 }, { 66, 226 }, { 67, 228 }, { 68, 224 }, { 69, 225 }, { 70, 227 }, { 71, 229 }, { 72, 231 }, { 73, 241 }, { 74, 162 }, { 75, 46 }, { 76, 60 }, { 77, 40 }, { 78, 43 }, { 79, 124 }, { 80, 38 }, { 81, 233 }, { 82, 234 }, { 83, 235 }, { 84, 232 }, { 85, 237 }, { 86, 238 }, { 87, 239 }, { 88, 236 }, { 89, 223 }, { 90, 33 }, { 91, 36 }, { 92, 42 }, { 93, 41 }, { 94, 59 }, { 95, 172 }, { 96, 45 }, { 97, 47 }, { 98, 194 }, { 99, 196 }, { 100, 192 }, { 101, 193 }, { 102, 195 }, { 103, 197 }, { 104, 199 }, { 105, 209 }, { 106, 166 }, { 107, 44 }, { 108, 37 }, { 109, 95 }, { 110, 62 }, { 111, 63 }, { 112, 248 }, { 113, 201 }, { 114, 202 }, { 115, 203 }, { 116, 200 }, { 117, 205 }, { 118, 206 }, { 119, 207 }, { 120, 204 }, { 121, 96 }, { 122, 58 }, { 123, 35 }, { 124, 64 }, { 125, 39 }, { 126, 61 }, { 127, 34 }, { 128, 216 }, { 129, 97 }, { 130, 98 }, { 131, 99 }, { 132, 100 }, { 133, 101 }, { 134, 102 }, { 135, 103 }, { 136, 104 }, { 137, 105 }, { 138, 171 }, { 139, 187 }, { 140, 240 }, { 141, 253 }, { 142, 254 }, { 143, 177 }, { 144, 176 }, { 145, 106 }, { 146, 107 }, { 147, 108 }, { 148, 109 }, { 149, 110 }, { 150, 111 }, { 151, 112 }, { 152, 113 }, { 153, 114 }, { 154, 170 }, { 155, 186 }, { 156, 230 }, { 157, 184 }, { 158, 198 }, { 159, 164 }, { 160, 181 }, { 161, 126 }, { 162, 115 }, { 163, 116 }, { 164, 117 }, { 165, 118 }, { 166, 119 }, { 167, 120 }, { 168, 121 }, { 169, 122 }, { 170, 161 }, { 171, 191 }, { 172, 208 }, { 173, 221 }, { 174, 222 }, { 175, 174 }, { 176, 94 }, { 177, 163 }, { 178, 165 }, { 179, 183 }, { 180, 169 }, { 181, 167 }, { 182, 182 }, { 183, 188 }, { 184, 189 }, { 185, 190 }, { 186, 91 }, { 187, 93 }, { 188, 175 }, { 189, 168 }, { 190, 180 }, { 191, 215 }, { 192, 123 }, { 193, 65 }, { 194, 66 }, { 195, 67 }, { 196, 68 }, { 197, 69 }, { 198, 70 }, { 199, 71 }, { 200, 72 }, { 201, 73 }, { 202, 173 }, { 203, 244 }, { 204, 246 }, { 205, 242 }, { 206, 243 }, { 207, 245 }, { 208, 125 }, { 209, 74 }, { 210, 75 }, { 211, 76 }, { 212, 77 }, { 213, 78 }, { 214, 79 }, { 215, 80 }, { 216, 81 }, { 217, 82 }, { 218, 185 }, { 219, 251 }, { 220, 252 }, { 221, 249 }, { 222, 250 }, { 223, 255 }, { 224, 92 }, { 225, 247 }, { 226, 83 }, { 227, 84 }, { 228, 85 }, { 229, 86 }, { 230, 87 }, { 231, 88 }, { 232, 89 }, { 233, 90 }, { 234, 178 }, { 235, 212 }, { 236, 214 }, { 237, 210 }, { 238, 211 }, { 239, 213 }, { 240, 48 }, { 241, 49 }, { 242, 50 }, { 243, 51 }, { 244, 52 }, { 245, 53 }, { 246, 54 }, { 247, 55 }, { 248, 56 }, { 249, 57 }, { 250, 179 }, { 251, 219 }, { 252, 220 }, { 253, 217 }, { 254, 218 }, { 255, 255 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 193, 256 }, { 193, 258 }, { 193, 260 }, { 193, 461 }, { 129, 257 }, { 129, 259 }, { 129, 261 }, { 129, 462 }, { 195, 262 }, { 195, 264 }, { 195, 266 }, { 195, 268 }, { 131, 263 }, { 131, 265 }, { 131, 267 }, { 131, 269 }, { 196, 270 }, { 132, 271 }, { 197, 274 }, { 197, 276 }, { 197, 278 }, { 197, 280 }, { 197, 282 }, { 133, 275 }, { 133, 277 }, { 133, 279 }, { 133, 281 }, { 133, 283 }, { 199, 284 }, { 199, 286 }, { 199, 288 }, { 199, 290 }, { 199, 486 }, { 199, 500 }, { 135, 285 }, { 135, 287 }, { 135, 289 }, { 135, 291 }, { 135, 487 }, { 135, 501 }, { 200, 292 }, { 136, 293 }, { 201, 296 }, { 201, 298 }, { 201, 300 }, { 201, 302 }, { 201, 304 }, { 201, 463 }, { 137, 297 }, { 137, 299 }, { 137, 301 }, { 137, 303 }, { 137, 305 }, { 137, 464 }, { 209, 308 }, { 145, 309 }, { 210, 310 }, { 210, 488 }, { 146, 311 }, { 146, 489 }, { 211, 313 }, { 211, 315 }, { 211, 317 }, { 211, 319 }, { 211, 321 }, { 147, 314 }, { 147, 316 }, { 147, 318 }, { 147, 320 }, { 147, 322 }, { 212, 323 }, { 212, 325 }, { 212, 327 }, { 148, 324 }, { 148, 326 }, { 148, 328 }, { 148, 329 }, { 213, 332 }, { 213, 334 }, { 213, 336 }, { 213, 465 }, { 213, 490 }, { 149, 333 }, { 149, 335 }, { 149, 337 }, { 149, 466 }, { 149, 491 }, { 217, 340 }, { 217, 342 }, { 217, 344 }, { 153, 341 }, { 153, 343 }, { 153, 345 }, { 226, 346 }, { 226, 348 }, { 226, 350 }, { 226, 352 }, { 162, 347 }, { 162, 349 }, { 162, 351 }, { 162, 353 }, { 227, 354 }, { 227, 356 }, { 163, 355 }, { 163, 357 }, { 228, 360 }, { 228, 362 }, { 228, 364 }, { 228, 366 }, { 228, 368 }, { 228, 370 }, { 228, 467 }, { 164, 361 }, { 164, 363 }, { 164, 365 }, { 164, 367 }, { 164, 369 }, { 164, 371 }, { 164, 468 }, { 230, 372 }, { 166, 373 }, { 232, 374 }, { 232, 376 }, { 168, 375 }, { 233, 377 }, { 233, 379 }, { 233, 381 }, { 169, 378 }, { 169, 380 }, { 169, 382 }, }; static convert_t ebc1026[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 32 }, { 65, 160 }, { 66, 226 }, { 67, 228 }, { 68, 224 }, { 69, 225 }, { 70, 227 }, { 71, 229 }, { 72, 123 }, { 73, 241 }, { 74, 199 }, { 75, 46 }, { 76, 60 }, { 77, 40 }, { 78, 43 }, { 79, 33 }, { 80, 38 }, { 81, 233 }, { 82, 234 }, { 83, 235 }, { 84, 232 }, { 85, 237 }, { 86, 238 }, { 87, 239 }, { 88, 236 }, { 89, 223 }, { 90, 286 }, { 91, 304 }, { 92, 42 }, { 93, 41 }, { 94, 59 }, { 95, 94 }, { 96, 45 }, { 97, 47 }, { 98, 194 }, { 99, 196 }, { 100, 192 }, { 101, 193 }, { 102, 195 }, { 103, 197 }, { 104, 91 }, { 105, 209 }, { 106, 351 }, { 107, 44 }, { 108, 37 }, { 109, 95 }, { 110, 62 }, { 111, 63 }, { 112, 248 }, { 113, 201 }, { 114, 202 }, { 115, 203 }, { 116, 200 }, { 117, 205 }, { 118, 206 }, { 119, 207 }, { 120, 204 }, { 121, 305 }, { 122, 58 }, { 123, 214 }, { 124, 350 }, { 125, 39 }, { 126, 61 }, { 127, 220 }, { 128, 216 }, { 129, 97 }, { 130, 98 }, { 131, 99 }, { 132, 100 }, { 133, 101 }, { 134, 102 }, { 135, 103 }, { 136, 104 }, { 137, 105 }, { 138, 171 }, { 139, 187 }, { 140, 125 }, { 141, 96 }, { 142, 166 }, { 143, 177 }, { 144, 176 }, { 145, 106 }, { 146, 107 }, { 147, 108 }, { 148, 109 }, { 149, 110 }, { 150, 111 }, { 151, 112 }, { 152, 113 }, { 153, 114 }, { 154, 170 }, { 155, 186 }, { 156, 230 }, { 157, 184 }, { 158, 198 }, { 159, 164 }, { 160, 181 }, { 161, 246 }, { 162, 115 }, { 163, 116 }, { 164, 117 }, { 165, 118 }, { 166, 119 }, { 167, 120 }, { 168, 121 }, { 169, 122 }, { 170, 161 }, { 171, 191 }, { 172, 93 }, { 173, 36 }, { 174, 64 }, { 175, 174 }, { 176, 162 }, { 177, 163 }, { 178, 165 }, { 179, 183 }, { 180, 169 }, { 181, 167 }, { 182, 182 }, { 183, 188 }, { 184, 189 }, { 185, 190 }, { 186, 172 }, { 187, 124 }, { 188, 175 }, { 189, 168 }, { 190, 180 }, { 191, 215 }, { 192, 231 }, { 193, 65 }, { 194, 66 }, { 195, 67 }, { 196, 68 }, { 197, 69 }, { 198, 70 }, { 199, 71 }, { 200, 72 }, { 201, 73 }, { 202, 173 }, { 203, 244 }, { 204, 126 }, { 205, 242 }, { 206, 243 }, { 207, 245 }, { 208, 287 }, { 209, 74 }, { 210, 75 }, { 211, 76 }, { 212, 77 }, { 213, 78 }, { 214, 79 }, { 215, 80 }, { 216, 81 }, { 217, 82 }, { 218, 185 }, { 219, 251 }, { 220, 92 }, { 221, 249 }, { 222, 250 }, { 223, 255 }, { 224, 252 }, { 225, 247 }, { 226, 83 }, { 227, 84 }, { 228, 85 }, { 229, 86 }, { 230, 87 }, { 231, 88 }, { 232, 89 }, { 233, 90 }, { 234, 178 }, { 235, 212 }, { 236, 35 }, { 237, 210 }, { 238, 211 }, { 239, 213 }, { 240, 48 }, { 241, 49 }, { 242, 50 }, { 243, 51 }, { 244, 52 }, { 245, 53 }, { 246, 54 }, { 247, 55 }, { 248, 56 }, { 249, 57 }, { 250, 179 }, { 251, 219 }, { 252, 34 }, { 253, 217 }, { 254, 218 }, { 255, 255 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 193, 256 }, { 193, 258 }, { 193, 260 }, { 193, 461 }, { 129, 257 }, { 129, 259 }, { 129, 261 }, { 129, 462 }, { 195, 262 }, { 195, 264 }, { 195, 266 }, { 195, 268 }, { 131, 263 }, { 131, 265 }, { 131, 267 }, { 131, 269 }, { 196, 270 }, { 132, 271 }, { 197, 274 }, { 197, 276 }, { 197, 278 }, { 197, 280 }, { 197, 282 }, { 133, 275 }, { 133, 277 }, { 133, 279 }, { 133, 281 }, { 133, 283 }, { 199, 284 }, { 199, 288 }, { 199, 290 }, { 199, 486 }, { 199, 500 }, { 135, 285 }, { 135, 289 }, { 135, 291 }, { 135, 487 }, { 135, 501 }, { 200, 292 }, { 136, 293 }, { 201, 296 }, { 201, 298 }, { 201, 300 }, { 201, 302 }, { 201, 463 }, { 137, 297 }, { 137, 299 }, { 137, 301 }, { 137, 303 }, { 137, 464 }, { 209, 308 }, { 145, 309 }, { 210, 310 }, { 210, 488 }, { 146, 311 }, { 146, 489 }, { 211, 313 }, { 211, 315 }, { 211, 317 }, { 211, 319 }, { 211, 321 }, { 147, 314 }, { 147, 316 }, { 147, 318 }, { 147, 320 }, { 147, 322 }, { 212, 323 }, { 212, 325 }, { 212, 327 }, { 148, 324 }, { 148, 326 }, { 148, 328 }, { 148, 329 }, { 213, 332 }, { 213, 334 }, { 213, 336 }, { 213, 465 }, { 213, 490 }, { 149, 333 }, { 149, 335 }, { 149, 337 }, { 149, 466 }, { 149, 491 }, { 217, 340 }, { 217, 342 }, { 217, 344 }, { 153, 341 }, { 153, 343 }, { 153, 345 }, { 226, 346 }, { 226, 348 }, { 226, 352 }, { 162, 347 }, { 162, 349 }, { 162, 353 }, { 227, 354 }, { 227, 356 }, { 163, 355 }, { 163, 357 }, { 228, 360 }, { 228, 362 }, { 228, 364 }, { 228, 366 }, { 228, 368 }, { 228, 370 }, { 228, 467 }, { 164, 361 }, { 164, 363 }, { 164, 365 }, { 164, 367 }, { 164, 369 }, { 164, 371 }, { 164, 468 }, { 230, 372 }, { 166, 373 }, { 232, 221 }, { 232, 374 }, { 232, 376 }, { 168, 253 }, { 168, 375 }, { 233, 377 }, { 233, 379 }, { 233, 381 }, { 169, 378 }, { 169, 380 }, { 169, 382 }, }; static convert_t ebc1047[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 32 }, { 65, 160 }, { 66, 226 }, { 67, 228 }, { 68, 224 }, { 69, 225 }, { 70, 227 }, { 71, 229 }, { 72, 231 }, { 73, 241 }, { 74, 162 }, { 75, 46 }, { 76, 60 }, { 77, 40 }, { 78, 43 }, { 79, 124 }, { 80, 38 }, { 81, 233 }, { 82, 234 }, { 83, 235 }, { 84, 232 }, { 85, 237 }, { 86, 238 }, { 87, 239 }, { 88, 236 }, { 89, 223 }, { 90, 33 }, { 91, 36 }, { 92, 42 }, { 93, 41 }, { 94, 59 }, { 95, 94 }, { 96, 45 }, { 97, 47 }, { 98, 194 }, { 99, 196 }, { 100, 192 }, { 101, 193 }, { 102, 195 }, { 103, 197 }, { 104, 199 }, { 105, 209 }, { 106, 166 }, { 107, 44 }, { 108, 37 }, { 109, 95 }, { 110, 62 }, { 111, 63 }, { 112, 248 }, { 113, 201 }, { 114, 202 }, { 115, 203 }, { 116, 200 }, { 117, 205 }, { 118, 206 }, { 119, 207 }, { 120, 204 }, { 121, 96 }, { 122, 58 }, { 123, 35 }, { 124, 64 }, { 125, 39 }, { 126, 61 }, { 127, 34 }, { 128, 216 }, { 129, 97 }, { 130, 98 }, { 131, 99 }, { 132, 100 }, { 133, 101 }, { 134, 102 }, { 135, 103 }, { 136, 104 }, { 137, 105 }, { 138, 171 }, { 139, 187 }, { 140, 240 }, { 141, 253 }, { 142, 254 }, { 143, 177 }, { 144, 176 }, { 145, 106 }, { 146, 107 }, { 147, 108 }, { 148, 109 }, { 149, 110 }, { 150, 111 }, { 151, 112 }, { 152, 113 }, { 153, 114 }, { 154, 170 }, { 155, 186 }, { 156, 230 }, { 157, 184 }, { 158, 198 }, { 159, 164 }, { 160, 181 }, { 161, 126 }, { 162, 115 }, { 163, 116 }, { 164, 117 }, { 165, 118 }, { 166, 119 }, { 167, 120 }, { 168, 121 }, { 169, 122 }, { 170, 161 }, { 171, 191 }, { 172, 208 }, { 173, 91 }, { 174, 222 }, { 175, 174 }, { 176, 172 }, { 177, 163 }, { 178, 165 }, { 179, 183 }, { 180, 169 }, { 181, 167 }, { 182, 182 }, { 183, 188 }, { 184, 189 }, { 185, 190 }, { 186, 221 }, { 187, 168 }, { 188, 175 }, { 189, 93 }, { 190, 180 }, { 191, 215 }, { 192, 123 }, { 193, 65 }, { 194, 66 }, { 195, 67 }, { 196, 68 }, { 197, 69 }, { 198, 70 }, { 199, 71 }, { 200, 72 }, { 201, 73 }, { 202, 173 }, { 203, 244 }, { 204, 246 }, { 205, 242 }, { 206, 243 }, { 207, 245 }, { 208, 125 }, { 209, 74 }, { 210, 75 }, { 211, 76 }, { 212, 77 }, { 213, 78 }, { 214, 79 }, { 215, 80 }, { 216, 81 }, { 217, 82 }, { 218, 185 }, { 219, 251 }, { 220, 252 }, { 221, 249 }, { 222, 250 }, { 223, 255 }, { 224, 92 }, { 225, 247 }, { 226, 83 }, { 227, 84 }, { 228, 85 }, { 229, 86 }, { 230, 87 }, { 231, 88 }, { 232, 89 }, { 233, 90 }, { 234, 178 }, { 235, 212 }, { 236, 214 }, { 237, 210 }, { 238, 211 }, { 239, 213 }, { 240, 48 }, { 241, 49 }, { 242, 50 }, { 243, 51 }, { 244, 52 }, { 245, 53 }, { 246, 54 }, { 247, 55 }, { 248, 56 }, { 249, 57 }, { 250, 179 }, { 251, 219 }, { 252, 220 }, { 253, 217 }, { 254, 218 }, { 255, 255 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 193, 256 }, { 193, 258 }, { 193, 260 }, { 193, 461 }, { 129, 257 }, { 129, 259 }, { 129, 261 }, { 129, 462 }, { 195, 262 }, { 195, 264 }, { 195, 266 }, { 195, 268 }, { 131, 263 }, { 131, 265 }, { 131, 267 }, { 131, 269 }, { 196, 270 }, { 132, 271 }, { 197, 274 }, { 197, 276 }, { 197, 278 }, { 197, 280 }, { 197, 282 }, { 133, 275 }, { 133, 277 }, { 133, 279 }, { 133, 281 }, { 133, 283 }, { 199, 284 }, { 199, 286 }, { 199, 288 }, { 199, 290 }, { 199, 486 }, { 199, 500 }, { 135, 285 }, { 135, 287 }, { 135, 289 }, { 135, 291 }, { 135, 487 }, { 135, 501 }, { 200, 292 }, { 136, 293 }, { 201, 296 }, { 201, 298 }, { 201, 300 }, { 201, 302 }, { 201, 304 }, { 201, 463 }, { 137, 297 }, { 137, 299 }, { 137, 301 }, { 137, 303 }, { 137, 305 }, { 137, 464 }, { 209, 308 }, { 145, 309 }, { 210, 310 }, { 210, 488 }, { 146, 311 }, { 146, 489 }, { 211, 313 }, { 211, 315 }, { 211, 317 }, { 211, 319 }, { 211, 321 }, { 147, 314 }, { 147, 316 }, { 147, 318 }, { 147, 320 }, { 147, 322 }, { 212, 323 }, { 212, 325 }, { 212, 327 }, { 148, 324 }, { 148, 326 }, { 148, 328 }, { 148, 329 }, { 213, 332 }, { 213, 334 }, { 213, 336 }, { 213, 465 }, { 213, 490 }, { 149, 333 }, { 149, 335 }, { 149, 337 }, { 149, 466 }, { 149, 491 }, { 217, 340 }, { 217, 342 }, { 217, 344 }, { 153, 341 }, { 153, 343 }, { 153, 345 }, { 226, 346 }, { 226, 348 }, { 226, 350 }, { 226, 352 }, { 162, 347 }, { 162, 349 }, { 162, 351 }, { 162, 353 }, { 227, 354 }, { 227, 356 }, { 163, 355 }, { 163, 357 }, { 228, 360 }, { 228, 362 }, { 228, 364 }, { 228, 366 }, { 228, 368 }, { 228, 370 }, { 228, 467 }, { 164, 361 }, { 164, 363 }, { 164, 365 }, { 164, 367 }, { 164, 369 }, { 164, 371 }, { 164, 468 }, { 230, 372 }, { 166, 373 }, { 232, 374 }, { 232, 376 }, { 168, 375 }, { 233, 377 }, { 233, 379 }, { 233, 381 }, { 169, 378 }, { 169, 380 }, { 169, 382 }, }; static convert_t ebc500[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 32 }, { 65, 160 }, { 66, 226 }, { 67, 228 }, { 68, 224 }, { 69, 225 }, { 70, 227 }, { 71, 229 }, { 72, 231 }, { 73, 241 }, { 74, 91 }, { 75, 46 }, { 76, 60 }, { 77, 40 }, { 78, 43 }, { 79, 33 }, { 80, 38 }, { 81, 233 }, { 82, 234 }, { 83, 235 }, { 84, 232 }, { 85, 237 }, { 86, 238 }, { 87, 239 }, { 88, 236 }, { 89, 223 }, { 90, 93 }, { 91, 36 }, { 92, 42 }, { 93, 41 }, { 94, 59 }, { 95, 94 }, { 96, 45 }, { 97, 47 }, { 98, 194 }, { 99, 196 }, { 100, 192 }, { 101, 193 }, { 102, 195 }, { 103, 197 }, { 104, 199 }, { 105, 209 }, { 106, 166 }, { 107, 44 }, { 108, 37 }, { 109, 95 }, { 110, 62 }, { 111, 63 }, { 112, 248 }, { 113, 201 }, { 114, 202 }, { 115, 203 }, { 116, 200 }, { 117, 205 }, { 118, 206 }, { 119, 207 }, { 120, 204 }, { 121, 96 }, { 122, 58 }, { 123, 35 }, { 124, 64 }, { 125, 39 }, { 126, 61 }, { 127, 34 }, { 128, 216 }, { 129, 97 }, { 130, 98 }, { 131, 99 }, { 132, 100 }, { 133, 101 }, { 134, 102 }, { 135, 103 }, { 136, 104 }, { 137, 105 }, { 138, 171 }, { 139, 187 }, { 140, 240 }, { 141, 253 }, { 142, 254 }, { 143, 177 }, { 144, 176 }, { 145, 106 }, { 146, 107 }, { 147, 108 }, { 148, 109 }, { 149, 110 }, { 150, 111 }, { 151, 112 }, { 152, 113 }, { 153, 114 }, { 154, 170 }, { 155, 186 }, { 156, 230 }, { 157, 184 }, { 158, 198 }, { 159, 164 }, { 160, 181 }, { 161, 126 }, { 162, 115 }, { 163, 116 }, { 164, 117 }, { 165, 118 }, { 166, 119 }, { 167, 120 }, { 168, 121 }, { 169, 122 }, { 170, 161 }, { 171, 191 }, { 172, 208 }, { 173, 221 }, { 174, 222 }, { 175, 174 }, { 176, 162 }, { 177, 163 }, { 178, 165 }, { 179, 183 }, { 180, 169 }, { 181, 167 }, { 182, 182 }, { 183, 188 }, { 184, 189 }, { 185, 190 }, { 186, 172 }, { 187, 124 }, { 188, 175 }, { 189, 168 }, { 190, 180 }, { 191, 215 }, { 192, 123 }, { 193, 65 }, { 194, 66 }, { 195, 67 }, { 196, 68 }, { 197, 69 }, { 198, 70 }, { 199, 71 }, { 200, 72 }, { 201, 73 }, { 202, 173 }, { 203, 244 }, { 204, 246 }, { 205, 242 }, { 206, 243 }, { 207, 245 }, { 208, 125 }, { 209, 74 }, { 210, 75 }, { 211, 76 }, { 212, 77 }, { 213, 78 }, { 214, 79 }, { 215, 80 }, { 216, 81 }, { 217, 82 }, { 218, 185 }, { 219, 251 }, { 220, 252 }, { 221, 249 }, { 222, 250 }, { 223, 255 }, { 224, 92 }, { 225, 247 }, { 226, 83 }, { 227, 84 }, { 228, 85 }, { 229, 86 }, { 230, 87 }, { 231, 88 }, { 232, 89 }, { 233, 90 }, { 234, 178 }, { 235, 212 }, { 236, 214 }, { 237, 210 }, { 238, 211 }, { 239, 213 }, { 240, 48 }, { 241, 49 }, { 242, 50 }, { 243, 51 }, { 244, 52 }, { 245, 53 }, { 246, 54 }, { 247, 55 }, { 248, 56 }, { 249, 57 }, { 250, 179 }, { 251, 219 }, { 252, 220 }, { 253, 217 }, { 254, 218 }, { 255, 255 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 193, 256 }, { 193, 258 }, { 193, 260 }, { 193, 461 }, { 129, 257 }, { 129, 259 }, { 129, 261 }, { 129, 462 }, { 195, 262 }, { 195, 264 }, { 195, 266 }, { 195, 268 }, { 131, 263 }, { 131, 265 }, { 131, 267 }, { 131, 269 }, { 196, 270 }, { 132, 271 }, { 197, 274 }, { 197, 276 }, { 197, 278 }, { 197, 280 }, { 197, 282 }, { 133, 275 }, { 133, 277 }, { 133, 279 }, { 133, 281 }, { 133, 283 }, { 199, 284 }, { 199, 286 }, { 199, 288 }, { 199, 290 }, { 199, 486 }, { 199, 500 }, { 135, 285 }, { 135, 287 }, { 135, 289 }, { 135, 291 }, { 135, 487 }, { 135, 501 }, { 200, 292 }, { 136, 293 }, { 201, 296 }, { 201, 298 }, { 201, 300 }, { 201, 302 }, { 201, 304 }, { 201, 463 }, { 137, 297 }, { 137, 299 }, { 137, 301 }, { 137, 303 }, { 137, 305 }, { 137, 464 }, { 209, 308 }, { 145, 309 }, { 210, 310 }, { 210, 488 }, { 146, 311 }, { 146, 489 }, { 211, 313 }, { 211, 315 }, { 211, 317 }, { 211, 319 }, { 211, 321 }, { 147, 314 }, { 147, 316 }, { 147, 318 }, { 147, 320 }, { 147, 322 }, { 212, 323 }, { 212, 325 }, { 212, 327 }, { 148, 324 }, { 148, 326 }, { 148, 328 }, { 148, 329 }, { 213, 332 }, { 213, 334 }, { 213, 336 }, { 213, 465 }, { 213, 490 }, { 149, 333 }, { 149, 335 }, { 149, 337 }, { 149, 466 }, { 149, 491 }, { 217, 340 }, { 217, 342 }, { 217, 344 }, { 153, 341 }, { 153, 343 }, { 153, 345 }, { 226, 346 }, { 226, 348 }, { 226, 350 }, { 226, 352 }, { 162, 347 }, { 162, 349 }, { 162, 351 }, { 162, 353 }, { 227, 354 }, { 227, 356 }, { 163, 355 }, { 163, 357 }, { 228, 360 }, { 228, 362 }, { 228, 364 }, { 228, 366 }, { 228, 368 }, { 228, 370 }, { 228, 467 }, { 164, 361 }, { 164, 363 }, { 164, 365 }, { 164, 367 }, { 164, 369 }, { 164, 371 }, { 164, 468 }, { 230, 372 }, { 166, 373 }, { 232, 374 }, { 232, 376 }, { 168, 375 }, { 233, 377 }, { 233, 379 }, { 233, 381 }, { 169, 378 }, { 169, 380 }, { 169, 382 }, }; static convert_t ebc875[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 32 }, { 65, 913 }, { 66, 914 }, { 67, 915 }, { 68, 916 }, { 69, 917 }, { 70, 918 }, { 71, 919 }, { 72, 920 }, { 73, 921 }, { 74, 91 }, { 75, 46 }, { 76, 60 }, { 77, 40 }, { 78, 43 }, { 79, 33 }, { 80, 38 }, { 81, 922 }, { 82, 923 }, { 83, 924 }, { 84, 925 }, { 85, 926 }, { 86, 927 }, { 87, 928 }, { 88, 929 }, { 89, 931 }, { 90, 93 }, { 91, 36 }, { 92, 42 }, { 93, 41 }, { 94, 59 }, { 95, 94 }, { 96, 45 }, { 97, 47 }, { 98, 932 }, { 99, 933 }, { 100, 934 }, { 101, 935 }, { 102, 936 }, { 103, 937 }, { 104, 938 }, { 105, 939 }, { 106, 124 }, { 107, 44 }, { 108, 37 }, { 109, 95 }, { 110, 62 }, { 111, 63 }, { 112, 168 }, { 113, 902 }, { 114, 904 }, { 115, 905 }, { 116, 160 }, { 117, 906 }, { 118, 908 }, { 119, 910 }, { 120, 911 }, { 121, 96 }, { 122, 58 }, { 123, 35 }, { 124, 64 }, { 125, 39 }, { 126, 61 }, { 127, 34 }, { 128, 901 }, { 129, 97 }, { 130, 98 }, { 131, 99 }, { 132, 100 }, { 133, 101 }, { 134, 102 }, { 135, 103 }, { 136, 104 }, { 137, 105 }, { 138, 945 }, { 139, 946 }, { 140, 947 }, { 141, 948 }, { 142, 949 }, { 143, 950 }, { 144, 176 }, { 145, 106 }, { 146, 107 }, { 147, 108 }, { 148, 109 }, { 149, 110 }, { 150, 111 }, { 151, 112 }, { 152, 113 }, { 153, 114 }, { 154, 951 }, { 155, 952 }, { 156, 953 }, { 157, 954 }, { 158, 955 }, { 159, 956 }, { 160, 180 }, { 161, 126 }, { 162, 115 }, { 163, 116 }, { 164, 117 }, { 165, 118 }, { 166, 119 }, { 167, 120 }, { 168, 121 }, { 169, 122 }, { 170, 957 }, { 171, 958 }, { 172, 959 }, { 173, 960 }, { 174, 961 }, { 175, 963 }, { 176, 163 }, { 177, 940 }, { 178, 941 }, { 179, 942 }, { 180, 970 }, { 181, 943 }, { 182, 972 }, { 183, 973 }, { 184, 971 }, { 185, 974 }, { 186, 962 }, { 187, 964 }, { 188, 965 }, { 189, 966 }, { 190, 967 }, { 191, 968 }, { 192, 123 }, { 193, 65 }, { 194, 66 }, { 195, 67 }, { 196, 68 }, { 197, 69 }, { 198, 70 }, { 199, 71 }, { 200, 72 }, { 201, 73 }, { 202, 173 }, { 203, 969 }, { 204, 912 }, { 205, 944 }, { 206, 206 }, { 207, 207 }, { 208, 125 }, { 209, 74 }, { 210, 75 }, { 211, 76 }, { 212, 77 }, { 213, 78 }, { 214, 79 }, { 215, 80 }, { 216, 81 }, { 217, 82 }, { 218, 177 }, { 219, 189 }, { 220, 220 }, { 221, 183 }, { 222, 222 }, { 223, 166 }, { 224, 92 }, { 225, 225 }, { 226, 83 }, { 227, 84 }, { 228, 85 }, { 229, 86 }, { 230, 87 }, { 231, 88 }, { 232, 89 }, { 233, 90 }, { 234, 178 }, { 235, 167 }, { 236, 236 }, { 237, 237 }, { 238, 171 }, { 239, 172 }, { 240, 48 }, { 241, 49 }, { 242, 50 }, { 243, 51 }, { 244, 52 }, { 245, 53 }, { 246, 54 }, { 247, 55 }, { 248, 56 }, { 249, 57 }, { 250, 179 }, { 251, 169 }, { 252, 252 }, { 253, 253 }, { 254, 187 }, { 255, 255 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 193, 192 }, { 193, 193 }, { 193, 194 }, { 193, 195 }, { 193, 196 }, { 193, 197 }, { 193, 256 }, { 193, 258 }, { 193, 260 }, { 193, 461 }, { 129, 224 }, { 129, 226 }, { 129, 227 }, { 129, 228 }, { 129, 229 }, { 129, 257 }, { 129, 259 }, { 129, 261 }, { 129, 462 }, { 195, 199 }, { 195, 262 }, { 195, 264 }, { 195, 266 }, { 195, 268 }, { 131, 231 }, { 131, 263 }, { 131, 265 }, { 131, 267 }, { 131, 269 }, { 196, 270 }, { 132, 271 }, { 197, 200 }, { 197, 201 }, { 197, 202 }, { 197, 203 }, { 197, 274 }, { 197, 276 }, { 197, 278 }, { 197, 280 }, { 197, 282 }, { 133, 232 }, { 133, 233 }, { 133, 234 }, { 133, 235 }, { 133, 275 }, { 133, 277 }, { 133, 279 }, { 133, 281 }, { 133, 283 }, { 199, 284 }, { 199, 286 }, { 199, 288 }, { 199, 290 }, { 199, 486 }, { 199, 500 }, { 135, 285 }, { 135, 287 }, { 135, 289 }, { 135, 291 }, { 135, 487 }, { 135, 501 }, { 200, 292 }, { 136, 293 }, { 201, 204 }, { 201, 205 }, { 201, 296 }, { 201, 298 }, { 201, 300 }, { 201, 302 }, { 201, 304 }, { 201, 463 }, { 137, 238 }, { 137, 239 }, { 137, 297 }, { 137, 299 }, { 137, 301 }, { 137, 303 }, { 137, 305 }, { 137, 464 }, { 209, 308 }, { 145, 309 }, { 210, 310 }, { 210, 488 }, { 146, 311 }, { 146, 489 }, { 211, 313 }, { 211, 315 }, { 211, 317 }, { 211, 319 }, { 211, 321 }, { 147, 314 }, { 147, 316 }, { 147, 318 }, { 147, 320 }, { 147, 322 }, { 212, 209 }, { 212, 323 }, { 212, 325 }, { 212, 327 }, { 148, 241 }, { 148, 324 }, { 148, 326 }, { 148, 328 }, { 148, 329 }, { 213, 210 }, { 213, 211 }, { 213, 212 }, { 213, 213 }, { 213, 214 }, { 213, 216 }, { 213, 332 }, { 213, 334 }, { 213, 336 }, { 213, 465 }, { 213, 490 }, { 149, 242 }, { 149, 243 }, { 149, 244 }, { 149, 245 }, { 149, 246 }, { 149, 248 }, { 149, 333 }, { 149, 335 }, { 149, 337 }, { 149, 466 }, { 149, 491 }, { 217, 340 }, { 217, 342 }, { 217, 344 }, { 153, 341 }, { 153, 343 }, { 153, 345 }, { 226, 346 }, { 226, 348 }, { 226, 350 }, { 226, 352 }, { 162, 347 }, { 162, 349 }, { 162, 351 }, { 162, 353 }, { 227, 354 }, { 227, 356 }, { 163, 355 }, { 163, 357 }, { 228, 217 }, { 228, 218 }, { 228, 219 }, { 228, 360 }, { 228, 362 }, { 228, 364 }, { 228, 366 }, { 228, 368 }, { 228, 370 }, { 228, 467 }, { 164, 249 }, { 164, 250 }, { 164, 251 }, { 164, 361 }, { 164, 363 }, { 164, 365 }, { 164, 367 }, { 164, 369 }, { 164, 371 }, { 164, 468 }, { 230, 372 }, { 166, 373 }, { 232, 221 }, { 232, 374 }, { 232, 376 }, { 168, 375 }, { 233, 377 }, { 233, 379 }, { 233, 381 }, { 169, 378 }, { 169, 380 }, { 169, 382 }, }; static convert_t hp48[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 8735 }, { 129, 129 }, { 130, 8711 }, { 131, 8730 }, { 132, 8747 }, { 133, 8721 }, { 134, 9654 }, { 135, 960 }, { 136, 8706 }, { 137, 8804 }, { 138, 8805 }, { 139, 8800 }, { 140, 945 }, { 141, 8594 }, { 142, 8592 }, { 143, 8595 }, { 144, 8593 }, { 145, 947 }, { 146, 948 }, { 147, 949 }, { 148, 951 }, { 149, 952 }, { 150, 955 }, { 151, 961 }, { 152, 963 }, { 153, 964 }, { 154, 969 }, { 155, 916 }, { 156, 928 }, { 157, 937 }, { 158, 9644 }, { 159, 8734 }, { 160, 160 }, { 161, 161 }, { 162, 162 }, { 163, 163 }, { 164, 164 }, { 165, 165 }, { 166, 166 }, { 167, 167 }, { 168, 168 }, { 169, 169 }, { 170, 170 }, { 171, 171 }, { 172, 172 }, { 173, 173 }, { 174, 174 }, { 175, 175 }, { 176, 176 }, { 177, 177 }, { 178, 178 }, { 179, 179 }, { 180, 180 }, { 181, 181 }, { 182, 182 }, { 183, 183 }, { 184, 184 }, { 185, 185 }, { 186, 186 }, { 187, 187 }, { 188, 188 }, { 189, 189 }, { 190, 190 }, { 191, 191 }, { 192, 192 }, { 193, 193 }, { 194, 194 }, { 195, 195 }, { 196, 196 }, { 197, 197 }, { 198, 198 }, { 199, 199 }, { 200, 200 }, { 201, 201 }, { 202, 202 }, { 203, 203 }, { 204, 204 }, { 205, 205 }, { 206, 206 }, { 207, 207 }, { 208, 208 }, { 209, 209 }, { 210, 210 }, { 211, 211 }, { 212, 212 }, { 213, 213 }, { 214, 214 }, { 215, 215 }, { 216, 216 }, { 217, 217 }, { 218, 218 }, { 219, 219 }, { 220, 220 }, { 221, 221 }, { 222, 222 }, { 223, 223 }, { 224, 224 }, { 225, 225 }, { 226, 226 }, { 227, 227 }, { 228, 228 }, { 229, 229 }, { 230, 230 }, { 231, 231 }, { 232, 232 }, { 233, 233 }, { 234, 234 }, { 235, 235 }, { 236, 236 }, { 237, 237 }, { 238, 238 }, { 239, 239 }, { 240, 240 }, { 241, 241 }, { 242, 242 }, { 243, 243 }, { 244, 244 }, { 245, 245 }, { 246, 246 }, { 247, 247 }, { 248, 248 }, { 249, 249 }, { 250, 250 }, { 251, 251 }, { 252, 252 }, { 253, 253 }, { 254, 254 }, { 255, 255 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 374 }, { 89, 376 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t hproman8[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 128 }, { 129, 129 }, { 130, 130 }, { 131, 131 }, { 132, 132 }, { 133, 133 }, { 134, 134 }, { 135, 135 }, { 136, 136 }, { 137, 137 }, { 138, 138 }, { 139, 139 }, { 140, 140 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 144 }, { 145, 145 }, { 146, 146 }, { 147, 147 }, { 148, 148 }, { 149, 149 }, { 150, 150 }, { 151, 151 }, { 152, 152 }, { 153, 153 }, { 154, 154 }, { 155, 155 }, { 156, 156 }, { 157, 157 }, { 158, 158 }, { 159, 159 }, { 160, 160 }, { 161, 192 }, { 162, 194 }, { 163, 200 }, { 164, 202 }, { 165, 203 }, { 166, 206 }, { 167, 207 }, { 168, 180 }, { 169, 768 }, { 170, 770 }, { 171, 168 }, { 172, 771 }, { 173, 217 }, { 174, 219 }, { 175, 8356 }, { 176, 175 }, { 177, 221 }, { 178, 253 }, { 179, 176 }, { 180, 199 }, { 181, 231 }, { 182, 209 }, { 183, 241 }, { 184, 161 }, { 185, 191 }, { 186, 164 }, { 187, 163 }, { 188, 165 }, { 189, 167 }, { 190, 402 }, { 191, 162 }, { 192, 226 }, { 193, 234 }, { 194, 244 }, { 195, 251 }, { 196, 225 }, { 197, 233 }, { 198, 243 }, { 199, 250 }, { 200, 224 }, { 201, 232 }, { 202, 242 }, { 203, 249 }, { 204, 228 }, { 205, 235 }, { 206, 246 }, { 207, 252 }, { 208, 197 }, { 209, 238 }, { 210, 216 }, { 211, 198 }, { 212, 229 }, { 213, 237 }, { 214, 248 }, { 215, 230 }, { 216, 196 }, { 217, 236 }, { 218, 214 }, { 219, 220 }, { 220, 201 }, { 221, 239 }, { 222, 223 }, { 223, 212 }, { 224, 193 }, { 225, 195 }, { 226, 227 }, { 227, 208 }, { 228, 240 }, { 229, 205 }, { 230, 204 }, { 231, 211 }, { 232, 210 }, { 233, 213 }, { 234, 245 }, { 235, 352 }, { 236, 353 }, { 237, 218 }, { 238, 376 }, { 239, 255 }, { 240, 222 }, { 241, 254 }, { 242, 183 }, { 243, 181 }, { 244, 182 }, { 245, 190 }, { 246, 173 }, { 247, 188 }, { 248, 189 }, { 249, 170 }, { 250, 186 }, { 251, 171 }, { 252, 9632 }, { 253, 187 }, { 254, 177 }, { 255, 255 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 374 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t iso646[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 128 }, { 129, 129 }, { 130, 130 }, { 131, 131 }, { 132, 132 }, { 133, 133 }, { 134, 134 }, { 135, 135 }, { 136, 136 }, { 137, 137 }, { 138, 138 }, { 139, 139 }, { 140, 140 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 144 }, { 145, 145 }, { 146, 146 }, { 147, 147 }, { 148, 148 }, { 149, 149 }, { 150, 150 }, { 151, 151 }, { 152, 152 }, { 153, 153 }, { 154, 154 }, { 155, 155 }, { 156, 156 }, { 157, 157 }, { 158, 158 }, { 159, 159 }, { 160, 160 }, { 161, 161 }, { 162, 162 }, { 163, 163 }, { 164, 164 }, { 165, 165 }, { 166, 166 }, { 167, 167 }, { 168, 168 }, { 169, 169 }, { 170, 170 }, { 171, 171 }, { 172, 172 }, { 173, 173 }, { 174, 174 }, { 175, 175 }, { 176, 176 }, { 177, 177 }, { 178, 178 }, { 179, 179 }, { 180, 180 }, { 181, 181 }, { 182, 182 }, { 183, 183 }, { 184, 184 }, { 185, 185 }, { 186, 186 }, { 187, 187 }, { 188, 188 }, { 189, 189 }, { 190, 190 }, { 191, 191 }, { 192, 192 }, { 193, 193 }, { 194, 194 }, { 195, 195 }, { 196, 196 }, { 197, 197 }, { 198, 198 }, { 199, 199 }, { 200, 200 }, { 201, 201 }, { 202, 202 }, { 203, 203 }, { 204, 204 }, { 205, 205 }, { 206, 206 }, { 207, 207 }, { 208, 208 }, { 209, 209 }, { 210, 210 }, { 211, 211 }, { 212, 212 }, { 213, 213 }, { 214, 214 }, { 215, 215 }, { 216, 216 }, { 217, 217 }, { 218, 218 }, { 219, 219 }, { 220, 220 }, { 221, 221 }, { 222, 222 }, { 223, 223 }, { 224, 224 }, { 225, 225 }, { 226, 226 }, { 227, 227 }, { 228, 228 }, { 229, 229 }, { 230, 230 }, { 231, 231 }, { 232, 232 }, { 233, 233 }, { 234, 234 }, { 235, 235 }, { 236, 236 }, { 237, 237 }, { 238, 238 }, { 239, 239 }, { 240, 240 }, { 241, 241 }, { 242, 242 }, { 243, 243 }, { 244, 244 }, { 245, 245 }, { 246, 246 }, { 247, 247 }, { 248, 248 }, { 249, 249 }, { 250, 250 }, { 251, 251 }, { 252, 252 }, { 253, 253 }, { 254, 254 }, { 255, 255 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 374 }, { 89, 376 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t iso646_irv[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 128 }, { 129, 129 }, { 130, 130 }, { 131, 131 }, { 132, 132 }, { 133, 133 }, { 134, 134 }, { 135, 135 }, { 136, 136 }, { 137, 137 }, { 138, 138 }, { 139, 139 }, { 140, 140 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 144 }, { 145, 145 }, { 146, 146 }, { 147, 147 }, { 148, 148 }, { 149, 149 }, { 150, 150 }, { 151, 151 }, { 152, 152 }, { 153, 153 }, { 154, 154 }, { 155, 155 }, { 156, 156 }, { 157, 157 }, { 158, 158 }, { 159, 159 }, { 160, 160 }, { 161, 161 }, { 162, 162 }, { 163, 163 }, { 164, 164 }, { 165, 165 }, { 166, 166 }, { 167, 167 }, { 168, 168 }, { 169, 169 }, { 170, 170 }, { 171, 171 }, { 172, 172 }, { 173, 173 }, { 174, 174 }, { 175, 175 }, { 176, 176 }, { 177, 177 }, { 178, 178 }, { 179, 179 }, { 180, 180 }, { 181, 181 }, { 182, 182 }, { 183, 183 }, { 184, 184 }, { 185, 185 }, { 186, 186 }, { 187, 187 }, { 188, 188 }, { 189, 189 }, { 190, 190 }, { 191, 191 }, { 192, 192 }, { 193, 193 }, { 194, 194 }, { 195, 195 }, { 196, 196 }, { 197, 197 }, { 198, 198 }, { 199, 199 }, { 200, 200 }, { 201, 201 }, { 202, 202 }, { 203, 203 }, { 204, 204 }, { 205, 205 }, { 206, 206 }, { 207, 207 }, { 208, 208 }, { 209, 209 }, { 210, 210 }, { 211, 211 }, { 212, 212 }, { 213, 213 }, { 214, 214 }, { 215, 215 }, { 216, 216 }, { 217, 217 }, { 218, 218 }, { 219, 219 }, { 220, 220 }, { 221, 221 }, { 222, 222 }, { 223, 223 }, { 224, 224 }, { 225, 225 }, { 226, 226 }, { 227, 227 }, { 228, 228 }, { 229, 229 }, { 230, 230 }, { 231, 231 }, { 232, 232 }, { 233, 233 }, { 234, 234 }, { 235, 235 }, { 236, 236 }, { 237, 237 }, { 238, 238 }, { 239, 239 }, { 240, 240 }, { 241, 241 }, { 242, 242 }, { 243, 243 }, { 244, 244 }, { 245, 245 }, { 246, 246 }, { 247, 247 }, { 248, 248 }, { 249, 249 }, { 250, 250 }, { 251, 251 }, { 252, 252 }, { 253, 253 }, { 254, 254 }, { 255, 255 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 374 }, { 89, 376 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t iso646_ca[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 224 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 226 }, { 92, 231 }, { 93, 234 }, { 94, 238 }, { 95, 95 }, { 96, 244 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 233 }, { 124, 249 }, { 125, 232 }, { 126, 251 }, { 127, 127 }, { 128, 128 }, { 129, 129 }, { 130, 130 }, { 131, 131 }, { 132, 132 }, { 133, 133 }, { 134, 134 }, { 135, 135 }, { 136, 136 }, { 137, 137 }, { 138, 138 }, { 139, 139 }, { 140, 140 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 144 }, { 145, 145 }, { 146, 146 }, { 147, 147 }, { 148, 148 }, { 149, 149 }, { 150, 150 }, { 151, 151 }, { 152, 152 }, { 153, 153 }, { 154, 154 }, { 155, 155 }, { 156, 156 }, { 157, 157 }, { 158, 158 }, { 159, 159 }, { 160, 160 }, { 161, 161 }, { 162, 162 }, { 163, 163 }, { 164, 164 }, { 165, 165 }, { 166, 166 }, { 167, 167 }, { 168, 168 }, { 169, 169 }, { 170, 170 }, { 171, 171 }, { 172, 172 }, { 173, 173 }, { 174, 174 }, { 175, 175 }, { 176, 176 }, { 177, 177 }, { 178, 178 }, { 179, 179 }, { 180, 180 }, { 181, 181 }, { 182, 182 }, { 183, 183 }, { 184, 184 }, { 185, 185 }, { 186, 186 }, { 187, 187 }, { 188, 188 }, { 189, 189 }, { 190, 190 }, { 191, 191 }, { 192, 192 }, { 193, 193 }, { 194, 194 }, { 195, 195 }, { 196, 196 }, { 197, 197 }, { 198, 198 }, { 199, 199 }, { 200, 200 }, { 201, 201 }, { 202, 202 }, { 203, 203 }, { 204, 204 }, { 205, 205 }, { 206, 206 }, { 207, 207 }, { 208, 208 }, { 209, 209 }, { 210, 210 }, { 211, 211 }, { 212, 212 }, { 213, 213 }, { 214, 214 }, { 215, 215 }, { 216, 216 }, { 217, 217 }, { 218, 218 }, { 219, 219 }, { 220, 220 }, { 221, 221 }, { 222, 222 }, { 223, 223 }, { 224, 224 }, { 225, 225 }, { 226, 226 }, { 227, 227 }, { 228, 228 }, { 229, 229 }, { 230, 230 }, { 231, 231 }, { 232, 232 }, { 233, 233 }, { 234, 234 }, { 235, 235 }, { 236, 236 }, { 237, 237 }, { 238, 238 }, { 239, 239 }, { 240, 240 }, { 241, 241 }, { 242, 242 }, { 243, 243 }, { 244, 244 }, { 245, 245 }, { 246, 246 }, { 247, 247 }, { 248, 248 }, { 249, 249 }, { 250, 250 }, { 251, 251 }, { 252, 252 }, { 253, 253 }, { 254, 254 }, { 255, 255 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 374 }, { 89, 376 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t iso646_ch[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 249 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 224 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 233 }, { 92, 231 }, { 93, 234 }, { 94, 238 }, { 95, 232 }, { 96, 244 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 228 }, { 124, 246 }, { 125, 252 }, { 126, 251 }, { 127, 127 }, { 128, 128 }, { 129, 129 }, { 130, 130 }, { 131, 131 }, { 132, 132 }, { 133, 133 }, { 134, 134 }, { 135, 135 }, { 136, 136 }, { 137, 137 }, { 138, 138 }, { 139, 139 }, { 140, 140 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 144 }, { 145, 145 }, { 146, 146 }, { 147, 147 }, { 148, 148 }, { 149, 149 }, { 150, 150 }, { 151, 151 }, { 152, 152 }, { 153, 153 }, { 154, 154 }, { 155, 155 }, { 156, 156 }, { 157, 157 }, { 158, 158 }, { 159, 159 }, { 160, 160 }, { 161, 161 }, { 162, 162 }, { 163, 163 }, { 164, 164 }, { 165, 165 }, { 166, 166 }, { 167, 167 }, { 168, 168 }, { 169, 169 }, { 170, 170 }, { 171, 171 }, { 172, 172 }, { 173, 173 }, { 174, 174 }, { 175, 175 }, { 176, 176 }, { 177, 177 }, { 178, 178 }, { 179, 179 }, { 180, 180 }, { 181, 181 }, { 182, 182 }, { 183, 183 }, { 184, 184 }, { 185, 185 }, { 186, 186 }, { 187, 187 }, { 188, 188 }, { 189, 189 }, { 190, 190 }, { 191, 191 }, { 192, 192 }, { 193, 193 }, { 194, 194 }, { 195, 195 }, { 196, 196 }, { 197, 197 }, { 198, 198 }, { 199, 199 }, { 200, 200 }, { 201, 201 }, { 202, 202 }, { 203, 203 }, { 204, 204 }, { 205, 205 }, { 206, 206 }, { 207, 207 }, { 208, 208 }, { 209, 209 }, { 210, 210 }, { 211, 211 }, { 212, 212 }, { 213, 213 }, { 214, 214 }, { 215, 215 }, { 216, 216 }, { 217, 217 }, { 218, 218 }, { 219, 219 }, { 220, 220 }, { 221, 221 }, { 222, 222 }, { 223, 223 }, { 224, 224 }, { 225, 225 }, { 226, 226 }, { 227, 227 }, { 228, 228 }, { 229, 229 }, { 230, 230 }, { 231, 231 }, { 232, 232 }, { 233, 233 }, { 234, 234 }, { 235, 235 }, { 236, 236 }, { 237, 237 }, { 238, 238 }, { 239, 239 }, { 240, 240 }, { 241, 241 }, { 242, 242 }, { 243, 243 }, { 244, 244 }, { 245, 245 }, { 246, 246 }, { 247, 247 }, { 248, 248 }, { 249, 249 }, { 250, 250 }, { 251, 251 }, { 252, 252 }, { 253, 253 }, { 254, 254 }, { 255, 255 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 374 }, { 89, 376 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t iso646_de[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 167 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 196 }, { 92, 214 }, { 93, 220 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 228 }, { 124, 246 }, { 125, 252 }, { 126, 223 }, { 127, 127 }, { 128, 128 }, { 129, 129 }, { 130, 130 }, { 131, 131 }, { 132, 132 }, { 133, 133 }, { 134, 134 }, { 135, 135 }, { 136, 136 }, { 137, 137 }, { 138, 138 }, { 139, 139 }, { 140, 140 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 144 }, { 145, 145 }, { 146, 146 }, { 147, 147 }, { 148, 148 }, { 149, 149 }, { 150, 150 }, { 151, 151 }, { 152, 152 }, { 153, 153 }, { 154, 154 }, { 155, 155 }, { 156, 156 }, { 157, 157 }, { 158, 158 }, { 159, 159 }, { 160, 160 }, { 161, 161 }, { 162, 162 }, { 163, 163 }, { 164, 164 }, { 165, 165 }, { 166, 166 }, { 167, 167 }, { 168, 168 }, { 169, 169 }, { 170, 170 }, { 171, 171 }, { 172, 172 }, { 173, 173 }, { 174, 174 }, { 175, 175 }, { 176, 176 }, { 177, 177 }, { 178, 178 }, { 179, 179 }, { 180, 180 }, { 181, 181 }, { 182, 182 }, { 183, 183 }, { 184, 184 }, { 185, 185 }, { 186, 186 }, { 187, 187 }, { 188, 188 }, { 189, 189 }, { 190, 190 }, { 191, 191 }, { 192, 192 }, { 193, 193 }, { 194, 194 }, { 195, 195 }, { 196, 196 }, { 197, 197 }, { 198, 198 }, { 199, 199 }, { 200, 200 }, { 201, 201 }, { 202, 202 }, { 203, 203 }, { 204, 204 }, { 205, 205 }, { 206, 206 }, { 207, 207 }, { 208, 208 }, { 209, 209 }, { 210, 210 }, { 211, 211 }, { 212, 212 }, { 213, 213 }, { 214, 214 }, { 215, 215 }, { 216, 216 }, { 217, 217 }, { 218, 218 }, { 219, 219 }, { 220, 220 }, { 221, 221 }, { 222, 222 }, { 223, 223 }, { 224, 224 }, { 225, 225 }, { 226, 226 }, { 227, 227 }, { 228, 228 }, { 229, 229 }, { 230, 230 }, { 231, 231 }, { 232, 232 }, { 233, 233 }, { 234, 234 }, { 235, 235 }, { 236, 236 }, { 237, 237 }, { 238, 238 }, { 239, 239 }, { 240, 240 }, { 241, 241 }, { 242, 242 }, { 243, 243 }, { 244, 244 }, { 245, 245 }, { 246, 246 }, { 247, 247 }, { 248, 248 }, { 249, 249 }, { 250, 250 }, { 251, 251 }, { 252, 252 }, { 253, 253 }, { 254, 254 }, { 255, 255 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 374 }, { 89, 376 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t iso646_es[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 163 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 167 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 161 }, { 92, 209 }, { 93, 191 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 176 }, { 124, 241 }, { 125, 231 }, { 126, 126 }, { 127, 127 }, { 128, 128 }, { 129, 129 }, { 130, 130 }, { 131, 131 }, { 132, 132 }, { 133, 133 }, { 134, 134 }, { 135, 135 }, { 136, 136 }, { 137, 137 }, { 138, 138 }, { 139, 139 }, { 140, 140 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 144 }, { 145, 145 }, { 146, 146 }, { 147, 147 }, { 148, 148 }, { 149, 149 }, { 150, 150 }, { 151, 151 }, { 152, 152 }, { 153, 153 }, { 154, 154 }, { 155, 155 }, { 156, 156 }, { 157, 157 }, { 158, 158 }, { 159, 159 }, { 160, 160 }, { 161, 161 }, { 162, 162 }, { 163, 163 }, { 164, 164 }, { 165, 165 }, { 166, 166 }, { 167, 167 }, { 168, 168 }, { 169, 169 }, { 170, 170 }, { 171, 171 }, { 172, 172 }, { 173, 173 }, { 174, 174 }, { 175, 175 }, { 176, 176 }, { 177, 177 }, { 178, 178 }, { 179, 179 }, { 180, 180 }, { 181, 181 }, { 182, 182 }, { 183, 183 }, { 184, 184 }, { 185, 185 }, { 186, 186 }, { 187, 187 }, { 188, 188 }, { 189, 189 }, { 190, 190 }, { 191, 191 }, { 192, 192 }, { 193, 193 }, { 194, 194 }, { 195, 195 }, { 196, 196 }, { 197, 197 }, { 198, 198 }, { 199, 199 }, { 200, 200 }, { 201, 201 }, { 202, 202 }, { 203, 203 }, { 204, 204 }, { 205, 205 }, { 206, 206 }, { 207, 207 }, { 208, 208 }, { 209, 209 }, { 210, 210 }, { 211, 211 }, { 212, 212 }, { 213, 213 }, { 214, 214 }, { 215, 215 }, { 216, 216 }, { 217, 217 }, { 218, 218 }, { 219, 219 }, { 220, 220 }, { 221, 221 }, { 222, 222 }, { 223, 223 }, { 224, 224 }, { 225, 225 }, { 226, 226 }, { 227, 227 }, { 228, 228 }, { 229, 229 }, { 230, 230 }, { 231, 231 }, { 232, 232 }, { 233, 233 }, { 234, 234 }, { 235, 235 }, { 236, 236 }, { 237, 237 }, { 238, 238 }, { 239, 239 }, { 240, 240 }, { 241, 241 }, { 242, 242 }, { 243, 243 }, { 244, 244 }, { 245, 245 }, { 246, 246 }, { 247, 247 }, { 248, 248 }, { 249, 249 }, { 250, 250 }, { 251, 251 }, { 252, 252 }, { 253, 253 }, { 254, 254 }, { 255, 255 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 374 }, { 89, 376 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t iso646_fi[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 196 }, { 92, 214 }, { 93, 197 }, { 94, 220 }, { 95, 95 }, { 96, 233 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 228 }, { 124, 246 }, { 125, 229 }, { 126, 252 }, { 127, 127 }, { 128, 128 }, { 129, 129 }, { 130, 130 }, { 131, 131 }, { 132, 132 }, { 133, 133 }, { 134, 134 }, { 135, 135 }, { 136, 136 }, { 137, 137 }, { 138, 138 }, { 139, 139 }, { 140, 140 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 144 }, { 145, 145 }, { 146, 146 }, { 147, 147 }, { 148, 148 }, { 149, 149 }, { 150, 150 }, { 151, 151 }, { 152, 152 }, { 153, 153 }, { 154, 154 }, { 155, 155 }, { 156, 156 }, { 157, 157 }, { 158, 158 }, { 159, 159 }, { 160, 160 }, { 161, 161 }, { 162, 162 }, { 163, 163 }, { 164, 164 }, { 165, 165 }, { 166, 166 }, { 167, 167 }, { 168, 168 }, { 169, 169 }, { 170, 170 }, { 171, 171 }, { 172, 172 }, { 173, 173 }, { 174, 174 }, { 175, 175 }, { 176, 176 }, { 177, 177 }, { 178, 178 }, { 179, 179 }, { 180, 180 }, { 181, 181 }, { 182, 182 }, { 183, 183 }, { 184, 184 }, { 185, 185 }, { 186, 186 }, { 187, 187 }, { 188, 188 }, { 189, 189 }, { 190, 190 }, { 191, 191 }, { 192, 192 }, { 193, 193 }, { 194, 194 }, { 195, 195 }, { 196, 196 }, { 197, 197 }, { 198, 198 }, { 199, 199 }, { 200, 200 }, { 201, 201 }, { 202, 202 }, { 203, 203 }, { 204, 204 }, { 205, 205 }, { 206, 206 }, { 207, 207 }, { 208, 208 }, { 209, 209 }, { 210, 210 }, { 211, 211 }, { 212, 212 }, { 213, 213 }, { 214, 214 }, { 215, 215 }, { 216, 216 }, { 217, 217 }, { 218, 218 }, { 219, 219 }, { 220, 220 }, { 221, 221 }, { 222, 222 }, { 223, 223 }, { 224, 224 }, { 225, 225 }, { 226, 226 }, { 227, 227 }, { 228, 228 }, { 229, 229 }, { 230, 230 }, { 231, 231 }, { 232, 232 }, { 233, 233 }, { 234, 234 }, { 235, 235 }, { 236, 236 }, { 237, 237 }, { 238, 238 }, { 239, 239 }, { 240, 240 }, { 241, 241 }, { 242, 242 }, { 243, 243 }, { 244, 244 }, { 245, 245 }, { 246, 246 }, { 247, 247 }, { 248, 248 }, { 249, 249 }, { 250, 250 }, { 251, 251 }, { 252, 252 }, { 253, 253 }, { 254, 254 }, { 255, 255 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 374 }, { 89, 376 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t iso646_fr[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 163 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 224 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 176 }, { 92, 231 }, { 93, 167 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 233 }, { 124, 249 }, { 125, 232 }, { 126, 168 }, { 127, 127 }, { 128, 128 }, { 129, 129 }, { 130, 130 }, { 131, 131 }, { 132, 132 }, { 133, 133 }, { 134, 134 }, { 135, 135 }, { 136, 136 }, { 137, 137 }, { 138, 138 }, { 139, 139 }, { 140, 140 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 144 }, { 145, 145 }, { 146, 146 }, { 147, 147 }, { 148, 148 }, { 149, 149 }, { 150, 150 }, { 151, 151 }, { 152, 152 }, { 153, 153 }, { 154, 154 }, { 155, 155 }, { 156, 156 }, { 157, 157 }, { 158, 158 }, { 159, 159 }, { 160, 160 }, { 161, 161 }, { 162, 162 }, { 163, 163 }, { 164, 164 }, { 165, 165 }, { 166, 166 }, { 167, 167 }, { 168, 168 }, { 169, 169 }, { 170, 170 }, { 171, 171 }, { 172, 172 }, { 173, 173 }, { 174, 174 }, { 175, 175 }, { 176, 176 }, { 177, 177 }, { 178, 178 }, { 179, 179 }, { 180, 180 }, { 181, 181 }, { 182, 182 }, { 183, 183 }, { 184, 184 }, { 185, 185 }, { 186, 186 }, { 187, 187 }, { 188, 188 }, { 189, 189 }, { 190, 190 }, { 191, 191 }, { 192, 192 }, { 193, 193 }, { 194, 194 }, { 195, 195 }, { 196, 196 }, { 197, 197 }, { 198, 198 }, { 199, 199 }, { 200, 200 }, { 201, 201 }, { 202, 202 }, { 203, 203 }, { 204, 204 }, { 205, 205 }, { 206, 206 }, { 207, 207 }, { 208, 208 }, { 209, 209 }, { 210, 210 }, { 211, 211 }, { 212, 212 }, { 213, 213 }, { 214, 214 }, { 215, 215 }, { 216, 216 }, { 217, 217 }, { 218, 218 }, { 219, 219 }, { 220, 220 }, { 221, 221 }, { 222, 222 }, { 223, 223 }, { 224, 224 }, { 225, 225 }, { 226, 226 }, { 227, 227 }, { 228, 228 }, { 229, 229 }, { 230, 230 }, { 231, 231 }, { 232, 232 }, { 233, 233 }, { 234, 234 }, { 235, 235 }, { 236, 236 }, { 237, 237 }, { 238, 238 }, { 239, 239 }, { 240, 240 }, { 241, 241 }, { 242, 242 }, { 243, 243 }, { 244, 244 }, { 245, 245 }, { 246, 246 }, { 247, 247 }, { 248, 248 }, { 249, 249 }, { 250, 250 }, { 251, 251 }, { 252, 252 }, { 253, 253 }, { 254, 254 }, { 255, 255 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 374 }, { 89, 376 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t iso646_gb[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 163 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 128 }, { 129, 129 }, { 130, 130 }, { 131, 131 }, { 132, 132 }, { 133, 133 }, { 134, 134 }, { 135, 135 }, { 136, 136 }, { 137, 137 }, { 138, 138 }, { 139, 139 }, { 140, 140 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 144 }, { 145, 145 }, { 146, 146 }, { 147, 147 }, { 148, 148 }, { 149, 149 }, { 150, 150 }, { 151, 151 }, { 152, 152 }, { 153, 153 }, { 154, 154 }, { 155, 155 }, { 156, 156 }, { 157, 157 }, { 158, 158 }, { 159, 159 }, { 160, 160 }, { 161, 161 }, { 162, 162 }, { 163, 163 }, { 164, 164 }, { 165, 165 }, { 166, 166 }, { 167, 167 }, { 168, 168 }, { 169, 169 }, { 170, 170 }, { 171, 171 }, { 172, 172 }, { 173, 173 }, { 174, 174 }, { 175, 175 }, { 176, 176 }, { 177, 177 }, { 178, 178 }, { 179, 179 }, { 180, 180 }, { 181, 181 }, { 182, 182 }, { 183, 183 }, { 184, 184 }, { 185, 185 }, { 186, 186 }, { 187, 187 }, { 188, 188 }, { 189, 189 }, { 190, 190 }, { 191, 191 }, { 192, 192 }, { 193, 193 }, { 194, 194 }, { 195, 195 }, { 196, 196 }, { 197, 197 }, { 198, 198 }, { 199, 199 }, { 200, 200 }, { 201, 201 }, { 202, 202 }, { 203, 203 }, { 204, 204 }, { 205, 205 }, { 206, 206 }, { 207, 207 }, { 208, 208 }, { 209, 209 }, { 210, 210 }, { 211, 211 }, { 212, 212 }, { 213, 213 }, { 214, 214 }, { 215, 215 }, { 216, 216 }, { 217, 217 }, { 218, 218 }, { 219, 219 }, { 220, 220 }, { 221, 221 }, { 222, 222 }, { 223, 223 }, { 224, 224 }, { 225, 225 }, { 226, 226 }, { 227, 227 }, { 228, 228 }, { 229, 229 }, { 230, 230 }, { 231, 231 }, { 232, 232 }, { 233, 233 }, { 234, 234 }, { 235, 235 }, { 236, 236 }, { 237, 237 }, { 238, 238 }, { 239, 239 }, { 240, 240 }, { 241, 241 }, { 242, 242 }, { 243, 243 }, { 244, 244 }, { 245, 245 }, { 246, 246 }, { 247, 247 }, { 248, 248 }, { 249, 249 }, { 250, 250 }, { 251, 251 }, { 252, 252 }, { 253, 253 }, { 254, 254 }, { 255, 255 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 374 }, { 89, 376 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t iso646_it[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 163 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 167 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 176 }, { 92, 231 }, { 93, 233 }, { 94, 94 }, { 95, 95 }, { 96, 249 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 224 }, { 124, 242 }, { 125, 232 }, { 126, 236 }, { 127, 127 }, { 128, 128 }, { 129, 129 }, { 130, 130 }, { 131, 131 }, { 132, 132 }, { 133, 133 }, { 134, 134 }, { 135, 135 }, { 136, 136 }, { 137, 137 }, { 138, 138 }, { 139, 139 }, { 140, 140 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 144 }, { 145, 145 }, { 146, 146 }, { 147, 147 }, { 148, 148 }, { 149, 149 }, { 150, 150 }, { 151, 151 }, { 152, 152 }, { 153, 153 }, { 154, 154 }, { 155, 155 }, { 156, 156 }, { 157, 157 }, { 158, 158 }, { 159, 159 }, { 160, 160 }, { 161, 161 }, { 162, 162 }, { 163, 163 }, { 164, 164 }, { 165, 165 }, { 166, 166 }, { 167, 167 }, { 168, 168 }, { 169, 169 }, { 170, 170 }, { 171, 171 }, { 172, 172 }, { 173, 173 }, { 174, 174 }, { 175, 175 }, { 176, 176 }, { 177, 177 }, { 178, 178 }, { 179, 179 }, { 180, 180 }, { 181, 181 }, { 182, 182 }, { 183, 183 }, { 184, 184 }, { 185, 185 }, { 186, 186 }, { 187, 187 }, { 188, 188 }, { 189, 189 }, { 190, 190 }, { 191, 191 }, { 192, 192 }, { 193, 193 }, { 194, 194 }, { 195, 195 }, { 196, 196 }, { 197, 197 }, { 198, 198 }, { 199, 199 }, { 200, 200 }, { 201, 201 }, { 202, 202 }, { 203, 203 }, { 204, 204 }, { 205, 205 }, { 206, 206 }, { 207, 207 }, { 208, 208 }, { 209, 209 }, { 210, 210 }, { 211, 211 }, { 212, 212 }, { 213, 213 }, { 214, 214 }, { 215, 215 }, { 216, 216 }, { 217, 217 }, { 218, 218 }, { 219, 219 }, { 220, 220 }, { 221, 221 }, { 222, 222 }, { 223, 223 }, { 224, 224 }, { 225, 225 }, { 226, 226 }, { 227, 227 }, { 228, 228 }, { 229, 229 }, { 230, 230 }, { 231, 231 }, { 232, 232 }, { 233, 233 }, { 234, 234 }, { 235, 235 }, { 236, 236 }, { 237, 237 }, { 238, 238 }, { 239, 239 }, { 240, 240 }, { 241, 241 }, { 242, 242 }, { 243, 243 }, { 244, 244 }, { 245, 245 }, { 246, 246 }, { 247, 247 }, { 248, 248 }, { 249, 249 }, { 250, 250 }, { 251, 251 }, { 252, 252 }, { 253, 253 }, { 254, 254 }, { 255, 255 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 374 }, { 89, 376 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t iso646_nl[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 163 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 190 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 255 }, { 92, 189 }, { 93, 124 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 168 }, { 124, 402 }, { 125, 188 }, { 126, 180 }, { 127, 127 }, { 128, 128 }, { 129, 129 }, { 130, 130 }, { 131, 131 }, { 132, 132 }, { 133, 133 }, { 134, 134 }, { 135, 135 }, { 136, 136 }, { 137, 137 }, { 138, 138 }, { 139, 139 }, { 140, 140 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 144 }, { 145, 145 }, { 146, 146 }, { 147, 147 }, { 148, 148 }, { 149, 149 }, { 150, 150 }, { 151, 151 }, { 152, 152 }, { 153, 153 }, { 154, 154 }, { 155, 155 }, { 156, 156 }, { 157, 157 }, { 158, 158 }, { 159, 159 }, { 160, 160 }, { 161, 161 }, { 162, 162 }, { 163, 163 }, { 164, 164 }, { 165, 165 }, { 166, 166 }, { 167, 167 }, { 168, 168 }, { 169, 169 }, { 170, 170 }, { 171, 171 }, { 172, 172 }, { 173, 173 }, { 174, 174 }, { 175, 175 }, { 176, 176 }, { 177, 177 }, { 178, 178 }, { 179, 179 }, { 180, 180 }, { 181, 181 }, { 182, 182 }, { 183, 183 }, { 184, 184 }, { 185, 185 }, { 186, 186 }, { 187, 187 }, { 188, 188 }, { 189, 189 }, { 190, 190 }, { 191, 191 }, { 192, 192 }, { 193, 193 }, { 194, 194 }, { 195, 195 }, { 196, 196 }, { 197, 197 }, { 198, 198 }, { 199, 199 }, { 200, 200 }, { 201, 201 }, { 202, 202 }, { 203, 203 }, { 204, 204 }, { 205, 205 }, { 206, 206 }, { 207, 207 }, { 208, 208 }, { 209, 209 }, { 210, 210 }, { 211, 211 }, { 212, 212 }, { 213, 213 }, { 214, 214 }, { 215, 215 }, { 216, 216 }, { 217, 217 }, { 218, 218 }, { 219, 219 }, { 220, 220 }, { 221, 221 }, { 222, 222 }, { 223, 223 }, { 224, 224 }, { 225, 225 }, { 226, 226 }, { 227, 227 }, { 228, 228 }, { 229, 229 }, { 230, 230 }, { 231, 231 }, { 232, 232 }, { 233, 233 }, { 234, 234 }, { 235, 235 }, { 236, 236 }, { 237, 237 }, { 238, 238 }, { 239, 239 }, { 240, 240 }, { 241, 241 }, { 242, 242 }, { 243, 243 }, { 244, 244 }, { 245, 245 }, { 246, 246 }, { 247, 247 }, { 248, 248 }, { 249, 249 }, { 250, 250 }, { 251, 251 }, { 252, 252 }, { 253, 253 }, { 254, 254 }, { 255, 255 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 374 }, { 89, 376 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t iso646_no[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 198 }, { 92, 216 }, { 93, 197 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 230 }, { 124, 248 }, { 125, 229 }, { 126, 126 }, { 127, 127 }, { 128, 128 }, { 129, 129 }, { 130, 130 }, { 131, 131 }, { 132, 132 }, { 133, 133 }, { 134, 134 }, { 135, 135 }, { 136, 136 }, { 137, 137 }, { 138, 138 }, { 139, 139 }, { 140, 140 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 144 }, { 145, 145 }, { 146, 146 }, { 147, 147 }, { 148, 148 }, { 149, 149 }, { 150, 150 }, { 151, 151 }, { 152, 152 }, { 153, 153 }, { 154, 154 }, { 155, 155 }, { 156, 156 }, { 157, 157 }, { 158, 158 }, { 159, 159 }, { 160, 160 }, { 161, 161 }, { 162, 162 }, { 163, 163 }, { 164, 164 }, { 165, 165 }, { 166, 166 }, { 167, 167 }, { 168, 168 }, { 169, 169 }, { 170, 170 }, { 171, 171 }, { 172, 172 }, { 173, 173 }, { 174, 174 }, { 175, 175 }, { 176, 176 }, { 177, 177 }, { 178, 178 }, { 179, 179 }, { 180, 180 }, { 181, 181 }, { 182, 182 }, { 183, 183 }, { 184, 184 }, { 185, 185 }, { 186, 186 }, { 187, 187 }, { 188, 188 }, { 189, 189 }, { 190, 190 }, { 191, 191 }, { 192, 192 }, { 193, 193 }, { 194, 194 }, { 195, 195 }, { 196, 196 }, { 197, 197 }, { 198, 198 }, { 199, 199 }, { 200, 200 }, { 201, 201 }, { 202, 202 }, { 203, 203 }, { 204, 204 }, { 205, 205 }, { 206, 206 }, { 207, 207 }, { 208, 208 }, { 209, 209 }, { 210, 210 }, { 211, 211 }, { 212, 212 }, { 213, 213 }, { 214, 214 }, { 215, 215 }, { 216, 216 }, { 217, 217 }, { 218, 218 }, { 219, 219 }, { 220, 220 }, { 221, 221 }, { 222, 222 }, { 223, 223 }, { 224, 224 }, { 225, 225 }, { 226, 226 }, { 227, 227 }, { 228, 228 }, { 229, 229 }, { 230, 230 }, { 231, 231 }, { 232, 232 }, { 233, 233 }, { 234, 234 }, { 235, 235 }, { 236, 236 }, { 237, 237 }, { 238, 238 }, { 239, 239 }, { 240, 240 }, { 241, 241 }, { 242, 242 }, { 243, 243 }, { 244, 244 }, { 245, 245 }, { 246, 246 }, { 247, 247 }, { 248, 248 }, { 249, 249 }, { 250, 250 }, { 251, 251 }, { 252, 252 }, { 253, 253 }, { 254, 254 }, { 255, 255 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 374 }, { 89, 376 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t iso646_pt[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 195 }, { 92, 199 }, { 93, 213 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 227 }, { 124, 231 }, { 125, 245 }, { 126, 126 }, { 127, 127 }, { 128, 128 }, { 129, 129 }, { 130, 130 }, { 131, 131 }, { 132, 132 }, { 133, 133 }, { 134, 134 }, { 135, 135 }, { 136, 136 }, { 137, 137 }, { 138, 138 }, { 139, 139 }, { 140, 140 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 144 }, { 145, 145 }, { 146, 146 }, { 147, 147 }, { 148, 148 }, { 149, 149 }, { 150, 150 }, { 151, 151 }, { 152, 152 }, { 153, 153 }, { 154, 154 }, { 155, 155 }, { 156, 156 }, { 157, 157 }, { 158, 158 }, { 159, 159 }, { 160, 160 }, { 161, 161 }, { 162, 162 }, { 163, 163 }, { 164, 164 }, { 165, 165 }, { 166, 166 }, { 167, 167 }, { 168, 168 }, { 169, 169 }, { 170, 170 }, { 171, 171 }, { 172, 172 }, { 173, 173 }, { 174, 174 }, { 175, 175 }, { 176, 176 }, { 177, 177 }, { 178, 178 }, { 179, 179 }, { 180, 180 }, { 181, 181 }, { 182, 182 }, { 183, 183 }, { 184, 184 }, { 185, 185 }, { 186, 186 }, { 187, 187 }, { 188, 188 }, { 189, 189 }, { 190, 190 }, { 191, 191 }, { 192, 192 }, { 193, 193 }, { 194, 194 }, { 195, 195 }, { 196, 196 }, { 197, 197 }, { 198, 198 }, { 199, 199 }, { 200, 200 }, { 201, 201 }, { 202, 202 }, { 203, 203 }, { 204, 204 }, { 205, 205 }, { 206, 206 }, { 207, 207 }, { 208, 208 }, { 209, 209 }, { 210, 210 }, { 211, 211 }, { 212, 212 }, { 213, 213 }, { 214, 214 }, { 215, 215 }, { 216, 216 }, { 217, 217 }, { 218, 218 }, { 219, 219 }, { 220, 220 }, { 221, 221 }, { 222, 222 }, { 223, 223 }, { 224, 224 }, { 225, 225 }, { 226, 226 }, { 227, 227 }, { 228, 228 }, { 229, 229 }, { 230, 230 }, { 231, 231 }, { 232, 232 }, { 233, 233 }, { 234, 234 }, { 235, 235 }, { 236, 236 }, { 237, 237 }, { 238, 238 }, { 239, 239 }, { 240, 240 }, { 241, 241 }, { 242, 242 }, { 243, 243 }, { 244, 244 }, { 245, 245 }, { 246, 246 }, { 247, 247 }, { 248, 248 }, { 249, 249 }, { 250, 250 }, { 251, 251 }, { 252, 252 }, { 253, 253 }, { 254, 254 }, { 255, 255 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 374 }, { 89, 376 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t iso646_se[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 201 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 196 }, { 92, 214 }, { 93, 197 }, { 94, 220 }, { 95, 95 }, { 96, 233 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 228 }, { 124, 246 }, { 125, 229 }, { 126, 252 }, { 127, 127 }, { 128, 128 }, { 129, 129 }, { 130, 130 }, { 131, 131 }, { 132, 132 }, { 133, 133 }, { 134, 134 }, { 135, 135 }, { 136, 136 }, { 137, 137 }, { 138, 138 }, { 139, 139 }, { 140, 140 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 144 }, { 145, 145 }, { 146, 146 }, { 147, 147 }, { 148, 148 }, { 149, 149 }, { 150, 150 }, { 151, 151 }, { 152, 152 }, { 153, 153 }, { 154, 154 }, { 155, 155 }, { 156, 156 }, { 157, 157 }, { 158, 158 }, { 159, 159 }, { 160, 160 }, { 161, 161 }, { 162, 162 }, { 163, 163 }, { 164, 164 }, { 165, 165 }, { 166, 166 }, { 167, 167 }, { 168, 168 }, { 169, 169 }, { 170, 170 }, { 171, 171 }, { 172, 172 }, { 173, 173 }, { 174, 174 }, { 175, 175 }, { 176, 176 }, { 177, 177 }, { 178, 178 }, { 179, 179 }, { 180, 180 }, { 181, 181 }, { 182, 182 }, { 183, 183 }, { 184, 184 }, { 185, 185 }, { 186, 186 }, { 187, 187 }, { 188, 188 }, { 189, 189 }, { 190, 190 }, { 191, 191 }, { 192, 192 }, { 193, 193 }, { 194, 194 }, { 195, 195 }, { 196, 196 }, { 197, 197 }, { 198, 198 }, { 199, 199 }, { 200, 200 }, { 201, 201 }, { 202, 202 }, { 203, 203 }, { 204, 204 }, { 205, 205 }, { 206, 206 }, { 207, 207 }, { 208, 208 }, { 209, 209 }, { 210, 210 }, { 211, 211 }, { 212, 212 }, { 213, 213 }, { 214, 214 }, { 215, 215 }, { 216, 216 }, { 217, 217 }, { 218, 218 }, { 219, 219 }, { 220, 220 }, { 221, 221 }, { 222, 222 }, { 223, 223 }, { 224, 224 }, { 225, 225 }, { 226, 226 }, { 227, 227 }, { 228, 228 }, { 229, 229 }, { 230, 230 }, { 231, 231 }, { 232, 232 }, { 233, 233 }, { 234, 234 }, { 235, 235 }, { 236, 236 }, { 237, 237 }, { 238, 238 }, { 239, 239 }, { 240, 240 }, { 241, 241 }, { 242, 242 }, { 243, 243 }, { 244, 244 }, { 245, 245 }, { 246, 246 }, { 247, 247 }, { 248, 248 }, { 249, 249 }, { 250, 250 }, { 251, 251 }, { 252, 252 }, { 253, 253 }, { 254, 254 }, { 255, 255 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 374 }, { 89, 376 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t iso8859_1[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 128 }, { 129, 129 }, { 130, 130 }, { 131, 131 }, { 132, 132 }, { 133, 133 }, { 134, 134 }, { 135, 135 }, { 136, 136 }, { 137, 137 }, { 138, 138 }, { 139, 139 }, { 140, 140 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 144 }, { 145, 145 }, { 146, 146 }, { 147, 147 }, { 148, 148 }, { 149, 149 }, { 150, 150 }, { 151, 151 }, { 152, 152 }, { 153, 153 }, { 154, 154 }, { 155, 155 }, { 156, 156 }, { 157, 157 }, { 158, 158 }, { 159, 159 }, { 160, 160 }, { 161, 161 }, { 162, 162 }, { 163, 163 }, { 164, 164 }, { 165, 165 }, { 166, 166 }, { 167, 167 }, { 168, 168 }, { 169, 169 }, { 170, 170 }, { 171, 171 }, { 172, 172 }, { 173, 173 }, { 174, 174 }, { 175, 175 }, { 176, 176 }, { 177, 177 }, { 178, 178 }, { 179, 179 }, { 180, 180 }, { 181, 181 }, { 182, 182 }, { 183, 183 }, { 184, 184 }, { 185, 185 }, { 186, 186 }, { 187, 187 }, { 188, 188 }, { 189, 189 }, { 190, 190 }, { 191, 191 }, { 192, 192 }, { 193, 193 }, { 194, 194 }, { 195, 195 }, { 196, 196 }, { 197, 197 }, { 198, 198 }, { 199, 199 }, { 200, 200 }, { 201, 201 }, { 202, 202 }, { 203, 203 }, { 204, 204 }, { 205, 205 }, { 206, 206 }, { 207, 207 }, { 208, 208 }, { 209, 209 }, { 210, 210 }, { 211, 211 }, { 212, 212 }, { 213, 213 }, { 214, 214 }, { 215, 215 }, { 216, 216 }, { 217, 217 }, { 218, 218 }, { 219, 219 }, { 220, 220 }, { 221, 221 }, { 222, 222 }, { 223, 223 }, { 224, 224 }, { 225, 225 }, { 226, 226 }, { 227, 227 }, { 228, 228 }, { 229, 229 }, { 230, 230 }, { 231, 231 }, { 232, 232 }, { 233, 233 }, { 234, 234 }, { 235, 235 }, { 236, 236 }, { 237, 237 }, { 238, 238 }, { 239, 239 }, { 240, 240 }, { 241, 241 }, { 242, 242 }, { 243, 243 }, { 244, 244 }, { 245, 245 }, { 246, 246 }, { 247, 247 }, { 248, 248 }, { 249, 249 }, { 250, 250 }, { 251, 251 }, { 252, 252 }, { 253, 253 }, { 254, 254 }, { 255, 255 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 374 }, { 89, 376 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t iso8859_2[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 128 }, { 129, 129 }, { 130, 130 }, { 131, 131 }, { 132, 132 }, { 133, 133 }, { 134, 134 }, { 135, 135 }, { 136, 136 }, { 137, 137 }, { 138, 138 }, { 139, 139 }, { 140, 140 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 144 }, { 145, 145 }, { 146, 146 }, { 147, 147 }, { 148, 148 }, { 149, 149 }, { 150, 150 }, { 151, 151 }, { 152, 152 }, { 153, 153 }, { 154, 154 }, { 155, 155 }, { 156, 156 }, { 157, 157 }, { 158, 158 }, { 159, 159 }, { 160, 160 }, { 161, 260 }, { 162, 728 }, { 163, 321 }, { 164, 164 }, { 165, 317 }, { 166, 346 }, { 167, 167 }, { 168, 168 }, { 169, 352 }, { 170, 350 }, { 171, 356 }, { 172, 377 }, { 173, 173 }, { 174, 381 }, { 175, 379 }, { 176, 176 }, { 177, 261 }, { 178, 731 }, { 179, 322 }, { 180, 180 }, { 181, 318 }, { 182, 347 }, { 183, 711 }, { 184, 184 }, { 185, 353 }, { 186, 351 }, { 187, 357 }, { 188, 378 }, { 189, 733 }, { 190, 382 }, { 191, 380 }, { 192, 340 }, { 193, 193 }, { 194, 194 }, { 195, 258 }, { 196, 196 }, { 197, 313 }, { 198, 262 }, { 199, 199 }, { 200, 268 }, { 201, 201 }, { 202, 280 }, { 203, 203 }, { 204, 282 }, { 205, 205 }, { 206, 206 }, { 207, 270 }, { 208, 272 }, { 209, 323 }, { 210, 327 }, { 211, 211 }, { 212, 212 }, { 213, 336 }, { 214, 214 }, { 215, 215 }, { 216, 344 }, { 217, 366 }, { 218, 218 }, { 219, 368 }, { 220, 220 }, { 221, 221 }, { 222, 354 }, { 223, 223 }, { 224, 341 }, { 225, 225 }, { 226, 226 }, { 227, 259 }, { 228, 228 }, { 229, 314 }, { 230, 263 }, { 231, 231 }, { 232, 269 }, { 233, 233 }, { 234, 281 }, { 235, 235 }, { 236, 283 }, { 237, 237 }, { 238, 238 }, { 239, 271 }, { 240, 273 }, { 241, 324 }, { 242, 328 }, { 243, 243 }, { 244, 244 }, { 245, 337 }, { 246, 246 }, { 247, 247 }, { 248, 345 }, { 249, 367 }, { 250, 250 }, { 251, 369 }, { 252, 252 }, { 253, 253 }, { 254, 355 }, { 255, 729 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 192 }, { 65, 195 }, { 65, 197 }, { 65, 256 }, { 65, 461 }, { 97, 224 }, { 97, 227 }, { 97, 229 }, { 97, 257 }, { 97, 462 }, { 67, 264 }, { 67, 266 }, { 99, 265 }, { 99, 267 }, { 69, 200 }, { 69, 202 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 101, 232 }, { 101, 234 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 204 }, { 73, 207 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 236 }, { 105, 239 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 315 }, { 76, 319 }, { 108, 316 }, { 108, 320 }, { 77, 209 }, { 77, 325 }, { 109, 241 }, { 109, 326 }, { 109, 329 }, { 78, 210 }, { 78, 213 }, { 78, 216 }, { 78, 332 }, { 78, 334 }, { 78, 465 }, { 78, 490 }, { 110, 242 }, { 110, 245 }, { 110, 248 }, { 110, 333 }, { 110, 335 }, { 110, 466 }, { 110, 491 }, { 82, 342 }, { 114, 343 }, { 83, 348 }, { 115, 349 }, { 85, 217 }, { 85, 219 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 370 }, { 85, 467 }, { 117, 249 }, { 117, 251 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 374 }, { 89, 376 }, { 121, 255 }, { 121, 375 }, }; static convert_t iso8859_3[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 128 }, { 129, 129 }, { 130, 130 }, { 131, 131 }, { 132, 132 }, { 133, 133 }, { 134, 134 }, { 135, 135 }, { 136, 136 }, { 137, 137 }, { 138, 138 }, { 139, 139 }, { 140, 140 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 144 }, { 145, 145 }, { 146, 146 }, { 147, 147 }, { 148, 148 }, { 149, 149 }, { 150, 150 }, { 151, 151 }, { 152, 152 }, { 153, 153 }, { 154, 154 }, { 155, 155 }, { 156, 156 }, { 157, 157 }, { 158, 158 }, { 159, 159 }, { 160, 160 }, { 161, 294 }, { 162, 728 }, { 163, 163 }, { 164, 164 }, { 165, 165 }, { 166, 292 }, { 167, 167 }, { 168, 168 }, { 169, 304 }, { 170, 350 }, { 171, 286 }, { 172, 308 }, { 173, 173 }, { 174, 174 }, { 175, 379 }, { 176, 176 }, { 177, 295 }, { 178, 178 }, { 179, 179 }, { 180, 180 }, { 181, 181 }, { 182, 293 }, { 183, 183 }, { 184, 184 }, { 185, 305 }, { 186, 351 }, { 187, 287 }, { 188, 309 }, { 189, 189 }, { 190, 190 }, { 191, 380 }, { 192, 192 }, { 193, 193 }, { 194, 194 }, { 195, 195 }, { 196, 196 }, { 197, 266 }, { 198, 264 }, { 199, 199 }, { 200, 200 }, { 201, 201 }, { 202, 202 }, { 203, 203 }, { 204, 204 }, { 205, 205 }, { 206, 206 }, { 207, 207 }, { 208, 208 }, { 209, 209 }, { 210, 210 }, { 211, 211 }, { 212, 212 }, { 213, 288 }, { 214, 214 }, { 215, 215 }, { 216, 284 }, { 217, 217 }, { 218, 218 }, { 219, 219 }, { 220, 220 }, { 221, 364 }, { 222, 348 }, { 223, 223 }, { 224, 224 }, { 225, 225 }, { 226, 226 }, { 227, 227 }, { 228, 228 }, { 229, 267 }, { 230, 265 }, { 231, 231 }, { 232, 232 }, { 233, 233 }, { 234, 234 }, { 235, 235 }, { 236, 236 }, { 237, 237 }, { 238, 238 }, { 239, 239 }, { 240, 240 }, { 241, 241 }, { 242, 242 }, { 243, 243 }, { 244, 244 }, { 245, 289 }, { 246, 246 }, { 247, 247 }, { 248, 285 }, { 249, 249 }, { 250, 250 }, { 251, 251 }, { 252, 252 }, { 253, 365 }, { 254, 349 }, { 255, 729 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 197 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 229 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 268 }, { 99, 263 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 464 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 213 }, { 78, 216 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 245 }, { 110, 248 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 352 }, { 115, 347 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 360 }, { 85, 362 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 221 }, { 89, 374 }, { 89, 376 }, { 121, 253 }, { 121, 255 }, { 121, 375 }, { 90, 377 }, { 90, 381 }, { 122, 378 }, { 122, 382 }, }; static convert_t iso8859_4[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 128 }, { 129, 129 }, { 130, 130 }, { 131, 131 }, { 132, 132 }, { 133, 133 }, { 134, 134 }, { 135, 135 }, { 136, 136 }, { 137, 137 }, { 138, 138 }, { 139, 139 }, { 140, 140 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 144 }, { 145, 145 }, { 146, 146 }, { 147, 147 }, { 148, 148 }, { 149, 149 }, { 150, 150 }, { 151, 151 }, { 152, 152 }, { 153, 153 }, { 154, 154 }, { 155, 155 }, { 156, 156 }, { 157, 157 }, { 158, 158 }, { 159, 159 }, { 160, 160 }, { 161, 260 }, { 162, 312 }, { 163, 342 }, { 164, 164 }, { 165, 296 }, { 166, 315 }, { 167, 167 }, { 168, 168 }, { 169, 352 }, { 170, 274 }, { 171, 290 }, { 172, 358 }, { 173, 173 }, { 174, 381 }, { 175, 175 }, { 176, 176 }, { 177, 261 }, { 178, 731 }, { 179, 343 }, { 180, 180 }, { 181, 297 }, { 182, 316 }, { 183, 711 }, { 184, 184 }, { 185, 353 }, { 186, 275 }, { 187, 291 }, { 188, 359 }, { 189, 330 }, { 190, 382 }, { 191, 331 }, { 192, 256 }, { 193, 193 }, { 194, 194 }, { 195, 195 }, { 196, 196 }, { 197, 197 }, { 198, 198 }, { 199, 302 }, { 200, 268 }, { 201, 201 }, { 202, 280 }, { 203, 203 }, { 204, 278 }, { 205, 205 }, { 206, 206 }, { 207, 298 }, { 208, 272 }, { 209, 325 }, { 210, 332 }, { 211, 310 }, { 212, 212 }, { 213, 213 }, { 214, 214 }, { 215, 215 }, { 216, 216 }, { 217, 370 }, { 218, 218 }, { 219, 219 }, { 220, 220 }, { 221, 360 }, { 222, 362 }, { 223, 223 }, { 224, 257 }, { 225, 225 }, { 226, 226 }, { 227, 227 }, { 228, 228 }, { 229, 229 }, { 230, 230 }, { 231, 303 }, { 232, 269 }, { 233, 233 }, { 234, 281 }, { 235, 235 }, { 236, 279 }, { 237, 237 }, { 238, 238 }, { 239, 299 }, { 240, 273 }, { 241, 326 }, { 242, 333 }, { 243, 311 }, { 244, 244 }, { 245, 245 }, { 246, 246 }, { 247, 247 }, { 248, 248 }, { 249, 371 }, { 250, 250 }, { 251, 251 }, { 252, 252 }, { 253, 361 }, { 254, 363 }, { 255, 729 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 192 }, { 65, 258 }, { 65, 461 }, { 97, 224 }, { 97, 259 }, { 97, 462 }, { 67, 199 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 99, 231 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 68, 270 }, { 100, 271 }, { 69, 200 }, { 69, 202 }, { 69, 276 }, { 69, 282 }, { 101, 232 }, { 101, 234 }, { 101, 277 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 204 }, { 73, 207 }, { 73, 300 }, { 73, 304 }, { 73, 463 }, { 105, 236 }, { 105, 239 }, { 105, 301 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 488 }, { 107, 489 }, { 76, 313 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 209 }, { 77, 323 }, { 77, 327 }, { 109, 241 }, { 109, 324 }, { 109, 328 }, { 109, 329 }, { 78, 210 }, { 78, 211 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 242 }, { 110, 243 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 344 }, { 114, 341 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 217 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 467 }, { 117, 249 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 221 }, { 89, 374 }, { 89, 376 }, { 121, 253 }, { 121, 255 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 122, 378 }, { 122, 380 }, }; static convert_t iso8859_5[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 128 }, { 129, 129 }, { 130, 130 }, { 131, 131 }, { 132, 132 }, { 133, 133 }, { 134, 134 }, { 135, 135 }, { 136, 136 }, { 137, 137 }, { 138, 138 }, { 139, 139 }, { 140, 140 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 144 }, { 145, 145 }, { 146, 146 }, { 147, 147 }, { 148, 148 }, { 149, 149 }, { 150, 150 }, { 151, 151 }, { 152, 152 }, { 153, 153 }, { 154, 154 }, { 155, 155 }, { 156, 156 }, { 157, 157 }, { 158, 158 }, { 159, 159 }, { 160, 160 }, { 161, 1025 }, { 162, 1026 }, { 163, 1027 }, { 164, 1028 }, { 165, 1029 }, { 166, 1030 }, { 167, 1031 }, { 168, 1032 }, { 169, 1033 }, { 170, 1034 }, { 171, 1035 }, { 172, 1036 }, { 173, 173 }, { 174, 1038 }, { 175, 1039 }, { 176, 1040 }, { 177, 1041 }, { 178, 1042 }, { 179, 1043 }, { 180, 1044 }, { 181, 1045 }, { 182, 1046 }, { 183, 1047 }, { 184, 1048 }, { 185, 1049 }, { 186, 1050 }, { 187, 1051 }, { 188, 1052 }, { 189, 1053 }, { 190, 1054 }, { 191, 1055 }, { 192, 1056 }, { 193, 1057 }, { 194, 1058 }, { 195, 1059 }, { 196, 1060 }, { 197, 1061 }, { 198, 1062 }, { 199, 1063 }, { 200, 1064 }, { 201, 1065 }, { 202, 1066 }, { 203, 1067 }, { 204, 1068 }, { 205, 1069 }, { 206, 1070 }, { 207, 1071 }, { 208, 1072 }, { 209, 1073 }, { 210, 1074 }, { 211, 1075 }, { 212, 1076 }, { 213, 1077 }, { 214, 1078 }, { 215, 1079 }, { 216, 1080 }, { 217, 1081 }, { 218, 1082 }, { 219, 1083 }, { 220, 1084 }, { 221, 1085 }, { 222, 1086 }, { 223, 1087 }, { 224, 1088 }, { 225, 1089 }, { 226, 1090 }, { 227, 1091 }, { 228, 1092 }, { 229, 1093 }, { 230, 1094 }, { 231, 1095 }, { 232, 1096 }, { 233, 1097 }, { 234, 1098 }, { 235, 1099 }, { 236, 1100 }, { 237, 1101 }, { 238, 1102 }, { 239, 1103 }, { 240, 8470 }, { 241, 1105 }, { 242, 1106 }, { 243, 1107 }, { 244, 1108 }, { 245, 1109 }, { 246, 1110 }, { 247, 1111 }, { 248, 1112 }, { 249, 1113 }, { 250, 1114 }, { 251, 1115 }, { 252, 1116 }, { 253, 167 }, { 254, 1118 }, { 255, 1119 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 192 }, { 65, 193 }, { 65, 194 }, { 65, 195 }, { 65, 196 }, { 65, 197 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 224 }, { 97, 225 }, { 97, 226 }, { 97, 227 }, { 97, 228 }, { 97, 229 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 199 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 231 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 200 }, { 69, 201 }, { 69, 202 }, { 69, 203 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 232 }, { 101, 233 }, { 101, 234 }, { 101, 235 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 204 }, { 73, 205 }, { 73, 206 }, { 73, 207 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 236 }, { 105, 237 }, { 105, 238 }, { 105, 239 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 209 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 241 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 210 }, { 78, 211 }, { 78, 212 }, { 78, 213 }, { 78, 214 }, { 78, 216 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 242 }, { 110, 243 }, { 110, 244 }, { 110, 245 }, { 110, 246 }, { 110, 248 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 217 }, { 85, 218 }, { 85, 219 }, { 85, 220 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 249 }, { 117, 250 }, { 117, 251 }, { 117, 252 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 221 }, { 89, 374 }, { 89, 376 }, { 121, 253 }, { 121, 255 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t iso8859_6[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 128 }, { 129, 129 }, { 130, 130 }, { 131, 131 }, { 132, 132 }, { 133, 133 }, { 134, 134 }, { 135, 135 }, { 136, 136 }, { 137, 137 }, { 138, 138 }, { 139, 139 }, { 140, 140 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 144 }, { 145, 145 }, { 146, 146 }, { 147, 147 }, { 148, 148 }, { 149, 149 }, { 150, 150 }, { 151, 151 }, { 152, 152 }, { 153, 153 }, { 154, 154 }, { 155, 155 }, { 156, 156 }, { 157, 157 }, { 158, 158 }, { 159, 159 }, { 160, 160 }, { 161, 161 }, { 162, 162 }, { 163, 163 }, { 164, 164 }, { 165, 165 }, { 166, 166 }, { 167, 167 }, { 168, 168 }, { 169, 169 }, { 170, 170 }, { 171, 171 }, { 172, 1548 }, { 173, 173 }, { 174, 174 }, { 175, 175 }, { 176, 176 }, { 177, 177 }, { 178, 178 }, { 179, 179 }, { 180, 180 }, { 181, 181 }, { 182, 182 }, { 183, 183 }, { 184, 184 }, { 185, 185 }, { 186, 186 }, { 187, 1563 }, { 188, 188 }, { 189, 189 }, { 190, 190 }, { 191, 1567 }, { 192, 192 }, { 193, 1569 }, { 194, 1570 }, { 195, 1571 }, { 196, 1572 }, { 197, 1573 }, { 198, 1574 }, { 199, 1575 }, { 200, 1576 }, { 201, 1577 }, { 202, 1578 }, { 203, 1579 }, { 204, 1580 }, { 205, 1581 }, { 206, 1582 }, { 207, 1583 }, { 208, 1584 }, { 209, 1585 }, { 210, 1586 }, { 211, 1587 }, { 212, 1588 }, { 213, 1589 }, { 214, 1590 }, { 215, 1591 }, { 216, 1592 }, { 217, 1593 }, { 218, 1594 }, { 219, 219 }, { 220, 220 }, { 221, 221 }, { 222, 222 }, { 223, 223 }, { 224, 1600 }, { 225, 1601 }, { 226, 1602 }, { 227, 1603 }, { 228, 1604 }, { 229, 1605 }, { 230, 1606 }, { 231, 1607 }, { 232, 1608 }, { 233, 1609 }, { 234, 1610 }, { 235, 1611 }, { 236, 1612 }, { 237, 1613 }, { 238, 1614 }, { 239, 1615 }, { 240, 1616 }, { 241, 1617 }, { 242, 1618 }, { 243, 243 }, { 244, 244 }, { 245, 245 }, { 246, 246 }, { 247, 247 }, { 248, 248 }, { 249, 249 }, { 250, 250 }, { 251, 251 }, { 252, 252 }, { 253, 253 }, { 254, 254 }, { 255, 255 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 193 }, { 65, 194 }, { 65, 195 }, { 65, 196 }, { 65, 197 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 224 }, { 97, 225 }, { 97, 226 }, { 97, 227 }, { 97, 228 }, { 97, 229 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 199 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 231 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 200 }, { 69, 201 }, { 69, 202 }, { 69, 203 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 232 }, { 101, 233 }, { 101, 234 }, { 101, 235 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 204 }, { 73, 205 }, { 73, 206 }, { 73, 207 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 236 }, { 105, 237 }, { 105, 238 }, { 105, 239 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 209 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 241 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 210 }, { 78, 211 }, { 78, 212 }, { 78, 213 }, { 78, 214 }, { 78, 216 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 242 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 217 }, { 85, 218 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 374 }, { 89, 376 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t iso8859_7[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 128 }, { 129, 129 }, { 130, 130 }, { 131, 131 }, { 132, 132 }, { 133, 133 }, { 134, 134 }, { 135, 135 }, { 136, 136 }, { 137, 137 }, { 138, 138 }, { 139, 139 }, { 140, 140 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 144 }, { 145, 145 }, { 146, 146 }, { 147, 147 }, { 148, 148 }, { 149, 149 }, { 150, 150 }, { 151, 151 }, { 152, 152 }, { 153, 153 }, { 154, 154 }, { 155, 155 }, { 156, 156 }, { 157, 157 }, { 158, 158 }, { 159, 159 }, { 160, 160 }, { 161, 8216 }, { 162, 8217 }, { 163, 163 }, { 164, 164 }, { 165, 165 }, { 166, 166 }, { 167, 167 }, { 168, 168 }, { 169, 169 }, { 170, 170 }, { 171, 171 }, { 172, 172 }, { 173, 173 }, { 174, 174 }, { 175, 8213 }, { 176, 176 }, { 177, 177 }, { 178, 178 }, { 179, 179 }, { 180, 900 }, { 181, 901 }, { 182, 902 }, { 183, 183 }, { 184, 904 }, { 185, 905 }, { 186, 906 }, { 187, 187 }, { 188, 908 }, { 189, 189 }, { 190, 910 }, { 191, 911 }, { 192, 912 }, { 193, 913 }, { 194, 914 }, { 195, 915 }, { 196, 916 }, { 197, 917 }, { 198, 918 }, { 199, 919 }, { 200, 920 }, { 201, 921 }, { 202, 922 }, { 203, 923 }, { 204, 924 }, { 205, 925 }, { 206, 926 }, { 207, 927 }, { 208, 928 }, { 209, 929 }, { 210, 210 }, { 211, 931 }, { 212, 932 }, { 213, 933 }, { 214, 934 }, { 215, 935 }, { 216, 936 }, { 217, 937 }, { 218, 938 }, { 219, 939 }, { 220, 940 }, { 221, 941 }, { 222, 942 }, { 223, 943 }, { 224, 944 }, { 225, 945 }, { 226, 946 }, { 227, 947 }, { 228, 948 }, { 229, 949 }, { 230, 950 }, { 231, 951 }, { 232, 952 }, { 233, 953 }, { 234, 954 }, { 235, 955 }, { 236, 956 }, { 237, 957 }, { 238, 958 }, { 239, 959 }, { 240, 960 }, { 241, 961 }, { 242, 962 }, { 243, 963 }, { 244, 964 }, { 245, 965 }, { 246, 966 }, { 247, 967 }, { 248, 968 }, { 249, 969 }, { 250, 970 }, { 251, 971 }, { 252, 972 }, { 253, 973 }, { 254, 974 }, { 255, 255 }, { 34, 8220 }, { 34, 8221 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 192 }, { 65, 193 }, { 65, 194 }, { 65, 195 }, { 65, 196 }, { 65, 197 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 224 }, { 97, 225 }, { 97, 226 }, { 97, 227 }, { 97, 228 }, { 97, 229 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 199 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 231 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 200 }, { 69, 201 }, { 69, 202 }, { 69, 203 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 232 }, { 101, 233 }, { 101, 234 }, { 101, 235 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 204 }, { 73, 205 }, { 73, 206 }, { 73, 207 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 236 }, { 105, 237 }, { 105, 238 }, { 105, 239 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 209 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 241 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 211 }, { 78, 212 }, { 78, 213 }, { 78, 214 }, { 78, 216 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 242 }, { 110, 243 }, { 110, 244 }, { 110, 245 }, { 110, 246 }, { 110, 248 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 217 }, { 85, 218 }, { 85, 219 }, { 85, 220 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 249 }, { 117, 250 }, { 117, 251 }, { 117, 252 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 221 }, { 89, 374 }, { 89, 376 }, { 121, 253 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t iso8859_8[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 128 }, { 129, 129 }, { 130, 130 }, { 131, 131 }, { 132, 132 }, { 133, 133 }, { 134, 134 }, { 135, 135 }, { 136, 136 }, { 137, 137 }, { 138, 138 }, { 139, 139 }, { 140, 140 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 144 }, { 145, 145 }, { 146, 146 }, { 147, 147 }, { 148, 148 }, { 149, 149 }, { 150, 150 }, { 151, 151 }, { 152, 152 }, { 153, 153 }, { 154, 154 }, { 155, 155 }, { 156, 156 }, { 157, 157 }, { 158, 158 }, { 159, 159 }, { 160, 160 }, { 161, 161 }, { 162, 162 }, { 163, 163 }, { 164, 164 }, { 165, 165 }, { 166, 166 }, { 167, 167 }, { 168, 168 }, { 169, 169 }, { 170, 215 }, { 171, 171 }, { 172, 172 }, { 173, 173 }, { 174, 174 }, { 175, 175 }, { 176, 176 }, { 177, 177 }, { 178, 178 }, { 179, 179 }, { 180, 180 }, { 181, 181 }, { 182, 182 }, { 183, 183 }, { 184, 184 }, { 185, 185 }, { 186, 247 }, { 187, 187 }, { 188, 188 }, { 189, 189 }, { 190, 190 }, { 191, 191 }, { 192, 192 }, { 193, 193 }, { 194, 194 }, { 195, 195 }, { 196, 196 }, { 197, 197 }, { 198, 198 }, { 199, 199 }, { 200, 200 }, { 201, 201 }, { 202, 202 }, { 203, 203 }, { 204, 204 }, { 205, 205 }, { 206, 206 }, { 207, 207 }, { 208, 208 }, { 209, 209 }, { 210, 210 }, { 211, 211 }, { 212, 212 }, { 213, 213 }, { 214, 214 }, { 215, 215 }, { 216, 216 }, { 217, 217 }, { 218, 218 }, { 219, 219 }, { 220, 220 }, { 221, 221 }, { 222, 222 }, { 223, 8215 }, { 224, 1488 }, { 225, 1489 }, { 226, 1490 }, { 227, 1491 }, { 228, 1492 }, { 229, 1493 }, { 230, 1494 }, { 231, 1495 }, { 232, 1496 }, { 233, 1497 }, { 234, 1498 }, { 235, 1499 }, { 236, 1500 }, { 237, 1501 }, { 238, 1502 }, { 239, 1503 }, { 240, 1504 }, { 241, 1505 }, { 242, 1506 }, { 243, 1507 }, { 244, 1508 }, { 245, 1509 }, { 246, 1510 }, { 247, 1511 }, { 248, 1512 }, { 249, 1513 }, { 250, 1514 }, { 251, 251 }, { 252, 252 }, { 253, 8206 }, { 254, 8207 }, { 255, 255 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 224 }, { 97, 225 }, { 97, 226 }, { 97, 227 }, { 97, 228 }, { 97, 229 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 231 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 232 }, { 101, 233 }, { 101, 234 }, { 101, 235 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 236 }, { 105, 237 }, { 105, 238 }, { 105, 239 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 241 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 242 }, { 110, 243 }, { 110, 244 }, { 110, 245 }, { 110, 246 }, { 110, 248 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 249 }, { 117, 250 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 374 }, { 89, 376 }, { 121, 253 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t iso8859_9[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 128 }, { 129, 129 }, { 130, 130 }, { 131, 131 }, { 132, 132 }, { 133, 133 }, { 134, 134 }, { 135, 135 }, { 136, 136 }, { 137, 137 }, { 138, 138 }, { 139, 139 }, { 140, 140 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 144 }, { 145, 145 }, { 146, 146 }, { 147, 147 }, { 148, 148 }, { 149, 149 }, { 150, 150 }, { 151, 151 }, { 152, 152 }, { 153, 153 }, { 154, 154 }, { 155, 155 }, { 156, 156 }, { 157, 157 }, { 158, 158 }, { 159, 159 }, { 160, 160 }, { 161, 161 }, { 162, 162 }, { 163, 163 }, { 164, 164 }, { 165, 165 }, { 166, 166 }, { 167, 167 }, { 168, 168 }, { 169, 169 }, { 170, 170 }, { 171, 171 }, { 172, 172 }, { 173, 173 }, { 174, 174 }, { 175, 175 }, { 176, 176 }, { 177, 177 }, { 178, 178 }, { 179, 179 }, { 180, 180 }, { 181, 181 }, { 182, 182 }, { 183, 183 }, { 184, 184 }, { 185, 185 }, { 186, 186 }, { 187, 187 }, { 188, 188 }, { 189, 189 }, { 190, 190 }, { 191, 191 }, { 192, 192 }, { 193, 193 }, { 194, 194 }, { 195, 195 }, { 196, 196 }, { 197, 197 }, { 198, 198 }, { 199, 199 }, { 200, 200 }, { 201, 201 }, { 202, 202 }, { 203, 203 }, { 204, 204 }, { 205, 205 }, { 206, 206 }, { 207, 207 }, { 208, 286 }, { 209, 209 }, { 210, 210 }, { 211, 211 }, { 212, 212 }, { 213, 213 }, { 214, 214 }, { 215, 215 }, { 216, 216 }, { 217, 217 }, { 218, 218 }, { 219, 219 }, { 220, 220 }, { 221, 304 }, { 222, 350 }, { 223, 223 }, { 224, 224 }, { 225, 225 }, { 226, 226 }, { 227, 227 }, { 228, 228 }, { 229, 229 }, { 230, 230 }, { 231, 231 }, { 232, 232 }, { 233, 233 }, { 234, 234 }, { 235, 235 }, { 236, 236 }, { 237, 237 }, { 238, 238 }, { 239, 239 }, { 240, 287 }, { 241, 241 }, { 242, 242 }, { 243, 243 }, { 244, 244 }, { 245, 245 }, { 246, 246 }, { 247, 247 }, { 248, 248 }, { 249, 249 }, { 250, 250 }, { 251, 251 }, { 252, 252 }, { 253, 305 }, { 254, 351 }, { 255, 255 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 221 }, { 89, 374 }, { 89, 376 }, { 121, 253 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t iso8859_10[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 128 }, { 129, 129 }, { 130, 130 }, { 131, 131 }, { 132, 132 }, { 133, 133 }, { 134, 134 }, { 135, 135 }, { 136, 136 }, { 137, 137 }, { 138, 138 }, { 139, 139 }, { 140, 140 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 144 }, { 145, 145 }, { 146, 146 }, { 147, 147 }, { 148, 148 }, { 149, 149 }, { 150, 150 }, { 151, 151 }, { 152, 152 }, { 153, 153 }, { 154, 154 }, { 155, 155 }, { 156, 156 }, { 157, 157 }, { 158, 158 }, { 159, 159 }, { 160, 160 }, { 161, 260 }, { 162, 274 }, { 163, 290 }, { 164, 298 }, { 165, 296 }, { 166, 310 }, { 167, 167 }, { 168, 315 }, { 169, 272 }, { 170, 352 }, { 171, 358 }, { 172, 381 }, { 173, 173 }, { 174, 362 }, { 175, 330 }, { 176, 176 }, { 177, 261 }, { 178, 275 }, { 179, 291 }, { 180, 299 }, { 181, 297 }, { 182, 311 }, { 183, 183 }, { 184, 316 }, { 185, 273 }, { 186, 353 }, { 187, 359 }, { 188, 382 }, { 189, 8213 }, { 190, 363 }, { 191, 331 }, { 192, 256 }, { 193, 193 }, { 194, 194 }, { 195, 195 }, { 196, 196 }, { 197, 197 }, { 198, 198 }, { 199, 302 }, { 200, 268 }, { 201, 201 }, { 202, 280 }, { 203, 203 }, { 204, 278 }, { 205, 205 }, { 206, 206 }, { 207, 207 }, { 208, 208 }, { 209, 325 }, { 210, 332 }, { 211, 211 }, { 212, 212 }, { 213, 213 }, { 214, 214 }, { 215, 360 }, { 216, 216 }, { 217, 370 }, { 218, 218 }, { 219, 219 }, { 220, 220 }, { 221, 221 }, { 222, 222 }, { 223, 223 }, { 224, 257 }, { 225, 225 }, { 226, 226 }, { 227, 227 }, { 228, 228 }, { 229, 229 }, { 230, 230 }, { 231, 303 }, { 232, 269 }, { 233, 233 }, { 234, 281 }, { 235, 235 }, { 236, 279 }, { 237, 237 }, { 238, 238 }, { 239, 239 }, { 240, 240 }, { 241, 326 }, { 242, 333 }, { 243, 243 }, { 244, 244 }, { 245, 245 }, { 246, 246 }, { 247, 361 }, { 248, 248 }, { 249, 371 }, { 250, 250 }, { 251, 251 }, { 252, 252 }, { 253, 253 }, { 254, 254 }, { 255, 312 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 192 }, { 65, 258 }, { 65, 461 }, { 97, 224 }, { 97, 259 }, { 97, 462 }, { 67, 199 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 99, 231 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 68, 270 }, { 100, 271 }, { 69, 200 }, { 69, 202 }, { 69, 276 }, { 69, 282 }, { 101, 232 }, { 101, 234 }, { 101, 277 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 204 }, { 73, 300 }, { 73, 304 }, { 73, 463 }, { 105, 236 }, { 105, 301 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 488 }, { 107, 489 }, { 76, 313 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 209 }, { 77, 323 }, { 77, 327 }, { 109, 241 }, { 109, 324 }, { 109, 328 }, { 109, 329 }, { 78, 210 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 242 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 217 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 467 }, { 117, 249 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 374 }, { 89, 376 }, { 121, 255 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 122, 378 }, { 122, 380 }, }; static convert_t iso8859_11[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 128 }, { 129, 129 }, { 130, 130 }, { 131, 131 }, { 132, 132 }, { 133, 133 }, { 134, 134 }, { 135, 135 }, { 136, 136 }, { 137, 137 }, { 138, 138 }, { 139, 139 }, { 140, 140 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 144 }, { 145, 145 }, { 146, 146 }, { 147, 147 }, { 148, 148 }, { 149, 149 }, { 150, 150 }, { 151, 151 }, { 152, 152 }, { 153, 153 }, { 154, 154 }, { 155, 155 }, { 156, 156 }, { 157, 157 }, { 158, 158 }, { 159, 159 }, { 160, 160 }, { 161, 3585 }, { 162, 3586 }, { 163, 3587 }, { 164, 3588 }, { 165, 3589 }, { 166, 3590 }, { 167, 3591 }, { 168, 3592 }, { 169, 3593 }, { 170, 3594 }, { 171, 3595 }, { 172, 3596 }, { 173, 3597 }, { 174, 3598 }, { 175, 3599 }, { 176, 3600 }, { 177, 3601 }, { 178, 3602 }, { 179, 3603 }, { 180, 3604 }, { 181, 3605 }, { 182, 3606 }, { 183, 3607 }, { 184, 3608 }, { 185, 3609 }, { 186, 3610 }, { 187, 3611 }, { 188, 3612 }, { 189, 3613 }, { 190, 3614 }, { 191, 3615 }, { 192, 3616 }, { 193, 3617 }, { 194, 3618 }, { 195, 3619 }, { 196, 3620 }, { 197, 3621 }, { 198, 3622 }, { 199, 3623 }, { 200, 3624 }, { 201, 3625 }, { 202, 3626 }, { 203, 3627 }, { 204, 3628 }, { 205, 3629 }, { 206, 3630 }, { 207, 3631 }, { 208, 3632 }, { 209, 3633 }, { 210, 3634 }, { 211, 3635 }, { 212, 3636 }, { 213, 3637 }, { 214, 3638 }, { 215, 3639 }, { 216, 3640 }, { 217, 3641 }, { 218, 3642 }, { 219, 219 }, { 220, 220 }, { 221, 221 }, { 222, 222 }, { 223, 3647 }, { 224, 3648 }, { 225, 3649 }, { 226, 3650 }, { 227, 3651 }, { 228, 3652 }, { 229, 3653 }, { 230, 3654 }, { 231, 3655 }, { 232, 3656 }, { 233, 3657 }, { 234, 3658 }, { 235, 3659 }, { 236, 3660 }, { 237, 3661 }, { 238, 3662 }, { 239, 3663 }, { 240, 3664 }, { 241, 3665 }, { 242, 3666 }, { 243, 3667 }, { 244, 3668 }, { 245, 3669 }, { 246, 3670 }, { 247, 3671 }, { 248, 3672 }, { 249, 3673 }, { 250, 3674 }, { 251, 3675 }, { 252, 252 }, { 253, 253 }, { 254, 254 }, { 255, 255 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 192 }, { 65, 193 }, { 65, 194 }, { 65, 195 }, { 65, 196 }, { 65, 197 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 224 }, { 97, 225 }, { 97, 226 }, { 97, 227 }, { 97, 228 }, { 97, 229 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 199 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 231 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 200 }, { 69, 201 }, { 69, 202 }, { 69, 203 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 232 }, { 101, 233 }, { 101, 234 }, { 101, 235 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 204 }, { 73, 205 }, { 73, 206 }, { 73, 207 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 236 }, { 105, 237 }, { 105, 238 }, { 105, 239 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 209 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 241 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 210 }, { 78, 211 }, { 78, 212 }, { 78, 213 }, { 78, 214 }, { 78, 216 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 242 }, { 110, 243 }, { 110, 244 }, { 110, 245 }, { 110, 246 }, { 110, 248 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 217 }, { 85, 218 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 249 }, { 117, 250 }, { 117, 251 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 374 }, { 89, 376 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t iso8859_13[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 128 }, { 129, 129 }, { 130, 130 }, { 131, 131 }, { 132, 132 }, { 133, 133 }, { 134, 134 }, { 135, 135 }, { 136, 136 }, { 137, 137 }, { 138, 138 }, { 139, 139 }, { 140, 140 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 144 }, { 145, 145 }, { 146, 146 }, { 147, 147 }, { 148, 148 }, { 149, 149 }, { 150, 150 }, { 151, 151 }, { 152, 152 }, { 153, 153 }, { 154, 154 }, { 155, 155 }, { 156, 156 }, { 157, 157 }, { 158, 158 }, { 159, 159 }, { 160, 160 }, { 161, 8221 }, { 162, 162 }, { 163, 163 }, { 164, 164 }, { 165, 8222 }, { 166, 166 }, { 167, 167 }, { 168, 216 }, { 169, 169 }, { 170, 342 }, { 171, 171 }, { 172, 172 }, { 173, 173 }, { 174, 174 }, { 175, 198 }, { 176, 176 }, { 177, 177 }, { 178, 178 }, { 179, 179 }, { 180, 8220 }, { 181, 181 }, { 182, 182 }, { 183, 183 }, { 184, 248 }, { 185, 185 }, { 186, 343 }, { 187, 187 }, { 188, 188 }, { 189, 189 }, { 190, 190 }, { 191, 230 }, { 192, 260 }, { 193, 302 }, { 194, 256 }, { 195, 262 }, { 196, 196 }, { 197, 197 }, { 198, 280 }, { 199, 274 }, { 200, 268 }, { 201, 201 }, { 202, 377 }, { 203, 278 }, { 204, 290 }, { 205, 310 }, { 206, 298 }, { 207, 315 }, { 208, 352 }, { 209, 323 }, { 210, 325 }, { 211, 211 }, { 212, 332 }, { 213, 213 }, { 214, 214 }, { 215, 215 }, { 216, 370 }, { 217, 321 }, { 218, 346 }, { 219, 362 }, { 220, 220 }, { 221, 379 }, { 222, 381 }, { 223, 223 }, { 224, 261 }, { 225, 303 }, { 226, 257 }, { 227, 263 }, { 228, 228 }, { 229, 229 }, { 230, 281 }, { 231, 275 }, { 232, 269 }, { 233, 233 }, { 234, 378 }, { 235, 279 }, { 236, 291 }, { 237, 311 }, { 238, 299 }, { 239, 316 }, { 240, 353 }, { 241, 324 }, { 242, 326 }, { 243, 243 }, { 244, 333 }, { 245, 245 }, { 246, 246 }, { 247, 247 }, { 248, 371 }, { 249, 322 }, { 250, 347 }, { 251, 363 }, { 252, 252 }, { 253, 380 }, { 254, 382 }, { 255, 8217 }, { 39, 8216 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 192 }, { 65, 193 }, { 65, 194 }, { 65, 195 }, { 65, 258 }, { 65, 461 }, { 97, 224 }, { 97, 225 }, { 97, 226 }, { 97, 227 }, { 97, 259 }, { 97, 462 }, { 67, 199 }, { 67, 264 }, { 67, 266 }, { 99, 231 }, { 99, 265 }, { 99, 267 }, { 68, 270 }, { 100, 271 }, { 69, 200 }, { 69, 202 }, { 69, 203 }, { 69, 276 }, { 69, 282 }, { 101, 232 }, { 101, 234 }, { 101, 235 }, { 101, 277 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 204 }, { 73, 205 }, { 73, 206 }, { 73, 207 }, { 73, 296 }, { 73, 300 }, { 73, 304 }, { 73, 463 }, { 105, 236 }, { 105, 237 }, { 105, 238 }, { 105, 239 }, { 105, 297 }, { 105, 301 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 488 }, { 107, 489 }, { 76, 313 }, { 76, 317 }, { 76, 319 }, { 108, 314 }, { 108, 318 }, { 108, 320 }, { 77, 209 }, { 77, 327 }, { 109, 241 }, { 109, 328 }, { 109, 329 }, { 78, 210 }, { 78, 212 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 242 }, { 110, 244 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 344 }, { 114, 341 }, { 114, 345 }, { 83, 348 }, { 83, 350 }, { 115, 349 }, { 115, 351 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 217 }, { 85, 218 }, { 85, 219 }, { 85, 360 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 467 }, { 117, 249 }, { 117, 250 }, { 117, 251 }, { 117, 361 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 221 }, { 89, 374 }, { 89, 376 }, { 121, 253 }, { 121, 255 }, { 121, 375 }, }; static convert_t iso8859_14[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 128 }, { 129, 129 }, { 130, 130 }, { 131, 131 }, { 132, 132 }, { 133, 133 }, { 134, 134 }, { 135, 135 }, { 136, 136 }, { 137, 137 }, { 138, 138 }, { 139, 139 }, { 140, 140 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 144 }, { 145, 145 }, { 146, 146 }, { 147, 147 }, { 148, 148 }, { 149, 149 }, { 150, 150 }, { 151, 151 }, { 152, 152 }, { 153, 153 }, { 154, 154 }, { 155, 155 }, { 156, 156 }, { 157, 157 }, { 158, 158 }, { 159, 159 }, { 160, 160 }, { 161, 7682 }, { 162, 7683 }, { 163, 163 }, { 164, 266 }, { 165, 267 }, { 166, 7690 }, { 167, 167 }, { 168, 7808 }, { 169, 169 }, { 170, 7810 }, { 171, 7691 }, { 172, 7922 }, { 173, 173 }, { 174, 174 }, { 175, 376 }, { 176, 7710 }, { 177, 7711 }, { 178, 288 }, { 179, 289 }, { 180, 7744 }, { 181, 7745 }, { 182, 182 }, { 183, 7766 }, { 184, 7809 }, { 185, 7767 }, { 186, 7811 }, { 187, 7776 }, { 188, 7923 }, { 189, 7812 }, { 190, 7813 }, { 191, 7777 }, { 192, 192 }, { 193, 193 }, { 194, 194 }, { 195, 195 }, { 196, 196 }, { 197, 197 }, { 198, 198 }, { 199, 199 }, { 200, 200 }, { 201, 201 }, { 202, 202 }, { 203, 203 }, { 204, 204 }, { 205, 205 }, { 206, 206 }, { 207, 207 }, { 208, 372 }, { 209, 209 }, { 210, 210 }, { 211, 211 }, { 212, 212 }, { 213, 213 }, { 214, 214 }, { 215, 7786 }, { 216, 216 }, { 217, 217 }, { 218, 218 }, { 219, 219 }, { 220, 220 }, { 221, 221 }, { 222, 374 }, { 223, 223 }, { 224, 224 }, { 225, 225 }, { 226, 226 }, { 227, 227 }, { 228, 228 }, { 229, 229 }, { 230, 230 }, { 231, 231 }, { 232, 232 }, { 233, 233 }, { 234, 234 }, { 235, 235 }, { 236, 236 }, { 237, 237 }, { 238, 238 }, { 239, 239 }, { 240, 373 }, { 241, 241 }, { 242, 242 }, { 243, 243 }, { 244, 244 }, { 245, 245 }, { 246, 246 }, { 247, 7787 }, { 248, 248 }, { 249, 249 }, { 250, 250 }, { 251, 251 }, { 252, 252 }, { 253, 253 }, { 254, 375 }, { 255, 255 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 264 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t iso8859_15[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 128 }, { 129, 129 }, { 130, 130 }, { 131, 131 }, { 132, 132 }, { 133, 133 }, { 134, 134 }, { 135, 135 }, { 136, 136 }, { 137, 137 }, { 138, 138 }, { 139, 139 }, { 140, 140 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 144 }, { 145, 145 }, { 146, 146 }, { 147, 147 }, { 148, 148 }, { 149, 149 }, { 150, 150 }, { 151, 151 }, { 152, 152 }, { 153, 153 }, { 154, 154 }, { 155, 155 }, { 156, 156 }, { 157, 157 }, { 158, 158 }, { 159, 159 }, { 160, 160 }, { 161, 161 }, { 162, 162 }, { 163, 163 }, { 164, 8364 }, { 165, 165 }, { 166, 352 }, { 167, 167 }, { 168, 353 }, { 169, 169 }, { 170, 170 }, { 171, 171 }, { 172, 172 }, { 173, 173 }, { 174, 174 }, { 175, 175 }, { 176, 176 }, { 177, 177 }, { 178, 178 }, { 179, 179 }, { 180, 381 }, { 181, 181 }, { 182, 182 }, { 183, 183 }, { 184, 382 }, { 185, 185 }, { 186, 186 }, { 187, 187 }, { 188, 338 }, { 189, 339 }, { 190, 376 }, { 191, 191 }, { 192, 192 }, { 193, 193 }, { 194, 194 }, { 195, 195 }, { 196, 196 }, { 197, 197 }, { 198, 198 }, { 199, 199 }, { 200, 200 }, { 201, 201 }, { 202, 202 }, { 203, 203 }, { 204, 204 }, { 205, 205 }, { 206, 206 }, { 207, 207 }, { 208, 208 }, { 209, 209 }, { 210, 210 }, { 211, 211 }, { 212, 212 }, { 213, 213 }, { 214, 214 }, { 215, 215 }, { 216, 216 }, { 217, 217 }, { 218, 218 }, { 219, 219 }, { 220, 220 }, { 221, 221 }, { 222, 222 }, { 223, 223 }, { 224, 224 }, { 225, 225 }, { 226, 226 }, { 227, 227 }, { 228, 228 }, { 229, 229 }, { 230, 230 }, { 231, 231 }, { 232, 232 }, { 233, 233 }, { 234, 234 }, { 235, 235 }, { 236, 236 }, { 237, 237 }, { 238, 238 }, { 239, 239 }, { 240, 240 }, { 241, 241 }, { 242, 242 }, { 243, 243 }, { 244, 244 }, { 245, 245 }, { 246, 246 }, { 247, 247 }, { 248, 248 }, { 249, 249 }, { 250, 250 }, { 251, 251 }, { 252, 252 }, { 253, 253 }, { 254, 254 }, { 255, 255 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 374 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 122, 378 }, { 122, 380 }, }; static convert_t iso8859_16[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 128 }, { 129, 129 }, { 130, 130 }, { 131, 131 }, { 132, 132 }, { 133, 133 }, { 134, 134 }, { 135, 135 }, { 136, 136 }, { 137, 137 }, { 138, 138 }, { 139, 139 }, { 140, 140 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 144 }, { 145, 145 }, { 146, 146 }, { 147, 147 }, { 148, 148 }, { 149, 149 }, { 150, 150 }, { 151, 151 }, { 152, 152 }, { 153, 153 }, { 154, 154 }, { 155, 155 }, { 156, 156 }, { 157, 157 }, { 158, 158 }, { 159, 159 }, { 160, 160 }, { 161, 260 }, { 162, 261 }, { 163, 321 }, { 164, 8364 }, { 165, 8222 }, { 166, 352 }, { 167, 167 }, { 168, 353 }, { 169, 169 }, { 170, 536 }, { 171, 171 }, { 172, 377 }, { 173, 173 }, { 174, 378 }, { 175, 379 }, { 176, 176 }, { 177, 177 }, { 178, 268 }, { 179, 322 }, { 180, 381 }, { 181, 8221 }, { 182, 182 }, { 183, 183 }, { 184, 382 }, { 185, 269 }, { 186, 537 }, { 187, 187 }, { 188, 338 }, { 189, 339 }, { 190, 376 }, { 191, 380 }, { 192, 192 }, { 193, 193 }, { 194, 194 }, { 195, 258 }, { 196, 196 }, { 197, 262 }, { 198, 198 }, { 199, 199 }, { 200, 200 }, { 201, 201 }, { 202, 202 }, { 203, 203 }, { 204, 204 }, { 205, 205 }, { 206, 206 }, { 207, 207 }, { 208, 272 }, { 209, 323 }, { 210, 210 }, { 211, 211 }, { 212, 212 }, { 213, 336 }, { 214, 214 }, { 215, 346 }, { 216, 368 }, { 217, 217 }, { 218, 218 }, { 219, 219 }, { 220, 220 }, { 221, 280 }, { 222, 538 }, { 223, 223 }, { 224, 224 }, { 225, 225 }, { 226, 226 }, { 227, 259 }, { 228, 228 }, { 229, 263 }, { 230, 230 }, { 231, 231 }, { 232, 232 }, { 233, 233 }, { 234, 234 }, { 235, 235 }, { 236, 236 }, { 237, 237 }, { 238, 238 }, { 239, 239 }, { 240, 273 }, { 241, 324 }, { 242, 242 }, { 243, 243 }, { 244, 244 }, { 245, 337 }, { 246, 246 }, { 247, 347 }, { 248, 369 }, { 249, 249 }, { 250, 250 }, { 251, 251 }, { 252, 252 }, { 253, 281 }, { 254, 539 }, { 255, 255 }, { 34, 8220 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 195 }, { 65, 197 }, { 65, 256 }, { 65, 461 }, { 97, 227 }, { 97, 229 }, { 97, 257 }, { 97, 462 }, { 67, 264 }, { 67, 266 }, { 99, 265 }, { 99, 267 }, { 68, 270 }, { 100, 271 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 77, 209 }, { 77, 325 }, { 77, 327 }, { 109, 241 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 213 }, { 78, 216 }, { 78, 332 }, { 78, 334 }, { 78, 465 }, { 78, 490 }, { 110, 245 }, { 110, 248 }, { 110, 333 }, { 110, 335 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 348 }, { 83, 350 }, { 115, 349 }, { 115, 351 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 221 }, { 89, 374 }, { 121, 253 }, { 121, 375 }, }; static convert_t koi8_r[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 9472 }, { 129, 9474 }, { 130, 9484 }, { 131, 9488 }, { 132, 9492 }, { 133, 9496 }, { 134, 9500 }, { 135, 9508 }, { 136, 9516 }, { 137, 9524 }, { 138, 9532 }, { 139, 9600 }, { 140, 9604 }, { 141, 9608 }, { 142, 9612 }, { 143, 9616 }, { 144, 9617 }, { 145, 9618 }, { 146, 9619 }, { 147, 8992 }, { 148, 9632 }, { 149, 8729 }, { 150, 8730 }, { 151, 8776 }, { 152, 8804 }, { 153, 8805 }, { 154, 160 }, { 155, 8993 }, { 156, 176 }, { 157, 178 }, { 158, 183 }, { 159, 247 }, { 160, 9552 }, { 161, 9553 }, { 162, 9554 }, { 163, 1105 }, { 164, 9555 }, { 165, 9556 }, { 166, 9557 }, { 167, 9558 }, { 168, 9559 }, { 169, 9560 }, { 170, 9561 }, { 171, 9562 }, { 172, 9563 }, { 173, 9564 }, { 174, 9565 }, { 175, 9566 }, { 176, 9567 }, { 177, 9568 }, { 178, 9569 }, { 179, 1025 }, { 180, 9570 }, { 181, 9571 }, { 182, 9572 }, { 183, 9573 }, { 184, 9574 }, { 185, 9575 }, { 186, 9576 }, { 187, 9577 }, { 188, 9578 }, { 189, 9579 }, { 190, 9580 }, { 191, 169 }, { 192, 1102 }, { 193, 1072 }, { 194, 1073 }, { 195, 1094 }, { 196, 1076 }, { 197, 1077 }, { 198, 1092 }, { 199, 1075 }, { 200, 1093 }, { 201, 1080 }, { 202, 1081 }, { 203, 1082 }, { 204, 1083 }, { 205, 1084 }, { 206, 1085 }, { 207, 1086 }, { 208, 1087 }, { 209, 1103 }, { 210, 1088 }, { 211, 1089 }, { 212, 1090 }, { 213, 1091 }, { 214, 1078 }, { 215, 1074 }, { 216, 1100 }, { 217, 1099 }, { 218, 1079 }, { 219, 1096 }, { 220, 1101 }, { 221, 1097 }, { 222, 1095 }, { 223, 1098 }, { 224, 1070 }, { 225, 1040 }, { 226, 1041 }, { 227, 1062 }, { 228, 1044 }, { 229, 1045 }, { 230, 1060 }, { 231, 1043 }, { 232, 1061 }, { 233, 1048 }, { 234, 1049 }, { 235, 1050 }, { 236, 1051 }, { 237, 1052 }, { 238, 1053 }, { 239, 1054 }, { 240, 1055 }, { 241, 1071 }, { 242, 1056 }, { 243, 1057 }, { 244, 1058 }, { 245, 1059 }, { 246, 1046 }, { 247, 1042 }, { 248, 1068 }, { 249, 1067 }, { 250, 1047 }, { 251, 1064 }, { 252, 1069 }, { 253, 1065 }, { 254, 1063 }, { 255, 1066 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 192 }, { 65, 193 }, { 65, 194 }, { 65, 195 }, { 65, 196 }, { 65, 197 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 224 }, { 97, 225 }, { 97, 226 }, { 97, 227 }, { 97, 228 }, { 97, 229 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 199 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 231 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 200 }, { 69, 201 }, { 69, 202 }, { 69, 203 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 232 }, { 101, 233 }, { 101, 234 }, { 101, 235 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 204 }, { 73, 205 }, { 73, 206 }, { 73, 207 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 236 }, { 105, 237 }, { 105, 238 }, { 105, 239 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 209 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 241 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 210 }, { 78, 211 }, { 78, 212 }, { 78, 213 }, { 78, 214 }, { 78, 216 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 242 }, { 110, 243 }, { 110, 244 }, { 110, 245 }, { 110, 246 }, { 110, 248 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 217 }, { 85, 218 }, { 85, 219 }, { 85, 220 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 249 }, { 117, 250 }, { 117, 251 }, { 117, 252 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 221 }, { 89, 374 }, { 89, 376 }, { 121, 253 }, { 121, 255 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t koi8_u[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 9472 }, { 129, 9474 }, { 130, 9484 }, { 131, 9488 }, { 132, 9492 }, { 133, 9496 }, { 134, 9500 }, { 135, 9508 }, { 136, 9516 }, { 137, 9524 }, { 138, 9532 }, { 139, 9600 }, { 140, 9604 }, { 141, 9608 }, { 142, 9612 }, { 143, 9616 }, { 144, 9617 }, { 145, 9618 }, { 146, 9619 }, { 147, 8992 }, { 148, 9632 }, { 149, 8729 }, { 150, 8730 }, { 151, 8776 }, { 152, 8804 }, { 153, 8805 }, { 154, 160 }, { 155, 8993 }, { 156, 176 }, { 157, 178 }, { 158, 183 }, { 159, 247 }, { 160, 9552 }, { 161, 9553 }, { 162, 9554 }, { 163, 1105 }, { 164, 1108 }, { 165, 9556 }, { 166, 1110 }, { 167, 1111 }, { 168, 9559 }, { 169, 9560 }, { 170, 9561 }, { 171, 9562 }, { 172, 9563 }, { 173, 1169 }, { 174, 9565 }, { 175, 9566 }, { 176, 9567 }, { 177, 9568 }, { 178, 9569 }, { 179, 1025 }, { 180, 1028 }, { 181, 9571 }, { 182, 1030 }, { 183, 1031 }, { 184, 9574 }, { 185, 9575 }, { 186, 9576 }, { 187, 9577 }, { 188, 9578 }, { 189, 1168 }, { 190, 9580 }, { 191, 169 }, { 192, 1102 }, { 193, 1072 }, { 194, 1073 }, { 195, 1094 }, { 196, 1076 }, { 197, 1077 }, { 198, 1092 }, { 199, 1075 }, { 200, 1093 }, { 201, 1080 }, { 202, 1081 }, { 203, 1082 }, { 204, 1083 }, { 205, 1084 }, { 206, 1085 }, { 207, 1086 }, { 208, 1087 }, { 209, 1103 }, { 210, 1088 }, { 211, 1089 }, { 212, 1090 }, { 213, 1091 }, { 214, 1078 }, { 215, 1074 }, { 216, 1100 }, { 217, 1099 }, { 218, 1079 }, { 219, 1096 }, { 220, 1101 }, { 221, 1097 }, { 222, 1095 }, { 223, 1098 }, { 224, 1070 }, { 225, 1040 }, { 226, 1041 }, { 227, 1062 }, { 228, 1044 }, { 229, 1045 }, { 230, 1060 }, { 231, 1043 }, { 232, 1061 }, { 233, 1048 }, { 234, 1049 }, { 235, 1050 }, { 236, 1051 }, { 237, 1052 }, { 238, 1053 }, { 239, 1054 }, { 240, 1055 }, { 241, 1071 }, { 242, 1056 }, { 243, 1057 }, { 244, 1058 }, { 245, 1059 }, { 246, 1046 }, { 247, 1042 }, { 248, 1068 }, { 249, 1067 }, { 250, 1047 }, { 251, 1064 }, { 252, 1069 }, { 253, 1065 }, { 254, 1063 }, { 255, 1066 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 192 }, { 65, 193 }, { 65, 194 }, { 65, 195 }, { 65, 196 }, { 65, 197 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 224 }, { 97, 225 }, { 97, 226 }, { 97, 227 }, { 97, 228 }, { 97, 229 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 199 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 231 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 200 }, { 69, 201 }, { 69, 202 }, { 69, 203 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 232 }, { 101, 233 }, { 101, 234 }, { 101, 235 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 204 }, { 73, 205 }, { 73, 206 }, { 73, 207 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 236 }, { 105, 237 }, { 105, 238 }, { 105, 239 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 209 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 241 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 210 }, { 78, 211 }, { 78, 212 }, { 78, 213 }, { 78, 214 }, { 78, 216 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 242 }, { 110, 243 }, { 110, 244 }, { 110, 245 }, { 110, 246 }, { 110, 248 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 217 }, { 85, 218 }, { 85, 219 }, { 85, 220 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 249 }, { 117, 250 }, { 117, 251 }, { 117, 252 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 221 }, { 89, 374 }, { 89, 376 }, { 121, 253 }, { 121, 255 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t mslinedr[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 128 }, { 129, 129 }, { 130, 130 }, { 131, 131 }, { 132, 132 }, { 133, 133 }, { 134, 134 }, { 135, 135 }, { 136, 136 }, { 137, 137 }, { 138, 138 }, { 139, 139 }, { 140, 140 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 144 }, { 145, 145 }, { 146, 146 }, { 147, 147 }, { 148, 148 }, { 149, 149 }, { 150, 150 }, { 151, 151 }, { 152, 152 }, { 153, 153 }, { 154, 154 }, { 155, 155 }, { 156, 156 }, { 157, 157 }, { 158, 158 }, { 159, 159 }, { 160, 160 }, { 161, 161 }, { 162, 162 }, { 163, 163 }, { 164, 164 }, { 165, 165 }, { 166, 166 }, { 167, 167 }, { 168, 168 }, { 169, 169 }, { 170, 170 }, { 171, 171 }, { 172, 172 }, { 173, 173 }, { 174, 174 }, { 175, 175 }, { 176, 9639 }, { 177, 9638 }, { 178, 9640 }, { 179, 9474 }, { 180, 9508 }, { 181, 9569 }, { 182, 9570 }, { 183, 9558 }, { 184, 9557 }, { 185, 9571 }, { 186, 9553 }, { 187, 9559 }, { 188, 9565 }, { 189, 9564 }, { 190, 9563 }, { 191, 9488 }, { 192, 9492 }, { 193, 9524 }, { 194, 9516 }, { 195, 9500 }, { 196, 9472 }, { 197, 9532 }, { 198, 9566 }, { 199, 9567 }, { 200, 9562 }, { 201, 9556 }, { 202, 9577 }, { 203, 9574 }, { 204, 9568 }, { 205, 9552 }, { 206, 9580 }, { 207, 9575 }, { 208, 9576 }, { 209, 9572 }, { 210, 9573 }, { 211, 9561 }, { 212, 9560 }, { 213, 9554 }, { 214, 9555 }, { 215, 9579 }, { 216, 9578 }, { 217, 9496 }, { 218, 9484 }, { 219, 9608 }, { 220, 9604 }, { 221, 9612 }, { 222, 9616 }, { 223, 9600 }, { 224, 224 }, { 225, 225 }, { 226, 226 }, { 227, 227 }, { 228, 228 }, { 229, 229 }, { 230, 230 }, { 231, 231 }, { 232, 232 }, { 233, 233 }, { 234, 234 }, { 235, 235 }, { 236, 236 }, { 237, 237 }, { 238, 238 }, { 239, 239 }, { 240, 240 }, { 241, 241 }, { 242, 242 }, { 243, 243 }, { 244, 244 }, { 245, 245 }, { 246, 246 }, { 247, 247 }, { 248, 248 }, { 249, 249 }, { 250, 250 }, { 251, 251 }, { 252, 252 }, { 253, 253 }, { 254, 254 }, { 255, 255 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 192 }, { 65, 193 }, { 65, 194 }, { 65, 195 }, { 65, 196 }, { 65, 197 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 199 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 200 }, { 69, 201 }, { 69, 202 }, { 69, 203 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 204 }, { 73, 205 }, { 73, 206 }, { 73, 207 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 76, 321 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 108, 322 }, { 77, 209 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 210 }, { 78, 211 }, { 78, 212 }, { 78, 213 }, { 78, 214 }, { 78, 216 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 217 }, { 85, 218 }, { 85, 219 }, { 85, 220 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 221 }, { 89, 374 }, { 89, 376 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t nextstep[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 160 }, { 129, 192 }, { 130, 193 }, { 131, 194 }, { 132, 195 }, { 133, 196 }, { 134, 197 }, { 135, 199 }, { 136, 200 }, { 137, 201 }, { 138, 202 }, { 139, 203 }, { 140, 204 }, { 141, 205 }, { 142, 206 }, { 143, 207 }, { 144, 208 }, { 145, 209 }, { 146, 210 }, { 147, 211 }, { 148, 212 }, { 149, 213 }, { 150, 214 }, { 151, 217 }, { 152, 218 }, { 153, 219 }, { 154, 220 }, { 155, 221 }, { 156, 222 }, { 157, 181 }, { 158, 215 }, { 159, 247 }, { 160, 169 }, { 161, 161 }, { 162, 162 }, { 163, 163 }, { 164, 8260 }, { 165, 165 }, { 166, 402 }, { 167, 167 }, { 168, 164 }, { 169, 169 }, { 170, 8220 }, { 171, 171 }, { 172, 8249 }, { 173, 8250 }, { 174, 64257 }, { 175, 64258 }, { 176, 174 }, { 177, 8211 }, { 178, 8224 }, { 179, 8225 }, { 180, 183 }, { 181, 166 }, { 182, 182 }, { 183, 8729 }, { 184, 8218 }, { 185, 8222 }, { 186, 8221 }, { 187, 187 }, { 188, 8943 }, { 189, 8240 }, { 190, 172 }, { 191, 191 }, { 192, 185 }, { 193, 768 }, { 194, 180 }, { 195, 770 }, { 196, 771 }, { 197, 175 }, { 198, 728 }, { 199, 729 }, { 200, 168 }, { 201, 178 }, { 202, 176 }, { 203, 184 }, { 204, 179 }, { 205, 733 }, { 206, 731 }, { 207, 711 }, { 208, 8212 }, { 209, 177 }, { 210, 188 }, { 211, 189 }, { 212, 190 }, { 213, 224 }, { 214, 225 }, { 215, 226 }, { 216, 227 }, { 217, 228 }, { 218, 229 }, { 219, 231 }, { 220, 232 }, { 221, 233 }, { 222, 234 }, { 223, 235 }, { 224, 236 }, { 225, 198 }, { 226, 237 }, { 227, 170 }, { 228, 238 }, { 229, 239 }, { 230, 240 }, { 231, 241 }, { 232, 321 }, { 233, 216 }, { 234, 338 }, { 235, 186 }, { 236, 242 }, { 237, 243 }, { 238, 244 }, { 239, 245 }, { 240, 246 }, { 241, 230 }, { 242, 249 }, { 243, 250 }, { 244, 251 }, { 245, 305 }, { 246, 252 }, { 247, 253 }, { 248, 322 }, { 249, 248 }, { 250, 339 }, { 251, 223 }, { 252, 254 }, { 253, 255 }, { 254, 254 }, { 255, 255 }, { 39, 8216 }, { 39, 8217 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 256 }, { 65, 258 }, { 65, 260 }, { 65, 461 }, { 97, 257 }, { 97, 259 }, { 97, 261 }, { 97, 462 }, { 67, 262 }, { 67, 264 }, { 67, 266 }, { 67, 268 }, { 99, 263 }, { 99, 265 }, { 99, 267 }, { 99, 269 }, { 68, 270 }, { 100, 271 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 69, 280 }, { 69, 282 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 101, 281 }, { 101, 283 }, { 71, 284 }, { 71, 286 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 287 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 304 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 313 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 108, 314 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 77, 323 }, { 77, 325 }, { 77, 327 }, { 109, 324 }, { 109, 326 }, { 109, 328 }, { 109, 329 }, { 78, 332 }, { 78, 334 }, { 78, 336 }, { 78, 465 }, { 78, 490 }, { 110, 333 }, { 110, 335 }, { 110, 337 }, { 110, 466 }, { 110, 491 }, { 82, 340 }, { 82, 342 }, { 82, 344 }, { 114, 341 }, { 114, 343 }, { 114, 345 }, { 83, 346 }, { 83, 348 }, { 83, 350 }, { 83, 352 }, { 115, 347 }, { 115, 349 }, { 115, 351 }, { 115, 353 }, { 84, 354 }, { 84, 356 }, { 116, 355 }, { 116, 357 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 366 }, { 85, 368 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 367 }, { 117, 369 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 374 }, { 89, 376 }, { 121, 375 }, { 90, 377 }, { 90, 379 }, { 90, 381 }, { 122, 378 }, { 122, 380 }, { 122, 382 }, }; static convert_t symbol[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 8704 }, { 35, 35 }, { 36, 8707 }, { 37, 37 }, { 38, 38 }, { 39, 8715 }, { 40, 40 }, { 41, 41 }, { 42, 8727 }, { 43, 43 }, { 44, 44 }, { 45, 8722 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 8773 }, { 65, 913 }, { 66, 914 }, { 67, 935 }, { 68, 916 }, { 69, 917 }, { 70, 934 }, { 71, 915 }, { 72, 919 }, { 73, 921 }, { 74, 977 }, { 75, 922 }, { 76, 923 }, { 77, 924 }, { 78, 925 }, { 79, 927 }, { 80, 928 }, { 81, 920 }, { 82, 929 }, { 83, 931 }, { 84, 932 }, { 85, 933 }, { 86, 962 }, { 87, 937 }, { 88, 926 }, { 89, 936 }, { 90, 918 }, { 91, 91 }, { 92, 8756 }, { 93, 93 }, { 94, 8869 }, { 95, 95 }, { 96, 8254 }, { 97, 945 }, { 98, 946 }, { 99, 967 }, { 100, 948 }, { 101, 949 }, { 102, 966 }, { 103, 947 }, { 104, 951 }, { 105, 953 }, { 106, 981 }, { 107, 954 }, { 108, 955 }, { 109, 956 }, { 110, 957 }, { 111, 959 }, { 112, 960 }, { 113, 952 }, { 114, 961 }, { 115, 963 }, { 116, 964 }, { 117, 965 }, { 118, 982 }, { 119, 969 }, { 120, 958 }, { 121, 968 }, { 122, 950 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 8764 }, { 127, 127 }, { 128, 128 }, { 129, 129 }, { 130, 130 }, { 131, 131 }, { 132, 132 }, { 133, 133 }, { 134, 134 }, { 135, 135 }, { 136, 136 }, { 137, 137 }, { 138, 138 }, { 139, 139 }, { 140, 140 }, { 141, 141 }, { 142, 142 }, { 143, 143 }, { 144, 144 }, { 145, 145 }, { 146, 146 }, { 147, 147 }, { 148, 148 }, { 149, 149 }, { 150, 150 }, { 151, 151 }, { 152, 152 }, { 153, 153 }, { 154, 154 }, { 155, 155 }, { 156, 156 }, { 157, 157 }, { 158, 158 }, { 159, 159 }, { 160, 160 }, { 161, 978 }, { 162, 8242 }, { 163, 8804 }, { 164, 8725 }, { 165, 8734 }, { 166, 402 }, { 167, 9827 }, { 168, 9830 }, { 169, 9829 }, { 170, 9824 }, { 171, 8596 }, { 172, 8592 }, { 173, 8593 }, { 174, 8594 }, { 175, 8595 }, { 176, 176 }, { 177, 177 }, { 178, 8243 }, { 179, 8805 }, { 180, 215 }, { 181, 8733 }, { 182, 8706 }, { 183, 8729 }, { 184, 247 }, { 185, 8800 }, { 186, 8801 }, { 187, 8776 }, { 188, 8943 }, { 189, 189 }, { 190, 190 }, { 191, 8629 }, { 192, 192 }, { 193, 8465 }, { 194, 8476 }, { 195, 8472 }, { 196, 8855 }, { 197, 8853 }, { 198, 8709 }, { 199, 8745 }, { 200, 8746 }, { 201, 8835 }, { 202, 8839 }, { 203, 8836 }, { 204, 8834 }, { 205, 8838 }, { 206, 8712 }, { 207, 8713 }, { 208, 8736 }, { 209, 8711 }, { 210, 174 }, { 211, 169 }, { 212, 8482 }, { 213, 8719 }, { 214, 8730 }, { 215, 8901 }, { 216, 172 }, { 217, 8743 }, { 218, 8744 }, { 219, 8660 }, { 220, 8656 }, { 221, 8657 }, { 222, 8658 }, { 223, 8659 }, { 224, 9674 }, { 225, 9001 }, { 226, 226 }, { 227, 227 }, { 228, 228 }, { 229, 8721 }, { 230, 230 }, { 231, 231 }, { 232, 232 }, { 233, 233 }, { 234, 234 }, { 235, 235 }, { 236, 236 }, { 237, 237 }, { 238, 238 }, { 239, 239 }, { 240, 240 }, { 241, 9002 }, { 242, 8747 }, { 243, 8992 }, { 244, 244 }, { 245, 8993 }, { 246, 246 }, { 247, 247 }, { 248, 248 }, { 249, 249 }, { 250, 250 }, { 251, 251 }, { 252, 252 }, { 253, 253 }, { 254, 254 }, { 255, 255 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 192, 65 }, { 192, 193 }, { 192, 194 }, { 192, 195 }, { 192, 196 }, { 192, 197 }, { 192, 256 }, { 192, 258 }, { 192, 260 }, { 192, 461 }, { 226, 97 }, { 226, 224 }, { 226, 225 }, { 226, 229 }, { 226, 257 }, { 226, 259 }, { 226, 261 }, { 226, 462 }, { 231, 99 }, { 231, 263 }, { 231, 265 }, { 231, 267 }, { 231, 269 }, { 232, 101 }, { 232, 275 }, { 232, 277 }, { 232, 279 }, { 232, 281 }, { 232, 283 }, { 236, 105 }, { 236, 297 }, { 236, 299 }, { 236, 301 }, { 236, 303 }, { 236, 305 }, { 236, 464 }, { 244, 110 }, { 244, 242 }, { 244, 243 }, { 244, 245 }, { 244, 333 }, { 244, 335 }, { 244, 337 }, { 244, 466 }, { 244, 491 }, { 249, 117 }, { 249, 361 }, { 249, 363 }, { 249, 365 }, { 249, 367 }, { 249, 369 }, { 249, 371 }, { 249, 468 }, { 253, 121 }, { 253, 375 }, }; static convert_t tex_dcr_in[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 258 }, { 129, 260 }, { 130, 262 }, { 131, 268 }, { 132, 270 }, { 133, 282 }, { 134, 280 }, { 135, 286 }, { 136, 313 }, { 137, 65534 }, { 138, 321 }, { 139, 323 }, { 140, 327 }, { 141, 330 }, { 142, 336 }, { 143, 340 }, { 144, 344 }, { 145, 346 }, { 146, 352 }, { 147, 350 }, { 148, 356 }, { 149, 354 }, { 150, 368 }, { 151, 366 }, { 152, 376 }, { 153, 377 }, { 154, 381 }, { 155, 379 }, { 156, 306 }, { 157, 304 }, { 158, 272 }, { 159, 167 }, { 160, 259 }, { 161, 261 }, { 162, 263 }, { 163, 269 }, { 164, 65534 }, { 165, 283 }, { 166, 281 }, { 167, 287 }, { 168, 314 }, { 169, 65534 }, { 170, 322 }, { 171, 324 }, { 172, 328 }, { 173, 331 }, { 174, 337 }, { 175, 341 }, { 176, 345 }, { 177, 347 }, { 178, 353 }, { 179, 351 }, { 180, 65534 }, { 181, 355 }, { 182, 369 }, { 183, 367 }, { 184, 255 }, { 185, 378 }, { 186, 382 }, { 187, 380 }, { 188, 307 }, { 189, 161 }, { 190, 191 }, { 191, 163 }, { 192, 192 }, { 193, 193 }, { 194, 194 }, { 195, 195 }, { 196, 196 }, { 197, 197 }, { 198, 198 }, { 199, 199 }, { 200, 200 }, { 201, 201 }, { 202, 202 }, { 203, 203 }, { 204, 204 }, { 205, 205 }, { 206, 206 }, { 207, 207 }, { 208, 208 }, { 209, 209 }, { 210, 210 }, { 211, 211 }, { 212, 212 }, { 213, 213 }, { 214, 214 }, { 215, 338 }, { 216, 216 }, { 217, 217 }, { 218, 218 }, { 219, 219 }, { 220, 220 }, { 221, 221 }, { 222, 222 }, { 223, 65534 }, { 224, 224 }, { 225, 225 }, { 226, 226 }, { 227, 227 }, { 228, 228 }, { 229, 229 }, { 230, 230 }, { 231, 231 }, { 232, 232 }, { 233, 233 }, { 234, 234 }, { 235, 235 }, { 236, 236 }, { 237, 237 }, { 238, 238 }, { 239, 239 }, { 240, 240 }, { 241, 241 }, { 242, 242 }, { 243, 243 }, { 244, 244 }, { 245, 245 }, { 246, 246 }, { 247, 339 }, { 248, 248 }, { 249, 249 }, { 250, 250 }, { 251, 251 }, { 252, 252 }, { 253, 253 }, { 254, 254 }, { 255, 223 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 256 }, { 65, 461 }, { 97, 257 }, { 97, 462 }, { 67, 264 }, { 67, 266 }, { 99, 265 }, { 99, 267 }, { 100, 271 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 71, 284 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 77, 325 }, { 109, 326 }, { 109, 329 }, { 78, 332 }, { 78, 334 }, { 78, 465 }, { 78, 490 }, { 110, 333 }, { 110, 335 }, { 110, 466 }, { 110, 491 }, { 82, 342 }, { 114, 343 }, { 83, 348 }, { 115, 349 }, { 116, 357 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 374 }, { 121, 375 }, }; static convert_t tex_dcr_out[] = { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 }, { 13, 13 }, { 14, 14 }, { 15, 15 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 20, 20 }, { 21, 21 }, { 22, 22 }, { 23, 23 }, { 24, 24 }, { 25, 25 }, { 26, 26 }, { 27, 27 }, { 28, 28 }, { 29, 29 }, { 30, 30 }, { 31, 31 }, { 32, 32 }, { 33, 33 }, { 34, 34 }, { 35, 35 }, { 36, 36 }, { 37, 37 }, { 38, 38 }, { 39, 39 }, { 40, 40 }, { 41, 41 }, { 42, 42 }, { 43, 43 }, { 44, 44 }, { 45, 45 }, { 46, 46 }, { 47, 47 }, { 48, 48 }, { 49, 49 }, { 50, 50 }, { 51, 51 }, { 52, 52 }, { 53, 53 }, { 54, 54 }, { 55, 55 }, { 56, 56 }, { 57, 57 }, { 58, 58 }, { 59, 59 }, { 60, 60 }, { 61, 61 }, { 62, 62 }, { 63, 63 }, { 64, 64 }, { 65, 65 }, { 66, 66 }, { 67, 67 }, { 68, 68 }, { 69, 69 }, { 70, 70 }, { 71, 71 }, { 72, 72 }, { 73, 73 }, { 74, 74 }, { 75, 75 }, { 76, 76 }, { 77, 77 }, { 78, 78 }, { 79, 79 }, { 80, 80 }, { 81, 81 }, { 82, 82 }, { 83, 83 }, { 84, 84 }, { 85, 85 }, { 86, 86 }, { 87, 87 }, { 88, 88 }, { 89, 89 }, { 90, 90 }, { 91, 91 }, { 92, 92 }, { 93, 93 }, { 94, 94 }, { 95, 95 }, { 96, 96 }, { 97, 97 }, { 98, 98 }, { 99, 99 }, { 100, 100 }, { 101, 101 }, { 102, 102 }, { 103, 103 }, { 104, 104 }, { 105, 105 }, { 106, 106 }, { 107, 107 }, { 108, 108 }, { 109, 109 }, { 110, 110 }, { 111, 111 }, { 112, 112 }, { 113, 113 }, { 114, 114 }, { 115, 115 }, { 116, 116 }, { 117, 117 }, { 118, 118 }, { 119, 119 }, { 120, 120 }, { 121, 121 }, { 122, 122 }, { 123, 123 }, { 124, 124 }, { 125, 125 }, { 126, 126 }, { 127, 127 }, { 128, 258 }, { 129, 260 }, { 130, 262 }, { 131, 268 }, { 132, 270 }, { 133, 282 }, { 134, 280 }, { 135, 286 }, { 136, 313 }, { 137, 65534 }, { 138, 321 }, { 139, 323 }, { 140, 327 }, { 141, 330 }, { 142, 336 }, { 143, 340 }, { 144, 344 }, { 145, 346 }, { 146, 352 }, { 147, 350 }, { 148, 356 }, { 149, 354 }, { 150, 368 }, { 151, 366 }, { 152, 376 }, { 153, 377 }, { 154, 381 }, { 155, 379 }, { 156, 306 }, { 157, 304 }, { 158, 272 }, { 159, 167 }, { 160, 259 }, { 161, 261 }, { 162, 263 }, { 163, 269 }, { 164, 65534 }, { 165, 283 }, { 166, 281 }, { 167, 287 }, { 168, 314 }, { 169, 65534 }, { 170, 322 }, { 171, 324 }, { 172, 328 }, { 173, 331 }, { 174, 337 }, { 175, 341 }, { 176, 345 }, { 177, 347 }, { 178, 353 }, { 179, 351 }, { 180, 65534 }, { 181, 355 }, { 182, 369 }, { 183, 367 }, { 184, 255 }, { 185, 378 }, { 186, 382 }, { 187, 380 }, { 188, 307 }, { 189, 161 }, { 190, 191 }, { 191, 163 }, { 192, 192 }, { 193, 193 }, { 194, 194 }, { 195, 195 }, { 196, 196 }, { 197, 197 }, { 198, 198 }, { 199, 199 }, { 200, 200 }, { 201, 201 }, { 202, 202 }, { 203, 203 }, { 204, 204 }, { 205, 205 }, { 206, 206 }, { 207, 207 }, { 208, 208 }, { 209, 209 }, { 210, 210 }, { 211, 211 }, { 212, 212 }, { 213, 213 }, { 214, 214 }, { 215, 338 }, { 216, 216 }, { 217, 217 }, { 218, 218 }, { 219, 219 }, { 220, 220 }, { 221, 221 }, { 222, 222 }, { 223, 65534 }, { 224, 224 }, { 225, 225 }, { 226, 226 }, { 227, 227 }, { 228, 228 }, { 229, 229 }, { 230, 230 }, { 231, 231 }, { 232, 232 }, { 233, 233 }, { 234, 234 }, { 235, 235 }, { 236, 236 }, { 237, 237 }, { 238, 238 }, { 239, 239 }, { 240, 240 }, { 241, 241 }, { 242, 242 }, { 243, 243 }, { 244, 244 }, { 245, 245 }, { 246, 246 }, { 247, 339 }, { 248, 248 }, { 249, 249 }, { 250, 250 }, { 251, 251 }, { 252, 252 }, { 253, 253 }, { 254, 254 }, { 255, 223 }, { 34, 8220 }, { 34, 8221 }, { 39, 8216 }, { 39, 8217 }, { 45, 8211 }, { 45, 8212 }, { 32, 8194 }, { 32, 8195 }, { 32, 8201 }, { 65, 256 }, { 65, 461 }, { 97, 257 }, { 97, 462 }, { 67, 264 }, { 67, 266 }, { 99, 265 }, { 99, 267 }, { 100, 271 }, { 69, 274 }, { 69, 276 }, { 69, 278 }, { 101, 275 }, { 101, 277 }, { 101, 279 }, { 71, 284 }, { 71, 288 }, { 71, 290 }, { 71, 486 }, { 71, 500 }, { 103, 285 }, { 103, 289 }, { 103, 291 }, { 103, 487 }, { 103, 501 }, { 72, 292 }, { 104, 293 }, { 73, 296 }, { 73, 298 }, { 73, 300 }, { 73, 302 }, { 73, 463 }, { 105, 297 }, { 105, 299 }, { 105, 301 }, { 105, 303 }, { 105, 305 }, { 105, 464 }, { 74, 308 }, { 106, 309 }, { 75, 310 }, { 75, 488 }, { 107, 311 }, { 107, 489 }, { 76, 315 }, { 76, 317 }, { 76, 319 }, { 108, 316 }, { 108, 318 }, { 108, 320 }, { 77, 325 }, { 109, 326 }, { 109, 329 }, { 78, 332 }, { 78, 334 }, { 78, 465 }, { 78, 490 }, { 110, 333 }, { 110, 335 }, { 110, 466 }, { 110, 491 }, { 82, 342 }, { 114, 343 }, { 83, 348 }, { 115, 349 }, { 116, 357 }, { 85, 360 }, { 85, 362 }, { 85, 364 }, { 85, 370 }, { 85, 467 }, { 117, 361 }, { 117, 363 }, { 117, 365 }, { 117, 371 }, { 117, 468 }, { 87, 372 }, { 119, 373 }, { 89, 374 }, { 121, 375 }, }; allcharconvert_t allcharconvert[] = { { "adobeiso", "Adobe ISO", { "ADOBEISO", "", "", "", "", "", "", }, CHARSETARRAY( adobeiso ) }, { "adobestd", "Adobe Standard", { "ADOBESTD", "", "", "", "", "", "", }, CHARSETARRAY( adobestd ) }, { "adobesym", "Adobe Symbol", { "ADOBESYM", "", "", "", "", "", "", }, CHARSETARRAY( adobesym ) }, { "applecro", "Apple Croatian", { "APPLECRO", "MACCRO", "", "", "", "", "", }, CHARSETARRAY( applecro ) }, { "applecyr", "Apple Cyrillic", { "MACCYRILLIC", "X-MAC-CYRILLIC", "", "", "", "", "", }, CHARSETARRAY( applecyr ) }, { "applegk2", "Apple Greek 2", { "APPLEGK2", "", "", "", "", "", "", }, CHARSETARRAY( applegk2 ) }, { "applegrk", "Apple Greek", { "MACGRK", "APPLEGRK", "", "", "", "", "", }, CHARSETARRAY( applegrk ) }, { "macice", "Macintosh Iceland(?)", { "MACICE", "APPLEICE", "", "", "", "", "", }, CHARSETARRAY( macice ) }, { "macroman", "Macintosh Roman", { "MACROMAN", "APPLEROM", "CSMACINTOSH", "MACINTOSH", "MAC", "", "", }, CHARSETARRAY( macroman ) }, { "macromanian", "Macintosh Romanian", { "MACROMANIAN", "APPLERUM", "", "", "", "", "", }, CHARSETARRAY( macromanian ) }, { "macturkish", "Macintosh Turkish", { "MACTURKISH", "APPLETURK", "", "", "", "", "", }, CHARSETARRAY( macturkish ) }, { "atarist", "Atari ST", { "ATARIST", "", "", "", "", "", "", }, CHARSETARRAY( atarist ) }, { "cp437", "MS-DOS Code Page 437 from original IBM PC", { "CP437", "IBM437", "437", "", "", "", "", }, CHARSETARRAY( cp437 ) }, { "cp737", "MS-DOS Code Page 737 Greek", { "CP737", "IBM737", "737", "", "", "", "", }, CHARSETARRAY( cp737 ) }, { "cp775", "MS-DOS Code Page 775 Baltic languages", { "CP775", "IBM775", "775", "", "", "", "", }, CHARSETARRAY( cp775 ) }, { "cp850", "MS-DOS Code Page 850 Western Europe", { "CP850", "IBM850", "CSPC850MULTILINGUAL", "850", "", "", "", }, CHARSETARRAY( cp850 ) }, { "cp851", "MS-DOS Code Page 851 Greek 1", { "CP851", "IBM851", "851", "", "", "", "", }, CHARSETARRAY( cp851 ) }, { "cp852", "MS-DOS Code Page 852 Central European languages", { "CP852", "IBM852", "852", "", "", "", "", }, CHARSETARRAY( cp852 ) }, { "cp853", "MS-DOS Code Page 853 Multilingual Latin 3", { "CP853", "IBM853", "853", "", "", "", "", }, CHARSETARRAY( cp853 ) }, { "cp855", "MS-DOS Code Page 855 Cyrillic", { "CP855", "IBM855", "855", "", "", "", "", }, CHARSETARRAY( cp855 ) }, { "cp857", "MS-DOS Code Page 857 Turkish", { "CP857", "IBM857", "857", "", "", "", "", }, CHARSETARRAY( cp857 ) }, { "cp860", "MS-DOS Code Page 860 Portugese", { "CP860", "IBM860", "860", "", "", "", "", }, CHARSETARRAY( cp860 ) }, { "cp861", "MS-DOS Code Page 861 Icelandic languages", { "CP861", "IBM861", "861", "", "", "", "", }, CHARSETARRAY( cp861 ) }, { "cp862", "MS-DOS Code Page 862 Hebrew", { "CP862", "IBM862", "862", "", "", "", "", }, CHARSETARRAY( cp862 ) }, { "cp863", "MS-DOS Code Page 863 French", { "CP863", "IBM863", "863", "", "", "", "", }, CHARSETARRAY( cp863 ) }, { "cp864", "MS-DOS Code Page 864 Arabic", { "CP864", "IBM864", "864", "", "", "", "", }, CHARSETARRAY( cp864 ) }, { "cp865", "MS-DOS Code Page 865 Nordic languages", { "CP865", "IBM865", "865", "", "", "", "", }, CHARSETARRAY( cp865 ) }, { "cp866", "MS-DOS Code Page 866 Cyrillic", { "CP866", "IBM866", "866", "CSIBM866", "", "", "", }, CHARSETARRAY( cp866 ) }, { "cp869", "MS-DOS Code Page 869 Greek", { "CP869", "IBM869", "869", "", "", "", "", }, CHARSETARRAY( cp869 ) }, { "cp874", "Windows-874 Thai", { "CP874", "WINDOWS-874", "MS874", "X-WINDOWS-874", "X-IBM874", "874", "", }, CHARSETARRAY( cp874 ) }, { "cp895", "MS-DOS Code Page 895 Kamenicky encoding", { "CP895", "895", "", "", "", "", "", }, CHARSETARRAY( cp895 ) }, { "cp1250", "Windows-1250 Central and Eastern European", { "CP1250", "WINDOWS-1250", "MS-EE", "", "", "", "", }, CHARSETARRAY( cp1250 ) }, { "cp1251", "Windows-1251 Cyrillic", { "CP1251", "WINDOWS-1251", "MS-CYRL", "", "", "", "", }, CHARSETARRAY( cp1251 ) }, { "cp1252", "Windows-1252 ISO 8859-1 superset", { "CP1252", "WINDOWS-1252", "MS-ANSI", "", "", "", "", }, CHARSETARRAY( cp1252 ) }, { "cp1253", "Windows-1253 Greek", { "CP1253", "WINDOWS-1253", "MS-GREEK", "", "", "", "", }, CHARSETARRAY( cp1253 ) }, { "cp1254", "Windows-1254 Turkish", { "CP1254", "WINDOWS-1254", "MS-TURK", "", "", "", "", }, CHARSETARRAY( cp1254 ) }, { "cp1255", "Windows-1255 ISO 8859-8 Hebrew", { "CP1255", "WINDOWS-1255", "MS-HEBR", "", "", "", "", }, CHARSETARRAY( cp1255 ) }, { "cp1256", "Windows-1256 Arabic", { "CP1256", "WINDOWS-1256", "MS-ARAB", "", "", "", "", }, CHARSETARRAY( cp1256 ) }, { "cp1257", "Windows-1257 Baltic languages", { "CP1257", "WINDOWS-1257", "WINBALTRIM", "", "", "", "", }, CHARSETARRAY( cp1257 ) }, { "cp1258", "Windows-1258 Vietnamese", { "CP1258", "WINDOWS-1258", "", "", "", "", "", }, CHARSETARRAY( cp1258 ) }, { "decmcs", "DEC Multinational Character Set", { "DECMCS", "", "", "", "", "", "", }, CHARSETARRAY( decmcs ) }, { "ebc037", "EBCDIC Codepage 037 Latin-1", { "EBC037", "", "", "", "", "", "", }, CHARSETARRAY( ebc037 ) }, { "ebc1026", "EBCDIC 1026 Turkish", { "EBC1026", "", "", "", "", "", "", }, CHARSETARRAY( ebc1026 ) }, { "ebc1047", "EBCDIC 1047 Latin 1", { "EBC1047", "", "", "", "", "", "", }, CHARSETARRAY( ebc1047 ) }, { "ebc500", "EBCDIC 500 Latin 1", { "EBC500", "", "", "", "", "", "", }, CHARSETARRAY( ebc500 ) }, { "ebc875", "EBCDIC 875 Greek", { "EBC875", "", "", "", "", "", "", }, CHARSETARRAY( ebc875 ) }, { "hp48", "HP48", { "HP48", "", "", "", "", "", "", }, CHARSETARRAY( hp48 ) }, { "hproman8", "HP Roman8", { "HPROMAN8", "", "", "", "", "", "", }, CHARSETARRAY( hproman8 ) }, { "iso646", "ISO/IEC 646", { "ISO646", "", "", "", "", "", "", }, CHARSETARRAY( iso646 ) }, { "iso646_irv", "ISO/IEC 646-IRV International Reference Variant", { "ISO646-IRV", "", "", "", "", "", "", }, CHARSETARRAY( iso646_irv ) }, { "iso646_ca", "ISO/IEC 646-CA Canada", { "ISO646-CA", "", "", "", "", "", "", }, CHARSETARRAY( iso646_ca ) }, { "iso646_ch", "ISO/IEC 646-CH", { "ISO646-CH", "", "", "", "", "", "", }, CHARSETARRAY( iso646_ch ) }, { "iso646_de", "ISO/IEC 646-DE Germany", { "ISO646-DE", "", "", "", "", "", "", }, CHARSETARRAY( iso646_de ) }, { "iso646_es", "ISO/IEC 646-ES Spain", { "ISO646-ES", "", "", "", "", "", "", }, CHARSETARRAY( iso646_es ) }, { "iso646_fi", "ISO/IEC 646-FI Finland", { "ISO646-FI", "", "", "", "", "", "", }, CHARSETARRAY( iso646_fi ) }, { "iso646_fr", "ISO/IEC 646-FR France", { "ISO646-FR", "", "", "", "", "", "", }, CHARSETARRAY( iso646_fr ) }, { "iso646_gb", "ISO/IEC 646-GB United Kingdom", { "ISO646-GB", "", "", "", "", "", "", }, CHARSETARRAY( iso646_gb ) }, { "iso646_it", "ISO/IEC 646-IT", { "ISO646-IT", "", "", "", "", "", "", }, CHARSETARRAY( iso646_it ) }, { "iso646_nl", "ISO/IEC 646-NL", { "ISO646-NL", "", "", "", "", "", "", }, CHARSETARRAY( iso646_nl ) }, { "iso646_no", "ISO/IEC 646-NO Norway", { "ISO646-NO", "", "", "", "", "", "", }, CHARSETARRAY( iso646_no ) }, { "iso646_pt", "ISO/IEC 646-PT Portugal", { "ISO646-PT", "", "", "", "", "", "", }, CHARSETARRAY( iso646_pt ) }, { "iso646_se", "ISO/IEC 646-SE Sweden", { "ISO646-SE", "", "", "", "", "", "", }, CHARSETARRAY( iso646_se ) }, { "iso8859_1", "ISO/IEC 8859-1:1998 Latin-1", { "ISO-8859-1", "CSISOLATIN", "LATIN1", "ISO-IR-100", "CP819", "IBM819", "ISO_8859-1", }, CHARSETARRAY( iso8859_1 ) }, { "iso8859_2", "ISO/IEC 8859-2:1999 Latin-2 Eastern European", { "ISO-8859-2", "CSISOLATIN2", "LATIN2", "ISO-IR-101", "ISO_8859-2", "ISO_8859-2:1987", "L2", }, CHARSETARRAY( iso8859_2 ) }, { "iso8859_3", "ISO/IEC 8859-3:1999 Latin-3 South European", { "ISO-8859-3", "CSISOLATIN3", "LATIN3", "ISO-IR-109", "ISO_8859-3", "ISO_8859-3:1988", "L3", }, CHARSETARRAY( iso8859_3 ) }, { "iso8859_4", "ISO/IEC 8859-4:1998 Latin-4 North European", { "ISO-8859-4", "CSISOLATIN4", "LATIN4", "ISO-IR-110", "ISO_8859-4", "ISO_8859-4:1988", "L4", }, CHARSETARRAY( iso8859_4 ) }, { "iso8859_5", "ISO/IEC 8859-5:1999 Latin/Cyrillic", { "ISO-8859-5", "CSISOLATINCYRILLIC", "CYRILLIC", "ISO-IR-144", "ISO_8859-5", "ISO_8859-5:1988", "", }, CHARSETARRAY( iso8859_5 ) }, { "iso8859_6", "ISO/IEC 8859-6:1999 Latin/Arabic", { "ISO-8859-6", "ARABIC", "ASMO-708", "CSISOLATINARABIC", "ECMA-114", "ISO-IR-127", "ISO_8859-6", }, CHARSETARRAY( iso8859_6 ) }, { "iso8859_7", "ISO/IEC 8859-7:2003 Latin/Greek", { "ISO-8859-7", "CSISOLATINGREEK", "GREEK", "ECMA-118", "ELOT_928", "GREEK8", "ISO-IR-126", }, CHARSETARRAY( iso8859_7 ) }, { "iso8859_8", "ISO/IEC 8859-8:1999 Latin/Hebrew", { "ISO-8859-8", "CSISOLATINHEBREW", "HEBREW", "ISO-IR-138", "ISO_8859-8", "ISO_8859-8:1988", "", }, CHARSETARRAY( iso8859_8 ) }, { "iso8859_9", "ISO/IEC 8859-9:1999 Latin-5 Turkish", { "ISO-8859-9", "CSISOLATIN5", "LATIN5", "ISO-IR-148", "ISO_8859-9", "ISO_8859-9:1989", "L5", }, CHARSETARRAY( iso8859_9 ) }, { "iso8859_10", "ISO/IEC 8859-10:1998 Latin-6 Nordic languages", { "ISO-8859-10", "CSISOLATIN6", "LATIN6", "ISO-IR-157", "ISO_8859-10", "ISO_8859-10:1992", "L6", }, CHARSETARRAY( iso8859_10 ) }, { "iso8859_11", "ISO/IEC 8859-11:2001 Latin/Thai", { "ISO-8859-11,", "TIS-620,", "TIS620,", "TACTIS", "", "", "", }, CHARSETARRAY( iso8859_11 ) }, { "iso8859_13", "ISO/IEC 8859-13:1998 Latin-7 Baltic Rim", { "ISO-8859-13", "CSISOLATIN7", "LATIN7", "ISO-IR-179", "ISO_8859-13", "L7", "", }, CHARSETARRAY( iso8859_13 ) }, { "iso8859_14", "ISO/IEC 8859-14:1998 Latin-8 Celtic", { "ISO-8859-14", "CSISOLATIN8", "LATIN8", "ISO-IR-199", "ISO_8859-14", "ISO_8859-14:1998", "L8", }, CHARSETARRAY( iso8859_14 ) }, { "iso8859_15", "ISO/IEC 8859-15:1999 Latin-9 Western European", { "ISO-8859-15", "ISO-IR-203", "ISO_8859-15", "ISO_8859-15:1998", "", "", "", }, CHARSETARRAY( iso8859_15 ) }, { "iso8859_16", "ISO/IEC 8859-16:2001 Latin-10 South-Eastern European", { "ISO-8859-16", "CSISOLATIN10", "LATIN10", "ISO-IR-226", "ISO_8859-16", "ISO_8859-16:2000", "", }, CHARSETARRAY( iso8859_16 ) }, { "koi8_r", "KOI8-R Kod Obmena Informatsiey, 8 bit Russian", { "KOI8-R", "KOI8R", "CSKOI8R", "", "", "", "", }, CHARSETARRAY( koi8_r ) }, { "koi8_u", "KOI8-U Kod Obmena Informatsiey, 8 bit Ukranian", { "KOI8-U", "KOI8U", "CSKOI8U", "", "", "", "", }, CHARSETARRAY( koi8_u ) }, { "mslinedr", "MS LineDraw", { "MSLINEDR", "", "", "", "", "", "", }, CHARSETARRAY( mslinedr ) }, { "nextstep", "NextStep", { "NEXTSTEP", "", "", "", "", "", "", }, CHARSETARRAY( nextstep ) }, { "symbol", "MS Windows Symbol Font", { "SYMBOL", "", "", "", "", "", "", }, CHARSETARRAY( symbol ) }, { "tex_dcr_in", "TeX dcr input for European Computer Roman Font", { "TEX_DCR_IN", "", "", "", "", "", "", }, CHARSETARRAY( tex_dcr_in ) }, { "tex_dcr_out", "TeX dcr output for European Computer Roman Font", { "TEX_DCR_OUT", "", "", "", "", "", "", }, CHARSETARRAY( tex_dcr_out ) }, }; int nallcharconvert = ARRAYSIZE( allcharconvert ); char * charset_get_xmlname( int n ) { static char unknown[] = "???"; static char utf8[] = "UTF-8"; static char gb18030[] = "GB18030"; char *ret = unknown; if ( n>=0 && n < nallcharconvert ) { ret = allcharconvert[n].aliases[0]; } else if ( n==CHARSET_UNICODE ) { ret = utf8; } else if ( n==CHARSET_GB18030 ) { ret = gb18030; } return ret; } int charset_find( char *name ) { int i, j, ret = CHARSET_UNKNOWN; if ( name==NULL ) return ret; for ( i=0; i #include #include #include #include "is_ws.h" #include "strsearch.h" #include "newstr.h" #include "newstr_conv.h" #include "fields.h" #include "list.h" #include "name.h" #include "reftypes.h" #include "biblatexin.h" extern const char progname[]; static list find = { 0, 0, NULL, 0 }; static list replace = { 0, 0, NULL, 0 }; /***************************************************** PUBLIC: void biblatexin_initparams() *****************************************************/ void biblatexin_initparams( param *p, const char *progname ) { p->readformat = BIBL_BIBLATEXIN; p->charsetin = BIBL_CHARSET_DEFAULT; p->charsetin_src = BIBL_SRC_DEFAULT; p->latexin = 1; p->xmlin = 0; p->utf8in = 0; p->nosplittitle = 0; p->verbose = 0; p->addcount = 0; p->output_raw = 0; p->readf = biblatexin_readf; p->processf = biblatexin_processf; p->cleanf = biblatexin_cleanf; p->typef = biblatexin_typef; p->convertf = biblatexin_convertf; p->all = biblatex_all; p->nall = biblatex_nall; list_init( &(p->asis) ); list_init( &(p->corps) ); if ( !progname ) p->progname = NULL; else p->progname = strdup( progname ); } /***************************************************** PUBLIC: int biblatexin_readf() *****************************************************/ /* * readf can "read too far", so we store this information in line, thus * the next new text is in line, either from having read too far or * from the next chunk obtained via newstr_fget() * * return 1 on success, 0 on error/end-of-file * */ static int readmore( FILE *fp, char *buf, int bufsize, int *bufpos, newstr *line ) { if ( line->len ) return 1; else return newstr_fget( fp, buf, bufsize, bufpos, line ); } /* * readf() * * returns zero if cannot get reference and hit end of-file * returns 1 if last reference in file, 2 if reference within file */ int biblatexin_readf( FILE *fp, char *buf, int bufsize, int *bufpos, newstr *line, newstr *reference, int *fcharset ) { int haveref = 0; char *p; while ( haveref!=2 && readmore( fp, buf, bufsize, bufpos, line ) ) { if ( line->len == 0 ) continue; /* blank line */ p = &(line->data[0]); p = skip_ws( p ); if ( *p == '%' ) { /* commented out line */ newstr_empty( line ); continue; } if ( *p == '@' ) haveref++; if ( haveref && haveref<2 ) { newstr_strcat( reference, p ); newstr_addchar( reference, '\n' ); newstr_empty( line ); } else if ( !haveref ) newstr_empty( line ); } *fcharset = CHARSET_UNKNOWN; return haveref; } /***************************************************** PUBLIC: int biblatexin_processf() *****************************************************/ static char * process_biblatextype( char *p, newstr *type ) { newstr tmp; newstr_init( &tmp ); if ( *p=='@' ) p++; p = newstr_cpytodelim( &tmp, p, "{( \t\r\n", 0 ); p = skip_ws( p ); if ( *p=='{' || *p=='(' ) p++; p = skip_ws( p ); if ( tmp.len ) newstr_strcpy( type, tmp.data ); else newstr_empty( type ); newstr_free( &tmp ); return p; } static char * process_biblatexid( char *p, newstr *id ) { char *start_p = p; newstr tmp; newstr_init( &tmp ); p = newstr_cpytodelim( &tmp, p, ",", 1 ); if ( tmp.len ) { if ( strchr( tmp.data, '=' ) ) { /* Endnote writes biblatex files w/o fields, try to * distinguish via presence of an equal sign.... if * it's there, assume that it's a tag/data pair instead * and roll back. */ p = start_p; newstr_empty( id ); } else { newstr_strcpy( id, tmp.data ); } } else { newstr_empty( id ); } newstr_free( &tmp ); return skip_ws( p ); } static char * biblatex_tag( char *p, newstr *tag ) { p = newstr_cpytodelim( tag, skip_ws( p ), "= \t\r\n", 0 ); return skip_ws( p ); } static char * biblatex_data( char *p, fields *bibin, list *tokens ) { unsigned int nbracket = 0, nquotes = 0; char *startp = p; newstr tok, *s; newstr_init( &tok ); while ( p && *p ) { if ( !nquotes && !nbracket ) { if ( *p==',' || *p=='=' || *p=='}' || *p==')' ) goto out; } if ( *p=='\"' && nbracket==0 && ( p==startp || *(p-1)!='\\' ) ) { nquotes = !nquotes; newstr_addchar( &tok, *p ); if ( !nquotes ) { s = list_add( tokens, &tok ); if ( !s ) { p = NULL; goto outerr; } newstr_empty( &tok ); } } else if ( *p=='#' && !nquotes && !nbracket ) { if ( tok.len ) { s = list_add( tokens, &tok ); if ( !s ) { p = NULL; goto outerr; } } newstr_strcpy( &tok, "#" ); s = list_add( tokens, &tok ); if ( !s ) { p = NULL; goto outerr; } newstr_empty( &tok ); } else if ( *p=='{' && !nquotes && ( p==startp || *(p-1)!='\\' ) ) { nbracket++; newstr_addchar( &tok, *p ); } else if ( *p=='}' && !nquotes && ( p==startp || *(p-1)!='\\' ) ) { nbracket--; newstr_addchar( &tok, *p ); if ( nbracket==0 ) { s = list_add( tokens, &tok ); if ( !s ) { p = NULL; goto outerr; } newstr_empty( &tok ); } } else if ( !is_ws( *p ) || nquotes || nbracket ) { if ( !is_ws( *p ) ) newstr_addchar( &tok, *p ); else { if ( tok.len!=0 && *p!='\n' && *p!='\r' ) newstr_addchar( &tok, *p ); else if ( tok.len!=0 && (*p=='\n' || *p=='\r')) { newstr_addchar( &tok, ' ' ); while ( is_ws( *(p+1) ) ) p++; } } } else if ( is_ws( *p ) ) { if ( tok.len ) { s = list_add( tokens, &tok ); if ( !s ) { p = NULL; goto outerr; } newstr_empty( &tok ); } } p++; } out: if ( nbracket!=0 ) { fprintf( stderr, "%s: Mismatch in number of brackets in reference.\n", progname ); } if ( nquotes!=0 ) { fprintf( stderr, "%s: Mismatch in number of quotes in reference.\n", progname ); } if ( tok.len ) { s = list_add( tokens, &tok ); if ( !s ) p = NULL; } outerr: newstr_free( &tok ); return p; } /* replace_strings() * * do string replacement -- only if unprotected by quotation marks or curly brackets */ static void replace_strings( list *tokens, fields *bibin ) { int i, n, ok; newstr *s; char *q; i = 0; while ( i < tokens->n ) { s = list_get( tokens, i ); if ( !strcmp( s->data, "#" ) ) { } else if ( s->data[0]!='\"' && s->data[0]!='{' ) { n = list_find( &find, s->data ); if ( n!=-1 ) { newstr_newstrcpy( s, list_get( &replace, n ) ); } else { q = s->data; ok = 1; while ( *q && ok ) { if ( !isdigit( *q ) ) ok = 0; q++; } if ( !ok ) { fprintf( stderr, "%s: Warning: Non-numeric " "BibTeX elements should be in quotations or " "curly brackets in reference.\n", progname ); } } } i++; } } static int string_concatenate( list *tokens, fields *bibin ) { int i, status; newstr *s, *t; i = 0; while ( i < tokens->n ) { s = list_get( tokens, i ); if ( !strcmp( s->data, "#" ) ) { if ( i==0 || i==tokens->n-1 ) { fprintf( stderr, "%s: Warning: Stray string concatenation " "('#' character) in reference\n", progname ); status = list_remove( tokens, i ); if ( status!=LIST_OK ) return BIBL_ERR_MEMERR; continue; } s = list_get( tokens, i-1 ); if ( s->data[0]!='\"' && s->data[s->len-1]!='\"' ) fprintf( stderr, "%s: Warning: String concentation should " "be used in context of quotations marks.\n", progname ); t = list_get( tokens, i+1 ); if ( t->data[0]!='\"' && t->data[s->len-1]!='\"' ) fprintf( stderr, "%s: Warning: String concentation should " "be used in context of quotations marks.\n", progname ); if ( ( s->data[s->len-1]=='\"' && t->data[0]=='\"') || (s->data[s->len-1]=='}' && t->data[0]=='{') ) { newstr_trimend( s, 1 ); newstr_trimbegin( t, 1 ); newstr_newstrcat( s, t ); } else { newstr_newstrcat( s, t ); } status = list_remove( tokens, i ); if ( status!=LIST_OK ) return BIBL_ERR_MEMERR; status = list_remove( tokens, i ); if ( status!=LIST_OK ) return BIBL_ERR_MEMERR; } else i++; } return BIBL_OK; } static char * process_biblatexline( char *p, newstr *tag, newstr *data, uchar stripquotes ) { int i, status; list tokens; newstr *s; newstr_empty( data ); p = biblatex_tag( p, tag ); if ( tag->len==0 ) return p; list_init( &tokens ); if ( *p=='=' ) p = biblatex_data( p+1, NULL, &tokens ); replace_strings( &tokens, NULL ); status = string_concatenate( &tokens, NULL ); if ( status!=BIBL_OK ) { p = NULL; goto out; } for ( i=0; idata[0]=='\"' && s->data[s->len-1]=='\"' ) || ( s->data[0]=='{' && s->data[s->len-1]=='}' ) ) { newstr_trimbegin( s, 1 ); newstr_trimend( s, 1 ); } newstr_newstrcat( data, list_get( &tokens, i ) ); } out: list_free( &tokens ); return p; } static int process_cite( fields *bibin, char *p, char *filename, long nref ) { int fstatus, status = BIBL_OK; newstr tag, data; newstrs_init( &tag, &data, NULL ); p = process_biblatextype( p, &data ); if ( data.len ) { fstatus = fields_add( bibin, "INTERNAL_TYPE", data.data, 0 ); if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; } } p = process_biblatexid ( p, &data ); if ( data.len ) { fstatus = fields_add( bibin, "REFNUM", data.data, 0 ); if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; } } while ( *p ) { p = process_biblatexline( p, &tag, &data, 1 ); if ( !p ) { status = BIBL_ERR_MEMERR; goto out; } /* no anonymous or empty fields allowed */ if ( tag.len && data.len ) { fstatus = fields_add( bibin, tag.data, data.data, 0 ); if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; } } newstrs_empty( &tag, &data, NULL ); } out: newstrs_free( &tag, &data, NULL ); return status; } /* process_string() * * Handle lines like: * * '@STRING{TL = {Tetrahedron Lett.}}' * * p should point to just after '@STRING' * * In BibTeX, if a string is defined several times, the last one is kept. * */ static int process_string( char *p ) { int n, status = BIBL_OK; newstr s1, s2, *s; newstrs_init( &s1, &s2, NULL ); while ( *p && *p!='{' && *p!='(' ) p++; if ( *p=='{' || *p=='(' ) p++; p = process_biblatexline( skip_ws( p ), &s1, &s2, 0 ); if ( s2.data ) { newstr_findreplace( &s2, "\\ ", " " ); if ( newstr_memerr( &s2 ) ) { status = BIBL_ERR_MEMERR; goto out; } } if ( s1.data ) { n = list_find( &find, s1.data ); if ( n==-1 ) { s = list_add( &find, &s1 ); if ( s==NULL ) { status = BIBL_ERR_MEMERR; goto out; } if ( s2.data ) s = list_add( &replace, &s2 ); else s = list_addc( &replace, "" ); if ( s==NULL ) { status = BIBL_ERR_MEMERR; goto out; } } else { if ( s2.data ) s = list_set( &replace, n, &s2 ); else s = list_setc( &replace, n, "" ); if ( s==NULL ) { status = BIBL_ERR_MEMERR; goto out; } } } out: newstrs_free( &s1, &s2, NULL ); return status; } int biblatexin_processf( fields *bibin, char *data, char *filename, long nref ) { if ( !strncasecmp( data, "@STRING", 7 ) ) { process_string( data+7 ); return 0; } else { process_cite( bibin, data, filename, nref ); return 1; } } /***************************************************** PUBLIC: void biblatexin_cleanf() *****************************************************/ static void biblatex_process_tilde( newstr *s ) { char *p, *q; int n = 0; p = q = s->data; if ( !p ) return; while ( *p ) { if ( *p=='~' ) { *q = ' '; } else if ( *p=='\\' && *(p+1)=='~' ) { n++; p++; *q = '~'; } else { *q = *p; } p++; q++; } *q = '\0'; s->len -= n; } static void biblatex_process_bracket( newstr *s ) { char *p, *q; int n = 0; p = q = s->data; if ( !p ) return; while ( *p ) { if ( *p=='\\' && ( *(p+1)=='{' || *(p+1)=='}' ) ) { n++; p++; *q = *p; q++; } else if ( *p=='{' || *p=='}' ) { n++; } else { *q = *p; q++; } p++; } *q = '\0'; s->len -= n; } static int biblatex_cleantoken( newstr *s ) { /* 'textcomp' annotations */ newstr_findreplace( s, "\\textit", "" ); newstr_findreplace( s, "\\textbf", "" ); newstr_findreplace( s, "\\textsl", "" ); newstr_findreplace( s, "\\textsc", "" ); newstr_findreplace( s, "\\textsf", "" ); newstr_findreplace( s, "\\texttt", "" ); newstr_findreplace( s, "\\textsubscript", "" ); newstr_findreplace( s, "\\textsuperscript", "" ); newstr_findreplace( s, "\\emph", "" ); newstr_findreplace( s, "\\url", "" ); /* Other text annotations */ newstr_findreplace( s, "\\it ", "" ); newstr_findreplace( s, "\\em ", "" ); newstr_findreplace( s, "\\%", "%" ); newstr_findreplace( s, "\\$", "$" ); while ( newstr_findreplace( s, " ", " " ) ) {} /* 'textcomp' annotations that we don't want to substitute on output*/ newstr_findreplace( s, "\\textdollar", "$" ); newstr_findreplace( s, "\\textunderscore", "_" ); biblatex_process_bracket( s ); biblatex_process_tilde( s ); if ( !newstr_memerr( s ) ) return BIBL_OK; else return BIBL_ERR_MEMERR; } static int biblatex_split( list *tokens, newstr *s ) { int i, n = s->len, nbrackets = 0, status = BIBL_OK; newstr tok, *t; newstr_init( &tok ); for ( i=0; idata[i]=='{' && ( i==0 || s->data[i-1]!='\\' ) ) { nbrackets++; newstr_addchar( &tok, '{' ); } else if ( s->data[i]=='}' && ( i==0 || s->data[i-1]!='\\' ) ) { nbrackets--; newstr_addchar( &tok, '}' ); } else if ( !is_ws( s->data[i] ) || nbrackets ) { newstr_addchar( &tok, s->data[i] ); } else if ( is_ws( s->data[i] ) ) { if ( newstr_memerr( &tok ) ) { status = BIBL_ERR_MEMERR; goto out; } if ( tok.len ) { t = list_add( tokens, &tok ); if ( !t ) { status = BIBL_ERR_MEMERR; goto out; } } newstr_empty( &tok ); } } if ( tok.len ) { if ( newstr_memerr( &tok ) ) { status = BIBL_ERR_MEMERR; goto out; } t = list_add( tokens, &tok ); if ( !t ) { status = BIBL_ERR_MEMERR; goto out; } } for ( i=0; in; ++i ) { t = list_get( tokens, i ); newstr_trimstartingws( t ); newstr_trimendingws( t ); if ( newstr_memerr( t ) ) { status = BIBL_ERR_MEMERR; goto out; } } out: newstr_free( &tok ); return status; } static int biblatexin_addtitleurl( fields *info, newstr *in ) { int fstatus, status = BIBL_OK; newstr s; char *p; newstr_init( &s ); /* skip past "\href{" */ p = newstr_cpytodelim( &s, in->data + 6, "}", 1 ); if ( newstr_memerr( &s ) ) { status = BIBL_ERR_MEMERR; goto out; } fstatus = fields_add( info, "URL", s.data, 0 ); if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; } p = newstr_cpytodelim( &s, p, "", 0 ); if ( newstr_memerr( &s ) ) { status = BIBL_ERR_MEMERR; goto out; } newstr_swapstrings( &s, in ); out: newstr_free( &s ); return status; } static int is_name_tag( newstr *tag ) { if ( tag->len ) { if ( !strcasecmp( tag->data, "author" ) ) return 1; if ( !strcasecmp( tag->data, "editor" ) ) return 1; if ( !strcasecmp( tag->data, "editorb" ) ) return 1; if ( !strcasecmp( tag->data, "editorc" ) ) return 1; if ( !strcasecmp( tag->data, "director" ) ) return 1; if ( !strcasecmp( tag->data, "producer" ) ) return 1; if ( !strcasecmp( tag->data, "execproducer" ) ) return 1; if ( !strcasecmp( tag->data, "writer" ) ) return 1; if ( !strcasecmp( tag->data, "redactor" ) ) return 1; if ( !strcasecmp( tag->data, "annotator" ) ) return 1; if ( !strcasecmp( tag->data, "commentator" ) ) return 1; if ( !strcasecmp( tag->data, "translator" ) ) return 1; if ( !strcasecmp( tag->data, "foreword" ) ) return 1; if ( !strcasecmp( tag->data, "afterword" ) ) return 1; if ( !strcasecmp( tag->data, "introduction" ) ) return 1; } return 0; } static int is_url_tag( newstr *tag ) { if ( tag->len ) { if ( !strcasecmp( tag->data, "url" ) ) return 1; } return 0; } static int biblatexin_cleandata( newstr *tag, newstr *s, fields *info, param *p ) { list tokens; newstr *tok; int i, status = BIBL_OK; if ( !s->len ) return status; /* protect url from undergoing any parsing */ if ( is_url_tag( tag ) ) return status; list_init( &tokens ); biblatex_split( &tokens, s ); for ( i=0; ilatexin && !is_name_tag( tag ) ) { status = biblatex_cleantoken( &(tokens.str[i]) ); if ( status!=BIBL_OK ) goto out; } } newstr_empty( s ); for ( i=0; i0 ) newstr_addchar( s, ' ' ); newstr_newstrcat( s, tok ); } out: list_free( &tokens ); return status; } static long biblatexin_findref( bibl *bin, char *citekey ) { int n; long i; for ( i=0; inrefs; ++i ) { n = fields_find( bin->ref[i], "refnum", -1 ); if ( n==-1 ) continue; if ( !strcmp( bin->ref[i]->data[n].data, citekey ) ) return i; } return -1; } static void biblatexin_nocrossref( bibl *bin, long i, int n, param *p ) { int n1 = fields_find( bin->ref[i], "REFNUM", -1 ); if ( p->progname ) fprintf( stderr, "%s: ", p->progname ); fprintf( stderr, "Cannot find cross-reference '%s'", bin->ref[i]->data[n].data); if ( n1!=-1 ) fprintf( stderr, " for reference '%s'\n", bin->ref[i]->data[n1].data ); fprintf( stderr, "\n" ); } static int biblatexin_crossref_oneref( fields *ref, fields *cross ) { int j, nl, ntype, fstatus; char *type, *nt, *nd; ntype = fields_find( ref, "INTERNAL_TYPE", -1 ); type = ( char * ) fields_value( ref, ntype, FIELDS_CHRP_NOUSE ); for ( j=0; jn; ++j ) { nt = ( char * ) fields_tag( cross, j, FIELDS_CHRP_NOUSE ); if ( !strcasecmp( nt, "INTERNAL_TYPE" ) ) continue; if ( !strcasecmp( nt, "REFNUM" ) ) continue; if ( !strcasecmp( nt, "TITLE" ) ) { if ( !strcasecmp( type, "Inproceedings" ) || !strcasecmp( type, "Incollection" ) ) nt = "booktitle"; } nd = ( char * ) fields_value( cross, j, FIELDS_CHRP_NOUSE ); nl = fields_level( cross, j ) + 1; fstatus = fields_add( ref, nt, nd, nl ); if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR; } return BIBL_OK; } static int biblatexin_crossref( bibl *bin, param *p ) { int n, ncross, status = BIBL_OK; fields *ref, *cross; long i; for ( i=0; inrefs; ++i ) { ref = bin->ref[i]; n = fields_find( ref, "CROSSREF", -1 ); if ( n==-1 ) continue; fields_setused( ref, n ); ncross = biblatexin_findref(bin, (char*)fields_value(ref,n, FIELDS_CHRP_NOUSE)); if ( ncross==-1 ) { biblatexin_nocrossref( bin, i, n, p ); continue; } cross = bin->ref[ncross]; status = biblatexin_crossref_oneref( ref, cross ); if ( status!=BIBL_OK ) return status; } return status; } static int biblatexin_cleanref( fields *bibin, param *p ) { int i, n, status; newstr *t, *d; n = fields_num( bibin ); for ( i=0; idata, "AUTHORS" ) ) { newstr_findreplace( d, "\n", " " ); newstr_findreplace( d, "\r", " " ); } else if ( !strsearch( t->data, "ABSTRACT" ) || !strsearch( t->data, "SUMMARY" ) || !strsearch( t->data, "NOTE" ) ) { newstr_findreplace( d, "\n", "" ); newstr_findreplace( d, "\r", "" ); } } return BIBL_OK; } int biblatexin_cleanf( bibl *bin, param *p ) { int status; long i; for ( i=0; inrefs; ++i ) { status = biblatexin_cleanref( bin->ref[i], p ); if ( status!=BIBL_OK ) return status; } status = biblatexin_crossref( bin, p ); return status; } /***************************************************** PUBLIC: void biblatexin_typef() *****************************************************/ int biblatexin_typef( fields *bibin, char *filename, int nrefs, param *p, variants *all, int nall ) { char *refnum = ""; int reftype, n, nrefnum; n = fields_find( bibin, "INTERNAL_TYPE", 0 ); nrefnum = fields_find( bibin, "REFNUM", 0 ); if ( nrefnum!=-1 ) refnum = (bibin->data[nrefnum]).data; if ( n!=-1 ) /* figure out type */ reftype = get_reftype( (bibin->data[n]).data, nrefs, p->progname, all, nall, refnum ); else /* no type info, go for default */ reftype = get_reftype( "", nrefs, p->progname, all, nall, refnum ); return reftype; } /***************************************************** PUBLIC: int biblatexin_convertf(), returns BIBL_OK or BIBL_ERR_MEMERR *****************************************************/ /* is_utf8_emdash() * * Internally pages="A---B" will convert --- to a UTF8 * emdash = 0xE2 (-30) 0x80 (-128) 0x94 (-108) */ static int is_utf8_emdash( char *p ) { static char emdash[3] = { -30, -128, -108 }; if ( strncmp( p, emdash, 3 ) ) return 0; return 1; } /* is_utf8_endash() * * Internally pages="A--B" will convert -- to a UTF8 * endash = 0xE2 (-30) 0x80 (-128) 0x93 (-109) */ static int is_utf8_endash( char *p ) { static char endash[3] = { -30, -128, -109 }; if ( strncmp( p, endash, 3 ) ) return 0; return 1; } static int process_pages( fields *info, newstr *s, int level ) { int fstatus, status = BIBL_OK; newstr page; char *p; newstr_findreplace( s, " ", "" ); if ( s->len==0 ) return status; newstr_init( &page ); p = skip_ws( s->data ); while ( *p && !is_ws(*p) && *p!='-' && *p!=-30 ) newstr_addchar( &page, *p++ ); if ( page.len>0 ) { fstatus = fields_add( info, "PAGESTART", page.data, level ); if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; } } while ( *p && (is_ws(*p) || *p=='-' ) ) p++; if ( *p && is_utf8_emdash( p ) ) p+=3; if ( *p && is_utf8_endash( p ) ) p+=3; newstr_empty( &page ); while ( *p && !is_ws(*p) && *p!='-' && *p!=-30 ) newstr_addchar( &page, *p++ ); if ( page.len>0 ) { fstatus = fields_add( info, "PAGEEND", page.data, level ); if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; } } out: newstr_free( &page ); return status; } static int process_url( fields *info, char *p, int level ) { int fstatus; if ( !strncasecmp( p, "\\urllink", 8 ) ) fstatus = fields_add( info, "URL", p+8, level ); else if ( !strncasecmp( p, "\\url", 4 ) ) fstatus = fields_add( info, "URL", p+4, level ); else if ( !strncasecmp( p, "arXiv:", 6 ) ) fstatus = fields_add( info, "ARXIV", p+6, level ); else if ( !strncasecmp( p, "http://arxiv.org/abs/", 21 ) ) fstatus = fields_add( info, "ARXIV", p+21, level ); else if ( !strncasecmp( p, "http:", 5 ) ) fstatus = fields_add( info, "URL", p, level ); else fstatus = fields_add( info, "URL", p, level ); if ( fstatus==FIELDS_OK ) return BIBL_OK; else return BIBL_ERR_MEMERR; } /* process_howpublished() * * howpublished={}, * * Normally indicates the manner in which something was * published in lieu of a formal publisher, so typically * 'howpublished' and 'publisher' will never be in the * same reference. * * Occasionally, people put Diploma thesis information * into this field, so check for that first. */ static int process_howpublished( fields *info, char *p, int level ) { int fstatus; if ( !strncasecmp( p, "Diplom", 6 ) ) fstatus = fields_replace_or_add( info, "NGENRE", "Diploma thesis", level ); else if ( !strncasecmp( p, "Habilitation", 13 ) ) fstatus = fields_replace_or_add( info, "NGENRE", "Habilitation thesis", level ); else fstatus = fields_add( info, "PUBLISHER", p, level ); if ( fstatus==FIELDS_OK ) return BIBL_OK; else return BIBL_ERR_MEMERR; } static int process_thesistype( fields *info, char *p, int level ) { int fstatus; /* type in the @thesis is used to distinguish Ph.D. and Master's thesis */ if ( !strncasecmp( p, "phdthesis", 9 ) ) { fstatus = fields_replace_or_add( info, "NGENRE", "Ph.D. thesis", level ); } else if ( !strncasecmp( p, "mastersthesis", 13 ) || !strncasecmp( p, "masterthesis", 12 ) ) { fstatus = fields_replace_or_add( info, "NGENRE", "Masters thesis", level ); } else if ( !strncasecmp( p, "mathesis", 8 ) ) { fstatus = fields_replace_or_add( info, "NGENRE", "Masters thesis", level ); } else if ( !strncasecmp( p, "diploma", 7 ) ) { fstatus = fields_replace_or_add( info, "NGENRE", "Diploma thesis", level ); } else if ( !strncasecmp( p, "habilitation", 12 ) ) { fstatus = fields_replace_or_add( info, "NGENRE", "Habilitation thesis", level ); } if ( fstatus==FIELDS_OK ) return BIBL_OK; else return BIBL_ERR_MEMERR; } /* biblatex drops school field if institution is present */ static int process_school( fields *bibin, fields *info, char *tag, char *value, int level ) { int fstatus; if ( fields_find( bibin, "institution", LEVEL_ANY ) != -1 ) return BIBL_OK; else { fstatus = fields_add( info, tag, value, level ); if ( fstatus==FIELDS_OK ) return BIBL_OK; else return BIBL_ERR_MEMERR; } } /* biblatex drops school field if institution is present */ static int process_subtype( fields *bibin, fields *info, char *tag, char *value, int level ) { int fstatus; if ( !strcasecmp( value, "magazine" ) ) { fstatus = fields_add( info, "NGENRE", "magazine article", LEVEL_MAIN ); if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR; fstatus = fields_add( info, "NGENRE", "magazine", LEVEL_HOST ); if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR; } else if ( !strcasecmp( value, "newspaper" ) ) { fstatus = fields_add( info, "NGENRE", "newspaper article", LEVEL_MAIN ); if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR; fstatus = fields_add( info, "GENRE", "newspaper", LEVEL_HOST ); if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR; } return BIBL_OK; } static int process_eprint( fields *bibin, fields *info, int level ) { int neprint, netype, fstatus; char *eprint = NULL, *etype = NULL; neprint = fields_find( bibin, "eprint", -1 ); netype = fields_find( bibin, "eprinttype", -1 ); if ( neprint!=-1 ) eprint = bibin->data[neprint].data; if ( netype!=-1 ) etype = bibin->data[netype].data; if ( eprint && etype ) { if ( !strncasecmp( etype, "arxiv", 5 ) ) { fstatus = fields_add( info, "ARXIV", eprint, level ); if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR; } else if ( !strncasecmp( etype, "jstor", 5 ) ) { fstatus = fields_add( info, "JSTOR", eprint, level ); if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR; } else if ( !strncasecmp( etype, "pubmed", 6 ) ) { fstatus = fields_add( info, "PMID", eprint, level ); if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR; } else if ( !strncasecmp( etype, "medline", 7 ) ) { fstatus = fields_add( info, "MEDLINE", eprint, level ); if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR; } else { fstatus = fields_add( info, "EPRINT", eprint, level ); if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR; fstatus = fields_add( info, "EPRINTTYPE", etype, level ); if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR; } fields_setused( bibin, neprint ); fields_setused( bibin, netype ); } else if ( eprint ) { fstatus = fields_add( info, "EPRINT", eprint, level ); if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR; fields_setused( bibin, neprint ); } else if ( etype ) { fstatus = fields_add( info, "EPRINTTYPE", etype, level ); if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR; fields_setused( bibin, netype ); } return BIBL_OK; } static void report( fields *f ) { int i, n; n = fields_num( f ); for ( i=0; iverbose && strcmp( tag, "INTERNAL_TYPE" ) ) { if ( p->progname ) fprintf( stderr, "%s: ", p->progname ); fprintf( stderr, " Cannot find tag '%s'\n", tag ); } } /* get_title_elements() * * find all of the biblatex title elements for the current level * internal "TITLE" -> "title", "booktitle", "maintitle" * internal "SUBTITLE" -> "subtitle", "booksubtitle", "mainsubtitle" * internal "TITLEADDON" -> "titleaddon", "booktitleaddon", "maintitleaddon" * * place in ttl, subttl, and ttladdon strings * * return 1 if an element is found, 0 if not */ static int get_title_elements( fields *bibin, int currlevel, int reftype, variants *all, int nall, newstr *ttl, newstr *subttl, newstr *ttladdon ) { int nfields, process, level, i, n; newstr *t, *d; char *newtag; newstrs_empty( ttl, subttl, ttladdon, NULL ); nfields = fields_num( bibin ); for ( i=0; ilen == 0 ) continue; n = translate_oldtag( t->data, reftype, all, nall, &process, &level, &newtag ); if ( n==-1 ) continue; if ( process != TITLE ) continue; if ( level != currlevel ) continue; fields_setused( bibin, i ); if ( !strcasecmp( newtag, "TITLE" ) ) { if ( ttl->len ) newstr_addchar( ttl, ' ' ); newstr_newstrcat( ttl, d ); } else if ( !strcasecmp( newtag, "SUBTITLE" ) ) { if ( subttl->len ) newstr_addchar( subttl, ' ' ); newstr_newstrcat( subttl, d ); } else if ( !strcasecmp( newtag, "TITLEADDON" ) ) { if ( ttladdon->len ) newstr_addchar( ttladdon, ' ' ); newstr_newstrcat( ttladdon, d ); } } return ( ttl->len>0 || subttl->len > 0 || ttladdon->len > 0 ); } /* attach_addon() * * Add titleaddon to the title. */ static void attach_addon( newstr *title, newstr *addon ) { if ( title->len ) { if ( title->data[title->len-1]!='.' ) newstr_addchar( title, '.' ); newstr_addchar( title, ' ' ); } newstr_newstrcat( title, addon ); } static int process_combined_title( fields *info, newstr *ttl, newstr *subttl, newstr *ttladdon, int currlevel ) { int fstatus, status = BIBL_OK; newstr combined; newstr_init( &combined ); newstr_newstrcpy( &combined, ttl ); if ( subttl->len ) { if ( combined.len && combined.data[combined.len-1]!=':' && combined.data[combined.len-1]!='?' ) newstr_addchar( &combined, ':' ); newstr_addchar( &combined, ' ' ); newstr_newstrcat( &combined, subttl ); } if ( ttladdon->len ) attach_addon( &combined, ttladdon ); if ( newstr_memerr( &combined ) ) { status = BIBL_ERR_MEMERR; goto out; } fstatus = fields_add( info, "TITLE", combined.data, currlevel ); if ( fstatus==FIELDS_OK ) status = BIBL_ERR_MEMERR; out: newstr_free( &combined ); return status; } static int process_separated_title( fields *info, newstr *ttl, newstr *subttl, newstr *ttladdon, int currlevel ) { int fstatus; if ( ttladdon->len ) { if ( subttl->len ) attach_addon( subttl, ttladdon ); else attach_addon( ttl, ttladdon ); } if ( ttl->len ) { fstatus = fields_add( info, "TITLE", ttl->data, currlevel ); if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR; } if ( subttl->len ) { fstatus = fields_add( info, "SUBTITLE", subttl->data, currlevel ); if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR; } return BIBL_OK; } static int process_title_all( fields *bibin, fields *info, int reftype, param *p, variants *all, int nall ) { int currlevel, found, status = BIBL_OK; newstr ttl, subttl, ttladdon; newstrs_init( &ttl, &subttl, &ttladdon, NULL ); for ( currlevel = 0; currlevelnosplittitle ) status = process_combined_title( info, &ttl, &subttl, &ttladdon, currlevel ); else status = process_separated_title( info, &ttl, &subttl, &ttladdon, currlevel ); if ( status!=BIBL_OK ) goto out; } out: newstrs_free( &ttl, &subttl, &ttladdon, NULL ); return status; } static int biblatex_matches_list( fields *info, char *tag, char *suffix, newstr *data, int level, list *names, int *match ) { int i, fstatus, status = BIBL_OK; newstr newtag; *match = 0; if ( names->n==0 ) return status; newstr_init( &newtag ); for ( i=0; in; ++i ) { if ( strcmp( data->data, list_getc( names, i ) ) ) continue; newstr_initstr( &newtag, tag ); newstr_strcat( &newtag, suffix ); fstatus = fields_add( info, newtag.data, data->data, level ); if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; } *match = 1; goto out; } out: newstr_free( &newtag ); return status; } static int biblatex_names( fields *info, char *tag, newstr *data, int level, list *asis, list *corps ) { int begin, end, ok, n, etal, i, match, status = BIBL_OK; list tokens; /* If we match the asis or corps list add and bail. */ status = biblatex_matches_list( info, tag, ":ASIS", data, level, asis, &match ); if ( match==1 || status!=BIBL_OK ) return status; status = biblatex_matches_list( info, tag, ":CORP", data, level, corps, &match ); if ( match==1 || status!=BIBL_OK ) return status; list_init( &tokens ); biblatex_split( &tokens, data ); for ( i=0; idata, editor_fields[i] ) ) n = i; ntype = fields_find( bibin, editor_types[n], LEVEL_ANY ); if ( ntype!=-1 ) { type = fields_value( bibin, ntype, FIELDS_CHRP_NOUSE ); if ( !strcasecmp( type, "collaborator" ) ) outtag = "COLLABORATOR"; else if ( !strcasecmp( type, "compiler" ) ) outtag = "COMPILER"; else if ( !strcasecmp( type, "redactor" ) ) outtag = "REDACTOR"; else if ( !strcasecmp( type, "director" ) ) outtag = "DIRECTOR"; else if ( !strcasecmp( type, "producer" ) ) outtag = "PRODUCER"; else if ( !strcasecmp( type, "none" ) ) outtag = "PERFORMER"; } return biblatex_names( info, outtag, value, level, asis, corps ); } static int biblatexin_simple( fields *f, char *tag, char *value, int level ) { int fstatus = fields_add( f, tag, value, level ); if ( fstatus==FIELDS_OK ) return BIBL_OK; else return BIBL_ERR_MEMERR; } int biblatexin_convertf( fields *bibin, fields *info, int reftype, param *p, variants *all, int nall ) { int process, level, i, n, nfields, status = BIBL_OK; newstr *t, *d; char *newtag; nfields = fields_num( bibin ); for ( i=0; ilen == 0 || d->len == 0 ) continue; n = translate_oldtag( t->data, reftype, all, nall, &process, &level, &newtag ); if ( n==-1 ) { biblatexin_notag( p, t->data ); continue; } switch ( process ) { case SIMPLE: status = biblatexin_simple( info, newtag, d->data, level ); fields_setused( bibin, i ); break; case PERSON: status = biblatex_names( info, newtag, d, level, &(p->asis), &(p->corps) ); fields_setused( bibin, i ); break; case BLT_EDITOR: status = process_editor( bibin, info, t, d, level, &(p->asis), &(p->corps) ); fields_setused( bibin, i ); break; case PAGES: status = process_pages( info, d, level); fields_setused( bibin, i ); break; case HOWPUBLISHED: status = process_howpublished( info, d->data, level ); fields_setused( bibin, i ); break; case BT_URL: status = process_url( info, d->data, level ); fields_setused( bibin, i ); break; case BT_GENRE: status = biblatexin_simple( info, "NGENRE", d->data, level ); fields_setused( bibin, i ); break; case BT_EPRINT: status = process_eprint( bibin, info, level ); fields_setused( bibin, i ); break; case BLT_THESIS_TYPE: status = process_thesistype( info, d->data, level ); fields_setused( bibin, i ); break; case BLT_SCHOOL: status = process_school( bibin, info, newtag, d->data, level ); fields_setused( bibin, i ); break; case BLT_SUBTYPE: status = process_subtype( bibin, info, newtag, d->data, level ); fields_setused( bibin, i ); break; case BLT_SKIP: status = BIBL_OK; fields_setused( bibin, i ); break; case TITLE: status = BIBL_OK; /* delay title processing until later */ break; default: status = BIBL_OK; break; } if ( status!=BIBL_OK ) return status; } status = process_title_all( bibin, info, reftype, p, all, nall ); if ( status==BIBL_OK && p->verbose ) report( info ); return status; } hs-bibutils-5.5/bibutils/bibl.c0000644000000000000000000000360412445605732014702 0ustar0000000000000000/* * bibl.c * * Copyright (c) Chris Putnam 2005-2014 * * Source code released under the GPL version 2 * */ #include #include #include "bibl.h" void bibl_init( bibl *b ) { b->nrefs = b->maxrefs = 0L; b->ref = NULL; } static int bibl_malloc( bibl * b ) { int alloc = 50; b->nrefs = 0; b->ref = ( fields ** ) malloc( sizeof( fields* ) * alloc ); if ( b->ref ) { b->maxrefs = alloc; return 1; } else { fprintf( stderr, "%s: allocation error\n", __FUNCTION__ ); return 0; } } static int bibl_realloc( bibl * b ) { int alloc = b->maxrefs * 2; fields **more; more = ( fields ** ) realloc( b->ref, sizeof( fields* ) * alloc ); if ( more ) { b->ref = more; b->maxrefs = alloc; return 1; } else { fprintf( stderr, "%s: allocation error\n", __FUNCTION__ ); return 0; } } int bibl_addref( bibl *b, fields *ref ) { int ok = 1; if ( b->maxrefs==0 ) ok = bibl_malloc( b ); else if ( b->nrefs >= b->maxrefs ) ok = bibl_realloc( b ); if ( ok ) { b->ref[ b->nrefs ] = ref; b->nrefs++; } return ok; } void bibl_free( bibl *b ) { long i; for ( i=0; inrefs; ++i ) fields_free( b->ref[i] ); if ( b->ref ) free( b->ref ); b->ref = NULL; b->nrefs = b->maxrefs = 0; } /* bibl_copy() * * returns 1 on success, 0 on failure (memory error) */ int bibl_copy( bibl *bout, bibl *bin ) { fields *refin, *refout; int i, j, n, status, ok, level; char *tag, *value; for ( i=0; inrefs; ++i ) { refin = bin->ref[i]; refout = fields_new(); if ( !refout ) return 0; n = fields_num( refin ); for ( j=0; j #include #include #include #include "newstr.h" #include "newstr_conv.h" #include "fields.h" #include "name.h" #include "title.h" #include "serialno.h" #include "reftypes.h" #include "doi.h" #include "risin.h" /***************************************************** PUBLIC: void risin_initparams() *****************************************************/ void risin_initparams( param *p, const char *progname ) { p->readformat = BIBL_RISIN; p->charsetin = BIBL_CHARSET_DEFAULT; p->charsetin_src = BIBL_SRC_DEFAULT; p->latexin = 0; p->xmlin = 0; p->utf8in = 0; p->nosplittitle = 0; p->verbose = 0; p->addcount = 0; p->output_raw = 0; p->readf = risin_readf; p->processf = risin_processf; p->cleanf = NULL; p->typef = risin_typef; p->convertf = risin_convertf; p->all = ris_all; p->nall = ris_nall; list_init( &(p->asis) ); list_init( &(p->corps) ); if ( !progname ) p->progname = NULL; else p->progname = strdup( progname ); } /***************************************************** PUBLIC: int risin_readf() *****************************************************/ /* RIS definition of a tag is strict: character 1 = uppercase alphabetic character character 2 = uppercase alphabetic character or digit character 3 = space (ansi 32) character 4 = space (ansi 32) character 5 = dash (ansi 45) character 6 = space (ansi 32) */ static int risin_istag( char *buf ) { if (! (buf[0]>='A' && buf[0]<='Z') ) return 0; if (! (((buf[1]>='A' && buf[1]<='Z'))||(buf[1]>='0'&&buf[1]<='9')) ) return 0; if (buf[2]!=' ') return 0; if (buf[3]!=' ') return 0; if (buf[4]!='-') return 0; if (buf[5]!=' ') return 0; return 1; } static int readmore( FILE *fp, char *buf, int bufsize, int *bufpos, newstr *line ) { if ( line->len ) return 1; else return newstr_fget( fp, buf, bufsize, bufpos, line ); } int risin_readf( FILE *fp, char *buf, int bufsize, int *bufpos, newstr *line, newstr *reference, int *fcharset ) { int haveref = 0, inref = 0, readtoofar = 0; unsigned char *up; char *p; *fcharset = CHARSET_UNKNOWN; while ( !haveref && readmore( fp, buf, bufsize, bufpos, line ) ) { if ( !line->data || line->len==0 ) continue; p = &( line->data[0] ); /* Recognize UTF8 BOM */ up = (unsigned char * ) p; if ( line->len > 2 && up[0]==0xEF && up[1]==0xBB && up[2]==0xBF ) { *fcharset = CHARSET_UNICODE; p += 3; } /* Each reference starts with 'TY - ' && * ends with 'ER - ' */ if ( strncmp(p,"TY - ",6)==0 ) { if ( !inref ) { inref = 1; } else { /* we've read too far.... */ readtoofar = 1; inref = 0; } } if ( risin_istag( p ) ) { if ( !inref ) { fprintf(stderr,"Warning. Tagged line not " "in properly started reference.\n"); fprintf(stderr,"Ignored: '%s'\n", p ); } else if ( !strncmp(p,"ER -",5) ) { inref = 0; } else { newstr_addchar( reference, '\n' ); newstr_strcat( reference, p ); } } /* not a tag, but we'll append to last values ...*/ else if ( inref && strncmp(p,"ER -",5)) { newstr_addchar( reference, '\n' ); newstr_strcat( reference, p ); } if ( !inref && reference->len ) haveref = 1; if ( !readtoofar ) newstr_empty( line ); } if ( inref ) haveref = 1; return haveref; } /***************************************************** PUBLIC: int risin_processf() *****************************************************/ static char* process_line2( newstr *tag, newstr *data, char *p ) { while ( *p==' ' || *p=='\t' ) p++; while ( *p && *p!='\r' && *p!='\n' ) newstr_addchar( data, *p++ ); while ( *p=='\r' || *p=='\n' ) p++; return p; } static char* process_line( newstr *tag, newstr *data, char *p ) { int i = 0; while ( i<6 && *p ) { if ( i<2 ) newstr_addchar( tag, *p ); p++; i++; } while ( *p==' ' || *p=='\t' ) p++; while ( *p && *p!='\r' && *p!='\n' ) newstr_addchar( data, *p++ ); newstr_trimendingws( data ); while ( *p=='\n' || *p=='\r' ) p++; return p; } int risin_processf( fields *risin, char *p, char *filename, long nref ) { newstr tag, data; int status, n; newstrs_init( &tag, &data, NULL ); while ( *p ) { if ( risin_istag( p ) ) { p = process_line( &tag, &data, p ); /* no anonymous fields allowed */ if ( tag.len ) status = fields_add( risin, tag.data, data.data, 0 ); if ( status!=FIELDS_OK ) return 0; } else { p = process_line2( &tag, &data, p ); n = fields_num( risin ); if ( data.len && n>0 ) { newstr *od; od = fields_value( risin, n-1, FIELDS_STRP ); newstr_addchar( od, ' ' ); newstr_strcat( od, data.data ); } } newstrs_empty( &tag, &data, NULL ); } newstrs_free( &tag, &data, NULL ); return 1; } /***************************************************** PUBLIC: int risin_typef() *****************************************************/ int risin_typef( fields *risin, char *filename, int nref, param *p, variants *all, int nall ) { char *refnum = ""; int n, reftype, nreftype; n = fields_find( risin, "TY", 0 ); nreftype = fields_find( risin, "ID", 0 ); if ( nreftype!=-1 ) refnum = risin[n].data->data; if ( n!=-1 ) reftype = get_reftype( (risin[n].data)->data, nref, p->progname, all, nall, refnum ); else reftype = get_reftype( "", nref, p->progname, all, nall, refnum ); /*default */ return reftype; } /***************************************************** PUBLIC: int risin_convertf() *****************************************************/ /* oxfordjournals hide the DOI in the NOTES N1 field */ static int risin_addnotes( fields *f, char *tag, newstr *s, int level ) { int doi, status; doi = is_doi( s->data ); if ( doi!=-1 ) status = fields_add( f, "DOI", &(s->data[doi]), level ); else status = fields_add( f, tag, s->data, level ); if ( status==FIELDS_OK ) return BIBL_OK; else return BIBL_ERR_MEMERR; } static int is_uri_file_scheme( char *p ) { if ( !strncmp( p, "file:", 5 ) ) return 5; return 0; } static int is_uri_remote_scheme( char *p ) { char *scheme[] = { "http:", "ftp:", "git:", "gopher:" }; int i, len, nschemes = sizeof( scheme ) / sizeof( scheme[0] ); for ( i=0; idata ); if ( n ) { /* skip past "file:" and store only actual path */ p = s->data + n; status = fields_add( f, tag, p, level ); if ( status==FIELDS_OK ) return BIBL_OK; else return BIBL_ERR_MEMERR; } /* if URL is http:, ftp:, etc. store as a URL */ n = is_uri_remote_scheme( s->data ); if ( n ) { status = fields_add( f, "URL", s->data, level ); if ( status==FIELDS_OK ) return BIBL_OK; else return BIBL_ERR_MEMERR; } /* badly formed, RIS wants URI, but store value anyway */ status = fields_add( f, tag, s->data, level ); if ( status==FIELDS_OK ) return BIBL_OK; else return BIBL_ERR_MEMERR; } /* scopus puts DOI in the DO or DI tag, but it needs cleaning */ static int risin_adddoi( fields *f, char *tag, newstr *s, int level ) { int status, doi; doi = is_doi( s->data ); if ( doi!=-1 ) { status = fields_add( f, "DOI", &(s->data[doi]), level ); if ( status==FIELDS_OK ) return BIBL_OK; else return BIBL_ERR_MEMERR; } else return BIBL_OK; } static int risin_adddate( fields *f, char *tag, newstr *d, int level ) { char *p = d->data; newstr date; int part, status; part = ( !strncasecmp( tag, "PART", 4 ) ); newstr_init( &date ); while ( *p && *p!='/' ) newstr_addchar( &date, *p++ ); if ( *p=='/' ) p++; if ( date.len>0 ) { if ( part ) status = fields_add( f, "PARTYEAR", date.data, level ); else status = fields_add( f, "YEAR", date.data, level ); if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR; } newstr_empty( &date ); while ( *p && *p!='/' ) newstr_addchar( &date, *p++ ); if ( *p=='/' ) p++; if ( date.len>0 ) { if ( part ) status = fields_add( f, "PARTMONTH", date.data, level ); else status = fields_add( f, "MONTH", date.data, level ); if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR; } newstr_empty( &date ); while ( *p && *p!='/' ) newstr_addchar( &date, *p++ ); if ( *p=='/' ) p++; if ( date.len>0 ) { if ( part ) status = fields_add( f, "PARTDAY", date.data, level ); else status = fields_add( f, "DAY", date.data, level ); if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR; } newstr_empty( &date ); while ( *p ) newstr_addchar( &date, *p++ ); if ( date.len>0 ) { if ( part ) status = fields_add( f, "PARTDATEOTHER", date.data,level); else status = fields_add( f, "DATEOTHER", date.data, level ); if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR; } newstr_free( &date ); return BIBL_OK; } static void risin_report_notag( param *p, char *tag ) { if ( p->verbose && strcmp( tag, "TY" ) ) { if ( p->progname ) fprintf( stderr, "%s: ", p->progname ); fprintf( stderr, "Did not identify RIS tag '%s'\n", tag ); } } static int risin_simple( fields *f, char *tag, char *value, int level ) { int fstatus = fields_add( f, tag, value, level ); if ( fstatus==FIELDS_OK ) return BIBL_OK; else return BIBL_ERR_MEMERR; } int risin_convertf( fields *risin, fields *f, int reftype, param *p, variants *all, int nall ) { int process, level, i, n, nfields, ok, fstatus, status = BIBL_OK; char *outtag, *tag, *value; newstr *t, *d; nfields = fields_num( risin ); for ( i=0; idata, reftype, all, nall, &process, &level, &outtag ); if ( n==-1 ) { risin_report_notag( p, t->data ); continue; } if ( process==ALWAYS ) continue; /* add in core code */ d = fields_value( risin, i, FIELDS_STRP ); switch ( process ) { case SIMPLE: status = risin_simple( f, outtag, d->data, level ); break; case PERSON: ok = name_add( f, outtag, d->data, level, &(p->asis), &(p->corps) ); if ( ok ) status = BIBL_OK; else status = BIBL_ERR_MEMERR; break; case TITLE: ok = title_process( f, outtag, d->data, level, p->nosplittitle ); if ( ok ) status = BIBL_OK; else status = BIBL_ERR_MEMERR; break; case SERIALNO: ok = addsn( f, d->data, level ); if ( ok ) status = BIBL_OK; else status = BIBL_ERR_MEMERR; break; case DATE: status = risin_adddate( f, outtag, d, level ); break; case NOTES: status = risin_addnotes( f, outtag, d, level ); break; case DOI: status = risin_adddoi( f, outtag, d, level ); break; case LINKEDFILE: status = risin_addfile( f, outtag, d, level ); break; default: status = BIBL_OK; break; } if ( status!=BIBL_OK ) return status; } /* look for thesis-type hint */ if ( !strcasecmp( all[reftype].type, "THES" ) ) { for ( i=0; i #include #include #include #include "newstr.h" #include "fields.h" static void construct_url( char *prefix, newstr *id, newstr *id_url ) { if ( !strncasecmp( id->data, "http:", 5 ) ) newstr_newstrcpy( id_url, id ); else { newstr_strcpy( id_url, prefix ); if ( id->data[0]!='/' ) newstr_addchar( id_url, '/' ); newstr_newstrcat( id_url, id ); } } static int url_exists( fields *f, char *urltag, newstr *doi_url ) { int i, n; if ( urltag ) { n = fields_num( f ); for ( i=0; idata ) ) continue; return 1; } } return 0; } static void xxx_to_url( fields *f, int n, char *http_prefix, char *urltag, newstr *xxx_url ) { newstr_empty( xxx_url ); construct_url( http_prefix, fields_value( f, n, FIELDS_STRP ), xxx_url ); if ( url_exists( f, urltag, xxx_url ) ) newstr_empty( xxx_url ); } void doi_to_url( fields *f, int n, char *urltag, newstr *url ) { xxx_to_url( f, n, "http://dx.doi.org", urltag, url ); } void jstor_to_url( fields *f, int n, char *urltag, newstr *url ) { xxx_to_url( f, n, "http://www.jstor.org/stable", urltag, url ); } void pmid_to_url( fields *f, int n, char *urltag, newstr *url ) { xxx_to_url( f, n, "http://www.ncbi.nlm.nih.gov/pubmed", urltag, url ); } void arxiv_to_url( fields *f, int n, char *urltag, newstr *url ) { xxx_to_url( f, n, "http://arxiv.org/abs", urltag, url ); } /* Rules for the pattern: * '#' = number * isalpha() = match precisely (matchcase==1) or match regardless of case * (matchcase==0) * all others must match precisely */ static int string_pattern( char *s, char *pattern, int matchcase ) { int patlen, match, i; patlen = strlen( pattern ); if ( strlen( s ) < patlen ) return 0; /* too short */ for ( i=0; i #include "bibutils.h" extern void endout_write( fields *info, FILE *fp, param *p, unsigned long refnum ); extern void endout_writeheader( FILE *outptr, param *p ); extern void endout_initparams( param *p, const char *progname ); #endif hs-bibutils-5.5/bibutils/endin.c0000644000000000000000000004037412445605732015074 0ustar0000000000000000/* * endin.c * * Copyright (c) Chris Putnam 2003-2014 * * Program and source code released under the GPL version 2 * */ #include #include #include #include #include "is_ws.h" #include "doi.h" #include "newstr.h" #include "newstr_conv.h" #include "fields.h" #include "name.h" #include "title.h" #include "serialno.h" #include "reftypes.h" #include "endin.h" /***************************************************** PUBLIC: void endin_initparams() *****************************************************/ void endin_initparams( param *p, const char *progname ) { p->readformat = BIBL_ENDNOTEIN; p->charsetin = BIBL_CHARSET_DEFAULT; p->charsetin_src = BIBL_SRC_DEFAULT; p->latexin = 0; p->xmlin = 0; p->utf8in = 0; p->nosplittitle = 0; p->verbose = 0; p->addcount = 0; p->output_raw = 0; p->readf = endin_readf; p->processf = endin_processf; p->cleanf = endin_cleanf; p->typef = endin_typef; p->convertf = endin_convertf; p->all = end_all; p->nall = end_nall; list_init( &(p->asis) ); list_init( &(p->corps) ); if ( !progname ) p->progname = NULL; else p->progname = strdup( progname ); } /***************************************************** PUBLIC: int endin_readf() *****************************************************/ /* Endnote tag definition: character 1 = '%' character 2 = alphabetic character or digit (or other characters) character 3 = space (ansi 32) */ static int endin_istag( char *buf ) { const char others[]="!@#$^&*()+=?[~>"; if ( buf[0]!='%' ) return 0; if ( buf[2]!=' ' ) return 0; if ( isalpha( (unsigned char)buf[1] ) ) return 1; if ( isdigit( (unsigned char)buf[1] ) ) return 1; if ( strchr( others, buf[1] ) ) return 1; return 0; } static int readmore( FILE *fp, char *buf, int bufsize, int *bufpos, newstr *line ) { if ( line->len ) return 1; else return newstr_fget( fp, buf, bufsize, bufpos, line ); } int endin_readf( FILE *fp, char *buf, int bufsize, int *bufpos, newstr *line, newstr *reference, int *fcharset ) { int haveref = 0, inref = 0; unsigned char *up; char *p; *fcharset = CHARSET_UNKNOWN; while ( !haveref && readmore( fp, buf, bufsize, bufpos, line ) ) { if ( !line->data ) continue; p = &(line->data[0]); /* Skip Unicode header information */ /* = ef bb bf */ up = (unsigned char* ) p; if ( line->len > 2 && up[0]==0xEF && up[1]==0xBB && up[2]==0xBF ) { *fcharset = CHARSET_UNICODE; p += 3; } if ( !*p ) { if ( inref ) haveref = 1; /* blank line separates */ else continue; /* blank line to ignore */ } /* Each reference starts with a tag && ends with a blank line */ if ( endin_istag( p ) ) { if ( reference->len ) newstr_addchar( reference, '\n' ); newstr_strcat( reference, p ); inref = 1; } else if ( inref && p ) { newstr_addchar( reference, '\n' ); newstr_strcat( reference, p ); } newstr_empty( line ); } if ( reference->len ) haveref = 1; return haveref; } /***************************************************** PUBLIC: int endin_processf() *****************************************************/ static char* process_endline( newstr *tag, newstr *data, char *p ) { int i; i = 0; while ( i<2 && *p ) { newstr_addchar( tag, *p++); i++; } while ( *p==' ' || *p=='\t' ) p++; while ( *p && *p!='\r' && *p!='\n' ) newstr_addchar( data, *p++ ); newstr_trimendingws( data ); while ( *p=='\r' || *p=='\n' ) p++; return p; } static char * process_endline2( newstr *tag, newstr *data, char *p ) { while ( *p==' ' || *p=='\t' ) p++; while ( *p && *p!='\r' && *p!='\n' ) newstr_addchar( data, *p++ ); newstr_trimendingws( data ); while ( *p=='\r' || *p=='\n' ) p++; return p; } int endin_processf( fields *endin, char *p, char *filename, long nref ) { newstr tag, data; int status, n; newstrs_init( &tag, &data, NULL ); while ( *p ) { newstrs_empty( &tag, &data, NULL ); if ( endin_istag( p ) ) { p = process_endline( &tag, &data, p ); if ( data.len==0 ) continue; status = fields_add( endin, tag.data, data.data, 0 ); if ( status!=FIELDS_OK ) return 0; } else { p = process_endline2( &tag, &data, p ); /* endnote puts %K only on 1st line of keywords */ n = fields_num( endin ); if ( n>0 && data.len ) { if ( !strncmp( endin->tag[n-1].data, "%K", 2 ) ) { status = fields_add( endin, "%K", data.data, 0 ); if ( status!=FIELDS_OK ) return 0; } else { newstr_addchar( &(endin->data[n-1]), ' ' ); newstr_strcat( &(endin->data[n-1]), data.data ); } } } } newstrs_free( &tag, &data, NULL ); return 1; } /***************************************************** PUBLIC: int endin_typef() *****************************************************/ /* Endnote defaults if no %0 * * if %J & %V - journal article * if %B - book section * if %R & !%T - report * if %I & !%B & !%J & !%R - book * if !%B & !%J & !%R & !%I - journal article */ int endin_typef( fields *endin, char *filename, int nrefs, param *p, variants *all, int nall ) { char *refnum = ""; int n, reftype, nrefnum, nj, nv, nb, nr, nt, ni; n = fields_find( endin, "%0", 0 ); nrefnum = fields_find( endin, "%F", 0 ); if ( nrefnum!=-1 ) refnum = endin->data[nrefnum].data; if ( n!=-1 ) { reftype = get_reftype( endin->data[n].data, nrefs, p->progname, all, nall, refnum ); } else { nj = fields_find( endin, "%J", 0 ); nv = fields_find( endin, "%V", 0 ); nb = fields_find( endin, "%B", 0 ); nr = fields_find( endin, "%R", 0 ); nt = fields_find( endin, "%T", 0 ); ni = fields_find( endin, "%I", 0 ); if ( nj!=-1 && nv!=-1 ) { reftype = get_reftype( "Journal Article", nrefs, p->progname, all, nall, refnum ); } else if ( nb!=-1 ) { reftype = get_reftype( "Book Section", nrefs, p->progname, all, nall, refnum ); } else if ( nr!=-1 && nt==-1 ) { reftype = get_reftype( "Report", nrefs, p->progname, all, nall, refnum ); } else if ( ni!=-1 && nb==-1 && nj==-1 && nr==-1 ) { reftype = get_reftype( "Book", nrefs, p->progname, all, nall, refnum ); } else if ( nb==-1 && nj==-1 && nr==-1 && ni==-1 ) { reftype = get_reftype( "Journal Article", nrefs, p->progname, all, nall, refnum ); } else { reftype = get_reftype( "", nrefs, p->progname, all, nall, refnum ); /* default */ } } return reftype; } /***************************************************** PUBLIC: void endin_cleanf() *****************************************************/ /* Wiley puts multiple authors separated by commas on the %A lines. * We can detect this by finding the terminal comma in the data. * * "%A" "Author A. X. Last, Author N. B. Next," */ static int is_wiley_author( fields *endin, int n ) { newstr *t, *d; t = &(endin->tag[n]); if ( !t->data || strcmp( t->data, "%A" ) ) return 0; d = &( endin->data[n] ); if ( !(d->data) || d->len==0 ) return 0; if ( d->data[d->len-1]!=',' ) return 0; return 1; } static int cleanup_wiley_author( fields *endin, int n ) { newstr *instring, copy, name; int status, nauthor = 0; char *p; newstrs_init( ©, &name, NULL ); instring = &( endin->data[n] ); newstr_newstrcpy( ©, instring ); p = copy.data; while ( *p ) { if ( *p==',' ) { if ( newstr_memerr( &name ) ) return BIBL_ERR_MEMERR; if ( nauthor==0 ) { /* ...replace the first author in the field */ newstr_newstrcpy( instring, &name ); if ( newstr_memerr( instring ) ) return BIBL_ERR_MEMERR; } else { status = fields_add( endin, endin->tag[n].data, name.data, endin->level[n] ); if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR; } newstr_empty( &name ); nauthor++; p++; while ( is_ws( *p ) ) p++; } else { newstr_addchar( &name, *p ); p++; } } newstrs_free( ©, &name, NULL ); return BIBL_OK; } static int endin_cleanref( fields *endin ) { int i, n, status; n = fields_num( endin ); for ( i=0; inrefs; ++i ) endin_cleanref( bin->ref[i] ); return BIBL_OK; } /***************************************************** PUBLIC: int endin_convertf(), returns BIBL_OK or BIBL_ERR_MEMERR *****************************************************/ static int endin_addpage( fields *info, char *p, int level ) { newstr page; int status; newstr_init( &page ); p = newstr_cpytodelim( &page, skip_ws( p ), "- \t\r\n", 0 ); if ( newstr_memerr( &page ) ) return BIBL_ERR_MEMERR; if ( page.len>0 ) { status = fields_add( info, "PAGESTART", page.data, level ); if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR; } while ( *p && (is_ws(*p) || *p=='-' ) ) p++; p = newstr_cpytodelim( &page, p, "- \t\r\n", 0 ); if ( newstr_memerr( &page ) ) return BIBL_ERR_MEMERR; if ( page.len>0 ) { status = fields_add( info, "PAGEEND", page.data, level ); if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR; } newstr_free( &page ); return BIBL_OK; } /* month_convert() * convert month name to number in format MM, e.g. "January" -> "01" * if converted, return 1 * otherwise return 0 */ static int month_convert( char *in, char *out ) { char *month1[12]={ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; char *month2[12]={ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; int i, found = -1; for ( i=0; i<12 && found==-1; ++i ) { if ( !strcasecmp( in, month1[i] ) ) found = i; if ( !strcasecmp( in, month2[i] ) ) found = i; } if ( found==-1 ) return 0; if ( found > 8 ) sprintf( out, "%d", found+1 ); else sprintf( out, "0%d", found+1 ); return 1; } static int endin_adddate( fields *info, char *tag, char *newtag, char *p, int level ) { char *tags[3][2] = { { "YEAR", "PARTYEAR" }, { "MONTH", "PARTMONTH" }, { "DAY", "PARTDAY" } }; char month[10], *m; int part, status; newstr date; newstr_init( &date ); if ( !strncasecmp( newtag, "PART", 4 ) ) part = 1; else part = 0; /* %D YEAR */ if ( !strcasecmp( tag, "%D" ) ) { newstr_cpytodelim( &date, skip_ws( p ), "", 0 ); if ( newstr_memerr( &date ) ) return BIBL_ERR_MEMERR; if ( date.len>0 ) { status = fields_add( info, tags[0][part], date.data, level ); if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR; } } /* %8 MONTH DAY, YEAR */ /* %8 MONTH, YEAR */ /* %8 MONTH YEAR */ else if ( !strcasecmp( tag, "%8" ) ) { /* ...get month */ p = newstr_cpytodelim( &date, skip_ws( p ), " ,\n", 0 ); if ( newstr_memerr( &date ) ) return BIBL_ERR_MEMERR; if ( date.len>0 ) { if ( month_convert( date.data, month ) ) m = month; else m = date.data; status = fields_add( info, tags[1][part], m, level ); if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR; } p = skip_ws( p ); if ( *p==',' ) p++; /* ...get days */ p = newstr_cpytodelim( &date, skip_ws( p ), ",\n", 0 ); if ( newstr_memerr( &date ) ) return BIBL_ERR_MEMERR; if ( date.len>0 && date.len<3 ) { status = fields_add( info, tags[2][part], date.data, level ); if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR; } else if ( date.len==4 ) { status = fields_add( info, tags[0][part], date.data, level ); if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR; } p = skip_ws( p ); if ( *p==',' ) p++; /* ...get year */ p = newstr_cpytodelim( &date, skip_ws( p ), " \t\n\r", 0 ); if ( newstr_memerr( &date ) ) return BIBL_ERR_MEMERR; if ( date.len > 0 ) { status = fields_add( info, tags[0][part], date.data, level ); if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR; } } newstr_free( &date ); return BIBL_OK; } static int endin_addtype( fields *info, char *data, int level ) { lookups types[] = { { "GENERIC", "ARTICLE" }, { "BOOK", "BOOK" }, { "MANUSCRIPT", "MANUSCRIPT" }, { "CONFERENCE PROCEEDINGS", "INPROCEEDINGS"}, { "REPORT", "REPORT" }, { "COMPUTER PROGRAM", "BOOK" }, { "AUDIOVISUAL MATERIAL", "AUDIOVISUAL" }, { "ARTWORK", "BOOK" }, { "PATENT", "BOOK" }, { "BILL", "BILL" }, { "CASE", "CASE" }, { "JOURNAL ARTICLE", "ARTICLE" }, { "MAGAZINE ARTICLE", "ARTICLE" }, { "BOOK SECTION", "INBOOK" }, { "EDITED BOOK", "BOOK" }, { "NEWSPAPER ARTICLE", "NEWSARTICLE" }, { "THESIS", "PHDTHESIS" }, { "PERSONAL COMMUNICATION", "COMMUNICATION" }, { "ELECTRONIC SOURCE", "TEXT" }, { "FILM OR BROADCAST", "AUDIOVISUAL" }, { "MAP", "MAP" }, { "HEARING", "HEARING" }, { "STATUTE", "STATUTE" }, { "CHART OR TABLE", "CHART" }, { "WEB PAGE", "WEBPAGE" }, }; int ntypes = sizeof( types ) / sizeof( lookups ); int i, status, found=0; for ( i=0; iverbose ) { if ( p->progname ) fprintf( stderr, "%s: ", p->progname ); fprintf( stderr, "Cannot find tag '%s'='%s'\n", tag, data ); } } /* Wiley's EndNote download has DOI's in "%1" tag */ static int endin_addnotes( fields *info, char *tag, char *value, int level ) { int fstatus, doi; doi = is_doi( value ); if ( doi!=-1 ) fstatus = fields_add( info, "DOI", &(value[doi]), level ); else fstatus = fields_add( info, tag, value, level ); if ( fstatus==FIELDS_OK ) return BIBL_OK; else return BIBL_ERR_MEMERR; } static int endin_simple( fields *info, char *tag, char *value, int level ) { int fstatus = fields_add( info, tag, value, level ); if ( fstatus==FIELDS_OK ) return BIBL_OK; else return BIBL_ERR_MEMERR; } int endin_convertf( fields *endin, fields *info, int reftype, param *p, variants *all, int nall ) { int i, level, n, process, nfields, ok, fstatus, status = BIBL_OK; char *newtag, *t; newstr *d; nfields = fields_num( endin ); for ( i=0; ilen == 0 ) { fields_setused( endin, i ); continue; } /* * All refer format tags start with '%'. If we have one * that doesn't, assume that it comes from endx2xml * and just copy and paste to output */ t = fields_tag( endin, i, FIELDS_CHRP ); if ( t[0]!='%' ) { fstatus = fields_add( info, t, d->data, endin->level[i] ); if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR; continue; } n = translate_oldtag( t, reftype, all, nall, &process, &level, &newtag ); if ( n==-1 ) { endin_notag( p, t, d->data ); continue; } if ( process == ALWAYS ) continue; /* add these later */ fields_setused( endin, i ); switch ( process ) { case SIMPLE: status = endin_simple( info, newtag, d->data, level ); break; case TYPE: status = endin_addtype( info, d->data, level ); break; case TITLE: ok = title_process( info, newtag, d->data, level, p->nosplittitle ); if ( !ok ) status = BIBL_ERR_MEMERR; status = BIBL_OK; break; case PERSON: ok = name_add( info, newtag, d->data, level, &(p->asis), &(p->corps) ); if ( !ok ) status = BIBL_ERR_MEMERR; status = BIBL_OK; break; case DATE: status = endin_adddate( info, t, newtag,d->data,level); break; case PAGES: status = endin_addpage( info, d->data, level ); break; case SERIALNO: ok = addsn( info, d->data, level ); if ( !ok ) status = BIBL_ERR_MEMERR; status = BIBL_OK; break; case NOTES: status = endin_addnotes( info, newtag, d->data, level ); break; default: fprintf(stderr,"%s: internal error -- illegal process number %d\n", p->progname, process ); status = BIBL_OK; break; } if ( status!=BIBL_OK ) return status; } return status; } hs-bibutils-5.5/bibutils/unicode.c0000644000000000000000000003773412445605732015433 0ustar0000000000000000/* * unicode.c * * Helper unicode functions/values to determine the * types of unicode characters. */ #include "utf8.h" #include "unicode.h" typedef struct { unsigned int value; unsigned short info; } unicodeinfo_t; static unicodeinfo_t unicodeinfo[] = { { 48, UNICODE_NUMBER }, /* 0 */ { 49, UNICODE_NUMBER }, /* 1 */ { 50, UNICODE_NUMBER }, /* 2 */ { 51, UNICODE_NUMBER }, /* 3 */ { 52, UNICODE_NUMBER }, /* 4 */ { 53, UNICODE_NUMBER }, /* 5 */ { 54, UNICODE_NUMBER }, /* 6 */ { 55, UNICODE_NUMBER }, /* 7 */ { 56, UNICODE_NUMBER }, /* 8 */ { 57, UNICODE_NUMBER }, /* 9 */ { 65, UNICODE_UPPER }, /* Latin Capital A */ { 66, UNICODE_UPPER }, /* Latin Capital B */ { 67, UNICODE_UPPER }, /* Latin Capital C */ { 68, UNICODE_UPPER }, /* Latin Capital D */ { 69, UNICODE_UPPER }, /* Latin Capital E */ { 70, UNICODE_UPPER }, /* Latin Capital F */ { 71, UNICODE_UPPER }, /* Latin Capital G */ { 72, UNICODE_UPPER }, /* Latin Capital H */ { 73, UNICODE_UPPER }, /* Latin Capital I */ { 74, UNICODE_UPPER }, /* Latin Capital J */ { 75, UNICODE_UPPER }, /* Latin Capital K */ { 76, UNICODE_UPPER }, /* Latin Capital L */ { 77, UNICODE_UPPER }, /* Latin Capital M */ { 78, UNICODE_UPPER }, /* Latin Capital N */ { 79, UNICODE_UPPER }, /* Latin Capital O */ { 80, UNICODE_UPPER }, /* Latin Capital P */ { 81, UNICODE_UPPER }, /* Latin Capital Q */ { 82, UNICODE_UPPER }, /* Latin Capital R */ { 83, UNICODE_UPPER }, /* Latin Capital S */ { 84, UNICODE_UPPER }, /* Latin Capital T */ { 85, UNICODE_UPPER }, /* Latin Capital U */ { 86, UNICODE_UPPER }, /* Latin Capital V */ { 87, UNICODE_UPPER }, /* Latin Capital W */ { 88, UNICODE_UPPER }, /* Latin Capital X */ { 89, UNICODE_UPPER }, /* Latin Capital Y */ { 90, UNICODE_UPPER }, /* Latin Capital Z */ { 97, UNICODE_LOWER }, /* Latin Small a */ { 98, UNICODE_LOWER }, /* Latin Small b */ { 99, UNICODE_LOWER }, /* Latin Small c */ { 100, UNICODE_LOWER }, /* Latin Small d */ { 101, UNICODE_LOWER }, /* Latin Small e */ { 102, UNICODE_LOWER }, /* Latin Small f */ { 103, UNICODE_LOWER }, /* Latin Small g */ { 104, UNICODE_LOWER }, /* Latin Small h */ { 105, UNICODE_LOWER }, /* Latin Small i */ { 106, UNICODE_LOWER }, /* Latin Small j */ { 107, UNICODE_LOWER }, /* Latin Small k */ { 108, UNICODE_LOWER }, /* Latin Small l */ { 109, UNICODE_LOWER }, /* Latin Small m */ { 110, UNICODE_LOWER }, /* Latin Small n */ { 111, UNICODE_LOWER }, /* Latin Small o */ { 112, UNICODE_LOWER }, /* Latin Small p */ { 113, UNICODE_LOWER }, /* Latin Small q */ { 114, UNICODE_LOWER }, /* Latin Small r */ { 115, UNICODE_LOWER }, /* Latin Small s */ { 116, UNICODE_LOWER }, /* Latin Small t */ { 117, UNICODE_LOWER }, /* Latin Small u */ { 118, UNICODE_LOWER }, /* Latin Small v */ { 119, UNICODE_LOWER }, /* Latin Small w */ { 120, UNICODE_LOWER }, /* Latin Small x */ { 121, UNICODE_LOWER }, /* Latin Small y */ { 122, UNICODE_LOWER }, /* Latin Small z */ { 192, UNICODE_UPPER }, /* Latin Capital A with grave */ { 193, UNICODE_UPPER }, /* Latin Capital A with acute */ { 194, UNICODE_UPPER }, /* Latin Capital A with circumflex */ { 195, UNICODE_UPPER }, /* Latin Capital A with tilde */ { 196, UNICODE_UPPER }, /* Latin Capital A with diuresis */ { 197, UNICODE_UPPER }, /* Latin Capital A with ring above */ { 198, UNICODE_UPPER }, /* Latin Capital AE */ { 199, UNICODE_UPPER }, /* Latin Capital C with cedilla */ { 200, UNICODE_UPPER }, /* Latin Capital E with grave */ { 201, UNICODE_UPPER }, /* Latin Capital E with acute */ { 202, UNICODE_UPPER }, /* Latin Capital E with circumflex */ { 203, UNICODE_UPPER }, /* Latin Capital E with diuresis */ { 204, UNICODE_UPPER }, /* Latin Capital I with grave */ { 205, UNICODE_UPPER }, /* Latin Capital I with acute */ { 206, UNICODE_UPPER }, /* Latin Capital I with circumflex */ { 207, UNICODE_UPPER }, /* Latin Capital I with diuresis */ { 208, UNICODE_UPPER }, /* Latin Capital ETH */ { 209, UNICODE_UPPER }, /* Latin Capital N with tilde */ { 210, UNICODE_UPPER }, /* Latin Capital O with grave */ { 211, UNICODE_UPPER }, /* Latin Capital O with acute */ { 212, UNICODE_UPPER }, /* Latin Capital O with circumflex */ { 213, UNICODE_UPPER }, /* Latin Capital O with tilde */ { 214, UNICODE_UPPER }, /* Latin Captial O with diaeresis */ { 216, UNICODE_UPPER }, /* Latin Capital O with stroke */ { 217, UNICODE_UPPER }, /* Latin Capital U with grave */ { 218, UNICODE_UPPER }, /* Latin Capital U with acute */ { 219, UNICODE_UPPER }, /* Latin Capital U with circumflex */ { 220, UNICODE_UPPER }, /* Latin Capital U with diaeresis */ { 221, UNICODE_UPPER }, /* Latin Capital Y with acute */ { 222, UNICODE_UPPER }, /* Latin Capital THORN */ { 223, UNICODE_LOWER }, /* German sz ligature */ { 224, UNICODE_LOWER }, /* Latin Small a with grave */ { 225, UNICODE_LOWER }, /* Latin Small a with acute */ { 226, UNICODE_LOWER }, /* Latin Small a with circumflex */ { 227, UNICODE_LOWER }, /* Latin Small a with tilde */ { 228, UNICODE_LOWER }, /* Latin Small a with diuresis */ { 229, UNICODE_LOWER }, /* Latin Small a with ring above */ { 230, UNICODE_LOWER }, /* Latin Small ae */ { 231, UNICODE_LOWER }, /* Latin Small c with cedilla */ { 232, UNICODE_LOWER }, /* Latin Small e with grave */ { 233, UNICODE_LOWER }, /* Latin Small e with acute */ { 234, UNICODE_LOWER }, /* Latin Small e with circumflex */ { 235, UNICODE_LOWER }, /* Latin Small e with diuresis */ { 236, UNICODE_LOWER }, /* Latin Small i with grave */ { 237, UNICODE_LOWER }, /* Latin Small i with acute */ { 238, UNICODE_LOWER }, /* Latin Small i with circumflex */ { 239, UNICODE_LOWER }, /* Latin Small i with diuresis */ { 240, UNICODE_LOWER }, /* Latin Small eth */ { 241, UNICODE_LOWER }, /* Latin Small n with tilde */ { 242, UNICODE_LOWER }, /* Latin Small o with grave */ { 243, UNICODE_LOWER }, /* Latin Small o with acute */ { 244, UNICODE_LOWER }, /* Latin Small o with circumflex */ { 245, UNICODE_LOWER }, /* Latin Small o with tilde */ { 246, UNICODE_LOWER }, /* Latin Small o with diaeresis */ { 248, UNICODE_LOWER }, /* Latin Small o with stroke */ { 249, UNICODE_LOWER }, /* Latin Small u with grave */ { 250, UNICODE_LOWER }, /* Latin Small u with acute */ { 251, UNICODE_LOWER }, /* Latin Small u with circumflex */ { 252, UNICODE_LOWER }, /* Latin Small u with diaeresis */ { 253, UNICODE_LOWER }, /* Latin Small y with acute */ { 254, UNICODE_LOWER }, /* Latin Small thorn */ { 255, UNICODE_LOWER }, /* Latin Small y with diaeresis */ { 256, UNICODE_UPPER }, /* Latin Capital A with macron */ { 257, UNICODE_LOWER }, /* Latin Small a with macron */ { 258, UNICODE_UPPER }, /* Latin Capital A with breve */ { 259, UNICODE_LOWER }, /* Latin Small a with breve */ { 260, UNICODE_UPPER }, /* Latin Capital A with ogonek */ { 261, UNICODE_LOWER }, /* Latin Small a with ogonek */ { 262, UNICODE_UPPER }, /* Latin Capital C with acute */ { 263, UNICODE_LOWER }, /* Latin Small c with acute */ { 264, UNICODE_UPPER }, /* Latin Capital C with circumflex */ { 265, UNICODE_LOWER }, /* Latin Small c with circumflex */ { 266, UNICODE_UPPER }, /* Latin Capital C with dot above */ { 267, UNICODE_LOWER }, /* Latin Small c with dot above */ { 268, UNICODE_UPPER }, /* Latin Capital C with caron (hacek) */ { 269, UNICODE_LOWER }, /* Latin Small c with caron (hacek) */ { 270, UNICODE_UPPER }, /* Latin Capital D with caron (hacek) */ { 271, UNICODE_LOWER }, /* Latin Small d with caron (hacek) */ { 272, UNICODE_UPPER }, /* Latin Capital D with stroke */ { 273, UNICODE_LOWER }, /* Latin Small d with stroke */ { 274, UNICODE_UPPER }, /* Latin Capital E with macron */ { 275, UNICODE_LOWER }, /* Latin Small e with macron */ { 276, UNICODE_UPPER }, /* Latin Capital E with breve */ { 277, UNICODE_LOWER }, /* Latin Small e with breve */ { 278, UNICODE_UPPER }, /* Latin Capital E with dot above */ { 279, UNICODE_LOWER }, /* Latin Small e with dot above */ { 280, UNICODE_UPPER }, /* Latin Capital E with ogonek */ { 281, UNICODE_LOWER }, /* Latin Small e with ogonek */ { 282, UNICODE_UPPER }, /* Latin Capital E with caron (hacek) */ { 283, UNICODE_LOWER }, /* Latin Small e with caron */ { 284, UNICODE_UPPER }, /* Latin Capital G with circumflex */ { 285, UNICODE_LOWER }, /* Latin Small g with circumflex */ { 286, UNICODE_UPPER }, /* Latin Capital G with breve */ { 287, UNICODE_LOWER }, /* Latin Small g with breve */ { 288, UNICODE_UPPER }, /* Latin Capital G with dot above */ { 289, UNICODE_LOWER }, /* Latin Small g with dot above */ { 290, UNICODE_UPPER }, /* Latin Capital G with cedilla */ { 291, UNICODE_LOWER }, /* Latin Small g with cedilla */ { 292, UNICODE_UPPER }, /* Latin Capital H with circumflex */ { 293, UNICODE_LOWER }, /* Latin Small h with circumflex */ { 294, UNICODE_UPPER }, /* Latin Capital H with stroke */ { 295, UNICODE_LOWER }, /* Latin Small h with stroke */ { 296, UNICODE_UPPER }, /* Latin Capital I with tilde */ { 297, UNICODE_LOWER }, /* Latin Small i with tilde */ { 298, UNICODE_UPPER }, /* Latin Capital I with macron */ { 299, UNICODE_LOWER }, /* Latin Small i with macron */ { 300, UNICODE_UPPER }, /* Latin Capital I with breve */ { 301, UNICODE_LOWER }, /* Latin Small i with breve */ { 302, UNICODE_UPPER }, /* Latin Capital I with ogonek */ { 303, UNICODE_LOWER }, /* Latin Small i with ogonek */ { 304, UNICODE_UPPER }, /* Latin Capital I with dot above */ { 305, UNICODE_LOWER }, /* Latin Small i without dot above */ { 306, UNICODE_UPPER }, /* Latin Capital IJ */ { 307, UNICODE_LOWER }, /* Latin Small IJ */ { 308, UNICODE_UPPER }, /* Latin Capital J with circumflex */ { 309, UNICODE_LOWER }, /* Latin Small j with circumflex */ { 310, UNICODE_UPPER }, /* Latin Capital K with cedilla */ { 311, UNICODE_LOWER }, /* Latin Small j with cedilla */ { 312, UNICODE_LOWER }, /* Latin Small kra */ { 313, UNICODE_UPPER }, /* Latin Capital L with acute */ { 314, UNICODE_LOWER }, /* Latin Small l with acute */ { 315, UNICODE_UPPER }, /* Latin Capital L with cedilla */ { 316, UNICODE_LOWER }, /* Latin Small l with cedilla */ { 317, UNICODE_UPPER }, /* Latin Capital L with caron */ { 318, UNICODE_LOWER }, /* Latin Small l with caron */ { 319, UNICODE_UPPER }, /* Latin Capital L with middle dot */ { 320, UNICODE_LOWER }, /* Latin Small l with middle dot */ { 321, UNICODE_UPPER }, /* Latin Capital L with stroke */ { 322, UNICODE_LOWER }, /* Latin Small l with stroke */ { 323, UNICODE_UPPER }, /* Latin Capital N with acute */ { 324, UNICODE_LOWER }, /* Latin Small n with acute */ { 325, UNICODE_UPPER }, /* Latin Capital N with cedilla */ { 326, UNICODE_LOWER }, /* Latin Small n with cedilla */ { 327, UNICODE_UPPER }, /* Latin Capital N with caron */ { 328, UNICODE_LOWER }, /* Latin Small n with caron */ { 329, UNICODE_LOWER }, /* Latin Small n preceeded by apostrophe */ { 330, UNICODE_UPPER }, /* Latin Capital Eng */ { 331, UNICODE_LOWER }, /* Latin Small eng */ { 332, UNICODE_UPPER }, /* Latin Capital O with macron */ { 333, UNICODE_LOWER }, /* Latin Small o with macron */ { 334, UNICODE_UPPER }, /* Latin Capital O with breve */ { 335, UNICODE_LOWER }, /* Latin Small o with breve */ { 336, UNICODE_UPPER }, /* Latin Capital O with double acute */ { 337, UNICODE_LOWER }, /* Latin Small o with double acute */ { 338, UNICODE_UPPER }, /* Latin Capital OE */ { 339, UNICODE_LOWER }, /* Latin Small oe */ { 340, UNICODE_UPPER }, /* Latin Capital R with acute */ { 341, UNICODE_LOWER }, /* Latin Small r with acute */ { 342, UNICODE_UPPER }, /* Latin Capital R with cedilla */ { 343, UNICODE_LOWER }, /* Latin Small r with cedilla */ { 344, UNICODE_UPPER }, /* Latin Capital R with caron */ { 345, UNICODE_LOWER }, /* Latin Small r with caron */ { 346, UNICODE_UPPER }, /* Latin Capital S with acute */ { 347, UNICODE_LOWER }, /* Latin Small s with acute */ { 348, UNICODE_UPPER }, /* Latin Capital S with circumflex */ { 349, UNICODE_LOWER }, /* Latin Small s with circumflex */ { 350, UNICODE_UPPER }, /* Latin Capital S with cedilla */ { 351, UNICODE_LOWER }, /* Latin Small s with cedilla */ { 352, UNICODE_UPPER }, /* Latin Capital S with caron */ { 353, UNICODE_LOWER }, /* Latin Small s with caron */ { 354, UNICODE_UPPER }, /* Latin Capital T with cedilla */ { 355, UNICODE_LOWER }, /* Latin Small t with cedilla */ { 356, UNICODE_UPPER }, /* Latin Capital T with caron */ { 357, UNICODE_LOWER }, /* Latin Small t with caron */ { 358, UNICODE_UPPER }, /* Latin Capital T with stroke */ { 359, UNICODE_LOWER }, /* Latin Small t with stroke */ { 360, UNICODE_UPPER }, /* Latin Capital U with tilde */ { 361, UNICODE_LOWER }, /* Latin Small u with tilde */ { 362, UNICODE_UPPER }, /* Latin Capital U with macron */ { 363, UNICODE_LOWER }, /* Latin Small u with macron */ { 364, UNICODE_UPPER }, /* Latin Capital U with breve */ { 365, UNICODE_LOWER }, /* Latin Small u with breve */ { 366, UNICODE_UPPER }, /* Latin Capital U with ring above */ { 367, UNICODE_LOWER }, /* Latin Small u with ring above */ { 368, UNICODE_UPPER }, /* Latin Capital U with double acute */ { 369, UNICODE_LOWER }, /* Latin Small u with double acute */ { 370, UNICODE_UPPER }, /* Latin Capital U with ogonek */ { 371, UNICODE_LOWER }, /* Latin Small u with ogonek */ { 372, UNICODE_UPPER }, /* Latin Capital W with circumflex */ { 373, UNICODE_LOWER }, /* Latin Small w with circumflex */ { 374, UNICODE_UPPER }, /* Latin Capital Y with circumflex */ { 375, UNICODE_LOWER }, /* Latin Small y with circumflex */ { 376, UNICODE_UPPER }, /* Latin Capital Y with diaeresis */ { 377, UNICODE_UPPER }, /* Latin Capital Z with acute */ { 378, UNICODE_LOWER }, /* Latin Small z with acute */ { 379, UNICODE_UPPER }, /* Latin Capital Z with dot above */ { 380, UNICODE_LOWER }, /* Latin Small z with dot above */ { 381, UNICODE_UPPER }, /* Latin Capital Z with caron */ { 382, UNICODE_LOWER }, /* Latin Small z with caron */ { 383, UNICODE_LOWER }, /* Latin Small long S */ { 461, UNICODE_UPPER }, /* Latin Capital A with caron (hacek) */ { 462, UNICODE_LOWER }, /* Latin Small a with caron (hacek) */ { 463, UNICODE_UPPER }, /* Latin Capital I with caron (hacek) */ { 464, UNICODE_LOWER }, /* Latin Small i with caron (hacek) */ { 465, UNICODE_UPPER }, /* Latin Capital O with caron (hacek) */ { 466, UNICODE_LOWER }, /* Latin Small o with caron (hacek) */ { 467, UNICODE_UPPER }, /* Latin Capital U with caron (hacek) */ { 468, UNICODE_LOWER }, /* Latin Small u with caron (hacek) */ { 486, UNICODE_UPPER }, /* Latin Capital G with caron */ { 487, UNICODE_LOWER }, /* Latin Small g with caron */ { 488, UNICODE_UPPER }, /* Latin Capital J with caron */ { 489, UNICODE_LOWER }, /* Latin Small j with caron */ { 490, UNICODE_UPPER }, /* Latin Capital O with caron */ { 491, UNICODE_LOWER }, /* Latin Small o with caron */ { 500, UNICODE_UPPER }, /* Latin Capital G with acute */ { 501, UNICODE_LOWER }, /* Latin Small g with caron */ }; static int nunicodeinfo = sizeof( unicodeinfo ) / sizeof( unicodeinfo[0] ); static int unicode_find( unsigned int unicode_character ) { int min = 0, max = nunicodeinfo, mid; while ( min < max ) { mid = ( min + max ) / 2; if ( unicodeinfo[mid].value < unicode_character ) min = mid + 1; else max = mid; } if ( ( max==min ) && ( unicodeinfo[min].value == unicode_character ) ) return min; else return -1; } unsigned short unicode_utf8_classify( char *p ) { unsigned int unicode_character, pos = 0; int n; unicode_character = utf8_decode( p, &pos ); n = unicode_find( unicode_character ); if ( n==-1 ) return UNICODE_SYMBOL; else return unicodeinfo[n].info; } unsigned short unicode_utf8_classify_newstr( newstr *s ) { unsigned int unicode_character, pos = 0; unsigned short value = 0; int n; while ( pos < s->len ) { unicode_character = utf8_decode( s->data, &pos ); n = unicode_find( unicode_character ); if ( n==-1 ) value |= UNICODE_SYMBOL; else value |= unicodeinfo[n].info; } return value; } hs-bibutils-5.5/bibutils/bibtexout.h0000644000000000000000000000133512445605732016003 0ustar0000000000000000/* * bibtexout.h * * Copyright (c) Chris Putnam 2005-2013 * * Source code released under GPL version 2 * */ #ifndef BIBTEXOUT_H #define BIBTEXOUT_H #include #include "fields.h" #include "bibutils.h" /* bibtexout output options */ #define BIBOUT_FINALCOMMA (2) #define BIBOUT_SINGLEDASH (4) #define BIBOUT_WHITESPACE (8) #define BIBOUT_BRACKETS (16) #define BIBOUT_UPPERCASE (32) #define BIBOUT_STRICTKEY (64) #define BIBOUT_SHORTTITLE (128) #define BIBOUT_DROPKEY (256) extern void bibtexout_write( fields *info, FILE *fp, param *p, unsigned long refnum ); extern void bibtexout_writeheader( FILE *outptr, param *p ); extern void bibtexout_initparams( param *p, const char *progname ); #endif hs-bibutils-5.5/bibutils/latex.c0000644000000000000000000007715712445605732015125 0ustar0000000000000000/* * latex.c * * convert between latex special chars and unicode * * Copyright (c) Chris Putnam 2004-2013 * * Source code released under the GPL version 2 * */ #include #include #include "latex.h" struct latex_chars { unsigned int unicode; char *bib1, *bib2, *bib3; }; static struct latex_chars latex_chars[] = { { 35, "\\#", "", "" }, /* Number/pound/hash sign */ { 36, "\\$", "", "" }, /* Dollar Sign */ { 37, "\\%", "", "" }, /* Percent Sign */ { 38, "\\&", "", "" }, /* Ampersand */ { 92, "{\\backslash}", "\\backslash", "" }, /* Backslash */ { 123, "\\{", "{\\textbraceleft}", "\\textbraceleft" }, /* Left Curly Bracket */ { 125, "\\}", "{\\textbraceright}", "\\textbraceright" }, /* Right Curly Bracket */ { 95, "\\_", "", "" }, /* Underscore alone indicates subscript */ { 176, "{\\textdegree}", "\\textdegree", "^\\circ" }, /* Degree sign */ /* fix sticky spaces in bibtex token cleaning--allows tokens to be parsed properly */ /* { 32, "~", "\\ ", "" }, */ /* "sticky" space */ { 32, "\\ ", "", "" }, /* escaping the space is used to avoid extra space after periods */ { 126, "{\\textasciitilde}", "\\textasciitilde", "\\~{}" }, /* Tilde in latex */ /* This is a cheat, should use "\verb" */ /* Need same for ^ character */ /* Latin Capital A */ { 192, "{\\`A}", "\\`{A}", "\\`A" }, /* with grave */ { 193, "{\\'A}", "\\'{A}", "\\'A" }, /* with acute */ { 194, "{\\^A}", "\\^{A}", "\\^A" }, /* with circumflex */ { 195, "{\\~A}", "\\~{A}", "\\~A" }, /* with tilde */ { 196, "{\\\"A}", "\\\"{A}", "\\\"A" }, /* with diuresis */ { 197, "{\\AA}", "{\\r{A}}","\\r{A}"}, /* with ring above */ { 256, "{\\={A}}","\\={A}", "\\=A" }, /* with macron */ { 258, "{\\u{A}}","\\u{A}", "\\u A" }, /* with breve */ { 260, "{\\k{A}}","\\k{A}", "\\k A" }, /* with ogonek */ { 461, "{\\v{A}}","\\v{A}", "\\v A" }, /* with caron */ /* Latin Small a */ { 224, "{\\`a}", "\\`{a}", "\\`a" }, /* with grave */ { 225, "{\\'a}", "\\'{a}", "\\'a" }, /* with acute */ { 226, "{\\^a}", "\\^{a}", "\\^a" }, /* with circumflex */ { 227, "{\\~a}", "\\~{a}", "\\~a" }, /* with tilde */ { 228, "{\\\"a}", "\\\"{a}", "\\\"a" }, /* with diuresis */ { 229, "{\\aa}", "{\\r{a}}","\\r{a}"}, /* with ring above */ { 257, "{\\={a}}","\\={a}", "\\=a" }, /* with macron */ { 259, "{\\u{a}}","\\u{a}", "\\u a" }, /* with breve */ { 261, "{\\k{a}}","\\k{a}", "\\k a" }, /* with ogonek */ { 462, "{\\v{a}}","\\v{a}", "\\v a" }, /* with caron */ { 198, "{\\AE}", "\\AE", "" }, /* Latin Capital AE */ { 230, "{\\ae}", "\\ae", "" }, /* Latin Small ae */ /* Latin Capital C */ { 199, "{\\c{C}}","\\c{C}", "\\c c" }, /* with cedilla */ { 262, "{\\'{C}}","\\'{C}", "\\'C" }, /* with acute */ { 264, "{\\^{C}}","\\^{C}", "\\^C" }, /* with circumflex */ { 266, "{\\.{C}}","\\.{C}", "\\.C" }, /* with dot above */ { 268, "{\\v{C}}","\\v{C}", "\\v C" }, /* with caron (hacek) */ /* Latin Small c */ { 231, "{\\c{c}}","\\c{c}", "\\c C" }, /* with cedilla*/ { 263, "{\\'{c}}","\\'{c}", "\\'c" }, /* with acute */ { 265, "{\\^{c}}","\\^{c}", "\\^c" }, /* with circumflex */ { 267, "{\\.{c}}","\\.{c}", "\\.c" }, /* with dot above */ { 269, "{\\v{c}}","\\v{c}", "\\v c" }, /* with caron (hacek) */ /* Latin Capital D */ { 270, "{\\v{D}}","\\v{D}", "\\v D" }, /* with caron */ { 272, "{\\DJ}", "", "" }, /* with stroke */ /* Latin Small d */ { 271, "{\\v{d}}","\\v{d}", "\\v d" }, /* with caron */ { 273, "{\\dj}", "", "" }, /* with stroke */ /* Latin Capital E */ { 200, "{\\`E}", "\\`{E}", "\\`E" }, /* with grave */ { 201, "{\\'E}", "\\'{E}", "\\'E" }, /* with acute */ { 202, "{\\^E}", "\\^{E}", "\\^E" }, /* with circumflex */ { 203, "{\\\"E}", "\\\"{E}", "\\\"E" }, /* with diuresis */ { 274, "{\\={E}}","\\={E}", "\\=E" }, /* with macron */ { 276, "{\\u{E}}","\\u{E}", "\\u E" }, /* with breve */ { 278, "{\\.{E}}","\\.{E}", "\\.E" }, /* with dot above */ { 280, "{\\k{E}}","\\k{E}", "\\k E" }, /* with ogonek */ { 282, "{\\v{E}}","\\v{E}", "\\v E" }, /* with caron */ /* Latin Small e */ { 232, "{\\`e}", "\\`{e}", "\\`e" }, /* with grave */ { 233, "{\\'e}", "\\'{e}", "\\'e" }, /* with acute */ { 234, "{\\^e}", "\\^{e}", "\\^e" }, /* with circumflex */ { 235, "{\\\"e}", "\\\"{e}", "\\\"e" }, /* with diuresis */ { 275, "{\\={e}}","\\={e}", "\\=e" }, /* with macron */ { 277, "{\\u{e}}","\\u{e}", "\\u e" }, /* with breve */ { 279, "{\\.{e}}","\\.{e}", "\\.e" }, /* with dot above */ { 281, "{\\k{e}}","\\k{e}", "\\k e" }, /* with ogonek */ { 283, "{\\v{e}}","\\v{e}", "\\v e" }, /* with caron */ /* Latin Capital G */ { 284, "{\\^{G}}","\\^{G}", "\\^G" }, /* with circumflex */ { 286, "{\\u{G}}","\\u{G}", "\\u G" }, /* with breve */ { 288, "{\\.{G}}","\\.{G}", "\\.G" }, /* with dot above */ { 290, "{\\c{G}}","\\c{G}", "\\c G" }, /* with cedilla */ { 486, "{\\v{G}}","\\v{G}", "\\v G" }, /* with caron */ { 500, "{\\'{G}}","\\'{G}", "\\'G" }, /* with acute */ /* Latin Small g */ { 285, "{\\^{g}}","\\^{g}", "\\^g" }, /* with circumflex */ { 287, "{\\u{g}}","\\u{g}", "\\u g" }, /* with breve */ { 289, "{\\.{g}}","\\.{g}", "\\.g" }, /* with dot above */ { 291, "{\\c{g}}","\\c{g}", "\\c g" }, /* with cedilla */ { 487, "{\\v{g}}","\\v{g}", "\\v g" }, /* with caron */ { 501, "{\\'{g}}","\\'{g}", "\\'g" }, /* with acute */ /* Latin Capital H */ { 292, "{\\^{H}}","\\^{H}", "\\^H" }, /* with circumflex */ /* { 294, "", "", "" },*//* with stroke */ /* Latin Capital h */ { 293, "{\\^{h}}","\\^{h}", "\\^h" }, /* with circumflex */ /* { 295, "", "", "" },*//* with stroke */ /* Latin Capital I */ { 204, "{\\`I}", "\\`{I}", "\\`I" }, /* with grave */ { 205, "{\\'I}", "\\'{I}", "\\'I" }, /* with acute */ { 206, "{\\^I}", "\\^{I}", "\\^I" }, /* with circumflex */ { 207, "{\\\"I}", "\\\"{I}", "\\\"I" }, /* with diuresis */ { 296, "{\\~{I}}","\\~{I}", "\\~I" }, /* with tilde */ { 298, "{\\={I}}","\\={I}", "\\=I" }, /* with macron */ { 300, "{\\u{I}}","\\u{I}", "\\u I" }, /* with breve */ { 302, "{\\k{I}}","\\k{I}", "\\k I" }, /* with ogonek */ { 304, "{\\.{I}}","\\.{I}", "\\. I" }, /* with dot above */ { 463, "{\\v{I}}","\\v{I}", "\\v I" }, /* with caron */ /* Latin Small i */ { 236, "{\\`i}", "\\`{i}", "\\`i" }, /* with grave */ { 237, "{\\'i}", "\\'{i}", "\\'i" }, /* with acute */ { 238, "{\\^i}", "\\^{i}", "\\^i" }, /* with circumflex */ { 239, "{\\\"i}", "\\\"{i}", "\\\"i" }, /* with diuresis */ { 236, "{\\`\\i}", "\\`{\\i}", "\\`\\i" }, /* with grave */ { 237, "{\\'\\i}", "\\'{\\i}", "\\'\\i" }, /* with acute */ { 238, "{\\^\\i}", "\\^{\\i}", "\\^\\i" }, /* with circumflex */ { 239, "{\\\"\\i}", "\\\"{\\i}", "\\\"\\i" }, /* with diuresis */ { 297, "{\\~{\\i}}","\\~{\\i}", "\\~\\i{}"}, /* with tilde */ { 299, "{\\={\\i}}", "\\={\\i}", "\\=\\i{}"}, /* with macron */ { 301, "{\\u{\\i}}","\\u{\\i}", "\\u\\i{}"}, /* with breve */ { 303, "{\\k{i}}","\\k{i}", "\\k i" }, /* with ogonek */ /* Latex \i has no dot on "i"*/ { 305, "{\\i}", "\\i{}", "" }, /* without dot above */ { 464, "{\\v \\i{}}", "\\v \\i{}", "" }, /* with caron */ /* { 306, "", "", "" },*/ /* Latin Capital IJ */ /* { 307, "" "", "" },*/ /* Latin Small ij */ /* Latin Capital J */ { 308, "{\\^{J}}","\\^{J}", "\\^J" }, /* with circumflex */ /* Latin Small j */ { 309, "{\\^{j}}","\\^{j}", "\\^j" }, /* with circumflex */ /* Latin Capital K */ { 310, "{\\c{K}}","\\c{K}", "\\c K" }, /* with cedilla */ { 488, "{\\v{K}}","\\v{K}", "\\v K" }, /* with caron */ /* Latin Small k */ { 311, "{\\c{k}}","\\c{k}", "\\c k" }, /* with cedilla */ { 489, "{\\v{k}}","\\v{k}", "\\v k" }, /* with caron */ /* Latin Capital L */ { 313, "{\\'{L}}","\\'{L}", "\\'L" }, /* with acute */ { 315, "{\\c{L}}","\\c{L}", "\\c L" }, /* with cedilla */ { 317, "{\\v{L}}","\\v{l}", "\\v L" }, /* with caron */ { 319, "{L\\hspace{-0.35em}$\\cdot$}","L\\hspace{-0.35em}$\\cdot$", "" }, /* with middle dot */ { 321, "{\\L}", "{\\L{}}", "\\L{}" }, /* with stroke */ /* Latin Small l */ { 314, "{\\'{l}}","\\'{l}", "\\'l" }, /* with acute */ { 316, "{\\c{l}}","\\c{l}", "\\c l" }, /* with cedilla */ { 318, "{\\v{l}}","\\v{l}", "\\v l" }, /* with caron */ { 320, "{l$\\cdot$}","l$\\cdot$", "" }, /* with middle dot */ { 322, "{\\l}", "{\\l{}}", "\\l{}" }, /* with stroke */ /* Latin Capital N */ { 209, "{\\~{N}}","\\~{N}", "\\~N" }, /* with tilde */ { 323, "{\\'{N}}","\\'{N}", "\\'N" }, /* with acute */ { 325, "{\\c{N}}","\\c{N}", "\\c N" }, /* with cedilla */ { 327, "{\\v{N}}","\\v{N}", "\\v N" }, /* with caron */ /* Latin Small n */ { 241, "{\\~{n}}","\\~{n}", "\\~n" }, /* with tilde */ { 324, "{\\'{n}}","\\'{n}", "\\'n" }, /* with acute */ { 326, "{\\c{n}}","\\c{n}", "\\c N" }, /* with cedilla */ { 328, "{\\v{n}}","\\v{n}", "\\v n" }, /* with caron */ { 329, "\n", "", "" }, /* preceeded by apostrophe */ /* Latin Capital O */ { 210, "{\\`O}", "\\`{O}", "\\`O" }, /* with grave */ { 211, "{\\'O}", "\\'{O}", "\\'O" }, /* with acute */ { 212, "{\\^O}", "\\^{O}", "\\^O" }, /* with circumflex */ { 213, "{\\~O}", "\\~{O}", "\\~O" }, /* with tilde */ { 214, "{\\\"O}", "\\\"{O}", "\\\"O" }, /* with diaeresis */ { 216, "{\\O}", "\\O", "" }, /* with stroke */ { 332, "{\\={O}}", "\\={O}", "\\=O" }, /* with macron */ { 334, "{\\u{O}}", "\\u{O}", "\\u O" }, /* with breve */ { 336, "{\\H{O}}", "\\H{O}", "\\H O" }, /* with double acute */ { 465, "{\\v{O}}", "\\v{O}", "\\v O" }, /* with caron */ { 490, "{\\k{O}}", "\\k{O}", "\\k O" }, /* with ogonek */ /* Latin Small o */ { 242, "{\\`o}", "\\`{o}", "\\`o" }, /* with grave */ { 243, "{\\'o}", "\\'{o}", "\\'o" }, /* with acute */ { 244, "{\\^o}", "\\^{o}", "\\^o" }, /* with circumflex */ { 245, "{\\~o}", "\\~{o}", "\\~o" }, /* with tilde */ { 246, "{\\\"o}", "\\\"{o}", "\\\"o" }, /* with diaeresis */ { 248, "{\\o}", "\\o", "" }, /* with stroke */ { 333, "{\\={o}}", "\\={o}", "\\=o" }, /* with macron */ { 335, "{\\u{o}}", "\\u{o}", "\\u o" }, /* with breve */ { 337, "{\\H{o}}", "\\H{o}", "\\H o" }, /* with double acute */ { 466, "{\\v{o}}", "\\v{o}", "\\v o" }, /* with caron */ { 491, "{\\k{o}}", "\\k{o}", "\\k o" }, /* with ogonek */ { 338, "{\\OE}", "\\OE", "" }, /* Latin Capital OE */ { 339, "{\\oe}", "\\oe", "" }, /* Latin Small oe */ /* Latin Capital R */ { 340, "{\\'{R}}", "\\'{R}", "\\'R" }, /* with acute */ { 342, "{\\c{R}}", "\\c{R}", "\\c R" }, /* with cedilla */ { 344, "{\\v{R}}", "\\v{R}", "\\v R" }, /* with caron */ /* Latin Small r */ { 341, "{\\'{r}}", "\\'{r}", "\\'r" }, /* with acute */ { 343, "{\\c{r}}", "\\c{r}", "\\c r" }, /* with cedilla */ { 345, "{\\v{r}}", "\\v{r}", "\\v r" }, /* with caron */ /* Latin Capital S */ { 346, "{\\'{S}}", "\\'{S}", "\\'S" }, /* with acute */ { 348, "{\\^{S}}", "\\^{S}", "\\^S" }, /* with circumflex */ { 350, "{\\c{S}}", "\\c{S}", "\\c S" }, /* with cedilla */ { 352, "{\\v{S}}", "\\v{S}", "\\v S" }, /* with caron */ /* Latin Small s */ { 347, "{\\'{s}}","\\'{s}", "\\'s" }, /* with acute */ { 349, "{\\^{s}}","\\^{s}", "\\^s" }, /* with circumflex */ { 351, "{\\c{s}}","\\c{s}", "\\c s" }, /* with cedilla */ { 353, "{\\v{s}}","\\v{s}", "\\v s" }, /* with caron */ /* Latin Capital T */ { 354, "{\\c{T}}", "\\c{T}", "" }, /* with cedilla */ { 356, "{\\v{T}}", "\\v{T}", "" }, /* with caron */ /* { 358, "", "", "" },*//* with stroke */ /* Latin Small t */ { 355, "{\\c{t}}", "\\c{t}", "" }, /* with cedilla */ { 357, "{\\v{t}}", "\\v{t}", "" }, /* with caron */ /* { 359, "", "", "" },*//* with stroke */ { 223, "{\\ss}", "\\ss", "" }, /* German sz ligature, "sharp s" */ /* Latin Capital U */ { 217, "{\\`U}", "\\`{U}", "\\`U" }, /* with grave */ { 218, "{\\'U}", "\\'{U}", "\\'U" }, /* with acute */ { 219, "{\\^U}", "\\^{U}", "\\^U" }, /* with circumflex */ { 220, "{\\\"U}", "\\\"{U}", "\\\"U" }, /* with diaeresis */ { 360, "{\\~{U}}","\\~{U}", "\\~U" }, /* with tilde */ { 362, "{\\={U}}","\\={U}", "\\=U" }, /* with macron */ { 364, "{\\u{U}}","\\u{U}", "\\u U" }, /* with breve */ { 366, "{\\r{U}}","\\r{U}", "\\r U" }, /* with ring above */ { 368, "{\\H{U}}","\\H{U}", "\\H U" }, /* with double acute */ { 370, "{\\k{U}}","\\k{U}", "\\k U" }, /* with ogonek */ { 467, "{\\v{U}}","\\v{U}", "\\v U" }, /* with caron */ /* Latin Small u */ { 249, "{\\`u}", "\\`{u}", "\\`u" }, /* with grave */ { 250, "{\\'u}", "\\'{u}", "\\'u" }, /* with acute */ { 251, "{\\^u}", "\\^{u}", "\\^u" }, /* with circumflex */ { 252, "{\\\"u}", "\\\"{u}", "\\\"u" }, /* with diaeresis */ { 361, "{\\~{u}}","\\~{u}", "" }, /* with tilde */ { 363, "{\\={u}}","\\={u}", "\\=u" }, /* with macron */ { 365, "{\\u{u}}","\\u{u}", "\\u u" }, /* with breve */ { 367, "{\\r{u}}","\\r{u}", "\\r u" }, /* with ring above */ { 369, "{\\H{u}}","\\H{u}", "\\H u" }, /* with double acute */ { 371, "{\\k{u}}","\\k{u}", "\\k u" }, /* with ogonek */ { 468, "{\\v{u}}","\\v{u}", "\\v u" }, /* with caron */ /* Latin Capital W */ { 372, "{\\^{W}}", "\\^{W}", "\\^W" }, /* with circumflex */ /* Latin Small w */ { 373, "{\\^{w}}", "\\^{w}", "\\^w" }, /* with circumflex */ /* Latin Capital Y */ { 221, "{\\'{Y}}","\\'{Y}", "\\'Y" }, /* with acute */ { 374, "{\\^{Y}}","\\^{Y}", "\\^Y" }, /* with circumflex */ { 376, "{\\\"{Y}}","\\\"{Y}","\\\"Y" }, /* with diaeresis */ /* Latin Small y */ { 253, "{\\'y}", "\\'{y}", "\\'y" }, /* with acute */ { 255, "{\\\"y}", "\\\"{y}","\\\"y" }, /* with diaeresis */ { 375, "{\\^{y}}","\\^{y}", "\\^y" }, /* with circumflex */ /* Latin Capital Z */ { 377, "{\\'{Z}}","\\'{Z}", "\\'Z" }, /* with acute */ { 379, "{\\.{Z}}","\\.{Z}", "\\.Z" }, /* with dot above */ { 381, "{\\v{Z}}","\\v{Z}", "\\v Z" }, /* with caron */ /* Latin Small z */ { 378, "{\\'{z}}","\\'{z}", "\\'z" }, /* with acute */ { 380, "{\\.{z}}","\\.{z}", "\\.z" }, /* with dot above */ { 382, "{\\v{z}}","\\v{z}", "\\v z" }, /* with caron */ /* Needs to be before \nu */ { 8203, "$\\null$", "\\null", "" }, /* No space ​ */ { 913, "$\\Alpha$", "\\Alpha", "" }, /*GREEKCAPITALLETTERALPHA*/ /* 902 = GREEKCAPITALLETTERALPHAWITHTONOS*/ { 914, "$\\Beta$", "\\Beta", "" }, /*GREEKCAPITALLETTERBETA*/ { 915, "$\\Gamma$", "\\Gamma", "" }, /*GREEKCAPITALLETTERGAMMA*/ { 916, "$\\Delta$", "\\Delta", "" }, /*GREEKCAPITALLETTERDELTA*/ { 917, "$\\Epsilon$", "\\Epsilon", "" }, /*GREEKCAPITALLETTEREPSILON*/ /* 904 = GREEKCAPITALLETTEREPSILONWITHTONOS*/ { 918, "$\\Zeta$", "\\Zeta", "" }, /*GREEKCAPITALLETTERZETA*/ { 919, "$\\Eta$", "\\Eta", "" }, /*GREEKCAPITALLETTERETA*/ /* 905 = GREEKCAPITALLETTERETAWITHTONOS*/ { 920, "$\\Theta$", "\\Theta", "" }, /*GREEKCAPITALLETTERTHETA*/ { 921, "$\\Iota$", "\\Iota", "" }, /*GREEKCAPITALLETTERIOTA*/ /* 938 = GREEKCAPITALLETTERIOTAWITHDIALYTIKA*/ /* 906 = GREEKCAPITALLETTERIOTAWITHTONOS*/ { 922, "$\\Kappa$", "\\Kappa", "" }, /*GREEKCAPITALLETTERKAPPA*/ { 923, "$\\Lambda$", "\\Lambda", "" }, /*GREEKCAPITALLETTERLAMDA*/ { 924, "$\\Mu$", "\\Mu", "" }, /*GREEKCAPITALLETTERMU*/ { 925, "$\\Nu$", "\\Nu", "" }, /*GREEKCAPITALLETTERNU*/ { 926, "$\\Xi$", "\\Xi", "" }, /*GREEKCAPITALLETTERXI*/ { 927, "$\\Omicron$", "\\Omicron", "" }, /*GREEKCAPITALLETTEROMICRON*/ /* 908 = GREEKCAPITALLETTEROMICRONWITHTONOS*/ { 928, "$\\Pi$", "\\Pi", "" }, /*GREEKCAPITALLETTERPI*/ { 929, "$\\Rho$", "\\Rho", "" }, /*GREEKCAPITALLETTERRHO*/ { 931, "$\\Sigma$", "\\Sigma", "" }, /*GREEKCAPITALLETTERSIGMA*/ { 932, "$\\Tau$", "\\Tau", "" }, /*GREEKCAPITALLETTERTAU*/ { 933, "$\\Upsilon$", "\\Upsilon", "" }, /*GREEKCAPITALLETTERUPSILON*/ /* 939 = GREEKCAPITALLETTERUPSILONWITHDIALYTIKA*/ /* 910 = GREEKCAPITALLETTERUPSILONWITHTONOS*/ { 934, "$\\Phi$", "\\Phi", "" }, /*GREEKCAPITALLETTERPHI*/ { 935, "$\\Chi$", "\\Chi", "" }, /*GREEKCAPITALLETTERCHI*/ { 936, "$\\Psi$", "\\Psi", "" }, /*GREEKCAPITALLETTERPSI*/ { 937, "$\\Omega$", "\\Omega", "" }, /*GREEKCAPITALLETTEROMEGA*/ /* 911, = GREEKCAPITALLETTEROMEGAWITHTONOS*/ { 945, "$\\alpha$", "\\alpha", "" }, /*GREEKSMALLLETTERALPHA*/ /* 940 = GREEKSMALLLETTERALPHAWITHTONOS*/ { 946, "$\\beta$", "\\beta", "" }, /*GREEKSMALLLETTERBETA*/ { 968, "$\\psi$", "\\psi", "" }, /*GREEKSMALLLETTERPSI*/ { 948, "$\\delta$", "\\delta", "" }, /*GREEKSMALLLETTERDELTA*/ { 949, "$\\epsilon$", "\\epsilon", "" }, /*GREEKSMALLLETTEREPSILON*/ /* 941 = GREEKSMALLLETTEREPSILONWITHTONOS*/ { 966, "$\\phi$", "\\phi", "" }, /*GREEKSMALLLETTERPHI*/ { 947, "$\\gamma$", "\\gamma", "" }, /*GREEKSMALLLETTERGAMMA*/ { 951, "$\\eta$", "\\eta", "" }, /*GREEKSMALLLETTERETA*/ /* 942 = GREEKSMALLLETTERETAWITHTONOS */ { 953, "$\\iota$", "\\iota", "" }, /*GREEKSMALLLETTERIOTA*/ /* 912 = GREEKSMALLLETTERIOTAWITHDIALYTIKAANDTONOS*/ /* 943 = GREEKSMALLLETTERIOTAWITHTONOS */ /* 970 = GREEKSMALLLETTERIOTAWITHDIALYTIKA */ { 958, "$\\xi$", "\\xi", "" }, /*GREEKSMALLLETTERXI*/ { 954, "$\\kappa$", "\\kappa" , "" }, /*GREEKSMALLLETTERKAPPA*/ { 955, "$\\lambda$", "\\lambda", "" }, /*GREEKSMALLLETTERLAMDA*/ { 956, "$\\mu$", "\\mu", "" }, /*GREEKSMALLLETTERMU*/ { 957, "$\\nu$", "\\nu", "" }, /*GREEKSMALLLETTERNU*/ { 959, "$\\omicron$", "\\omicron", "" }, /*GREEKSMALLLETTEROMICRON*/ /* 972 = GREEKSMALLLETTEROMICRONWITHTONOS*/ { 960, "$\\pi$", "\\pi", "" }, /*GREEKSMALLLETTERPI*/ { 961, "$\\rho$", "\\rho", "" }, /*GREEKSMALLLETTERRHO*/ { 963, "$\\sigma$", "\\sigma", "" }, /*GREEKSMALLLETTERSIGMA*/ { 964, "$\\tau$", "\\tau", "" }, /*GREEKSMALLLETTERTAU*/ { 952, "$\\theta$", "\\theta", "" }, /*GREEKSMALLLETTERTHETA*/ { 969, "$\\omega$", "\\omega", "" }, /*GREEKSMALLLETTEROMEGA*/ /* 974 = GREEKSMALLLETTEROMEGAWITHTONOS*/ { 967, "$\\chi$", "\\chi", "" }, /*GREEKSMALLLETTERCHI*/ { 965, "$\\upsilon$", "\\upsilon", "" }, /*GREEKSMALLLETTERUPSILON*/ /* 973 = GREEKSMALLLETTERUPSILONWITHTONOS*/ /* 971 = GREEKSMALLLETTERUPSILONWITHDIALYTIKA*/ /* 944 = GREEKSMALLLETTERUPSILONWITHDIALYTIKAANDTONOS*/ { 950, "$\\zeta$", "\\zeta", "" }, /*GREEKSMALLLETTERZETA*/ { 181, "{\\textmu}", "\\textmu", "$\\mu$" }, /* 181=micro sign, techically µ */ /* Make sure that these don't stomp on other latex things above */ { 8242, "{\\textasciiacutex}", "\\textasciiacutex", "$'$" }, /* Prime symbol ′ */ { 180, "{\\textasciiacute}", "\\textasciiacute", "\\'" }, /* acute accent ´ */ /* { 769, "\\'", "", "" },*/ /* Acute accent ́--apply to next char */ { 8243, "{\\textacutedbl}", "\\textacutedbl", "$''$" }, /* Double prime ″ */ { 8245, "{\\textasciigrave}", "\\textasciigrave", "\\`" }, /* Grave accent ‵ */ /* { 768, "\\`", "", "" },*/ /* Grave accent ̀--apply to next char */ { 8963, "{\\textasciicircum}", "\\textasciicircum", ""} , /* ⌃ */ { 184, "{\\textasciicedilla}", "\\textasciicedilla", "" }, /* cedilla ¸ */ { 168, "{\\textasciidieresis}", "\\textasciidieresis", "" }, /* dieresis ¨ */ { 175, "{\\textasciimacron}", "\\textasciimacron", "" }, /* macron ¯ */ { 8593, "{\\textuparrow}", "\\textuparrow", "" }, /* Up arrow ↑ */ { 8595, "{\\textdownarrow}", "\\textdownarrow", "" }, /* Down arrow ↓ */ { 8594, "{\\textrightarrow}", "\\textrightarrow", "" }, /* Right arrow → */ { 8592, "{\\textleftarrow}", "\\textleftarrow", "" }, /* Left arrow ← */ { 12296, "{\\textlangle}", "\\textlangle", "" } , /* L-angle 〈 */ { 12297, "{\\textrangle}", "\\textrangle", "" } , /* L-angle 〉 */ { 166, "{\\textbrokenbar}", "\\textbrokenbar", "" }, /* Broken vertical bar ¦ */ { 167, "{\\textsection}", "\\textsection", "\\S{}" }, /* Section sign, § */ { 170, "{\\textordfeminine}", "\\textordfeminine", "$^a$" }, /* ª */ { 172, "{\\textlnot}", "\\textlnot", "" }, /* Lnot ¬ */ { 182, "{\\textparagraph}", "\\textparagraph", "" }, /* Paragraph sign ¶ */ { 183, "{\\textperiodcentered}", "\\textperiodcentered", "" }, /* Period-centered · */ { 186, "{\\textordmasculine}", "\\textordmasculine", "" }, /* º */ { 8214, "{\\textbardbl}", "\\textbardbl", "" }, /* Double vertical bar ‖ */ { 8224, "{\\textdagger}", "\\textdagger", "" }, /* Dagger † */ { 8225, "{\\textdaggerdbl}", "\\textdaggerdbl", "" },/* Double dagger &x2021; */ { 8226, "{\\textbullet}", "\\textbullet", "" }, /* Bullet • */ { 8494, "{\\textestimated}", "\\textestimated", "" },/* Estimated ℮ */ { 9526, "{\\textopenbullet}", "\\textopenbullet", "" },/* ┶ */ { 8220, "``", "{\\textquotedblleft}", "\\textquotedblleft" }, /* Opening double quote “ */ { 8221, "''", "{\\textquotedblright}","\\textquotedblright" }, /* Closing double quote ” */ { 8216, "`", "{\\textquoteleft}", "\\textquoteleft" }, /* Opening single quote ‘ */ { 8217, "'", "{\\textquoteright}", "\\textquoteright" }, /* Closing single quote ’ */ { 8261, "{\\textlquill}", "\\textlquill", "" }, /* Left quill ⁅ */ { 8262, "{\\textrquill}", "\\textrquill", "" }, /* Right quill ⁆ */ { 8212, "---", "{\\textemdash}", "\\textemdash" }, /* Em-dash — */ { 8211, "--", "{\\textendash}", "\\textendash" }, /* En-dash – */ { 8230, "\\ldots", "{\\textellipsis}", "\\textellipsis" }, /* Ellipsis … */ { 8194, "\\enspace", "\\hspace{.5em}", "" }, /* En-space   */ { 8195, "\\emspace", "\\hspace{1em}", "" }, /* Em-space   */ { 8201, "\\thinspace", "", ""}, /* Thin space   */ { 8203, "{\\textnospace}", "\\textnospace", "" }, /* No space ​ */ { 9251, "{\\textvisiblespace}", "\\textvisiblespace", "" }, /* Visible space ␣ */ { 215, "{\\texttimes}", "\\texttimes", "" }, /* Multiplication symbol × */ { 247, "{\\textdiv}", "\\textdiv", "" }, /* Division symbol ÷ */ { 177, "{\\textpm}", "\\textpm", "" }, /* Plus-minus character &#B1; */ { 189, "{\\textonehalf}", "\\textonehalf", "" }, /* Vulgar fraction one half ½ */ { 188, "{\\textonequarter}", "\\textonequarter", "" }, /* Vulgar fraction one quarter ½ */ { 190, "{\\textthreequarters}", "\\textthreequarters", "" }, /* Vulgar fraction three quarters ¾ */ { 8240, "{\\texttenthousand}", "\\texttenthousand", "" }, /* Per thousand sign ‰ */ { 8241, "{\\textpertenthousand}", "\\textpertenthousand", "" }, /* Per ten thousand sign ‱*/ { 8260, "{\\textfractionsolidus}", "\\textfractionsolidus", "" }, /* &x8260; */ { 8451, "{\\textcelcius}", "\\textcelcius", "" }, /* Celcicus ℃ */ { 8470, "{\\textnumero}", "\\textnumero", "" }, /* Numero symbol № */ { 8486, "{\\textohm}", "\\textohm", "" }, /* Ohm symbol Ω */ { 8487, "{\\textmho}", "\\textmho", "" }, /* Mho symbol ℧ */ { 8730, "{\\textsurd}", "\\textsurd", "" }, /* √ */ { 185, "{\\textonesuperior}", "\\textonesuperior", "" }, /*Superscript 1 ¹ */ { 178, "{\\texttwosuperior}", "\\texttwosuperior", "" }, /*Superscript 2 ² */ { 179, "{\\textthreesuperior}", "\\textthreesuperior", "" }, /*Superscript 3 ³ */ { 161, "{\\textexclamdown}", "\\textexclamdown", "" }, /* Inverted exclamation mark ¡*/ { 191, "{\\textquestiondown}", "\\textquestiondown", "" }, /* Inverted question mark ¿ */ { 162, "{\\textcent}", "\\textcent", "" }, /* Cent sign ¢ */ { 163, "{\\textsterling}", "\\textsterling", "\\pounds" }, /* Pound sign £ */ { 165, "{\\textyen}", "\\textyen", "" }, /* Yen sign ¥ */ { 402, "{\\textflorin}", "\\textflorin", "" }, /* Florin sign ƒ */ { 3647, "{\\textbaht}", "\\textbaht", "" }, /* Thai currency ฿ */ { 8355, "{\\textfrenchfranc}", "\\textfrenchfranc", "" }, /* French franc ₣ */ { 8356, "{\\textlira}", "\\textlira", "" }, /* Lira ₤ */ { 8358, "{\\textnaira}", "\\textnaria", "" }, /* Naira ₦ */ { 8361, "{\\textwon}", "\\textwon", "" }, /* ₩ */ { 8363, "{\\textdong}", "\\textdong", "" }, /* Vietnamese currency ₫ */ { 8364, "{\\texteuro}", "\\texteuro", "" }, /* Euro sign */ { 169, "{\\textcopyright}", "\\textcopyright", "" }, /* Copyright (C) © */ { 175, "{\\textregistered}", "\\textregistered", "" }, /* Registered sign (R) ¯*/ { 8482, "{\\texttrademark}", "\\texttrademark", "$^{TM}$" }, /* Trademark (TM) ™ */ { 8480, "{\\textservicemark}", "\\textservicemark", "$^{SM}$" }, /* Servicemark (SM) ℠*/ { 8471, "{\\textcircledP}", "\\textcircledP", "" }, /* Circled P ࡅ */ }; static int nlatex_chars = sizeof(latex_chars)/sizeof(struct latex_chars); /* latex2char() * * Use the latex_chars[] lookup table to determine if any character * is a special LaTeX code. Note that if it is, then the equivalency * is a Unicode character and we need to flag (by setting *unicode to 1) * that we know the output is Unicode. Otherwise, we set *unicode to 0, * meaning that the output is whatever character set was given to us * (which could be Unicode, but is not necessarily Unicode). * */ unsigned int latex2char( char *s, unsigned int *pos, int *unicode ) { unsigned int value; char *p, *q[3]; int i, j, l[3]; p = &( s[*pos] ); value = (unsigned char) *p; if ( value=='{' || value=='\\' || value=='~' || value=='$' || value=='\'' || value=='`' || value=='-' || value=='^' ) { if ( *p=='\\' && ( *p=='{' || *p=='}' ) ) { } else { for ( i=0; i #include #include #include #include "is_ws.h" #include "newstr.h" #include "newstr_conv.h" #include "xml.h" #include "xml_encoding.h" #include "fields.h" #include "name.h" #include "reftypes.h" #include "modstypes.h" #include "marc.h" #include "iso639_1.h" #include "iso639_2.h" #include "iso639_3.h" #include "bibutils.h" #include "modsin.h" /***************************************************** PUBLIC: void modsin_initparams() *****************************************************/ void modsin_initparams( param *p, const char *progname ) { p->readformat = BIBL_MODSIN; p->format_opts = 0; p->charsetin = BIBL_CHARSET_UNICODE; p->charsetin_src = BIBL_SRC_DEFAULT; p->latexin = 0; p->utf8in = 1; p->xmlin = 1; p->nosplittitle = 0; p->verbose = 0; p->addcount = 0; p->singlerefperfile = 0; p->output_raw = BIBL_RAW_WITHMAKEREFID | BIBL_RAW_WITHCHARCONVERT; p->readf = modsin_readf; p->processf = modsin_processf; p->cleanf = NULL; p->typef = NULL; p->convertf = NULL; p->all = NULL; p->nall = 0; list_init( &(p->asis) ); list_init( &(p->corps) ); if ( !progname ) p->progname = NULL; else p->progname = strdup( progname ); } /***************************************************** PUBLIC: int modsin_processf() *****************************************************/ static char modsns[]="mods"; static int modsin_detailr( xml *node, newstr *value ) { int status = BIBL_OK; if ( node->value && node->value->len ) { if ( value->len ) newstr_addchar( value, ' ' ); newstr_newstrcat( value, node->value ); if ( newstr_memerr( value ) ) return BIBL_ERR_MEMERR; } if ( node->down ) { status = modsin_detailr( node->down, value ); if ( status!=BIBL_OK ) return status; } if ( node->next ) status = modsin_detailr( node->next, value ); return status; } static int modsin_detail( xml *node, fields *info, int level ) { newstr type, value, *tp; int fstatus, status = BIBL_OK; if ( node->down ) { newstrs_init( &type, &value, NULL ); tp = xml_getattrib( node, "type" ); if ( tp ) { newstr_newstrcpy( &type, tp ); newstr_toupper( &type ); if ( newstr_memerr( &type ) ) goto out; } status = modsin_detailr( node->down, &value ); if ( status!=BIBL_OK ) goto out; if ( type.data && !strcasecmp( type.data, "PAGE" ) ) { fstatus = fields_add( info, "PAGESTART", value.data, level ); } else { fstatus = fields_add( info, type.data, value.data, level ); } if ( fstatus!=FIELDS_OK ) status = BIBL_ERR_MEMERR; out: newstrs_free( &type, &value, NULL ); } return status; } static int modsin_date( xml *node, fields *info, int level, int part ) { int fstatus, status = BIBL_OK; char *tag, *p = NULL; newstr s; if ( node->value ) p = node->value->data; if ( p ) { newstr_init( &s ); p = newstr_cpytodelim( &s, skip_ws( p ), "-", 1 ); if ( newstr_memerr( &s ) ) { status = BIBL_ERR_MEMERR; goto out; } if ( s.len ) { tag = ( part ) ? "PARTYEAR" : "YEAR"; fstatus = fields_add( info, tag, s.data, level ); if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; } } p = newstr_cpytodelim( &s, skip_ws( p ), "-", 1 ); if ( newstr_memerr( &s ) ) { status = BIBL_ERR_MEMERR; goto out; } if ( s.len ) { tag = ( part ) ? "PARTMONTH" : "MONTH"; fstatus = fields_add( info, tag, s.data, level ); if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; } } p = newstr_cpytodelim( &s, skip_ws( p ), "", 0 ); if ( newstr_memerr( &s ) ) { status = BIBL_ERR_MEMERR; goto out; } if ( s.len ) { tag = ( part ) ? "PARTDAY" : "DAY"; fstatus = fields_add( info, tag, s.data, level ); if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; } } out: newstr_free( &s ); } return status; } static int modsin_pager( xml *node, newstr *sp, newstr *ep, newstr *tp, newstr *lp ) { int status = BIBL_OK; if ( xml_tagexact( node, "start" ) ) { newstr_newstrcpy( sp, node->value ); if ( newstr_memerr( sp ) ) return BIBL_ERR_MEMERR; } else if ( xml_tagexact( node, "end" ) ) { newstr_newstrcpy( ep, node->value ); if ( newstr_memerr( ep ) ) return BIBL_ERR_MEMERR; } else if ( xml_tagexact( node, "total" ) ) { newstr_newstrcpy( tp, node->value ); if ( newstr_memerr( tp ) ) return BIBL_ERR_MEMERR; } else if ( xml_tagexact( node, "list" ) ) { newstr_newstrcpy( lp, node->value ); if ( newstr_memerr( lp ) ) return BIBL_ERR_MEMERR; } if ( node->down ) { status = modsin_pager( node->down, sp, ep, tp, lp ); if ( status!=BIBL_OK ) return status; } if ( node->next ) status = modsin_pager( node->next, sp, ep, tp, lp ); return status; } static int modsin_page( xml *node, fields *info, int level ) { int fstatus, status = BIBL_OK; newstr sp, ep, tp, lp; xml *dnode = node->down; if ( !dnode ) return BIBL_OK; newstrs_init( &sp, &ep, &tp, &lp, NULL ); status = modsin_pager( dnode, &sp, &ep, &tp, &lp ); if ( status!=BIBL_OK ) goto out; if ( sp.len || ep.len ) { if ( sp.len ) { fstatus = fields_add( info, "PAGESTART", sp.data, level ); if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; } } if ( ep.len ) { fstatus = fields_add( info, "PAGEEND", ep.data, level ); if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; } } } else if ( lp.len ) { fstatus = fields_add( info, "PAGESTART", lp.data, level ); if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; } } if ( tp.len ) { fstatus = fields_add( info, "TOTALPAGES", tp.data, level ); if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; } } out: newstrs_free( &sp, &ep, &tp, &lp, NULL ); return BIBL_OK; } static int modsin_titler( xml *node, newstr *title, newstr *subtitle ) { int status = BIBL_OK; if ( xml_tagexact( node, "title" ) ) { if ( title->len ) { newstr_strcat( title, " : " ); newstr_newstrcat( title, node->value ); } else { newstr_newstrcat( title, node->value ); } if ( newstr_memerr( title ) ) return BIBL_ERR_MEMERR; } else if ( xml_tagexact( node, "subTitle" ) ) { newstr_newstrcat( subtitle, node->value ); if ( newstr_memerr( subtitle ) ) return BIBL_ERR_MEMERR; } if ( node->down ) { status = modsin_titler( node->down, title, subtitle ); if ( status!=BIBL_OK ) return status; } if ( node->next ) status = modsin_titler( node->next, title, subtitle ); return status; } static int modsin_title( xml *node, fields *info, int level ) { char *titletag[2][2] = { { "TITLE", "SHORTTITLE" }, { "SUBTITLE", "SHORTSUBTITLE" }, }; int fstatus, status = BIBL_OK; newstr title, subtitle; xml *dnode = node->down; int abbr; dnode = node->down; if ( !dnode ) return status; newstrs_init( &title, &subtitle, NULL ); abbr = xml_tag_attrib( node, "titleInfo", "type", "abbreviated" ); status = modsin_titler( dnode, &title, &subtitle ); if ( status!=BIBL_OK ) goto out; if ( title.len ) { fstatus = fields_add( info, titletag[0][abbr], title.data, level ); if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; } } if ( subtitle.len ) { fstatus = fields_add( info, titletag[1][abbr], subtitle.data, level ); if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; } } out: newstrs_free( &title, &subtitle, NULL ); return status; } /* modsin_marcrole_convert() * * Map MARC-authority roles for people or organizations associated * with a reference to internal roles. * * Take input strings with roles separated by '|' characters, e.g. * "author" or "author|creator" or "edt" or "editor|edt". */ static int modsin_marcrole_convert( newstr *s, char *suffix, newstr *out ) { convert roles[] = { { "author", "AUTHOR" }, { "aut", "AUTHOR" }, { "aud", "AUTHOR" }, { "aui", "AUTHOR" }, { "aus", "AUTHOR" }, { "creator", "AUTHOR" }, { "cre", "AUTHOR" }, { "editor", "EDITOR" }, { "edt", "EDITOR" }, { "degree grantor", "DEGREEGRANTOR" }, { "dgg", "DEGREEGRANTOR" }, { "organizer of meeting","ORGANIZER" }, { "orm", "ORGANIZER" }, { "patent holder", "ASSIGNEE" }, { "pth", "ASSIGNEE" } }; int nroles = sizeof( roles ) / sizeof( roles[0] ); int i, nmismatch, n = -1, status = BIBL_OK; char *p, *q; if ( s->len == 0 ) { /* ...default to author on an empty string */ n = 0; } else { /* ...find first match in '|'-separated list */ for ( i=0; idata; while ( *p ) { q = roles[i].mods; nmismatch = 0; while ( *p && *p!='|' && nmismatch == 0) { if ( toupper( (unsigned char)*p ) != toupper( (unsigned char)*q ) ) nmismatch++; p++; q++; } if ( !nmismatch && !(*(q++))) n = i; if ( *p=='|' ) p++; } } } if ( n!=-1 ) { newstr_strcpy( out, roles[n].internal ); if ( suffix ) newstr_strcat( out, suffix ); } else { newstr_strcpy( out, s->data ); } if ( newstr_memerr( out ) ) status = BIBL_ERR_MEMERR; return status; } static int modsin_asis_corp_r( xml *node, newstr *name, newstr *role ) { int status = BIBL_OK; if ( xml_tagexact( node, "namePart" ) ) { newstr_newstrcpy( name, node->value ); if ( newstr_memerr( name ) ) return BIBL_ERR_MEMERR; } else if ( xml_tagexact( node, "roleTerm" ) ) { if ( role->len ) newstr_addchar( role, '|' ); newstr_newstrcat( role, node->value ); if ( newstr_memerr( role ) ) return BIBL_ERR_MEMERR; } if ( node->down ) { status = modsin_asis_corp_r( node->down, name, role ); if ( status!=BIBL_OK ) return status; } if ( node->next ) status = modsin_asis_corp_r( node->next, name, role ); return status; } static int modsin_personr( xml *node, newstr *name, newstr *suffix, newstr *roles ) { newstr outname; int status = BIBL_OK; newstr_init( &outname ); if ( xml_tagexact( node, "namePart" ) ) { if ( xml_tag_attrib( node, "namePart", "type", "family" ) ) { if ( name->len ) newstr_prepend( name, "|" ); newstr_prepend( name, node->value->data ); } else if (xml_tag_attrib( node, "namePart", "type", "suffix") || xml_tag_attrib( node, "namePart", "type", "termsOfAddress" )) { if ( suffix->len ) newstr_addchar( suffix, ' ' ); newstr_strcat( suffix, node->value->data ); } else if (xml_tag_attrib( node, "namePart", "type", "date")){ } else { if ( name->len ) newstr_addchar( name, '|' ); name_parse( &outname, node->value, NULL, NULL ); newstr_newstrcat( name, &outname ); } } else if ( xml_tagexact( node, "roleTerm" ) ) { if ( roles->len ) newstr_addchar( roles, '|' ); newstr_newstrcat( roles, node->value ); } if ( node->down ) { status = modsin_personr( node->down, name, suffix, roles ); if ( status!=BIBL_OK ) goto out; } if ( node->next ) status = modsin_personr( node->next, name, suffix, roles ); out: newstr_free( &outname ); return status; } static int modsin_asis_corp( xml *node, fields *info, int level, char *suffix ) { int fstatus, status = BIBL_OK; newstr name, roles, role_out; xml *dnode = node->down; if ( dnode ) { newstrs_init( &name, &roles, &role_out, NULL ); status = modsin_asis_corp_r( dnode, &name, &roles ); if ( status!=BIBL_OK ) goto out; status = modsin_marcrole_convert( &roles, suffix, &role_out ); if ( status!=BIBL_OK ) goto out; fstatus = fields_add( info, role_out.data, name.data, level ); if ( fstatus!=FIELDS_OK ) status = BIBL_ERR_MEMERR; out: newstrs_free( &name, &roles, &role_out, NULL ); } return status; } static int modsin_person( xml *node, fields *info, int level ) { newstr name, suffix, roles, role_out; int fstatus, status = BIBL_OK; xml *dnode = node->down; if ( dnode ) { newstrs_init( &name, &suffix, &roles, &role_out, NULL ); status = modsin_personr( dnode, &name, &suffix, &roles ); if ( status!=BIBL_OK ) goto out; if ( suffix.len ) { newstr_strcat( &name, "||" ); newstr_newstrcat( &name, &suffix ); if ( newstr_memerr( &name ) ) { status=BIBL_ERR_MEMERR; goto out; } } status = modsin_marcrole_convert( &roles, NULL, &role_out ); if ( status!=BIBL_OK ) goto out; fstatus = fields_add( info, role_out.data, name.data, level ); if ( fstatus!=FIELDS_OK ) status = BIBL_ERR_MEMERR; out: newstrs_free( &name, &suffix, &roles, &role_out, NULL ); } return status; } static int modsin_placeterm_text( xml *node, fields *info, int level, int school ) { char address_tag[] = "ADDRESS"; char school_tag[] = "SCHOOL"; char *tag; int fstatus; tag = ( school ) ? school_tag : address_tag; fstatus = fields_add( info, tag, xml_data( node ), level ); if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR; return BIBL_OK; } static int modsin_placeterm_code( xml *node, fields *info, int level ) { int fstatus, status = BIBL_OK; newstr s, *auth; newstr_init( &s ); auth = xml_getattrib( node, "authority" ); if ( auth && auth->len ) { newstr_newstrcpy( &s, auth ); newstr_addchar( &s, '|' ); } newstr_newstrcat( &s, node->value ); if ( newstr_memerr( &s ) ) { status = BIBL_ERR_MEMERR; goto out; } fstatus = fields_add( info, "CODEDADDRESS", s.data, level ); if ( fstatus!=FIELDS_OK ) status = BIBL_ERR_MEMERR; out: newstr_free( &s ); return status; } static int modsin_placeterm( xml *node, fields *info, int level, int school ) { int status = BIBL_OK; newstr *type; type = xml_getattrib( node, "type" ); if ( type && type->len ) { if ( !strcmp( type->data, "text" ) ) status = modsin_placeterm_text( node, info, level, school ); else if ( !strcmp( type->data, "code" ) ) status = modsin_placeterm_code( node, info, level ); } return status; } static int modsin_placer( xml *node, fields *info, int level, int school ) { int status = BIBL_OK; if ( xml_tag_attrib( node, "place", "type", "school" ) ) { school = 1; } else if ( xml_tagexact( node, "placeTerm" ) ) { status = modsin_placeterm( node, info, level, school ); } if ( node->down ) { status = modsin_placer( node->down, info, level, school ); if ( status!=BIBL_OK ) return status; } if ( node->next ) status = modsin_placer( node->next, info, level, school ); return status; } static int modsin_origininfor( xml *node, fields *info, int level, newstr *pub, newstr *add, newstr *addc, newstr *ed, newstr *iss ) { int status = BIBL_OK; if ( xml_tagexact( node, "dateIssued" ) ) status = modsin_date( node, info, level, 0 ); else if ( xml_tagexact( node, "publisher" ) && xml_hasdata( node ) ) { newstr_newstrcat( pub, node->value ); if ( newstr_memerr( pub ) ) return BIBL_ERR_MEMERR; } else if ( xml_tagexact( node, "edition" ) && xml_hasdata( node ) ) { newstr_newstrcat( ed, node->value ); if( newstr_memerr( ed ) ) return BIBL_ERR_MEMERR; } else if ( xml_tagexact( node, "issuance" ) && xml_hasdata( node ) ) { newstr_newstrcat( iss, node->value ); if ( newstr_memerr( iss ) ) return BIBL_ERR_MEMERR; } else if ( xml_tagexact( node, "place" ) && xml_hasdata( node ) ) status = modsin_placer( node, info, level, 0 ); if ( status!=BIBL_OK ) return status; if ( node->down ) { status = modsin_origininfor( node->down, info, level, pub, add, addc, ed, iss ); if ( status!=BIBL_OK ) return status; } if ( node->next ) status = modsin_origininfor( node->next, info, level, pub, add, addc, ed, iss ); return status; } static int modsin_origininfo( xml *node, fields *info, int level ) { newstr publisher, address, addcode, edition, issuance; int fstatus, status = BIBL_OK; if ( node->down ) { newstrs_init( &publisher, &address, &addcode, &edition, &issuance, NULL ); status = modsin_origininfor( node->down, info, level, &publisher, &address, &addcode, &edition, &issuance ); if ( status!=BIBL_OK ) goto out; if ( publisher.len ) { fstatus = fields_add( info, "PUBLISHER", publisher.data, level ); if ( fstatus!=FIELDS_OK ) { status=BIBL_ERR_MEMERR; goto out; } } if ( address.len ) { fstatus = fields_add( info, "ADDRESS", address.data, level ); if ( fstatus!=FIELDS_OK ) { status=BIBL_ERR_MEMERR; goto out; } } if ( addcode.len ) { fstatus = fields_add( info, "CODEDADDRESS", addcode.data, level ); if ( fstatus!=FIELDS_OK ) { status=BIBL_ERR_MEMERR; goto out; } } if ( edition.len ) { fstatus = fields_add( info, "EDITION", edition.data, level ); if ( fstatus!=FIELDS_OK ) { status=BIBL_ERR_MEMERR; goto out; } } if ( issuance.len ) { fstatus = fields_add( info, "ISSUANCE", issuance.data, level ); if ( fstatus!=FIELDS_OK ) { status=BIBL_ERR_MEMERR; goto out; } } out: newstrs_free( &publisher, &address, &addcode, &edition, &issuance, NULL ); } return status; } static int modsin_subjectr( xml *node, fields *info, int level ) { int fstatus, status = BIBL_OK; if ( xml_tagexact( node, "topic" ) || xml_tagexact( node, "geographic" )) { fstatus = fields_add( info, "KEYWORD", node->value->data, level ); if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR; } if ( node->down ) { status = modsin_subjectr( node->down, info, level ); if ( status!=BIBL_OK ) return status; } if ( node->next ) status = modsin_subjectr( node->next, info, level ); return status; } static int modsin_subject( xml *node, fields *info, int level ) { int status = BIBL_OK; if ( node->down ) status = modsin_subjectr( node->down, info, level ); return status; } static int modsin_id1( xml *node, fields *info, int level ) { int fstatus; newstr *ns; ns = xml_getattrib( node, "ID" ); if ( ns && ns->len ) { fstatus = fields_add( info, "REFNUM", ns->data, level ); if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR; } return BIBL_OK; } static int modsin_genre( xml *node, fields *info, int level ) { char *added[] = { "manuscript", "academic journal", "magazine", "hearing", "report", "Ph.D. thesis", "Masters thesis", "Diploma thesis", "Doctoral thesis", "Habilitation thesis", "collection", "handwritten note", "communication", "teletype", "airtel", "memo", "e-mail communication", "press release", "television broadcast", "electronic" }; int nadded = sizeof( added ) /sizeof( char *); int i, ismarc = 0, isadded = 0, fstatus; char *d; if ( !xml_hasdata( node ) ) return BIBL_OK; d = xml_data( node ); if ( marc_findgenre( d )!=-1 ) ismarc = 1; if ( !ismarc ) { for ( i=0; i.... * ... * xxx = rfc3066 * xxx = iso639-2b * xxx = iso639-3 * xxx = rfc4646 * xxx = rfc5646 */ static int modsin_languager( xml *node, fields *info, int level ) { int fstatus, status = BIBL_OK; char *d = NULL; if ( xml_tagexact( node, "languageTerm" ) ) { if ( xml_hasdata( node ) ) { if ( xml_hasattrib( node, "type", "code" ) ) { if ( xml_hasattrib( node, "authority", "iso639-1" ) ) d = iso639_1_from_code( xml_data( node ) ); else if ( xml_hasattrib( node, "authority", "iso639-2b" ) ) d = iso639_2_from_code( xml_data( node ) ); else if ( xml_hasattrib( node, "authority", "iso639-3" )) d = iso639_3_from_code( xml_data( node ) ); } if ( !d ) d = xml_data( node ); fstatus = fields_add( info, "LANGUAGE", d, level ); if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR; } } if ( node->next ) status = modsin_languager( node->next, info, level ); return status; } static int modsin_language( xml *node, fields *info, int level ) { int fstatus, status = BIBL_OK; /* Old versions of MODS had English */ if ( xml_hasdata( node ) ) { fstatus = fields_add( info, "LANGUAGE", xml_data( node ), level ); if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR; } /* New versions of MODS have English */ if ( node->down ) status = modsin_languager( node->down, info, level ); return status; } static int modsin_simple( xml *node, fields *info, char *tag, int level ) { int fstatus; if ( xml_hasdata( node ) ) { fstatus = fields_add( info, tag, xml_data( node ), level ); if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR; } return BIBL_OK; } static int modsin_locationr( xml *node, fields *info, int level ) { int fstatus, status = BIBL_OK; char *tag=NULL; if ( xml_tagexact( node, "url" ) ) { if ( xml_hasattrib( node, "access", "raw object" ) ) tag = "FILEATTACH"; else tag = "URL"; } else if ( xml_tagexact( node, "physicalLocation" ) ) { if ( xml_hasattrib( node, "type", "school" ) ) tag = "SCHOOL"; else tag = "LOCATION"; } if ( tag ) { fstatus = fields_add( info, tag, node->value->data, level ); if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR; } if ( node->down ) { status = modsin_locationr( node->down, info, level ); if ( status!=BIBL_OK ) return status; } if ( node->next ) status = modsin_locationr( node->next, info, level ); return status; } static int modsin_location( xml *node, fields *info, int level ) { int status = BIBL_OK; if ( node->down ) status = modsin_locationr( node->down, info, level ); return status; } static int modsin_descriptionr( xml *node, newstr *s ) { int status = BIBL_OK; if ( xml_tagexact( node, "extent" ) || xml_tagexact( node, "note" ) ) { newstr_newstrcpy( s, node->value ); if ( newstr_memerr( s ) ) return BIBL_ERR_MEMERR; } if ( node->down ) { status = modsin_descriptionr( node->down, s ); if ( status!=BIBL_OK ) return status; } if ( node->next ) status = modsin_descriptionr( node->next, s ); return status; } static int modsin_description( xml *node, fields *info, int level ) { int fstatus, status = BIBL_OK; newstr s; newstr_init( &s ); if ( node->down ) { status = modsin_descriptionr( node->down, &s ); if ( status!=BIBL_OK ) goto out; } else { if ( node->value && node->value->len > 0 ) newstr_newstrcpy( &s, node->value ); if ( newstr_memerr( &s ) ) { status = BIBL_ERR_MEMERR; goto out; } } if ( s.len ) { fstatus = fields_add( info, "DESCRIPTION", s.data, level ); if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; } } out: newstr_free( &s ); return BIBL_OK; } static int modsin_partr( xml *node, fields *info, int level ) { int status = BIBL_OK; if ( xml_tagexact( node, "detail" ) ) status = modsin_detail( node, info, level ); else if ( xml_tag_attrib( node, "extent", "unit", "page" ) ) status = modsin_page( node, info, level ); else if ( xml_tag_attrib( node, "extent", "unit", "pages" ) ) status = modsin_page( node, info, level ); else if ( xml_tagexact( node, "date" ) ) status = modsin_date( node, info, level, 1 ); if ( status!=BIBL_OK ) return status; if ( node->next ) status = modsin_partr( node->next, info, level ); return status; } static int modsin_part( xml *node, fields *info, int level ) { if ( node->down ) return modsin_partr( node->down, info, level ); return BIBL_OK; } /* Q3 .A65 */ static int modsin_classification( xml *node, fields *info, int level ) { int fstatus, status = BIBL_OK; char *tag, *d; if ( xml_hasdata( node ) ) { d = xml_data( node ); if ( xml_tag_attrib( node, "classification", "authority", "lcc" ) ) tag = "LCC"; else tag = "CLASSIFICATION"; fstatus = fields_add( info, tag, d, level ); if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR; } if ( node->down ) status = modsin_classification( node->down, info, level ); return status; } static int modsin_recordinfo( xml *node, fields *info, int level ) { int fstatus; xml *curr; char *d; /* extract recordIdentifier */ curr = node; while ( curr ) { if ( xml_tagexact( curr, "recordIdentifier" ) && xml_hasdata( curr ) ) { d = xml_data( curr ); fstatus = fields_add( info, "REFNUM", d, level ); if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR; } curr = curr->next; } return BIBL_OK; } static int modsin_identifier( xml *node, fields *info, int level ) { convert ids[] = { { "citekey", "REFNUM" }, { "issn", "ISSN" }, { "isbn", "ISBN" }, { "doi", "DOI" }, { "url", "URL" }, { "uri", "URL" }, { "pmid", "PMID" }, { "pubmed", "PMID" }, { "medline", "MEDLINE" }, { "arXiv", "ARXIV" }, { "pii", "PII" }, { "isi", "ISIREFNUM" }, { "serial number", "SERIALNUMBER" }, { "accessnum", "ACCESSNUM" }, { "jstor", "JSTOR" }, }; int i, fstatus, n = sizeof( ids ) / sizeof( ids[0] ); if ( !node->value || node->value->len==0 ) return BIBL_OK; for ( i=0; ivalue->data, level ); if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR; } } return BIBL_OK; } static int modsin_mods( xml *node, fields *info, int level ) { convert simple[] = { { "note", "NOTES" }, { "abstract", "ABSTRACT" }, { "bibtex-annote", "ANNOTE" }, { "typeOfResource", "RESOURCE" }, { "tableOfContents", "CONTENTS" }, }; int nsimple = sizeof( simple ) / sizeof( simple[0] ); int i, found = 0, status = BIBL_OK; for ( i=0; idown ) status = modsin_recordinfo( node->down, info, level ); else if ( xml_tagexact( node, "part" ) ) modsin_part( node, info, level ); else if ( xml_tagexact( node, "identifier" ) ) status = modsin_identifier( node, info, level ); else if ( xml_tagexact( node, "originInfo" ) ) status = modsin_origininfo( node, info, level ); else if ( xml_tagexact( node, "language" ) ) status = modsin_language( node, info, level ); else if ( xml_tagexact( node, "genre" ) ) status = modsin_genre( node, info, level ); else if ( xml_tagexact( node, "date" ) ) status = modsin_date( node, info, level, 0 ); else if ( xml_tagexact( node, "subject" ) ) status = modsin_subject( node, info, level ); else if ( xml_tagexact( node, "classification" ) ) status = modsin_classification( node, info, level ); else if ( xml_tagexact( node, "location" ) ) status = modsin_location( node, info, level ); else if ( xml_tagexact( node, "physicalDescription" ) ) status = modsin_description( node, info, level ); else if ( xml_tag_attrib( node, "relatedItem", "type", "host" ) || xml_tag_attrib( node, "relatedItem", "type", "series" ) ) { if ( node->down ) status = modsin_mods( node->down, info, level+1 ); } if ( status!=BIBL_OK ) return status; } if ( node->next ) status = modsin_mods( node->next, info, level ); return status; } static int modsin_assembleref( xml *node, fields *info ) { int status = BIBL_OK; if ( xml_tagexact( node, "mods" ) ) { status = modsin_id1( node, info, 0 ); if ( status!=BIBL_OK ) return status; if ( node->down ) { status = modsin_mods( node->down, info, 0 ); if ( status!=BIBL_OK ) return status; } } else if ( node->down ) { status = modsin_assembleref( node->down, info ); if ( status!=BIBL_OK ) return status; } if ( node->next ) status = modsin_assembleref( node->next, info ); return status; } int modsin_processf( fields *modsin, char *data, char *filename, long nref ) { int status; xml top; xml_init( &top ); xml_tree( data, &top ); status = modsin_assembleref( &top, modsin ); xml_free( &top ); if ( status==BIBL_OK ) return 1; else return 0; } /***************************************************** PUBLIC: int modsin_readf() *****************************************************/ static char * modsin_startptr( char *p ) { char *startptr; startptr = xml_findstart( p, "mods:mods" ); if ( startptr ) { /* set namespace if found */ xml_pns = modsns; } else { startptr = xml_findstart( p, "mods" ); if ( startptr ) xml_pns = NULL; } return startptr; } static char * modsin_endptr( char *p ) { return xml_findend( p, "mods" ); } int modsin_readf( FILE *fp, char *buf, int bufsize, int *bufpos, newstr *line, newstr *reference, int *fcharset ) { newstr tmp; int m, file_charset = CHARSET_UNKNOWN; char *startptr = NULL, *endptr = NULL; newstr_init( &tmp ); do { if ( line->data ) newstr_newstrcat( &tmp, line ); if ( tmp.data ) { m = xml_getencoding( &tmp ); if ( m!=CHARSET_UNKNOWN ) file_charset = m; startptr = modsin_startptr( tmp.data ); endptr = modsin_endptr( tmp.data ); } else startptr = endptr = NULL; newstr_empty( line ); if ( startptr && endptr ) { newstr_segcpy( reference, startptr, endptr ); newstr_strcpy( line, endptr ); } } while ( !endptr && newstr_fget( fp, buf, bufsize, bufpos, line ) ); newstr_free( &tmp ); *fcharset = file_charset; return ( reference->len > 0 ); } hs-bibutils-5.5/bibutils/wordout.c0000644000000000000000000003753012445605732015502 0ustar0000000000000000/* * wordout.c * * (Word 2007 format) * * Copyright (c) Chris Putnam 2007-2014 * * Source code released under the GPL version 2 * */ #include #include #include #include "newstr.h" #include "fields.h" #include "utf8.h" #include "wordout.h" void wordout_initparams( param *p, const char *progname ) { p->writeformat = BIBL_WORD2007OUT; p->format_opts = 0; p->charsetout = BIBL_CHARSET_UNICODE; p->charsetout_src = BIBL_SRC_DEFAULT; p->latexout = 0; p->utf8out = BIBL_CHARSET_UTF8_DEFAULT; p->utf8bom = BIBL_CHARSET_BOM_DEFAULT; if ( !p->utf8out ) p->xmlout = BIBL_XMLOUT_ENTITIES; else p->xmlout = BIBL_XMLOUT_TRUE; p->nosplittitle = 0; p->verbose = 0; p->addcount = 0; p->singlerefperfile = 0; p->headerf = wordout_writeheader; p->footerf = wordout_writefooter; p->writef = wordout_write; } typedef struct convert { char oldtag[25]; char newtag[25]; int code; } convert; /* At the moment 17 unique types of sources are defined: {code} Art ArticleInAPeriodical Book BookSection Case Conference DocumentFromInternetSite ElectronicSource Film InternetSite Interview JournalArticle Report Misc Patent Performance Proceedings SoundRecording {code} */ enum { TYPE_UNKNOWN = 0, TYPE_ART, TYPE_ARTICLEINAPERIODICAL, TYPE_BOOK, TYPE_BOOKSECTION, TYPE_CASE, TYPE_CONFERENCE, TYPE_DOCUMENTFROMINTERNETSITE, TYPE_ELECTRONICSOURCE, TYPE_FILM, TYPE_INTERNETSITE, TYPE_INTERVIEW, TYPE_JOURNALARTICLE, TYPE_MISC, TYPE_PATENT, TYPE_PERFORMANCE, TYPE_PROCEEDINGS, TYPE_REPORT, TYPE_SOUNDRECORDING, TYPE_THESIS, TYPE_MASTERSTHESIS, TYPE_PHDTHESIS, }; /* * fixed output */ static void output_fixed( FILE *outptr, char *tag, char *data, int level ) { int i; for ( i=0; i%s\n", tag, data, tag ); } /* detail output * */ static void output_item( fields *info, FILE *outptr, char *tag, int item, int level ) { int i; if ( item==-1 ) return; for ( i=0; i%s\n", tag, info->data[item].data, tag ); fields_setused( info, item ); } static void output_itemv( FILE *outptr, char *tag, char *item, int level ) { int i; for ( i=0; i%s\n", tag, item, tag ); } /* range output * * start-end * */ static void output_range( FILE *outptr, char *tag, char *start, char *end, int level ) { int i; if ( start==NULL && end==NULL ) return; if ( start==NULL ) output_itemv( outptr, tag, end, 0 ); else if ( end==NULL ) output_itemv( outptr, tag, start, 0 ); else { for ( i=0; i%s-%s\n", tag, start, end, tag ); } } static void output_list( fields *info, FILE *outptr, convert *c, int nc ) { int i, n; for ( i=0; in; ++i ) { if ( strcasecmp( info->tag[i].data, "GENRE" ) && strcasecmp( info->tag[i].data, "NGENRE" ) ) continue; genre = info->data[i].data; for ( j=0; jlevel[i]; if ( !strcasecmp( genre, "academic journal" ) ) { type = TYPE_JOURNALARTICLE; } else if ( !strcasecmp( genre, "periodical" ) ) { if ( type == TYPE_UNKNOWN ) type = TYPE_ARTICLEINAPERIODICAL; } else if ( !strcasecmp( genre, "book" ) || !strcasecmp( genre, "collection" ) ) { if ( info->level[i]==0 ) type = TYPE_BOOK; else type = TYPE_BOOKSECTION; } else if ( !strcasecmp( genre, "conference publication" ) ) { if ( level==0 ) type=TYPE_CONFERENCE; type = TYPE_PROCEEDINGS; } else if ( !strcasecmp( genre, "thesis" ) ) { if ( type==TYPE_UNKNOWN ) type=TYPE_THESIS; } else if ( !strcasecmp( genre, "Ph.D. thesis" ) ) { type = TYPE_PHDTHESIS; } else if ( !strcasecmp( genre, "Masters thesis" ) ) { type = TYPE_MASTERSTHESIS; } } } return type; } static int get_type_from_resource( fields *info ) { int type = TYPE_UNKNOWN, i; char *resource; for ( i=0; in; ++i ) { if ( strcasecmp( info->tag[i].data, "GENRE" )!=0 && strcasecmp( info->tag[i].data, "NGENRE" )!=0 ) continue; resource = info->data[i].data; if ( !strcasecmp( resource, "moving image" ) ) type = TYPE_FILM; } return type; } static int get_type( fields *info ) { int type; type = get_type_from_genre( info ); if ( type==TYPE_UNKNOWN ) type = get_type_from_resource( info ); return type; } static void output_titleinfo( fields *info, FILE *outptr, char *tag, int level ) { newstr *mainttl = fields_findv( info, level, FIELDS_STRP, "TITLE" ); newstr *subttl = fields_findv( info, level, FIELDS_STRP, "SUBTITLE" ); if ( mainttl || subttl ) { fprintf( outptr, "<%s>", tag ); if ( mainttl ) fprintf( outptr, "%s", mainttl->data ); if ( subttl ) { if ( mainttl ) { if ( mainttl->len > 0 && mainttl->data[mainttl->len-1]!='?' ) fprintf( outptr, ": " ); else fprintf( outptr, " " ); } fprintf( outptr, "%s", subttl->data ); } fprintf( outptr, "\n", tag ); } } static void output_title( fields *info, FILE *outptr, int level ) { char *ttl = fields_findv( info, level, FIELDS_CHRP, "TITLE" ); char *subttl = fields_findv( info, level, FIELDS_CHRP, "SUBTITLE" ); char *shrttl = fields_findv( info, level, FIELDS_CHRP, "SHORTTITLE" ); output_titleinfo( info, outptr, "b:Title", level ); /* output shorttitle if it's different from normal title */ if ( shrttl ) { if ( !ttl || ( strcmp( shrttl, ttl ) || subttl ) ) { fprintf( outptr, " " ); fprintf( outptr, "%s", shrttl ); fprintf( outptr, "\n" ); } } } static void output_name_nomangle( FILE *outptr, char *p ) { fprintf( outptr, "" ); fprintf( outptr, "%s", p ); fprintf( outptr, "\n" ); } static void output_name( FILE *outptr, char *p ) { newstr family, part; int n=0, npart=0; newstr_init( &family ); while ( *p && *p!='|' ) newstr_addchar( &family, *p++ ); if ( *p=='|' ) p++; if ( family.len ) { fprintf( outptr, "" ); fprintf( outptr, "%s",family.data ); n++; } newstr_free( &family ); newstr_init( &part ); while ( *p ) { while ( *p && *p!='|' ) newstr_addchar( &part, *p++ ); if ( part.len ) { if ( n==0 ) fprintf( outptr, "" ); if ( npart==0 ) fprintf( outptr, "%s", part.data ); else fprintf( outptr, "%s", part.data ); n++; npart++; } if ( *p=='|' ) { p++; newstr_empty( &part ); } } if ( n ) fprintf( outptr, "\n" ); newstr_free( &part ); } #define NAME (1) #define NAME_ASIS (2) #define NAME_CORP (4) static int extract_name_and_info( newstr *outtag, newstr *intag ) { int code = NAME; newstr_newstrcpy( outtag, intag ); if ( newstr_findreplace( outtag, ":ASIS", "" ) ) code = NAME_ASIS; if ( newstr_findreplace( outtag, ":CORP", "" ) ) code = NAME_CORP; return code; } static void output_name_type( fields *info, FILE *outptr, int level, char *map[], int nmap, char *tag ) { newstr ntag; int i, j, n=0, code, nfields; newstr_init( &ntag ); nfields = fields_num( info ); for ( j=0; jtag[i]) ); if ( strcasecmp( ntag.data, map[j] ) ) continue; if ( n==0 ) fprintf( outptr, "<%s>\n", tag ); if ( code != NAME ) output_name_nomangle( outptr, info->data[i].data ); else output_name( outptr, info->data[i].data ); fields_setused( info, i ); n++; } } newstr_free( &ntag ); if ( n ) fprintf( outptr, "\n", tag ); } static void output_names( fields *info, FILE *outptr, int level, int type ) { char *authors[] = { "AUTHOR", "WRITER", "ASSIGNEE", "ARTIST", "CARTOGRAPHER", "INVENTOR", "ORGANIZER", "DIRECTOR", "PERFORMER", "REPORTER", "TRANSLATOR", "RECIPIENT", "2ND_AUTHOR", "3RD_AUTHOR", "SUB_AUTHOR", "COMMITTEE", "COURT", "LEGISLATIVEBODY" }; int nauthors = sizeof( authors ) / sizeof( authors[0] ); char *editors[] = { "EDITOR" }; int neditors = sizeof( editors ) / sizeof( editors[0] ); char author_default[] = "b:Author", inventor[] = "b:Inventor"; char *author_type = author_default; if ( type == TYPE_PATENT ) author_type = inventor; fprintf( outptr, "\n" ); output_name_type( info, outptr, level, authors, nauthors, author_type ); output_name_type( info, outptr, level, editors, neditors, "b:Editor" ); fprintf( outptr, "\n" ); } static void output_date( fields *info, FILE *outptr, int level ) { char *year = fields_findv_firstof( info, level, FIELDS_CHRP, "PARTYEAR", "YEAR", NULL ); char *month = fields_findv_firstof( info, level, FIELDS_CHRP, "PARTMONTH", "MONTH", NULL ); char *day = fields_findv_firstof( info, level, FIELDS_CHRP, "PARTDAY", "DAY", NULL ); if ( year ) output_itemv( outptr, "b:Year", year, 0 ); if ( month ) output_itemv( outptr, "b:Month", month, 0 ); if ( day ) output_itemv( outptr, "b:Day", day, 0 ); } static void output_pages( fields *info, FILE *outptr, int level ) { char *sn = fields_findv( info, LEVEL_ANY, FIELDS_CHRP, "PAGESTART" ); char *en = fields_findv( info, LEVEL_ANY, FIELDS_CHRP, "PAGEEND" ); char *ar = fields_findv( info, LEVEL_ANY, FIELDS_CHRP, "ARTICLENUMBER" ); if ( sn || en ) output_range( outptr, "b:Pages", sn, en, level ); else if ( ar ) output_range( outptr, "b:Pages", ar, NULL, level ); } static void output_includedin( fields *info, FILE *outptr, int type ) { if ( type==TYPE_JOURNALARTICLE ) { output_titleinfo( info, outptr, "b:JournalName", 1 ); } else if ( type==TYPE_ARTICLEINAPERIODICAL ) { output_titleinfo( info, outptr, "b:PeriodicalTitle", 1 ); } else if ( type==TYPE_BOOKSECTION ) { output_titleinfo( info, outptr, "b:ConferenceName", 1 ); /*??*/ } else if ( type==TYPE_PROCEEDINGS ) { output_titleinfo( info, outptr, "b:ConferenceName", 1 ); } } static int type_is_thesis( int type ) { if ( type==TYPE_THESIS || type==TYPE_PHDTHESIS || type==TYPE_MASTERSTHESIS ) return 1; else return 0; } static void output_thesisdetails( fields *info, FILE *outptr, int type ) { char *tag; int i, n; if ( type==TYPE_PHDTHESIS ) output_fixed( outptr, "b:ThesisType", "Ph.D. Thesis", 0 ); else if ( type==TYPE_MASTERSTHESIS ) output_fixed( outptr, "b:ThesisType", "Masters Thesis", 0 ); n = fields_num( info ); for ( i=0; i" ); for ( i=0; i\n" ); if ( type_is_thesis( type ) ) output_thesisdetails( info, outptr, type ); } static void output_comments( fields *info, FILE *outptr, int level ) { vplist notes; char *abs; int i; vplist_init( ¬es ); abs = fields_findv( info, level, FIELDS_CHRP, "ABSTRACT" ); fields_findv_each( info, level, FIELDS_CHRP, ¬es, "NOTES" ); if ( abs || notes.n ) fprintf( outptr, "" ); if ( abs ) fprintf( outptr, "%s", abs ); for ( i=0; i\n" ); vplist_free( ¬es ); } static void output_bibkey( fields *info, FILE *outptr ) { char *bibkey = fields_findv_firstof( info, LEVEL_ANY, FIELDS_CHRP, "REFNUM", "BIBKEY", NULL ); if ( bibkey ) output_itemv( outptr, "b:Tag", bibkey, 0 ); } static void output_citeparts( fields *info, FILE *outptr, int level, int max, int type ) { convert origin[] = { { "ADDRESS", "b:City", LEVEL_ANY }, { "PUBLISHER", "b:Publisher", LEVEL_ANY }, { "EDITION", "b:Edition", LEVEL_ANY } }; int norigin = sizeof( origin ) / sizeof ( convert ); convert parts[] = { { "VOLUME", "b:Volume", LEVEL_ANY }, { "SECTION", "b:Section", LEVEL_ANY }, { "ISSUE", "b:Issue", LEVEL_ANY }, { "NUMBER", "b:Issue", LEVEL_ANY }, { "PUBLICLAWNUMBER", "b:Volume", LEVEL_ANY }, { "SESSION", "b:Issue", LEVEL_ANY }, { "URL", "b:Url", LEVEL_ANY }, }; int nparts=sizeof(parts)/sizeof(convert); output_bibkey( info, outptr ); output_type( info, outptr, type ); output_list( info, outptr, origin, norigin ); output_date( info, outptr, level ); output_includedin( info, outptr, type ); output_list( info, outptr, parts, nparts ); output_pages( info, outptr, level ); output_names( info, outptr, level, type ); output_title( info, outptr, 0 ); output_comments( info, outptr, level ); } void wordout_write( fields *info, FILE *outptr, param *p, unsigned long numrefs ) { int max = fields_maxlevel( info ); int type = get_type( info ); fprintf( outptr, "\n" ); output_citeparts( info, outptr, -1, max, type ); fprintf( outptr, "\n" ); fflush( outptr ); } void wordout_writeheader( FILE *outptr, param *p ) { if ( p->utf8bom ) utf8_writebom( outptr ); fprintf(outptr,"\n"); fprintf(outptr,"\n"); } void wordout_writefooter( FILE *outptr ) { fprintf(outptr,"\n"); fflush( outptr ); } hs-bibutils-5.5/bibutils/bibl.h0000644000000000000000000000072612445605732014711 0ustar0000000000000000/* * bibl.h * * Copyright (c) Chris Putnam 2005-2014 * * Source code released under the GPL version 2 * */ #ifndef BIBL_H #define BIBL_H #include #include "newstr.h" #include "fields.h" #include "reftypes.h" typedef struct { long nrefs; long maxrefs; fields **ref; } bibl; extern void bibl_init( bibl *b ); extern int bibl_addref( bibl *b, fields *ref ); extern void bibl_free( bibl *b ); extern int bibl_copy( bibl *bout, bibl *bin ); #endif hs-bibutils-5.5/bibutils/modsout.c0000644000000000000000000007416412445605732015475 0ustar0000000000000000/* * modsout.c * * Copyright (c) Chris Putnam 2003-2014 * * Source code released under the GPL version 2 * */ #include #include #include #include "is_ws.h" #include "newstr.h" #include "charsets.h" #include "newstr_conv.h" #include "fields.h" #include "iso639_2.h" #include "utf8.h" #include "modsout.h" #include "modstypes.h" #include "marc.h" void modsout_initparams( param *p, const char *progname ) { p->writeformat = BIBL_MODSOUT; p->format_opts = 0; p->charsetout = BIBL_CHARSET_UNICODE; p->charsetout_src = BIBL_SRC_DEFAULT; p->latexout = 0; p->utf8out = 1; p->utf8bom = 1; p->xmlout = BIBL_XMLOUT_TRUE; p->nosplittitle = 0; p->verbose = 0; p->addcount = 0; p->singlerefperfile = 0; p->headerf = modsout_writeheader; p->footerf = modsout_writefooter; p->writef = modsout_write; } static int increment_level( int level, int amt ) { if ( level > -1 ) return level+amt; else return level-amt; } static void output_tab0( FILE *outptr, int level ) { int i; level = abs( level ); for ( i=0; i<=level; ++i ) fprintf( outptr, " " ); } static void output_tab1( FILE *outptr, int level, char *tag ) { output_tab0( outptr, level ); fprintf( outptr, "%s", tag ); } static void output_tab2_attrib( FILE *outptr, int level, char *tag, char *data, char *attrib, char *type, int cr ) { output_tab0( outptr, level ); fprintf( outptr, "<%s", tag ); if ( attrib && type ) fprintf( outptr, " %s=\"%s\"", attrib, type ); fprintf( outptr, ">%s", data, tag ); if ( cr ) fprintf( outptr, "\n" ); } static void output_tab4( FILE *outptr, int level, char *tag, char *aname, char *avalue, char *data, int cr ) { output_tab0( outptr, level ); fprintf( outptr, "<%s %s=\"%s\">%s", tag,aname,avalue,data,tag); if ( cr ) fprintf( outptr, "\n" ); } static void output_tab6( FILE *outptr, int level, char *tag, char *aname, char *avalue, char *bname, char *bvalue, char *data, int cr ) { output_tab0( outptr, level ); fprintf( outptr, "<%s %s=\"%s\" %s=\"%s\">%s", tag,aname,avalue,bname,bvalue,data,tag); if ( cr ) fprintf( outptr, "\n" ); } static void output_fill2( FILE *outptr, int level, char *tag, fields *f, int n, int cr ) { char *value; if ( n!=-1 ) { value = fields_value( f, n, FIELDS_CHRP ); output_tab2_attrib( outptr, level, tag, value, NULL, NULL, cr ); fields_setused( f, n ); } } static void output_fill4( FILE *outptr, int level, char *tag, char *aname, char *avalue, fields *f, int n, int cr ) { char *value; if ( n!=-1 ) { value = fields_value( f, n, FIELDS_CHRP ); output_tab4( outptr, level, tag, aname, avalue, value, cr ); fields_setused( f, n ); } } /* * Find the positions of all convert.internal tags and store the * locations in convert.code. * * Return number of the tags found */ static int find_alltags( fields *f, convert *parts, int nparts, int level ) { int i, n=0; for ( i=0; i\n" ); output_fill2( outptr, increment_level(level,1), "title", f, ttl, 1 ); output_fill2( outptr, increment_level(level,1), "subTitle", f, subttl, 1 ); output_fill2( outptr, increment_level(level,1), "partName", f, parttl, 1 ); if ( ttl==-1 && subttl==-1 ) output_tab1( outptr, increment_level(level,1), "\n" ); output_tab1( outptr, level, "</titleInfo>\n" ); /* output shorttitle if it's different from normal title */ if ( shrttl!=-1 ) { if ( ttl==-1 || subttl!=-1 || strcmp(f->data[ttl].data,f->data[shrttl].data) ) { output_tab1( outptr, level, "<titleInfo type=\"abbreviated\">\n" ); output_fill2( outptr, level+1, "title", f, shrttl,1); output_tab1( outptr, level, "</titleInfo>\n" ); } fields_setused( f, shrttl ); } } static void output_personalstart( FILE *outptr, int level ) { int j; for ( j=0; j<=level; ++j ) fprintf( outptr, " " ); fprintf( outptr, "<name type=\"personal\">\n" ); } static void output_name( FILE *outptr, char *p, int level ) { newstr family, part, suffix; int n=0; newstrs_init( &family, &part, &suffix, NULL ); while ( *p && *p!='|' ) newstr_addchar( &family, *p++ ); if ( *p=='|' ) p++; while ( *p ) { while ( *p && *p!='|' ) newstr_addchar( &part, *p++ ); /* truncate periods from "A. B. Jones" names */ if ( part.len ) { if ( part.len==2 && part.data[1]=='.' ) { part.len=1; part.data[1]='\0'; } if ( n==0 ) output_personalstart( outptr, level ); output_tab4( outptr, increment_level(level,1), "namePart", "type", "given", part.data, 1 ); n++; } if ( *p=='|' ) { p++; if ( *p=='|' ) { p++; while ( *p && *p!='|' ) newstr_addchar( &suffix, *p++ ); } newstr_empty( &part ); } } if ( family.len ) { if ( n==0 ) output_personalstart( outptr, level ); output_tab4( outptr, increment_level(level,1), "namePart", "type", "family", family.data, 1 ); } if ( suffix.len ) { if ( n==0 ) output_personalstart( outptr, level ); output_tab4( outptr, increment_level(level,1), "namePart", "type", "suffix", suffix.data, 1 ); } newstrs_free( &part, &family, &suffix, NULL ); } /* MODS v 3.4 * * <name [type="corporation"/type="conference"]> * <namePart></namePart> * <displayForm></displayForm> * <affiliation></affiliation> * <role> * <roleTerm [authority="marcrealtor"] type="text"></roleTerm> * </role> * <description></description> * </name> */ #define NO_AUTHORITY (0) #define MARC_AUTHORITY (1) static void output_names( fields *f, FILE *outptr, int level ) { convert names[] = { { "author", "AUTHOR", MARC_AUTHORITY }, { "editor", "EDITOR", MARC_AUTHORITY }, { "annotator", "ANNOTATOR", MARC_AUTHORITY }, { "artist", "ARTIST", MARC_AUTHORITY }, { "author", "2ND_AUTHOR", MARC_AUTHORITY }, { "author", "3RD_AUTHOR", MARC_AUTHORITY }, { "author", "SUB_AUTHOR", MARC_AUTHORITY }, { "author", "COMMITTEE", MARC_AUTHORITY }, { "author", "COURT", MARC_AUTHORITY }, { "author", "LEGISLATIVEBODY", MARC_AUTHORITY }, { "author of afterword, colophon, etc.", "AFTERAUTHOR", MARC_AUTHORITY }, { "author of introduction, etc.", "INTROAUTHOR", MARC_AUTHORITY }, { "cartographer", "CARTOGRAPHER", MARC_AUTHORITY }, { "collaborator", "COLLABORATOR", MARC_AUTHORITY }, { "commentator", "COMMENTATOR", MARC_AUTHORITY }, { "compiler", "COMPILER", MARC_AUTHORITY }, { "degree grantor", "DEGREEGRANTOR", MARC_AUTHORITY }, { "director", "DIRECTOR", MARC_AUTHORITY }, { "event", "EVENT", NO_AUTHORITY }, { "inventor", "INVENTOR", MARC_AUTHORITY }, { "organizer of meeting", "ORGANIZER", MARC_AUTHORITY }, { "patent holder", "ASSIGNEE", MARC_AUTHORITY }, { "performer", "PERFORMER", MARC_AUTHORITY }, { "producer", "PRODUCER", MARC_AUTHORITY }, { "recipient", "RECIPIENT", MARC_AUTHORITY }, { "redactor", "REDACTOR", MARC_AUTHORITY }, { "reporter", "REPORTER", MARC_AUTHORITY }, { "sponsor", "SPONSOR", MARC_AUTHORITY }, { "translator", "TRANSLATOR", MARC_AUTHORITY }, { "writer", "WRITER", MARC_AUTHORITY }, }; int i, n, nfields, ntypes = sizeof( names ) / sizeof( convert ); int f_asis, f_corp, f_conf; newstr role; newstr_init( &role ); nfields = fields_num( f ); for ( n=0; n<ntypes; ++n ) { for ( i=0; i<nfields; ++i ) { if ( fields_level( f, i )!=level ) continue; if ( f->data[i].len==0 ) continue; f_asis = f_corp = f_conf = 0; newstr_strcpy( &role, f->tag[i].data ); if ( newstr_findreplace( &role, ":ASIS", "" )) f_asis=1; if ( newstr_findreplace( &role, ":CORP", "" )) f_corp=1; if ( newstr_findreplace( &role, ":CONF", "" )) f_conf=1; if ( strcasecmp( role.data, names[n].internal ) ) continue; if ( f_asis ) { output_tab0( outptr, level ); fprintf( outptr, "<name>\n" ); output_fill2( outptr, increment_level(level,1), "namePart", f, i, 1 ); } else if ( f_corp ) { output_tab0( outptr, level ); fprintf( outptr, "<name type=\"corporate\">\n" ); output_fill2( outptr, increment_level(level,1), "namePart", f, i, 1 ); } else if ( f_conf ) { output_tab0( outptr, level ); fprintf( outptr, "<name type=\"conference\">\n" ); output_fill2( outptr, increment_level(level,1), "namePart", f, i, 1 ); } else { output_name(outptr, f->data[i].data, level); } output_tab1( outptr, increment_level(level,1), "<role>\n" ); output_tab1( outptr, increment_level(level,2), "<roleTerm" ); if ( names[n].code & MARC_AUTHORITY ) fprintf( outptr, " authority=\"marcrelator\""); fprintf( outptr, " type=\"text\">"); fprintf( outptr, "%s", names[n].mods ); fprintf( outptr, "</roleTerm>\n"); output_tab1( outptr, increment_level(level,1), "</role>\n" ); output_tab1( outptr, level, "</name>\n" ); fields_setused( f, i ); } } newstr_free( &role ); } static int output_finddateissued( fields *f, int level, int pos[] ) { char *src_names[] = { "YEAR", "MONTH", "DAY", "DATE" }; char *alt_names[] = { "PARTYEAR", "PARTMONTH", "PARTDAY", "PARTDATE" }; int i, found = -1, ntypes = 4; for ( i=0; i<ntypes; ++i ) { pos[i] = fields_find( f, src_names[i], level ); if ( pos[i]!=-1 ) found = pos[i]; } /* for LEVEL_MAIN, do what it takes to find a date */ if ( found==-1 && level==0 ) { for ( i=0; i<ntypes; ++i ) { pos[i] = fields_find( f, src_names[i], -1 ); if ( pos[i]!=-1 ) found = pos[i]; } } if ( found==-1 && level==0 ) { for ( i=0; i<ntypes; ++i ) { pos[i] = fields_find( f, alt_names[i], -1 ); if ( pos[i]!=-1 ) found = pos[i]; } } return found; } static void output_datepieces( fields *f, FILE *outptr, int pos[4] ) { int nprinted = 0, i; for ( i=0; i<3 && pos[i]!=-1; ++i ) { if ( nprinted>0 ) fprintf( outptr, "-" ); if ( i>0 && f->data[pos[i]].len==1 ) fprintf( outptr, "0" ); /*zero pad Jan,Feb,etc*/ fprintf( outptr,"%s",f->data[pos[i]].data ); nprinted++; fields_setused( f, pos[i] ); } } static void output_dateall( fields *f, FILE *outptr, int pos ) { fprintf( outptr, "%s", f->data[pos].data ); fields_setused( f, pos ); } static void output_dateissued( fields *f, FILE *outptr, int level, int pos[4] ) { output_tab1( outptr, increment_level(level,1), "<dateIssued>" ); if ( pos[0]!=-1 || pos[1]!=-1 || pos[2]!=-1 ) { output_datepieces( f, outptr, pos ); } else { output_dateall( f, outptr, pos[3] ); } fprintf( outptr, "</dateIssued>\n" ); } static void output_origin( fields *f, FILE *outptr, int level ) { convert origin[] = { { "issuance", "ISSUANCE", 0 }, { "publisher", "PUBLISHER", 0 }, { "place", "ADDRESS", 1 }, { "place", "AUTHORADDRESS", 0 }, { "edition", "EDITION", 0 }, { "dateCaptured", "URLDATE", 0 } }; int n, ntypes = sizeof( origin ) / sizeof ( convert ); int found, datefound, pos[5], date[4]; /* find all information to be outputted */ found = -1; for ( n=0; n<ntypes; ++n ) { pos[n] = fields_find( f, origin[n].internal, level ); if ( pos[n]!=-1 ) found = pos[n]; } datefound = output_finddateissued( f, level, date ); if ( found==-1 && datefound==-1 ) return; output_tab1( outptr, level, "<originInfo>\n" ); output_fill2( outptr, increment_level(level,1), "issuance", f, pos[0], 1 ); if ( datefound!=-1 ) output_dateissued( f, outptr, level, date ); for ( n=1; n<ntypes; n++ ) { if ( pos[n]==-1 ) continue; output_tab0( outptr, increment_level(level,1) ); fprintf( outptr, "<%s", origin[n].mods ); fprintf( outptr, ">" ); if ( origin[n].code ) { fprintf( outptr, "\n" ); output_fill4( outptr, increment_level(level,2), "placeTerm", "type", "text", f, pos[n], 1 ); output_tab0( outptr, increment_level(level,1) ); } else { fprintf( outptr, "%s", f->data[pos[n]].data ); fields_setused( f, pos[n] ); } fprintf( outptr, "</%s>\n", origin[n].mods ); } output_tab1( outptr, level, "</originInfo>\n" ); } static void output_language_core( fields *f, int n, FILE *outptr, char *tag, int level ) { newstr usetag; char *lang, *code; lang = fields_value( f, n, FIELDS_CHRP ); code = iso639_2_from_language( lang ); newstr_init( &usetag ); newstr_addchar( &usetag, '<' ); newstr_strcat( &usetag, tag ); newstr_strcat( &usetag, ">\n" ); output_tab1( outptr, level, usetag.data ); output_fill4( outptr, increment_level(level,1), "languageTerm", "type", "text", f, n, 1 ); if ( code ) { output_tab6( outptr, increment_level(level,1), "languageTerm", "type", "code", "authority", "iso639-2b", code, 1 ); } newstr_strcpy( &usetag, "</" ); newstr_strcat( &usetag, tag ); newstr_strcat( &usetag, ">\n" ); output_tab1( outptr, level, usetag.data ); newstr_free( &usetag ); } static void output_language( fields *f, FILE *outptr, int level ) { int n; n = fields_find( f, "LANGUAGE", level ); if ( n!=-1 ) output_language_core( f, n, outptr, "language", level ); } static void output_description( fields *f, FILE *outptr, int level ) { int n = fields_find( f, "DESCRIPTION", level ); if ( n!=-1 ) { output_tab1( outptr, level, "<physicalDescription>\n" ); output_fill2( outptr, increment_level(level,1), "note", f, n, 1 ); output_tab1( outptr, level, "</physicalDescription>\n" ); } } static void output_toc( fields *f, FILE *outptr, int level ) { int n = fields_find( f, "CONTENTS", level ); output_fill2( outptr, level, "tableOfContents", f, n, 1 ); } /* detail output * * for example: * * <detail type="volume"><number>xxx</number></detail */ static void mods_output_detail( fields *f, FILE *outptr, int item, char *item_name, int level ) { if ( item==-1 ) return; output_tab0( outptr, increment_level( level, 1 ) ); fprintf( outptr, "<detail type=\"%s\"><number>%s</number></detail>\n", item_name, f->data[item].data ); fields_setused( f, item ); } /* extents output * * <extent unit="page"> * <start>xxx</start> * <end>xxx</end> * </extent> */ static void mods_output_extents( fields *f, FILE *outptr, int start, int end, int total, char *extype, int level ) { output_tab0( outptr, increment_level(level,1) ); fprintf( outptr, "<extent unit=\"%s\">\n", extype); output_fill2( outptr, increment_level(level,2), "start", f, start, 1 ); output_fill2( outptr, increment_level(level,2), "end", f, end, 1 ); output_fill2( outptr, increment_level(level,2), "total", f, total, 1 ); output_tab1 ( outptr, increment_level(level,1), "</extent>\n" ); } static void try_output_partheader( FILE *outptr, int wrote_header, int level ) { if ( !wrote_header ) output_tab1( outptr, level, "<part>\n" ); } static void try_output_partfooter( FILE *outptr, int wrote_header, int level ) { if ( wrote_header ) output_tab1( outptr, level, "</part>\n" ); } /* part date output * * <date>xxxx-xx-xx</date> * */ static int output_partdate( fields *f, FILE *outptr, int level, int wrote_header ) { convert parts[3] = { { "", "PARTYEAR", -1 }, { "", "PARTMONTH", -1 }, { "", "PARTDAY", -1 }, }; int nparts = sizeof(parts)/sizeof(parts[0]); if ( !find_alltags( f, parts, nparts, level ) ) return 0; try_output_partheader( outptr, wrote_header, level ); output_tab1( outptr, increment_level(level,1), "<date>" ); if ( parts[0].code!=-1 ) { fprintf( outptr, "%s", f->data[ parts[0].code ].data); fields_setused( f, parts[0].code ); } else fprintf( outptr, "XXXX" ); if ( parts[1].code!=-1 ) { fprintf( outptr, "-%s", f->data[parts[1].code].data ); fields_setused( f, parts[1].code ); } if ( parts[2].code!=-1 ) { if ( parts[1].code!=-1 ) fprintf( outptr, "-" ); else fprintf( outptr, "-XX-" ); fprintf( outptr, "%s", f->data[parts[2].code].data ); fields_setused( f, parts[2].code ); } fprintf( outptr,"</date>\n"); return 1; } static int output_partpages( fields *f, FILE *outptr, int level, int wrote_header ) { convert parts[4] = { { "", "PAGESTART", -1 }, { "", "PAGEEND", -1 }, { "", "PAGES", -1 }, { "", "TOTALPAGES", -1 } }; int nparts = sizeof(parts)/sizeof(parts[0]); if ( !find_alltags( f, parts, nparts, level ) ) return 0; try_output_partheader( outptr, wrote_header, level ); /* If PAGESTART or PAGEEND are undefined */ if ( parts[0].code==-1 || parts[1].code==-1 ) { if ( parts[0].code!=-1 ) mods_output_detail( f, outptr, parts[0].code, "page", level ); if ( parts[1].code!=-1 ) mods_output_detail( f, outptr, parts[1].code, "page", level ); if ( parts[2].code!=-1 ) mods_output_detail( f, outptr, parts[2].code, "page", level ); if ( parts[3].code!=-1 ) mods_output_extents( f, outptr, -1, -1, parts[3].code, "page", level ); } /* If both PAGESTART and PAGEEND are defined */ else { mods_output_extents( f, outptr, parts[0].code, parts[1].code, parts[3].code, "page", level ); } return 1; } static int output_partelement( fields *f, FILE *outptr, int level, int wrote_header ) { convert parts[] = { { "volume", "VOLUME", -1 }, { "section", "SECTION", -1 }, { "issue", "ISSUE", -1 }, { "number", "NUMBER", -1 }, { "publiclawnumber", "PUBLICLAWNUMBER", -1 }, { "session", "SESSION", -1 }, { "articlenumber", "ARTICLENUMBER", -1 }, { "part", "PART", -1 }, { "chapter", "CHAPTER", -1 }, { "report number", "REPORTNUMBER", -1 }, }; int i, nparts = sizeof( parts ) / sizeof( convert ), n; n = fields_find( f, "NUMVOLUMES", level ); if ( !find_alltags( f, parts, nparts, level ) && n==-1 ) return 0; try_output_partheader( outptr, wrote_header, level ); for ( i=0; i<nparts; ++i ) { if ( parts[i].code==-1 ) continue; mods_output_detail( f, outptr, parts[i].code, parts[i].mods, level ); } if ( n!=-1 ) { output_tab1( outptr, level, "<extent unit=\"volumes\">\n" ); output_fill2( outptr, increment_level(level,1), "total", f, n, 1 ); output_tab1( outptr, level, "</extent>\n" ); } return 1; } static void output_part( fields *f, FILE *outptr, int level ) { int wrote_hdr; wrote_hdr = output_partdate( f, outptr, level, 0 ); wrote_hdr += output_partelement( f, outptr, level, wrote_hdr ); wrote_hdr += output_partpages( f, outptr, level, wrote_hdr ); try_output_partfooter( outptr, wrote_hdr, level ); } static void output_recordInfo( fields *f, FILE *outptr, int level ) { int n; n = fields_find( f, "LANGCATALOG", level ); if ( n!=-1 ) { output_tab1( outptr, level, "<recordInfo>\n" ); output_language_core( f, n, outptr, "languageOfCataloging", increment_level(level,1) ); output_tab1( outptr, level, "</recordInfo>\n" ); } } static void output_genre( fields *f, FILE *outptr, int level ) { int i, ismarc, n; char *value; n = fields_num( f ); for ( i=0; i<n; ++i ) { if ( fields_level( f, i ) != level ) continue; if ( !fields_match_tag( f, i, "GENRE" ) && !fields_match_tag( f, i, "NGENRE" ) ) continue; value = fields_value( f, i, FIELDS_CHRP ); if ( marc_findgenre( value )!=-1 ) ismarc = 1; else ismarc = 0; output_tab1( outptr, level, "<genre" ); if ( ismarc ) fprintf( outptr, " authority=\"marcgt\"" ); fprintf( outptr, ">%s</genre>\n", value ); fields_setused( f, i ); } } static void output_typeresource( fields *f, FILE *outptr, int level ) { int n, ismarc = 0; char *value; n = fields_find( f, "RESOURCE", level ); if ( n!=-1 ) { value = fields_value( f, n, FIELDS_CHRP ); if ( marc_findresource( value )!=-1 ) ismarc = 1; if ( !ismarc ) { fprintf( stderr, "Illegal typeofResource = '%s'\n", value ); } else { output_fill2( outptr, level, "typeOfResource", f, n, 1 ); } fields_setused( f, n ); } } static void output_type( fields *f, FILE *outptr, int level ) { int n = fields_find( f, "INTERNAL_TYPE", 0 ); if ( n!=-1 ) fields_setused( f, n ); output_typeresource( f, outptr, level ); output_genre( f, outptr, level ); } static void output_abs( fields *f, FILE *outptr, int level ) { int nabs = fields_find( f, "ABSTRACT", level ); output_fill2( outptr, level, "abstract", f, nabs, 1 ); } static void output_notes( fields *f, FILE *outptr, int level ) { int i, n; char *t; n = fields_num( f ); for ( i=0; i<n; ++i ) { if ( fields_level( f, i ) != level ) continue; t = fields_tag( f, i, FIELDS_CHRP_NOUSE ); if ( !strcasecmp( t, "NOTES" ) ) output_fill2( outptr, level, "note", f, i, 1 ); else if ( !strcasecmp( t, "PUBSTATE" ) ) output_fill4( outptr, level, "note", "type", "publication status", f, i, 1 ); else if ( !strcasecmp( t, "ANNOTE" ) ) output_fill2( outptr, level, "bibtex-annote", f, i, 1 ); else if ( !strcasecmp( t, "TIMESCITED" ) ) output_fill4( outptr, level, "note", "type", "times cited", f, i, 1 ); else if ( !strcasecmp( t, "ANNOTATION" ) ) output_fill4( outptr, level, "note", "type", "annotation", f, i, 1 ); else if ( !strcasecmp( t, "ADDENDUM" ) ) output_fill4( outptr, level, "note", "type", "addendum", f, i, 1 ); else if ( !strcasecmp( t, "BIBKEY" ) ) output_fill4( outptr, level, "note", "type", "bibliography key", f, i, 1 ); } } static void output_key( fields *f, FILE *outptr, int level ) { int i, n; n = fields_num( f ); for ( i=0; i<n; ++i ) { if ( fields_level( f, i ) != level ) continue; if ( !strcasecmp( f->tag[i].data, "KEYWORD" ) ) { output_tab1( outptr, level, "<subject>\n" ); output_fill2( outptr, increment_level(level,1), "topic", f, i, 1 ); output_tab1( outptr, level, "</subject>\n" ); } } } static void output_sn( fields *f, FILE *outptr, int level ) { convert sn_types[] = { { "isbn", "ISBN", 0 }, { "isbn", "ISBN13", 0 }, { "lccn", "LCCN", 0 }, { "issn", "ISSN", 0 }, { "citekey", "REFNUM", 0 }, { "doi", "DOI", 0 }, { "eid", "EID", 0 }, { "eprint", "EPRINT", 0 }, { "eprinttype","EPRINTTYPE",0 }, { "pubmed", "PMID", 0 }, { "medline", "MEDLINE", 0 }, { "pii", "PII", 0 }, { "arXiv", "ARXIV", 0 }, { "isi", "ISIREFNUM", 0 }, { "accessnum", "ACCESSNUM", 0 }, { "jstor", "JSTOR", 0 }, { "isrn", "ISRN", 0 }, }; int n, ntypes = sizeof( sn_types ) / sizeof( sn_types[0] ); int found, i, nfields; found = fields_find ( f, "CALLNUMBER", level ); output_fill2( outptr, level, "classification", f, found, 1 ); for ( n=0; n<ntypes; ++n ) { found = fields_find( f, sn_types[n].internal, level ); if ( found==-1 ) continue; output_tab0( outptr, level ); fprintf( outptr, "<identifier type=\"%s\">%s</identifier>\n", sn_types[n].mods, f->data[found].data ); fields_setused( f, found ); } nfields = fields_num( f ); for ( i=0; i<nfields; ++i ) { if ( f->level[i]!=level ) continue; if ( !strcasecmp( f->tag[i].data, "SERIALNUMBER" ) ) { output_tab0( outptr, level ); fprintf( outptr, "<identifier type=\"%s\">%s</identifier>\n", "serial number", f->data[i].data ); fields_setused( f, i ); } } } static void output_url( fields *f, FILE *outptr, int level ) { int location = fields_find( f, "LOCATION", level ); int url = fields_find( f, "URL", level ); int fileattach = fields_find( f, "FILEATTACH", level ); int pdflink = fields_find( f, "PDFLINK", level ); int i, n; if ( url==-1 && location==-1 && pdflink==-1 && fileattach==-1 ) return; output_tab1( outptr, level, "<location>\n" ); n = fields_num( f ); for ( i=0; i<n; ++i ) { if ( f->level[i]!=level ) continue; if ( !strcasecmp( f->tag[i].data, "URL" ) ) { output_fill2( outptr, increment_level(level,1), "url", f, i, 1 ); } } for ( i=0; i<n; ++i ) { if ( f->level[i]!=level ) continue; if ( !strcasecmp( f->tag[i].data, "PDFLINK" ) ) { output_fill2( outptr, increment_level(level,1), "url", /*"urlType", "pdf",*/ f, i, 1 ); } } for ( i=0; i<n; ++i ) { if ( f->level[i]!=level ) continue; if ( !strcasecmp( f->tag[i].data, "FILEATTACH" ) ){ output_tab0( outptr, increment_level(level,1) ); fprintf( outptr, "<url displayLabel=\"Electronic full text\" access=\"raw object\">" ); fprintf( outptr, "%s</url>\n", f->data[i].data ); fields_setused( f, i ); } } if ( location!=-1 ) output_fill2( outptr, increment_level(level,1), "physicalLocation", f, location, 1 ); output_tab1( outptr, level, "</location>\n" ); } /* refnum should start with a non-number and not include spaces -- ignore this */ static void output_refnum( fields *f, int n, FILE *outptr ) { char *p = fields_value( f, n, FIELDS_CHRP_NOUSE ); /* if ( p && ((*p>='0' && *p<='9') || *p=='-' || *p=='_' )) fprintf( outptr, "ref" );*/ while ( p && *p ) { if ( !is_ws(*p) ) fprintf( outptr, "%c", *p ); /* if ( (*p>='A' && *p<='Z') || (*p>='a' && *p<='z') || (*p>='0' && *p<='9') || (*p=='-') || (*p==' (*p=='_') ) fprintf( outptr, "%c", *p );*/ p++; } } static void output_head( fields *f, FILE *outptr, int dropkey, unsigned long numrefs ) { int n; fprintf( outptr, "<mods"); if ( !dropkey ) { n = fields_find( f, "REFNUM", 0 ); if ( n!=-1 ) { fprintf( outptr, " ID=\""); output_refnum( f, n, outptr ); fprintf( outptr, "\""); } } fprintf( outptr, ">\n" ); } static int original_items( fields *f, int level ) { int i, targetlevel, n; if ( level < 0 ) return 0; targetlevel = -( level + 2 ); n = fields_num( f ); for ( i=0; i<n; ++i ) { if ( fields_level( f, i ) == targetlevel ) return targetlevel; } return 0; } static void output_citeparts( fields *f, FILE *outptr, int level, int max ) { int orig_level; output_title( f, outptr, level ); output_names( f, outptr, level ); output_origin( f, outptr, level ); output_type( f, outptr, level ); output_language( f, outptr, level ); output_description( f, outptr, level ); if ( level >= 0 && level < max ) { output_tab0( outptr, level ); fprintf( outptr, "<relatedItem type=\"host\">\n" ); output_citeparts( f, outptr, increment_level(level,1), max ); output_tab0( outptr, level ); fprintf( outptr, "</relatedItem>\n"); } /* Look for original item things */ orig_level = original_items( f, level ); if ( orig_level ) { output_tab0( outptr, level ); fprintf( outptr, "<relatedItem type=\"original\">\n" ); output_citeparts( f, outptr, orig_level, max ); output_tab0( outptr, level ); fprintf( outptr, "</relatedItem>\n" ); } output_abs( f, outptr, level ); output_notes( f, outptr, level ); output_toc( f, outptr, level ); output_key( f, outptr, level ); output_sn( f, outptr, level ); output_url( f, outptr, level ); output_part( f, outptr, level ); output_recordInfo( f, outptr, level ); } static void modsout_report_unused_tags( fields *f, param *p, unsigned long numrefs ) { int i, n, nwritten, nunused = 0, level; char *tag, *value; n = fields_num( f ); for ( i=0; i<n; ++i ) { if ( fields_used( f, i ) ) continue; nunused++; } if ( nunused ) { if ( p->progname ) fprintf( stderr, "%s: ", p->progname ); fprintf( stderr, "Reference %lu has unused tags.\n", numrefs+1 ); /* Find author from level 0 */ nwritten = 0; for ( i=0; i<n; ++i ) { if ( fields_level( f, i ) != 0 ) continue; tag = fields_tag( f, i, FIELDS_CHRP_NOUSE ); if ( strncasecmp( tag, "AUTHOR", 6 ) ) continue; value = fields_value( f, i, FIELDS_CHRP_NOUSE ); if ( nwritten==0 ) fprintf( stderr, "\tAuthor(s) (level=0):\n" ); fprintf( stderr, "\t\t'%s'\n", value ); nwritten++; } nwritten = 0; for ( i=0; i<n; ++i ) { if ( fields_level( f, i ) != 0 ) continue; tag = fields_tag( f, i, FIELDS_CHRP_NOUSE ); if ( strcasecmp( tag, "YEAR" ) && strcasecmp( tag, "PARTYEAR" ) ) continue; value = fields_value( f, i, FIELDS_CHRP_NOUSE ); if ( nwritten==0 ) fprintf( stderr, "\tYear(s) (level=0):\n" ); fprintf( stderr, "\t\t'%s'\n", value ); nwritten++; } nwritten = 0; for ( i=0; i<n; ++i ) { if ( fields_level( f, i ) != 0 ) continue; tag = fields_tag( f, i, FIELDS_CHRP_NOUSE ); if ( strncasecmp( tag, "TITLE", 5 ) ) continue; value = fields_value( f, i, FIELDS_CHRP_NOUSE ); if ( nwritten==0 ) fprintf( stderr, "\tTitle(s) (level=0):\n" ); fprintf( stderr, "\t\t'%s'\n", value ); nwritten++; } fprintf( stderr, "\tUnused tags:\n" ); for ( i=0; i<n; ++i ) { if ( fields_used( f, i ) ) continue; tag = fields_tag( f, i, FIELDS_CHRP_NOUSE ); value = fields_value( f, i, FIELDS_CHRP_NOUSE ); level = fields_level( f, i ); fprintf( stderr, "\t\ttag: '%s' value: '%s' level: %d\n", tag, value, level ); } } } void modsout_write( fields *f, FILE *outptr, param *p, unsigned long numrefs ) { int max, dropkey; max = fields_maxlevel( f ); dropkey = ( p->format_opts & MODSOUT_DROPKEY ); output_head( f, outptr, dropkey, numrefs ); output_citeparts( f, outptr, 0, max ); modsout_report_unused_tags( f, p, numrefs ); fprintf( outptr, "</mods>\n" ); fflush( outptr ); } void modsout_writeheader( FILE *outptr, param *p ) { if ( p->utf8bom ) utf8_writebom( outptr ); fprintf(outptr,"<?xml version=\"1.0\" encoding=\"%s\"?>\n", charset_get_xmlname( p->charsetout ) ); fprintf(outptr,"<modsCollection xmlns=\"http://www.loc.gov/mods/v3\">\n"); } void modsout_writefooter( FILE *outptr ) { fprintf(outptr,"</modsCollection>\n"); fflush( outptr ); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hs-bibutils-5.5/bibutils/marc.h���������������������������������������������������������������������0000644�0000000�0000000�00000000360�12445605732�014715� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * marc.h * * Copyright (c) Chris Putnam 2008-2013 * * Source code released under the GPL version 2 * */ #ifndef MARC_H #define MARC_H extern int marc_findgenre( char *query ); extern int marc_findresource( char *query ); #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hs-bibutils-5.5/bibutils/list.c���������������������������������������������������������������������0000644�0000000�0000000�00000024753�12445605732�014755� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * list.c * * version: 2014-11-15 * * Copyright (c) Chris Putnam 2004-2014 * * Source code released under the GPL version 2 * * Implements a simple managed array of newstrs. * */ #include "list.h" void list_init( list *a ) { a->str = NULL; a->max = 0; a->n = 0; a->sorted = 1; } void list_empty( list *a ) { int i; for ( i=0; i<a->max; ++i ) newstr_empty( &(a->str[i]) ); a->n = 0; a->sorted = 1; } void list_free( list *a ) { int i; for ( i=0; i<a->max; ++i ) newstr_free( &(a->str[i]) ); free( a->str ); list_init( a ); } list * list_new( void ) { list *a = ( list * ) malloc( sizeof ( list ) ); if ( a ) list_init( a ); return a; } void list_delete( list *a ) { list_free( a ); free( a ); } /* * returns 1 if n is valid string in list */ static inline int list_valid_num( list *a, int n ) { if ( n < 0 || n >= a->n ) return 0; return 1; } static int list_comp( const void *v1, const void *v2 ) { newstr *s1 = ( newstr *) v1; newstr *s2 = ( newstr *) v2; if ( !s1->len && !s2->len ) return 0; else if ( !s1->len ) return -1; else if ( !s2->len ) return 1; else return strcmp( s1->data, s2->data ); } static int list_comp_step( list *a, int n1, int n2 ) { return list_comp( (const void*) &(a->str[n1]), (const void*) &(a->str[n2]) ); } static newstr * list_set_cleanup( list *a, int n ) { if ( newstr_memerr( &(a->str[n]) ) ) return NULL; if ( a->sorted ) { if ( n>0 && list_comp_step( a, n-1, n )>0 ) a->sorted = 0; } if ( a->sorted ) { if ( n<a->n-1 && list_comp_step( a, n, n+1 )>0 ) a->sorted = 0; } return &(a->str[n]); } newstr * list_set( list *a, int n, newstr *s ) { if ( !list_valid_num( a, n ) ) return NULL; newstr_newstrcpy( &(a->str[n]), s ); return list_set_cleanup( a, n ); } newstr * list_setc( list *a, int n, const char *s ) { if ( !list_valid_num( a, n ) ) return NULL; newstr_strcpy( &(a->str[n]), s ); return list_set_cleanup( a, n ); } /* * return pointer to newstr 'n' */ newstr * list_get( list *a, int n ) { if ( !list_valid_num( a, n ) ) return NULL; else return &(a->str[n]); } /* * return pointer to C string 'n' * * So long as the index is a valid number ensure * that a pointer is returned even if the newstr doesn't * point to data. Only return NULL if the index * is invalid. Thus we can convert loops like: * * for ( i=0; i<a->n; ++i ) { * p = list_getc( a, i ); * if ( p==NULL ) continue; // empty string * ... * } * * to * * i = 0; * while ( ( p = list_getc( a, i ) ) ) { * ... * i++; * } * */ char * list_getc( list *a, int n ) { static char empty[] = ""; char *p; if ( !list_valid_num( a, n ) ) return NULL; p = a->str[n].data; if ( p ) return p; else return empty; } static int list_alloc( list *a ) { int i, alloc = 20; a->str = ( newstr* ) malloc( sizeof( newstr ) * alloc ); if ( !(a->str) ) return LIST_ERR; a->max = alloc; a->n = 0; for ( i=0; i<alloc; ++i ) newstr_init( &(a->str[i]) ); return LIST_OK; } static int list_realloc( list *a ) { newstr *more; int i, alloc = a->max * 2; more = ( newstr* ) realloc( a->str, sizeof( newstr ) * alloc ); if ( !more ) return LIST_ERR; a->str = more; for ( i=a->max; i<alloc; ++i ) newstr_init( &(a->str[i]) ); a->max = alloc; return LIST_OK; } static int list_ensure_space( list *a ) { int status = LIST_OK; if ( a->max==0 ) status = list_alloc( a ); else if ( a->n >= a->max ) status = list_realloc( a ); return status; } newstr * list_addvp( list *a, unsigned char mode, void *vp ) { newstr *s = NULL; int status; status = list_ensure_space( a ); if ( status==LIST_OK ) { s = &( a->str[a->n] ); if ( mode==LIST_CHR ) newstr_strcpy( s, (const char*) vp ); else if ( mode==LIST_STR ) newstr_newstrcpy( s, (newstr*) vp ); else return NULL; if ( newstr_memerr( s ) ) return NULL; a->n++; if ( a->sorted && a->n > 1 ) { if ( list_comp_step( a, a->n-2, a->n-1 ) > 0 ) a->sorted = 0; } } return s; } newstr * list_addc( list *a, const char *s ) { return list_addvp( a, LIST_CHR, (void*)s ); } newstr * list_add( list *a, newstr *s ) { return list_addvp( a, LIST_STR, (void*)s ); } newstr * list_addvp_unique( list *a, unsigned char mode, void *vp ) { newstr *s; int n; if ( mode==LIST_CHR ) n = list_find( a, (const char*) vp ); else if ( mode==LIST_STR ) n = list_find( a, ( (newstr*) vp )->data ); else return NULL; if ( n!=-1 ) s = &( a->str[n] ); else { s = list_addvp( a, mode, vp ); } return s; } newstr * list_addc_unique( list *a, const char *s ) { return list_addvp_unique( a, LIST_CHR, (void*)s ); } newstr * list_add_unique( list *a, newstr *s ) { return list_addvp_unique( a, LIST_STR, (void*)s ); } int list_addvp_all( list *a, unsigned char mode, ... ) { int ret = LIST_OK; va_list ap; newstr *s; void *v; va_start( ap, mode ); do { if ( mode==LIST_CHR ) v = va_arg( ap, char * ); else v = va_arg( ap, newstr * ); if ( v ) { s = list_addvp( a, mode, v ); if ( s==NULL ) { ret = LIST_ERR; goto out; } } } while ( v ); out: va_end( ap ); return ret; } int list_add_all( list *a, ... ) { int ret = LIST_OK; va_list ap; newstr *s, *v; va_start( ap, a ); do { v = va_arg( ap, newstr * ); if ( v ) { s = list_addvp( a, LIST_STR, (void*)v ); if ( s==NULL ) { ret = LIST_ERR; goto out; } } } while ( v ); out: va_end( ap ); return ret; } int list_addc_all( list *a, ... ) { int ret = LIST_OK; va_list ap; newstr *s; const char *v; va_start( ap, a ); do { v = va_arg( ap, const char * ); if ( v ) { s = list_addvp( a, LIST_CHR, (void*)v ); if ( s==NULL ) { ret = LIST_ERR; goto out; } } } while ( v ); out: va_end( ap ); return ret; } int list_append( list *a, list *toadd ) { newstr *s; int i; for ( i=0; i<toadd->n; ++i ) { s = list_add( a, &(toadd->str[i]) ); if ( !s ) return LIST_ERR; } return LIST_OK; } int list_append_unique( list *a, list *toadd ) { newstr *s; int i; for ( i=0; i<toadd->n; ++i ) { s = list_add_unique( a, &(toadd->str[i]) ); if ( !s ) return LIST_ERR; } return LIST_OK; } int list_remove( list *a, int n ) { int i; if ( !list_valid_num( a, n ) ) return -1; for ( i=n+1; i<a->n; ++i ) { newstr_newstrcpy( &(a->str[i-1]), &(a->str[i]) ); if ( newstr_memerr( &(a->str[i-1]) ) ) return LIST_ERR; } a->n--; return LIST_OK; } void list_swap( list *a, int n1, int n2 ) { newstr_swapstrings( &(a->str[n1]), &(a->str[n2]) ); } void list_sort( list *a ) { qsort( a->str, a->n, sizeof( newstr ), list_comp ); a->sorted = 1; } static int list_find_sorted( list *a, const char *searchstr ) { int min, max, mid, comp; newstr s, *cs; newstr_init( &s ); newstr_strcpy( &s, searchstr ); min = 0; max = a->n - 1; while ( min <= max ) { mid = ( min + max ) / 2; cs = list_get( a, mid ); comp = list_comp( (void*)cs, (void*) (&s) ); if ( comp==0 ) { newstr_free( &s ); return mid; } else if ( comp > 0 ) max = mid - 1; else if ( comp < 0 ) min = mid + 1; } newstr_free( &s ); return -1; } static int list_find_simple( list *a, const char *searchstr, int nocase ) { int i; if ( nocase ) { for ( i=0; i<a->n; ++i ) if ( !strcasecmp(a->str[i].data,searchstr) ) return i; } else { for ( i=0; i<a->n; ++i ) if ( !strcmp(a->str[i].data,searchstr) ) return i; } return -1; } int list_find( list *a, const char *searchstr ) { if ( a->n==0 ) return -1; if ( a->sorted ) return list_find_sorted( a, searchstr ); else return list_find_simple( a, searchstr, 0 ); } int list_findnocase( list *a, const char *searchstr ) { return list_find_simple( a, searchstr, 1 ); } int list_fillfp( list *a, FILE *fp, unsigned char skip_blank_lines ) { int bufpos = 0, ret = LIST_OK; char buf[512]=""; newstr line; list_empty( a ); newstr_init( &line ); while ( newstr_fget( fp, buf, sizeof(buf), &bufpos, &line ) ) { if ( skip_blank_lines && line.len==0 ) continue; if ( !list_add( a, &line ) ) { ret = LIST_ERR; goto out; } } out: newstr_free( &line ); return ret; } int list_fill( list *a, const char *filename, unsigned char skip_blank_lines ) { FILE *fp; int ret; fp = fopen( filename, "r" ); if ( !fp ) return LIST_ERR_CANNOTOPEN; ret = list_fillfp( a, fp, skip_blank_lines ); fclose( fp ); return ret; } int list_copy( list *to, list *from ) { int i; list_free( to ); if ( from->n==0 ) return LIST_OK; to->str = ( newstr * ) malloc( sizeof( newstr ) * from->n ); if ( !to->str ) { to->n = to->max = 0; return LIST_ERR; } to->max = from->n; to->sorted = from->sorted; for ( i=0; i<from->n; i++ ) newstr_init( &(to->str[i]) ); for ( i=0; i<from->n; i++ ) { newstr_newstrcpy( &(to->str[i]), &(from->str[i]) ); if ( newstr_memerr( &(to->str[i]) ) ) return LIST_ERR; to->n += 1; } return LIST_OK; } list * list_dup( list *from ) { list *to; int ok; to = list_new(); if ( to ) { ok = list_copy( to, from ); if ( !ok ) { list_delete( to ); to = NULL; } } return to; } int list_match_entry( list *a, int n, char *s ) { if ( n < 0 || n >= a->n ) return 0; if ( strcmp( a->str[n].data, s ) ) return 0; return 1; } void list_trimend( list *a, int n ) { int i; if ( a->n - n < 1 ) { list_empty( a ); } else { for ( i=a->n -n; i<a->n; ++i ) { newstr_empty( &(a->str[i]) ); } a->n -= n; } } int list_tokenizec( list *tokens, char *p, const char *delim, int merge_delim ) { int ret = LIST_OK; newstr s, *t; char *q; list_empty( tokens ); newstr_init( &s ); while ( p && *p ) { q = p; while ( *q && !strchr( delim, *q ) ) q++; newstr_segcpy( &s, p, q ); if ( newstr_memerr( &s ) ) { ret = LIST_ERR; goto out; } if ( s.len ) { t = list_addvp( tokens, LIST_STR, (void*) &s ); if ( !t ) { ret = LIST_ERR; goto out; } } else if ( !merge_delim ) { t = list_addvp( tokens, LIST_CHR, (void*) "" ); if ( !t ) { ret = LIST_ERR; goto out; } } p = q; if ( *p ) p++; } out: newstr_free( &s ); return ret; } int list_tokenize( list *tokens, newstr *in, const char *delim, int merge_delim ) { return list_tokenizec( tokens, in->data, delim, merge_delim ); } void lists_init( list *a, ... ) { list *a2; va_list ap; list_init( a ); va_start( ap, a ); do { a2 = va_arg( ap, list * ); if ( a2 ) list_init( a2 ); } while ( a2 ); va_end( ap ); } void lists_free( list *a, ... ) { list *a2; va_list ap; list_free( a ); va_start( ap, a ); do { a2 = va_arg( ap, list * ); if ( a2 ) list_free( a2 ); } while ( a2 ); va_end( ap ); } void lists_empty( list *a, ... ) { list *a2; va_list ap; list_empty( a ); va_start( ap, a ); do { a2 = va_arg( ap, list * ); if ( a2 ) list_empty( a2 ); } while ( a2 ); va_end( ap ); } ���������������������hs-bibutils-5.5/bibutils/is_ws.c��������������������������������������������������������������������0000644�0000000�0000000�00000000701�12445605732�015111� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * is_ws.c * * Copyright (c) Chris Putnam 2003-2013 * * Source code released under the GPL version 2 * */ #include "is_ws.h" /* is_ws(), is whitespace */ int is_ws( char ch ) { if (ch==' ' || ch=='\n' || ch=='\t' || ch=='\r' ) return 1; else return 0; } char * skip_ws( char *p ) { if ( p ) { while ( is_ws( *p ) ) p++; } return p; } char * skip_notws( char *p ) { if ( p ) { while ( *p && !is_ws( *p ) ) p++; } return p; } ���������������������������������������������������������������hs-bibutils-5.5/bibutils/serialno.h�����������������������������������������������������������������0000644�0000000�0000000�00000000404�12445605732�015606� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * serialno.h * * Copyright (c) Chris Putnam 2005-2014 * * Source code released under the GPL version 2 * */ #ifndef SERIALNO_H #define SERIALNO_H #include <stdio.h> #include "fields.h" extern int addsn( fields *info, char *buf, int level ); #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hs-bibutils-5.5/bibutils/wordin.c�������������������������������������������������������������������0000644�0000000�0000000�00000020047�12445605732�015274� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * wordin.c * * Copyright (c) Chris Putnam 2010-2013 * * Source code released under the GPL version 2 * */ #include <stdio.h> #include <stdlib.h> #include "is_ws.h" #include "newstr.h" #include "newstr_conv.h" #include "fields.h" #include "xml.h" #include "xml_encoding.h" #include "wordin.h" /***************************************************** PUBLIC: void wordin_initparams() *****************************************************/ void wordin_initparams( param *p, const char *progname ) { p->readformat = BIBL_WORDIN; p->charsetin = BIBL_CHARSET_DEFAULT; p->charsetin_src = BIBL_SRC_DEFAULT; p->latexin = 0; p->xmlin = 1; p->utf8in = 1; p->nosplittitle = 0; p->verbose = 0; p->addcount = 0; p->output_raw = BIBL_RAW_WITHMAKEREFID | BIBL_RAW_WITHCHARCONVERT; p->readf = wordin_readf; p->processf = wordin_processf; p->cleanf = NULL; p->typef = NULL; p->convertf = NULL; p->all = NULL; p->nall = 0; list_init( &(p->asis) ); list_init( &(p->corps) ); if ( !progname ) p->progname = NULL; else p->progname = strdup( progname ); } /***************************************************** PUBLIC: int wordin_readf() *****************************************************/ static char * wordin_findstartwrapper( char *buf, int *ntype ) { char *startptr = xml_findstart( buf, "b:Source" ); return startptr; } static char * wordin_findendwrapper( char *buf, int ntype ) { char *endptr = xml_findend( buf, "b:Source" ); return endptr; } int wordin_readf( FILE *fp, char *buf, int bufsize, int *bufpos, newstr *line, newstr *reference, int *fcharset ) { newstr tmp; char *startptr = NULL, *endptr; int haveref = 0, inref = 0, file_charset = CHARSET_UNKNOWN, m, type = 1; newstr_init( &tmp ); while ( !haveref && newstr_fget( fp, buf, bufsize, bufpos, line ) ) { if ( line->data ) { m = xml_getencoding( line ); if ( m!=CHARSET_UNKNOWN ) file_charset = m; } if ( line->data ) { startptr = wordin_findstartwrapper( line->data, &type ); } if ( startptr || inref ) { if ( inref ) newstr_strcat( &tmp, line->data ); else { newstr_strcat( &tmp, startptr ); inref = 1; } endptr = wordin_findendwrapper( tmp.data, type ); if ( endptr ) { newstr_segcpy( reference, tmp.data, endptr ); haveref = 1; } } } newstr_free( &tmp ); *fcharset = file_charset; return haveref; } /***************************************************** PUBLIC: int wordin_processf() *****************************************************/ typedef struct xml_convert { char *in; /* The input tag */ char *a, *aval; /* The attribute="attribute_value" pair, if nec. */ char *out; /* The output tag */ int level; } xml_convert; /* wordin_person_last() * * From an xml list, extract the value from the first entry * of <b:Last>xxxx</b:Last> and copy into name * * Additional <b:Last>yyyyy</b:Last> will be ignored. * * Returns BIBL_ERR_MEMERR on memory error, BIBL_OK otherwise. */ static int wordin_person_last( xml *node, newstr *name ) { while ( node && !xml_tagexact( node, "b:Last" ) ) node = node->next; if ( node && node->value->len ) { newstr_strcpy( name, node->value->data ); if ( newstr_memerr( name ) ) return BIBL_ERR_MEMERR; } return BIBL_OK; } /* wordin_person_first() * * From an xml list, extract the value of any * <b:First>xxxx</b:First> and append "|xxxx" to name. * * Returns BIBL_ERR_MEMERR on memory error, BIBL_OK otherwise */ static int wordin_person_first( xml *node, newstr *name ) { for ( ; node; node=node->next ) { if ( !xml_tagexact( node, "b:First" ) ) continue; if ( node->value->len ) { if ( name->len ) newstr_addchar( name, '|' ); newstr_strcat( name, node->value->data ); if ( newstr_memerr( name ) ) return BIBL_ERR_MEMERR; } } return BIBL_OK; } static int wordin_person( xml *node, fields *info, char *type ) { int status, ret = BIBL_OK; newstr name; newstr_init( &name ); status = wordin_person_last( node, &name ); if ( status!=BIBL_OK ) { ret = status; goto out; } status = wordin_person_first( node, &name ); if ( status!=BIBL_OK ) { ret = status; goto out; } status = fields_add( info, type, name.data, 0 ); if ( status != FIELDS_OK ) ret = BIBL_ERR_MEMERR; out: newstr_free( &name ); return ret; } static int wordin_people( xml *node, fields *info, char *type ) { int ret = BIBL_OK; if ( xml_tagexact( node, "b:Author" ) && node->down ) { ret = wordin_people( node->down, info, type ); } else if ( xml_tagexact( node, "b:NameList" ) && node->down ) { ret = wordin_people( node->down, info, type ); } else if ( xml_tagexact( node, "b:Person" ) ) { if ( node->down ) ret = wordin_person( node->down, info, type ); if ( ret!=BIBL_OK ) return ret; if ( node->next ) ret = wordin_people( node->next, info, type ); } return ret; } static int wordin_pages( xml *node, fields *info ) { int i, status, ret = BIBL_OK; newstr sp, ep; char *p; newstrs_init( &sp, &ep, NULL ); p = xml_data( node ); while ( *p && *p!='-' ) newstr_addchar( &sp, *p++ ); if ( newstr_memerr( &sp ) ) { ret = BIBL_ERR_MEMERR; goto out; } if ( *p=='-' ) p++; while ( *p ) newstr_addchar( &ep, *p++ ); if ( newstr_memerr( &ep ) ) { ret = BIBL_ERR_MEMERR; goto out; } if ( sp.len ) { status = fields_add( info, "PAGESTART", sp.data, 1 ); if ( status!=FIELDS_OK ) { ret = BIBL_ERR_MEMERR; goto out; } } if ( ep.len ) { if ( sp.len > ep.len ) { for ( i=sp.len-ep.len; i<sp.len; ++i ) sp.data[i] = ep.data[i-sp.len+ep.len]; status = fields_add( info, "PAGEEND", sp.data, 1 ); } else status = fields_add( info, "PAGEEND", ep.data, 1 ); if ( status!=FIELDS_OK ) { ret = BIBL_ERR_MEMERR; goto out; } } out: newstrs_free( &sp, &ep, NULL ); return ret; } static int wordin_reference( xml *node, fields *info ) { int status, ret = BIBL_OK; if ( xml_hasdata( node ) ) { if ( xml_tagexact( node, "b:Tag" ) ) { status = fields_add( info, "REFNUM", xml_data( node ), 0 ); if ( status!=FIELDS_OK ) ret = BIBL_ERR_MEMERR; } else if ( xml_tagexact( node, "b:SourceType" ) ) { } else if ( xml_tagexact( node, "b:City" ) ) { status = fields_add( info, "ADDRESS", xml_data( node ), 0 ); if ( status!=FIELDS_OK ) ret = BIBL_ERR_MEMERR; } else if ( xml_tagexact( node, "b:Publisher" ) ) { status = fields_add( info, "PUBLISHER", xml_data( node ), 0 ); if ( status!=FIELDS_OK ) ret = BIBL_ERR_MEMERR; } else if ( xml_tagexact( node, "b:Title" ) ) { status = fields_add( info, "TITLE", xml_data( node ), 0 ); if ( status!=FIELDS_OK ) ret = BIBL_ERR_MEMERR; } else if ( xml_tagexact( node, "b:JournalName" ) ) { status = fields_add( info, "TITLE", xml_data( node ), 1 ); if ( status!=FIELDS_OK ) ret = BIBL_ERR_MEMERR; } else if ( xml_tagexact( node, "b:Volume" ) ) { status = fields_add( info, "VOLUME", xml_data( node ), 1 ); if ( status!=FIELDS_OK ) ret = BIBL_ERR_MEMERR; } else if ( xml_tagexact( node, "b:Comments" ) ) { status = fields_add( info, "NOTES", xml_data( node ), 0 ); if ( status!=FIELDS_OK ) ret = BIBL_ERR_MEMERR; } else if ( xml_tagexact( node, "b:Pages" ) ) { ret = wordin_pages( node, info ); } else if ( xml_tagexact( node, "b:Author" ) && node->down ) { ret = wordin_people( node->down, info, "AUTHOR" ); } else if ( xml_tagexact( node, "b:Editor" ) && node->down ) { ret = wordin_people( node->down, info, "EDITOR" ); } } if ( ret==BIBL_OK && node->next ) wordin_reference( node->next, info ); return ret; } static int wordin_assembleref( xml *node, fields *info ) { int ret = BIBL_OK; if ( xml_tagexact( node, "b:Source" ) ) { if ( node->down ) ret = wordin_reference( node->down, info ); } else if ( node->tag->len==0 && node->down ) { ret = wordin_assembleref( node->down, info ); } return ret; } int wordin_processf( fields *wordin, char *data, char *filename, long nref ) { int status, ret = 1; xml top; xml_init( &top ); xml_tree( data, &top ); status = wordin_assembleref( &top, wordin ); xml_free( &top ); if ( status==BIBL_ERR_MEMERR ) ret = 0; return ret; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hs-bibutils-5.5/bibutils/bibtexin.c�����������������������������������������������������������������0000644�0000000�0000000�00000102322�12445605732�015573� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * bibtexin.c * * Copyright (c) Chris Putnam 2003-2014 * * Program and source code released under the GPL version 2 * */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include "is_ws.h" #include "strsearch.h" #include "newstr.h" #include "newstr_conv.h" #include "fields.h" #include "list.h" #include "name.h" #include "title.h" #include "reftypes.h" #include "bibtexin.h" static list find = { 0, 0, NULL, 0 }; static list replace = { 0, 0, NULL, 0 }; extern const char progname[]; /***************************************************** PUBLIC: void bibtexin_initparams() *****************************************************/ void bibtexin_initparams( param *p, const char *progname ) { p->readformat = BIBL_BIBTEXIN; p->charsetin = BIBL_CHARSET_DEFAULT; p->charsetin_src = BIBL_SRC_DEFAULT; p->latexin = 1; p->xmlin = 0; p->utf8in = 0; p->nosplittitle = 0; p->verbose = 0; p->addcount = 0; p->output_raw = 0; p->readf = bibtexin_readf; p->processf = bibtexin_processf; p->cleanf = bibtexin_cleanf; p->typef = bibtexin_typef; p->convertf = bibtexin_convertf; p->all = bibtex_all; p->nall = bibtex_nall; list_init( &(p->asis) ); list_init( &(p->corps) ); if ( !progname ) p->progname = NULL; else p->progname = strdup( progname ); } /***************************************************** PUBLIC: int bibtexin_readf() *****************************************************/ /* * readf can "read too far", so we store this information in line, thus * the next new text is in line, either from having read too far or * from the next chunk obtained via newstr_fget() * * return 1 on success, 0 on error/end-of-file * */ static int readmore( FILE *fp, char *buf, int bufsize, int *bufpos, newstr *line ) { if ( line->len ) return 1; else return newstr_fget( fp, buf, bufsize, bufpos, line ); } /* * readf() * * returns zero if cannot get reference and hit end of-file * returns 1 if last reference in file, 2 if reference within file */ int bibtexin_readf( FILE *fp, char *buf, int bufsize, int *bufpos, newstr *line, newstr *reference, int *fcharset ) { int haveref = 0; char *p; *fcharset = CHARSET_UNKNOWN; while ( haveref!=2 && readmore( fp, buf, bufsize, bufpos, line ) ) { if ( line->len == 0 ) continue; /* blank line */ p = &(line->data[0]); /* Recognize UTF8 BOM */ if ( line->len > 2 && (unsigned char)(p[0])==0xEF && (unsigned char)(p[1])==0xBB && (unsigned char)(p[2])==0xBF ) { *fcharset = CHARSET_UNICODE; p += 3; } p = skip_ws( p ); if ( *p == '%' ) { /* commented out line */ newstr_empty( line ); continue; } if ( *p == '@' ) haveref++; if ( haveref && haveref<2 ) { newstr_strcat( reference, p ); newstr_addchar( reference, '\n' ); newstr_empty( line ); } else if ( !haveref ) newstr_empty( line ); } return haveref; } /***************************************************** PUBLIC: int bibtexin_processf() *****************************************************/ static char* process_bibtextype( char *p, newstr *type ) { newstr tmp; newstr_init( &tmp ); if ( *p=='@' ) p++; p = newstr_cpytodelim( &tmp, p, "{( \t\r\n", 0 ); p = skip_ws( p ); if ( *p=='{' || *p=='(' ) p++; p = skip_ws( p ); if ( tmp.len ) newstr_strcpy( type, tmp.data ); else newstr_empty( type ); newstr_free( &tmp ); return p; } static char* process_bibtexid( char *p, newstr *id ) { char *start_p = p; newstr tmp; newstr_init( &tmp ); p = newstr_cpytodelim( &tmp, p, ",", 1 ); if ( tmp.len ) { if ( strchr( tmp.data, '=' ) ) { /* Endnote writes bibtex files w/o fields, try to * distinguish via presence of an equal sign.... if * it's there, assume that it's a tag/data pair instead * and roll back. */ p = start_p; newstr_empty( id ); } else { newstr_strcpy( id, tmp.data ); } } else { newstr_empty( id ); } newstr_free( &tmp ); return skip_ws( p ); } static char * bibtex_tag( char *p, newstr *tag ) { p = newstr_cpytodelim( tag, skip_ws( p ), "= \t\r\n", 0 ); if ( newstr_memerr( tag ) ) return NULL; return skip_ws( p ); } static char * bibtex_data( char *p, fields *bibin, list *tokens ) { unsigned int nbracket = 0, nquotes = 0; char *startp = p; newstr tok, *t; newstr_init( &tok ); while ( p && *p ) { if ( !nquotes && !nbracket ) { if ( *p==',' || *p=='=' || *p=='}' || *p==')' ) goto out; } if ( *p=='\"' && nbracket==0 && ( p==startp || *(p-1)!='\\' ) ) { nquotes = !nquotes; newstr_addchar( &tok, *p ); if ( !nquotes ) { if ( newstr_memerr( &tok ) ) { p=NULL; goto out; } t = list_add( tokens, &tok ); if ( !t ) { p=NULL; goto out0; } newstr_empty( &tok ); } } else if ( *p=='#' && !nquotes && !nbracket ) { if ( tok.len ) { if ( newstr_memerr( &tok ) ) { p=NULL; goto out; } t = list_add( tokens, &tok ); if ( !t ) { p=NULL; goto out0; } } newstr_strcpy( &tok, "#" ); t = list_add( tokens, &tok ); if ( !t ) { p=NULL; goto out0; } newstr_empty( &tok ); } else if ( *p=='{' && !nquotes && ( p==startp || *(p-1)!='\\' ) ) { nbracket++; newstr_addchar( &tok, *p ); } else if ( *p=='}' && !nquotes && ( p==startp || *(p-1)!='\\' ) ) { nbracket--; newstr_addchar( &tok, *p ); if ( nbracket==0 ) { if ( newstr_memerr( &tok ) ) { p=NULL; goto out; } t = list_add( tokens, &tok ); if ( !t ) { p=NULL; goto out; } newstr_empty( &tok ); } } else if ( !is_ws( *p ) || nquotes || nbracket ) { if ( !is_ws( *p ) ) newstr_addchar( &tok, *p ); else { if ( tok.len!=0 && *p!='\n' && *p!='\r' ) newstr_addchar( &tok, *p ); else if ( tok.len!=0 && (*p=='\n' || *p=='\r')) { newstr_addchar( &tok, ' ' ); while ( is_ws( *(p+1) ) ) p++; } } } else if ( is_ws( *p ) ) { if ( tok.len ) { if ( newstr_memerr( &tok ) ) { p=NULL; goto out; } t = list_add( tokens, &tok ); if ( !t ) { p=NULL; goto out; } newstr_empty( &tok ); } } p++; } out: if ( nbracket!=0 ) { fprintf( stderr, "%s: Mismatch in number of brackets in reference.\n", progname ); } if ( nquotes!=0 ) { fprintf( stderr, "%s: Mismatch in number of quotes in reference.\n", progname ); } if ( tok.len ) { if ( newstr_memerr( &tok ) ) { p = NULL; goto out; } t = list_add( tokens, &tok ); if ( !t ) p = NULL; } out0: newstr_free( &tok ); return p; } /* replace_strings() * * do string replacement -- only if unprotected by quotation marks or curly brackets */ static void replace_strings( list *tokens, fields *bibin ) { int i, n, ok; newstr *s; char *q; i = 0; while ( i < tokens->n ) { s = list_get( tokens, i ); if ( !strcmp( s->data, "#" ) ) { } else if ( s->data[0]!='\"' && s->data[0]!='{' ) { n = list_find( &find, s->data ); if ( n!=-1 ) { newstr_newstrcpy( s, list_get( &replace, n ) ); } else { q = s->data; ok = 1; while ( *q && ok ) { if ( !isdigit( *q ) ) ok = 0; q++; } if ( !ok ) { fprintf( stderr, "%s: Warning: Non-numeric " "BibTeX elements should be in quotations or " "curly brackets in reference.\n", progname ); } } } i++; } } static int string_concatenate( list *tokens, fields *bibin ) { newstr *s, *t; int i, status; i = 0; while ( i < tokens->n ) { s = list_get( tokens, i ); if ( !strcmp( s->data, "#" ) ) { if ( i==0 || i==tokens->n-1 ) { fprintf( stderr, "%s: Warning: Stray string concatenation " "('#' character) in reference\n", progname ); status = list_remove( tokens, i ); if ( status!=LIST_OK ) return BIBL_ERR_MEMERR; continue; } s = list_get( tokens, i-1 ); if ( s->data[0]!='\"' && s->data[s->len-1]!='\"' ) fprintf( stderr, "%s: Warning: String concentation should " "be used in context of quotations marks.\n", progname ); t = list_get( tokens, i+1 ); if ( t->data[0]!='\"' && t->data[s->len-1]!='\"' ) fprintf( stderr, "%s: Warning: String concentation should " "be used in context of quotations marks.\n", progname ); if ( ( s->data[s->len-1]=='\"' && t->data[0]=='\"') || (s->data[s->len-1]=='}' && t->data[0]=='{') ) { newstr_trimend( s, 1 ); newstr_trimbegin( t, 1 ); newstr_newstrcat( s, t ); } else { newstr_newstrcat( s, t ); } status = list_remove( tokens, i ); if ( status!=LIST_OK ) return BIBL_ERR_MEMERR; status = list_remove( tokens, i ); if ( status!=LIST_OK ) return BIBL_ERR_MEMERR; } else i++; } return BIBL_OK; } /* return NULL on memory error */ static char * process_bibtexline( char *p, newstr *tag, newstr *data, uchar stripquotes, fields *bibin ) { int i, status; list tokens; newstr *s; newstr_empty( data ); p = bibtex_tag( p, tag ); if ( p==NULL || tag->len==0 ) return p; list_init( &tokens ); if ( *p=='=' ) { p = bibtex_data( p+1, bibin, &tokens ); if ( p==NULL ) goto out; } replace_strings( &tokens, bibin ); status = string_concatenate( &tokens, bibin ); if ( status!=BIBL_OK ) { p = NULL; goto out; } for ( i=0; i<tokens.n; i++ ) { s = list_get( &tokens, i ); if ( ( stripquotes && s->data[0]=='\"' && s->data[s->len-1]=='\"' ) || ( s->data[0]=='{' && s->data[s->len-1]=='}' ) ) { newstr_trimbegin( s, 1 ); newstr_trimend( s, 1 ); } newstr_newstrcat( data, list_get( &tokens, i ) ); } out: list_free( &tokens ); return p; } /* process_cite() * */ static int process_cite( fields *bibin, char *p, char *filename, long nref ) { int fstatus, status = BIBL_OK; newstr tag, data; newstrs_init( &tag, &data, NULL ); p = process_bibtextype( p, &data ); if ( data.len ) { fstatus = fields_add( bibin, "INTERNAL_TYPE", data.data, 0 ); if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; } } p = process_bibtexid( p, &data ); if ( data.len ) { fstatus = fields_add( bibin, "REFNUM", data.data, 0 ); if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; } } while ( *p ) { p = process_bibtexline( p, &tag, &data, 1, bibin ); if ( p==NULL ) { status = BIBL_ERR_MEMERR; goto out; } /* no anonymous or empty fields allowed */ if ( tag.len && data.len ) { fstatus = fields_add( bibin, tag.data, data.data, 0 ); if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; } } newstrs_empty( &tag, &data, NULL ); } out: newstrs_free( &tag, &data, NULL ); return status; } /* process_string() * * Handle lines like: * * '@STRING{TL = {Tetrahedron Lett.}}' * * p should point to just after '@STRING' * * In BibTeX, if a string is defined several times, the last one is kept. * */ static int process_string( char *p ) { int n, status = BIBL_OK; newstr s1, s2, *t; newstrs_init( &s1, &s2, NULL ); while ( *p && *p!='{' && *p!='(' ) p++; if ( *p=='{' || *p=='(' ) p++; p = process_bibtexline( skip_ws( p ), &s1, &s2, 0, NULL ); if ( p==NULL ) { status = BIBL_ERR_MEMERR; goto out; } if ( s2.data ) { newstr_findreplace( &s2, "\\ ", " " ); } if ( s1.data ) { n = list_find( &find, s1.data ); if ( n==-1 ) { t = list_add( &find, &s1 ); if ( t==NULL ) { status = BIBL_ERR_MEMERR; goto out; } if ( s2.data ) t = list_add( &replace, &s2 ); else t = list_addc( &replace, "" ); if ( t==NULL ) { status = BIBL_ERR_MEMERR; goto out; } } else { if ( s2.data ) t = list_set( &replace, n, &s2 ); else t = list_setc( &replace, n, "" ); if ( t==NULL ) { status = BIBL_ERR_MEMERR; goto out; } } } out: newstrs_free( &s1, &s2, NULL ); return status; } /* bibtexin_processf() * * Handle '@STRING', '@reftype', and ignore '@COMMENT' */ int bibtexin_processf( fields *bibin, char *data, char *filename, long nref ) { if ( !strncasecmp( data, "@STRING", 7 ) ) { process_string( data+7 ); return 0; } else if ( !strncasecmp( data, "@COMMENT", 8 ) ) { /* Not sure if these are real Bibtex, but not references */ return 0; } else { process_cite( bibin, data, filename, nref ); return 1; } } /***************************************************** PUBLIC: void bibtexin_cleanf() *****************************************************/ static int bibtex_protected( newstr *data ) { if ( data->data[0]=='{' && data->data[data->len-1]=='}' ) return 1; if ( data->data[0]=='\"' && data->data[data->len-1]=='\"' ) return 1; return 0; } static int bibtex_split( list *tokens, newstr *s ) { int i, n = s->len, nbrackets = 0, status = BIBL_OK; newstr tok, *t; newstr_init( &tok ); for ( i=0; i<n; ++i ) { if ( s->data[i]=='{' && ( i==0 || s->data[i-1]!='\\' ) ) { nbrackets++; newstr_addchar( &tok, '{' ); } else if ( s->data[i]=='}' && ( i==0 || s->data[i-1]!='\\' ) ) { nbrackets--; newstr_addchar( &tok, '}' ); } else if ( !is_ws( s->data[i] ) || nbrackets ) { newstr_addchar( &tok, s->data[i] ); } else if ( is_ws( s->data[i] ) ) { if ( tok.len ) { t = list_add( tokens, &tok ); if ( !t ) { status = BIBL_ERR_MEMERR; goto out; } } newstr_empty( &tok ); } } if ( tok.len ) { t = list_add( tokens, &tok ); if ( !t ) { status = BIBL_ERR_MEMERR; goto out; } } for ( i=0; i<tokens->n; ++i ) { newstr_trimstartingws( list_get( tokens, i ) ); newstr_trimendingws( list_get( tokens, i ) ); } out: newstr_free( &tok ); return status; } static int bibtex_addtitleurl( fields *info, newstr *in ) { int fstatus, status = BIBL_OK; newstr s; char *p; newstr_init( &s ); /* ...skip past "\href{" and copy to "}" */ p = newstr_cpytodelim( &s, in->data + 6, "}", 1 ); if ( newstr_memerr( &s ) ) { status = BIBL_ERR_MEMERR; goto out; } /* ...add to URL */ fstatus = fields_add( info, "URL", s.data, 0 ); if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; } /* ...return deleted fragment to newstr in */ p = newstr_cpytodelim( &s, p, "", 0 ); if ( newstr_memerr( &s ) ) { status = BIBL_ERR_MEMERR; goto out; } newstr_swapstrings( &s, in ); out: newstr_free( &s ); return status; } static int is_url_tag( newstr *tag ) { if ( tag->len ) { if ( !strcasecmp( tag->data, "url" ) ) return 1; } return 0; } static int is_name_tag( newstr *tag ) { if ( tag->len ) { if ( !strcasecmp( tag->data, "author" ) ) return 1; if ( !strcasecmp( tag->data, "editor" ) ) return 1; } return 0; } static void bibtex_process_tilde( newstr *s ) { char *p, *q; int n = 0; p = q = s->data; if ( !p ) return; while ( *p ) { if ( *p=='~' ) { *q = ' '; } else if ( *p=='\\' && *(p+1)=='~' ) { n++; p++; *q = '~'; } else { *q = *p; } p++; q++; } *q = '\0'; s->len -= n; } static void bibtex_process_bracket( newstr *s ) { char *p, *q; int n = 0; p = q = s->data; if ( !p ) return; while ( *p ) { if ( *p=='\\' && ( *(p+1)=='{' || *(p+1)=='}' ) ) { n++; p++; *q = *p; q++; } else if ( *p=='{' || *p=='}' ) { n++; } else { *q = *p; q++; } p++; } *q = '\0'; s->len -= n; } static void bibtex_cleantoken( newstr *s ) { /* 'textcomp' annotations */ newstr_findreplace( s, "\\textit", "" ); newstr_findreplace( s, "\\textbf", "" ); newstr_findreplace( s, "\\textsl", "" ); newstr_findreplace( s, "\\textsc", "" ); newstr_findreplace( s, "\\textsf", "" ); newstr_findreplace( s, "\\texttt", "" ); newstr_findreplace( s, "\\textsubscript", "" ); newstr_findreplace( s, "\\textsuperscript", "" ); newstr_findreplace( s, "\\emph", "" ); newstr_findreplace( s, "\\url", "" ); newstr_findreplace( s, "\\mbox", "" ); /* Other text annotations */ newstr_findreplace( s, "\\it ", "" ); newstr_findreplace( s, "\\em ", "" ); newstr_findreplace( s, "\\%", "%" ); newstr_findreplace( s, "\\$", "$" ); while ( newstr_findreplace( s, " ", " " ) ) {} /* 'textcomp' annotations that we don't want to substitute on output*/ newstr_findreplace( s, "\\textdollar", "$" ); newstr_findreplace( s, "\\textunderscore", "_" ); bibtex_process_bracket( s ); bibtex_process_tilde( s ); } static int bibtex_cleandata( newstr *tag, newstr *s, fields *info, param *p ) { int i, status; list tokens; newstr *tok; if ( !s->len ) return BIBL_OK; /* protect url from undergoing any parsing */ if ( is_url_tag( tag ) ) return BIBL_OK; list_init( &tokens ); status = bibtex_split( &tokens, s ); if ( status!=BIBL_OK ) goto out; for ( i=0; i<tokens.n; ++i ) { tok = list_get( &tokens, i ); if ( bibtex_protected( tok ) ) { if (!strncasecmp(tok->data,"\\href{", 6)) { bibtex_addtitleurl( info, tok ); } } if ( p->latexin && !is_name_tag( tag ) && !is_url_tag( tag ) ) bibtex_cleantoken( tok ); } newstr_empty( s ); for ( i=0; i<tokens.n; ++i ) { tok = list_get( &tokens, i ); if ( i>0 ) newstr_addchar( s, ' ' ); newstr_newstrcat( s, tok ); } out: list_free( &tokens ); return status; } static int bibtexin_cleanref( fields *bibin, param *p ) { int i, n, status; newstr *t, *d; n = fields_num( bibin ); for ( i=0; i<n; ++i ) { t = fields_tag( bibin, i, FIELDS_STRP_NOUSE ); d = fields_value( bibin, i, FIELDS_STRP_NOUSE ); status = bibtex_cleandata( t, d, bibin, p ); if ( status!=BIBL_OK ) return status; } return BIBL_OK; } static long bibtexin_findref( bibl *bin, char *citekey ) { int n; long i; for ( i=0; i<bin->nrefs; ++i ) { n = fields_find( bin->ref[i], "refnum", -1 ); if ( n==-1 ) continue; if ( !strcmp( bin->ref[i]->data[n].data, citekey ) ) return i; } return -1; } static void bibtexin_nocrossref( bibl *bin, long i, int n, param *p ) { int n1 = fields_find( bin->ref[i], "REFNUM", -1 ); if ( p->progname ) fprintf( stderr, "%s: ", p->progname ); fprintf( stderr, "Cannot find cross-reference '%s'", bin->ref[i]->data[n].data ); if ( n1!=-1 ) fprintf( stderr, " for reference '%s'\n", bin->ref[i]->data[n1].data ); fprintf( stderr, "\n" ); } static int bibtexin_crossref_oneref( fields *bibref, fields *bibcross ) { int j, n, nl, ntype, fstatus, status = BIBL_OK; char *type, *nt, *nv; ntype = fields_find( bibref, "INTERNAL_TYPE", -1 ); type = ( char * ) fields_value( bibref, ntype, FIELDS_CHRP_NOUSE ); n = fields_num( bibcross ); for ( j=0; j<n; ++j ) { nt = ( char * ) fields_tag( bibcross, j, FIELDS_CHRP_NOUSE ); if ( !strcasecmp( nt, "INTERNAL_TYPE" ) ) continue; if ( !strcasecmp( nt, "REFNUM" ) ) continue; if ( !strcasecmp( nt, "TITLE" ) ) { if ( !strcasecmp( type, "Inproceedings" ) || !strcasecmp( type, "Incollection" ) ) nt = "booktitle"; } nv = ( char * ) fields_value( bibcross, j, FIELDS_CHRP_NOUSE ); nl = fields_level( bibcross, j ) + 1; fstatus = fields_add( bibref, nt, nv, nl ); if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; } } out: return status; } static int bibtexin_crossref( bibl *bin, param *p ) { int i, n, ncross, status = BIBL_OK; fields *bibref, *bibcross; for ( i=0; i<bin->nrefs; ++i ) { bibref = bin->ref[i]; n = fields_find( bibref, "CROSSREF", -1 ); if ( n==-1 ) continue; fields_setused( bibref, n ); ncross = bibtexin_findref( bin, (char*) fields_value( bibref, n, FIELDS_CHRP ) ); if ( ncross==-1 ) { bibtexin_nocrossref( bin, i, n, p ); continue; } bibcross = bin->ref[ncross]; status = bibtexin_crossref_oneref( bibref, bibcross ); if ( status!=BIBL_OK ) goto out; } out: return status; } int bibtexin_cleanf( bibl *bin, param *p ) { int status = BIBL_OK; long i; for ( i=0; i<bin->nrefs; ++i ) status = bibtexin_cleanref( bin->ref[i], p ); bibtexin_crossref( bin, p ); return status; } /***************************************************** PUBLIC: int bibtexin_typef() *****************************************************/ int bibtexin_typef( fields *bibin, char *filename, int nrefs, param *p, variants *all, int nall ) { char *refnum = ""; int reftype, n, nrefnum; n = fields_find( bibin, "INTERNAL_TYPE", 0 ); nrefnum = fields_find( bibin, "REFNUM", 0 ); if ( nrefnum!=-1 ) refnum = (bibin->data[nrefnum]).data; if ( n!=-1 ) /* figure out type */ reftype = get_reftype( (bibin->data[n]).data, nrefs, p->progname, all, nall, refnum ); else /* no type info, go for default */ reftype = get_reftype( "", nrefs, p->progname, all, nall, refnum ); return reftype; } /***************************************************** PUBLIC: int bibtexin_convertf(), returns BIBL_OK or BIBL_ERR_MEMERR *****************************************************/ static int bibtex_matches_list( fields *info, char *tag, char *suffix, newstr *data, int level, list *names, int *match ) { int i, fstatus, status = BIBL_OK; newstr newtag; *match = 0; if ( names->n==0 ) return status; newstr_init( &newtag ); for ( i=0; i<names->n; ++i ) { if ( strcmp( data->data, list_getc( names, i ) ) ) continue; newstr_initstr( &newtag, tag ); newstr_strcat( &newtag, suffix ); fstatus = fields_add( info, newtag.data, data->data, level ); if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; } *match = 1; goto out; } out: newstr_free( &newtag ); return status; } /* * bibtex_names( info, newtag, field, level); * * split names in author list separated by and's (use '|' character) * and add names * * returns BIBL_OK on success, BIBL_ERR_MEMERR on memory error */ static int bibtex_names( fields *info, char *tag, newstr *data, int level, list *asis, list *corps ) { int begin, end, ok, n, etal, i, status, match; list tokens; /* If we match the asis or corps list add and bail. */ status = bibtex_matches_list( info, tag, ":ASIS", data, level, asis, &match ); if ( match==1 || status!=BIBL_OK ) return status; status = bibtex_matches_list( info, tag, ":CORP", data, level, corps, &match ); if ( match==1 || status!=BIBL_OK ) return status; list_init( &tokens ); bibtex_split( &tokens, data ); for ( i=0; i<tokens.n; ++i ) bibtex_cleantoken( list_get( &tokens, i ) ); etal = name_findetal( &tokens ); begin = 0; n = tokens.n - etal; while ( begin < n ) { end = begin + 1; while ( end < n && strcasecmp( list_getc( &tokens, end ), "and" ) ) end++; if ( end - begin == 1 ) { ok = name_addsingleelement( info, tag, list_getc( &tokens, begin ), level, 0 ); if ( !ok ) { status = BIBL_ERR_MEMERR; goto out; } } else { ok = name_addmultielement( info, tag, &tokens, begin, end, level ); if ( !ok ) { status = BIBL_ERR_MEMERR; goto out; } } begin = end + 1; /* Handle repeated 'and' errors: authors="G. F. Author and and B. K. Author" */ while ( begin < n && !strcasecmp( list_getc( &tokens, begin ), "and" ) ) begin++; } if ( etal ) { ok = name_addsingleelement( info, tag, "et al.", level, 0 ); if ( !ok ) status = BIBL_ERR_MEMERR; } out: list_free( &tokens ); return status; } /* is_utf8_emdash() * * Internally pages="A---B" will convert --- to a UTF8 * emdash = 0xE2 (-30) 0x80 (-128) 0x94 (-108) */ static int is_utf8_emdash( char *p ) { static char emdash[3] = { -30, -128, -108 }; if ( strncmp( p, emdash, 3 ) ) return 0; return 1; } /* is_utf8_endash() * * Internally pages="A--B" will convert -- to a UTF8 * endash = 0xE2 (-30) 0x80 (-128) 0x93 (-109) */ static int is_utf8_endash( char *p ) { static char endash[3] = { -30, -128, -109 }; if ( strncmp( p, endash, 3 ) ) return 0; return 1; } static int process_pages( fields *info, newstr *s, int level ) { int fstatus, status = BIBL_OK; newstr page; char *p; newstr_findreplace( s, " ", "" ); if ( s->len==0 ) return 1; newstr_init( &page ); p = skip_ws( s->data ); while ( *p && !is_ws(*p) && *p!='-' && *p!='\r' && *p!='\n' && *p!=-30 ) newstr_addchar( &page, *p++ ); if ( page.len>0 ) { fstatus = fields_add( info, "PAGESTART", page.data, level ); if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; } } while ( *p && (is_ws(*p) || *p=='-' ) ) p++; if ( *p && is_utf8_emdash( p ) ) p+=3; if ( *p && is_utf8_endash( p ) ) p+=3; newstr_empty( &page ); while ( *p && !is_ws(*p) && *p!='-' && *p!='\r' && *p!='\n' ) newstr_addchar( &page, *p++ ); if ( page.len>0 ) { fstatus = fields_add( info, "PAGEEND", page.data, level ); if ( fstatus!=FIELDS_OK ) status = BIBL_ERR_MEMERR; } out: newstr_free( &page ); return status; } static int process_urlcore( fields *info, newstr *d, int level, char *default_tag ) { char *p = d->data; int fstatus; if ( !strncasecmp( p, "\\urllink", 8 ) ) fstatus = fields_add( info, "URL", p+8, level ); else if ( !strncasecmp( p, "\\url", 4 ) ) fstatus = fields_add( info, "URL", p+4, level ); else if ( !strncasecmp( p, "arXiv:", 6 ) ) fstatus = fields_add( info, "ARXIV", p+6, level ); else if ( !strncasecmp( p, "http://arxiv.org/abs/", 21 ) ) fstatus = fields_add( info, "ARXIV", p+21, level ); else if ( !strncasecmp( p, "http:", 5 ) ) fstatus = fields_add( info, "URL", p, level ); else fstatus = fields_add( info, default_tag, p, level ); if ( fstatus==FIELDS_OK ) return BIBL_OK; else return BIBL_ERR_MEMERR; } static int process_url( fields *info, newstr *d, int level ) { return process_urlcore( info, d, level, "URL" ); } /* Split keywords="" with semicolons. * Commas are also frequently used, but will break * entries like: * keywords="Microscopy, Confocal" * Returns BIBL_OK or BIBL_ERR_MEMERR */ static int process_keywords( fields *info, newstr *d, int level ) { int fstatus, status = BIBL_OK; newstr keyword; char *p; if ( !d || d->len==0 ) return BIBL_OK; p = d->data; newstr_init( &keyword ); while ( *p ) { p = newstr_cpytodelim( &keyword, skip_ws( p ), ";", 1 ); newstr_trimendingws( &keyword ); if ( newstr_memerr( &keyword ) ) { status = BIBL_ERR_MEMERR; goto out; } if ( keyword.len ) { fstatus = fields_add( info, "KEYWORD", keyword.data, level ); if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; } } } out: newstr_free( &keyword ); return status; } /* proces_howpublished() * * howpublished={}, * * Normally indicates the manner in which something was * published in lieu of a formal publisher, so typically * 'howpublished' and 'publisher' will never be in the * same reference. * * Occassionally, people put Diploma thesis information * into the field, so check that first. * * Returns BIBL_OK or BIBL_ERR_MEMERR */ static int process_howpublished( fields *info, newstr *d, int level ) { int fstatus, status = BIBL_OK; char *p = d->data; if ( !strncasecmp( p, "Diplom", 6 ) ) { fstatus = fields_replace_or_add( info, "GENRE", "Diploma thesis", level ); if ( fstatus!=FIELDS_OK ) status = BIBL_ERR_MEMERR; } else if ( !strncasecmp( p, "Habilitation", 13 ) ) { fstatus = fields_replace_or_add( info, "GENRE", "Habilitation thesis", level ); if ( fstatus!=FIELDS_OK ) status = BIBL_ERR_MEMERR; } else if ( !strncasecmp( d->data, "http:", 5 ) ) { status = process_url( info, d, level ); } else if ( !strncasecmp( d->data, "arXiv:", 6 ) ) { status = process_url( info, d, level ); } else { fstatus = fields_add( info, "PUBLISHER", p, level ); if ( fstatus!=FIELDS_OK ) status = BIBL_ERR_MEMERR; } return status; } /* * sentelink = {file://localhost/full/path/to/file.pdf,Sente,PDF} */ static int process_sente( fields *info, newstr *d, int level ) { int fstatus, status = BIBL_OK; newstr link; newstr_init( &link ); newstr_cpytodelim( &link, skip_ws( d->data ), ",", 0 ); newstr_trimendingws( &link ); if ( newstr_memerr( &link ) ) status = BIBL_ERR_MEMERR; if ( status==BIBL_OK && link.len ) { fstatus = fields_add( info, "FILEATTACH", link.data, level ); if ( fstatus!=FIELDS_OK ) status = BIBL_ERR_MEMERR; } newstr_free( &link ); return status; } /* * BibTeX uses 'organization' in lieu of publisher if that field is missing. * Otherwise output as * <name type="corporate"> * <namePart>The organization</namePart> * <role> * <roleTerm authority="marcrelator" type="text">organizer of meeting</roleTerm> * </role> * </name> */ static int process_organization( fields *bibin, fields *info, newstr *d, int level ) { int n, fstatus; n = fields_find( bibin, "publisher", LEVEL_ANY ); if ( n==-1 ) fstatus = fields_add( info, "PUBLISHER", d->data, level ); else fstatus = fields_add( info, "ORGANIZER:CORP", d->data, level ); if ( fstatus==FIELDS_OK ) return BIBL_OK; else return BIBL_ERR_MEMERR; } static int count_colons( char *p ) { int n = 0; while ( *p ) { if ( *p==':' ) n++; p++; } return n; } static int first_colon( char *p ) { int n = 0; while ( p[n] && p[n]!=':' ) n++; return n; } static int last_colon( char *p ) { int n = strlen( p ) - 1; while ( n>0 && p[n]!=':' ) n--; return n; } /* * file={Description:/full/path/to/file.pdf:PDF} */ static int process_file( fields *info, newstr *d, int level ) { int fstatus, status = BIBL_OK; char *p = d->data; int i, n, n1, n2; newstr link; n = count_colons( p ); if ( n > 1 ) { /* A DOS file can contain a colon ":C:/....pdf:PDF" */ /* Extract after 1st and up to last colons */ n1 = first_colon( p ) + 1; n2 = last_colon( p ); newstr_init( &link ); for ( i=n1; i<n2; ++i ) { newstr_addchar( &link, p[i] ); } newstr_trimstartingws( &link ); newstr_trimendingws( &link ); if ( newstr_memerr( &link ) ) { status = BIBL_ERR_MEMERR; goto out; } if ( link.len ) { fstatus = fields_add( info, "FILEATTACH", link.data, level ); if ( fstatus!=FIELDS_OK ) status = BIBL_ERR_MEMERR; } out: newstr_free( &link ); } else { /* This field isn't formatted properly, so just copy directly */ fstatus = fields_add( info, "FILEATTACH", p, level ); if ( fstatus!=FIELDS_OK ) status = BIBL_ERR_MEMERR; } return status; } static int process_note( fields *info, newstr *d, int level ) { int fstatus, status = BIBL_OK; if ( !strncasecmp( d->data, "http:", 5 ) || !strncasecmp( d->data, "arXiv:", 6 ) ) { status = process_url( info, d, level ); } else { fstatus = fields_add( info, "NOTES", d->data, level ); if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR; } return status; } static void bibtexin_notag( param *p, char *tag ) { if ( p->verbose && strcmp( tag, "INTERNAL_TYPE" ) ) { if ( p->progname ) fprintf( stderr, "%s: ", p->progname ); fprintf( stderr, "Cannot find tag '%s'\n", tag ); } } /* bibtexin_titleinbook_isbooktitle() * * Normally, the title field of inbook refers to the book. The * section in a @inbook reference is untitled. If it's titled, * the @incollection should be used. For example, in: * * @inbook{ * title="xxx" * } * * the booktitle is "xxx". * * However, @inbook is frequently abused (and treated like * @incollection) so that title and booktitle are present * and title is now 'supposed' to refer to the section. For example: * * @inbook{ * title="yyy", * booktitle="xxx" * } * * Therefore report whether or not booktitle is present as well * as title in @inbook references. If not, then make 'title' * correspond to the title of the book, not the section. * */ static int bibtexin_titleinbook_isbooktitle( char *intag, fields *bibin ) { int n; /* ...look only at 'title="xxx"' elements */ if ( strcasecmp( intag, "TITLE" ) ) return 0; /* ...look only at '@inbook' references */ n = fields_find( bibin, "INTERNAL_TYPE", -1 ); if ( n==-1 ) return 0; if ( strcasecmp( fields_value( bibin, n, FIELDS_CHRP ), "INBOOK" ) ) return 0; /* ...look to see if 'booktitle="yyy"' exists */ n = fields_find( bibin, "BOOKTITLE", -1 ); if ( n==-1 ) return 0; else return 1; } static int bibtexin_title_process( fields *info, char *outtag, fields *bibin, newstr *t, newstr *d, int level, int nosplittitle ) { char *intag = t->data; char *indata = d->data; int ok; if ( bibtexin_titleinbook_isbooktitle( intag, bibin ) ) level=LEVEL_MAIN; ok = title_process( info, outtag, indata, level, nosplittitle ); if ( ok ) return BIBL_OK; else return BIBL_ERR_MEMERR; } static int bibtex_simple( fields *info, char *outtag, newstr *d, int level ) { int fstatus; fstatus = fields_add( info, outtag, d->data, level ); if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR; return BIBL_OK; } int bibtexin_convertf( fields *bibin, fields *info, int reftype, param *p, variants *all, int nall ) { int process, level, i, n, nfields, status; newstr *t, *d; char *outtag; nfields = fields_num( bibin ); for ( i=0; i<nfields; ++i ) { if ( fields_used( bibin, i ) ) continue; /* e.g. successful crossref */ if ( fields_nodata( bibin, i ) ) continue; t = fields_tag( bibin, i, FIELDS_STRP ); if ( t->len == 0 ) continue; /* Don't consider with null tags */ n = process_findoldtag( t->data, reftype, all, nall ); if ( n==-1 ) { bibtexin_notag( p, t->data ); continue; } d = fields_value( bibin, i, FIELDS_STRP ); process = ((all[reftype]).tags[n]).processingtype; level = ((all[reftype]).tags[n]).level; outtag = ((all[reftype]).tags[n]).newstr; switch( process ) { case SIMPLE: status = bibtex_simple( info, outtag, d, level ); break; case TITLE: status = bibtexin_title_process( info, "TITLE", bibin, t, d, level, p->nosplittitle ); break; case PERSON: status = bibtex_names( info, outtag, d, level, &(p->asis), &(p->corps) ); break; case PAGES: status = process_pages( info, d, level ); break; case KEYWORD: status = process_keywords( info, d, level ); break; case HOWPUBLISHED: status = process_howpublished( info, d, level ); break; case LINKEDFILE: status = process_file( info, d, level ); break; case BT_NOTE: status = process_note( info, d, level ); break; case BT_SENTE: status = process_sente( info, d, level ); break; case BT_URL: status = process_url( info, d, level ); break; case BT_ORG: status = process_organization( bibin, info, d, level ); break; default: status = BIBL_OK; break; } if ( status!=BIBL_OK ) return status; } return status; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hs-bibutils-5.5/bibutils/xml.c����������������������������������������������������������������������0000644�0000000�0000000�00000017777�12445605732�014612� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * xml.c * * Copyright (c) Chris Putnam 2004-2013 * * Source code released under the GPL version 2 * */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "is_ws.h" #include "strsearch.h" #include "newstr.h" #include "xml.h" char *xml_pns = NULL; static xml_attrib * xmlattrib_new( void ) { xml_attrib *a = (xml_attrib *) malloc( sizeof( xml_attrib ) ); if ( a ) { list_init( &(a->attrib) ); list_init( &(a->value) ); } return a; } static void xmlattrib_add( xml_attrib *a, char *attrib, char *value ) { if ( attrib ) list_addc( &(a->attrib), attrib ); else list_addc( &(a->attrib), "" ); if ( value ) list_addc( &(a->value), value ); else list_addc( &(a->value), "" ); } static void xmlattrib_free( xml_attrib *a ) { list_free( &(a->attrib) ); list_free( &(a->value ) ); } static xml * xml_new( void ) { xml *x = ( xml * ) malloc( sizeof( xml ) ); if ( x ) xml_init( x ); return x; } void xml_free( xml *x ) { if ( x->tag ) { newstr_free( x->tag ); free( x->tag ); } if ( x->value ) { newstr_free( x->value ); free( x->value ); } if ( x->a ) { xmlattrib_free( x->a ); free( x->a ); } if ( x->down ) xml_free( x->down ); if ( x->next ) xml_free( x->next ); } void xml_init( xml *x ) { x->tag = newstr_new(); x->value = newstr_new(); x->a = NULL; x->down = NULL; x->next = NULL; if ( !(x->tag) || !(x->value) ) { fprintf(stderr,"xml_init: memory error.\n"); exit( EXIT_FAILURE ); } } enum { XML_DESCRIPTOR, XML_COMMENT, XML_OPEN, XML_CLOSE, XML_OPENCLOSE }; static int xml_terminator( char *p, int *type ) { if ( *p=='>' ) { return 1; } else if ( *p=='/' && *(p+1)=='>' ) { if ( *type==XML_OPENCLOSE ) return 1; else if ( *type==XML_OPEN ) { *type = XML_OPENCLOSE; return 1; } } else if ( *p=='?' && *(p+1)=='>' && *type==XML_DESCRIPTOR ) { return 1; } else if ( *p=='!' && *(p+1)=='>' && *type==XML_COMMENT ) { return 1; } return 0; } static char * xml_processattrib( char *p, xml_attrib **ap, int *type ) { xml_attrib *a = NULL; char quote_character = '\"'; int inquotes = 0; newstr aname, aval; newstr_init( &aname ); newstr_init( &aval ); while ( *p && !xml_terminator(p,type) ) { /* get attribute name */ while ( *p==' ' || *p=='\t' ) p++; while ( *p && !strchr( "= \t", *p ) && !xml_terminator(p,type)){ newstr_addchar( &aname, *p ); p++; } while ( *p==' ' || *p=='\t' ) p++; if ( *p=='=' ) p++; /* get attribute value */ while ( *p==' ' || *p=='\t' ) p++; if ( *p=='\"' || *p=='\'' ) { if ( *p=='\'' ) quote_character = *p; inquotes=1; p++; } while ( *p && ((!xml_terminator(p,type) && !strchr("= \t", *p ))||inquotes)){ if ( *p==quote_character ) inquotes=0; else newstr_addchar( &aval, *p ); p++; } if ( aname.len ) { if ( !a ) a = xmlattrib_new(); xmlattrib_add( a, aname.data, aval.data ); } newstr_empty( &aname ); newstr_empty( &aval ); } newstr_free( &aname ); newstr_free( &aval ); *ap = a; return p; } /* * xml_processtag * * XML_COMMENT <!-- .... --> * XML_DESCRIPTOR <?.....> * XML_OPEN <A> * XML_CLOSE </A> * XML_OPENCLOSE <A/> */ static char * xml_processtag( char *p, newstr *tag, xml_attrib **attrib, int *type ) { *attrib = NULL; if ( *p=='<' ) p++; if ( *p=='!' ) { while ( *p && *p!='>' ) newstr_addchar( tag, *p++ ); *type = XML_COMMENT; } else if ( *p=='?' ) { *type = XML_DESCRIPTOR; p++; /* skip '?' */ while ( *p && !strchr( " \t", *p ) && !xml_terminator(p,type) ) newstr_addchar( tag, *p++ ); if ( *p==' ' || *p=='\t' ) p = xml_processattrib( p, attrib, type ); } else if ( *p=='/' ) { while ( *p && !strchr( " \t", *p ) && !xml_terminator(p,type) ) newstr_addchar( tag, *p++ ); *type = XML_CLOSE; if ( *p==' ' || *p=='\t' ) p = xml_processattrib( p, attrib, type ); } else { *type = XML_OPEN; while ( *p && !strchr( " \t", *p ) && !xml_terminator(p,type) ) newstr_addchar( tag, *p++ ); if ( *p==' ' || *p=='\t' ) p = xml_processattrib( p, attrib, type ); } while ( *p && *p!='>' ) p++; if ( *p=='>' ) p++; return p; } static void xml_appendnode( xml *onode, xml *nnode ) { if ( !onode->down ) onode->down = nnode; else { xml *p = onode->down; while ( p->next ) p = p->next; p->next = nnode; } } char * xml_tree( char *p, xml *onode ) { newstr tag; xml_attrib *attrib; int type, is_style = 0; newstr_init( &tag ); while ( *p ) { /* retain white space for <style> tags in endnote xml */ if ( onode->tag && onode->tag->data && !strcasecmp(onode->tag->data,"style") ) is_style=1; while ( *p && *p!='<' ) { if ( onode->value->len>0 || is_style || !is_ws( *p ) ) newstr_addchar( onode->value, *p ); p++; } if ( *p=='<' ) { newstr_empty( &tag ); p = xml_processtag( p, &tag, &attrib, &type ); if ( type==XML_OPEN || type==XML_OPENCLOSE || type==XML_DESCRIPTOR ) { xml *nnode = xml_new(); newstr_newstrcpy( nnode->tag, &tag ); nnode->a = attrib; xml_appendnode( onode, nnode ); if ( type==XML_OPEN ) p = xml_tree( p, nnode ); } else if ( type==XML_CLOSE ) { /*check to see if it's closing for this one*/ goto out; /* assume it's right for now */ } } } out: newstr_free( &tag ); return p; } void xml_draw( xml *x, int n ) { int i,j; if ( !x ) return; for ( i=0; i<n; ++i ) printf( " " ); printf("n=%d tag='%s' value='%s'\n", n, x->tag->data, x->value->data ); if ( x->a ) { for ( j=0; j<x->a->value.n; ++j ) { for ( i=0; i<n; ++i ) printf( " " ); printf(" attrib='%s' value='%s'\n", (x->a)->attrib.str[j].data, (x->a)->value.str[j].data ); } } if ( x->down ) xml_draw( x->down, n+1 ); if ( x->next ) xml_draw( x->next, n ); } char * xml_findstart( char *buffer, char *tag ) { newstr starttag; char *p; newstr_init( &starttag ); newstr_addchar( &starttag, '<' ); newstr_strcat( &starttag, tag ); newstr_addchar( &starttag, ' ' ); p = strsearch( buffer, starttag.data ); if ( !p ) { starttag.data[ starttag.len-1 ] = '>'; p = strsearch( buffer, starttag.data ); } newstr_free( &starttag ); return p; } char * xml_findend( char *buffer, char *tag ) { newstr endtag; char *p; newstr_init( &endtag ); newstr_strcpy( &endtag, "</" ); if ( xml_pns ) { newstr_strcat( &endtag, xml_pns ); newstr_addchar( &endtag, ':' ); } newstr_strcat( &endtag, tag ); newstr_addchar( &endtag, '>' ); p = strsearch( buffer, endtag.data ); if ( p && *p ) { if ( *p ) p++; /* skip <random_tag></end> combo */ while ( *p && *(p-1)!='>' ) p++; } newstr_free( &endtag ); return p; } int xml_tagexact( xml *node, char *s ) { newstr tag; int found = 0; if ( xml_pns ) { newstr_init( &tag ); newstr_strcpy( &tag, xml_pns ); newstr_addchar( &tag, ':' ); newstr_strcat( &tag, s ); if ( node->tag->len==tag.len && !strcasecmp( node->tag->data, tag.data ) ) found = 1; newstr_free( &tag ); } else { if ( node->tag->len==strlen( s ) && !strcasecmp( node->tag->data, s ) ) found = 1; } return found; } int xml_hasattrib( xml *node, char *attrib, char *value ) { xml_attrib *na = node->a; int i; if ( na ) { for ( i=0; i<na->attrib.n; ++i ) { if ( !na->attrib.str[i].data || !na->value.str[i].data ) continue; if ( !strcasecmp( na->attrib.str[i].data, attrib ) && !strcasecmp( na->value.str[i].data, value ) ) return 1; } } return 0; } int xml_tag_attrib( xml *node, char *s, char *attrib, char *value ) { if ( !xml_tagexact( node, s ) ) return 0; return xml_hasattrib( node, attrib, value ); } newstr * xml_getattrib( xml *node, char *attrib ) { newstr *ns = NULL; xml_attrib *na = node->a; int i, nattrib; if ( na ) { nattrib = na->attrib.n; for ( i=0; i<nattrib; ++i ) if ( !strcasecmp( na->attrib.str[i].data, attrib ) ) ns = &(na->value.str[i]); } return ns; } int xml_hasdata( xml *node ) { if ( node && node->value && node->value->data ) return 1; return 0; } char * xml_data( xml *node ) { return node->value->data; } int xml_tagwithdata( xml *node, char *tag ) { if ( !xml_hasdata( node ) ) return 0; return xml_tagexact( node, tag ); } �hs-bibutils-5.5/bibutils/list.h���������������������������������������������������������������������0000644�0000000�0000000�00000004651�12445605732�014755� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * list.h * * version: 2014-11-15 * * Copyright (c) Chris Putnam 2004-2014 * * Source code released under the GPL version 2 * */ #ifndef LISTS_H #define LISTS_H #include <stdio.h> #include <stdlib.h> #include <stdarg.h> #include <string.h> #include "newstr.h" #define LIST_ERR (0) #define LIST_ERR_CANNOTOPEN (-1) #define LIST_OK (1) #define LIST_CHR (0) #define LIST_STR (1) typedef struct list { int n, max; newstr *str; unsigned char sorted; } list; extern void lists_init( list *a, ... ); extern void lists_free( list *a, ... ); extern void lists_empty( list *a, ... ); extern void list_init( list *a ); extern void list_free( list *a ); extern void list_empty( list *a ); extern list * list_new( void ); extern void list_delete( list * ); extern list* list_dup( list *a ); extern int list_copy( list *to, list *from ); extern newstr * list_addvp( list *a, unsigned char mode, void *vp ); extern newstr * list_addc( list *a, const char *value ); extern newstr * list_add( list *a, newstr *value ); extern int list_addvp_all( list *a, unsigned char mode, ... ); extern int list_addc_all( list *a, ... ); extern int list_add_all( list *a, ... ); extern newstr * list_addvp_unique( list *a, unsigned char mode, void *vp ); extern newstr * list_addc_unique( list *a, const char *value ); extern newstr * list_add_unique( list *a, newstr *value ); extern int list_append( list *a, list *toadd ); extern int list_append_unique( list *a, list *toadd ); extern int list_remove( list *a, int n ); extern newstr* list_get( list *a, int n ); extern char* list_getc( list *a, int n ); extern newstr* list_set( list *a, int n, newstr *s ); extern newstr* list_setc( list *a, int n, const char *s ); extern void list_sort( list *a ); extern void list_swap( list *a, int n1, int n2 ); extern int list_find( list *a, const char *searchstr ); extern int list_findnocase( list *a, const char *searchstr ); extern int list_match_entry( list *a, int n, char *s ); extern void list_trimend( list *a, int n ); extern int list_fill( list *a, const char *filename, unsigned char skip_blank_lines ); extern int list_fillfp( list *a, FILE *fp, unsigned char skip_blank_lines ); extern int list_tokenize( list *tokens, newstr *in, const char *delim, int merge_delim ); extern int list_tokenizec( list *tokens, char *p, const char *delim, int merge_delim ); #endif ���������������������������������������������������������������������������������������hs-bibutils-5.5/bibutils/bibcore.c������������������������������������������������������������������0000644�0000000�0000000�00000060047�12445605732�015403� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * bibcore.c * * Copyright (c) Chris Putnam 2005-2014 * * Source code released under the GPL version 2 * */ #include <stdio.h> #include <stdlib.h> #include "bibutils.h" /* internal includes */ #include "reftypes.h" #include "charsets.h" #include "newstr_conv.h" #include "is_ws.h" /* illegal modes to pass in, but use internally for consistency */ #define BIBL_INTERNALIN (BIBL_LASTIN+1) #define BIBL_INTERNALOUT (BIBL_LASTOUT+1) #define debug_set( p ) ( p->verbose > 1 ) #define verbose_set( p ) ( p->verbose ) static void report_params( FILE *fp, const char *f, param *p ) { fprintf( fp, "-------------------params start for %s\n", f ); fprintf( fp, "\tprogname='%s'\n\n", p->progname ); fprintf( fp, "\treadformat=%d", p->readformat ); switch ( p->readformat ) { case BIBL_INTERNALIN: fprintf( fp, " (BIBL_INTERNALIN)\n" ); break; case BIBL_MODSIN: fprintf( fp, " (BIBL_MODSIN)\n" ); break; case BIBL_BIBTEXIN: fprintf( fp, " (BIBL_BIBTEXIN)\n" ); break; case BIBL_RISIN: fprintf( fp, " (BIBL_RISIN)\n" ); break; case BIBL_ENDNOTEIN: fprintf( fp, " (BIBL_ENDNOTEIN)\n" ); break; case BIBL_COPACIN: fprintf( fp, " (BIBL_COPACIN)\n" ); break; case BIBL_ISIIN: fprintf( fp, " (BIBL_ISIIN)\n" ); break; case BIBL_MEDLINEIN: fprintf( fp, " (BIBL_MEDLINEIN)\n" ); break; case BIBL_ENDNOTEXMLIN: fprintf( fp, " (BIBL_ENDNOTEXMLIN)\n" ); break; case BIBL_BIBLATEXIN: fprintf( fp, " (BIBL_BIBLATEXIN)\n" ); break; case BIBL_EBIIN: fprintf( fp, " (BIBL_EBIIN)\n" ); break; case BIBL_WORDIN: fprintf( fp, " (BIBL_WORDIN)\n" ); break; default: fprintf( fp, " (Illegal)\n" ); break; } fprintf( fp, "\tcharsetin=%d\n", p->charsetin ); /* fprintf( fp, "\tcharsetin=%d (%s)\n", p->charsetin, get_charsetname( p->charsetin ) );*/ fprintf( fp, "\tcharsetin_src=%d", p->charsetin_src ); switch ( p->charsetin_src ) { case 0: fprintf( fp, " (BIBL_SRC_DEFAULT)\n" ); break; case 1: fprintf( fp, " (BIBL_SRC_FILE)\n" ); break; case 2: fprintf( fp, " (BIBL_SRC_USER)\n" ); break; default: fprintf( fp, " (Illegal value!)\n" ); break; } fprintf( fp, "\tutf8in=%d\n", p->utf8in ); fprintf( fp, "\tlatexin=%d\n", p->latexin ); fprintf( fp, "\txmlin=%d\n\n", p->xmlin ); fprintf( fp, "\twriteformat=%d", p->writeformat ); switch ( p->writeformat ) { case BIBL_INTERNALOUT: fprintf( fp, " (BIBL_INTERNALOUT)\n" ); break; case BIBL_MODSOUT: fprintf( fp, " (BIBL_MODSOUT)\n" ); break; case BIBL_BIBTEXOUT: fprintf( fp, " (BIBL_BIBTEXOUT)\n" ); break; case BIBL_RISOUT: fprintf( fp, " (BIBL_RISOUT)\n" ); break; case BIBL_ENDNOTEOUT: fprintf( fp, " (BIBL_ENDNOTEOUT)\n" ); break; case BIBL_ISIOUT: fprintf( fp, " (BIBL_ISIOUT)\n" ); break; case BIBL_WORD2007OUT: fprintf( fp, " (BIBL_WORD2007OUT)\n" ); break; case BIBL_ADSABSOUT: fprintf( fp, " (BIBL_ADSABSOUT)\n" ); break; default: fprintf( fp, " (Illegal)\n" ); break; } /* fprintf( fp, "\tcharsetout=%d (%s)\n", p->charsetout, get_charsetname( p->charsetout ) );*/ fprintf( fp, "\tcharsetout=%d\n", p->charsetout ); fprintf( fp, "\tcharsetout_src=%d", p->charsetout_src ); switch ( p->charsetout_src ) { case 0: fprintf( fp, " (BIBL_SRC_DEFAULT)\n" ); break; case 1: fprintf( fp, " (BIBL_SRC_FILE)\n" ); break; case 2: fprintf( fp, " (BIBL_SRC_USER)\n" ); break; default: fprintf( fp, " (Illegal value!)\n" ); break; } fprintf( fp, "\tutf8out=%d\n", p->utf8out ); fprintf( fp, "\tutf8bom=%d\n", p->utf8bom ); fprintf( fp, "\tlatexout=%d\n", p->latexout ); fprintf( fp, "\txmlout=%d\n", p->xmlout ); fprintf( fp, "-------------------params end for %s\n", f ); fflush( fp ); } /* bibl_duplicateparams() * * Returns status of BIBL_OK or BIBL_ERR_MEMERR */ static int bibl_duplicateparams( param *np, param *op ) { int ok; list_init( &(np->asis) ); list_init( &(np->corps) ); ok = list_copy( &(np->asis), &(op->asis ) ); if ( !ok ) return BIBL_ERR_MEMERR; ok = list_copy( &(np->corps), &(op->corps ) ); if ( !ok ) return BIBL_ERR_MEMERR; if ( !op->progname ) np->progname = NULL; else { np->progname = strdup( op->progname ); if ( !np->progname ) return BIBL_ERR_MEMERR; } np->readformat = op->readformat; np->writeformat = op->writeformat; np->charsetin = op->charsetin; np->charsetin_src = op->charsetin_src; np->utf8in = op->utf8in; np->latexin = op->latexin; np->xmlin = op->xmlin; np->charsetout = op->charsetout; np->charsetout_src = op->charsetout_src; np->utf8out = op->utf8out; np->utf8bom = op->utf8bom; np->latexout = op->latexout; np->xmlout = op->xmlout; np->nosplittitle = op->nosplittitle; np->verbose = op->verbose; np->format_opts = op->format_opts; np->addcount = op->addcount; np->output_raw = op->output_raw; np->singlerefperfile = op->singlerefperfile; np->readf = op->readf; np->processf = op->processf; np->cleanf = op->cleanf; np->typef = op->typef; np->convertf = op->convertf; np->headerf = op->headerf; np->footerf = op->footerf; np->writef = op->writef; np->all = op->all; np->nall = op->nall; return BIBL_OK; } /* bibl_setreadparams() * * Returns status of BIBL_OK or BIBL_ERR_MEMERR */ static int bibl_setreadparams( param *np, param *op ) { int status; status = bibl_duplicateparams( np, op ); if ( status == BIBL_OK ) { np->utf8out = 1; np->charsetout = BIBL_CHARSET_UNICODE; np->charsetout_src = BIBL_SRC_DEFAULT; np->xmlout = BIBL_XMLOUT_FALSE; np->latexout = 0; np->writeformat = BIBL_INTERNALOUT; } return status; } /* bibl_setwriteparams() * * Returns status of BIBL_OK or BIBL_ERR_MEMERR */ static int bibl_setwriteparams( param *np, param *op ) { int status; status = bibl_duplicateparams( np, op ); if ( status == BIBL_OK ) { np->xmlin = 0; np->latexin = 0; np->utf8in = 1; np->charsetin = BIBL_CHARSET_UNICODE; np->charsetin_src = BIBL_SRC_DEFAULT; np->readformat = BIBL_INTERNALIN; } return status; } void bibl_freeparams( param *p ) { if ( p ) { list_free( &(p->asis) ); list_free( &(p->corps) ); if ( p->progname ) free( p->progname ); } } int bibl_readasis( param *p, char *f ) { int status; if ( !p ) return BIBL_ERR_BADINPUT; if ( !f ) return BIBL_ERR_BADINPUT; status = list_fill( &(p->asis), f, 1 ); if ( status == LIST_ERR_CANNOTOPEN ) return BIBL_ERR_CANTOPEN; else if ( status == 0 ) return BIBL_ERR_MEMERR; return BIBL_OK; } int bibl_readcorps( param *p, char *f ) { int status; if ( !p ) return BIBL_ERR_BADINPUT; if ( !f ) return BIBL_ERR_BADINPUT; status = list_fill( &(p->corps), f, 1 ); if ( status == LIST_ERR_CANNOTOPEN ) return BIBL_ERR_CANTOPEN; else if ( status == 0 ) return BIBL_ERR_MEMERR; return BIBL_OK; } /* bibl_addtoasis() * * Returns BIBL_OK or BIBL_ERR_MEMERR */ int bibl_addtoasis( param *p, char *d ) { newstr *s; if ( !p ) return BIBL_ERR_BADINPUT; if ( !d ) return BIBL_ERR_BADINPUT; s = list_addc( &(p->asis), d ); return ( s==NULL )? BIBL_ERR_MEMERR : BIBL_OK; } /* bibl_addtocorps() * * Returns BIBL_OK or BIBL_ERR_MEMERR */ int bibl_addtocorps( param *p, char *d ) { newstr *s; if ( !p ) return BIBL_ERR_BADINPUT; if ( !d ) return BIBL_ERR_BADINPUT; s = list_addc( &(p->corps), d ); return ( s==NULL )? BIBL_ERR_MEMERR : BIBL_OK; } void bibl_reporterr( int err ) { fprintf( stderr, "Bibutils: " ); switch( err ) { case BIBL_OK: fprintf( stderr, "No error." ); break; case BIBL_ERR_BADINPUT: fprintf( stderr, "Bad input." ); break; case BIBL_ERR_MEMERR: fprintf( stderr, "Memory error." ); break; case BIBL_ERR_CANTOPEN: fprintf( stderr, "Can't open." ); break; default: fprintf( stderr, "Cannot identify error code."); break; } fprintf( stderr, "\n" ); } static int bibl_illegalinmode( int mode ) { if ( mode < BIBL_FIRSTIN || mode > BIBL_LASTIN ) return 1; else return 0; } static int bibl_illegaloutmode( int mode ) { if ( mode < BIBL_FIRSTOUT || mode > BIBL_LASTOUT ) return 1; else return 0; } static void bibl_verbose2( fields *f, char *filename, long nrefs ) { int i, n; n = fields_num( f ); fprintf( stderr, "======== %s %ld : converted\n", filename, nrefs ); for ( i=0; i<n; ++i ) { fprintf( stderr, "'%s'='%s' level=%d\n", (char*) fields_tag( f, i, FIELDS_CHRP_NOUSE ), (char*) fields_value( f, i, FIELDS_CHRP_NOUSE ), fields_level( f, i ) ); } fprintf( stderr, "\n" ); fflush( stderr ); } #if 0 static void bibl_verbose1( fields *f, fields *orig, char *filename, long nrefs ) { int i, n; n = fields_num( orig ); fprintf( stderr, "======== %s %ld : processed\n", filename, nrefs ); for ( i=0; i<n; ++i ) { fprintf( stderr, "'%s'='%s' level=%d\n", (char*) fields_tag( orig, i, FIELDS_CHRP_NOUSE ), (char*) fields_value( orig, i, FIELDS_CHRP_NOUSE ), fields_level( orig, i ) ); } if ( f ) bibl_verbose2( f, filename, nrefs ); } #endif static void bibl_verbose0( bibl *bin ) { int i; for ( i=0; i<bin->nrefs; ++i ) bibl_verbose2( bin->ref[i], "", i+1 ); } /* extract_tag_value * * Extract the tag and the value for ALWAYS/DEFAULT * entries like: "NGENRE|Masters thesis" * * tag = "NGENRE" * value = "Masters thesis" */ static int extract_tag_value( newstr *tag, newstr *value, char *p ) { newstr_empty( tag ); while ( p && *p && *p!='|' ) { newstr_addchar( tag, *p ); p++; } if ( newstr_memerr( tag ) ) return BIBL_ERR_MEMERR; if ( p && *p=='|' ) p++; newstr_empty( value ); while ( p && *p ) { newstr_addchar( value, *p ); p++; } if ( newstr_memerr( tag ) ) return BIBL_ERR_MEMERR; return BIBL_OK; } /* process_defaultadd() * * Add tag/value pairs that have "DEFAULT" processing * unless a tag/value pair with the same tag has already * been adding during reference processing. */ static int process_defaultadd( fields *f, int reftype, param *r ) { int i, n, process, level, status, ret = BIBL_OK; newstr tag, value; char *p; newstrs_init( &tag, &value, NULL ); for ( i=0; i<r->all[reftype].ntags; ++i ) { process = ((r->all[reftype]).tags[i]).processingtype; if ( process!=DEFAULT ) continue; level = ((r->all[reftype]).tags[i]).level; p = ((r->all[reftype]).tags[i]).newstr; status = extract_tag_value( &tag, &value, p ); if ( status!=BIBL_OK ) { ret = status; goto out; } n = fields_find( f, tag.data, level ); if ( n==-1 ) { status = fields_add( f, tag.data, value.data, level ); if ( status!=FIELDS_OK ) { ret = BIBL_ERR_MEMERR; goto out; } } } out: newstrs_free( &tag, &value, NULL ); return ret; } /* process_alwaysadd() * * Add tag/value pair to reference from the ALWAYS * processing type without exception (the difference from * DEFAULT processing). */ static int process_alwaysadd( fields *f, int reftype, param *r ) { int i, process, level, status, ret = BIBL_OK; newstr tag, value; char *p; newstrs_init( &tag, &value, NULL ); for ( i=0; i<r->all[reftype].ntags; ++i ) { process = ((r->all[reftype]).tags[i]).processingtype; if ( process!=ALWAYS ) continue; level = ((r->all[reftype]).tags[i]).level; p = ((r->all[reftype]).tags[i]).newstr; status = extract_tag_value( &tag, &value, p ); if ( status!=BIBL_OK ) { ret = status; goto out; } status = fields_add( f, tag.data, value.data, level ); if ( status!=FIELDS_OK ) { ret = BIBL_ERR_MEMERR; goto out; } } out: newstrs_free( &tag, &value, NULL ); return ret; } static int read_ref( FILE *fp, bibl *bin, char *filename, param *p ) { int nrefs = 0, bufpos = 0, ok, ret=BIBL_OK, fcharset;/* = CHARSET_UNKNOWN;*/ newstr reference, line; char buf[256]=""; fields *ref; newstr_init( &reference ); newstr_init( &line ); while ( p->readf( fp, buf, sizeof(buf), &bufpos, &line, &reference, &fcharset ) ) { if ( reference.len==0 ) continue; ref = fields_new(); if ( !ref ) { ret = BIBL_ERR_MEMERR; bibl_free( bin ); goto out; } if ( p->processf( ref, reference.data, filename, nrefs+1 )){ ok = bibl_addref( bin, ref ); if ( !ok ) { ret = BIBL_ERR_MEMERR; bibl_free( bin ); fields_free( ref ); free( ref ); goto out; } } else { fields_free( ref ); free( ref ); } newstr_empty( &reference ); if ( fcharset!=CHARSET_UNKNOWN ) { /* charset from file takes priority over default, but * not user-specified */ if ( p->charsetin_src!=BIBL_SRC_USER ) { p->charsetin_src = BIBL_SRC_FILE; p->charsetin = fcharset; if ( fcharset!=CHARSET_UNICODE ) p->utf8in = 0; } } } if ( p->charsetin==CHARSET_UNICODE ) p->utf8in = 1; out: newstr_free( &line ); newstr_free( &reference ); return ret; } /* Don't manipulate latex for URL's and the like */ static int bibl_notexify( char *tag ) { char *protected[] = { "DOI", "URL", "REFNUM", "FILEATTACH" }; int i, nprotected = sizeof( protected ) / sizeof( protected[0] ); for ( i=0; i<nprotected; ++i ) if ( !strcasecmp( tag, protected[i] ) ) return 1; return 0; } /* bibl_fixcharsetdata() * * returns BIBL_OK or BIBL_ERR_MEMERR */ static int bibl_fixcharsetdata( fields *ref, param *p ) { newstr *data; char *tag; long i, n; int ok; n = fields_num( ref ); for ( i=0; i<n; ++i ) { tag = fields_tag( ref, i, FIELDS_CHRP_NOUSE ); data = fields_value( ref, i, FIELDS_STRP_NOUSE ); if ( bibl_notexify( tag ) ) { ok = newstr_convert( data, p->charsetin, 0, p->utf8in, p->xmlin, p->charsetout, 0, p->utf8out, p->xmlout ); } else { ok = newstr_convert( data, p->charsetin, p->latexin, p->utf8in, p->xmlin, p->charsetout, p->latexout, p->utf8out, p->xmlout ); } if ( !ok ) return BIBL_ERR_MEMERR; } return BIBL_OK; } /* bibl_fixcharsets() * * returns BIBL_OK or BIBL_ERR_MEMERR */ static int bibl_fixcharsets( bibl *b, param *p ) { int status = BIBL_OK; long i; for ( i=0; i<b->nrefs && status==BIBL_OK; ++i ) status = bibl_fixcharsetdata( b->ref[i], p ); return status; } static int build_refnum( fields *f, long nrefs, int *n ) { char *year, *author, *p, num[512]; int status, ret = BIBL_OK; newstr refnum; *n = -1; newstr_init( &refnum ); year = fields_findv( f, LEVEL_MAIN, FIELDS_CHRP_NOUSE, "YEAR" ); if ( !year ) year = fields_findv_firstof( f, LEVEL_ANY, FIELDS_CHRP_NOUSE, "YEAR", "PARTYEAR", NULL ); author = fields_findv( f, LEVEL_MAIN, FIELDS_CHRP_NOUSE, "AUTHOR" ); if ( !author ) author = fields_findv_firstof( f, LEVEL_ANY, FIELDS_CHRP_NOUSE, "AUTHOR", "AUTHOR:CORP", "AUTHOR:ASIS", NULL ); if ( year && author ) { p = author; while ( *p && *p!='|' ) newstr_addchar( &refnum, *p++ ); p = year; while ( *p && *p!=' ' && *p!='\t' ) newstr_addchar( &refnum, *p++ ); } else { sprintf( num, "%ld", nrefs ); newstr_mergestrs( &refnum, "ref", num, NULL ); } if ( newstr_memerr( &refnum ) ) { ret = BIBL_ERR_MEMERR; goto out; } status = fields_add( f, "REFNUM", refnum.data, 0 ); if ( status!=FIELDS_OK ) ret = BIBL_ERR_MEMERR; else *n = fields_find( f, "REFNUM", 0 ); out: newstr_free( &refnum ); return ret; } static int bibl_checkrefid( bibl *b, param *p ) { char buf[512]; int n, status; fields *ref; long i; for ( i=0; i<b->nrefs; ++i ) { ref = b->ref[i]; n = fields_find( ref, "REFNUM", 0 ); if ( n==-1 ) { status = build_refnum( ref, i+1, &n ); if ( status!=BIBL_OK ) return status; } if ( p->addcount ) { sprintf( buf, "_%ld", i+1 ); newstr_strcat( &(ref->data[n]), buf ); if ( newstr_memerr( &(ref->data[n]) ) ) return BIBL_ERR_MEMERR; } } return BIBL_OK; } static int generate_citekey( fields *f, int nref ) { int n1, n2, status, ret; char *p, buf[100]; newstr citekey; newstr_init( &citekey ); n1 = fields_find( f, "AUTHOR", 0 ); if ( n1==-1 ) n1 = fields_find( f, "AUTHOR", -1 ); n2 = fields_find( f, "YEAR", 0 ); if ( n2==-1 ) n2 = fields_find( f, "YEAR", -1 ); if ( n2==-1 ) n2 = fields_find( f, "PARTYEAR", 0 ); if ( n2==-1 ) n2 = fields_find( f, "PARTYEAR", -1 ); if ( n1!=-1 && n2!=-1 ) { p = f->data[n1].data; while ( p && *p && *p!='|' ) { if ( !is_ws( *p ) ) newstr_addchar( &citekey, *p ); p++; } p = f->data[n2].data; while ( p && *p ) { if ( !is_ws( *p ) ) newstr_addchar( &citekey, *p ); p++; } if ( newstr_memerr( &citekey ) ) { ret = -1; goto out; } status = fields_add( f, "REFNUM", citekey.data, 0 ); if ( status!=FIELDS_OK ) { ret = -1; goto out; } } else { sprintf( buf, "ref%d\n", nref ); newstr_strcpy( &citekey, buf ); } ret = fields_find( f, "REFNUM", -1 ); out: newstr_free( &citekey ); return ret; } static int resolve_citekeys( bibl *b, list *citekeys, int *dup ) { const char abc[]="abcdefghijklmnopqrstuvwxyz"; int nsame, ntmp, n, i, j, status = BIBL_OK; newstr tmp; newstr_init( &tmp ); for ( i=0; i<citekeys->n; ++i ) { if ( dup[i]==-1 ) continue; nsame = 0; for ( j=i; j<citekeys->n; ++j ) { if ( dup[j]!=i ) continue; newstr_newstrcpy( &tmp, &(citekeys->str[j]) ); if ( newstr_memerr( &tmp ) ) { status = BIBL_ERR_MEMERR; goto out; } ntmp = nsame; while ( ntmp >= 26 ) { newstr_addchar( &tmp, 'a' ); ntmp -= 26; } if ( ntmp<26 && ntmp>=0 ) newstr_addchar( &tmp, abc[ntmp] ); if ( newstr_memerr( &tmp ) ) { status = BIBL_ERR_MEMERR; goto out; } nsame++; dup[j] = -1; n = fields_find( b->ref[j], "REFNUM", -1 ); if ( n!=-1 ) { newstr_newstrcpy(&((b->ref[j])->data[n]),&tmp); if ( newstr_memerr( &((b->ref[j])->data[n]) ) ) { status = BIBL_ERR_MEMERR; goto out; } } } } out: newstr_free( &tmp ); return status; } static int get_citekeys( bibl *b, list *citekeys ) { newstr *s; fields *f; int i, n; for ( i=0; i<b->nrefs; ++i ) { f = b->ref[i]; n = fields_find( f, "REFNUM", -1 ); if ( n==-1 ) n = generate_citekey( f, i ); if ( n!=-1 && f->data[n].data ) { s = list_add( citekeys, &(f->data[n]) ); if ( !s ) return BIBL_ERR_MEMERR; } else { s = list_addc( citekeys, "" ); if ( !s ) return BIBL_ERR_MEMERR; } } return BIBL_OK; } static int dup_citekeys( bibl *b, list *citekeys ) { int i, j, status = BIBL_OK, *dup, ndup=0; dup = ( int * ) malloc( sizeof( int ) * citekeys->n ); if ( !dup ) return BIBL_ERR_MEMERR; for ( i=0; i<citekeys->n; ++i ) dup[i] = -1; for ( i=0; i<citekeys->n-1; ++i ) { if ( dup[i]!=-1 ) continue; for ( j=i+1; j<citekeys->n; ++j ) { if ( !strcmp( citekeys->str[i].data, citekeys->str[j].data ) ) { dup[i] = i; dup[j] = i; ndup++; } } } if ( ndup ) status = resolve_citekeys( b, citekeys, dup ); free( dup ); return status; } static int uniqueify_citekeys( bibl *b ) { list citekeys; int status; list_init( &citekeys ); status = get_citekeys( b, &citekeys ); if ( status!=BIBL_OK ) goto out; status = dup_citekeys( b, &citekeys ); out: list_free( &citekeys ); return status; } static int clean_ref( bibl *bin, param *p ) { if ( p->cleanf ) return p->cleanf( bin, p ); else return BIBL_OK; } static int convert_ref( bibl *bin, char *fname, bibl *bout, param *p ) { fields *rin, *rout; int reftype = 0, ok, status; long i; for ( i=0; i<bin->nrefs; ++i ) { rin = bin->ref[i]; rout = fields_new(); if ( !rout ) return BIBL_ERR_MEMERR; if ( p->typef ) reftype = p->typef( rin, fname, i+1, p, p->all, p->nall ); status = p->convertf( rin, rout, reftype, p, p->all, p->nall ); if ( status!=BIBL_OK ) return status; if ( p->all ) { status = process_alwaysadd( rout, reftype, p ); if ( status!=BIBL_OK ) return status; status = process_defaultadd( rout, reftype, p ); if ( status!=BIBL_OK ) return status; } ok = bibl_addref( bout, rout ); if ( !ok ) return BIBL_ERR_MEMERR; } status = uniqueify_citekeys( bout ); return status; } int bibl_read( bibl *b, FILE *fp, char *filename, param *p ) { int ok, status; param lp; bibl bin; if ( !b ) return BIBL_ERR_BADINPUT; if ( !fp ) return BIBL_ERR_BADINPUT; if ( !p ) return BIBL_ERR_BADINPUT; if ( bibl_illegalinmode( p->readformat ) ) return BIBL_ERR_BADINPUT; status = bibl_setreadparams( &lp, p ); if ( status!=BIBL_OK ) return status; bibl_init( &bin ); status = read_ref( fp, &bin, filename, &lp ); if ( status!=BIBL_OK ) return status; if ( debug_set( p ) ) { fflush( stdout ); report_params( stderr, "bibl_read", &lp ); fprintf( stderr, "-------------------raw_input start for bibl_read\n"); bibl_verbose0( &bin ); fprintf( stderr, "-------------------raw_input end for bibl_read\n" ); fflush( stderr ); } if ( !lp.output_raw || ( lp.output_raw & BIBL_RAW_WITHCHARCONVERT ) ) { status = bibl_fixcharsets( &bin, &lp ); if ( status!=BIBL_OK ) return status; if ( debug_set( p ) ) { fprintf( stderr, "-------------------post_fixcharsets start for bibl_read\n"); bibl_verbose0( &bin ); fprintf( stderr, "-------------------post_fixcharsets end for bibl_read\n" ); fflush( stderr ); } } if ( !lp.output_raw ) { status = clean_ref( &bin, &lp ); if ( status!=BIBL_OK ) return status; if ( debug_set( p ) ) { fprintf( stderr, "-------------------post_clean_ref start for bibl_read\n"); bibl_verbose0( &bin ); fprintf( stderr, "-------------------post_clean_ref end for bibl_read\n" ); fflush( stderr ); } ok = convert_ref( &bin, filename, b, &lp ); if ( ok!=BIBL_OK ) return ok; if ( debug_set( p ) ) { fprintf( stderr, "-------------------post_convert_ref start for bibl_read\n"); bibl_verbose0( &bin ); fprintf( stderr, "-------------------post_convert_ref end for bibl_read\n" ); fflush( stderr ); } } else { if ( debug_set( p ) ) { fprintf( stderr, "-------------------here1 start for bibl_read\n"); bibl_verbose0( &bin ); fprintf( stderr, "-------------------here1 end for bibl_read\n" ); fflush( stderr ); } ok = bibl_copy( b, &bin ); if ( !ok ) return BIBL_ERR_MEMERR; } if ( !lp.output_raw || ( lp.output_raw & BIBL_RAW_WITHMAKEREFID ) ) bibl_checkrefid( b, &lp ); bibl_free( &bin ); return BIBL_OK; } static FILE * singlerefname( fields *reffields, long nref, int mode ) { char outfile[2048]; char suffix[5] = "xml"; FILE *fp; long count; int found; if ( mode==BIBL_ADSABSOUT ) strcpy( suffix, "ads" ); else if ( mode==BIBL_BIBTEXOUT ) strcpy( suffix, "bib" ); else if ( mode==BIBL_ENDNOTEOUT ) strcpy( suffix, "end" ); else if ( mode==BIBL_ISIOUT ) strcpy( suffix, "isi" ); else if ( mode==BIBL_MODSOUT ) strcpy( suffix, "xml" ); else if ( mode==BIBL_RISOUT ) strcpy( suffix, "ris" ); else if ( mode==BIBL_WORD2007OUT ) strcpy( suffix, "xml" ); found = fields_find( reffields, "REFNUM", 0 ); /* find new filename based on reference */ if ( found!=-1 ) { sprintf( outfile,"%s.%s",reffields->data[found].data, suffix ); } else sprintf( outfile,"%ld.%s",nref, suffix ); count = 0; fp = fopen( outfile, "r" ); while ( fp ) { fclose(fp); count++; if ( count==60000 ) return NULL; if ( found!=-1 ) sprintf( outfile, "%s_%ld.%s", reffields->data[found].data, count, suffix ); else sprintf( outfile,"%ld_%ld.%s",nref, count, suffix ); fp = fopen( outfile, "r" ); } return fopen( outfile, "w" ); } static int bibl_writeeachfp( FILE *fp, bibl *b, param *p ) { long i; for ( i=0; i<b->nrefs; ++i ) { fp = singlerefname( b->ref[i], i, p->writeformat ); if ( !fp ) return BIBL_ERR_CANTOPEN; if ( p->headerf ) p->headerf( fp, p ); p->writef( b->ref[i], fp, p, i ); if ( p->footerf ) p->footerf( fp ); fclose( fp ); } return BIBL_OK; } static int bibl_writefp( FILE *fp, bibl *b, param *p ) { long i; if ( p->headerf ) p->headerf( fp, p ); for ( i=0; i<b->nrefs; ++i ) p->writef( b->ref[i], fp, p, i ); if ( p->footerf ) p->footerf( fp ); return BIBL_OK; } int bibl_write( bibl *b, FILE *fp, param *p ) { int status; param lp; if ( !b ) return BIBL_ERR_BADINPUT; if ( !p ) return BIBL_ERR_BADINPUT; if ( bibl_illegaloutmode( p->writeformat ) ) return BIBL_ERR_BADINPUT; if ( !fp && ( !p || !p->singlerefperfile ) ) return BIBL_ERR_BADINPUT; status = bibl_setwriteparams( &lp, p ); if ( status!=BIBL_OK ) return status; status = bibl_fixcharsets( b, &lp ); if ( status!=BIBL_OK ) return status; if ( debug_set( p ) ) report_params( stderr, "bibl_write", &lp ); if ( p->singlerefperfile ) status = bibl_writeeachfp( fp, b, &lp ); else status = bibl_writefp( fp, b, &lp ); return status; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hs-bibutils-5.5/bibutils/bibtexout.c����������������������������������������������������������������0000644�0000000�0000000�00000044260�12445605732�016002� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * bibtexout.c * * Copyright (c) Chris Putnam 2003-2014 * * Program and source code released under the GPL version 2 * */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include "newstr.h" #include "strsearch.h" #include "utf8.h" #include "xml.h" #include "fields.h" #include "name.h" #include "bibl.h" #include "doi.h" #include "bibtexout.h" void bibtexout_initparams( param *p, const char *progname ) { p->writeformat = BIBL_BIBTEXOUT; p->format_opts = 0; p->charsetout = BIBL_CHARSET_DEFAULT; p->charsetout_src = BIBL_SRC_DEFAULT; p->latexout = 1; p->utf8out = BIBL_CHARSET_UTF8_DEFAULT; p->utf8bom = BIBL_CHARSET_BOM_DEFAULT; p->xmlout = BIBL_XMLOUT_FALSE; p->nosplittitle = 0; p->verbose = 0; p->addcount = 0; p->singlerefperfile = 0; p->headerf = bibtexout_writeheader; p->footerf = NULL; p->writef = bibtexout_write; if ( !p->progname && progname ) p->progname = strdup( progname ); } enum { TYPE_UNKNOWN = 0, TYPE_ARTICLE, TYPE_INBOOK, TYPE_INPROCEEDINGS, TYPE_PROCEEDINGS, TYPE_INCOLLECTION, TYPE_COLLECTION, TYPE_BOOK, TYPE_PHDTHESIS, TYPE_MASTERSTHESIS, TYPE_REPORT, TYPE_MANUAL, TYPE_UNPUBLISHED, TYPE_ELECTRONIC, TYPE_MISC }; static void output_citekey( FILE *fp, fields *info, unsigned long refnum, int format_opts ) { int n = fields_find( info, "REFNUM", -1 ); char *p; if ( n!=-1 ) { p = info->data[n].data; while ( p && *p && *p!='|' ) { if ( format_opts & BIBOUT_STRICTKEY ) { if ( isdigit((unsigned char)*p) || (*p>='A' && *p<='Z') || (*p>='a' && *p<='z' ) ) fprintf( fp, "%c", *p ); } else { if ( *p!=' ' && *p!='\t' ) { fprintf( fp, "%c", *p ); } } p++; } } } static int bibtexout_type( fields *info, char *filename, int refnum, param *p ) { char *genre; int type = TYPE_UNKNOWN, i, maxlevel, n, level; /* determine bibliography type */ for ( i=0; i<info->n; ++i ) { if ( strcasecmp( info->tag[i].data, "GENRE" ) && strcasecmp( info->tag[i].data, "NGENRE" ) ) continue; genre = info->data[i].data; level = info->level[i]; if ( !strcasecmp( genre, "periodical" ) || !strcasecmp( genre, "academic journal" ) || !strcasecmp( genre, "magazine" ) || !strcasecmp( genre, "newspaper" ) || !strcasecmp( genre, "article" ) ) type = TYPE_ARTICLE; else if ( !strcasecmp( genre, "instruction" ) ) type = TYPE_MANUAL; else if ( !strcasecmp( genre, "unpublished" ) ) type = TYPE_UNPUBLISHED; else if ( !strcasecmp( genre, "conference publication" ) ) { if ( level==0 ) type=TYPE_PROCEEDINGS; else type = TYPE_INPROCEEDINGS; } else if ( !strcasecmp( genre, "collection" ) ) { if ( level==0 ) type=TYPE_COLLECTION; else type = TYPE_INCOLLECTION; } else if ( !strcasecmp( genre, "report" ) ) type = TYPE_REPORT; else if ( !strcasecmp( genre, "book" ) ) { if ( level==0 ) type=TYPE_BOOK; else type=TYPE_INBOOK; } else if ( !strcasecmp( genre, "thesis" ) ) { if ( type==TYPE_UNKNOWN ) type=TYPE_PHDTHESIS; } else if ( !strcasecmp( genre, "Ph.D. thesis" ) ) type = TYPE_PHDTHESIS; else if ( !strcasecmp( genre, "Masters thesis" ) ) type = TYPE_MASTERSTHESIS; else if ( !strcasecmp( genre, "electronic" ) ) type = TYPE_ELECTRONIC; } if ( type==TYPE_UNKNOWN ) { for ( i=0; i<info->n; ++i ) { if ( strcasecmp( info->tag[i].data, "ISSUANCE" ) ) continue; if ( !strcasecmp( info->data[i].data, "monographic" ) ) { if ( info->level[i]==0 ) type = TYPE_BOOK; else if ( info->level[i]==1 ) type=TYPE_INBOOK; } } } /* default to BOOK type */ if ( type==TYPE_UNKNOWN ) { maxlevel = fields_maxlevel( info ); if ( maxlevel > 0 ) type = TYPE_INBOOK; else { if ( p->progname ) fprintf( stderr, "%s: ", p->progname ); fprintf( stderr, "Cannot identify TYPE " "in reference %d ", refnum+1 ); n = fields_find( info, "REFNUM", -1 ); if ( n!=-1 ) fprintf( stderr, " %s", info->data[n].data); fprintf( stderr, " (defaulting to @Misc)\n" ); type = TYPE_MISC; } } return type; } static void output_type( FILE *fp, int type, int format_opts ) { typedef struct { int bib_type; char *type_name; } typenames; typenames types[] = { { TYPE_ARTICLE, "Article" }, { TYPE_INBOOK, "Inbook" }, { TYPE_PROCEEDINGS, "Proceedings" }, { TYPE_INPROCEEDINGS, "InProceedings" }, { TYPE_BOOK, "Book" }, { TYPE_PHDTHESIS, "PhdThesis" }, { TYPE_MASTERSTHESIS, "MastersThesis" }, { TYPE_REPORT, "TechReport" }, { TYPE_MANUAL, "Manual" }, { TYPE_COLLECTION, "Collection" }, { TYPE_INCOLLECTION, "InCollection" }, { TYPE_UNPUBLISHED, "Unpublished" }, { TYPE_ELECTRONIC, "Electronic" }, { TYPE_MISC, "Misc" } }; int i, len, ntypes = sizeof( types ) / sizeof( types[0] ); char *s = NULL; for ( i=0; i<ntypes; ++i ) { if ( types[i].bib_type == type ) { s = types[i].type_name; break; } } if ( !s ) s = types[ntypes-1].type_name; /* default to TYPE_MISC */ if ( !(format_opts & BIBOUT_UPPERCASE ) ) fprintf( fp, "@%s{", s ); else { len = strlen( s ); fprintf( fp, "@" ); for ( i=0; i<len; ++i ) fprintf( fp, "%c", toupper((unsigned char)s[i]) ); fprintf( fp, "{" ); } } static void output_element( FILE *fp, char *tag, char *data, int format_opts ) { int i, len, nquotes = 0; char ch; fprintf( fp, ",\n" ); if ( format_opts & BIBOUT_WHITESPACE ) fprintf( fp, " " ); if ( !(format_opts & BIBOUT_UPPERCASE ) ) fprintf( fp, "%s", tag ); else { len = strlen( tag ); for ( i=0; i<len; ++i ) fprintf( fp, "%c", toupper((unsigned char)tag[i]) ); } if ( format_opts & BIBOUT_WHITESPACE ) fprintf( fp, " = \t" ); else fprintf( fp, "=" ); if ( format_opts & BIBOUT_BRACKETS ) fprintf( fp, "{" ); else fprintf( fp, "\"" ); len = strlen( data ); for ( i=0; i<len; ++i ) { ch = data[i]; if ( ch!='\"' ) fprintf( fp, "%c", ch ); else { if ( format_opts & BIBOUT_BRACKETS || ( i>0 && data[i-1]=='\\' ) ) fprintf( fp, "\"" ); else { if ( nquotes % 2 == 0 ) fprintf( fp, "``" ); else fprintf( fp, "\'\'" ); nquotes++; } } } if ( format_opts & BIBOUT_BRACKETS ) fprintf( fp, "}" ); else fprintf( fp, "\"" ); } static void output_and_use( FILE *fp, fields *info, int n, char *outtag, int format_opts ) { output_element( fp, outtag, info->data[n].data, format_opts ); fields_setused( info, n ); } static void output_simple( FILE *fp, fields *info, char *intag, char *outtag, int format_opts ) { int n = fields_find( info, intag, -1 ); if ( n!=-1 ) { output_and_use( fp, info, n, outtag, format_opts ); } } static void output_simpleall( FILE *fp, fields *info, char *intag, char *outtag, int format_opts ) { int i; for ( i=0; i<info->n; ++i ) { if ( fields_match_tag( info, i, intag ) ) output_and_use( fp, info, i, outtag, format_opts ); } } static void output_keywords( FILE *fp, fields *info, int format_opts ) { newstr keywords, *word; vplist a; int i; newstr_init( &keywords ); vplist_init( &a ); fields_findv_each( info, LEVEL_ANY, FIELDS_STRP, &a, "KEYWORD" ); if ( a.n ) { for ( i=0; i<a.n; ++i ) { word = vplist_get( &a, i ); if ( i>0 ) newstr_strcat( &keywords, "; " ); newstr_newstrcat( &keywords, word ); } output_element( fp, "keywords", keywords.data, format_opts ); } newstr_free( &keywords ); vplist_free( &a ); } static void output_fileattach( FILE *fp, fields *info, int format_opts ) { newstr data; int i; newstr_init( &data ); for ( i=0; i<info->n; ++i ) { if ( strcasecmp( info->tag[i].data, "FILEATTACH" ) ) continue; newstr_strcpy( &data, ":" ); newstr_newstrcat( &data, &(info->data[i]) ); if ( strsearch( info->data[i].data, ".pdf" ) ) newstr_strcat( &data, ":PDF" ); else if ( strsearch( info->data[i].data, ".html" ) ) newstr_strcat( &data, ":HTML" ); else newstr_strcat( &data, ":TYPE" ); output_element( fp, "file", data.data, format_opts ); fields_setused( info, i ); newstr_empty( &data ); } newstr_free( &data ); } static void output_people( FILE *fp, fields *info, unsigned long refnum, char *tag, char *ctag, char *atag, char *bibtag, int level, int format_opts ) { newstr allpeople, oneperson; int i, npeople, person, corp, asis; newstrs_init( &allpeople, &oneperson, NULL ); /* primary citation authors */ npeople = 0; for ( i=0; i<info->n; ++i ) { if ( level!=-1 && info->level[i]!=level ) continue; person = ( strcasecmp( info->tag[i].data, tag ) == 0 ); corp = ( strcasecmp( info->tag[i].data, ctag ) == 0 ); asis = ( strcasecmp( info->tag[i].data, atag ) == 0 ); if ( person || corp || asis ) { if ( npeople>0 ) { if ( format_opts & BIBOUT_WHITESPACE ) newstr_strcat(&allpeople,"\n\t\tand "); else newstr_strcat( &allpeople, "\nand " ); } if ( corp ) { newstr_addchar( &allpeople, '{' ); newstr_strcat( &allpeople, fields_value( info, i, FIELDS_CHRP ) ); newstr_addchar( &allpeople, '}' ); } else if ( asis ) { newstr_addchar( &allpeople, '{' ); newstr_strcat( &allpeople, fields_value( info, i, FIELDS_CHRP ) ); newstr_addchar( &allpeople, '}' ); } else { name_build_withcomma( &oneperson, fields_value( info, i, FIELDS_CHRP ) ); newstr_newstrcat( &allpeople, &oneperson ); } npeople++; } } if ( npeople ) output_element( fp, bibtag, allpeople.data, format_opts ); newstrs_free( &allpeople, &oneperson, NULL ); } static void output_title( FILE *fp, fields *info, unsigned long refnum, char *bibtag, int level, int format_opts ) { newstr title, *mainttl, *subttl; int n1 = -1, n2 = -1; /* Option is for short titles of journals */ if ( ( format_opts & BIBOUT_SHORTTITLE ) && level==1 ) { n1 = fields_find( info, "SHORTTITLE", level ); n2 = fields_find( info, "SHORTSUBTITLE", level ); } if ( n1==-1 ) { n1 = fields_find( info, "TITLE", level ); n2 = fields_find( info, "SUBTITLE", level ); } if ( n1!=-1 ) { newstr_init( &title ); mainttl = fields_value( info, n1, FIELDS_STRP ); newstr_newstrcpy( &title, mainttl ); fields_setused( info, n1 ); if ( n2!=-1 ) { subttl = fields_value( info, n2, FIELDS_STRP ); if ( mainttl->len > 0 && mainttl->data[mainttl->len-1]!='?' ) newstr_strcat( &title, ": " ); else newstr_addchar( &title, ' ' ); newstr_newstrcat( &title, subttl ); fields_setused( info, n2 ); } output_element( fp, bibtag, title.data, format_opts ); newstr_free( &title ); } } static void output_date( FILE *fp, fields *info, unsigned long refnum, int format_opts ) { char *months[12] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; int n, month; n = fields_find( info, "YEAR", -1 ); if ( n==-1 ) n = fields_find( info, "PARTYEAR", -1 ); if ( n!=-1 ) { output_element( fp, "year", info->data[n].data, format_opts ); fields_setused( info, n ); } n = fields_find( info, "MONTH", -1 ); if ( n==-1 ) n = fields_find( info, "PARTMONTH", -1 ); if ( n!=-1 ) { month = atoi( info->data[n].data ); if ( month>0 && month<13 ) output_element( fp, "month", months[month-1], format_opts ); else output_element( fp, "month", info->data[n].data, format_opts ); fields_setused( info, n ); } n = fields_find( info, "DAY", -1 ); if ( n==-1 ) n = fields_find( info, "PARTDAY", -1 ); if ( n!=-1 ) { output_element( fp, "day", info->data[n].data, format_opts ); fields_setused( info, n ); } } /* output article number as pages if true pages aren't found */ static void output_articlenumber( FILE *fp, fields *info, unsigned long refnum, int format_opts ) { int ar = fields_find( info, "ARTICLENUMBER", -1 ); if ( ar!=-1 ) { newstr pages; newstr_init( &pages ); newstr_strcat( &pages, info->data[ar].data ); output_element( fp, "pages", pages.data, format_opts ); fields_setused( info, ar ); newstr_free( &pages ); } } static void output_arxiv( FILE *fp, fields *info, int format_opts ) { int ar = fields_find( info, "ARXIV", -1 ); if ( ar!=-1 ) { newstr arxiv; newstr_init( &arxiv ); arxiv_to_url( info, ar, "URL", &arxiv ); if ( arxiv.len ) output_element( fp, "url", arxiv.data, format_opts ); newstr_free( &arxiv ); } } static void output_pmid( FILE *fp, fields *info, int format_opts ) { int pm = fields_find( info, "PMID", -1 ); if ( pm!=-1 ) { newstr pmid; newstr_init( &pmid ); pmid_to_url( info, pm, "URL", &pmid ); if ( pmid.len ) output_element( fp, "url", pmid.data, format_opts ); newstr_free( &pmid ); } } static void output_jstor( FILE *fp, fields *info, int format_opts ) { int js = fields_find( info, "JSTOR", -1 ); if ( js!=-1 ) { newstr jstor; newstr_init( &jstor ); jstor_to_url( info, js, "URL", &jstor ); if ( jstor.len ) output_element( fp, "url", jstor.data, format_opts ); newstr_free( &jstor ); } } static void output_pages( FILE *fp, fields *info, unsigned long refnum, int format_opts ) { newstr pages; int sn, en; sn = fields_find( info, "PAGESTART", -1 ); en = fields_find( info, "PAGEEND", -1 ); if ( sn==-1 && en==-1 ) { output_articlenumber( fp, info, refnum, format_opts ); return; } newstr_init( &pages ); if ( sn!=-1 ) { newstr_strcat( &pages, info->data[sn].data ); fields_setused( info, sn ); } if ( sn!=-1 && en!=-1 ) { if ( format_opts & BIBOUT_SINGLEDASH ) newstr_strcat( &pages, "-" ); else newstr_strcat( &pages, "--" ); } if ( en!=-1 ) { newstr_strcat( &pages, info->data[en].data ); fields_setused( info, en ); } output_element( fp, "pages", pages.data, format_opts ); newstr_free( &pages ); } /* * from Tim Hicks: * I'm no expert on bibtex, but those who know more than I on our mailing * list suggest that 'issue' isn't a recognised key for bibtex and * therefore that bibutils should be aliasing IS to number at some point in * the conversion. * * Therefore prefer outputting issue/number as number and only keep * a distinction if both issue and number are present for a particular * reference. */ static void output_issue_number( FILE *fp, fields *info, int format_opts ) { int nissue = fields_find( info, "ISSUE", -1 ); int nnumber = fields_find( info, "NUMBER", -1 ); if ( nissue!=-1 && nnumber!=-1 ) { output_and_use( fp, info, nissue, "issue", format_opts ); output_and_use( fp, info, nnumber, "number", format_opts ); /* output_element( fp, "issue", info->data[nissue].data, format_opts ); fields_setused( info, nissue ); output_element( fp, "number", info->data[nnumber].data, format_opts ); fields_setused( info, nnumber );*/ } else if ( nissue!=-1 ) { output_and_use( fp, info, nissue, "number", format_opts ); /* output_element( fp, "number", info->data[nissue].data, format_opts ); fields_setused( info, nissue );*/ } else if ( nnumber!=-1 ) { output_and_use( fp, info, nnumber, "number", format_opts ); /* output_element( fp, "number", info->data[nnumber].data, format_opts ); fields_setused( info, nnumber ); */ } } void bibtexout_write( fields *info, FILE *fp, param *p, unsigned long refnum ) { int type; fields_clearused( info ); type = bibtexout_type( info, "", refnum, p ); output_type( fp, type, p->format_opts ); if ( !( p->format_opts & BIBOUT_DROPKEY ) ) output_citekey( fp, info, refnum, p->format_opts ); output_people( fp, info, refnum, "AUTHOR", "AUTHOR:CORP", "AUTHOR:ASIS", "author", 0, p->format_opts ); output_people( fp, info, refnum, "EDITOR", "EDITOR:CORP", "EDITOR:ASIS", "editor", -1, p->format_opts ); output_people( fp, info, refnum, "TRANSLATOR", "TRANSLATOR:CORP", "TRANSLATOR:ASIS", "translator", -1, p->format_opts ); /* item=main level title */ if ( type==TYPE_INBOOK ) output_title( fp, info, refnum, "chapter", 0, p->format_opts ); else output_title( fp, info, refnum, "title", 0, p->format_opts ); /* item=host level title */ if ( type==TYPE_ARTICLE ) output_title( fp, info, refnum, "journal", 1, p->format_opts ); else if ( type==TYPE_INBOOK ) { output_title( fp, info, refnum, "title", 1, p->format_opts ); output_title( fp, info, refnum, "series", 2, p->format_opts ); } else if ( type==TYPE_INPROCEEDINGS || type==TYPE_INCOLLECTION ) { output_title( fp, info, refnum, "booktitle", 1, p->format_opts ); output_title( fp, info, refnum, "series", 2, p->format_opts ); } else if ( type==TYPE_PHDTHESIS || type==TYPE_MASTERSTHESIS ) { output_title( fp, info, refnum, "series", 1, p->format_opts ); } else if ( type==TYPE_BOOK || type==TYPE_COLLECTION || type==TYPE_PROCEEDINGS || type==TYPE_REPORT ) { output_title( fp, info, refnum, "series", 1, p->format_opts ); output_title( fp, info, refnum, "series", 2, p->format_opts ); } output_date( fp, info, refnum, p->format_opts ); output_simple( fp, info, "EDITION", "edition", p->format_opts ); output_simple( fp, info, "PUBLISHER", "publisher", p->format_opts ); output_simple( fp, info, "ADDRESS", "address", p->format_opts ); output_simple( fp, info, "VOLUME", "volume", p->format_opts ); output_issue_number( fp, info, p->format_opts ); /* output_simple( fp, info, "ISSUE", "issue", p->format_opts ); output_simple( fp, info, "NUMBER", "number", p->format_opts );s*/ output_pages( fp, info, refnum, p->format_opts ); output_keywords( fp, info, p->format_opts ); output_simple( fp, info, "CONTENTS", "contents", p->format_opts ); output_simple( fp, info, "ABSTRACT", "abstract", p->format_opts ); output_simple( fp, info, "LOCATION", "location", p->format_opts ); output_simple( fp, info, "DEGREEGRANTOR", "school", p->format_opts ); output_simple( fp, info, "DEGREEGRANTOR:ASIS", "school", p->format_opts ); output_simple( fp, info, "DEGREEGRANTOR:CORP", "school", p->format_opts ); output_simpleall( fp, info, "NOTES", "note", p->format_opts ); output_simpleall( fp, info, "ANNOTE", "annote", p->format_opts ); output_simple( fp, info, "ISBN", "isbn", p->format_opts ); output_simple( fp, info, "ISSN", "issn", p->format_opts ); output_simple( fp, info, "DOI", "doi", p->format_opts ); output_simpleall( fp, info, "URL", "url", p->format_opts ); output_fileattach( fp, info, p->format_opts ); output_arxiv( fp, info, p->format_opts ); output_pmid( fp, info, p->format_opts ); output_jstor( fp, info, p->format_opts ); output_simple( fp, info, "LANGUAGE", "language", p->format_opts ); if ( p->format_opts & BIBOUT_FINALCOMMA ) fprintf( fp, "," ); fprintf( fp, "\n}\n\n" ); fflush( fp ); } void bibtexout_writeheader( FILE *outptr, param *p ) { if ( p->utf8bom ) utf8_writebom( outptr ); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hs-bibutils-5.5/bibutils/serialno.c�����������������������������������������������������������������0000644�0000000�0000000�00000002347�12445605732�015611� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * serialno.c * * Copyright (c) Chris Putnam 2005-2014 * * Source code released under the GPL version 2 * */ #include <string.h> #include "serialno.h" int addsn( fields *info, char *buf, int level ) { int ndigits, issn=0, isbn=0, isbn10=0, isbn13=0, status; char *p = buf, *tag; if ( !strncasecmp( p, "ISSN", 4 ) ) issn=1; else if ( !strncasecmp( p, "ISBN", 4 ) ) isbn=1; if ( isbn ) { ndigits = 0; while ( *p && !(ndigits && (*p==';'||*p==':')) ) { if ( ( *p>='0' && *p<='9' ) || *p=='x' || *p=='X' ) ndigits++; p++; } if ( ndigits==13 ) isbn13 = 1; else /* ( ndigits==10) */ isbn10 = 1; } if ( !issn && !isbn ) { /* a lot have semicolons between multiple ISBN's for paperbacks and hardbacks with different numbers */ ndigits = 0; while ( *p && !(ndigits && (*p==';'||*p==':')) ) { if ( ( *p>='0' && *p<='9' ) || *p=='x' || *p=='X' ) ndigits++; p++; } if ( ndigits==8 ) issn = 1; else if ( ndigits==10 ) isbn10 = 1; else if ( ndigits==13 ) isbn13 = 1; } if ( issn ) tag = "ISSN"; else if ( isbn10 ) tag = "ISBN"; else if ( isbn13 ) tag = "ISBN13"; else tag = "SERIALNUMBER"; status = fields_add( info, tag, buf, level ); if ( status==FIELDS_OK ) return 1; else return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hs-bibutils-5.5/bibutils/isitypes.c�����������������������������������������������������������������0000644�0000000�0000000�00000022270�12445605732�015643� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * isitypes.c * * Copyright (c) Chris Putnam 2004-2013 * * Program and source code released under the GPL version 2 * */ #include <stdio.h> #include <string.h> #include "is_ws.h" #include "fields.h" #include "reftypes.h" static lookups article[] = { { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, { "AF", "AUTHOR", PERSON, LEVEL_MAIN }, { "TI", "TITLE", TITLE, LEVEL_MAIN }, { "SO", "TITLE", TITLE, LEVEL_HOST }, /* full journal name */ { "JI", "SHORTTITLE",TITLE, LEVEL_HOST }, /* abbr journal name */ { "J9", "SHORTTITLE",TITLE, LEVEL_HOST }, /* 29char journal name */ { "PU", "PUBLISHER", SIMPLE, LEVEL_HOST }, { "PI", "ADDRESS", SIMPLE, LEVEL_HOST }, /* publisher city */ { "C1", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* author address */ { "PA", "ADDRESS", SIMPLE, LEVEL_HOST }, /* publisher address */ { "RP", "REPRINTADDRESS", SIMPLE, LEVEL_MAIN }, { "PY", "PARTYEAR", SIMPLE, LEVEL_MAIN }, { "PD", "PARTMONTH", SIMPLE, LEVEL_MAIN }, { "VL", "VOLUME", SIMPLE, LEVEL_MAIN }, { "AR", "ARTICLENUMBER", SIMPLE, LEVEL_MAIN }, /* AR=article number that Phys. Rev. B uses instead of page numbers */ { "BP", "PAGESTART", SIMPLE, LEVEL_MAIN }, { "EP", "PAGEEND", SIMPLE, LEVEL_MAIN }, { "PG", "TOTALPAGES", SIMPLE, LEVEL_MAIN }, { "IS", "ISSUE", SIMPLE, LEVEL_MAIN }, { "SN", "SERIALNUMBER", SERIALNO, LEVEL_HOST }, { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "NF", "NOTES", SIMPLE, LEVEL_MAIN }, { "DE", "KEYWORD", KEYWORD, LEVEL_MAIN }, /* author keywords */ { "ID", "KEYWORD", KEYWORD, LEVEL_MAIN }, /* new ISI keywords */ { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "TC", "TIMESCITED", SIMPLE, LEVEL_MAIN }, { "NR", "NUMBERREFS", SIMPLE, LEVEL_MAIN }, { "CR", "CITEDREFS", SIMPLE, LEVEL_MAIN }, { "PT", " ", TYPE, LEVEL_HOST }, { "DT", "DOCUMENTTYPE", TYPE, LEVEL_MAIN }, { "GA", "ISIDELIVERNUM", SIMPLE, LEVEL_MAIN}, /*ISI document delivery number */ { "UT", "ISIREFNUM", SIMPLE, LEVEL_MAIN }, /* ISI unique article identifer */ { "DI", "DOI", SIMPLE, LEVEL_MAIN }, { " ", "INTERNAL_TYPE|ARTICLE", ALWAYS, LEVEL_MAIN }, { " ", "ISSUANCE|continuing", ALWAYS, LEVEL_HOST }, { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { " ", "GENRE|journal article", ALWAYS, LEVEL_MAIN }, { " ", "GENRE|periodical", ALWAYS, LEVEL_HOST }, { " ", "GENRE|academic journal", ALWAYS, LEVEL_HOST } }; static lookups book[] = { { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, { "AF", "AUTHOR", PERSON, LEVEL_MAIN }, { "TI", "TITLE", TITLE, LEVEL_MAIN }, { "SO", "TITLE", TITLE, LEVEL_HOST }, /* full journal name */ { "JI", "SHORTTITLE",TITLE, LEVEL_HOST }, /* abbr journal name */ { "J9", "SHORTTITLE",TITLE, LEVEL_HOST }, /* 29char journal name */ { "PU", "PUBLISHER", SIMPLE, LEVEL_MAIN }, { "PI", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* publisher city */ { "C1", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* author address */ { "PA", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* publisher address */ { "RP", "REPRINTADDRESS", SIMPLE, LEVEL_MAIN }, { "PY", "YEAR", SIMPLE, LEVEL_MAIN }, { "PD", "MONTH", SIMPLE, LEVEL_MAIN }, { "VL", "VOLUME", SIMPLE, LEVEL_MAIN }, { "BP", "PAGESTART", SIMPLE, LEVEL_MAIN }, { "EP", "PAGEEND", SIMPLE, LEVEL_MAIN }, { "PG", "TOTALPAGES", SIMPLE, LEVEL_MAIN }, { "IS", "ISSUE", SIMPLE, LEVEL_MAIN }, { "SN", "SERIALNUMBER", SERIALNO, LEVEL_HOST }, { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "NF", "NOTES", SIMPLE, LEVEL_MAIN }, { "DE", "KEYWORD", KEYWORD, LEVEL_MAIN }, /* author keywords */ { "ID", "KEYWORD", KEYWORD, LEVEL_MAIN }, /* new ISI keywords */ { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "TC", "TIMESCITED", SIMPLE, LEVEL_MAIN }, { "NR", "NUMBERREFS", SIMPLE, LEVEL_MAIN }, { "CR", "CITEDREFS", SIMPLE, LEVEL_MAIN }, { "PT", " ", TYPE, LEVEL_MAIN }, { "DT", "DOCUMENTTYPE", TYPE, LEVEL_MAIN }, { "GA", "ISIDELIVERNUM", SIMPLE, LEVEL_MAIN}, /*ISI document delivery number */ { "UT", "ISIREFNUM", SIMPLE, LEVEL_MAIN }, /* ISI unique article identifer */ { "PT", " ", TYPE, LEVEL_HOST }, { "DI", "DOI", SIMPLE, LEVEL_MAIN }, { " ", "INTERNAL_TYPE|BOOK", ALWAYS, LEVEL_MAIN }, { " ", "ISSUANCE|monographic", ALWAYS, LEVEL_MAIN }, { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { " ", "GENRE|book", ALWAYS, LEVEL_MAIN } }; static lookups inbook[] = { { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, { "AF", "AUTHOR", PERSON, LEVEL_MAIN }, { "TI", "TITLE", TITLE, LEVEL_MAIN }, { "SO", "TITLE", TITLE, LEVEL_HOST }, /* full journal name */ { "JI", "SHORTTITLE",TITLE, LEVEL_HOST }, /* abbr journal name */ { "J9", "SHORTTITLE",TITLE, LEVEL_HOST }, /* 29char journal name */ { "PU", "PUBLISHER", SIMPLE, LEVEL_HOST }, { "PI", "ADDRESS", SIMPLE, LEVEL_HOST }, /* publisher city */ { "C1", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* author address */ { "PA", "ADDRESS", SIMPLE, LEVEL_HOST }, /* publisher address */ { "RP", "REPRINTADDRESS", SIMPLE, LEVEL_MAIN }, { "PY", "PARTYEAR", SIMPLE, LEVEL_MAIN }, { "PD", "PARTMONTH", SIMPLE, LEVEL_MAIN }, { "VL", "VOLUME", SIMPLE, LEVEL_MAIN }, { "BP", "PAGESTART", SIMPLE, LEVEL_MAIN }, { "EP", "PAGEEND", SIMPLE, LEVEL_MAIN }, { "PG", "TOTALPAGES", SIMPLE, LEVEL_HOST }, { "IS", "ISSUE", SIMPLE, LEVEL_MAIN }, { "SN", "SERIALNUMBER", SERIALNO, LEVEL_HOST }, { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "NF", "NOTES", SIMPLE, LEVEL_MAIN }, { "DE", "KEYWORD", KEYWORD, LEVEL_MAIN }, /* author keywords */ { "ID", "KEYWORD", KEYWORD, LEVEL_MAIN }, /* new ISI keywords */ { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "TC", "TIMESCITED", SIMPLE, LEVEL_MAIN }, { "NR", "NUMBERREFS", SIMPLE, LEVEL_MAIN }, { "CR", "CITEDREFS", SIMPLE, LEVEL_MAIN }, { "PT", " ", TYPE, LEVEL_HOST }, { "DT", "DOCUMENTTYPE", TYPE, LEVEL_MAIN }, { "GA", "ISIDELIVERNUM", SIMPLE, LEVEL_MAIN}, /*ISI document delivery number */ { "UT", "ISIREFNUM", SIMPLE, LEVEL_MAIN }, /* ISI unique article identifer */ { "DI", "DOI", SIMPLE, LEVEL_MAIN }, { " ", "INTERNAL_TYPE|INBOOK", ALWAYS, LEVEL_MAIN }, { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { " ", "ISSUANCE|monographic", ALWAYS, LEVEL_HOST }, { " ", "GENRE|book chapter", ALWAYS, LEVEL_MAIN }, { " ", "GENRE|book", ALWAYS, LEVEL_HOST } }; static lookups bookinseries[] = { { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, { "AF", "AUTHOR", PERSON, LEVEL_MAIN }, { "TI", "TITLE", TITLE, LEVEL_MAIN }, { "SO", "TITLE", TITLE, LEVEL_MAIN }, { "SE", "TITLE", TITLE, LEVEL_HOST }, { "BS", "SUBTITLE", TITLE, LEVEL_HOST }, { "JI", "SHORTTITLE",TITLE, LEVEL_HOST }, /* abbr journal name */ { "J9", "SHORTTITLE",TITLE, LEVEL_HOST }, /* 29char journal name */ { "PU", "PUBLISHER", SIMPLE, LEVEL_HOST }, { "PI", "ADDRESS", SIMPLE, LEVEL_HOST }, /* publisher city */ { "C1", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* author address */ { "PA", "ADDRESS", SIMPLE, LEVEL_HOST }, /* publisher address */ { "RP", "REPRINTADDRESS", SIMPLE, LEVEL_MAIN }, { "PY", "PARTYEAR", SIMPLE, LEVEL_MAIN }, { "PD", "PARTMONTH", SIMPLE, LEVEL_MAIN }, { "VL", "VOLUME", SIMPLE, LEVEL_MAIN }, { "BP", "PAGESTART", SIMPLE, LEVEL_MAIN }, { "EP", "PAGEEND", SIMPLE, LEVEL_MAIN }, { "PG", "TOTALPAGES", SIMPLE, LEVEL_MAIN }, { "IS", "ISSUE", SIMPLE, LEVEL_MAIN }, { "SN", "SERIALNUMBER", SERIALNO, LEVEL_HOST }, { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "NF", "NOTES", SIMPLE, LEVEL_MAIN }, { "DE", "KEYWORD", KEYWORD, LEVEL_MAIN }, /* author keywords */ { "ID", "KEYWORD", KEYWORD, LEVEL_MAIN }, /* new ISI keywords */ { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "TC", "TIMESCITED", SIMPLE, LEVEL_MAIN }, { "NR", "NUMBERREFS", SIMPLE, LEVEL_MAIN }, { "CR", "CITEDREFS", SIMPLE, LEVEL_MAIN }, { "PT", " ", TYPE, LEVEL_HOST }, { "DT", "DOCUMENTTYPE", TYPE, LEVEL_MAIN }, { "GA", "ISIDELIVERNUM", SIMPLE, LEVEL_MAIN}, /*ISI document delivery number */ { "UT", "ISIREFNUM", SIMPLE, LEVEL_MAIN }, /* ISI unique article identifer */ { "DI", "DOI", SIMPLE, LEVEL_MAIN }, { " ", "INTERNAL_TYPE|INCOLLECTION", ALWAYS, LEVEL_MAIN }, { " ", "ISSUANCE|monographic", ALWAYS, LEVEL_HOST }, { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { " ", "GENRE|collection", ALWAYS, LEVEL_MAIN } }; #define ORIG(a) ( &(a[0]) ) #define SIZE(a) ( sizeof( a ) / sizeof( lookups ) ) #define REFTYPE(a,b) { a, ORIG(b), SIZE(b) } variants isi_all[] = { REFTYPE( "Journal", article ), REFTYPE( "J", article ), REFTYPE( "Book", book ), REFTYPE( "B", book ), REFTYPE( "Chapter", inbook ), REFTYPE( "S", bookinseries ), }; int isi_nall = sizeof( isi_all ) / sizeof( variants ); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hs-bibutils-5.5/bibutils/adsout.h�������������������������������������������������������������������0000644�0000000�0000000�00000000705�12445605732�015275� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * adsout.h * * Copyright (c) Richard Mathar 2007-2013 * Copyright (c) Chris Putnam 2007-2013 * * Source code released under the GPL version 2 * */ #ifndef ADSOUT_H #define ADSOUT_H #include <stdio.h> #include "bibutils.h" extern void adsout_write( fields *info, FILE *fp, param *p, unsigned long refnum ); extern void adsout_writeheader( FILE *outptr, param *p ); extern void adsout_initparams( param *p, const char *progname ); #endif �����������������������������������������������������������hs-bibutils-5.5/bibutils/adsout.c�������������������������������������������������������������������0000644�0000000�0000000�00000026530�12445605732�015274� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * adsout.c * * Copyright (c) Richard Mathar 2007-2014 * Copyright (c) Chris Putnam 2007-2014 * * Program and source code released under the GPL version 2 * */ #include <stdio.h> #include <stdlib.h> #include <stdint.h> #include <string.h> #include <ctype.h> #include "utf8.h" #include "newstr.h" #include "strsearch.h" #include "fields.h" #include "name.h" #include "adsout.h" void adsout_initparams( param *p, const char *progname ) { p->writeformat = BIBL_ADSABSOUT; p->format_opts = 0; p->charsetout = BIBL_CHARSET_DEFAULT; p->charsetout_src = BIBL_SRC_DEFAULT; p->latexout = 0; p->utf8out = BIBL_CHARSET_UTF8_DEFAULT; p->utf8bom = BIBL_CHARSET_BOM_DEFAULT; p->xmlout = BIBL_XMLOUT_FALSE; p->nosplittitle = 0; p->verbose = 0; p->addcount = 0; p->singlerefperfile = 0; if ( p->charsetout == BIBL_CHARSET_UNICODE ) { p->utf8out = p->utf8bom = 1; } p->headerf = adsout_writeheader; p->footerf = NULL; p->writef = adsout_write; } enum { TYPE_UNKNOWN = 0, TYPE_GENERIC, TYPE_ARTICLE, TYPE_MAGARTICLE, TYPE_BOOK, TYPE_INBOOK, TYPE_INPROCEEDINGS, TYPE_HEARING, TYPE_BILL, TYPE_CASE, TYPE_NEWSPAPER, TYPE_COMMUNICATION, TYPE_BROADCAST, TYPE_MANUSCRIPT, TYPE_REPORT, TYPE_THESIS, TYPE_MASTERSTHESIS, TYPE_PHDTHESIS, TYPE_DIPLOMATHESIS, TYPE_DOCTORALTHESIS, TYPE_HABILITATIONTHESIS, TYPE_PATENT, TYPE_PROGRAM }; typedef struct match_type { char *name; int type; } match_type; static int get_type( fields *info ) { match_type match_genres[] = { { "academic journal", TYPE_ARTICLE }, { "magazine", TYPE_MAGARTICLE }, { "conference publication", TYPE_INPROCEEDINGS }, { "hearing", TYPE_HEARING }, { "Ph.D. thesis", TYPE_PHDTHESIS }, { "Masters thesis", TYPE_MASTERSTHESIS }, { "Diploma thesis", TYPE_DIPLOMATHESIS }, { "Doctoral thesis", TYPE_DOCTORALTHESIS }, { "Habilitation thesis", TYPE_HABILITATIONTHESIS }, { "legislation", TYPE_BILL }, { "newspaper", TYPE_NEWSPAPER }, { "communication", TYPE_COMMUNICATION }, { "manuscript", TYPE_MANUSCRIPT }, { "report", TYPE_REPORT }, { "legal case and case notes", TYPE_CASE }, { "patent", TYPE_PATENT }, }; int nmatch_genres = sizeof( match_genres ) / sizeof( match_genres[0] ); char *tag, *data; int i, j, type = TYPE_UNKNOWN; for ( i=0; i<info->n; ++i ) { tag = info->tag[i].data; if ( strcasecmp( tag, "GENRE" )!=0 && strcasecmp( tag, "NGENRE" )!=0 ) continue; data = info->data[i].data; for ( j=0; j<nmatch_genres; ++j ) { if ( !strcasecmp( data, match_genres[j].name ) ) { type = match_genres[j].type; fields_setused( info, i ); } } if ( type==TYPE_UNKNOWN ) { if ( !strcasecmp( data, "periodical" ) ) type = TYPE_ARTICLE; else if ( !strcasecmp( data, "thesis" ) ) type = TYPE_THESIS; else if ( !strcasecmp( data, "book" ) ) { if ( info->level[i]==0 ) type = TYPE_BOOK; else type = TYPE_INBOOK; } else if ( !strcasecmp( data, "collection" ) ) { if ( info->level[i]==0 ) type = TYPE_BOOK; else type = TYPE_INBOOK; } if ( type!=TYPE_UNKNOWN ) fields_setused( info, i ); } } if ( type==TYPE_UNKNOWN ) { for ( i=0; i<info->n; ++i ) { if ( strcasecmp( info->tag[i].data, "RESOURCE" ) ) continue; data = info->data[i].data; if ( !strcasecmp( data, "moving image" ) ) type = TYPE_BROADCAST; else if ( !strcasecmp( data, "software, multimedia" ) ) type = TYPE_PROGRAM; if ( type!=TYPE_UNKNOWN ) fields_setused( info, i ); } } /* default to generic */ if ( type==TYPE_UNKNOWN ) type = TYPE_GENERIC; return type; } static void output_title( FILE *fp, fields *f, char *full, char *sub, char *adstag, int level ) { newstr *fulltitle, *subtitle, *vol, *iss, *sn, *en, *ar; fulltitle = fields_findv( f, level, FIELDS_STRP, full ); subtitle = fields_findv( f, level, FIELDS_STRP, sub ); if ( fulltitle && fulltitle->len ) { fprintf( fp, "%s %s", adstag, fulltitle->data ); if ( subtitle && subtitle->len ) { if ( fulltitle->data[ fulltitle->len - 1 ] != '?' ) fprintf( fp, ": " ); else fprintf( fp, " " ); fprintf( fp, "%s", subtitle->data ); } vol = fields_findv( f, LEVEL_ANY, FIELDS_STRP, "VOLUME" ); if ( vol && vol->len ) fprintf( fp, ", vol. %s", vol->data ); iss = fields_findv_firstof( f, LEVEL_ANY, FIELDS_STRP, "ISSUE", "NUMBER", NULL ); if ( iss && iss->len ) fprintf( fp, ", no. %s", iss->data ); sn = fields_findv( f, LEVEL_ANY, FIELDS_STRP, "PAGESTART" ); en = fields_findv( f, LEVEL_ANY, FIELDS_STRP, "PAGEEND" ); ar = fields_findv( f, LEVEL_ANY, FIELDS_STRP, "ARTICLENUMBER" ); if ( sn && sn->len ) { if ( en && en->len ) fprintf( fp, ", pp." ); else fprintf( fp, ", p." ); fprintf( fp, " %s", sn->data ); } else if ( ar && ar->len ) { fprintf( fp, ", p. %s", ar->data ); } if ( en && en->len ) { fprintf( fp, "-%s", en->data ); } fprintf( fp, "\n" ); } } static void output_people( FILE *fp, fields *f, char *tag1, char *tag2, char *tag3, char *adstag, int level ) { newstr oneperson; vplist a; int i; newstr_init( &oneperson ); vplist_init( &a ); fields_findv_eachof( f, level, FIELDS_CHRP, &a, tag1, tag2, tag3, NULL ); extern void fields_findv_eachof( fields *f, int level, int mode, vplist *a, ... ); for ( i=0; i<a.n; ++i ) { if ( i==0 ) fprintf( fp, "%s ", adstag ); else fprintf( fp, "; " ); name_build_withcomma( &oneperson, (char *) vplist_get( &a, i) ); fprintf( fp, "%s", oneperson.data ); } if ( a.n ) fprintf( fp, "\n" ); vplist_free( &a ); newstr_free( &oneperson ); } static void output_pages( FILE *fp, fields *f ) { newstr *sn = fields_findv( f, LEVEL_ANY, FIELDS_STRP, "PAGESTART" ); newstr *en = fields_findv( f, LEVEL_ANY, FIELDS_STRP, "PAGEEND" ); newstr *ar = fields_findv( f, LEVEL_ANY, FIELDS_STRP, "ARTICLENUMBER" ); if ( sn && sn->len!=0 ) fprintf( fp, "%%P %s\n", sn->data ); else if ( ar && ar->len!=0 ) fprintf( fp, "%%P %s\n", ar->data ); if ( en && en->len!=0 ) fprintf( fp, "%%L %s\n", en->data ); } static int mont2mont( const char *m ) { static char *monNames[]= { "jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec" }; int i; if ( isdigit( (unsigned char)m[0] ) ) return atoi( m ); else { for ( i=0; i<12; i++ ) { if ( !strncasecmp( m, monNames[i], 3 ) ) return i+1; } } return 0; } static int get_month( fields *f, int level ) { newstr *month = fields_findv_firstof( f, level, FIELDS_STRP, "MONTH", "PARTMONTH", NULL ); if ( month && month->len ) return mont2mont( month->data ); else return 0; } static void output_date( FILE *fp, fields *f, char *adstag, int level ) { newstr *year = fields_findv_firstof( f, level, FIELDS_STRP, "YEAR", "PARTYEAR", NULL ); int month; if ( year && year->len ) { month = get_month( f, level ); fprintf( fp, "%s %02d/%s\n", adstag, month, year->data ); } } #include "adsout_journals.c" static void output_4digit_value( char *pos, long long n ) { char buf[6]; n = n % 10000; /* truncate to 0->9999, will fit in buf[6] */ #ifdef WIN32 sprintf( buf, "%I64d", n ); #else sprintf( buf, "%lld", n ); #endif if ( n < 10 ) strncpy( pos+3, buf, 1 ); else if ( n < 100 ) strncpy( pos+2, buf, 2 ); else if ( n < 1000 ) strncpy( pos+1, buf, 3 ); else strncpy( pos, buf, 4 ); } static char get_firstinitial( fields *f ) { char *name; int n; n = fields_find( f, "AUTHOR", LEVEL_MAIN ); if ( n==-1 ) n = fields_find( f, "AUTHOR", LEVEL_ANY ); if ( n!=-1 ) { name = fields_value( f, n, FIELDS_CHRP ); return name[0]; } else return '\0'; } static int get_journalabbr( fields *f ) { char *jrnl; int n, j; n = fields_find( f, "TITLE", LEVEL_HOST ); if ( n!=-1 ) { jrnl = fields_value( f, n, FIELDS_CHRP ); for ( j=0; j<njournals; j++ ) { if ( !strcasecmp( jrnl, journals[j]+6 ) ) return j; } } return -1; } static void output_Rtag( FILE *fp, fields *f, char *adstag, int type ) { char out[20], ch; int n, i; long long page; strcpy( out, "..................." ); /** YYYY */ n = fields_find( f, "YEAR", LEVEL_ANY ); if ( n==-1 ) n = fields_find( f, "PARTYEAR", LEVEL_ANY ); if ( n!=-1 ) output_4digit_value( out, atoi( fields_value( f, n, FIELDS_CHRP ) ) ); /** JJJJ */ n = get_journalabbr( f ); if ( n!=-1 ) { i = 0; while ( i<5 && journals[n][i]!=' ' && journals[n][i]!='\t' ) { out[4+i] = journals[n][i]; i++; } } /** VVVV */ n = fields_find( f, "VOLUME", LEVEL_ANY ); if ( n!=-1 ) output_4digit_value( out+9, atoi( fields_value( f, n, FIELDS_CHRP ) ) ); /** MPPPP */ n = fields_find( f, "PAGESTART", LEVEL_ANY ); if ( n==-1 ) n = fields_find( f, "ARTICLENUMBER", LEVEL_ANY ); if ( n!=-1 ) { page = atoll( fields_value( f, n, FIELDS_CHRP ) ); output_4digit_value( out+14, page ); if ( page>=10000 ) { ch = 'a' + (page/10000); out[13] = ch; } } /** A */ ch = toupper( (unsigned char) get_firstinitial( f ) ); if ( ch!='\0' ) out[18] = ch; fprintf( fp, "%s %s\n", adstag, out ); } static void output_easyall( FILE *fp, fields *f, char *tag, char *adstag, int level ) { vplist a; int i; vplist_init( &a ); fields_findv_each( f, level, FIELDS_CHRP, &a, tag ); for ( i=0; i<a.n; ++i ) fprintf( fp, "%s %s\n", adstag, (char *) vplist_get( &a, i ) ); vplist_free( &a ); } static void output_easy( FILE *fp, fields *f, char *tag, char *adstag, int level ) { char *value = fields_findv( f, level, FIELDS_CHRP, tag ); if ( value && value[0]!='\0' ) fprintf( fp, "%s %s\n", adstag, value ); } static void output_keys( FILE *fp, fields *f, char *tag, char *adstag, int level ) { vplist a; int i; vplist_init( &a ); fields_findv_each( f, level, FIELDS_CHRP, &a, tag ); for ( i=0; i<a.n; ++i ) { if ( i==0 ) fprintf( fp, "%s ", adstag ); else fprintf( fp, ", " ); fprintf( fp, "%s", (char *) vplist_get( &a, i ) ); } if ( a.n ) fprintf( fp, "\n" ); vplist_free( &a ); } void adsout_write( fields *f, FILE *fp, param *p, unsigned long refnum ) { int type; fields_clearused( f ); type = get_type( f ); output_people( fp, f, "AUTHOR", "AUTHOR:ASIS", "AUTHOR:CORP", "%A", LEVEL_MAIN ); output_people( fp, f, "EDITOR", "EDITOR:ASIS", "EDITOR:CORP", "%E", LEVEL_ANY ); output_easy( fp, f, "TITLE", "%T", LEVEL_ANY ); if ( type==TYPE_ARTICLE || type==TYPE_MAGARTICLE ) output_title( fp, f, "TITLE", "SUBTITLE", "%J", LEVEL_HOST ); output_date( fp, f, "%D", LEVEL_ANY ); output_easy( fp, f, "VOLUME", "%V", LEVEL_ANY ); output_easy( fp, f, "ISSUE", "%N", LEVEL_ANY ); output_easy( fp, f, "NUMBER", "%N", LEVEL_ANY ); output_easy( fp, f, "LANGUAGE", "%M", LEVEL_ANY ); output_easyall( fp, f, "NOTES", "%X", LEVEL_ANY ); output_easy( fp, f, "ABSTRACT", "%B", LEVEL_ANY ); output_keys( fp, f, "KEYWORD", "%K", LEVEL_ANY ); output_easyall( fp, f, "URL", "%U", LEVEL_ANY ); output_easyall( fp, f, "FILEATTACH", "%U", LEVEL_ANY ); output_easyall( fp, f, "FIGATTACH", "%U", LEVEL_ANY ); output_pages( fp, f ); output_easyall( fp, f, "DOI", "%Y", LEVEL_ANY ); fprintf( fp, "%%W PHY\n%%G AUTHOR\n" ); output_Rtag( fp, f, "%R", type ); fprintf( fp, "\n" ); fflush( fp ); } void adsout_writeheader( FILE *outptr, param *p ) { if ( p->utf8bom ) utf8_writebom( outptr ); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������hs-bibutils-5.5/bibutils/isiin.h��������������������������������������������������������������������0000644�0000000�0000000�00000001376�12445605732�015116� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * isiin.h * * Copyright (c) Chris Putnam 2004-2013 * * Source code released under the GPL version 2 * */ #ifndef ISIIN_H #define ISIIN_H #include "newstr.h" #include "fields.h" #include "reftypes.h" #include "bibutils.h" extern int isiin_readf( FILE *fp, char *buf, int bufsize, int *bufpos, newstr *line, newstr *reference, int *fcharset ); extern int isiin_typef( fields *isiin, char *filename, int nref, param *p, variants *all, int nall ); extern int isiin_convertf( fields *isiin, fields *info, int reftype, param *p, variants *all, int nall ); extern int isiin_processf( fields *isiin, char *p, char *filename, long nref ); extern void isiin_initparams( param *p, const char *progname ); extern variants isi_all[]; extern int isi_nall; #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hs-bibutils-5.5/bibutils/wordout.h������������������������������������������������������������������0000644�0000000�0000000�00000001044�12445605732�015476� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * wordout.h * * Copyright (c) Chris Putnam 2008-2013 * * Source code released under the GPL version 2 * */ #ifndef WORDOUT_H #define WORDOUT_H /* format-specific options */ #define WORDOUT_DROPKEY (2) #include <stdio.h> #include "bibl.h" #include "bibutils.h" extern void wordout_writeheader( FILE *outptr, param *p ); extern void wordout_writefooter( FILE *outptr ); extern void wordout_write( fields *info, FILE *outptr, param *p, unsigned long numrefs ); extern void wordout_initparams( param *p, const char *progname ); #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hs-bibutils-5.5/bibutils/vplist.c�������������������������������������������������������������������0000644�0000000�0000000�00000006614�12445605732�015317� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * vplist.c * * Version: 4/08/2013 * * Copyright (c) Chris Putnam 2011-2013 * * Source code released under the GPL version 2 * * Implements a simple managed array of pointers to void * */ #include <stdlib.h> #include <assert.h> #include "vplist.h" void vplist_init( vplist *vpl ) { assert( vpl ); vpl->data = NULL; vpl->n = vpl->max = 0; } vplist * vplist_new( void ) { vplist *vpl; vpl = ( vplist * ) malloc( sizeof( vplist ) ); if ( vpl ) vplist_init( vpl ); return vpl; } int vplist_find( vplist *vpl, void *v ) { int i; assert( vpl ); for ( i=0; i<vpl->n; ++i ) if ( vpl->data[i]==v ) return i; return -1; } int vplist_copy( vplist *to, vplist *from ) { int i; assert( to ); assert( from ); if ( from->n > to->max ) { if ( to->max ) free( to->data ); to->data = ( void ** ) malloc( sizeof( void * ) * from->n ); if ( !to->data ) return 0; to->max = from->n; } for ( i=0; i<from->n; ++i ) to->data[i] = from->data[i]; to->n = from->n; return 1; } int vplist_append( vplist *to, vplist *from ) { int i, ok; assert( to ); assert( from ); for ( i=0; i<from->n; ++i ) { ok = vplist_add( to, from->data[i] ); if ( !ok ) return 0; } return 1; } static int vplist_validindex( vplist *vpl, int n ) { if ( n < 0 || n >= vpl->n ) return 0; return 1; } static int vplist_alloc( vplist *vpl ) { int alloc = 20; vpl->data = ( void ** ) malloc( sizeof( void * ) * alloc ); if ( !vpl->data ) return 0; vpl->max = alloc; vpl->n = 0; return 1; } static int vplist_realloc( vplist *vpl ) { void **more; int alloc = vpl->max * 2; more = ( void ** ) realloc( vpl->data, sizeof( void * ) * alloc ); if ( !more ) return 0; vpl->data = more; vpl->max = alloc; return 1; } int vplist_add( vplist *vpl, void *v ) { int ok = 1; assert( vpl ); /* ensure sufficient space */ if ( vpl->max==0 ) ok = vplist_alloc( vpl ); else if ( vpl->n >= vpl->max ) ok = vplist_realloc( vpl ); if ( ok ) { vpl->data[vpl->n] = v; vpl->n++; } return ok; } void * vplist_get( vplist *vpl, int n ) { assert( vpl ); if ( !vplist_validindex( vpl, n ) ) return NULL; return vpl->data[ n ]; } void vplist_set( vplist *vpl, int n, void *v ) { assert( vpl ); if ( !vplist_validindex( vpl, n ) ) return; vpl->data[ n ] = v; } void vplist_remove( vplist *vpl, int n ) { int i; assert( vpl ); if ( !vplist_validindex( vpl, n ) ) return; for ( i=n+1; i<vpl->n; ++i ) vpl->data[ i-1 ] = vpl->data[ i ]; vpl->n -= 1; } void vplist_removevp( vplist *vpl, void *v ) { int n; assert( vpl ); do { n = vplist_find( vpl, v ); if ( n!=-1 ) vplist_remove( vpl, n ); } while ( n!=-1 ); } static void vplist_freemembers( vplist *vpl, vplist_ptrfree vpf ) { int i; for ( i=0; i<vpl->n; ++i ) (*vpf)( vplist_get( vpl, i ) ); } void vplist_empty( vplist *vpl ) { assert( vpl ); vpl->n = 0; } void vplist_emptyfn( vplist *vpl, vplist_ptrfree vpf ) { assert( vpl ); vplist_freemembers( vpl, vpf ); vplist_empty( vpl ); } void vplist_free( vplist *vpl ) { assert( vpl ); if ( vpl->data ) free( vpl->data ); vplist_init( vpl ); } void vplist_freefn( vplist *vpl, vplist_ptrfree vpf ) { assert( vpl ); vplist_freemembers( vpl, vpf ); vplist_free( vpl ); } void vplist_destroy( vplist **vpl ) { assert( *vpl ); vplist_free( *vpl ); free( *vpl ); *vpl = NULL; } void vplist_destroyfn( vplist **vpl, vplist_ptrfree vpf ) { assert( *vpl ); vplist_freemembers( *vpl, vpf ); vplist_destroy( vpl ); } ��������������������������������������������������������������������������������������������������������������������hs-bibutils-5.5/bibutils/bibtexin.h�����������������������������������������������������������������0000644�0000000�0000000�00000001604�12445605732�015601� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * bibtexin.h * * Copyright (c) Chris Putnam 2003-2014 * * Source code released under the GPL version 2 * */ #ifndef BIBTEXIN_H #define BIBTEXIN_H #include "newstr.h" #include "list.h" #include "fields.h" #include "bibl.h" #include "bibutils.h" #include "reftypes.h" extern int bibtexin_convertf( fields *bibin, fields *info, int reftype, param *p, variants *all, int nall ); extern int bibtexin_processf( fields *bibin, char *data, char *filename, long nref ); extern int bibtexin_cleanf( bibl *bin, param *p ); extern int bibtexin_readf( FILE *fp, char *buf, int bufsize, int *bufpos, newstr *line, newstr *reference, int *fcharset ); extern int bibtexin_typef( fields *bibin, char *filename, int nrefs, param *p, variants *all, int nall ); extern void bibtexin_initparams( param *p, const char *progname ); extern variants bibtex_all[]; extern int bibtex_nall; #endif ����������������������������������������������������������������������������������������������������������������������������hs-bibutils-5.5/bibutils/endout.c�������������������������������������������������������������������0000644�0000000�0000000�00000064654�12445605732�015304� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * endout.c * * Copyright (c) Chris Putnam 2004-2013 * * Program and source code released under the GPL version 2 * */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include "utf8.h" #include "newstr.h" #include "strsearch.h" #include "fields.h" #include "doi.h" #include "name.h" #include "endout.h" void endout_initparams( param *p, const char *progname ) { p->writeformat = BIBL_ENDNOTEOUT; p->format_opts = 0; p->charsetout = BIBL_CHARSET_DEFAULT; p->charsetout_src = BIBL_SRC_DEFAULT; p->latexout = 0; p->utf8out = BIBL_CHARSET_UTF8_DEFAULT; p->utf8bom = BIBL_CHARSET_BOM_DEFAULT; p->xmlout = BIBL_XMLOUT_FALSE; p->nosplittitle = 0; p->verbose = 0; p->addcount = 0; p->singlerefperfile = 0; if ( p->charsetout == BIBL_CHARSET_UNICODE ) { p->utf8out = p->utf8bom = 1; } p->headerf = endout_writeheader; p->footerf = NULL; p->writef = endout_write; } enum { TYPE_UNKNOWN = 0, TYPE_GENERIC, /* Generic */ TYPE_ARTWORK, /* Artwork */ TYPE_AUDIOVISUAL, /* Audiovisual Material */ TYPE_BILL, /* Bill */ TYPE_BOOK, /* Book */ TYPE_INBOOK, /* Book Section */ TYPE_CASE, /* Case */ TYPE_CHARTTABLE, /* Chart or Table */ TYPE_CLASSICALWORK, /* Classical Work */ TYPE_PROGRAM, /* Computer Program */ TYPE_INPROCEEDINGS, /* Conference Paper */ TYPE_PROCEEDINGS, /* Conference Proceedings */ TYPE_EDITEDBOOK, /* Edited Book */ TYPE_EQUATION, /* Equation */ TYPE_ELECTRONICARTICLE, /* Electronic Article */ TYPE_ELECTRONICBOOK, /* Electronic Book */ TYPE_ELECTRONIC, /* Electronic Source */ TYPE_FIGURE, /* Figure */ TYPE_FILMBROADCAST, /* Film or Broadcast */ TYPE_GOVERNMENT, /* Government Document */ TYPE_HEARING, /* Hearing */ TYPE_ARTICLE, /* Journal Article */ TYPE_LEGALRULE, /* Legal Rule/Regulation */ TYPE_MAGARTICLE, /* Magazine Article */ TYPE_MANUSCRIPT, /* Manuscript */ TYPE_MAP, /* Map */ TYPE_NEWSARTICLE, /* Newspaper Article */ TYPE_ONLINEDATABASE, /* Online Database */ TYPE_ONLINEMULTIMEDIA, /* Online Multimedia */ TYPE_PATENT, /* Patent */ TYPE_COMMUNICATION, /* Personal Communication */ TYPE_REPORT, /* Report */ TYPE_STATUTE, /* Statute */ TYPE_THESIS, /* Thesis */ TYPE_MASTERSTHESIS, /* Thesis */ TYPE_PHDTHESIS, /* Thesis */ TYPE_DIPLOMATHESIS, /* Thesis */ TYPE_DOCTORALTHESIS, /* Thesis */ TYPE_HABILITATIONTHESIS, /* Thesis */ TYPE_UNPUBLISHED, /* Unpublished Work */ }; static void write_type( FILE *fp, int type ) { switch( type ) { case TYPE_UNKNOWN: fprintf( fp, "TYPE_UNKNOWN" ); break; case TYPE_GENERIC: fprintf( fp, "TYPE_GENERIC" ); break; case TYPE_ARTWORK: fprintf( fp, "TYPE_ARTWORK" ); break; case TYPE_AUDIOVISUAL: fprintf( fp, "TYPE_AUDIOVISUAL" ); break; case TYPE_BILL: fprintf( fp, "TYPE_BILL" ); break; case TYPE_BOOK: fprintf( fp, "TYPE_BOOK" ); break; case TYPE_INBOOK: fprintf( fp, "TYPE_INBOOK" ); break; case TYPE_CASE: fprintf( fp, "TYPE_CASE" ); break; case TYPE_CHARTTABLE: fprintf( fp, "TYPE_CHARITABLE" ); break; case TYPE_CLASSICALWORK: fprintf( fp, "TYPE_CLASSICALWORK" ); break; case TYPE_PROGRAM: fprintf( fp, "TYPE_PROGRAM" ); break; case TYPE_INPROCEEDINGS: fprintf( fp, "TYPE_INPROCEEDINGS" ); break; case TYPE_PROCEEDINGS: fprintf( fp, "TYPE_PROCEEDINGS" ); break; case TYPE_EDITEDBOOK: fprintf( fp, "TYPE_EDITEDBOOK" ); break; case TYPE_EQUATION: fprintf( fp, "TYPE_EQUATION" ); break; case TYPE_ELECTRONICARTICLE: fprintf( fp, "TYPE_ELECTRONICARTICLE" ); break; case TYPE_ELECTRONICBOOK: fprintf( fp, "TYPE_ELECTRONICBOOK" ); break; case TYPE_ELECTRONIC: fprintf( fp, "TYPE_ELECTRONIC" ); break; case TYPE_FIGURE: fprintf( fp, "TYPE_FIGURE" ); break; case TYPE_FILMBROADCAST: fprintf( fp, "TYPE_FILMBROADCAST" ); break; case TYPE_GOVERNMENT: fprintf( fp, "TYPE_GOVERNMENT" ); break; case TYPE_HEARING: fprintf( fp, "TYPE_HEARING" ); break; case TYPE_ARTICLE: fprintf( fp, "TYPE_ARTICLE" ); break; case TYPE_LEGALRULE: fprintf( fp, "TYPE_LEGALRULE" ); break; case TYPE_MAGARTICLE: fprintf( fp, "TYPE_MAGARTICLE" ); break; case TYPE_MANUSCRIPT: fprintf( fp, "TYPE_MANUSCRIPT" ); break; case TYPE_MAP: fprintf( fp, "TYPE_MAP" ); break; case TYPE_NEWSARTICLE: fprintf( fp, "TYPE_NEWSARTICLE" ); break; case TYPE_ONLINEDATABASE: fprintf( fp, "TYPE_ONLINEDATABASE" ); break; case TYPE_ONLINEMULTIMEDIA: fprintf( fp, "TYPE_ONLINEMULTIMEDIA" ); break; case TYPE_PATENT: fprintf( fp, "TYPE_PATENT" ); break; case TYPE_COMMUNICATION: fprintf( fp, "TYPE_COMMUNICATION" ); break; case TYPE_REPORT: fprintf( fp, "TYPE_REPORT" ); break; case TYPE_STATUTE: fprintf( fp, "TYPE_STATUTE" ); break; case TYPE_THESIS: fprintf( fp, "TYPE_THESIS" ); break; case TYPE_MASTERSTHESIS: fprintf( fp, "TYPE_MASTERSTHESIS" ); break; case TYPE_PHDTHESIS: fprintf( fp, "TYPE_PHDTHESIS" ); break; case TYPE_DIPLOMATHESIS: fprintf( fp, "TYPE_DIPLOMATHESIS" ); break; case TYPE_DOCTORALTHESIS: fprintf( fp, "TYPE_DOCTORALTHESIS" ); break; case TYPE_HABILITATIONTHESIS:fprintf( fp, "TYPE_HABILITATIONTHESIS" ); break; case TYPE_UNPUBLISHED: fprintf( fp, "TYPE_UNPUBLISHED" ); break; default: fprintf( fp, "Error - type not in enum" );break; } } typedef struct match_type { char *name; int type; } match_type; static int get_type( fields *info, param *p, unsigned long refnum ) { /* Comment out TYPE_GENERIC entries as that is default, but * keep in source as record of mapping decision. */ match_type match_genres[] = { /* MARC Authority elements */ { "art original", TYPE_ARTWORK }, { "art reproduction", TYPE_ARTWORK }, { "article", TYPE_ARTICLE }, { "atlas", TYPE_MAP }, { "autobiography", TYPE_BOOK }, /* { "bibliography", TYPE_GENERIC },*/ { "biography", TYPE_BOOK }, { "book", TYPE_BOOK }, /* { "calendar", TYPE_GENERIC },*/ /* { "catalog", TYPE_GENERIC },*/ { "chart", TYPE_CHARTTABLE }, /* { "comic or graphic novel", TYPE_GENERIC },*/ /* { "comic strip", TYPE_GENERIC },*/ { "conference publication", TYPE_PROCEEDINGS }, { "database", TYPE_ONLINEDATABASE }, /* { "dictionary", TYPE_GENERIC },*/ { "diorama", TYPE_ARTWORK }, /* { "directory", TYPE_GENERIC },*/ { "discography", TYPE_AUDIOVISUAL }, /* { "drama", TYPE_GENERIC },*/ { "encyclopedia", TYPE_BOOK }, /* { "essay", TYPE_GENERIC }, */ /* { "festschrift", TYPE_GENERIC },*/ { "fiction", TYPE_BOOK }, { "filmography", TYPE_FILMBROADCAST }, { "filmstrip", TYPE_FILMBROADCAST }, /* { "finding aid", TYPE_GENERIC },*/ /* { "flash card", TYPE_GENERIC },*/ { "folktale", TYPE_CLASSICALWORK }, { "font", TYPE_ELECTRONIC }, /* { "game", TYPE_GENERIC },*/ { "government publication", TYPE_GOVERNMENT }, { "graphic", TYPE_FIGURE }, { "globe", TYPE_MAP }, /* { "handbook", TYPE_GENERIC },*/ { "history", TYPE_BOOK }, { "hymnal", TYPE_BOOK }, /* { "humor, satire", TYPE_GENERIC },*/ /* { "index", TYPE_GENERIC },*/ /* { "instruction", TYPE_GENERIC },*/ /* { "interview", TYPE_GENERIC },*/ { "issue", TYPE_ARTICLE }, { "journal", TYPE_ARTICLE }, /* { "kit", TYPE_GENERIC },*/ /* { "language instruction", TYPE_GENERIC },*/ /* { "law report or digest", TYPE_GENERIC },*/ /* { "legal article", TYPE_GENERIC },*/ { "legal case and case notes", TYPE_CASE }, { "legislation", TYPE_BILL }, { "letter", TYPE_COMMUNICATION }, { "loose-leaf", TYPE_GENERIC }, { "map", TYPE_MAP }, /* { "memoir", TYPE_GENERIC },*/ /* { "microscope slide", TYPE_GENERIC },*/ /* { "model", TYPE_GENERIC },*/ { "motion picture", TYPE_AUDIOVISUAL }, { "multivolume monograph", TYPE_BOOK }, { "newspaper", TYPE_NEWSARTICLE }, { "novel", TYPE_BOOK }, /* { "numeric data", TYPE_GENERIC },*/ /* { "offprint", TYPE_GENERIC },*/ { "online system or service", TYPE_ELECTRONIC }, { "patent", TYPE_PATENT }, { "periodical", TYPE_MAGARTICLE }, { "picture", TYPE_ARTWORK }, /* { "poetry", TYPE_GENERIC },*/ { "programmed text", TYPE_PROGRAM }, /* { "realia", TYPE_GENERIC },*/ { "rehearsal", TYPE_AUDIOVISUAL }, /* { "remote sensing image", TYPE_GENERIC },*/ /* { "reporting", TYPE_GENERIC },*/ /* { "review", TYPE_GENERIC },*/ /* { "script", TYPE_GENERIC },*/ /* { "series", TYPE_GENERIC },*/ /* { "short story", TYPE_GENERIC },*/ /* { "slide", TYPE_GENERIC },*/ { "sound", TYPE_AUDIOVISUAL }, /* { "speech", TYPE_GENERIC },*/ /* { "standard or specification", TYPE_GENERIC },*/ /* { "statistics", TYPE_GENERIC },*/ /* { "survey of literature", TYPE_GENERIC },*/ { "technical drawing", TYPE_ARTWORK }, { "techincal report", TYPE_REPORT }, { "thesis", TYPE_THESIS }, /* { "toy", TYPE_GENERIC },*/ /* { "transparency", TYPE_GENERIC },*/ /* { "treaty", TYPE_GENERIC },*/ { "videorecording", TYPE_AUDIOVISUAL }, { "web site", TYPE_ELECTRONIC }, /* Non-MARC Authority elements */ { "academic journal", TYPE_ARTICLE }, { "magazine", TYPE_MAGARTICLE }, { "hearing", TYPE_HEARING }, { "Ph.D. thesis", TYPE_PHDTHESIS }, { "Masters thesis", TYPE_MASTERSTHESIS }, { "Diploma thesis", TYPE_DIPLOMATHESIS }, { "Doctoral thesis", TYPE_DOCTORALTHESIS }, { "Habilitation thesis", TYPE_HABILITATIONTHESIS }, { "communication", TYPE_COMMUNICATION }, { "manuscript", TYPE_MANUSCRIPT }, { "report", TYPE_REPORT }, { "unpublished", TYPE_UNPUBLISHED }, }; int nmatch_genres = sizeof( match_genres ) / sizeof( match_genres[0] ); int i, j, n, maxlevel, type = TYPE_UNKNOWN; char *tag, *data; /* Determine type from genre information */ for ( i=0; i<info->n; ++i ) { tag = info->tag[i].data; if ( strcasecmp( tag, "GENRE" )!=0 && strcasecmp( tag, "NGENRE" )!=0 ) continue; data = info->data[i].data; for ( j=0; j<nmatch_genres; ++j ) { if ( !strcasecmp( data, match_genres[j].name ) ) { type = match_genres[j].type; fields_setused( info, i ); } } if ( p->verbose ) { if ( p->progname ) fprintf( stderr, "%s: ", p->progname ); fprintf( stderr, "Type from tag '%s' data '%s': ", info->tag[i].data, info->data[i].data ); write_type( stderr, type ); fprintf( stderr, "\n" ); } if ( type==TYPE_UNKNOWN ) { if ( !strcasecmp( data, "periodical" ) ) type = TYPE_ARTICLE; else if ( !strcasecmp( data, "thesis" ) ) type = TYPE_THESIS; else if ( !strcasecmp( data, "book" ) ) { if ( info->level[i]==0 ) type = TYPE_BOOK; else type = TYPE_INBOOK; } else if ( !strcasecmp( data, "collection" ) ) { if ( info->level[i]==0 ) type = TYPE_BOOK; else type = TYPE_INBOOK; } if ( type!=TYPE_UNKNOWN ) fields_setused( info, i ); } /* the inbook type should be defined if 'book' in host */ if ( type==TYPE_BOOK && info->level[i]>0 ) type = TYPE_INBOOK; } if ( p->verbose ) { if ( p->progname ) fprintf( stderr, "%s: ", p->progname ); fprintf( stderr, "Type from genre element: " ); write_type( stderr, type ); fprintf( stderr, "\n" ); } /* Determine from resource information */ if ( type==TYPE_UNKNOWN ) { for ( i=0; i<info->n; ++i ) { if ( strcasecmp( info->tag[i].data, "RESOURCE" ) ) continue; data = info->data[i].data; if ( !strcasecmp( data, "moving image" ) ) type = TYPE_FILMBROADCAST; else if ( !strcasecmp( data, "software, multimedia" ) ) type = TYPE_PROGRAM; if ( type!=TYPE_UNKNOWN ) fields_setused( info, i ); } if ( p->verbose ) { if ( p->progname ) fprintf( stderr, "%s: ", p->progname ); fprintf( stderr, "Type from resource element: " ); write_type( stderr, type ); fprintf( stderr, "\n" ); } } /* Determine from issuance information */ if ( type==TYPE_UNKNOWN ) { for ( i=0; i<info->n; ++i ) { if ( strcasecmp( info->tag[i].data, "ISSUANCE" ) ) continue; data = info->data[i].data; if ( !strcasecmp( data, "monographic" ) ) { if ( info->level[i]==0 ) type = TYPE_BOOK; else type = TYPE_INBOOK; } } if ( p->verbose ) { if ( p->progname ) fprintf( stderr, "%s: ", p->progname ); fprintf( stderr, "Type from issuance element: " ); write_type( stderr, type ); fprintf( stderr, "\n" ); } } /* default to generic or book chapter, depending on maxlevel */ if ( type==TYPE_UNKNOWN ) { maxlevel = fields_maxlevel( info ); if ( maxlevel > 0 ) type = TYPE_INBOOK; else { if ( p->progname ) fprintf( stderr, "%s: ", p->progname ); fprintf( stderr, "Cannot identify TYPE in reference %lu ", refnum+1 ); n = fields_find( info, "REFNUM", -1 ); if ( n!=-1 ) fprintf( stderr, " %s", info->data[n].data ); fprintf( stderr, " (defaulting to generic)\n" ); type = TYPE_GENERIC; } } if ( p->verbose ) { if ( p->progname ) fprintf( stderr, "%s: ", p->progname ); fprintf( stderr, "Final type: " ); write_type( stderr, type ); fprintf( stderr, "\n" ); } return type; } static void output_type( FILE *fp, int type, param *p ) { /* These are restricted to Endnote-defined types */ match_type genrenames[] = { { "Generic", TYPE_GENERIC }, { "Artwork", TYPE_ARTWORK }, { "Audiovisual Material", TYPE_AUDIOVISUAL }, { "Bill", TYPE_BILL }, { "Book", TYPE_BOOK }, { "Book Section", TYPE_INBOOK }, { "Case", TYPE_CASE }, { "Chart or Table", TYPE_CHARTTABLE }, { "Classical Work", TYPE_CLASSICALWORK }, { "Computer Program", TYPE_PROGRAM }, { "Conference Paper", TYPE_INPROCEEDINGS }, { "Conference Proceedings", TYPE_PROCEEDINGS }, { "Edited Book", TYPE_EDITEDBOOK }, { "Equation", TYPE_EQUATION }, { "Electronic Article", TYPE_ELECTRONICARTICLE }, { "Electronic Book", TYPE_ELECTRONICBOOK }, { "Electronic Source", TYPE_ELECTRONIC }, { "Figure", TYPE_FIGURE }, { "Film or Broadcast", TYPE_FILMBROADCAST }, { "Government Document", TYPE_GOVERNMENT }, { "Hearing", TYPE_HEARING }, { "Journal Article", TYPE_ARTICLE }, { "Legal Rule/Regulation", TYPE_LEGALRULE }, { "Magazine Article", TYPE_MAGARTICLE }, { "Manuscript", TYPE_MANUSCRIPT }, { "Map", TYPE_MAP }, { "Newspaper Article", TYPE_NEWSARTICLE }, { "Online Database", TYPE_ONLINEDATABASE }, { "Online Multimedia", TYPE_ONLINEMULTIMEDIA }, { "Patent", TYPE_PATENT }, { "Personal Communication", TYPE_COMMUNICATION }, { "Report", TYPE_REPORT }, { "Statute", TYPE_STATUTE }, { "Thesis", TYPE_THESIS }, { "Thesis", TYPE_PHDTHESIS }, { "Thesis", TYPE_MASTERSTHESIS }, { "Thesis", TYPE_DIPLOMATHESIS }, { "Thesis", TYPE_DOCTORALTHESIS }, { "Thesis", TYPE_HABILITATIONTHESIS }, { "Unpublished Work", TYPE_UNPUBLISHED }, }; int ngenrenames = sizeof( genrenames ) / sizeof( genrenames[0] ); int i, found = 0; fprintf( fp, "%%0 "); for ( i=0; i<ngenrenames && !found; ++i ) { if ( genrenames[i].type == type ) { fprintf( fp, "%s", genrenames[i].name ); found = 1; } } if ( !found ) { fprintf( fp, "Generic" ); if ( p->progname ) fprintf( stderr, "%s: ", p->progname ); fprintf( stderr, "Cannot identify type %d\n", type ); } fprintf( fp, "\n" ); } static void output_title( FILE *fp, fields *info, char *full, char *sub, char *endtag, int level ) { newstr *mainttl = fields_findv( info, level, FIELDS_STRP, full ); newstr *subttl = fields_findv( info, level, FIELDS_STRP, sub ); if ( !mainttl ) return; fprintf( fp, "%s %s", endtag, mainttl->data ); if ( subttl ) { if ( mainttl->len > 0 && mainttl->data[ mainttl->len-1 ]!='?' ) fprintf( fp, ":" ); fprintf( fp, " %s", subttl->data ); } fprintf( fp, "\n" ); } static void output_people( FILE *fp, fields *info, char *tag, char *entag, int level ) { newstr oneperson; int i, n, flvl; char *ftag; newstr_init( &oneperson ); n = fields_num( info ); for ( i=0; i<n; ++i ) { flvl = fields_level( info, i ); if ( level!=LEVEL_ANY && flvl!=level ) continue; ftag = fields_tag( info, i, FIELDS_CHRP ); if ( !strcasecmp( ftag, tag ) ) { name_build_withcomma( &oneperson, fields_value( info, i, FIELDS_CHRP ) ); fprintf( fp, "%s %s\n", entag, oneperson.data ); } } newstr_free( &oneperson ); } static void output_pages( FILE *fp, fields *info ) { char *sn = fields_findv( info, LEVEL_ANY, FIELDS_CHRP, "PAGESTART" ); char *en = fields_findv( info, LEVEL_ANY, FIELDS_CHRP, "PAGEEND" ); char *ar; if ( sn || en ) { fprintf( fp, "%%P "); if ( sn ) fprintf( fp, "%s", sn ); if ( sn && en ) fprintf( fp, "-" ); if ( en ) fprintf( fp, "%s", en ); fprintf( fp, "\n" ); } else { ar = fields_findv( info, LEVEL_ANY, FIELDS_CHRP, "ARTICLENUMBER" ); if ( ar ) fprintf( fp, "%%P %s\n", ar ); } } static void output_doi( FILE *fp, fields *f ) { newstr doi_url; int i, n; newstr_init( &doi_url ); n = fields_num( f ); for ( i=0; i<n; ++i ) { if ( !fields_match_tag( f, i, "DOI" ) ) continue; doi_to_url( f, i, "URL", &doi_url ); if ( doi_url.len ) fprintf( fp, "%%U %s\n", doi_url.data ); } newstr_free( &doi_url ); } static void output_pmid( FILE *fp, fields *f ) { newstr pmid_url; int i, n; newstr_init( &pmid_url ); n = fields_num( f ); for ( i=0; i<n; ++i ) { if ( !fields_match_tag( f, i, "PMID" ) ) continue; pmid_to_url( f, i, "URL", &pmid_url ); if ( pmid_url.len ) fprintf( fp, "%%U %s\n", pmid_url.data ); } newstr_free( &pmid_url ); } static void output_arxiv( FILE *fp, fields *f ) { newstr arxiv_url; int i, n; newstr_init( &arxiv_url ); n = fields_num( f ); for ( i=0; i<n; ++i ) { if ( !fields_match_tag( f, i, "ARXIV" ) ) continue; arxiv_to_url( f, i, "URL", &arxiv_url ); if ( arxiv_url.len ) fprintf( fp, "%%U %s\n", arxiv_url.data ); } newstr_free( &arxiv_url ); } static void output_jstor( FILE *fp, fields *f ) { newstr jstor_url; int i, n; newstr_init( &jstor_url ); n = fields_num( f ); for ( i=0; i<n; ++i ) { if ( !fields_match_tag( f, i, "JSTOR" ) ) continue; jstor_to_url( f, i, "URL", &jstor_url ); if ( jstor_url.len ) fprintf( fp, "%%U %s\n", jstor_url.data ); } newstr_free( &jstor_url ); } static void output_year( FILE *fp, fields *info, int level ) { char *year = fields_findv_firstof( info, level, FIELDS_CHRP, "YEAR", "PARTYEAR", NULL ); if ( year ) fprintf( fp, "%%D %s\n", year ); } static void output_monthday( FILE *fp, fields *info, int level ) { char *months[12] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; int m; char *month = fields_findv_firstof( info, level, FIELDS_CHRP, "MONTH", "PARTMONTH", NULL ); char *day = fields_findv_firstof( info, level, FIELDS_CHRP, "DAY", "PARTDAY", NULL ); if ( month || day ) { fprintf( fp, "%%8 " ); if ( month ) { m = atoi( month ); if ( m>0 && m<13 ) fprintf( fp, "%s", months[m-1] ); else fprintf( fp, "%s", month ); } if ( month && day ) fprintf( fp, " " ); if ( day ) fprintf( fp, "%s", day ); fprintf( fp, "\n" ); } } static void output_thesishint( FILE *fp, int type ) { if ( type==TYPE_MASTERSTHESIS ) fprintf( fp, "%%9 Masters thesis\n" ); else if ( type==TYPE_PHDTHESIS ) fprintf( fp, "%%9 Ph.D. thesis\n" ); else if ( type==TYPE_DIPLOMATHESIS ) fprintf( fp, "%%9 Diploma thesis\n" ); else if ( type==TYPE_DOCTORALTHESIS ) fprintf( fp, "%%9 Doctoral thesis\n" ); else if ( type==TYPE_HABILITATIONTHESIS ) fprintf( fp, "%%9 Habilitation thesis\n" ); } static void output_easyall( FILE *fp, fields *info, char *tag, char *entag, int level ) { vplist a; int i; vplist_init( &a ); fields_findv_each( info, level, FIELDS_CHRP, &a, tag ); for ( i=0; i<a.n; ++i ) fprintf( fp, "%s %s\n", entag, (char *) vplist_get( &a, i ) ); vplist_free( &a ); } static void output_easy( FILE *fp, fields *info, char *tag, char *entag, int level ) { char *value = fields_findv( info, level, FIELDS_CHRP, tag ); if ( value ) fprintf( fp, "%s %s\n", entag, value ); } void endout_write( fields *info, FILE *fp, param *p, unsigned long refnum ) { int type; fields_clearused( info ); type = get_type( info, p, refnum ); output_type( fp, type, p ); output_title( fp, info, "TITLE", "SUBTITLE", "%T", LEVEL_MAIN ); output_title( fp, info, "SHORTTITLE", "SHORTSUBTITLE", "%!", LEVEL_MAIN ); output_people( fp, info, "AUTHOR", "%A", LEVEL_MAIN ); output_people( fp, info, "EDITOR", "%E", LEVEL_MAIN ); if ( type==TYPE_ARTICLE || type==TYPE_MAGARTICLE || type==TYPE_ELECTRONICARTICLE || type==TYPE_NEWSARTICLE ) output_people( fp, info, "EDITOR", "%E", LEVEL_HOST ); else if ( type==TYPE_INBOOK || type==TYPE_INPROCEEDINGS ) { output_people( fp, info, "EDITOR", "%E", LEVEL_HOST ); } else { output_people( fp, info, "EDITOR", "%Y", LEVEL_HOST ); } output_people( fp, info, "TRANSLATOR", "%H", LEVEL_ANY ); output_people( fp, info, "AUTHOR", "%Y", LEVEL_SERIES ); output_people( fp, info, "EDITOR", "%Y", LEVEL_SERIES ); if ( type==TYPE_CASE ) output_easy( fp, info, "AUTHOR:CORP", "%I", LEVEL_MAIN ); else if ( type==TYPE_HEARING ) output_easyall( fp, info, "AUTHOR:CORP", "%S", LEVEL_MAIN ); else if ( type==TYPE_NEWSARTICLE ) output_people( fp, info, "REPORTER", "%A", LEVEL_MAIN ); else if ( type==TYPE_COMMUNICATION ) output_people( fp, info, "RECIPIENT", "%E", LEVEL_ANY ); else { output_easyall( fp, info, "AUTHOR:CORP", "%A", LEVEL_MAIN ); output_easyall( fp, info, "AUTHOR:ASIS", "%A", LEVEL_MAIN ); output_easyall( fp, info, "EDITOR:CORP", "%E", LEVEL_ANY ); output_easyall( fp, info, "EDITOR:ASIS", "%E", LEVEL_ANY ); output_easyall( fp, info, "TRANSLATOR:CORP", "%H", LEVEL_ANY ); output_easyall( fp, info, "TRANSLATOR:ASIS", "%H", LEVEL_ANY ); } if ( type==TYPE_ARTICLE || type==TYPE_MAGARTICLE || type==TYPE_ELECTRONICARTICLE || type==TYPE_NEWSARTICLE ) output_title( fp, info, "TITLE", "SUBTITLE", "%J", LEVEL_HOST ); else if ( type==TYPE_INBOOK || type==TYPE_INPROCEEDINGS ) { output_title( fp, info, "TITLE", "SUBTITLE", "%B", LEVEL_HOST ); } else { output_title( fp, info, "TITLE", "SUBTITLE", "%S", LEVEL_HOST ); } if ( type!=TYPE_CASE && type!=TYPE_HEARING ) { output_title( fp, info, "TITLE", "SUBTITLE", "%S", LEVEL_SERIES ); } output_year( fp, info, LEVEL_ANY ); output_monthday( fp, info, LEVEL_ANY ); output_easy( fp, info, "VOLUME", "%V", LEVEL_ANY ); output_easy( fp, info, "ISSUE", "%N", LEVEL_ANY ); output_easy( fp, info, "NUMBER", "%N", LEVEL_ANY ); output_easy( fp, info, "EDITION", "%7", LEVEL_ANY ); output_easy( fp, info, "PUBLISHER", "%I", LEVEL_ANY ); output_easy( fp, info, "ADDRESS", "%C", LEVEL_ANY ); output_easy( fp, info, "DEGREEGRANTOR", "%C", LEVEL_ANY ); output_easy( fp, info, "DEGREEGRANTOR:CORP", "%C", LEVEL_ANY ); output_easy( fp, info, "DEGREEGRANTOR:ASIS", "%C", LEVEL_ANY ); output_easy( fp, info, "SERIALNUMBER", "%@", LEVEL_ANY ); output_easy( fp, info, "ISSN", "%@", LEVEL_ANY ); output_easy( fp, info, "ISBN", "%@", LEVEL_ANY ); output_easy( fp, info, "LANGUAGE", "%G", LEVEL_ANY ); output_easy( fp, info, "REFNUM", "%F", LEVEL_ANY ); output_easyall( fp, info, "NOTES", "%O", LEVEL_ANY ); output_easy( fp, info, "ABSTRACT", "%X", LEVEL_ANY ); output_easy( fp, info, "CLASSIFICATION", "%L", LEVEL_ANY ); output_easyall( fp, info, "KEYWORD", "%K", LEVEL_ANY ); output_easyall( fp, info, "NGENRE", "%9", LEVEL_ANY ); output_thesishint( fp, type ); output_easyall( fp, info, "DOI", "%R", LEVEL_ANY ); output_easyall( fp, info, "URL", "%U", LEVEL_ANY ); output_easyall( fp, info, "FILEATTACH", "%U", LEVEL_ANY ); output_doi( fp, info ); output_pmid( fp, info ); output_arxiv( fp, info ); output_jstor( fp, info ); output_pages( fp, info ); fprintf( fp, "\n" ); fflush( fp ); } void endout_writeheader( FILE *outptr, param *p ) { if ( p->utf8bom ) utf8_writebom( outptr ); } ������������������������������������������������������������������������������������hs-bibutils-5.5/bibutils/risout.h�������������������������������������������������������������������0000644�0000000�0000000�00000000634�12445605732�015324� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * risout.h * * Copyright (c) Chris Putnam 2005-2013 * * Source code released under the GPL version 2 * */ #ifndef RISOUT_H #define RISOUT_H #include <stdio.h> #include "bibutils.h" extern void risout_write( fields *info, FILE *fp, param *p, unsigned long refnum ); extern void risout_writeheader( FILE *outptr, param *p ); extern void risout_initparams( param *p, const char *progname ); #endif ����������������������������������������������������������������������������������������������������hs-bibutils-5.5/bibutils/gb18030.c������������������������������������������������������������������0000644�0000000�0000000�00000013454�12445605732�014762� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include <stdio.h> #include "gb18030.h" /* GB18030-2000 is an encoding of Unicode character used in China * * {0x00-0x7f} are one byte characters identical to US-ASCII * {0x80} is properly undefined, but many GB18030 encodings make * it the Euro sign (Unicode 0x20AC), so use that * {0x81-0xFE}{0x40-0x7E,0x80-0xFE} a full superset of GBK (with fallback * mappings) * {0x81-0xFE}{0x30-0x39}{0x81-0xFE}{0x30-0x39} maps linearly to ISO 10646 * GB+81308130 = U+0080 up to U+FFFF * GB+90308130 = U+10000 up to U+10FFFF skipping mappings already * defined in 1-byte and 2-byte areas. * * Truth is it's a bit of a mess algorithmically as it doesn't multiply * encode characters, so there are holes in the Unicode mapping that * should be avoided. */ /* This is a "small" region that needs explicit enumeration */ #include "gb18030_enumeration.c" static int in_range( unsigned char n, unsigned char low, unsigned char high ) { if ( n < low || n > high ) return 0; return 1; } /* Get GB 18030 from Unicode Value in Table */ static int gb18030_unicode_table_lookup( unsigned int unicode, unsigned char out[4] ) { int i, j; if ( unicode >= 0x0080 && unicode <= 0xFFE5 ) { /* list is sorted, so should do binary search here */ for ( i=0; i<ngb18030_enums; ++i ) { if ( unicode == gb18030_enums[i].unicode ) { for ( j=0; j<gb18030_enums[i].len; ++j ) out[j] = gb18030_enums[i].bytes[j]; return gb18030_enums[i].len; } } } return 0; } static int gb18030_match( unsigned char *s, const unsigned char *bytes, unsigned char len ) { int i; for ( i=0; i<len; ++i ) if ( ( s[i])!=bytes[i] ) return 0; return 1; } static unsigned int gb18030_table_lookup( unsigned char *uc, unsigned char len, int *found ) { unsigned int i; *found = 0; for ( i=0; i<ngb18030_enums; ++i ) { if ( gb18030_enums[i].len!=len ) continue; if ( gb18030_match( &(uc[0]), gb18030_enums[i].bytes, len ) ) { *found = 1; return gb18030_enums[i].unicode; } } return '?'; } static int gb18030_unicode_range_lookup( unsigned int unicode, unsigned char out[4] ) { return 0; } static int gb18030_range_lookup( unsigned char *s, /* unsigned char len = 4 only */ int *found ) { *found = 0; return 0; #if 0 <!-- Roundtrip-mappings that can be enumerated Note that GB 18030 defines roundtrip mappings for all Unicode code points U+0000..U+10ffff. This would require 1.1 million <a> elements. However, most four-byte GB 18030 mappings can be enumerated efficiently within distinct ranges. Therefore, we use <range> elements for all but the 31000 or so assignments above. --> <range uFirst="0452" uLast="200F" bFirst="81 30 D3 30" bLast="81 36 A5 31" bMin="81 30 81 30" bMax="FE 39 FE 39"/> <range uFirst="2643" uLast="2E80" bFirst="81 37 A8 39" bLast="81 38 FD 38" bMin="81 30 81 30" bMax="FE 39 FE 39"/> <range uFirst="361B" uLast="3917" bFirst="82 30 A6 33" bLast="82 30 F2 37" bMin="81 30 81 30" bMax="FE 39 FE 39"/> <range uFirst="3CE1" uLast="4055" bFirst="82 31 D4 38" bLast="82 32 AF 32" bMin="81 30 81 30" bMax="FE 39 FE 39"/> <range uFirst="4160" uLast="4336" bFirst="82 32 C9 37" bLast="82 32 F8 37" bMin="81 30 81 30" bMax="FE 39 FE 39"/> <range uFirst="44D7" uLast="464B" bFirst="82 33 A3 39" bLast="82 33 C9 31" bMin="81 30 81 30" bMax="FE 39 FE 39"/> <range uFirst="478E" uLast="4946" bFirst="82 33 E8 38" bLast="82 34 96 38" bMin="81 30 81 30" bMax="FE 39 FE 39"/> <range uFirst="49B8" uLast="4C76" bFirst="82 34 A1 31" bLast="82 34 E7 33" bMin="81 30 81 30" bMax="FE 39 FE 39"/> <range uFirst="9FA6" uLast="D7FF" bFirst="82 35 8F 33" bLast="83 36 C7 38" bMin="81 30 81 30" bMax="FE 39 FE 39"/> <range uFirst="E865" uLast="F92B" bFirst="83 36 D0 30" bLast="84 30 85 34" bMin="81 30 81 30" bMax="FE 39 FE 39"/> <range uFirst="FA2A" uLast="FE2F" bFirst="84 30 9C 38" bLast="84 31 85 37" bMin="81 30 81 30" bMax="FE 39 FE 39"/> <range uFirst="FFE6" uLast="FFFF" bFirst="84 31 A2 34" bLast="84 31 A4 39" bMin="81 30 81 30" bMax="FE 39 FE 39"/> <range uFirst="10000" uLast="10FFFF" bFirst="90 30 81 30" bLast="E3 32 9A 35" bMin="81 30 81 30" bMax="FE 39 FE 39"/> #endif } unsigned int gb18030_to_unicode( unsigned char *s, unsigned char len ) { unsigned int ret; int found; ret = gb18030_table_lookup( s, len, &found ); if ( !found && len==4 ) { ret = gb18030_range_lookup( s, &found ); if ( !found ) ret = '?'; } return ret; } /* * Convert unicode character to gb18030 * * returns number of characters for output */ int gb18030_encode( unsigned int unicode, unsigned char out[4] ) { int len; if ( unicode < 0x80 ) { out[0] = unicode; len = 1; } else { len = gb18030_unicode_table_lookup( unicode, out ); if ( !len ) len = gb18030_unicode_range_lookup( unicode, out ); } return len; } /* * Decode a gb18030 character into unicode */ unsigned int gb18030_decode( char *s, unsigned int *pi ) { unsigned int c; unsigned char uc[4]; int i = *pi; uc[0] = ( unsigned char ) s[i]; if ( ( uc[0] & 128 ) == 0 ) { c = ( unsigned int ) uc[0]; i += 1; } else if ( uc[0] == 0x80 ) { c = 0x20AC; i += 1; } else if ( uc[0] != 0xFF ) { /* multi-byte character */ uc[1] = ( unsigned char ) s[i+1]; uc[2] = ( unsigned char ) s[i+2]; uc[3]= ( unsigned char ) s[i+3]; if ( in_range( uc[1], 0x40, 0x7e ) || in_range( uc[1], 0x80, 0xfe ) ) { /* two-byte character */ c = gb18030_to_unicode( &(uc[0]), 2 ); i += 2; } else if ( in_range( uc[1], 0x30, 0x39 ) && in_range( uc[2], 0x81, 0xfe ) && in_range( uc[3], 0x30, 0x39 ) ) { /* four-byte character */ c = gb18030_to_unicode( &(uc[0]), 4 ); i += 4; } else { /* this is an illegal character */ c = '?'; i += 1; } } else { /* s[i]==0xFF */ /* this is an illegal character */ c = '?'; i += 1; } *pi = i; return c; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hs-bibutils-5.5/bibutils/title.c��������������������������������������������������������������������0000644�0000000�0000000�00000002570�12445605732�015114� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * title.c * * process titles into title/subtitle pairs for MODS * * Copyright (c) Chris Putnam 2004-2014 * * Source code released under the GPL version 2 * */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "newstr.h" #include "fields.h" #include "title.h" #include "is_ws.h" int title_process( fields *info, char *tag, char *data, int level, unsigned char nosplittitle ) { newstr title, subtitle; char *p, *q; int status; newstr_init( &title ); newstr_init( &subtitle ); if ( nosplittitle ) q = NULL; else { q = strstr( data, ": " ); if ( !q ) q = strstr( data, "? " ); } if ( !q ) newstr_strcpy( &title, data ); else { p = data; while ( p!=q ) newstr_addchar( &title, *p++ ); if ( *q=='?' ) newstr_addchar( &title, '?' ); q++; q = skip_ws( q ); while ( *q ) newstr_addchar( &subtitle, *q++ ); } if ( strncasecmp( "SHORT", tag, 5 ) ) { if ( title.len>0 ) { status = fields_add( info, "TITLE", title.data, level ); if ( status!=FIELDS_OK ) return 0; } if ( subtitle.len>0 ) { status = fields_add( info, "SUBTITLE", subtitle.data, level ); if ( status!=FIELDS_OK ) return 0; } } else { if ( title.len>0 ) { status = fields_add( info, "SHORTTITLE", title.data, level ); if ( status!=FIELDS_OK ) return 0; } /* no SHORT-SUBTITLE! */ } newstr_free( &subtitle ); newstr_free( &title ); return 1; } ����������������������������������������������������������������������������������������������������������������������������������������hs-bibutils-5.5/bibutils/isiout.c�������������������������������������������������������������������0000644�0000000�0000000�00000021067�12445605732�015311� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * isiout.c * * Copyright (c) Chris Putnam 2008-2013 * * Source code released under the GPL version 2 * */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include "utf8.h" #include "newstr.h" #include "strsearch.h" #include "fields.h" #include "bibutils.h" #include "isiout.h" void isiout_initparams( param *p, const char *progname ) { p->writeformat = BIBL_ISIOUT; p->format_opts = 0; p->charsetout = BIBL_CHARSET_DEFAULT; p->charsetout_src = BIBL_SRC_DEFAULT; p->latexout = 0; p->utf8out = BIBL_CHARSET_UTF8_DEFAULT; p->utf8bom = BIBL_CHARSET_BOM_DEFAULT; p->xmlout = BIBL_XMLOUT_FALSE; p->nosplittitle = 0; p->verbose = 0; p->addcount = 0; p->singlerefperfile = 0; if ( p->charsetout == BIBL_CHARSET_UNICODE ) { p->utf8out = p->utf8bom = 1; } p->headerf = isiout_writeheader; p->footerf = NULL; p->writef = isiout_write; } enum { TYPE_UNKNOWN = 0, TYPE_ARTICLE = 1, TYPE_INBOOK = 2, TYPE_BOOK = 3, }; static void output_type( FILE *fp, int type ) { fprintf( fp, "PT " ); if ( type==TYPE_ARTICLE ) fprintf( fp, "Journal" ); else if ( type==TYPE_INBOOK ) fprintf( fp, "Chapter" ); else if ( type==TYPE_BOOK ) fprintf( fp, "Book" ); else fprintf( fp, "Unknown" ); fprintf( fp, "\n" ); } static int get_type( fields *f ) { int type = TYPE_UNKNOWN, i, n, level; char *tag, *value; n = fields_num( f ); for ( i=0; i<n; ++i ) { tag = fields_tag( f, i, FIELDS_CHRP ); if ( strcasecmp( tag, "GENRE" ) && strcasecmp( tag, "NGENRE") ) continue; value = fields_value( f, i, FIELDS_CHRP ); level = fields_level( f, i ); if ( !strcasecmp( value, "periodical" ) || !strcasecmp( value, "academic journal" ) || !strcasecmp( value, "journal article" ) ) { type = TYPE_ARTICLE; } else if ( !strcasecmp( value, "book" ) ) { if ( level==0 ) type=TYPE_BOOK; else type=TYPE_INBOOK; } else if ( !strcasecmp( value, "book chapter" ) ) { type = TYPE_INBOOK; } } return type; } static void output_titlecore( FILE *fp, fields *f, char *isitag, int level, char *maintag, char *subtag ) { newstr *mainttl = fields_findv( f, level, FIELDS_STRP, maintag ); newstr *subttl = fields_findv( f, level, FIELDS_STRP, subtag ); if ( !mainttl ) return; fprintf( fp, "%s %s", isitag, mainttl->data ); if ( subttl ) { if ( mainttl->len > 0 && mainttl->data[ mainttl->len - 1 ]!='?' ) fprintf( fp, ":" ); fprintf( fp, " %s", subttl->data ); } fprintf( fp, "\n" ); } static void output_title( FILE *fp, fields *f, char *isitag, int level ) { output_titlecore( fp, f, isitag, level, "TITLE", "SUBTITLE" ); } static void output_abbrtitle( FILE *fp, fields *f, char *isitag, int level ) { output_titlecore( fp, f, isitag, level, "SHORTTITLE", "SHORTSUBTITLE" ); } static void output_keywords( FILE *fp, fields *f ) { vplist kw; int i; vplist_init( &kw ); fields_findv_each( f, LEVEL_ANY, FIELDS_CHRP, &kw, "KEYWORD" ); if ( kw.n ) { fprintf( fp, "DE " ); for ( i=0; i<kw.n; ++i ) { if ( i>0 ) fprintf( fp, "; " ); fprintf( fp, "%s", (char *)vplist_get( &kw, i ) ); } fprintf( fp, "\n" ); } vplist_free( &kw ); } static void output_person( FILE *fp, char *name ) { newstr family, given, suffix; char *p = name; newstrs_init( &family, &given, &suffix, NULL ); while ( *p && *p!='|' ) newstr_addchar( &family, *p++ ); while ( *p=='|' && *(p+1)!='|' ) { p++; if ( *p!='|' ) newstr_addchar( &given, *p++ ); while ( *p && *p!='|' ) p++; } if ( *p=='|' && *(p+1)=='|' ) { p += 2; while ( *p && *p!='|' ) newstr_addchar( &suffix, *p++ ); } if ( family.len ) fprintf( fp, "%s", family.data ); if ( suffix.len ) { if ( family.len ) fprintf( fp, " %s", suffix.data ); else fprintf( fp, "%s", suffix.data ); } if ( given.len ) fprintf( fp, ", %s", given.data ); newstrs_free( &family, &given, &suffix, NULL ); } static void output_people( FILE *fp, fields *f, char *tag, char *isitag, int level ) { vplist people; int i; vplist_init( &people ); fields_findv_each( f, level, FIELDS_CHRP, &people, tag ); if ( people.n ) { fprintf( fp, "%s ", isitag ); for ( i=0; i<people.n; ++i ) { if ( i!=0 ) fprintf( fp, " " ); output_person( fp, (char *)vplist_get( &people, i ) ); fprintf( fp, "\n" ); } } vplist_free( &people ); } static void output_easy( FILE *fp, fields *f, char *tag, char *isitag, int level ) { char *value = fields_findv( f, level, FIELDS_CHRP, tag ); if ( value ) fprintf( fp, "%s %s\n", isitag, value ); } static void output_easyall( FILE *fp, fields *f, char *tag, char *isitag, int level ) { vplist a; int i; vplist_init( &a ); fields_findv_each( f, level, FIELDS_CHRP, &a, tag ); for ( i=0; i<a.n; ++i ) fprintf( fp, "%s %s\n", isitag, (char *) vplist_get( &a, i ) ); vplist_free( &a ); } static void output_date( FILE *fp, fields *f ) { char *month = fields_findv_firstof( f, LEVEL_ANY, FIELDS_CHRP, "PARTMONTH", "MONTH", NULL ); char *year = fields_findv_firstof( f, LEVEL_ANY, FIELDS_CHRP, "PARTYEAR", "YEAR", NULL ); if ( month ) fprintf( fp, "PD %s\n", month ); if ( year ) fprintf( fp, "PY %s\n", year ); } static void output_verbose( fields *f, unsigned long refnum ) { char *tag, *value; int i, n, level; fprintf( stderr, "REF #%lu----\n", refnum+1 ); n = fields_num( f ); for ( i=0; i<n; ++i ) { tag = fields_tag( f, i, FIELDS_CHRP_NOUSE ); value = fields_value( f, i, FIELDS_CHRP_NOUSE ); level = fields_level( f, i ); fprintf( stderr, "\t'%s'\t'%s'\t%d\n", tag, value, level ); } } void isiout_write( fields *f, FILE *fp, param *p, unsigned long refnum ) { int type = get_type( f ); if ( p->format_opts & BIBL_FORMAT_VERBOSE ) output_verbose( f, refnum ); output_type( fp, type ); output_people( fp, f, "AUTHOR", "AU", 0 ); output_easyall( fp, f, "AUTHOR:CORP", "AU", 0 ); output_easyall( fp, f, "AUTHOR:ASIS", "AU", 0 ); /* output_people( fp, f, "AUTHOR", "A2", 1 ); output_people( fp, f, "AUTHOR:CORP", "A2", 1 ); output_people( fp, f, "AUTHOR:ASIS", "A2", 1 ); output_people( fp, f, "AUTHOR", "A3", 2 ); output_people( fp, f, "AUTHOR:CORP", "A3", 2 ); output_people( fp, f, "AUTHOR:ASIS", "A3", 2 ); output_people( fp, f, "EDITOR", "ED", -1 ); output_people( fp, f, "EDITOR:CORP", "ED", -1 ); output_people( fp, f, "EDITOR:ASIS", "ED", -1 );*/ /* output_date( fp, f, refnum );*/ output_title( fp, f, "TI", 0 ); if ( type==TYPE_ARTICLE ) { output_title( fp, f, "SO", 1 ); output_abbrtitle( fp, f, "JI", 1 ); output_title( fp, f, "SE", 2 ); } else if ( type==TYPE_INBOOK ) { output_title( fp, f, "BT", 1 ); output_title( fp, f, "SE", 2 ); } else { /* type==BOOK */ output_title( fp, f, "SE", 1 ); } output_date( fp, f ); /* output_easy( fp, f, "PARTMONTH", "PD", -1 ); output_easy( fp, f, "PARTYEAR", "PY", -1 );*/ output_easy( fp, f, "PAGESTART", "BP", -1 ); output_easy( fp, f, "PAGEEND", "EP", -1 ); output_easy( fp, f, "ARTICLENUMBER", "AR", -1 ); /* output article number as pages */ output_easy( fp, f, "TOTALPAGES","PG", -1 ); output_easy( fp, f, "VOLUME", "VL", -1 ); output_easy( fp, f, "ISSUE", "IS", -1 ); output_easy( fp, f, "NUMBER", "IS", -1 ); output_easy( fp, f, "DOI", "DI", -1 ); output_easy( fp, f, "ISIREFNUM", "UT", -1 ); output_easy( fp, f, "LANGUAGE", "LA", -1 ); output_easy( fp, f, "ISIDELIVERNUM", "GA", -1 ); output_keywords( fp, f ); output_easy( fp, f, "ABSTRACT", "AB", -1 ); output_easy( fp, f, "TIMESCITED", "TC", -1 ); output_easy( fp, f, "NUMBERREFS", "NR", -1 ); output_easy( fp, f, "CITEDREFS", "CR", -1 ); output_easy( fp, f, "ADDRESS", "PI", -1 ); /* output_easy( fp, f, "PUBLISHER", "PB", -1 ); output_easy( fp, f, "DEGREEGRANTOR", "PB", -1 ); output_easy( fp, f, "ADDRESS", "CY", -1 ); output_easy( fp, f, "ABSTRACT", "AB", -1 ); output_easy( fp, f, "ISSN", "SN", -1 ); output_easy( fp, f, "ISBN", "SN", -1 ); output_easyall( fp, f, "URL", "UR", -1 ); output_easyall( fp, f, "FILEATTACH", "UR", -1 ); output_pubmed( fp, f, refnum ); output_easyall( fp, f, "NOTES", "N1", -1 ); output_easyall( fp, f, "REFNUM", "ID", -1 );*/ fprintf( fp, "ER\n\n" ); fflush( fp ); } void isiout_writeheader( FILE *outptr, param *p ) { if ( p->utf8bom ) utf8_writebom( outptr ); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hs-bibutils-5.5/bibutils/bibtextypes.c��������������������������������������������������������������0000644�0000000�0000000�00000077370�12445605732�016347� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * bibtypes.c * * Copyright (c) Chris Putnam 2003-2013 * * Program and source code released under the GPL version 2 * */ #include <stdio.h> #include "fields.h" #include "reftypes.h" /* Entry types from the IEEEtran Bibtex Style + others as observed */ /* * Journal Article */ static lookups article[] = { { "author", "AUTHOR", PERSON, LEVEL_MAIN }, { "translator", "TRANSLATOR",PERSON, LEVEL_MAIN }, { "title", "TITLE", TITLE, LEVEL_MAIN }, { "year", "PARTYEAR", SIMPLE, LEVEL_MAIN }, { "month", "PARTMONTH", SIMPLE, LEVEL_MAIN }, { "day", "PARTDAY", SIMPLE, LEVEL_MAIN }, { "volume", "VOLUME", SIMPLE, LEVEL_MAIN }, { "pages", "PAGES", PAGES, LEVEL_MAIN }, { "number", "ISSUE", SIMPLE, LEVEL_MAIN }, { "issue", "ISSUE", SIMPLE, LEVEL_MAIN }, { "journal", "TITLE", TITLE, LEVEL_HOST }, { "publisher", "PUBLISHER", SIMPLE, LEVEL_HOST }, { "address", "ADDRESS", SIMPLE, LEVEL_HOST }, { "issn", "ISSN", SIMPLE, LEVEL_HOST }, { "abstract", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "contents", "CONTENTS", SIMPLE, LEVEL_MAIN }, { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "note", "NOTES", BT_NOTE, LEVEL_MAIN }, { "annote", "ANNOTE", SIMPLE, LEVEL_MAIN }, { "location", "LOCATION", SIMPLE, LEVEL_MAIN }, { "ftp", "", BT_URL, LEVEL_MAIN }, { "url", "", BT_URL, LEVEL_MAIN }, { "pdf", "FILEATTACH",SIMPLE, LEVEL_MAIN }, { "sentelink", "FILEATTACH",BT_SENTE, LEVEL_MAIN }, { "file", "FILEATTACH",LINKEDFILE, LEVEL_MAIN }, { "howpublished", "", HOWPUBLISHED, LEVEL_MAIN }, { "doi", "DOI", SIMPLE, LEVEL_MAIN }, { "key", "BIBKEY", SIMPLE, LEVEL_MAIN }, { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN }, { "crossref", "CROSSREF", SIMPLE, LEVEL_MAIN }, { "keywords", "KEYWORD", KEYWORD, LEVEL_MAIN }, { "", "INTERNAL_TYPE|ARTICLE", ALWAYS, LEVEL_MAIN }, { "", "ISSUANCE|continuing", ALWAYS, LEVEL_HOST }, { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { "", "NGENRE|journal article", ALWAYS, LEVEL_MAIN }, { "", "GENRE|periodical", ALWAYS, LEVEL_HOST }, { "", "NGENRE|academic journal", ALWAYS, LEVEL_HOST } }; /* Book */ static lookups book[] = { { "author", "AUTHOR", PERSON, LEVEL_MAIN }, { "translator", "TRANSLATOR",PERSON, LEVEL_MAIN }, { "title", "TITLE", TITLE, LEVEL_MAIN }, { "booktitle", "TITLE", TITLE, LEVEL_MAIN }, { "series", "TITLE", TITLE, LEVEL_HOST }, { "publisher", "PUBLISHER", SIMPLE, LEVEL_MAIN }, { "organization", "ORGANIZER:CORP", BT_ORG, LEVEL_MAIN }, { "address", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "editor", "EDITOR", PERSON, LEVEL_MAIN }, { "year", "YEAR", SIMPLE, LEVEL_MAIN }, { "month", "MONTH", SIMPLE, LEVEL_MAIN }, { "day", "DAY", SIMPLE, LEVEL_MAIN }, { "volume", "VOLUME", SIMPLE, LEVEL_MAIN }, { "number", "NUMBER", SIMPLE, LEVEL_MAIN }, { "isbn", "ISBN", SIMPLE, LEVEL_MAIN }, { "lccn", "LCCN", SIMPLE, LEVEL_MAIN }, { "edition", "EDITION", SIMPLE, LEVEL_MAIN }, { "abstract", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "contents", "CONTENTS", SIMPLE, LEVEL_MAIN }, { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "location", "LOCATION", SIMPLE, LEVEL_MAIN }, { "note", "NOTES", BT_NOTE, LEVEL_MAIN }, { "annote", "ANNOTE", SIMPLE, LEVEL_MAIN }, { "type", "GENRE", SIMPLE, LEVEL_MAIN }, { "key", "BIBKEY", SIMPLE, LEVEL_MAIN }, { "ftp", "", BT_URL, LEVEL_MAIN }, { "url", "", BT_URL, LEVEL_MAIN }, { "pdf", "FILEATTACH",SIMPLE, LEVEL_MAIN }, { "sentelink", "FILEATTACH",BT_SENTE, LEVEL_MAIN }, { "file", "FILEATTACH",LINKEDFILE, LEVEL_MAIN }, { "address", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "howpublished", "", HOWPUBLISHED, LEVEL_MAIN }, { "doi", "DOI", SIMPLE, LEVEL_MAIN }, { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN }, { "crossref", "CROSSREF", SIMPLE, LEVEL_MAIN }, { "keywords", "KEYWORD", KEYWORD, LEVEL_MAIN }, { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN }, { "", "INTERNAL_TYPE|BOOK", ALWAYS, LEVEL_MAIN }, { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { "", "ISSUANCE|monographic", ALWAYS, LEVEL_MAIN }, { "", "GENRE|book", ALWAYS, LEVEL_MAIN } }; /* Technical reports */ static lookups report[] = { { "author", "AUTHOR", PERSON, LEVEL_MAIN }, { "translator", "TRANSLATOR",PERSON, LEVEL_MAIN }, { "title", "TITLE", TITLE, LEVEL_MAIN }, { "booktitle", "TITLE", TITLE, LEVEL_MAIN }, { "series", "TITLE", TITLE, LEVEL_HOST }, { "editor", "EDITOR", PERSON, LEVEL_MAIN }, { "publisher", "PUBLISHER", SIMPLE, LEVEL_MAIN }, { "institution", "PUBLISHER", SIMPLE, LEVEL_MAIN }, { "address", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "year", "YEAR", SIMPLE, LEVEL_MAIN }, { "month", "MONTH", SIMPLE, LEVEL_MAIN }, { "day", "DAY", SIMPLE, LEVEL_MAIN }, { "number", "NUMBER", SIMPLE, LEVEL_MAIN }, { "isbn", "ISBN", SIMPLE, LEVEL_MAIN }, { "lccn", "LCCN", SIMPLE, LEVEL_MAIN }, { "abstract", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "contents", "CONTENTS", SIMPLE, LEVEL_MAIN }, { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "location", "LOCATION", SIMPLE, LEVEL_MAIN }, { "note", "NOTES", BT_NOTE, LEVEL_MAIN }, { "annote", "ANNOTE", SIMPLE, LEVEL_MAIN }, { "key", "BIBKEY", SIMPLE, LEVEL_MAIN }, { "doi", "DOI", SIMPLE, LEVEL_MAIN }, { "ftp", "", BT_URL, LEVEL_MAIN }, { "url", "", BT_URL, LEVEL_MAIN }, { "pdf", "FILEATTACH",SIMPLE, LEVEL_MAIN }, { "sentelink", "FILEATTACH",BT_SENTE, LEVEL_MAIN }, { "file", "FILEATTACH",LINKEDFILE, LEVEL_MAIN }, { "howpublished", "", HOWPUBLISHED, LEVEL_MAIN }, { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN }, { "crossref", "CROSSREF", SIMPLE, LEVEL_MAIN }, { "type", "GENRE", SIMPLE, LEVEL_MAIN }, { "keywords", "KEYWORD", KEYWORD, LEVEL_MAIN }, { "", "INTERNAL_TYPE|REPORT", ALWAYS, LEVEL_MAIN }, { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { "", "GENRE|report", ALWAYS, LEVEL_MAIN } }; static lookups manual[] = { { "author", "AUTHOR", PERSON, LEVEL_MAIN }, { "translator", "TRANSLATOR",PERSON, LEVEL_MAIN }, { "title", "TITLE", TITLE, LEVEL_MAIN }, { "booktitle", "TITLE", TITLE, LEVEL_MAIN }, { "editor", "EDITOR", PERSON, LEVEL_MAIN }, { "publisher", "PUBLISHER", SIMPLE, LEVEL_MAIN }, { "organization", "ORGANIZER:CORP", BT_ORG, LEVEL_MAIN }, { "address", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "year", "YEAR", SIMPLE, LEVEL_MAIN }, { "month", "MONTH", SIMPLE, LEVEL_MAIN }, { "day", "DAY", SIMPLE, LEVEL_MAIN }, { "isbn", "ISBN", SIMPLE, LEVEL_MAIN }, { "lccn", "LCCN", SIMPLE, LEVEL_MAIN }, { "edition", "EDITION", SIMPLE, LEVEL_MAIN }, { "abstract", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "contents", "CONTENTS", SIMPLE, LEVEL_MAIN }, { "location", "LOCATION", SIMPLE, LEVEL_MAIN }, { "note", "NOTES", BT_NOTE, LEVEL_MAIN }, { "annote", "ANNOTE", SIMPLE, LEVEL_MAIN }, { "key", "BIBKEY", SIMPLE, LEVEL_MAIN }, { "doi", "DOI", SIMPLE, LEVEL_MAIN }, { "ftp", "", BT_URL, LEVEL_MAIN }, { "url", "", BT_URL, LEVEL_MAIN }, { "pdf", "FILEATTACH",SIMPLE, LEVEL_MAIN }, { "sentelink", "FILEATTACH",BT_SENTE, LEVEL_MAIN }, { "file", "FILEATTACH",LINKEDFILE, LEVEL_MAIN }, { "howpublished", "", HOWPUBLISHED, LEVEL_MAIN }, { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN }, { "crossref", "CROSSREF", SIMPLE, LEVEL_MAIN }, { "keywords", "KEYWORD", KEYWORD, LEVEL_MAIN }, { "", "INTERNAL_TYPE|REPORT", ALWAYS, LEVEL_MAIN }, { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { "", "GENRE|instruction", ALWAYS, LEVEL_MAIN } }; /* Part of a book (e.g. chapter or section) */ static lookups inbook[] = { { "author", "AUTHOR", PERSON, LEVEL_MAIN }, { "translator", "TRANSLATOR",PERSON, LEVEL_MAIN }, { "editor", "EDITOR", PERSON, LEVEL_HOST }, { "chapter", "CHAPTER", SIMPLE, LEVEL_MAIN }, { "title", "TITLE", TITLE, LEVEL_HOST }, { "booktitle", "TITLE", TITLE, LEVEL_HOST }, { "series", "TITLE", TITLE, LEVEL_SERIES }, { "publisher", "PUBLISHER", SIMPLE, LEVEL_HOST }, { "address", "ADDRESS", SIMPLE, LEVEL_HOST }, { "year", "YEAR", SIMPLE, LEVEL_HOST }, { "month", "MONTH", SIMPLE, LEVEL_HOST }, { "day", "DAY", SIMPLE, LEVEL_HOST }, { "volume", "VOLUME", SIMPLE, LEVEL_SERIES }, { "number", "NUMBER", SIMPLE, LEVEL_SERIES }, { "pages", "PAGES", PAGES, LEVEL_HOST }, { "isbn", "ISBN", SIMPLE, LEVEL_HOST }, { "lccn", "LCCN", SIMPLE, LEVEL_HOST }, { "edition", "EDITION", SIMPLE, LEVEL_HOST }, { "abstract", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "contents", "CONTENTS", SIMPLE, LEVEL_HOST }, { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "location", "LOCATION", SIMPLE, LEVEL_HOST }, { "doi", "DOI", SIMPLE, LEVEL_MAIN }, { "ftp", "", BT_URL, LEVEL_MAIN }, { "url", "", BT_URL, LEVEL_MAIN }, { "pdf", "FILEATTACH",SIMPLE, LEVEL_MAIN }, { "sentelink", "FILEATTACH",BT_SENTE, LEVEL_MAIN }, { "file", "FILEATTACH",LINKEDFILE, LEVEL_MAIN }, { "howpublished", "", HOWPUBLISHED, LEVEL_MAIN }, { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN }, { "crossref", "CROSSREF", SIMPLE, LEVEL_MAIN }, { "type", "GENRE", SIMPLE, LEVEL_MAIN }, { "note", "NOTES", BT_NOTE, LEVEL_MAIN }, { "annote", "ANNOTE", SIMPLE, LEVEL_MAIN }, { "key", "BIBKEY", SIMPLE, LEVEL_MAIN }, { "keywords", "KEYWORD", KEYWORD, LEVEL_MAIN }, { "", "INTERNAL_TYPE|INBOOK", ALWAYS, LEVEL_MAIN }, { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { "", "ISSUANCE|monographic", ALWAYS, LEVEL_HOST }, { "", "NGENRE|book chapter", ALWAYS, LEVEL_MAIN }, { "", "GENRE|book", ALWAYS, LEVEL_HOST } }; /* References of papers in conference proceedings */ static lookups inproceedings[] = { { "author", "AUTHOR", PERSON, LEVEL_MAIN }, { "translator", "TRANSLATOR",PERSON, LEVEL_MAIN }, { "editor", "EDITOR", PERSON, LEVEL_HOST }, { "title", "TITLE", TITLE, LEVEL_MAIN }, { "booktitle", "TITLE", TITLE, LEVEL_HOST }, { "series", "TITLE", TITLE, LEVEL_SERIES }, { "chapter", "CHAPTER", SIMPLE, LEVEL_MAIN }, { "publisher", "PUBLISHER", SIMPLE, LEVEL_HOST }, { "organization", "ORGANIZER:CORP", BT_ORG, LEVEL_HOST }, { "address", "ADDRESS", SIMPLE, LEVEL_HOST }, { "year", "PARTYEAR", SIMPLE, LEVEL_MAIN }, { "month", "PARTMONTH", SIMPLE, LEVEL_MAIN }, { "day", "PARTDAY", SIMPLE, LEVEL_MAIN }, { "volume", "VOLUME", SIMPLE, LEVEL_MAIN }, { "number", "NUMBER", SIMPLE, LEVEL_MAIN }, { "pages", "PAGES", PAGES, LEVEL_MAIN }, { "isbn", "ISBN", SIMPLE, LEVEL_HOST }, { "lccn", "LCCN", SIMPLE, LEVEL_HOST }, { "abstract", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "contents", "CONTENTS", SIMPLE, LEVEL_HOST }, { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "paper", "PAPER", SIMPLE, LEVEL_MAIN }, { "location", "LOCATION", SIMPLE, LEVEL_HOST }, { "doi", "DOI", SIMPLE, LEVEL_MAIN }, { "ftp", "", BT_URL, LEVEL_MAIN }, { "url", "", BT_URL, LEVEL_MAIN }, { "pdf", "FILEATTACH",SIMPLE, LEVEL_MAIN }, { "sentelink", "FILEATTACH",BT_SENTE, LEVEL_MAIN }, { "file", "FILEATTACH",LINKEDFILE, LEVEL_MAIN }, { "type", "GENRE", SIMPLE, LEVEL_MAIN }, { "note", "NOTES", BT_NOTE, LEVEL_MAIN }, { "annote", "ANNOTE", SIMPLE, LEVEL_MAIN }, { "key", "BIBKEY", SIMPLE, LEVEL_MAIN }, { "howpublished", "", HOWPUBLISHED, LEVEL_MAIN }, { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN }, { "crossref", "CROSSREF", SIMPLE, LEVEL_MAIN }, { "keywords", "KEYWORD", KEYWORD, LEVEL_MAIN }, { "", "INTERNAL_TYPE|INPROCEEDINGS", ALWAYS, LEVEL_MAIN }, { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { "", "GENRE|conference publication", ALWAYS, LEVEL_HOST } }; /* Used for a section of a book with its own title */ static lookups incollection[] = { { "author", "AUTHOR", PERSON, LEVEL_MAIN }, { "translator", "TRANSLATOR",PERSON, LEVEL_MAIN }, { "editor", "EDITOR", PERSON, LEVEL_HOST }, { "title", "TITLE", TITLE, LEVEL_MAIN }, { "chapter", "CHAPTER", SIMPLE, LEVEL_MAIN }, { "booktitle", "TITLE", TITLE, LEVEL_HOST }, { "series", "TITLE", TITLE, LEVEL_SERIES }, { "publisher", "PUBLISHER", SIMPLE, LEVEL_HOST }, { "address", "ADDRESS", SIMPLE, LEVEL_HOST }, { "year", "YEAR", SIMPLE, LEVEL_HOST }, { "month", "MONTH", SIMPLE, LEVEL_HOST }, { "day", "DAY", SIMPLE, LEVEL_HOST }, { "volume", "VOLUME", SIMPLE, LEVEL_MAIN }, { "number", "NUMBER", SIMPLE, LEVEL_MAIN }, { "pages", "PAGES", PAGES, LEVEL_MAIN }, { "isbn", "ISBN", SIMPLE, LEVEL_HOST }, { "lccn", "LCCN", SIMPLE, LEVEL_HOST }, { "edition", "EDITION", SIMPLE, LEVEL_HOST }, { "abstract", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "contents", "CONTENTS", SIMPLE, LEVEL_HOST }, { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "type", "GENRE", SIMPLE, LEVEL_MAIN }, { "note", "NOTES", BT_NOTE, LEVEL_MAIN }, { "annote", "ANNOTE", SIMPLE, LEVEL_MAIN }, { "key", "BIBKEY", SIMPLE, LEVEL_MAIN }, { "doi", "DOI", SIMPLE, LEVEL_MAIN }, { "ftp", "", BT_URL, LEVEL_MAIN }, { "url", "", BT_URL, LEVEL_MAIN }, { "pdf", "FILEATTACH",SIMPLE, LEVEL_MAIN }, { "sentelink", "FILEATTACH",BT_SENTE, LEVEL_MAIN }, { "file", "FILEATTACH",LINKEDFILE, LEVEL_MAIN }, { "location", "LOCATION", SIMPLE, LEVEL_HOST }, { "howpublished", "", HOWPUBLISHED, LEVEL_MAIN }, { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN }, { "crossref", "CROSSREF", SIMPLE, LEVEL_MAIN }, { "keywords", "KEYWORD", KEYWORD, LEVEL_MAIN }, { "", "INTERNAL_TYPE|INCOLLECTION", ALWAYS, LEVEL_MAIN }, { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { "", "ISSUANCE|monographic", ALWAYS, LEVEL_MAIN }, { "", "GENRE|collection", ALWAYS, LEVEL_HOST } }; /* Proceedings */ static lookups proceedings[] = { { "author", "AUTHOR", PERSON, LEVEL_MAIN }, { "translator", "TRANSLATOR",PERSON, LEVEL_MAIN }, { "editor", "EDITOR", PERSON, LEVEL_MAIN }, { "title", "TITLE", TITLE, LEVEL_MAIN }, { "booktitle", "TITLE", TITLE, LEVEL_MAIN }, { "series", "TITLE", TITLE, LEVEL_HOST }, { "publisher", "PUBLISHER", SIMPLE, LEVEL_MAIN }, { "organization", "ORGANIZER:CORP", BT_ORG, LEVEL_MAIN }, { "address", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "year", "YEAR", SIMPLE, LEVEL_MAIN }, { "month", "MONTH", SIMPLE, LEVEL_MAIN }, { "day", "DAY", SIMPLE, LEVEL_MAIN }, { "volume", "VOLUME", SIMPLE, LEVEL_MAIN }, { "number", "NUMBER", SIMPLE, LEVEL_MAIN }, { "pages", "PAGES", PAGES, LEVEL_MAIN }, { "isbn", "ISBN", SIMPLE, LEVEL_MAIN }, { "lccn", "LCCN", SIMPLE, LEVEL_MAIN }, { "abstract", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "contents", "CONTENTS", SIMPLE, LEVEL_MAIN }, { "doi", "DOI", SIMPLE, LEVEL_MAIN }, { "ftp", "", BT_URL, LEVEL_MAIN }, { "url", "", BT_URL, LEVEL_MAIN }, { "pdf", "FILEATTACH",SIMPLE, LEVEL_MAIN }, { "sentelink", "FILEATTACH",BT_SENTE, LEVEL_MAIN }, { "file", "FILEATTACH",LINKEDFILE, LEVEL_MAIN }, { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "howpublished", "", HOWPUBLISHED, LEVEL_MAIN }, { "location", "LOCATION", SIMPLE, LEVEL_MAIN }, { "note", "NOTES", BT_NOTE, LEVEL_MAIN }, { "annote", "ANNOTE", SIMPLE, LEVEL_MAIN }, { "key", "BIBKEY", SIMPLE, LEVEL_MAIN }, { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN }, { "crossref", "CROSSREF", SIMPLE, LEVEL_MAIN }, { "keywords", "KEYWORD", KEYWORD, LEVEL_MAIN }, { "", "INTERNAL_TYPE|PROCEEDINGS", ALWAYS, LEVEL_MAIN }, { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { "", "GENRE|conference publication", ALWAYS, LEVEL_MAIN } }; static lookups phds[] = { { "author", "AUTHOR", PERSON, LEVEL_MAIN }, { "translator", "TRANSLATOR",PERSON, LEVEL_MAIN }, { "title", "TITLE", TITLE, LEVEL_MAIN }, { "year", "YEAR", SIMPLE, LEVEL_MAIN }, { "month", "MONTH", SIMPLE, LEVEL_MAIN }, { "day", "DAY", SIMPLE, LEVEL_MAIN }, { "school", "DEGREEGRANTOR:ASIS",SIMPLE, LEVEL_MAIN }, { "address", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "abstract", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "contents", "CONTENTS", SIMPLE, LEVEL_MAIN }, { "doi", "DOI", SIMPLE, LEVEL_MAIN }, { "ftp", "", BT_URL, LEVEL_MAIN }, { "url", "", BT_URL, LEVEL_MAIN }, { "pdf", "FILEATTACH",SIMPLE, LEVEL_MAIN }, { "sentelink", "FILEATTACH",BT_SENTE, LEVEL_MAIN }, { "file", "FILEATTACH",LINKEDFILE, LEVEL_MAIN }, { "howpublished", "" , HOWPUBLISHED, LEVEL_MAIN }, { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "location", "LOCATION", SIMPLE, LEVEL_MAIN }, { "note", "NOTES", BT_NOTE, LEVEL_MAIN }, { "annote", "ANNOTE", SIMPLE, LEVEL_MAIN }, { "key", "BIBKEY", SIMPLE, LEVEL_MAIN }, { "type", "GENRE", SIMPLE, LEVEL_MAIN }, { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN }, { "crossref", "CROSSREF", SIMPLE, LEVEL_MAIN }, { "keywords", "KEYWORD", KEYWORD, LEVEL_MAIN }, { "", "INTERNAL_TYPE|THESIS", ALWAYS, LEVEL_MAIN }, { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { "", "GENRE|thesis", ALWAYS, LEVEL_MAIN }, { "", "NGENRE|Ph.D. thesis", DEFAULT, LEVEL_MAIN } }; static lookups masters[] = { { "author", "AUTHOR", PERSON, LEVEL_MAIN }, { "translator", "TRANSLATOR",PERSON, LEVEL_MAIN }, { "title", "TITLE", TITLE, LEVEL_MAIN }, { "year", "YEAR", SIMPLE, LEVEL_MAIN }, { "month", "MONTH", SIMPLE, LEVEL_MAIN }, { "day", "DAY", SIMPLE, LEVEL_MAIN }, { "school", "DEGREEGRANTOR:ASIS",SIMPLE, LEVEL_MAIN }, { "address", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "abstract", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "contents", "CONTENTS", SIMPLE, LEVEL_MAIN }, { "doi", "DOI", SIMPLE, LEVEL_MAIN }, { "ftp", "", BT_URL, LEVEL_MAIN }, { "url", "", BT_URL, LEVEL_MAIN }, { "pdf", "FILEATTACH",SIMPLE, LEVEL_MAIN }, { "sentelink", "FILEATTACH",BT_SENTE, LEVEL_MAIN }, { "file", "FILEATTACH",LINKEDFILE, LEVEL_MAIN }, { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "location", "LOCATION", SIMPLE, LEVEL_MAIN }, { "note", "NOTES", BT_NOTE, LEVEL_MAIN }, { "annote", "ANNOTE", SIMPLE, LEVEL_MAIN }, { "key", "BIBKEY", SIMPLE, LEVEL_MAIN }, { "type", "GENRE", SIMPLE, LEVEL_MAIN }, { "howpublished", "", HOWPUBLISHED, LEVEL_MAIN }, { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN }, { "crossref", "CROSSREF", SIMPLE, LEVEL_MAIN }, { "keywords", "KEYWORD", KEYWORD, LEVEL_MAIN }, { "", "INTERNAL_TYPE|THESIS", ALWAYS, LEVEL_MAIN }, { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { "", "GENRE|thesis", ALWAYS, LEVEL_MAIN }, { "", "NGENRE|Masters thesis", DEFAULT, LEVEL_MAIN } }; /* Unpublished */ static lookups unpublished[] = { { "author", "AUTHOR", PERSON, LEVEL_MAIN }, { "translator", "TRANSLATOR",PERSON, LEVEL_MAIN }, { "title", "TITLE", TITLE, LEVEL_MAIN }, { "booktitle", "TITLE", TITLE, LEVEL_MAIN }, { "publisher", "PUBLISHER", SIMPLE, LEVEL_MAIN }, { "address", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "editor", "EDITOR", PERSON, LEVEL_MAIN }, { "year", "YEAR", SIMPLE, LEVEL_MAIN }, { "month", "MONTH", SIMPLE, LEVEL_MAIN }, { "day", "DAY", SIMPLE, LEVEL_MAIN }, { "abstract", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "contents", "CONTENTS", SIMPLE, LEVEL_MAIN }, { "doi", "DOI", SIMPLE, LEVEL_MAIN }, { "ftp", "", BT_URL, LEVEL_MAIN }, { "url", "", BT_URL, LEVEL_MAIN }, { "pdf", "FILEATTACH",SIMPLE, LEVEL_MAIN }, { "sentelink", "FILEATTACH",BT_SENTE, LEVEL_MAIN }, { "file", "FILEATTACH",LINKEDFILE, LEVEL_MAIN }, { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "howpublished", "", HOWPUBLISHED, LEVEL_MAIN }, { "location", "LOCATION", SIMPLE, LEVEL_MAIN }, { "note", "NOTES", BT_NOTE, LEVEL_MAIN }, { "annote", "ANNOTE", SIMPLE, LEVEL_MAIN }, { "key", "BIBKEY", SIMPLE, LEVEL_MAIN }, { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN }, { "crossref", "CROSSREF", SIMPLE, LEVEL_MAIN }, { "keywords", "KEYWORD", KEYWORD, LEVEL_MAIN }, { "", "INTERNAL_TYPE|BOOK", ALWAYS, LEVEL_MAIN }, { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { "", "GENRE|unpublished", ALWAYS, LEVEL_MAIN } }; /* * For Published Standards */ static lookups standard[] = { { "author", "AUTHOR", PERSON, LEVEL_MAIN }, { "translator", "TRANSLATOR",PERSON, LEVEL_MAIN }, { "organization", "ORGANIZER:CORP", BT_ORG, LEVEL_MAIN }, { "institution", "AUTHOR:CORP", SIMPLE, LEVEL_MAIN }, { "title", "TITLE", TITLE, LEVEL_MAIN }, { "booktitle", "TITLE", TITLE, LEVEL_MAIN }, { "publisher", "PUBLISHER", SIMPLE, LEVEL_MAIN }, { "address", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "editor", "EDITOR", PERSON, LEVEL_MAIN }, { "year", "YEAR", SIMPLE, LEVEL_MAIN }, { "month", "MONTH", SIMPLE, LEVEL_MAIN }, { "day", "DAY", SIMPLE, LEVEL_MAIN }, { "isbn", "ISBN", SIMPLE, LEVEL_MAIN }, { "lccn", "LCCN", SIMPLE, LEVEL_MAIN }, { "abstract", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "contents", "CONTENTS", SIMPLE, LEVEL_MAIN }, { "doi", "DOI", SIMPLE, LEVEL_MAIN }, { "ftp", "", BT_URL, LEVEL_MAIN }, { "url", "", BT_URL, LEVEL_MAIN }, { "pdf", "FILEATTACH",SIMPLE, LEVEL_MAIN }, { "sentelink", "FILEATTACH",BT_SENTE, LEVEL_MAIN }, { "file", "FILEATTACH",LINKEDFILE, LEVEL_MAIN }, { "howpublished", "", HOWPUBLISHED, LEVEL_MAIN }, { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN }, { "type", "GENRE", SIMPLE, LEVEL_MAIN }, { "number", "NUMBER", TITLE, LEVEL_MAIN }, { "revision", "REVISION", TITLE, LEVEL_MAIN }, { "location", "LOCATION", SIMPLE, LEVEL_MAIN }, { "note", "NOTES", BT_NOTE, LEVEL_MAIN }, { "annote", "ANNOTE", SIMPLE, LEVEL_MAIN }, { "key", "BIBKEY", SIMPLE, LEVEL_MAIN }, { "keywords", "KEYWORD", KEYWORD, LEVEL_MAIN }, { "crossref", "CROSSREF", SIMPLE, LEVEL_MAIN }, { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { "", "INTERNAL_TYPE|STANDARD", ALWAYS, LEVEL_MAIN } }; /* * For Journals and Magazines */ static lookups periodical[] = { { "title", "TITLE", TITLE, LEVEL_MAIN }, { "translator", "TRANSLATOR",PERSON, LEVEL_MAIN }, { "series", "TITLE", TITLE, LEVEL_HOST }, { "publisher", "PUBLISHER", SIMPLE, LEVEL_MAIN }, { "address", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "editor", "EDITOR", PERSON, LEVEL_MAIN }, { "year", "YEAR", SIMPLE, LEVEL_MAIN }, { "month", "MONTH", SIMPLE, LEVEL_MAIN }, { "day", "DAY", SIMPLE, LEVEL_MAIN }, { "issn", "ISSN", SIMPLE, LEVEL_MAIN }, { "abstract", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "volume", "VOLUME", TITLE, LEVEL_MAIN }, { "number", "NUMBER", TITLE, LEVEL_MAIN }, { "contents", "CONTENTS", SIMPLE, LEVEL_MAIN }, { "doi", "DOI", SIMPLE, LEVEL_MAIN }, { "ftp", "", BT_URL, LEVEL_MAIN }, { "url", "", BT_URL, LEVEL_MAIN }, { "pdf", "FILEATTACH",SIMPLE, LEVEL_MAIN }, { "sentelink", "FILEATTACH",BT_SENTE, LEVEL_MAIN }, { "file", "FILEATTACH",LINKEDFILE, LEVEL_MAIN }, { "howpublished", "", HOWPUBLISHED, LEVEL_MAIN }, { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN }, { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "note", "NOTES", BT_NOTE, LEVEL_MAIN }, { "annote", "ANNOTE", SIMPLE, LEVEL_MAIN }, { "organization", "ORGANIZER:CORP", BT_ORG, LEVEL_MAIN }, { "crossref", "CROSSREF", SIMPLE, LEVEL_MAIN }, { "keywords", "KEYWORD", KEYWORD, LEVEL_MAIN }, { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { "", "GENRE|periodical", ALWAYS, LEVEL_MAIN } }; /* * For Patent */ static lookups patent[] = { { "author", "AUTHOR", PERSON, LEVEL_MAIN }, { "translator", "TRANSLATOR",PERSON, LEVEL_MAIN }, { "assignee", "ASSIGNEE", PERSON, LEVEL_MAIN }, { "title", "TITLE", TITLE, LEVEL_MAIN }, { "publisher", "PUBLISHER", SIMPLE, LEVEL_MAIN }, { "address", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "editor", "EDITOR", PERSON, LEVEL_MAIN }, { "year", "YEAR", SIMPLE, LEVEL_MAIN }, /* date granted */ { "month", "MONTH", SIMPLE, LEVEL_MAIN }, { "day", "DAY", SIMPLE, LEVEL_MAIN }, { "yearfiled", "YEAR", SIMPLE, LEVEL_MAIN }, /* date filed */ { "monthfiled","MONTH", SIMPLE, LEVEL_MAIN }, { "dayfiled", "DAY", SIMPLE, LEVEL_MAIN }, { "abstract", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "contents", "CONTENTS", SIMPLE, LEVEL_MAIN }, { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "location", "LOCATION", SIMPLE, LEVEL_MAIN }, { "nationality", "NATIONALITY", SIMPLE, LEVEL_MAIN }, { "note", "NOTES", BT_NOTE, LEVEL_MAIN }, { "annote", "ANNOTE", SIMPLE, LEVEL_MAIN }, { "key", "BIBKEY", SIMPLE, LEVEL_MAIN }, { "doi", "DOI", SIMPLE, LEVEL_MAIN }, { "ftp", "", BT_URL, LEVEL_MAIN }, { "url", "", BT_URL, LEVEL_MAIN }, { "pdf", "FILEATTACH",SIMPLE, LEVEL_MAIN }, { "sentelink", "FILEATTACH",BT_SENTE, LEVEL_MAIN }, { "file", "FILEATTACH",LINKEDFILE, LEVEL_MAIN }, { "howpublished", "", HOWPUBLISHED, LEVEL_MAIN }, { "type", "GENRE", SIMPLE, LEVEL_MAIN }, { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN }, { "crossref", "CROSSREF", SIMPLE, LEVEL_MAIN }, { "keywords", "KEYWORD", KEYWORD, LEVEL_MAIN }, { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { "", "INTERNAL_TYPE|PATENT", ALWAYS, LEVEL_MAIN }, { "", "GENRE|patent", ALWAYS, LEVEL_MAIN }, }; /* * Electronic Source */ static lookups electronic[] = { { "author", "AUTHOR", PERSON, LEVEL_MAIN }, { "translator", "TRANSLATOR",PERSON, LEVEL_MAIN }, { "organization", "ORGANIZER:CORP", BT_ORG, LEVEL_MAIN }, { "title", "TITLE", TITLE, LEVEL_MAIN }, { "booktitle", "TITLE", TITLE, LEVEL_MAIN }, { "publisher", "PUBLISHER", SIMPLE, LEVEL_MAIN }, { "address", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "editor", "EDITOR", PERSON, LEVEL_MAIN }, { "year", "YEAR", SIMPLE, LEVEL_MAIN }, { "month", "MONTH", SIMPLE, LEVEL_MAIN }, { "day", "DAY", SIMPLE, LEVEL_MAIN }, { "abstract", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "volume", "VOLUME", SIMPLE, LEVEL_MAIN }, { "contents", "CONTENTS", SIMPLE, LEVEL_MAIN }, { "doi", "DOI", SIMPLE, LEVEL_MAIN }, { "ftp", "", BT_URL, LEVEL_MAIN }, { "url", "", BT_URL, LEVEL_MAIN }, { "pdf", "FILEATTACH",SIMPLE, LEVEL_MAIN }, { "sentelink", "FILEATTACH",BT_SENTE, LEVEL_MAIN }, { "file", "FILEATTACH",LINKEDFILE, LEVEL_MAIN }, { "howpublished", "", HOWPUBLISHED, LEVEL_MAIN }, { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN }, { "crossref", "CROSSREF", SIMPLE, LEVEL_MAIN }, { "location", "LOCATION", SIMPLE, LEVEL_MAIN }, { "note", "NOTES", BT_NOTE, LEVEL_MAIN }, { "annote", "ANNOTE", SIMPLE, LEVEL_MAIN }, { "key", "BIBKEY", SIMPLE, LEVEL_MAIN }, { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "keywords", "KEYWORD", KEYWORD, LEVEL_MAIN }, { "", "RESOURCE|software, multimedia", ALWAYS, LEVEL_MAIN }, { "", "GENRE|electronic", ALWAYS, LEVEL_MAIN }, }; static lookups misc[] = { { "author", "AUTHOR", PERSON, LEVEL_MAIN }, { "translator", "TRANSLATOR",PERSON, LEVEL_MAIN }, { "title", "TITLE", TITLE, LEVEL_MAIN }, { "booktitle", "TITLE", TITLE, LEVEL_MAIN }, { "publisher", "PUBLISHER", SIMPLE, LEVEL_MAIN }, { "organization", "ORGANIZER:CORP", BT_ORG, LEVEL_MAIN }, { "pages", "PAGES", PAGES, LEVEL_MAIN }, { "address", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "editor", "EDITOR", PERSON, LEVEL_MAIN }, { "year", "YEAR", SIMPLE, LEVEL_MAIN }, { "month", "MONTH", SIMPLE, LEVEL_MAIN }, { "day", "DAY", SIMPLE, LEVEL_MAIN }, { "abstract", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "contents", "CONTENTS", SIMPLE, LEVEL_MAIN }, { "doi", "DOI", SIMPLE, LEVEL_MAIN }, { "ftp", "", BT_URL, LEVEL_MAIN }, { "url", "", BT_URL, LEVEL_MAIN }, { "pdf", "FILEATTACH", SIMPLE, LEVEL_MAIN }, { "sentelink", "FILEATTACH",BT_SENTE, LEVEL_MAIN }, { "file", "FILEATTACH",LINKEDFILE, LEVEL_MAIN }, { "howpublished", "", HOWPUBLISHED, LEVEL_MAIN }, { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN }, { "crossref", "CROSSREF", SIMPLE, LEVEL_MAIN }, { "location", "LOCATION", SIMPLE, LEVEL_MAIN }, { "note", "NOTES", BT_NOTE, LEVEL_MAIN }, { "annote", "ANNOTE", SIMPLE, LEVEL_MAIN }, { "key", "BIBKEY", SIMPLE, LEVEL_MAIN }, { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "keywords", "KEYWORD", KEYWORD, LEVEL_MAIN }, { "", "INTERNAL_TYPE|MISC", ALWAYS, LEVEL_MAIN }, }; #define ORIG(a) ( &(a[0]) ) #define SIZE(a) ( sizeof( a ) / sizeof( lookups ) ) #define REFTYPE(a,b) { a, ORIG(b), SIZE(b) } variants bibtex_all[] = { REFTYPE( "article", article ), REFTYPE( "booklet", book ), REFTYPE( "book", book ), REFTYPE( "electronic", electronic ), REFTYPE( "inbook", inbook ), REFTYPE( "incollection", incollection ), REFTYPE( "inconference", inproceedings ), REFTYPE( "conference", inproceedings ), REFTYPE( "inproceedings", inproceedings ), REFTYPE( "manual", manual ), REFTYPE( "mastersthesis", masters ), REFTYPE( "misc", misc ), REFTYPE( "online", misc ), REFTYPE( "patent", patent ), REFTYPE( "phdthesis", phds ), REFTYPE( "periodical", periodical ), REFTYPE( "proceedings", proceedings ), REFTYPE( "standard", standard ), REFTYPE( "techreport", report ), REFTYPE( "unpublished", unpublished ), }; int bibtex_nall = sizeof( bibtex_all ) / sizeof( variants ); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hs-bibutils-5.5/bibutils/modsout.h������������������������������������������������������������������0000644�0000000�0000000�00000001067�12445605732�015472� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * modsout.h * * Copyright (c) Chris Putnam 2003-2014 * * Source code released under the GPL version 2 * */ #ifndef MODSOUT_H #define MODSOUT_H /* format-specific options */ #define MODSOUT_DROPKEY (2) #include <stdio.h> #include <stdlib.h> #include "bibl.h" #include "bibutils.h" extern void modsout_writeheader( FILE *outptr, param *p ); extern void modsout_writefooter( FILE *outptr ); extern void modsout_write( fields *info, FILE *outptr, param *p, unsigned long numrefs ); extern void modsout_initparams( param *p, const char *progname ); #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hs-bibutils-5.5/bibutils/xml.h����������������������������������������������������������������������0000644�0000000�0000000�00000001765�12445605732�014605� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * xml.h * * Copyright (c) Chris Putnam 2004-2013 * * Source code released under the GPL version 2 * */ #ifndef XML_H #define XML_H #include "list.h" #include "newstr.h" typedef struct xml_attrib { list attrib; list value; } xml_attrib; typedef struct xml { newstr *tag; newstr *value; xml_attrib *a; struct xml *down; struct xml *next; } xml; extern void xml_init( xml *x ); extern newstr * xml_getattrib( xml *node, char *attrib ); extern char * xml_findstart( char *buffer, char *tag ); extern char * xml_findend( char *buffer, char *tag ); extern int xml_tagexact( xml *node, char *s ); extern int xml_tag_attrib( xml *node, char *s, char *attrib, char *value ); extern int xml_hasattrib( xml *node, char *attrib, char *value ); extern void xml_free( xml *x ); extern char * xml_tree( char *p, xml *onode ); extern int xml_hasdata( xml *node ); extern char * xml_data( xml *node ); extern int xml_tagwithdata( xml *node, char *tag ); extern char *xml_pns; /* global Namespace */ #endif �����������hs-bibutils-5.5/bibutils/newstr.h�������������������������������������������������������������������0000644�0000000�0000000�00000006770�12445605732�015330� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * newstr.h * * Version: 04/27/14 * * Copyright (c) Chris Putnam 1999-2014 * * Source code released under the GPL version 2 * */ #ifndef NEWSTR_H #define NEWSTR_H #include <stdio.h> typedef struct newstr { char *data; unsigned long dim; unsigned long len; } newstr; newstr *newstr_new ( void ); void newstr_delete ( newstr *s ); void newstr_init ( newstr *s ); void newstr_initstr ( newstr *s, const char *initstr ); void newstr_empty ( newstr *s ); void newstr_free ( newstr *s ); void newstrs_init ( newstr *s, ... ); void newstrs_empty ( newstr *s, ... ); void newstrs_free ( newstr *s, ... ); void newstr_mergestrs ( newstr *s, ... ); newstr *newstr_strdup ( const char *p ); void newstr_addchar ( newstr *s, char newchar ); void newstr_reverse ( newstr *s ); const char *newstr_addutf8 ( newstr *s, const char *p ); void newstr_strcat ( newstr *s, const char *addstr ); void newstr_newstrcat ( newstr *s, newstr *old ); void newstr_segcat ( newstr *s, char *startat, char *endat ); char *newstr_cpytodelim ( newstr *s, char *p, const char *delim, unsigned char finalstep ); char *newstr_cattodelim ( newstr *s, char *p, const char *delim, unsigned char finalstep ); void newstr_prepend ( newstr *s, const char *addstr ); void newstr_strcpy ( newstr *s, const char *addstr ); void newstr_newstrcpy ( newstr *s, newstr *old ); void newstr_segcpy ( newstr *s, char *startat, char *endat ); void newstr_segdel ( newstr *s, char *startat, char *endat ); void newstr_indxcpy ( newstr *s, char *p, unsigned long start, unsigned long stop ); void newstr_indxcat ( newstr *s, char *p, unsigned long start, unsigned long stop ); void newstr_fprintf ( FILE *fp, newstr *s ); int newstr_fget ( FILE *fp, char *buf, int bufsize, int *pbufpos, newstr *outs ); char newstr_char ( newstr *s, unsigned long n ); char newstr_revchar ( newstr *s, unsigned long n ); int newstr_fgetline ( newstr *s, FILE *fp ); int newstr_findreplace ( newstr *s, const char *find, const char *replace ); void newstr_toupper ( newstr *s ); void newstr_tolower ( newstr *s ); void newstr_trimstartingws( newstr *s ); void newstr_trimendingws( newstr *s ); void newstr_swapstrings ( newstr *s1, newstr *s2 ); void newstr_stripws ( newstr *s ); int newstr_match_first ( newstr *s, char ch ); int newstr_match_end ( newstr *s, char ch ); void newstr_trimbegin ( newstr *s, unsigned long n ); void newstr_trimend ( newstr *s, unsigned long n ); void newstr_pad ( newstr *s, unsigned long len, char ch ); void newstr_copyposlen ( newstr *s, newstr *in, unsigned long pos, unsigned long len ); void newstr_makepath ( newstr *path, const char *dirname, const char *filename, char sep ); int newstr_is_mixedcase( newstr *s ); int newstr_is_lowercase( newstr *s ); int newstr_is_uppercase( newstr *s ); int newstr_newstrcmp ( const newstr *s, const newstr *t ); int newstr_memerr( newstr *s ); /* #define NEWSTR_PARANOIA * * set to clear memory before it is freed or reallocated * note that this is slower...may be important if string * contains sensitive information */ /* #define NEWSTR_NOASSERT * * set to turn off the use of asserts (and associated call to exit) * in newstr functions...useful for library construction for * Linux distributions that don't want libraries calling exit, but * not useful during code development */ #endif ��������hs-bibutils-5.5/bibutils/medin.c��������������������������������������������������������������������0000644�0000000�0000000�00000042367�12445605732�015077� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * medin.c * * Copyright (c) Chris Putnam 2004-2014 * * Source code released under the GPL version 2 * */ #include <stdio.h> #include <stdlib.h> #include "is_ws.h" #include "newstr.h" #include "newstr_conv.h" #include "fields.h" #include "xml.h" #include "xml_encoding.h" #include "medin.h" #include "iso639_2.h" #include "bibutils.h" /***************************************************** PUBLIC: void medin_initparams() *****************************************************/ void medin_initparams( param *p, const char *progname ) { p->readformat = BIBL_MEDLINEIN; p->charsetin = BIBL_CHARSET_UNICODE; p->charsetin_src = BIBL_SRC_DEFAULT; p->latexin = 0; p->xmlin = 1; p->utf8in = 1; p->nosplittitle = 0; p->verbose = 0; p->addcount = 0; p->output_raw = BIBL_RAW_WITHMAKEREFID | BIBL_RAW_WITHCHARCONVERT; p->readf = medin_readf; p->processf = medin_processf; p->cleanf = NULL; p->typef = NULL; p->convertf = NULL; p->all = NULL; p->nall = 0; list_init( &(p->asis) ); list_init( &(p->corps) ); if ( !progname ) p->progname = NULL; else p->progname = strdup( progname ); } /***************************************************** PUBLIC: int medin_readf() *****************************************************/ /* * The only difference between MEDLINE and PUBMED in format is * that the entire library is wrapped in <MedlineCitationSet> * or <PubmedArticle> tags... */ static char *wrapper[] = { "PubmedArticle", "MedlineCitation" }; static int nwrapper = sizeof( wrapper ) / sizeof( wrapper[0] ); static char * medin_findstartwrapper( char *buf, int *ntype ) { char *startptr=NULL; int i; for ( i=0; i<nwrapper && startptr==NULL; ++i ) { startptr = xml_findstart( buf, wrapper[ i ] ); if ( startptr && *ntype==-1 ) *ntype = i; } return startptr; } static char * medin_findendwrapper( char *buf, int ntype ) { char *endptr = xml_findend( buf, wrapper[ ntype ] ); return endptr; } int medin_readf( FILE *fp, char *buf, int bufsize, int *bufpos, newstr *line, newstr *reference, int *fcharset ) { newstr tmp; char *startptr = NULL, *endptr; int haveref = 0, inref = 0, file_charset = CHARSET_UNKNOWN, m, type = -1; newstr_init( &tmp ); while ( !haveref && newstr_fget( fp, buf, bufsize, bufpos, line ) ) { if ( line->data ) { m = xml_getencoding( line ); if ( m!=CHARSET_UNKNOWN ) file_charset = m; } if ( line->data ) { startptr = medin_findstartwrapper( line->data, &type ); } if ( startptr || inref ) { if ( inref ) newstr_strcat( &tmp, line->data ); else { newstr_strcat( &tmp, startptr ); inref = 1; } endptr = medin_findendwrapper( tmp.data, type ); if ( endptr ) { newstr_segcpy( reference, tmp.data, endptr ); haveref = 1; } } } newstr_free( &tmp ); *fcharset = file_charset; return haveref; } /***************************************************** PUBLIC: int medin_processf() *****************************************************/ typedef struct xml_convert { char *in; /* The input tag */ char *a, *aval; /* The attribute="attribute_value" pair, if nec. */ char *out; /* The output tag */ int level; } xml_convert; static int medin_doconvert( xml *node, fields *info, xml_convert *c, int nc, int *found ) { int i, fstatus; char *d; *found = 0; if ( !xml_hasdata( node ) ) return BIBL_OK; d = xml_data( node ); for ( i=0; i<nc && *found==0; ++i ) { if ( c[i].a==NULL ) { if ( xml_tagexact( node, c[i].in ) ) { *found = 1; fstatus = fields_add( info, c[i].out, d, c[i].level ); if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR; } } else { if ( xml_tag_attrib( node, c[i].in, c[i].a, c[i].aval)){ *found = 1; fstatus = fields_add( info, c[i].out, d, c[i].level ); if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR; } } } return BIBL_OK; } /* <ArticleTitle>Mechanism and.....</ArticleTitle> */ static int medin_articletitle( xml *node, fields *info ) { int fstatus, status = BIBL_OK; if ( xml_hasdata( node ) ) { fstatus = fields_add( info, "TITLE", xml_data( node ), 0 ); if ( fstatus!=FIELDS_OK ) status = BIBL_ERR_MEMERR; } return status; } /* <MedlineDate>2003 Jan-Feb</MedlineDate> */ static int medin_medlinedate( fields *info, char *p, int level ) { int fstatus; newstr tmp; newstr_init( &tmp ); p = newstr_cpytodelim( &tmp, skip_ws( p ), " \t\n\r", 0 ); if ( newstr_memerr( &tmp ) ) return BIBL_ERR_MEMERR; if ( tmp.len > 0 ) { fstatus = fields_add( info, "PARTYEAR", tmp.data, level ); if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR; } p = newstr_cpytodelim( &tmp, skip_ws( p ), " \t\n\r", 0 ); if ( newstr_memerr( &tmp ) ) return BIBL_ERR_MEMERR; if ( tmp.len > 0 ) { newstr_findreplace( &tmp, "-", "/" ); fstatus = fields_add( info, "PARTMONTH", tmp.data, level ); if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR; } p = newstr_cpytodelim( &tmp, skip_ws( p ), " \t\n\r", 0 ); if ( newstr_memerr( &tmp ) ) return BIBL_ERR_MEMERR; if ( tmp.len > 0 ) { fstatus = fields_add( info, "PARTDAY", tmp.data, level ); if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR; } newstr_free( &tmp ); return BIBL_OK; } /* <Langauge>eng</Language> */ static int medin_language( xml *node, fields *info, int level ) { char *code, *language; int fstatus; code = xml_data( node ); if ( !code ) return BIBL_OK; language = iso639_2_from_code( code ); if ( language ) fstatus = fields_add( info, "LANGUAGE", language, level ); else fstatus = fields_add( info, "LANGUAGE", code, level ); if ( fstatus==FIELDS_OK ) return BIBL_OK; else return BIBL_ERR_MEMERR; } /* <Journal> * <ISSN>0027-8424</ISSN> * <JournalIssue PrintYN="Y"> * <Volume>100</Volume> * <Issue>21</Issue> * <PubDate> * <Year>2003</Year> * <Month>Oct</Month> * <Day>14</Day> * </PubDate> * </Journal Issue> * </Journal> * * or.... * * <Journal> * <ISSN IssnType="Print">0735-0414</ISSN> * <JournalIssue CitedMedium="Print"> * <Volume>38</Volume> * <Issue>1</Issue> * <PubDate> * <MedlineDate>2003 Jan-Feb</MedlineDate> * </PubDate> * </JournalIssue> * <Title>Alcohol and alcoholism (Oxford, Oxfordshire) * Alcohol Alcohol. * */ static int medin_journal1( xml *node, fields *info ) { xml_convert c[] = { { "Title", NULL, NULL, "TITLE", 1 }, { "ISOAbbreviation", NULL, NULL, "SHORTTITLE", 1 }, { "ISSN", NULL, NULL, "ISSN", 1 }, { "Volume", NULL, NULL, "VOLUME", 1 }, { "Issue", NULL, NULL, "ISSUE", 1 }, { "Year", NULL, NULL, "PARTYEAR", 1 }, { "Month", NULL, NULL, "PARTMONTH", 1 }, { "Day", NULL, NULL, "PARTDAY", 1 }, }; int nc = sizeof( c ) / sizeof( c[0] ), status, found; if ( xml_hasdata( node ) ) { status = medin_doconvert( node, info, c, nc, &found ); if ( status!=BIBL_OK ) return status; if ( !found ) { if ( xml_tagexact( node, "MedlineDate" ) ) { status = medin_medlinedate( info, xml_data( node ), 1 ); if ( status!=BIBL_OK ) return status; } if ( xml_tagexact( node, "Language" ) ) { status = medin_language( node, info, 1 ); if ( status!=BIBL_OK ) return status; } } } if ( node->down ) { status = medin_journal1( node->down, info ); if ( status!=BIBL_OK ) return status; } if ( node->next ) { status = medin_journal1( node->next, info ); if ( status!=BIBL_OK ) return status; } return BIBL_OK; } /* * 12111-6 * */ static int medin_pagination( xml *node, fields *info ) { int i, fstatus, status; newstr sp, ep; char *p, *pp; if ( xml_tagexact( node, "MedlinePgn" ) && node->value ) { newstrs_init( &sp, &ep, NULL ); p = newstr_cpytodelim( &sp, xml_data( node ), "-", 1 ); if ( newstr_memerr( &sp ) ) return BIBL_ERR_MEMERR; if ( sp.len ) { fstatus = fields_add( info, "PAGESTART", sp.data, 1 ); if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR; } p = newstr_cpytodelim( &ep, p, "", 0 ); if ( newstr_memerr( &ep ) ) return BIBL_ERR_MEMERR; if ( ep.len ) { if ( sp.len > ep.len ) { for ( i=sp.len-ep.len; idown ) { status = medin_pagination( node->down, info ); if ( status!=BIBL_OK ) return status; } if ( node->next ) { status = medin_pagination( node->next, info ); if ( status!=BIBL_OK ) return status; } return BIBL_OK; } /* * ljwejrelr * */ static int medin_abstract( xml *node, fields *info ) { int fstatus; if ( xml_tagwithdata( node, "AbstractText" ) ) { fstatus = fields_add( info, "ABSTRACT", xml_data( node ), 0 ); if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR; } else if ( node->next ) return medin_abstract( node->next, info ); return BIBL_OK; } /* * * Barondeau * David P * ( or David P ) * DP * * * Organization * * */ static int medin_author( xml *node, newstr *name ) { char *p; if ( xml_tagexact( node, "LastName" ) ) { if ( name->len ) { newstr_prepend( name, "|" ); newstr_prepend( name, xml_data( node ) ); } else newstr_strcat( name, xml_data( node ) ); } else if ( xml_tagexact( node, "ForeName" ) || xml_tagexact( node, "FirstName" ) ) { p = xml_data( node ); while ( p && *p ) { if ( name->len ) newstr_addchar( name, '|' ); while ( *p && *p==' ' ) p++; while ( *p && *p!=' ' ) newstr_addchar( name, *p++ ); } } else if ( xml_tagexact( node, "Initials" ) && !strchr( name->data, '|' )) { p = xml_data( node ); while ( p && *p ) { if ( name->len ) newstr_addchar( name, '|' ); if ( !is_ws(*p) ) newstr_addchar( name, *p++ ); } } if ( node->next ) medin_author( node->next, name ); return BIBL_OK; } static int medin_corpauthor( xml *node, newstr *name ) { if ( xml_tagexact( node, "CollectiveName" ) ) { newstr_strcpy( name, xml_data( node ) ); } else if ( node->next ) medin_corpauthor( node->next, name ); return BIBL_OK; } static int medin_authorlist( xml *node, fields *info ) { int fstatus, status; newstr name; char *tag; newstr_init( &name ); node = node->down; while ( node ) { if ( xml_tagexact( node, "Author" ) && node->down ) { status = medin_author( node->down, &name ); tag = "AUTHOR"; if ( !name.len ) { status = medin_corpauthor( node->down, &name ); tag = "AUTHOR:CORP"; } if ( newstr_memerr( &name ) || status!=BIBL_OK ) return BIBL_ERR_MEMERR; if ( name.len ) { fstatus = fields_add(info,tag,name.data,0); if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR; } newstr_empty( &name ); } node = node->next; } newstr_free( &name ); return BIBL_OK; } /* * Journal Article * */ /* * United States * Proc Natl Acad Sci U S A * 7507876 * */ static int medin_journal2( xml *node, fields *info ) { int fstatus, status = BIBL_OK; if ( xml_tagwithdata( node, "MedlineTA" ) && fields_find( info, "TITLE", 1 )==-1 ) { fstatus = fields_add( info, "TITLE", xml_data( node ), 1 ); if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR; } if ( node->down ) { status = medin_journal2( node->down, info ); if ( status!=BIBL_OK ) return status; } if ( node->next ) status = medin_journal2( node->next, info ); return status; } /* Biophysics Crystallography, X-Ray */ static int medin_meshheading( xml *node, fields *info ) { int fstatus, status = BIBL_OK; if ( xml_tagwithdata( node, "DescriptorName" ) ) { fstatus = fields_add( info, "KEYWORD", xml_data( node ), 0 ); if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR; } if ( node->next ) status = medin_meshheading( node->next, info ); return status; } static int medin_meshheadinglist( xml *node, fields *info ) { int status = BIBL_OK; if ( xml_tagexact( node, "MeshHeading" ) && node->down ) { status = medin_meshheading( node->down, info ); if ( status!=BIBL_OK ) return status; } if ( node->next ) status = medin_meshheadinglist( node->next, info ); return status; } /* * .... * * 14523232 * 10.1073/pnas.2133463100 * 2133463100 * 22922082 * * * * I think "pii" is "Publisher Item Identifier" */ static int medin_pubmeddata( xml *node, fields *info ) { xml_convert c[] = { { "ArticleId", "IdType", "doi", "DOI", 0 }, { "ArticleId", "IdType", "pubmed", "PMID", 0 }, { "ArticleId", "IdType", "medline", "MEDLINE", 0 }, { "ArticleId", "IdType", "pii", "PII", 0 }, }; int nc = sizeof( c ) / sizeof( c[0] ), found, status; status = medin_doconvert( node, info, c, nc, &found ); if ( status!=BIBL_OK ) return status; if ( node->next ) { status = medin_pubmeddata( node->next, info ); if ( status!=BIBL_OK ) return status; } if ( node->down ) { medin_pubmeddata( node->down, info ); if ( status!=BIBL_OK ) return status; } return BIBL_OK; } static int medin_article( xml *node, fields *info ) { int fstatus, status = BIBL_OK; if ( xml_tagexact( node, "Journal" ) ) status = medin_journal1( node, info ); else if ( xml_tagexact( node, "ArticleTitle" ) ) status = medin_articletitle( node, info ); else if ( xml_tagexact( node, "Pagination" ) && node->down ) status = medin_pagination( node->down, info ); else if ( xml_tagexact( node, "Abstract" ) && node->down ) status = medin_abstract( node->down, info ); else if ( xml_tagexact( node, "AuthorList" ) ) status = medin_authorlist( node, info ); else if ( xml_tagexact( node, "Language" ) ) status = medin_language( node, info, 0 ); else if ( xml_tagexact( node, "Affiliation" ) ) { fstatus = fields_add( info, "ADDRESS", xml_data( node ), 0 ); if ( fstatus!=FIELDS_OK ) status = BIBL_ERR_MEMERR; } if ( status!=BIBL_OK ) return status; if ( node->next ) status = medin_article( node->next, info ); return BIBL_OK; } static int medin_medlinecitation( xml *node, fields *info ) { int fstatus, status = BIBL_OK; if ( xml_tagexact( node, "PMID" ) && node->value->data ) { fstatus = fields_add( info, "PMID", node->value->data, 0 ); if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR; } if ( node->down ) { if ( xml_tagexact( node, "Article" ) ) { status = medin_article( node->down, info ); } else if ( xml_tagexact( node, "MedlineJournalInfo" ) ) { status = medin_journal2( node->down, info ); } else if ( xml_tagexact( node, "MeshHeadingList" ) ) status = medin_meshheadinglist( node->down, info ); if ( status!=BIBL_OK ) return status; } if ( node->next ) status = medin_medlinecitation( node->next, info ); return status; } static int medin_pubmedarticle( xml *node, fields *info ) { int status = BIBL_OK; if ( node->down ) { if ( xml_tagexact( node, "MedlineCitation" ) ) status = medin_medlinecitation( node->down, info ); else if ( xml_tagexact( node, "PubmedData" ) ) status = medin_pubmeddata( node->down, info ); if ( status!=BIBL_OK ) return status; } if ( node->next ) status = medin_pubmedarticle( node->next, info ); return status; } static int medin_assembleref( xml *node, fields *info ) { int status = BIBL_OK; if ( node->down ) { if ( xml_tagexact( node, "PubmedArticle" ) ) status = medin_pubmedarticle( node->down, info ); else if ( xml_tagexact( node, "MedlineCitation" ) ) status = medin_medlinecitation( node->down, info ); else status = medin_assembleref( node->down, info ); } if ( status!=BIBL_OK ) return status; if ( node->next ) { status = medin_assembleref( node->next, info ); if ( status!=BIBL_OK ) return status; } /* assume everything is a journal article */ if ( fields_num( info ) ) { status = fields_add( info, "RESOURCE", "text", 0 ); if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR; status = fields_add( info, "ISSUANCE", "continuing", 1 ); if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR; status = fields_add( info, "GENRE", "periodical", 1 ); if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR; status = fields_add( info, "GENRE", "academic journal", 1 ); if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR; status = BIBL_OK; } return status; } int medin_processf( fields *medin, char *data, char *filename, long nref ) { int status; xml top; xml_init( &top ); xml_tree( data, &top ); status = medin_assembleref( &top, medin ); xml_free( &top ); if ( status==BIBL_OK ) return 1; return 0; } hs-bibutils-5.5/bibutils/vplist.h0000644000000000000000000000344312445605732015321 0ustar0000000000000000/* * vplist.h * * Version: 4/08/2013 * * Copyright (c) Chris Putnam 2011-2013 * * Source code released under the GPL version 2 * */ #ifndef VPLIST_H #define VPLIST_H /* vplist = void pointer list (generic container struct) */ typedef struct vplist { int n, max; void **data; } vplist; typedef void (*vplist_ptrfree)(void*); extern void vplist_init( vplist *vpl ); extern vplist * vplist_new( void ); extern int vplist_add( vplist *vpl, void *v ); extern int vplist_copy( vplist *to, vplist *from ); extern int vplist_append( vplist *to, vplist *from ); extern void * vplist_get( vplist *vpl, int n ); extern void vplist_set( vplist *vpl, int n, void *v ); extern void vplist_remove( vplist *vpl, int n ); extern void vplist_removevp( vplist *vpl, void *v ); extern int vplist_find( vplist *vpl, void *v ); /* * vplist_empty does not free space * * if members require their own free calls, then call vplist_emptyfn() * * void * member_free( void *v ) * { * member *m = ( member * ) v; * member_free( m ); * free( m ); * } * vplist_emptyfn( &vpl, member_free ); * * if members are simply allocated with malloc(), then use free() * * vplist_emptyfn( &vpl, free ); */ extern void vplist_empty( vplist *vpl ); extern void vplist_emptyfn( vplist *vpl, vplist_ptrfree fn ); /* * vplist_free frees the space for the data array of void * elements. * * if members require their own free calls, then call vplist_freefn() */ extern void vplist_free( vplist *vpl ); extern void vplist_freefn( vplist *vpl, vplist_ptrfree fn ); /* * vplist_destroy does vplist_free and deallocates the struct * vplist * and replaces with NULL. */ extern void vplist_destroy( vplist **vpl ); extern void vplist_destroyfn( vplist **vpl, vplist_ptrfree fn ); #endif hs-bibutils-5.5/bibutils/endxmlin.c0000644000000000000000000003516312445605732015615 0ustar0000000000000000/* * endxmlin.c * * Copyright (c) Chris Putnam 2006-2014 * * Program and source code released under the GPL version 2 * */ #include #include #include "newstr.h" #include "newstr_conv.h" #include "fields.h" #include "name.h" #include "xml.h" #include "xml_encoding.h" #include "reftypes.h" #include "endxmlin.h" #include "endin.h" typedef struct { char *attrib; char *internal; } attribs; /***************************************************** PUBLIC: void endxmlin_initparams() *****************************************************/ void endxmlin_initparams( param *p, const char *progname ) { p->readformat = BIBL_ENDNOTEXMLIN; p->charsetin = BIBL_CHARSET_DEFAULT; p->charsetin_src = BIBL_SRC_DEFAULT; p->latexin = 0; p->xmlin = 1; p->utf8in = 1; p->nosplittitle = 0; p->verbose = 0; p->addcount = 0; p->output_raw = 0; p->readf = endxmlin_readf; p->processf = endxmlin_processf; p->cleanf = NULL; p->typef = endin_typef; p->convertf = endin_convertf; p->all = end_all; p->nall = end_nall; list_init( &(p->asis) ); list_init( &(p->corps) ); if ( !progname ) p->progname = NULL; else p->progname = strdup( progname ); } /***************************************************** PUBLIC: int endxmlin_readf() *****************************************************/ static int xml_readmore( FILE *fp, char *buf, int bufsize, int *bufpos ) { if ( !feof( fp ) && fgets( buf, bufsize, fp ) ) return 0; return 1; } int endxmlin_readf( FILE *fp, char *buf, int bufsize, int *bufpos, newstr *line, newstr *reference, int *fcharset ) { newstr tmp; char *startptr = NULL, *endptr = NULL; int haveref = 0, inref = 0, done = 0, file_charset = CHARSET_UNKNOWN, m; newstr_init( &tmp ); while ( !haveref && !done ) { if ( line->data ) { if ( !inref ) { startptr = xml_findstart( line->data, "RECORD" ); if ( startptr ) inref = 1; } else endptr = xml_findend( line->data, "RECORD" ); } /* If no tag, we can trim up to last 8 bytes */ /* Emptying string can lose fragments of tag */ if ( !startptr ) { if ( line->len > 8 ) { int n = 8; char *p = &(line->data[line->len-1]); while ( *p && n ) { p--; n--; } newstr_segdel( line, line->data, p ); } } if ( !startptr || !endptr ) { done = xml_readmore( fp, buf, bufsize, bufpos ); newstr_strcat( line, buf ); } else { /* we can reallocate in the newstr_strcat, so re-find */ startptr = xml_findstart( line->data, "RECORD" ); endptr = xml_findend( line->data, "RECORD" ); newstr_segcpy( reference, startptr, endptr ); /* clear out information in line */ newstr_strcpy( &tmp, endptr ); newstr_newstrcpy( line, &tmp ); haveref = 1; } if ( line->data ) { m = xml_getencoding( line ); if ( m!=CHARSET_UNKNOWN ) file_charset = m; } } newstr_free( &tmp ); *fcharset = file_charset; return haveref; } /***************************************************** PUBLIC: int endxmlin_processf() *****************************************************/ /* * add data to fields */ /* * handle fields with (potentially) several style pieces * * * * * * aaaaaa * * * * */ static int endxmlin_datar( xml *node, newstr *s ) { int status; if ( node->value && node->value->len ) { newstr_strcat( s, node->value->data ); if ( newstr_memerr( s ) ) return BIBL_ERR_MEMERR; } if ( node->down && xml_tagexact( node->down, "style" ) ) { status = endxmlin_datar( node->down, s ); if ( status!=BIBL_OK ) return status; } if ( xml_tagexact( node, "style" ) && node->next ) { status = endxmlin_datar( node->next, s ); if ( status!=BIBL_OK ) return status; } return BIBL_OK; } static int endxmlin_data( xml *node, char *inttag, fields *info, int level ) { int status; newstr s; newstr_init( &s ); status = endxmlin_datar( node, &s ); if ( status!=BIBL_OK ) return status; if ( s.len ) { status = fields_add( info, inttag, s.data, level ); if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR; } newstr_free( &s ); return BIBL_OK; } /* * * <style>ACTUAL TITLE HERE</style><style>MORE TITLE</style> * * */ static int endxmlin_titles( xml *node, fields *info ) { attribs a[] = { { "title", "%T" }, { "secondary-title", "%B" }, { "tertiary-title", "%S" }, { "alt-title", "%!" }, { "short-title", "SHORTTITLE" }, }; int i, status, n = sizeof( a ) / sizeof ( a[0] ); newstr title; newstr_init( &title ); for ( i=0; idown ) { newstr_empty( &title ); status = endxmlin_datar( node, &title ); if ( status!=BIBL_OK ) return BIBL_ERR_MEMERR; newstr_trimstartingws( &title ); newstr_trimendingws( &title ); status = fields_add( info, a[i].internal, title.data, 0); if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR; } } if ( node->next ) { status = endxmlin_titles( node->next, info ); if ( status!=BIBL_OK ) return status; } newstr_free( &title ); return BIBL_OK; } /* * * * * * * */ /* * */ static int endxmlin_contributor( xml *node, fields *info, char *int_tag, int level ) { int status; status = endxmlin_data( node, int_tag, info, level ); if ( status!=BIBL_OK ) return status; if ( node->next ) { status = endxmlin_contributor( node->next, info, int_tag, level ); if ( status!=BIBL_OK ) return status; } return BIBL_OK; } static int endxmlin_contributors( xml *node, fields *info ) { attribs a[] = { { "authors", "%A" }, { "secondary-authors", "%E" }, { "tertiary-authors", "%Y" }, { "subsidiary-authors", "%?" }, { "translated-authors", "%?" }, }; int i, status, n = sizeof( a ) / sizeof ( a[0] ); for ( i=0; idown ) { status = endxmlin_contributor( node->down, info, a[i].internal, 0 ); if ( status!=BIBL_OK ) return status; } } if ( node->next ) { status = endxmlin_contributors( node->next, info ); if ( status!=BIBL_OK ) return status; } return BIBL_OK; } static int endxmlin_keyword( xml *node, fields *info ) { int status; if ( xml_tagexact( node, "keyword" ) ) { status = endxmlin_data( node, "%K", info, 0 ); if ( status!=BIBL_OK ) return status; } if ( node->next ) { status = endxmlin_keyword( node->next, info ); if ( status!=BIBL_OK ) return status; } return BIBL_OK; } static int endxmlin_keywords( xml *node, fields *info ) { if ( node->down && xml_tagexact( node->down, "keyword" ) ) return endxmlin_keyword( node->down, info ); return BIBL_OK; } /* * */ static int endxmlin_ern( xml *node, fields *info ) { if ( xml_tagexact( node, "electronic-resource-num" ) ) return endxmlin_data( node, "DOI", info, 0 ); return BIBL_OK; } static int endxmlin_language( xml *node, fields *info ) { if ( xml_tagexact( node, "language" ) ) return endxmlin_data( node, "%G", info, 0 ); return BIBL_OK; } /* * * * internal-pdf://Zukin_1995_The_Cultures_of_Cities-0000551425/Zukin_1995_The_Cultures_of_Cities.pdf * * */ static int endxmlin_fileattach( xml *node, fields *info ) { int status; if ( xml_tagexact( node, "url" ) ) { status = endxmlin_data( node, "FILEATTACH", info, 0 ); if ( status!=BIBL_OK ) return status; } if ( node->down ) { status = endxmlin_fileattach( node->down, info ); if ( status!=BIBL_OK ) return status; } if ( node->next ) { status = endxmlin_fileattach( node->next, info ); if ( status!=BIBL_OK ) return status; } return BIBL_OK; } static int endxmlin_urls( xml *node, fields *info ) { int status; if ( xml_tagexact( node, "pdf-urls" ) && node->down ) { status = endxmlin_fileattach( node->down, info ); if ( status!=BIBL_OK ) return status; } else if ( xml_tagexact( node, "url" ) ) { status = endxmlin_data( node, "%U", info, 0 ); if ( status!=BIBL_OK ) return status; } else { if ( node->down ) { if ( xml_tagexact( node->down, "related-urls" ) || xml_tagexact( node->down, "pdf-urls" ) || xml_tagexact( node->down, "url" ) ) { status = endxmlin_urls( node->down, info ); if ( status!=BIBL_OK ) return status; } } } if ( node->next ) { status = endxmlin_urls( node->next, info ); if ( status!=BIBL_OK ) return status; } return BIBL_OK; } static int endxmlin_pubdates( xml *node, fields *info ) { if ( xml_tagexact( node, "date" ) ) return endxmlin_data( node, "%8", info, 0 ); else { if ( node->down && xml_tagexact( node->down, "date" ) ) return endxmlin_pubdates( node->down, info ); } return BIBL_OK; } static int endxmlin_dates( xml *node, fields *info ) { int status; if ( xml_tagexact( node, "year" ) ) { status = endxmlin_data( node, "%D", info, 0 ); if ( status!=BIBL_OK ) return status; } else { if ( node->down ) { if ( xml_tagexact( node->down, "year" ) ) { status = endxmlin_dates( node->down, info ); if ( status!=BIBL_OK ) return status; } if ( xml_tagexact( node->down, "pub-dates" ) ) { status = endxmlin_pubdates( node->down, info ); if ( status!=BIBL_OK ); } } } if ( node->next ) { status = endxmlin_dates( node->next, info ); if ( status!=BIBL_OK ) return status; } return BIBL_OK; } /* * 17 */ static int endxmlin_reftype( xml *node, fields *info ) { int status; newstr *s; s = xml_getattrib( node, "name" ); if ( s && s->len ) { status = fields_add( info, "%0", s->data, 0 ); newstr_free( s ); if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR; } return BIBL_OK; } static int endxmlin_record( xml *node, fields *info ) { attribs a[] = { { "volume", "%V" }, { "num-vol", "%6" }, { "pages", "%P" }, { "number", "%N" }, { "issue", "%N" }, { "label", "%F" }, { "auth-address", "%C" }, { "auth-affiliation", "%C" }, { "pub-location", "%C" }, { "publisher", "%I" }, { "abstract", "%X" }, { "edition", "%7" }, { "reprint-edition", "%)" }, { "section", "%&" }, { "accession-num", "%M" }, { "call-num", "%L" }, { "isbn", "%@" }, { "notes", "%O" }, { "custom1", "%1" }, { "custom2", "%2" }, { "custom3", "%3" }, { "custom4", "%4" }, { "custom5", "%#" }, { "custom6", "%$" }, }; int i, status, n = sizeof ( a ) / sizeof( a[0] ); if ( xml_tagexact( node, "DATABASE" ) ) { } else if ( xml_tagexact( node, "SOURCE-APP" ) ) { } else if ( xml_tagexact( node, "REC-NUMBER" ) ) { } else if ( xml_tagexact( node, "ref-type" ) ) { status = endxmlin_reftype( node, info ); if ( status!=BIBL_OK ) return status; } else if ( xml_tagexact( node, "contributors" ) ) { if ( node->down ) { status = endxmlin_contributors( node->down, info ); if ( status!=BIBL_OK ) return status; } } else if ( xml_tagexact( node, "titles" ) ) { if ( node->down ) endxmlin_titles( node->down, info ); } else if ( xml_tagexact( node, "keywords" ) ) { status = endxmlin_keywords( node, info ); if ( status!=BIBL_OK ) return status; } else if ( xml_tagexact( node, "urls" ) ) { status = endxmlin_urls( node, info ); if ( status!=BIBL_OK ) return status; } else if ( xml_tagexact( node, "electronic-resource-num" ) ) { status = endxmlin_ern( node, info ); if ( status!=BIBL_OK ) return status; } else if ( xml_tagexact( node, "dates" ) ) { status = endxmlin_dates( node, info ); if ( status!=BIBL_OK ) return status; } else if ( xml_tagexact( node, "language" ) ) { status = endxmlin_language( node, info ); if ( status!=BIBL_OK ) return status; } else if ( xml_tagexact( node, "periodical" ) ) { } else if ( xml_tagexact( node, "secondary-volume" ) ) { } else if ( xml_tagexact( node, "secondary-issue" ) ) { } else if ( xml_tagexact( node, "reprint-status" ) ) { } else if ( xml_tagexact( node, "orig-pub" ) ) { } else if ( xml_tagexact( node, "report-id" ) ) { } else if ( xml_tagexact( node, "coden" ) ) { } else if ( xml_tagexact( node, "caption" ) ) { } else if ( xml_tagexact( node, "research-notes" ) ) { } else if ( xml_tagexact( node, "work-type" ) ) { } else if ( xml_tagexact( node, "reviewed-item" ) ) { } else if ( xml_tagexact( node, "availability" ) ) { } else if ( xml_tagexact( node, "remote-source" ) ) { } else if ( xml_tagexact( node, "meeting-place" ) ) { } else if ( xml_tagexact( node, "work-location" ) ) { } else if ( xml_tagexact( node, "work-extent" ) ) { } else if ( xml_tagexact( node, "pack-method" ) ) { } else if ( xml_tagexact( node, "size" ) ) { } else if ( xml_tagexact( node, "repro-ratio" ) ) { } else if ( xml_tagexact( node, "remote-database-name" ) ) { } else if ( xml_tagexact( node, "remote-database-provider" ) ) { } else if ( xml_tagexact( node, "access-date" ) ) { } else if ( xml_tagexact( node, "modified-data" ) ) { } else if ( xml_tagexact( node, "misc1" ) ) { } else if ( xml_tagexact( node, "misc2" ) ) { } else if ( xml_tagexact( node, "misc3" ) ) { } else { for ( i=0; inext ) { status = endxmlin_record( node->next, info ); if ( status!=BIBL_OK ) return status; } return BIBL_OK; } static int endxmlin_assembleref( xml *node, fields *info ) { int status; if ( node->tag->len==0 ) { if ( node->down ) return endxmlin_assembleref( node->down, info ); } else if ( xml_tagexact( node, "RECORD" ) ) { if ( node->down ) { status = endxmlin_record( node->down, info ); if ( status!=BIBL_OK ) return status; } } return BIBL_OK; } /* endxmlin_processf first operates by converting to endnote input * the endnote->mods conversion happens in convertf. * * this is necessary as the xml format is as nasty and as overloaded * as the tags used in the Refer format output */ int endxmlin_processf( fields *fin, char *data, char *filename, long nref ) { int status; xml top; xml_init( &top ); xml_tree( data, &top ); status = endxmlin_assembleref( &top, fin ); xml_free( &top ); if ( status==BIBL_OK ) return 1; return 0; } hs-bibutils-5.5/bibutils/doi.h0000644000000000000000000000103712445605732014550 0ustar0000000000000000/* * doi.h * * Copyright (c) Chris Putnam 2004-2013 * * Source code released under the GPL version 2 * */ #ifndef DOI_H #define DOI_H #include "newstr.h" #include "fields.h" extern void doi_to_url( fields *info, int n, char *urltag, newstr *doi_url ); extern int is_doi( char *s ); extern void pmid_to_url( fields *info, int n, char *urltag, newstr *pmid_url ); extern void arxiv_to_url( fields *info, int n, char *urltag, newstr *arxiv_url ); extern void jstor_to_url( fields *info, int n, char *urltag, newstr *jstor_url ); #endif hs-bibutils-5.5/bibutils/iso639_2.h0000644000000000000000000000026512445605732015254 0ustar0000000000000000/* * iso639-2 language codes */ #ifndef ISO639_2_H #define ISO639_2_H extern char * iso639_2_from_code( char *code ); extern char * iso639_2_from_language( char *lang ); #endif hs-bibutils-5.5/bibutils/ebiin.c0000644000000000000000000004561012445605732015063 0ustar0000000000000000/* * ebiin.c * * Copyright (c) Chris Putnam 2004-2013 * * Program and source code released under the GPL version 2 * */ #include #include #include "is_ws.h" #include "newstr.h" #include "newstr_conv.h" #include "fields.h" #include "xml.h" #include "xml_encoding.h" #include "ebiin.h" /***************************************************** PUBLIC: void ebiin_initparams() *****************************************************/ void ebiin_initparams( param *p, const char *progname ) { p->readformat = BIBL_EBIIN; p->charsetin = BIBL_CHARSET_UNICODE; p->charsetin_src = BIBL_SRC_DEFAULT; p->latexin = 0; p->xmlin = 1; p->utf8in = 1; p->nosplittitle = 0; p->verbose = 0; p->addcount = 0; p->output_raw = BIBL_RAW_WITHMAKEREFID | BIBL_RAW_WITHCHARCONVERT; p->readf = ebiin_readf; p->processf = ebiin_processf; p->cleanf = NULL; p->typef = NULL; p->convertf = NULL; p->all = NULL; p->nall = 0; list_init( &(p->asis) ); list_init( &(p->corps) ); if ( !progname ) p->progname = NULL; else p->progname = strdup( progname ); } /***************************************************** PUBLIC: int ebiin_readf() *****************************************************/ int ebiin_readf( FILE *fp, char *buf, int bufsize, int *bufpos, newstr *line, newstr *reference, int *fcharset ) { newstr tmp; char *startptr = NULL, *endptr; int haveref = 0, inref = 0, file_charset = CHARSET_UNKNOWN, m; newstr_init( &tmp ); while ( !haveref && newstr_fget( fp, buf, bufsize, bufpos, line ) ) { if ( line->data ) { m = xml_getencoding( line ); if ( m!=CHARSET_UNKNOWN ) file_charset = m; } if ( line->data ) startptr = xml_findstart( line->data, "Publication" ); if ( startptr || inref ) { if ( inref ) newstr_strcat( &tmp, line->data ); else { newstr_strcat( &tmp, startptr ); inref = 1; } endptr = xml_findend( tmp.data, "Publication" ); if ( endptr ) { newstr_segcpy( reference, tmp.data, endptr ); haveref = 1; } } } newstr_free( &tmp ); *fcharset = file_charset; return haveref; } /***************************************************** PUBLIC: int ebiin_processf() *****************************************************/ typedef struct xml_convert { char *in; /* The input tag */ char *a, *aval; /* The attribute="attribute_value" pair, if nec. */ char *out; /* The output tag */ int level; } xml_convert; static int ebiin_doconvert( xml *node, fields *info, xml_convert *c, int nc, int *found ) { int i, status; char *d; if ( !xml_hasdata( node ) ) goto out; d = xml_data( node ); for ( i=0; iMechanism and..... * and * Mechanism and.... */ static int ebiin_title( xml *node, fields *info, int title_level ) { int status; if ( xml_hasdata( node ) ) { status = fields_add( info, "TITLE", xml_data( node ), title_level ); if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR; } return BIBL_OK; } /* ebiin_medlinedate() * * - extract medline information from entries like: * 2003 Jan-Feb */ static int ebiin_medlinedate_year( fields *info, char *p, newstr *s, int level, char **end ) { int status; *end = newstr_cpytodelim( s, p, " \t\n\r", 0 ); if ( newstr_memerr( s ) ) return BIBL_ERR_MEMERR; if ( s->len ) { status = fields_add( info, "PARTYEAR", s->data, level ); if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR; } return BIBL_OK; } static int ebiin_medlinedate_month( fields *info, char *p, newstr *s, int level, char **end ) { int status; *end = newstr_cpytodelim( s, p, " \t\n\r", 0 ); newstr_findreplace( s, "-", "/" ); if ( newstr_memerr( s ) ) return BIBL_ERR_MEMERR; if ( s->len ) { status = fields_add( info, "PARTMONTH", s->data, level ); if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR; } return BIBL_OK; } static int ebiin_medlinedate_day( fields *info, char *p, newstr *s, int level, char **end ) { int status; *end = newstr_cpytodelim( s, p, " \t\n\r", 0 ); if ( newstr_memerr( s ) ) return BIBL_ERR_MEMERR; if ( s->len ) { status = fields_add( info, "PARTDAY", s->data, level ); if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR; } return BIBL_OK; } static int ebiin_medlinedate( fields *info, char *p, int level ) { int status; newstr s; newstr_init( &s ); status = ebiin_medlinedate_year( info, skip_ws( p ), &s, level, &p ); if ( status==BIBL_OK && *p ) status = ebiin_medlinedate_month( info, skip_ws( p ), &s, level, &p ); if ( status==BIBL_OK && *p ) status = ebiin_medlinedate_day( info, skip_ws( p ), &s, level, &p ); newstr_free( &s ); return status; } /* * 0027-8424 * * 100 * 21 * * 2003 * Oct * 14 * * * * * or.... * * * 0735-0414 * * 38 * 1 * * 2003 Jan-Feb * * * Alcohol and alcoholism (Oxford, Oxfordshire) * Alcohol Alcohol. * */ static int ebiin_journal1( xml *node, fields *info ) { xml_convert c[] = { { "ISSN", NULL, NULL, "ISSN", 1 }, { "Volume", NULL, NULL, "VOLUME", 1 }, { "Issue", NULL, NULL, "ISSUE", 1 }, { "Year", NULL, NULL, "PARTYEAR", 1 }, { "Month", NULL, NULL, "PARTMONTH", 1 }, { "Day", NULL, NULL, "PARTDAY", 1 }, { "Language", NULL, NULL, "LANGUAGE", 1 }, }; int nc = sizeof( c ) / sizeof( c[0] ), status, found; if ( xml_hasdata( node ) ) { status = ebiin_doconvert( node, info, c, nc, &found ); if ( status!=BIBL_OK ) return status; if ( !found ) { if ( xml_tagexact( node, "MedlineDate" ) ) { status = ebiin_medlinedate( info, xml_data( node ), 1 ); if ( status!=BIBL_OK ) return status; } } } if ( node->down ) { status = ebiin_journal1( node->down, info ); if ( status!=BIBL_OK ) return status; } if ( node->next ) { status = ebiin_journal1( node->next, info ); if ( status!=BIBL_OK ) return status; } return BIBL_OK; } /* * 12111-6 * */ static int ebiin_pages( fields *info, char *p ) { int i, status, ret = BIBL_OK; const int level = 1; newstr sp, ep, *up; newstrs_init( &sp, &ep, NULL ); /* ...start page */ p = newstr_cpytodelim( &sp, skip_ws( p ), "-", 1 ); if ( newstr_memerr( &sp ) ) { ret = BIBL_ERR_MEMERR; goto out; } /* ...end page */ p = newstr_cpytodelim( &ep, skip_ws( p ), " \t\n\r", 0 ); if ( newstr_memerr( &ep ) ) { ret = BIBL_ERR_MEMERR; goto out; } if ( sp.len ) { status = fields_add( info, "PAGESTART", sp.data, level ); if ( status!=FIELDS_OK ) { ret = BIBL_ERR_MEMERR; goto out; } } if ( ep.len ) { if ( sp.len > ep.len ) { for ( i=sp.len-ep.len; idata, level ); if ( status!=FIELDS_OK ) ret = BIBL_ERR_MEMERR; } out: newstrs_free( &sp, &ep, NULL ); return ret; } static int ebiin_pagination( xml *node, fields *info ) { int status; if ( xml_tagexact( node, "Pages" ) && node->value ) { status = ebiin_pages( info, xml_data( node ) ); if ( status!=BIBL_OK ) return status; } if ( node->down ) { status = ebiin_pagination( node->down, info ); if ( status!=BIBL_OK ) return status; } if ( node->next ) { status = ebiin_pagination( node->next, info ); if ( status!=BIBL_OK ) return status; } return BIBL_OK; } /* * ljwejrelr * */ static int ebiin_abstract( xml *node, fields *info ) { int status; if ( xml_hasdata( node ) && xml_tagexact( node, "AbstractText" ) ) { status = fields_add( info, "ABSTRACT", xml_data( node ), 0 ); if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR; } else if ( node->next ) { status = ebiin_abstract( node->next, info ); if ( status!=BIBL_OK ) return status; } return BIBL_OK; } /* * * Barondeau * David P * ( or David P ) * DP * * */ static int ebiin_author( xml *node, newstr *name ) { int status; char *p; if ( xml_tagexact( node, "LastName" ) ) { if ( name->len ) { newstr_prepend( name, "|" ); newstr_prepend( name, xml_data( node ) ); } else newstr_strcat( name, xml_data( node ) ); } else if ( xml_tagexact( node, "ForeName" ) || xml_tagexact( node, "FirstName" ) ) { p = xml_data( node ); while ( p && *p ) { if ( name->len ) newstr_addchar( name, '|' ); while ( *p && *p==' ' ) p++; while ( *p && *p!=' ' ) newstr_addchar( name, *p++ ); } } else if ( xml_tagexact( node, "Initials" ) && !strchr( name->data, '|' ) ) { p = xml_data( node ); while ( p && *p ) { if ( name->len ) newstr_addchar( name, '|' ); if ( !is_ws(*p ) ) newstr_addchar( name, *p++ ); } } if ( newstr_memerr( name ) ) return BIBL_ERR_MEMERR; if ( node->down ) { status = ebiin_author( node->down, name ); if ( status!=BIBL_OK ) return status; } if ( node->next ) { status = ebiin_author( node->next, name ); if ( status!=BIBL_OK ) return status; } return BIBL_OK; } static int ebiin_authorlist( xml *node, fields *info, int level ) { int fstatus, status = BIBL_OK; newstr name; newstr_init( &name ); node = node->down; while ( node ) { if ( xml_tagexact( node, "Author" ) && node->down ) { status = ebiin_author( node->down, &name ); if ( status!=BIBL_OK ) goto out; if ( name.len ) { fstatus = fields_add(info,"AUTHOR",name.data,level); if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; } newstr_empty( &name ); } } node = node->next; } out: newstr_free( &name ); return status; } /* * Journal Article * */ /* * United States * Proc Natl Acad Sci U S A * 7507876 * */ static int ebiin_journal2( xml *node, fields *info ) { int status; if ( xml_tagwithdata( node, "TitleAbbreviation" ) ) { status = fields_add( info, "TITLE", xml_data( node ), 1 ); if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR; } if ( node->down ) { status = ebiin_journal2( node->down, info ); if ( status!=BIBL_OK ) return status; } if ( node->next ) { status = ebiin_journal2( node->next, info ); if ( status!=BIBL_OK ) return status; } return BIBL_OK; } /* * * * Biophysics * * * Crystallography, X-Ray * * */ static int ebiin_meshheading( xml *node, fields *info ) { int status; if ( xml_tagwithdata( node, "DescriptorName" ) ) { status = fields_add( info, "KEYWORD", xml_data( node ), 0 ); if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR; } if ( node->next ) { status = ebiin_meshheading( node->next, info ); if ( status!=BIBL_OK ) return status; } return BIBL_OK; } static int ebiin_meshheadinglist( xml *node, fields *info ) { int status; if ( xml_tagexact( node, "MeshHeading" ) && node->down ) { status = ebiin_meshheading( node->down, info ); if ( status!=BIBL_OK ) return status; } if ( node->next ) { status = ebiin_meshheadinglist( node->next, info ); if ( status!=BIBL_OK ) return status; } return BIBL_OK; } static int ebiin_book( xml *node, fields *info, int book_level ) { xml_convert book[] = { { "Publisher", NULL, NULL, "PUBLISHER", 0 }, { "Language", NULL, NULL, "LANGUAGE", 0 }, { "ISBN10", NULL, NULL, "ISBN", 0 }, { "ISBN13", NULL, NULL, "ISBN13", 0 }, { "Year", NULL, NULL, "YEAR", 0 }, { "Month", NULL, NULL, "MONTH", 0 }, { "Day", NULL, NULL, "DAY", 0 }, { "PageTotal", NULL, NULL, "TOTALPAGES", 0 }, { "SeriesName", NULL, NULL, "TITLE", 1 }, { "SeriesISSN", NULL, NULL, "ISSN", 0 }, { "OtherReportInformation", NULL, NULL, "NOTES", 0 }, { "Edition", NULL, NULL, "EDITION", 0 }, }; int nbook = sizeof( book ) / sizeof( book[0] ); xml_convert inbook[] = { { "Publisher", NULL, NULL, "PUBLISHER", 1 }, { "Language", NULL, NULL, "LANGUAGE", 0 }, { "ISBN10", NULL, NULL, "ISBN", 1 }, { "ISBN13", NULL, NULL, "ISBN13", 1 }, { "Year", NULL, NULL, "PARTYEAR", 1 }, { "Month", NULL, NULL, "PARTMONTH", 1 }, { "Day", NULL, NULL, "PARTDAY", 1 }, { "PageTotal", NULL, NULL, "TOTALPAGES", 1 }, { "SeriesName", NULL, NULL, "TITLE", 2 }, { "SeriesISSN", NULL, NULL, "ISSN", 1 }, { "OtherReportInformation", NULL, NULL, "NOTES", 1 }, { "Edition", NULL, NULL, "EDITION", 1 }, }; int ninbook = sizeof( inbook ) / sizeof( inbook[0] ); xml_convert *c; int nc, status, found; if ( book_level==0 ) { c = book; nc = nbook; } else { c = inbook; nc = ninbook; } if ( xml_hasdata( node ) ) { status = ebiin_doconvert( node, info, c, nc, &found ); if ( status!=BIBL_OK ) return status; if ( !found ) { status = BIBL_OK; if ( xml_tagexact( node, "MedlineDate" ) ) status = ebiin_medlinedate( info, xml_data( node ), book_level); else if ( xml_tagexact( node, "Title" ) ) status = ebiin_title( node, info, book_level ); else if ( xml_tagexact( node, "Pagination" ) && node->down ) status = ebiin_pagination( node->down, info ); else if ( xml_tagexact( node, "Abstract" ) && node->down ) status = ebiin_abstract( node->down, info ); else if ( xml_tagexact( node, "AuthorList" ) ) status = ebiin_authorlist( node, info, book_level ); else if ( xml_tagexact( node, "PubDate" ) && node->down) status = ebiin_book( node->down, info, book_level ); if ( status!=BIBL_OK ) return status; } } if ( node->next ) { status = ebiin_book( node->next, info, book_level ); if ( status!=BIBL_OK ) return status; } return BIBL_OK; } static int ebiin_article( xml *node, fields *info ) { int status = BIBL_OK; if ( xml_tagexact( node, "Journal" ) ) status = ebiin_journal1( node, info ); else if ( node->down && ( xml_tagexact( node, "Book" ) || xml_tagexact(node, "Report") )) status = ebiin_book( node->down, info, 1 ); else if ( xml_tagexact( node, "ArticleTitle" ) ) status = ebiin_title( node, info, 0 ); else if ( xml_tagexact( node, "Pagination" ) && node->down ) status = ebiin_pagination( node->down, info ); else if ( xml_tagexact( node, "Abstract" ) && node->down ) status = ebiin_abstract( node->down, info ); else if ( xml_tagexact( node, "AuthorList" ) ) status = ebiin_authorlist( node, info, 0 ); if ( status!=BIBL_OK ) return status; if ( node->next ) { status = ebiin_article( node->next, info ); if ( status!=BIBL_OK ) return status; } return BIBL_OK; } static int ebiin_publication( xml *node, fields *info ) { int status; if ( node->down ) { if ( xml_tagexact( node, "Article" ) ) status = ebiin_article( node->down, info ); else if ( xml_tagexact( node, "Book" ) ) status = ebiin_book( node->down, info, 0 ); else if ( xml_tagexact( node, "Report" ) ) status = ebiin_book( node->down, info, 0 ); else if ( xml_tagexact( node, "JournalInfo" ) ) status = ebiin_journal2( node->down, info ); else if ( xml_tagexact( node, "MeshHeadingList" ) ) status = ebiin_meshheadinglist( node->down, info ); if ( status!=BIBL_OK ) return status; } if ( node->next ) { status = ebiin_publication( node->next, info ); if ( status!=BIBL_OK ) return status; } return BIBL_OK; } /* Call with the "Publication" node */ static int ebiin_fixtype( xml *node, fields *info ) { char *resource = NULL, *issuance = NULL, *genre1 = NULL, *genre2 = NULL; newstr *type; int reslvl, isslvl, gen1lvl, gen2lvl; int status; type = xml_getattrib( node, "Type" ); if ( !type || type->len==0 ) return BIBL_OK; if ( !strcmp( type->data, "JournalArticle" ) ) { resource = "text"; issuance = "continuing"; genre1 = "periodical"; genre2 = "academic journal"; reslvl = 0; isslvl = 1; gen1lvl = 1; gen2lvl = 1; } else if ( !strcmp( type->data, "Book" ) ) { resource = "text"; issuance = "monographic"; genre1 = "book"; reslvl = 0; isslvl = 0; gen1lvl = 0; } else if ( !strcmp( type->data, "BookArticle" ) ) { resource = "text"; issuance = "monographic"; genre1 = "book"; reslvl = 0; isslvl = 1; gen1lvl = 1; } if ( resource ) { status = fields_add( info, "RESOURCE", resource, reslvl ); if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR; } if ( issuance ) { status = fields_add( info, "ISSUANCE", issuance, isslvl ); if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR; } if ( genre1 ) { status = fields_add( info, "GENRE", genre1, gen1lvl ); if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR; } if ( genre2 ) { status = fields_add( info, "GENRE", genre2, gen2lvl ); if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR; } return BIBL_OK; } static int ebiin_assembleref( xml *node, fields *info ) { int status; if ( xml_tagexact( node, "Publication" ) && node->down ) { status = ebiin_fixtype( node, info ); if ( status!=BIBL_OK ) return status; status = ebiin_publication( node->down, info ); if ( status!=BIBL_OK ) return status; } else if ( node->down ) { status = ebiin_assembleref( node->down, info ); if ( status!=BIBL_OK ) return status; } if ( node->next ) { status = ebiin_assembleref( node->next, info ); if ( status!=BIBL_OK ) return status; } return BIBL_OK; } int ebiin_processf( fields *ebiin, char *data, char *filename, long nref ) { int status; xml top; xml_init( &top ); xml_tree( data, &top ); status = ebiin_assembleref( &top, ebiin ); xml_free( &top ); return ( status==BIBL_OK ) ? 1 : 0; } hs-bibutils-5.5/bibutils/wordin.h0000644000000000000000000000100612445605732015273 0ustar0000000000000000/* * wordin.h * * Copyright (c) Chris Putnam 2009-2013 * * Source code released under the GPL version 2 * */ #ifndef WORDIN_H #define WORDIN_H #include "newstr.h" #include "fields.h" #include "reftypes.h" #include "bibutils.h" extern int wordin_readf( FILE *fp, char *buf, int bufsize, int *bufpos, newstr *line, newstr *reference, int *fcharset ); extern int wordin_processf( fields *wordin, char *data, char *filename, long nref ); extern void wordin_initparams( param *p, const char *progname ); #endif hs-bibutils-5.5/bibutils/strsearch.c0000644000000000000000000000171412445605732015770 0ustar0000000000000000/* strsearch.c * * Copyright (c) Chris Putnam 1995-2013 * * Source code released under the GPL version 2 * * strsearch() locates a case-independent substring * e.g. a case-independent version of strstr() * * returns pointer to first occurrence of substring needle in * the string haystack when found, NULL if not found * * '\0' characters terminating strings are not compared * * strsearch returns haystack when needle is empty as per strstr() * conventions * */ #include #include #include "strsearch.h" char *strsearch (const char *haystack, const char *needle) { char *returnptr=NULL; unsigned long pos=0; if ( !(*needle) ) returnptr = (char *) haystack; while (*(haystack+pos) && returnptr==NULL) { if ( toupper((unsigned char)*(haystack+pos)) == toupper((unsigned char)*(needle+pos)) ) pos++; else { pos = 0; haystack++; } if ( ! (*(needle+pos)) ) returnptr = (char *) haystack; } return returnptr; } hs-bibutils-5.5/bibutils/bltypes.c0000644000000000000000000023116012445605732015454 0ustar0000000000000000/* * bltypes.c * * Copyright (c) Chris Putnam 2008-2013 * Copyright (c) Johannes Wilm 2010-2013 * * Program and source code released under the GPL version 2 * */ #include #include "fields.h" #include "reftypes.h" /* Entry types for biblatex formatted bibliographies */ /* * Article in a journal, newspaper, other periodical */ static lookups article[] = { { "author", "AUTHOR", PERSON, LEVEL_MAIN }, { "editor", "EDITOR", BLT_EDITOR, LEVEL_MAIN }, { "editora", "EDITOR", BLT_EDITOR, LEVEL_MAIN }, { "editorb", "EDITOR", BLT_EDITOR, LEVEL_MAIN }, { "editorc", "EDITOR", BLT_EDITOR, LEVEL_MAIN }, { "editortype", "", BLT_SKIP, LEVEL_MAIN }, { "editoratype", "", BLT_SKIP, LEVEL_MAIN }, { "editorbtype", "", BLT_SKIP, LEVEL_MAIN }, { "editorctype", "", BLT_SKIP, LEVEL_MAIN }, { "director", "DIRECTOR", PERSON, LEVEL_MAIN }, { "producer", "PRODUCER", PERSON, LEVEL_MAIN }, { "execproducer", "PRODUCER", PERSON, LEVEL_MAIN }, { "writer", "AUTHOR", PERSON, LEVEL_MAIN }, { "redactor", "REDACTOR", PERSON, LEVEL_MAIN }, { "annotator", "ANNOTATOR", PERSON, LEVEL_MAIN }, { "commentator", "COMMENTATOR", PERSON, LEVEL_MAIN }, { "translator", "TRANSLATOR", PERSON, LEVEL_MAIN }, { "title", "TITLE", TITLE, LEVEL_MAIN }, { "subtitle", "SUBTITLE", TITLE, LEVEL_MAIN }, { "titleaddon", "TITLEADDON", TITLE, LEVEL_MAIN }, { "shorttitle", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, { "journal", "TITLE", TITLE, LEVEL_HOST }, { "journaltitle", "TITLE", TITLE, LEVEL_HOST }, { "journalsubtitle", "SUBTITLE", TITLE, LEVEL_HOST }, { "shortjournal", "SHORTTITLE", SIMPLE, LEVEL_HOST }, { "issuetitle", "TITLE", TITLE, LEVEL_SERIES }, /*WRONG*/ { "issuesubtitle", "SUBTITLE", TITLE, LEVEL_SERIES }, /*WRONG*/ { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "origlanguage", "LANGUAGE", SIMPLE, LEVEL_ORIG }, { "origyear", "YEAR", SIMPLE, LEVEL_ORIG }, { "origdate", "DATE", SIMPLE, LEVEL_ORIG }, { "origtitle", "TITLE", SIMPLE, LEVEL_ORIG }, { "origlocation", "ADDRESS", SIMPLE, LEVEL_ORIG }, { "origpublisher", "PUBLISHER", SIMPLE, LEVEL_ORIG }, { "series", "PARTTITLE", SIMPLE, LEVEL_HOST }, { "volume", "VOLUME", SIMPLE, LEVEL_MAIN }, { "number", "NUMBER", SIMPLE, LEVEL_MAIN }, { "eid", "EID", SIMPLE, LEVEL_MAIN }, { "issue", "ISSUE", SIMPLE, LEVEL_MAIN }, { "date", "DATE", SIMPLE, LEVEL_MAIN }, /*WRONG*/ { "day", "PARTDAY", SIMPLE, LEVEL_MAIN }, { "month", "PARTMONTH", SIMPLE, LEVEL_MAIN }, { "year", "PARTYEAR", SIMPLE, LEVEL_MAIN }, { "pages", "PAGES", PAGES, LEVEL_MAIN }, { "version", "EDITION", SIMPLE, LEVEL_MAIN }, { "note", "NOTES", SIMPLE, LEVEL_MAIN }, { "annote", "ANNOTATION", SIMPLE, LEVEL_MAIN }, { "annotation", "ANNOTATION", SIMPLE, LEVEL_MAIN }, { "issn", "ISSN", SIMPLE, LEVEL_HOST }, { "abstract", "ABSTRACT", SIMPLE, LEVEL_MAIN }, { "addendum", "ADDENDUM", SIMPLE, LEVEL_MAIN }, { "doi", "DOI", SIMPLE, LEVEL_MAIN }, { "pubstate", "PUBSTATE", SIMPLE, LEVEL_MAIN }, { "eprint", "", BT_EPRINT, LEVEL_MAIN }, { "eprinttype", "", BT_EPRINT, LEVEL_MAIN }, { "url", "", BT_URL, LEVEL_MAIN }, { "urldate", "URLDATE", SIMPLE, LEVEL_MAIN }, { "urlday", "?urlday?", SIMPLE, LEVEL_MAIN }, /* WRONG */ { "urlmonth", "?urlmonth?", SIMPLE, LEVEL_MAIN }, /* WRONG */ { "urlyear", "?urlyear?", SIMPLE, LEVEL_MAIN }, /* WRONG */ { "address", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN }, { "hyphenation", "LANGCATALOG", SIMPLE, LEVEL_MAIN }, { "entrysubtype", "", BLT_SUBTYPE, LEVEL_MAIN }, { "", "INTERNAL_TYPE|ARTICLE", ALWAYS, LEVEL_MAIN }, { "", "ISSUANCE|continuing", ALWAYS, LEVEL_HOST }, { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { "", "NGENRE|journal article", DEFAULT, LEVEL_MAIN }, { "", "GENRE|periodical", DEFAULT, LEVEL_HOST } }; /* Book */ static lookups book[] = { { "author", "AUTHOR", PERSON, LEVEL_MAIN }, { "editor", "EDITOR", BLT_EDITOR, LEVEL_MAIN }, { "editora", "EDITOR", BLT_EDITOR, LEVEL_MAIN }, { "editorb", "EDITOR", BLT_EDITOR, LEVEL_MAIN }, { "editorc", "EDITOR", BLT_EDITOR, LEVEL_MAIN }, { "editortype", "", BLT_SKIP, LEVEL_MAIN }, { "editoratype", "", BLT_SKIP, LEVEL_MAIN }, { "editorbtype", "", BLT_SKIP, LEVEL_MAIN }, { "editorctype", "", BLT_SKIP, LEVEL_MAIN }, { "director", "DIRECTOR", PERSON, LEVEL_MAIN }, { "producer", "PRODUCER", PERSON, LEVEL_MAIN }, { "execproducer", "PRODUCER", PERSON, LEVEL_MAIN }, { "writer", "AUTHOR", PERSON, LEVEL_MAIN }, { "redactor", "REDACTOR", PERSON, LEVEL_MAIN }, { "annotator", "ANNOTATOR", PERSON, LEVEL_MAIN }, { "commentator", "COMMENTATOR", PERSON, LEVEL_MAIN }, { "translator", "TRANSLATOR", PERSON, LEVEL_MAIN }, { "introduction", "INTROAUTHOR", PERSON, LEVEL_MAIN }, { "foreword", "INTROAUTHOR", PERSON, LEVEL_MAIN }, { "afterword", "AFTERAUTHOR", PERSON, LEVEL_MAIN }, { "title", "TITLE", TITLE, LEVEL_MAIN }, { "subtitle", "SUBTITLE", TITLE, LEVEL_MAIN }, { "titleaddon", "TITLEADDON", TITLE, LEVEL_MAIN }, { "shorttitle", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, { "maintitle", "TITLE", TITLE, LEVEL_HOST }, { "mainsubtitle", "SUBTITLE", TITLE, LEVEL_HOST }, { "maintitleaddon", "TITLEADDON", TITLE, LEVEL_HOST }, { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "year", "YEAR", SIMPLE, LEVEL_MAIN }, { "month", "MONTH", SIMPLE, LEVEL_MAIN }, { "date", "DATE", SIMPLE, LEVEL_MAIN }, /*WRONG*/ { "origlanguage", "LANGUAGE", SIMPLE, LEVEL_ORIG }, { "origyear", "YEAR", SIMPLE, LEVEL_ORIG }, { "origdate", "DATE", SIMPLE, LEVEL_ORIG }, { "origtitle", "TITLE", SIMPLE, LEVEL_ORIG }, { "origlocation", "ADDRESS", SIMPLE, LEVEL_ORIG }, { "origpublisher", "PUBLISHER", SIMPLE, LEVEL_ORIG }, { "volume", "VOLUME", SIMPLE, LEVEL_HOST }, { "part", "PART", SIMPLE, LEVEL_HOST }, { "edition", "EDITION", SIMPLE, LEVEL_MAIN }, { "volumes", "NUMVOLUMES", SIMPLE, LEVEL_HOST }, { "series", "TITLE", SIMPLE, LEVEL_HOST }, /* WRONG */ { "number", "NUMBER", SIMPLE, LEVEL_MAIN }, { "note", "NOTES", SIMPLE, LEVEL_MAIN }, { "annote", "ANNOTATION", SIMPLE, LEVEL_MAIN }, { "annotation", "ANNOTATION", SIMPLE, LEVEL_MAIN }, { "publisher", "PUBLISHER", SIMPLE, LEVEL_MAIN }, { "location", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "isbn", "ISBN", SIMPLE, LEVEL_MAIN }, { "chapter", "CHAPTER", SIMPLE, LEVEL_MAIN }, { "pages", "PAGES", PAGES, LEVEL_MAIN }, /* WRONG */ { "pagetotal", "TOTALPAGES", SIMPLE, LEVEL_MAIN }, { "addendum", "ADDENDUM", SIMPLE, LEVEL_MAIN }, { "doi", "DOI", SIMPLE, LEVEL_MAIN }, { "pubstate", "PUBSTATE", SIMPLE, LEVEL_MAIN }, { "eprint", "", BT_EPRINT, LEVEL_MAIN }, { "eprinttype", "", BT_EPRINT, LEVEL_MAIN }, { "url", "", BT_URL, LEVEL_MAIN }, { "urldate", "URLDATE", SIMPLE, LEVEL_MAIN }, { "urlday", "?urlday?", SIMPLE, LEVEL_MAIN }, { "urlmonth", "?urlmonth?", SIMPLE, LEVEL_MAIN }, { "urlyear", "?urlyear?", SIMPLE, LEVEL_MAIN }, { "address", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "hyphenation", "LANGCATALOG", SIMPLE, LEVEL_MAIN }, { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN }, { "", "INTERNAL_TYPE|BOOK", ALWAYS, LEVEL_MAIN }, { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { "", "ISSUANCE|monographic", ALWAYS, LEVEL_MAIN }, { "", "GENRE|book", ALWAYS, LEVEL_MAIN } }; /* Booklet */ static lookups booklet[] = { { "author", "AUTHOR", PERSON, LEVEL_MAIN }, { "editor", "EDITOR", BLT_EDITOR, LEVEL_MAIN }, { "editora", "EDITOR", BLT_EDITOR, LEVEL_MAIN }, { "editorb", "EDITOR", BLT_EDITOR, LEVEL_MAIN }, { "editorc", "EDITOR", BLT_EDITOR, LEVEL_MAIN }, { "editortype", "", BLT_SKIP, LEVEL_MAIN }, { "editoratype", "", BLT_SKIP, LEVEL_MAIN }, { "editorbtype", "", BLT_SKIP, LEVEL_MAIN }, { "editorctype", "", BLT_SKIP, LEVEL_MAIN }, { "director", "DIRECTOR", PERSON, LEVEL_MAIN }, { "producer", "PRODUCER", PERSON, LEVEL_MAIN }, { "execproducer", "PRODUCER", PERSON, LEVEL_MAIN }, { "writer", "AUTHOR", PERSON, LEVEL_MAIN }, { "title", "TITLE", TITLE, LEVEL_MAIN }, { "subtitle", "SUBTITLE", TITLE, LEVEL_MAIN }, { "titleaddon", "TITLEADDON", TITLE, LEVEL_MAIN }, { "shorttitle", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, { "howpublished", "", HOWPUBLISHED, LEVEL_MAIN }, { "year", "YEAR", SIMPLE, LEVEL_MAIN }, { "month", "MONTH", SIMPLE, LEVEL_MAIN }, { "date", "DATE", SIMPLE, LEVEL_MAIN }, /*WRONG*/ { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "type", "GENRE", BT_GENRE, LEVEL_MAIN }, { "note", "NOTES", SIMPLE, LEVEL_MAIN }, { "annote", "ANNOTATION", SIMPLE, LEVEL_MAIN }, { "annotation", "ANNOTATION", SIMPLE, LEVEL_MAIN }, { "publisher", "PUBLISHER", SIMPLE, LEVEL_MAIN }, { "location", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "chapter", "CHAPTER", SIMPLE, LEVEL_MAIN }, { "pages", "PAGES", PAGES, LEVEL_MAIN }, { "pagetotal", "TOTALPAGES", SIMPLE, LEVEL_MAIN }, { "addendum", "ADDENDUM", SIMPLE, LEVEL_MAIN }, { "doi", "DOI", SIMPLE, LEVEL_MAIN }, { "pubstate", "PUBSTATE", SIMPLE, LEVEL_MAIN }, { "eprint", "", BT_EPRINT, LEVEL_MAIN }, { "eprinttype", "", BT_EPRINT, LEVEL_MAIN }, { "url", "", BT_URL, LEVEL_MAIN }, { "urldate", "URLDATE", SIMPLE, LEVEL_MAIN }, { "urlday", "?urlday?", SIMPLE, LEVEL_MAIN }, { "urlmonth", "?urlmonth?", SIMPLE, LEVEL_MAIN }, { "urlyear", "?urlyear?", SIMPLE, LEVEL_MAIN }, { "address", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "hyphenation", "LANGCATALOG", SIMPLE, LEVEL_MAIN }, { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN }, { "", "INTERNAL_TYPE|BOOK", ALWAYS, LEVEL_MAIN }, { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { "", "ISSUANCE|monographic", ALWAYS, LEVEL_MAIN }, { "", "GENRE|book", ALWAYS, LEVEL_MAIN } }; static lookups collection[] = { { "editor", "EDITOR", BLT_EDITOR, LEVEL_MAIN }, { "editora", "EDITOR", BLT_EDITOR, LEVEL_MAIN }, { "editorb", "EDITOR", BLT_EDITOR, LEVEL_MAIN }, { "editorc", "EDITOR", BLT_EDITOR, LEVEL_MAIN }, { "editortype", "", BLT_SKIP, LEVEL_MAIN }, { "editoratype", "", BLT_SKIP, LEVEL_MAIN }, { "editorbtype", "", BLT_SKIP, LEVEL_MAIN }, { "editorctype", "", BLT_SKIP, LEVEL_MAIN }, { "director", "DIRECTOR", PERSON, LEVEL_MAIN }, { "producer", "PRODUCER", PERSON, LEVEL_MAIN }, { "execproducer", "PRODUCER", PERSON, LEVEL_MAIN }, { "writer", "AUTHOR", PERSON, LEVEL_MAIN }, { "redactor", "REDACTOR", PERSON, LEVEL_MAIN }, { "annotator", "ANNOTATOR", PERSON, LEVEL_MAIN }, { "commentator", "COMMENTATOR", PERSON, LEVEL_MAIN }, { "translator", "TRANSLATOR", PERSON, LEVEL_MAIN }, { "year", "YEAR", SIMPLE, LEVEL_MAIN }, { "month", "MONTH", SIMPLE, LEVEL_MAIN }, { "date", "DATE", SIMPLE, LEVEL_MAIN }, /*WRONG*/ { "introduction", "INTROAUTHOR", PERSON, LEVEL_MAIN }, { "foreword", "INTROAUTHOR", PERSON, LEVEL_MAIN }, { "afterword", "AFTERAUTHOR", PERSON, LEVEL_MAIN }, { "title", "TITLE", TITLE, LEVEL_MAIN }, { "subtitle", "SUBTITLE", TITLE, LEVEL_MAIN }, { "titleaddon", "TITLEADDON", TITLE, LEVEL_MAIN }, { "shorttitle", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, { "maintitle", "TITLE", TITLE, LEVEL_HOST }, { "mainsubtitle", "SUBTITLE", TITLE, LEVEL_HOST }, { "maintitleaddon", "TITLEADDON", TITLE, LEVEL_HOST }, { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "origlanguage", "LANGUAGE", SIMPLE, LEVEL_ORIG }, { "origyear", "YEAR", SIMPLE, LEVEL_ORIG }, { "origdate", "DATE", SIMPLE, LEVEL_ORIG }, { "origtitle", "TITLE", SIMPLE, LEVEL_ORIG }, { "origlocation", "ADDRESS", SIMPLE, LEVEL_ORIG }, { "origpublisher", "PUBLISHER", SIMPLE, LEVEL_ORIG }, { "volume", "VOLUME", SIMPLE, LEVEL_HOST }, { "part", "PART", SIMPLE, LEVEL_HOST }, { "edition", "EDITION", SIMPLE, LEVEL_MAIN }, { "volumes", "NUMVOLUMES", SIMPLE, LEVEL_HOST }, { "series", "TITLE", SIMPLE, LEVEL_HOST }, { "number", "NUMBER", SIMPLE, LEVEL_MAIN }, { "note", "NOTES", SIMPLE, LEVEL_MAIN }, { "annote", "ANNOTATION", SIMPLE, LEVEL_MAIN }, { "annotation", "ANNOTATION", SIMPLE, LEVEL_MAIN }, { "publisher", "PUBLISHER", SIMPLE, LEVEL_MAIN }, { "location", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "isbn", "ISBN", SIMPLE, LEVEL_MAIN }, { "chapter", "CHAPTER", SIMPLE, LEVEL_MAIN }, { "pages", "PAGES", PAGES, LEVEL_MAIN }, { "pagetotal", "TOTALPAGES", SIMPLE, LEVEL_MAIN }, { "addendum", "ADDENDUM", SIMPLE, LEVEL_MAIN }, { "doi", "DOI", SIMPLE, LEVEL_MAIN }, { "pubstate", "PUBSTATE", SIMPLE, LEVEL_MAIN }, { "eprint", "", BT_EPRINT, LEVEL_MAIN }, { "eprinttype", "", BT_EPRINT, LEVEL_MAIN }, { "url", "", BT_URL, LEVEL_MAIN }, { "urldate", "URLDATE", SIMPLE, LEVEL_MAIN }, { "urlday", "?urlday?", SIMPLE, LEVEL_MAIN }, { "urlmonth", "?urlmonth?", SIMPLE, LEVEL_MAIN }, { "urlyear", "?urlyear?", SIMPLE, LEVEL_MAIN }, { "address", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "hyphenation", "LANGCATALOG", SIMPLE, LEVEL_MAIN }, { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN }, { "", "INTERNAL_TYPE|BOOK", ALWAYS, LEVEL_MAIN }, { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { "", "ISSUANCE|monographic", ALWAYS, LEVEL_MAIN }, { "", "GENRE|book", ALWAYS, LEVEL_MAIN } }; /* Part of a book (e.g. chapter or section) */ static lookups inbook[] = { { "author", "AUTHOR", PERSON, LEVEL_MAIN }, { "editor", "EDITOR", BLT_EDITOR, LEVEL_HOST }, { "editora", "EDITOR", BLT_EDITOR, LEVEL_HOST }, { "editorb", "EDITOR", BLT_EDITOR, LEVEL_HOST }, { "editorc", "EDITOR", BLT_EDITOR, LEVEL_HOST }, { "editortype", "", BLT_SKIP, LEVEL_HOST }, { "editoratype", "", BLT_SKIP, LEVEL_HOST }, { "editorbtype", "", BLT_SKIP, LEVEL_HOST }, { "editorctype", "", BLT_SKIP, LEVEL_HOST }, { "director", "DIRECTOR", PERSON, LEVEL_HOST }, { "producer", "PRODUCER", PERSON, LEVEL_HOST }, { "execproducer", "PRODUCER", PERSON, LEVEL_HOST }, { "writer", "AUTHOR", PERSON, LEVEL_HOST }, { "redactor", "REDACTOR", PERSON, LEVEL_HOST }, { "annotator", "ANNOTATOR", PERSON, LEVEL_HOST }, { "commentator", "COMMENTATOR", PERSON, LEVEL_HOST }, { "translator", "TRANSLATOR", PERSON, LEVEL_HOST }, { "year", "YEAR", SIMPLE, LEVEL_MAIN }, { "month", "MONTH", SIMPLE, LEVEL_MAIN }, { "date", "DATE", SIMPLE, LEVEL_MAIN }, /*WRONG*/ { "introduction", "INTROAUTHOR", PERSON, LEVEL_HOST }, { "foreword", "INTROAUTHOR", PERSON, LEVEL_HOST }, { "afterword", "AFTERAUTHOR", PERSON, LEVEL_HOST }, { "title", "TITLE", TITLE, LEVEL_MAIN }, { "subtitle", "SUBTITLE", TITLE, LEVEL_MAIN }, { "titleaddon", "TITLEADDON", TITLE, LEVEL_MAIN }, { "shorttitle", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, { "booktitle", "TITLE", TITLE, LEVEL_HOST }, { "booksubtitle", "SUBTITLE", TITLE, LEVEL_HOST }, { "booktitleaddon", "TITLEADDON", TITLE, LEVEL_HOST }, { "bookauthor", "AUTHOR", PERSON, LEVEL_HOST }, { "maintitle", "TITLE", TITLE, LEVEL_SERIES }, { "mainsubtitle", "SUBTITLE", TITLE, LEVEL_SERIES }, { "maintitleaddon", "TITLEADDON", TITLE, LEVEL_SERIES }, { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "origlanguage", "LANGUAGE", SIMPLE, LEVEL_ORIG }, { "origyear", "YEAR", SIMPLE, LEVEL_ORIG }, { "origdate", "DATE", SIMPLE, LEVEL_ORIG }, { "origtitle", "TITLE", SIMPLE, LEVEL_ORIG }, { "origlocation", "ADDRESS", SIMPLE, LEVEL_ORIG }, { "origpublisher", "PUBLISHER", SIMPLE, LEVEL_ORIG }, { "volume", "VOLUME", SIMPLE, LEVEL_MAIN }, { "pages", "PAGES", PAGES, LEVEL_MAIN }, { "part", "PART", SIMPLE, LEVEL_HOST }, { "edition", "EDITION", SIMPLE, LEVEL_MAIN }, { "volumes", "NUMVOLUMES", SIMPLE, LEVEL_HOST }, { "series", "TITLE", SIMPLE, LEVEL_SERIES+1 }, /* WRONG */ { "number", "NUMBER", SIMPLE, LEVEL_MAIN }, { "note", "NOTES", SIMPLE, LEVEL_MAIN }, { "annote", "ANNOTATION", SIMPLE, LEVEL_MAIN }, { "annotation", "ANNOTATION", SIMPLE, LEVEL_MAIN }, { "publisher", "PUBLISHER", SIMPLE, LEVEL_MAIN }, { "location", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "isbn", "ISBN", SIMPLE, LEVEL_HOST }, { "chapter", "CHAPTER", SIMPLE, LEVEL_MAIN }, { "addendum", "ADDENDUM", SIMPLE, LEVEL_MAIN }, { "doi", "DOI", SIMPLE, LEVEL_MAIN }, { "pubstate", "PUBSTATE", SIMPLE, LEVEL_MAIN }, { "eprint", "", BT_EPRINT, LEVEL_MAIN }, { "eprinttype", "", BT_EPRINT, LEVEL_MAIN }, { "url", "", BT_URL, LEVEL_MAIN }, { "urldate", "URLDATE", SIMPLE, LEVEL_MAIN }, { "urlday", "?urlday?", SIMPLE, LEVEL_MAIN }, { "urlmonth", "?urlmonth?", SIMPLE, LEVEL_MAIN }, { "urlyear", "?urlyear?", SIMPLE, LEVEL_MAIN }, { "address", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "hyphenation", "LANGCATALOG", SIMPLE, LEVEL_MAIN }, { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN }, { "", "INTERNAL_TYPE|INBOOK", ALWAYS, LEVEL_MAIN }, { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { "", "ISSUANCE|monographic", ALWAYS, LEVEL_HOST }, { "", "NGENRE|book chapter", ALWAYS, LEVEL_MAIN }, { "", "GENRE|book", ALWAYS, LEVEL_HOST } }; /* incollection */ static lookups incollection[] = { { "author", "AUTHOR", PERSON, LEVEL_MAIN }, { "year", "YEAR", SIMPLE, LEVEL_MAIN }, { "month", "MONTH", SIMPLE, LEVEL_MAIN }, { "date", "DATE", SIMPLE, LEVEL_MAIN }, /*WRONG*/ { "title", "TITLE", TITLE, LEVEL_MAIN }, { "subtitle", "SUBTITLE", TITLE, LEVEL_MAIN }, { "titleaddon", "TITLEADDON", TITLE, LEVEL_MAIN }, { "shorttitle", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "edition", "EDITION", SIMPLE, LEVEL_MAIN }, { "number", "NUMBER", SIMPLE, LEVEL_MAIN }, { "note", "NOTES", SIMPLE, LEVEL_MAIN }, { "annote", "ANNOTATION", SIMPLE, LEVEL_MAIN }, { "annotation", "ANNOTATION", SIMPLE, LEVEL_MAIN }, { "introduction", "INTROAUTHOR", PERSON, LEVEL_HOST }, { "foreword", "INTROAUTHOR", PERSON, LEVEL_HOST }, { "afterword", "AFTERAUTHOR", PERSON, LEVEL_HOST }, { "bookauthor", "AUTHOR", PERSON, LEVEL_HOST }, { "booktitle", "TITLE", TITLE, LEVEL_HOST }, { "booksubtitle", "SUBTITLE", TITLE, LEVEL_HOST }, { "booktitleaddon", "TITLEADDON", TITLE, LEVEL_HOST }, { "editor", "EDITOR", BLT_EDITOR, LEVEL_HOST }, { "editora", "EDITOR", BLT_EDITOR, LEVEL_HOST }, { "editorb", "EDITOR", BLT_EDITOR, LEVEL_HOST }, { "editorc", "EDITOR", BLT_EDITOR, LEVEL_HOST }, { "editortype", "", BLT_SKIP, LEVEL_HOST }, { "editoratype", "", BLT_SKIP, LEVEL_HOST }, { "editorbtype", "", BLT_SKIP, LEVEL_HOST }, { "editorctype", "", BLT_SKIP, LEVEL_HOST }, { "director", "DIRECTOR", PERSON, LEVEL_HOST }, { "producer", "PRODUCER", PERSON, LEVEL_HOST }, { "execproducer", "PRODUCER", PERSON, LEVEL_HOST }, { "writer", "AUTHOR", PERSON, LEVEL_HOST }, { "redactor", "REDACTOR", PERSON, LEVEL_HOST }, { "annotator", "ANNOTATOR", PERSON, LEVEL_HOST }, { "commentator", "COMMENTATOR", PERSON, LEVEL_HOST }, { "translator", "TRANSLATOR", PERSON, LEVEL_HOST }, { "volume", "VOLUME", SIMPLE, LEVEL_HOST }, { "part", "PART", SIMPLE, LEVEL_HOST }, { "volumes", "NUMVOLUMES", SIMPLE, LEVEL_HOST }, { "maintitle", "TITLE", TITLE, LEVEL_SERIES }, { "mainsubtitle", "SUBTITLE", TITLE, LEVEL_SERIES }, { "maintitleaddon", "TITLEADDON", TITLE, LEVEL_SERIES }, { "series", "TITLE", SIMPLE, LEVEL_SERIES+1 }, /* WRONG */ { "origlanguage", "LANGUAGE", SIMPLE, LEVEL_ORIG }, { "origyear", "YEAR", SIMPLE, LEVEL_ORIG }, { "origdate", "DATE", SIMPLE, LEVEL_ORIG }, { "origtitle", "TITLE", SIMPLE, LEVEL_ORIG }, { "origlocation", "ADDRESS", SIMPLE, LEVEL_ORIG }, { "origpublisher", "PUBLISHER", SIMPLE, LEVEL_ORIG }, { "publisher", "PUBLISHER", SIMPLE, LEVEL_HOST }, { "location", "ADDRESS", SIMPLE, LEVEL_HOST }, { "isbn", "ISBN", SIMPLE, LEVEL_MAIN }, { "chapter", "CHAPTER", SIMPLE, LEVEL_MAIN }, { "pages", "PAGES", PAGES, LEVEL_MAIN }, /* WRONG */ { "addendum", "ADDENDUM", SIMPLE, LEVEL_MAIN }, { "doi", "DOI", SIMPLE, LEVEL_MAIN }, { "pubstate", "PUBSTATE", SIMPLE, LEVEL_MAIN }, { "eprint", "", BT_EPRINT, LEVEL_MAIN }, { "eprinttype", "", BT_EPRINT, LEVEL_MAIN }, { "url", "", BT_URL, LEVEL_MAIN }, { "urldate", "URLDATE", SIMPLE, LEVEL_MAIN }, { "urlday", "?urlday?", SIMPLE, LEVEL_MAIN }, { "urlmonth", "?urlmonth?", SIMPLE, LEVEL_MAIN }, { "urlyear", "?urlyear?", SIMPLE, LEVEL_MAIN }, { "address", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "hyphenation", "LANGCATALOG", SIMPLE, LEVEL_MAIN }, { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN }, { "", "INTERNAL_TYPE|INCOLLECTION", ALWAYS, LEVEL_MAIN }, { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { "", "ISSUANCE|monographic", ALWAYS, LEVEL_MAIN }, { "", "GENRE|collection", ALWAYS, LEVEL_HOST } }; /* inproceedings */ static lookups inproceedings[] = { { "author", "AUTHOR", PERSON, LEVEL_MAIN }, { "editor", "EDITOR", BLT_EDITOR, LEVEL_HOST }, { "editora", "EDITOR", BLT_EDITOR, LEVEL_HOST }, { "editorb", "EDITOR", BLT_EDITOR, LEVEL_HOST }, { "editorc", "EDITOR", BLT_EDITOR, LEVEL_HOST }, { "editortype", "", BLT_SKIP, LEVEL_HOST }, { "editoratype", "", BLT_SKIP, LEVEL_HOST }, { "editorbtype", "", BLT_SKIP, LEVEL_HOST }, { "editorctype", "", BLT_SKIP, LEVEL_HOST }, { "director", "DIRECTOR", PERSON, LEVEL_HOST }, { "producer", "PRODUCER", PERSON, LEVEL_HOST }, { "execproducer", "PRODUCER", PERSON, LEVEL_HOST }, { "writer", "AUTHOR", PERSON, LEVEL_HOST }, { "redactor", "REDACTOR", PERSON, LEVEL_HOST }, { "annotator", "ANNOTATOR", PERSON, LEVEL_HOST }, { "commentator", "COMMENTATOR", PERSON, LEVEL_HOST }, { "translator", "TRANSLATOR", PERSON, LEVEL_HOST }, { "eventtitle", "EVENT:CONF", SIMPLE, LEVEL_MAIN }, { "year", "YEAR", SIMPLE, LEVEL_MAIN }, { "month", "MONTH", SIMPLE, LEVEL_MAIN }, { "date", "DATE", SIMPLE, LEVEL_MAIN }, /*WRONG*/ { "introduction", "INTROAUTHOR", PERSON, LEVEL_HOST }, { "foreword", "INTROAUTHOR", PERSON, LEVEL_HOST }, { "afterword", "AFTERAUTHOR", PERSON, LEVEL_HOST }, { "title", "TITLE", TITLE, LEVEL_MAIN }, { "subtitle", "SUBTITLE", TITLE, LEVEL_MAIN }, { "titleaddon", "TITLEADDON", TITLE, LEVEL_MAIN }, { "shorttitle", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, { "booktitle", "TITLE", TITLE, LEVEL_HOST }, { "booksubtitle", "SUBTITLE", TITLE, LEVEL_HOST }, { "booktitleaddon", "TITLEADDON", TITLE, LEVEL_HOST }, { "maintitle", "TITLE", TITLE, LEVEL_SERIES }, { "mainsubtitle", "SUBTITLE", TITLE, LEVEL_SERIES }, { "maintitleaddon", "TITLEADDON", TITLE, LEVEL_SERIES }, { "series", "TITLE", SIMPLE, LEVEL_SERIES+1 }, { "venue", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "organization", "ORGANIZER:CORP", SIMPLE, LEVEL_MAIN }, { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "origlanguage", "LANGUAGE", SIMPLE, LEVEL_ORIG }, { "origdate", "DATE", SIMPLE, LEVEL_ORIG }, { "origyear", "YEAR", SIMPLE, LEVEL_ORIG }, { "origtitle", "TITLE", SIMPLE, LEVEL_ORIG }, { "origlocation", "ADDRESS", SIMPLE, LEVEL_ORIG }, { "origpublisher", "PUBLISHER", SIMPLE, LEVEL_ORIG }, { "volume", "VOLUME", SIMPLE, LEVEL_HOST }, { "part", "PART", SIMPLE, LEVEL_HOST }, { "edition", "EDITION", SIMPLE, LEVEL_MAIN }, { "volumes", "NUMVOLUMES", SIMPLE, LEVEL_HOST }, { "number", "NUMBER", SIMPLE, LEVEL_MAIN }, { "note", "NOTES", SIMPLE, LEVEL_MAIN }, { "annote", "ANNOTATION", SIMPLE, LEVEL_MAIN }, { "annotation", "ANNOTATION", SIMPLE, LEVEL_MAIN }, { "publisher", "PUBLISHER", SIMPLE, LEVEL_HOST }, { "location", "ADDRESS", SIMPLE, LEVEL_HOST }, { "isbn", "ISBN", SIMPLE, LEVEL_MAIN }, { "chapter", "CHAPTER", SIMPLE, LEVEL_MAIN }, { "pages", "PAGES", PAGES, LEVEL_MAIN }, /* WRONG */ { "addendum", "ADDENDUM", SIMPLE, LEVEL_MAIN }, { "doi", "DOI", SIMPLE, LEVEL_MAIN }, { "pubstate", "PUBSTATE", SIMPLE, LEVEL_MAIN }, { "eprint", "", BT_EPRINT, LEVEL_MAIN }, { "eprinttype", "", BT_EPRINT, LEVEL_MAIN }, { "url", "", BT_URL, LEVEL_MAIN }, { "urldate", "URLDATE", SIMPLE, LEVEL_MAIN }, { "urlday", "?urlday?", SIMPLE, LEVEL_MAIN }, { "urlmonth", "?urlmonth?", SIMPLE, LEVEL_MAIN }, { "urlyear", "?urlyear?", SIMPLE, LEVEL_MAIN }, { "address", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "hyphenation", "LANGCATALOG", SIMPLE, LEVEL_MAIN }, { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN }, { "", "INTERNAL_TYPE|INPROCEEDINGS", ALWAYS, LEVEL_MAIN }, { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { "", "ISSUANCE|monographic", ALWAYS, LEVEL_MAIN }, { "", "GENRE|conference publication", ALWAYS, LEVEL_HOST } }; static lookups manual[] = { { "author", "AUTHOR", PERSON, LEVEL_MAIN }, { "editor", "EDITOR", BLT_EDITOR, LEVEL_MAIN }, { "editora", "EDITOR", BLT_EDITOR, LEVEL_MAIN }, { "editorb", "EDITOR", BLT_EDITOR, LEVEL_MAIN }, { "editorc", "EDITOR", BLT_EDITOR, LEVEL_MAIN }, { "editortype", "", BLT_SKIP, LEVEL_MAIN }, { "editoratype", "", BLT_SKIP, LEVEL_MAIN }, { "editorbtype", "", BLT_SKIP, LEVEL_MAIN }, { "editorctype", "", BLT_SKIP, LEVEL_MAIN }, { "director", "DIRECTOR", PERSON, LEVEL_MAIN }, { "producer", "PRODUCER", PERSON, LEVEL_MAIN }, { "execproducer", "PRODUCER", PERSON, LEVEL_MAIN }, { "writer", "AUTHOR", PERSON, LEVEL_MAIN }, { "redactor", "REDACTOR", PERSON, LEVEL_MAIN }, { "annotator", "ANNOTATOR", PERSON, LEVEL_MAIN }, { "commentator", "COMMENTATOR", PERSON, LEVEL_MAIN }, { "translator", "TRANSLATOR", PERSON, LEVEL_MAIN }, { "year", "YEAR", SIMPLE, LEVEL_MAIN }, { "month", "MONTH", SIMPLE, LEVEL_MAIN }, { "date", "DATE", SIMPLE, LEVEL_MAIN }, /*WRONG*/ { "introduction", "INTROAUTHOR", PERSON, LEVEL_MAIN }, { "foreword", "INTROAUTHOR", PERSON, LEVEL_MAIN }, { "afterword", "AFTERAUTHOR", PERSON, LEVEL_MAIN }, { "title", "TITLE", TITLE, LEVEL_MAIN }, { "subtitle", "SUBTITLE", TITLE, LEVEL_MAIN }, { "titleaddon", "TITLEADDON", TITLE, LEVEL_MAIN }, { "shorttitle", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "edition", "EDITION", SIMPLE, LEVEL_MAIN }, { "version", "EDITION", SIMPLE, LEVEL_MAIN }, { "type", "GENRE", BT_GENRE, LEVEL_MAIN }, { "series", "TITLE", SIMPLE, LEVEL_HOST }, { "number", "NUMBER", SIMPLE, LEVEL_MAIN }, { "note", "NOTES", SIMPLE, LEVEL_MAIN }, { "annote", "ANNOTATION", SIMPLE, LEVEL_MAIN }, { "annotation", "ANNOTATION", SIMPLE, LEVEL_MAIN }, { "organization", "ORGANIZER:CORP", SIMPLE, LEVEL_MAIN }, { "publisher", "PUBLISHER", SIMPLE, LEVEL_MAIN }, { "location", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "isbn", "ISBN", SIMPLE, LEVEL_MAIN }, { "chapter", "CHAPTER", SIMPLE, LEVEL_MAIN }, { "pages", "PAGES", PAGES, LEVEL_MAIN }, { "pagetotal", "TOTALPAGES", SIMPLE, LEVEL_MAIN }, { "addendum", "ADDENDUM", SIMPLE, LEVEL_MAIN }, { "doi", "DOI", SIMPLE, LEVEL_MAIN }, { "pubstate", "PUBSTATE", SIMPLE, LEVEL_MAIN }, { "eprint", "", BT_EPRINT, LEVEL_MAIN }, { "eprinttype", "", BT_EPRINT, LEVEL_MAIN }, { "url", "", BT_URL, LEVEL_MAIN }, { "urldate", "URLDATE", SIMPLE, LEVEL_MAIN }, { "urlday", "?????????", SIMPLE, LEVEL_MAIN }, { "urlmonth", "?????????", SIMPLE, LEVEL_MAIN }, { "urlyear", "?????????", SIMPLE, LEVEL_MAIN }, { "address", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "hyphenation", "LANGCATALOG", SIMPLE, LEVEL_MAIN }, { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN }, { "", "INTERNAL_TYPE|REPORT", ALWAYS, LEVEL_MAIN }, { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { "", "GENRE|instruction", ALWAYS, LEVEL_MAIN } }; static lookups misc[] = { { "author", "AUTHOR", PERSON, LEVEL_MAIN }, { "editor", "EDITOR", BLT_EDITOR, LEVEL_MAIN }, { "editora", "EDITOR", BLT_EDITOR, LEVEL_MAIN }, { "editorb", "EDITOR", BLT_EDITOR, LEVEL_MAIN }, { "editorc", "EDITOR", BLT_EDITOR, LEVEL_MAIN }, { "editortype", "", BLT_SKIP, LEVEL_MAIN }, { "editoratype", "", BLT_SKIP, LEVEL_MAIN }, { "editorbtype", "", BLT_SKIP, LEVEL_MAIN }, { "editorctype", "", BLT_SKIP, LEVEL_MAIN }, { "director", "DIRECTOR", PERSON, LEVEL_MAIN }, { "producer", "PRODUCER", PERSON, LEVEL_MAIN }, { "execproducer", "PRODUCER", PERSON, LEVEL_MAIN }, { "writer", "AUTHOR", PERSON, LEVEL_MAIN }, { "title", "TITLE", TITLE, LEVEL_MAIN }, { "subtitle", "SUBTITLE", TITLE, LEVEL_MAIN }, { "titleaddon", "TITLEADDON", TITLE, LEVEL_MAIN }, { "shorttitle", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, { "day", "DAY", SIMPLE, LEVEL_MAIN }, { "month", "MONTH", SIMPLE, LEVEL_MAIN }, { "year", "YEAR", SIMPLE, LEVEL_MAIN }, { "date", "DATE", SIMPLE, LEVEL_MAIN }, /*WRONG*/ { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "howpublished", "", HOWPUBLISHED, LEVEL_MAIN }, { "version", "EDITION", SIMPLE, LEVEL_MAIN }, { "type", "GENRE", BT_GENRE, LEVEL_MAIN }, { "note", "NOTES", SIMPLE, LEVEL_MAIN }, { "annote", "ANNOTATION", SIMPLE, LEVEL_MAIN }, { "annotation", "ANNOTATION", SIMPLE, LEVEL_MAIN }, { "organization", "ORGANIZER:CORP", SIMPLE, LEVEL_MAIN }, { "publisher", "PUBLISHER", SIMPLE, LEVEL_MAIN }, { "location", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "addendum", "ADDENDUM", SIMPLE, LEVEL_MAIN }, { "address", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "doi", "DOI", SIMPLE, LEVEL_MAIN }, { "pubstate", "PUBSTATE", SIMPLE, LEVEL_MAIN }, { "eprint", "", BT_EPRINT, LEVEL_MAIN }, { "eprinttype", "", BT_EPRINT, LEVEL_MAIN }, { "url", "", BT_URL, LEVEL_MAIN }, { "urldate", "URLDATE", SIMPLE, LEVEL_MAIN }, { "urlday", "?????????", SIMPLE, LEVEL_MAIN }, { "urlmonth", "?????????", SIMPLE, LEVEL_MAIN }, { "urlyear", "?????????", SIMPLE, LEVEL_MAIN }, { "hyphenation", "LANGCATALOG", SIMPLE, LEVEL_MAIN }, { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN }, { "", "INTERNAL_TYPE|MISC", ALWAYS, LEVEL_MAIN }, }; static lookups online[] = { { "author", "AUTHOR", PERSON, LEVEL_MAIN }, { "editor", "EDITOR", BLT_EDITOR, LEVEL_MAIN }, { "editora", "EDITOR", BLT_EDITOR, LEVEL_MAIN }, { "editorb", "EDITOR", BLT_EDITOR, LEVEL_MAIN }, { "editorc", "EDITOR", BLT_EDITOR, LEVEL_MAIN }, { "editortype", "", BLT_SKIP, LEVEL_MAIN }, { "editoratype", "", BLT_SKIP, LEVEL_MAIN }, { "editorbtype", "", BLT_SKIP, LEVEL_MAIN }, { "editorctype", "", BLT_SKIP, LEVEL_MAIN }, { "director", "DIRECTOR", PERSON, LEVEL_MAIN }, { "producer", "PRODUCER", PERSON, LEVEL_MAIN }, { "execproducer", "PRODUCER", PERSON, LEVEL_MAIN }, { "writer", "AUTHOR", PERSON, LEVEL_MAIN }, { "title", "TITLE", TITLE, LEVEL_MAIN }, { "subtitle", "SUBTITLE", TITLE, LEVEL_MAIN }, { "titleaddon", "TITLEADDON", TITLE, LEVEL_MAIN }, { "shorttitle", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, { "date", "DATE", SIMPLE, LEVEL_MAIN }, { "day", "DAY", SIMPLE, LEVEL_MAIN }, { "month", "MONTH", SIMPLE, LEVEL_MAIN }, { "year", "YEAR", SIMPLE, LEVEL_MAIN }, { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "version", "EDITION", SIMPLE, LEVEL_MAIN }, { "type", "GENRE", BT_GENRE, LEVEL_MAIN }, { "note", "NOTES", SIMPLE, LEVEL_MAIN }, { "annote", "ANNOTATION", SIMPLE, LEVEL_MAIN }, { "annotation", "ANNOTATION", SIMPLE, LEVEL_MAIN }, { "organization", "ORGANIZER:CORP", SIMPLE, LEVEL_MAIN }, { "publisher", "PUBLISHER", SIMPLE, LEVEL_MAIN }, { "location", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "addendum", "ADDENDUM", SIMPLE, LEVEL_MAIN }, { "doi", "DOI", SIMPLE, LEVEL_MAIN }, { "pubstate", "PUBSTATE", SIMPLE, LEVEL_MAIN }, { "eprint", "", BT_EPRINT, LEVEL_MAIN }, { "eprinttype", "", BT_EPRINT, LEVEL_MAIN }, { "url", "", BT_URL, LEVEL_MAIN }, { "urldate", "URLDATE", SIMPLE, LEVEL_MAIN }, { "urlday", "?????????", SIMPLE, LEVEL_MAIN }, { "urlmonth", "?????????", SIMPLE, LEVEL_MAIN }, { "urlyear", "?????????", SIMPLE, LEVEL_MAIN }, { "address", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "hyphenation", "LANGCATALOG", SIMPLE, LEVEL_MAIN }, { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN }, { "", "RESOURCE|software, multimedia", ALWAYS, LEVEL_MAIN }, { "", "NGENRE|web page", ALWAYS, LEVEL_MAIN }, }; static lookups patent[] = { { "author", "AUTHOR", PERSON, LEVEL_MAIN }, { "holder", "ASSIGNEE", PERSON, LEVEL_MAIN }, { "title", "TITLE", TITLE, LEVEL_MAIN }, { "subtitle", "SUBTITLE", TITLE, LEVEL_MAIN }, { "titleaddon", "TITLEADDON", TITLE, LEVEL_MAIN }, { "shorttitle", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, { "date", "DATE", SIMPLE, LEVEL_MAIN }, { "day", "DAY", SIMPLE, LEVEL_MAIN }, { "month", "MONTH", SIMPLE, LEVEL_MAIN }, { "year", "YEAR", SIMPLE, LEVEL_MAIN }, { "version", "EDITION", SIMPLE, LEVEL_MAIN }, { "type", "GENRE", BT_GENRE, LEVEL_MAIN }, { "note", "NOTES", SIMPLE, LEVEL_MAIN }, { "annote", "ANNOTATION", SIMPLE, LEVEL_MAIN }, { "annotation", "ANNOTATION", SIMPLE, LEVEL_MAIN }, { "organization", "ORGANIZER:CORP", SIMPLE, LEVEL_MAIN }, { "location", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "number", "NUMBER", SIMPLE, LEVEL_MAIN }, { "addendum", "ADDENDUM", SIMPLE, LEVEL_MAIN }, { "url", "", BT_URL, LEVEL_MAIN }, { "urldate", "URLDATE", SIMPLE, LEVEL_MAIN }, { "urlday", "?????????", SIMPLE, LEVEL_MAIN }, { "urlmonth", "?????????", SIMPLE, LEVEL_MAIN }, { "urlyear", "?????????", SIMPLE, LEVEL_MAIN }, { "address", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "hyphenation", "LANGCATALOG", SIMPLE, LEVEL_MAIN }, { "pubstate", "PUBSTATE", SIMPLE, LEVEL_MAIN }, { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN }, { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { "", "INTERNAL_TYPE|PATENT", ALWAYS, LEVEL_MAIN }, { "", "GENRE|patent", ALWAYS, LEVEL_MAIN }, }; /* * An entire issue of a periodical * * "The title of the periodical is given in the title field. If the issue has * its own title in addition to the main title of the periodical, it goes in * the issuetitle field. The editor is omissible..." */ static lookups periodical[] = { { "editor", "EDITOR", BLT_EDITOR, LEVEL_MAIN }, { "editora", "EDITOR", BLT_EDITOR, LEVEL_MAIN }, { "editorb", "EDITOR", BLT_EDITOR, LEVEL_MAIN }, { "editorc", "EDITOR", BLT_EDITOR, LEVEL_MAIN }, { "editortype", "", BLT_SKIP, LEVEL_MAIN }, { "editoratype", "", BLT_SKIP, LEVEL_MAIN }, { "editorbtype", "", BLT_SKIP, LEVEL_MAIN }, { "editorctype", "", BLT_SKIP, LEVEL_MAIN }, { "director", "DIRECTOR", PERSON, LEVEL_MAIN }, { "producer", "PRODUCER", PERSON, LEVEL_MAIN }, { "execproducer", "PRODUCER", PERSON, LEVEL_MAIN }, { "writer", "AUTHOR", PERSON, LEVEL_MAIN }, { "title", "TITLE", TITLE, LEVEL_HOST }, { "subtitle", "SUBTITLE", TITLE, LEVEL_HOST }, { "titleaddon", "TITLEADDON", TITLE, LEVEL_HOST }, { "shorttitle", "SHORTTITLE", SIMPLE, LEVEL_HOST }, { "issuetitle", "TITLE", TITLE, LEVEL_MAIN }, { "issuesubtitle", "SUBTITLE", TITLE, LEVEL_MAIN }, { "issuetitleaddon", "TITLEADDON", TITLE, LEVEL_MAIN }, { "series", "TITLE", SIMPLE, LEVEL_SERIES }, { "volume", "VOLUME", SIMPLE, LEVEL_MAIN }, { "number", "NUMBER", SIMPLE, LEVEL_MAIN }, { "issue", "ISSUE", SIMPLE, LEVEL_MAIN }, { "date", "DATE", SIMPLE, LEVEL_MAIN }, /*WRONG*/ { "day", "PARTDAY", SIMPLE, LEVEL_MAIN }, { "month", "PARTMONTH", SIMPLE, LEVEL_MAIN }, { "year", "PARTYEAR", SIMPLE, LEVEL_MAIN }, { "pages", "PAGES", PAGES, LEVEL_MAIN }, { "note", "NOTES", SIMPLE, LEVEL_MAIN }, { "annote", "ANNOTATION", SIMPLE, LEVEL_MAIN }, { "annotation", "ANNOTATION", SIMPLE, LEVEL_MAIN }, { "issn", "ISSN", SIMPLE, LEVEL_HOST }, { "addendum", "ADDENDUM", SIMPLE, LEVEL_MAIN }, { "doi", "DOI", SIMPLE, LEVEL_MAIN }, { "pubstate", "PUBSTATE", SIMPLE, LEVEL_MAIN }, { "eprint", "", BT_EPRINT, LEVEL_MAIN }, { "eprinttype", "", BT_EPRINT, LEVEL_MAIN }, { "url", "", BT_URL, LEVEL_MAIN }, { "urldate", "URLDATE", SIMPLE, LEVEL_MAIN }, { "urlday", "?????", SIMPLE, LEVEL_MAIN }, /* WRONG */ { "urlmonth", "?????", SIMPLE, LEVEL_MAIN }, /* WRONG */ { "urlyear", "?????", SIMPLE, LEVEL_MAIN }, /* WRONG */ { "address", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "hyphenation", "LANGCATALOG", SIMPLE, LEVEL_MAIN }, { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN }, { "", "ISSUANCE|continuing", ALWAYS, LEVEL_HOST }, { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { "", "GENRE|issue", ALWAYS, LEVEL_MAIN }, { "", "GENRE|periodical", ALWAYS, LEVEL_HOST } }; static lookups proceedings[] = { { "editor", "EDITOR", BLT_EDITOR, LEVEL_MAIN }, { "editora", "EDITOR", BLT_EDITOR, LEVEL_MAIN }, { "editorb", "EDITOR", BLT_EDITOR, LEVEL_MAIN }, { "editorc", "EDITOR", BLT_EDITOR, LEVEL_MAIN }, { "editortype", "", BLT_SKIP, LEVEL_MAIN }, { "editoratype", "", BLT_SKIP, LEVEL_MAIN }, { "editorbtype", "", BLT_SKIP, LEVEL_MAIN }, { "editorctype", "", BLT_SKIP, LEVEL_MAIN }, { "director", "DIRECTOR", PERSON, LEVEL_MAIN }, { "producer", "PRODUCER", PERSON, LEVEL_MAIN }, { "execproducer", "PRODUCER", PERSON, LEVEL_MAIN }, { "writer", "AUTHOR", PERSON, LEVEL_MAIN }, { "redactor", "REDACTOR", PERSON, LEVEL_MAIN }, { "annotator", "ANNOTATOR", PERSON, LEVEL_MAIN }, { "commentator", "COMMENTATOR", PERSON, LEVEL_MAIN }, { "translator", "TRANSLATOR", PERSON, LEVEL_MAIN }, { "eventtitle", "EVENT:CONF", SIMPLE, LEVEL_MAIN }, { "year", "YEAR", SIMPLE, LEVEL_MAIN }, { "month", "MONTH", SIMPLE, LEVEL_MAIN }, { "date", "DATE", SIMPLE, LEVEL_MAIN }, /*WRONG*/ { "introduction", "INTROAUTHOR", PERSON, LEVEL_MAIN }, { "foreword", "INTROAUTHOR", PERSON, LEVEL_MAIN }, { "afterword", "AFTERAUTHOR", PERSON, LEVEL_MAIN }, { "title", "TITLE", TITLE, LEVEL_MAIN }, { "subtitle", "SUBTITLE", TITLE, LEVEL_MAIN }, { "titleaddon", "TITLEADDON", TITLE, LEVEL_MAIN }, { "shorttitle", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, { "maintitle", "TITLE", TITLE, LEVEL_HOST }, { "mainsubtitle", "SUBTITLE", TITLE, LEVEL_HOST }, { "maintitleaddon", "TITLEADDON", TITLE, LEVEL_HOST }, { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "origlanguage", "LANGUAGE", SIMPLE, LEVEL_ORIG }, { "origdate", "DATE", SIMPLE, LEVEL_ORIG }, { "origyear", "YEAR", SIMPLE, LEVEL_ORIG }, { "origtitle", "TITLE", SIMPLE, LEVEL_ORIG }, { "origlocation", "ADDRESS", SIMPLE, LEVEL_ORIG }, { "origpublisher", "PUBLISHER", SIMPLE, LEVEL_ORIG }, { "volume", "VOLUME", SIMPLE, LEVEL_HOST }, { "part", "PART", SIMPLE, LEVEL_HOST }, { "edition", "EDITION", SIMPLE, LEVEL_MAIN }, { "volumes", "NUMVOLUMES", SIMPLE, LEVEL_HOST }, { "series", "TITLE", SIMPLE, LEVEL_SERIES }, { "number", "NUMBER", SIMPLE, LEVEL_MAIN }, { "note", "NOTES", SIMPLE, LEVEL_MAIN }, { "annote", "ANNOTATION", SIMPLE, LEVEL_MAIN }, { "annotation", "ANNOTATION", SIMPLE, LEVEL_MAIN }, { "organization", "ORGANIZER:CORP", SIMPLE, LEVEL_MAIN }, { "publisher", "PUBLISHER", SIMPLE, LEVEL_MAIN }, { "location", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "isbn", "ISBN", SIMPLE, LEVEL_MAIN }, { "chapter", "CHAPTER", SIMPLE, LEVEL_MAIN }, { "pages", "PAGES", SIMPLE, LEVEL_MAIN }, { "pagetotal", "TOTALPAGES", SIMPLE, LEVEL_MAIN }, { "addendum", "ADDENDUM", SIMPLE, LEVEL_MAIN }, { "doi", "DOI", SIMPLE, LEVEL_MAIN }, { "pubstate", "PUBSTATE", SIMPLE, LEVEL_MAIN }, { "eprint", "", BT_EPRINT, LEVEL_MAIN }, { "eprinttype", "", BT_EPRINT, LEVEL_MAIN }, { "url", "", BT_URL, LEVEL_MAIN }, { "urldate", "URLDATE", SIMPLE, LEVEL_MAIN }, { "urlday", "?????????", SIMPLE, LEVEL_MAIN }, { "urlmonth", "?????????", SIMPLE, LEVEL_MAIN }, { "urlyear", "?????????", SIMPLE, LEVEL_MAIN }, { "address", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "hyphenation", "LANGCATALOG", SIMPLE, LEVEL_MAIN }, { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN }, { "", "INTERNAL_TYPE|BOOK", ALWAYS, LEVEL_MAIN }, { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { "", "GENRE|conference publication", ALWAYS, LEVEL_MAIN } }; /* Technical reports */ static lookups report[] = { { "author", "AUTHOR", PERSON, LEVEL_MAIN }, { "title", "TITLE", TITLE, LEVEL_MAIN }, { "subtitle", "SUBTITLE", TITLE, LEVEL_MAIN }, { "titleaddon", "TITLEADDON", TITLE, LEVEL_MAIN }, { "shorttitle", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, { "series", "TITLE", TITLE, LEVEL_HOST }, { "type", "GENRE", BT_GENRE, LEVEL_MAIN }, { "institution", "SPONSOR:ASIS", SIMPLE, LEVEL_MAIN }, { "year", "YEAR", SIMPLE, LEVEL_MAIN }, { "month", "MONTH", SIMPLE, LEVEL_MAIN }, { "date", "DATE", SIMPLE, LEVEL_MAIN }, /*WRONG*/ { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "number", "REPORTNUMBER", SIMPLE, LEVEL_MAIN }, { "note", "NOTES", SIMPLE, LEVEL_MAIN }, { "annote", "ANNOTATION", SIMPLE, LEVEL_MAIN }, { "annotation", "ANNOTATION", SIMPLE, LEVEL_MAIN }, { "version", "EDITION", SIMPLE, LEVEL_MAIN }, { "location", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "isrn", "ISRN", SIMPLE, LEVEL_MAIN }, { "chapter", "CHAPTER", SIMPLE, LEVEL_MAIN }, { "pages", "PAGES", SIMPLE, LEVEL_MAIN }, { "pagetotal", "TOTALPAGES", SIMPLE, LEVEL_MAIN }, { "addendum", "ADDENDUM", SIMPLE, LEVEL_MAIN }, { "doi", "DOI", SIMPLE, LEVEL_MAIN }, { "pubstate", "PUBSTATE", SIMPLE, LEVEL_MAIN }, { "eprint", "", BT_EPRINT, LEVEL_MAIN }, { "eprinttype", "", BT_EPRINT, LEVEL_MAIN }, { "url", "", BT_URL, LEVEL_MAIN }, { "urldate", "URLDATE", SIMPLE, LEVEL_MAIN }, { "urlday", "?????????", SIMPLE, LEVEL_MAIN }, { "urlmonth", "?????????", SIMPLE, LEVEL_MAIN }, { "urlyear", "?????????", SIMPLE, LEVEL_MAIN }, { "address", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "hyphenation", "LANGCATALOG", SIMPLE, LEVEL_MAIN }, { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN }, { "", "INTERNAL_TYPE|REPORT", ALWAYS, LEVEL_MAIN }, { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { "", "GENRE|report", ALWAYS, LEVEL_MAIN } }; /* Unpublished */ static lookups unpublished[] = { { "author", "AUTHOR", PERSON, LEVEL_MAIN }, { "title", "TITLE", TITLE, LEVEL_MAIN }, { "subtitle", "SUBTITLE", TITLE, LEVEL_MAIN }, { "titleaddon", "TITLEADDON", TITLE, LEVEL_MAIN }, { "shorttitle", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, { "howpublished", "", HOWPUBLISHED, LEVEL_MAIN }, { "year", "YEAR", SIMPLE, LEVEL_MAIN }, { "month", "MONTH", SIMPLE, LEVEL_MAIN }, { "day", "DAY", SIMPLE, LEVEL_MAIN }, { "date", "DATE", SIMPLE, LEVEL_MAIN }, { "url", "", BT_URL, LEVEL_MAIN }, { "urlday", "?????????", SIMPLE, LEVEL_MAIN }, { "urlmonth", "?????????", SIMPLE, LEVEL_MAIN }, { "urlyear", "?????????", SIMPLE, LEVEL_MAIN }, { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "note", "NOTES", SIMPLE, LEVEL_MAIN }, { "annote", "ANNOTATION", SIMPLE, LEVEL_MAIN }, { "annotation", "ANNOTATION", SIMPLE, LEVEL_MAIN }, { "addendum", "ADDENDUM", SIMPLE, LEVEL_MAIN }, { "address", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "hyphenation", "LANGCATALOG", SIMPLE, LEVEL_MAIN }, { "pubstate", "PUBSTATE", SIMPLE, LEVEL_MAIN }, { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN }, { "", "INTERNAL_TYPE|BOOK", ALWAYS, LEVEL_MAIN }, { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { "", "GENRE|unpublished", ALWAYS, LEVEL_MAIN } }; static lookups thesis[] = { { "author", "AUTHOR", PERSON, LEVEL_MAIN }, { "title", "TITLE", TITLE, LEVEL_MAIN }, { "subtitle", "SUBTITLE", TITLE, LEVEL_MAIN }, { "titleaddon", "TITLEADDON", TITLE, LEVEL_MAIN }, { "shorttitle", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, { "year", "YEAR", SIMPLE, LEVEL_MAIN }, { "month", "MONTH", SIMPLE, LEVEL_MAIN }, { "day", "DAY", SIMPLE, LEVEL_MAIN }, { "date", "DATE", SIMPLE, LEVEL_MAIN }, /*WRONG*/ { "type", "", BLT_THESIS_TYPE, LEVEL_MAIN }, { "institution", "DEGREEGRANTOR:ASIS", SIMPLE, LEVEL_MAIN }, { "school", "DEGREEGRANTOR:ASIS", BLT_SCHOOL, LEVEL_MAIN }, { "doi", "DOI", SIMPLE, LEVEL_MAIN }, { "howpublished", "", HOWPUBLISHED, LEVEL_MAIN }, { "url", "", BT_URL, LEVEL_MAIN }, { "urldate", "URLDATE", SIMPLE, LEVEL_MAIN }, { "urlday", "?urlday?", SIMPLE, LEVEL_MAIN }, { "urlmonth", "?urlmonth?", SIMPLE, LEVEL_MAIN }, { "urlyear", "?urlyear?", SIMPLE, LEVEL_MAIN }, { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "location", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "note", "NOTES", SIMPLE, LEVEL_MAIN }, { "annote", "ANNOTATION", SIMPLE, LEVEL_MAIN }, { "annotation", "ANNOTATION", SIMPLE, LEVEL_MAIN }, { "address", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "hyphenation", "LANGCATALOG", SIMPLE, LEVEL_MAIN }, { "pubstate", "PUBSTATE", SIMPLE, LEVEL_MAIN }, { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN }, { "", "INTERNAL_TYPE|THESIS", ALWAYS, LEVEL_MAIN }, { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { "", "GENRE|thesis", ALWAYS, LEVEL_MAIN }, }; static lookups phdthesis[] = { { "author", "AUTHOR", PERSON, LEVEL_MAIN }, { "title", "TITLE", TITLE, LEVEL_MAIN }, { "subtitle", "SUBTITLE", TITLE, LEVEL_MAIN }, { "titleaddon", "TITLEADDON", TITLE, LEVEL_MAIN }, { "shorttitle", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, { "year", "YEAR", SIMPLE, LEVEL_MAIN }, { "month", "MONTH", SIMPLE, LEVEL_MAIN }, { "day", "DAY", SIMPLE, LEVEL_MAIN }, { "date", "DATE", SIMPLE, LEVEL_MAIN }, /*WRONG*/ { "type", "", BLT_THESIS_TYPE, LEVEL_MAIN }, { "institution", "DEGREEGRANTOR:ASIS", SIMPLE, LEVEL_MAIN }, { "school", "DEGREEGRANTOR:ASIS", BLT_SCHOOL, LEVEL_MAIN }, { "doi", "DOI", SIMPLE, LEVEL_MAIN }, { "howpublished", "", HOWPUBLISHED, LEVEL_MAIN }, { "url", "", BT_URL, LEVEL_MAIN }, { "urldate", "URLDATE", SIMPLE, LEVEL_MAIN }, { "urlday", "?urlday?", SIMPLE, LEVEL_MAIN }, { "urlmonth", "?urlmonth?", SIMPLE, LEVEL_MAIN }, { "urlyear", "?urlyear?", SIMPLE, LEVEL_MAIN }, { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "location", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "note", "NOTES", SIMPLE, LEVEL_MAIN }, { "annote", "ANNOTATION", SIMPLE, LEVEL_MAIN }, { "annotation", "ANNOTATION", SIMPLE, LEVEL_MAIN }, { "address", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "hyphenation", "LANGCATALOG", SIMPLE, LEVEL_MAIN }, { "pubstate", "PUBSTATE", SIMPLE, LEVEL_MAIN }, { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN }, { "", "INTERNAL_TYPE|THESIS", ALWAYS, LEVEL_MAIN }, { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { "", "GENRE|thesis", ALWAYS, LEVEL_MAIN }, { "", "NGENRE|Ph.D. thesis", DEFAULT, LEVEL_MAIN }, }; static lookups mastersthesis[] = { { "author", "AUTHOR", PERSON, LEVEL_MAIN }, { "title", "TITLE", TITLE, LEVEL_MAIN }, { "subtitle", "SUBTITLE", TITLE, LEVEL_MAIN }, { "titleaddon", "TITLEADDON", TITLE, LEVEL_MAIN }, { "shorttitle", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, { "year", "YEAR", SIMPLE, LEVEL_MAIN }, { "month", "MONTH", SIMPLE, LEVEL_MAIN }, { "day", "DAY", SIMPLE, LEVEL_MAIN }, { "date", "DATE", SIMPLE, LEVEL_MAIN }, /*WRONG*/ { "type", "", BLT_THESIS_TYPE, LEVEL_MAIN }, { "institution", "DEGREEGRANTOR:ASIS", SIMPLE, LEVEL_MAIN }, { "school", "DEGREEGRANTOR:ASIS", BLT_SCHOOL, LEVEL_MAIN }, { "doi", "DOI", SIMPLE, LEVEL_MAIN }, { "howpublished", "", HOWPUBLISHED, LEVEL_MAIN }, { "url", "", BT_URL, LEVEL_MAIN }, { "urldate", "URLDATE", SIMPLE, LEVEL_MAIN }, { "urlday", "?urlday?", SIMPLE, LEVEL_MAIN }, { "urlmonth", "?urlmonth?", SIMPLE, LEVEL_MAIN }, { "urlyear", "?urlyear?", SIMPLE, LEVEL_MAIN }, { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "location", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "note", "NOTES", SIMPLE, LEVEL_MAIN }, { "annote", "ANNOTATION", SIMPLE, LEVEL_MAIN }, { "annotation", "ANNOTATION", SIMPLE, LEVEL_MAIN }, { "address", "ADDRESS", SIMPLE, LEVEL_MAIN }, { "hyphenation", "LANGCATALOG", SIMPLE, LEVEL_MAIN }, { "pubstate", "PUBSTATE", SIMPLE, LEVEL_MAIN }, { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN }, { "", "INTERNAL_TYPE|THESIS", ALWAYS, LEVEL_MAIN }, { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN }, { "", "GENRE|thesis", ALWAYS, LEVEL_MAIN }, { "", "NGENRE|Masters thesis", DEFAULT, LEVEL_MAIN }, }; #define ORIG(a) ( &(a[0]) ) #define SIZE(a) ( sizeof( a ) / sizeof( lookups ) ) #define REFTYPE(a,b) { a, ORIG(b), SIZE(b) } variants biblatex_all[] = { REFTYPE( "article", article ), REFTYPE( "suppperiodical", article ), REFTYPE( "booklet", booklet ), REFTYPE( "book", book ), REFTYPE( "collection", collection ), REFTYPE( "reference", collection ), REFTYPE( "mvreference", collection ), REFTYPE( "inbook", inbook ), REFTYPE( "suppbook", inbook ), REFTYPE( "incollection", incollection ), REFTYPE( "inreference", incollection ), REFTYPE( "suppcollection", incollection ), REFTYPE( "inproceedings", inproceedings ), REFTYPE( "conference", inproceedings ), /* legacy */ REFTYPE( "manual", manual ), REFTYPE( "misc", misc ), REFTYPE( "online", online ), REFTYPE( "electronic", online ), /* legacy */ REFTYPE( "www", online ), /* jurabib compatibility */ REFTYPE( "patent", patent ), REFTYPE( "periodical", periodical ), REFTYPE( "proceedings", proceedings ), REFTYPE( "mvproceedings", proceedings ), REFTYPE( "report", report ), REFTYPE( "techreport", report ), /* REFTYPE( "set", set ), */ REFTYPE( "thesis", thesis ), REFTYPE( "phdthesis", phdthesis ), /* legacy */ REFTYPE( "mastersthesis", mastersthesis ), /* legacy */ REFTYPE( "unpublished", unpublished ), }; int biblatex_nall = sizeof( biblatex_all ) / sizeof( variants ); hs-bibutils-5.5/bibutils/gb18030.h0000644000000000000000000000045412445605732014763 0ustar0000000000000000/* * gb18030.h * * Copyright (c) Chris Putnam 2008-2013 * * Source code released under the GPL version 2 * */ #ifndef GB18030_H #define GB18030_H extern int gb18030_encode( unsigned int unicode, unsigned char out[4] ); extern unsigned int gb18030_decode( char *s, unsigned int *pi ); #endif hs-bibutils-5.5/bibutils/copactypes.c0000644000000000000000000000263512445605732016147 0ustar0000000000000000/* * copactypes.c * * Copyright (c) Chris Putnam 2004-2014 * * Program and source code released under the GPL version 2 * */ #include #include #include "is_ws.h" #include "fields.h" #include "reftypes.h" /* if no specific type can be identified */ static lookups generic[] = { { "TI-", "TITLE" , TITLE, LEVEL_MAIN }, { "AU-", "AUTHOR", PERSON, LEVEL_MAIN }, { "MV-", "VOLUME", SIMPLE, LEVEL_MAIN }, { "SE-", "TITLE", TITLE, LEVEL_HOST }, { "ED-", "EDITION", SIMPLE, LEVEL_MAIN }, { "SC-", "SCALE", SIMPLE, LEVEL_MAIN }, /* for maps */ { "PU-", "PUBLISHER", SIMPLE, LEVEL_MAIN }, { "PY-", "YEAR", SIMPLE, LEVEL_MAIN }, { "PD-", "DESCRIPTION",SIMPLE, LEVEL_MAIN }, /* physical description */ { "DT-", "TYPE", SIMPLE, LEVEL_MAIN }, { "LA-", "LANGUAGE", SIMPLE, LEVEL_MAIN }, { "IS-", "SERIALNUMBER", SERIALNO, LEVEL_MAIN }, { "NT-", "NOTES", SIMPLE, LEVEL_MAIN }, { "KW-", "KEYWORD", SIMPLE, LEVEL_MAIN }, { "UL-", "URL", SIMPLE, LEVEL_MAIN }, { "HL-", "LOCATION", SIMPLE, LEVEL_MAIN } }; /* order is important....."Book" matches "Book" and "Book Section", hence * "Book Section must come first */ #define ORIG(a) ( &(a[0]) ) #define SIZE(a) ( sizeof( a ) / sizeof( lookups ) ) #define REFTYPE(a,b) { a, ORIG(b), SIZE(b) } variants copac_all[] = { REFTYPE( "Generic", generic ), }; int copac_nall = sizeof( copac_all ) / sizeof( variants ); hs-bibutils-5.5/bibutils/intlist.c0000644000000000000000000001441512445605732015462 0ustar0000000000000000/* * intlist.c * * Copyright (c) Chris Putnam 2007-2013 * * Version 9/5/2013 * * Source code released under the GPL version 2 * * Implements a simple managed array of ints * */ #include "intlist.h" static int intlist_alloc( intlist *il ) { int alloc = 20, i; il->data = ( int * ) malloc( sizeof( int ) * alloc ); if ( !(il->data) ) return 0; for ( i=0; idata[i] = 0; il->max = alloc; il->n = 0; return 1; } static int intlist_realloc( intlist *il ) { int *more; int alloc = il->max * 2, i; more = ( int * ) realloc( il->data, sizeof( int ) * alloc ); if ( !more ) return 0; il->data = more; for ( i=il->max; idata[i] = 0; il->max = alloc; return 1; } /* intlist_add() * * Returns position of newly added value in range [0,n), -1 on error */ int intlist_add( intlist *il, int value ) { if ( il->max==0 ) { if ( !intlist_alloc( il ) ) return -1; } else if ( il->n >= il->max ) { if ( !intlist_realloc( il ) ) return -1; } il->data[ il->n ] = value; il->n++; return il->n - 1; } /* intlist_add_unique() * * Returns position of newly added (or previously added) value * Returns -1 on (memory) error */ int intlist_add_unique( intlist *il, int value ) { int n; n = intlist_find( il, value ); if ( n==-1 ) n = intlist_add( il, value ); return n; } int intlist_find_or_add( intlist *il, int value ) { return intlist_add_unique( il, value ); } /* intlist_find() * * Returns position of value in range [0,n), or -1 if * value cannot be found */ int intlist_find( intlist *il, int value ) { int i; for ( i=0; in; ++i ) if ( il->data[i]==value ) return i; return -1; } static void intlist_remove_pos_core( intlist *il, int pos ) { int i; for ( i=pos; in-1; ++i ) il->data[i] = il->data[i+1]; il->n -= 1; } /* intlist_remove_pos() * * Returns 1 on success, 0 on failure. */ int intlist_remove_pos( intlist *il, int pos ) { if ( pos < 0 || pos >= il->n ) return 0; intlist_remove_pos_core( il, pos ); return 1; } /* intlist_remove() * * Removes first instance of value from the intlist. * Returns 1 on success, 0 on error. */ int intlist_remove( intlist *il, int value ) { int pos = intlist_find( il, value ); if ( pos==-1 ) return 0; intlist_remove_pos_core( il, pos ); return 1; } /* don't actually free space, just reset counter */ void intlist_empty( intlist *il ) { il->n = 0; } void intlist_free( intlist *il ) { if ( il->data ) free( il->data ); intlist_init( il ); } void intlist_delete( intlist *il ) { intlist_free( il ); free( il ); } void intlist_init( intlist *il ) { il->data = NULL; il->max = 0; il->n = 0; } /* intlist_init_range() * * Initializes intlist to values from [low,high) with step step. * Returns -1 on failure, number of elements on success. */ int intlist_init_range( intlist *il, int low, int high, int step ) { int i, n; intlist_init( il ); for ( i=low; in; } /* intlist_new() * * Allocates an empty intlist. * Returns pointer to intlist on success, NULL on memory error. */ intlist * intlist_new( void ) { intlist *il = ( intlist * ) malloc( sizeof( intlist ) ); if ( il ) intlist_init( il ); return il; } /* intlist_new_range() * * Allocates a intlist initialized to values from [low,high) with step step. * Returns pointer to intlist on success, NULL on memory error; */ intlist * intlist_new_range( int low, int high, int step ) { intlist *il; int n; il = ( intlist * ) malloc( sizeof( intlist ) ); if ( il ) { n = intlist_init_range( il, low, high, step ); if ( n==-1 ) { intlist_free( il ); free( il ); il = NULL; } } return il; } static int intcomp( const void *v1, const void *v2 ) { int *i1 = ( int * ) v1; int *i2 = ( int * ) v2; if ( *i1 < *i2 ) return -1; else if ( *i1 > *i2 ) return 1; return 0; } void intlist_sort( intlist *il ) { qsort( il->data, il->n, sizeof( int ), intcomp ); } /* Returns random integer in the range [floor,ceil) */ static int randomint( int floor, int ceil ) { int len = ceil - floor; return floor + rand() % len; } static void swap( int *a, int *b ) { int tmp; tmp = *a; *a = *b; *b = tmp; } void intlist_randomize( intlist *il ) { int i, j; if ( il->n < 2 ) return; for ( i=0; in; ++i ) { j = randomint( i, il->n ); if ( i==j ) continue; swap( &(il->data[i]), &(il->data[j]) ); } } /* Returns 1 on success, 0 on error */ int intlist_copy( intlist *to, intlist *from ) { int i; intlist_free( to ); to->data = ( int* ) malloc( sizeof( int ) * from->n ); if ( !to->data ) return 0; to->n = to->max = from->n; for ( i=0; in; ++i ) to->data[i] = from->data[i]; return 1; } /* Returns pointer on success, NULL on error */ intlist * intlist_dup( intlist *il ) { intlist *l; int n; l = intlist_new(); if ( l ) { n = intlist_copy( l, il ); if ( !n ) { intlist_delete( l ); l = NULL; } } return l; } int intlist_append( intlist *to, intlist *from ) { int i, n, nsave = to->n; for ( i=0; in; ++i ) { n = intlist_add( to, from->data[i] ); if ( n==-1 ) { to->n = nsave; return -1; } } return to->n; } int intlist_append_unique( intlist *to, intlist *from ) { int i, n, nsave = to->n; for ( i=0; in; ++i ) { if ( intlist_find( to, from->data[i] )!=-1 ) continue; n = intlist_add( to, from->data[i] ); if ( n==-1 ) { to->n = nsave; return -1; } } return to->n; } int intlist_get( intlist *il, int pos ) { if ( pos<0 || pos>=il->n ) return 0; else return il->data[pos]; } /* intlist_set() * * Returns 1 on success, 0 on failure */ int intlist_set( intlist *il, int pos, int value ) { if ( pos<0 || pos>=il->n ) return 0; il->data[pos] = value; return 1; } float intlist_median( intlist *il ) { intlist *tmp; float median; int m1, m2; if ( il->n==0 ) return 0.0; tmp = intlist_dup( il ); if ( !tmp ) return 0.0; intlist_sort( tmp ); if ( tmp->n % 2 == 1 ) { median = intlist_get( tmp, tmp->n / 2 ); } else { m1 = intlist_get( tmp, tmp->n / 2 ); m2 = intlist_get( tmp, tmp->n / 2 + 1); median = ( m1 + m2 ) / 2.0; } intlist_delete( tmp ); return median; } float intlist_mean( intlist *il ) { float sum = 0.0; int i; if ( il->n==0 ) return 0.0; for ( i=0; in; ++i ) sum += intlist_get( il, i ); return sum / il->n; } hs-bibutils-5.5/bibutils/adsout_journals.c0000644000000000000000000063257712445605732017227 0ustar0000000000000000/* http://adsabs.harvard.edu/abs_doc/journals1.html * download URL source then parse with * fgrep setfields journals1.html | awk -F ';' '{printf "%s\n",$2}' * | cut -c 7-12,24- | sed 's/"//g' | awk '{printf "\"%s\",\n",$0}' * | sort -k 2 * */ static const char *journals[] = { "TDR.. 3D Research", "AASHS AAS Hist. Ser.", "AASPB AAS Photo Bulletin", "AAN.. AAVSO Alert Notice", "AAVSC AAVSO Circular", "AAVSN AAVSO Newsletter", "AAVSB AAVSO Solar Bulletin", "AbaOB Abastumanskaia Astrofizicheskaia Observatoriia Byulleten", "AbbOO Abbadia Observatory Observations", "AADDR Abhandlungen Akad. Wiss. DDR", "AAGot Abhandlungen Akad. Wiss. Göttingen", "ABWG. Abh. Braunschweigische Wissenschaftliche Ges.", "AbhP. Abh. der Preuß. Akademie der Wissenschaften Jahrg", "AbhKP Abh. Konigl. Preuss. Akad. Wissenschaften Jahre 1906,92, Berlin,1907", "AbhBr Abh. naturwiss. Verein Bremen", "AbApA Abstract and Applied Analysis", "ASFAS Academia Scientiarum Fennica Annales Series Physica", "AOIJ. Academic Open Internet Journal", "CR2.. Academie des Sciences Comptes Rendus Serie Mecanique Physique Chimie Sciences de la Terre et de l Univers", "CRAS. Academie des Sciences Paris Comptes Rendus", "CRASB Academie des Sciences Paris Comptes Rendus Serie B Sciences Physiques", "CRASG Academie des Sciences Paris Comptes Rendus Serie Generale La Vie des Sciences", "CRASP Academie des Sciences Paris Comptes Rendus Serie Physique Astrophysique", "CRASM Academie des Sciences Paris Comptes Rendus Serie Sciences Mathematiques", "CRASA Academie des Sciences Paris Comptes Rendus Vie Academique Semester Supplement", "MeARB Academie Royale de Belgique Classe des Sciences Memoires", "ASSAB Academie Serbe des Sciences et des Arts Bulletin Classe des Sciences Techniques", "ASLLR Accademia di Scienze e Lettere Istituto Lombardo Rendiconti Serie della Classe di Scienze Matematiche e Naturali Sezione Scienze Matematiche Fisiche Chimiche e Geologiche", "ANLAM Accademia Nazionale dei Lincei Atti Rendiconti Classe di Matematica e Applicazioni", "ANLAF Accademia Nazionale dei Lincei Atti Rendiconti Classe di Scienze Fisiche e Naturali", "ANLAR Accademia Nazionale dei Lincei Atti Rendiconti Classe di Scienze Fisiche Matematiche e Naturali", "AcChR Accounts Chem. Res.", "AcBu. Acoust. Bull.", "AIH.. Acoustical Imaging and Holography", "APhy. Acoustical Physics", "ASAJ. Acoustical Society of America Journal", "AcouL Acoustics Letters", "AcAcu Acta Acustica", "AcAer Acta Aerodynamica Sinica", "AcAAS Acta Aeronautica et Astronautica Sinica", "AcAM. Acta Applicandae Mathematicae", "AcAri Acta Arithmetica", "AcArm Acta Armamentarii", "AcAau Acta Astronautica", "AcA.. Acta Astronomica", "AcASn Acta Astronomica Sinica", "AcAS. Acta Astronomica Supplementa", "AcApS Acta Astrophysica Sinica", "AcAuS Acta Automatica Sinica", "AcBAS Acta Biochimica and Biophysica Academiae Scientarium Hungarica", "AcBBH Acta Biochimica et Biophysica Hungarica", "AcBBS Acta Biochimica et Biophysica Sinica", "AcBio Acta Biotheoretica", "AcCS. Acta Chemica Scandinavica Series A", "ACIP. Acta Cienc. Indica Phys.", "AcC.. Acta Cosmologica", "AcCrA Acta Crystallographica Section A", "AcCrB Acta Crystallographica Section B", "AcCrC Acta Crystallographica Section C", "AcCrD Acta Crystallographica Section D", "AcElc Acta Electrochimica", "AcEle Acta Electronica", "AcElS Acta Electronica Sinica", "AcESn Acta Electron. Sinica", "AcFre Acta Frequenza", "AcGG. Acta Geod. Geophys.", "AcGeo Acta Geophysica", "AcGeP Acta Geophysica Polonica", "AcGSn Acta Geophys. Sinica", "AcHA. Acta Historica Astronomiae", "AcMCS Acta Materiae Compositae Sinica", "AcMat Acta Materialia", "AcMa. Acta Mathematica", "AcMaH Acta Mathematica Hungarica", "AcMaS Acta Mathematica Sinica", "AcMSw Acta Mathematica Sweden", "AcMec Acta Mechanica", "AcMSn Acta Mechanica Sinica", "AcMSS Acta Mechanica Solida Sinica", "AcMet Acta Metallurgica", "AcMMS Acta Metallurgica et Materialia Supplement", "AcMeS Acta Meteorologica Sinica", "AcNum Acta Numerica", "AcOSi Acta Oceanica Sinica", "AcOdS Acta Odontologica Scandinavica", "AcO.. Acta Oecologica", "AcOpS Acta Optica Sinica", "AcOrS Acta Orthopaedica Scandinavica", "AcPSi Acta Photonica Sinica", "AcPhy Acta Physica", "APASH Acta Physica Academiae Scientiarum Hungaricae", "AcPhA Acta Physica Austriaca", "AcPAS Acta Physica Austriaca Supplement", "AcPhC Acta Physica et Chemica", "AcPhH Acta Physica Hungarica", "APHHI Acta Physica Hungarica Heavy Ion Physics", "APHQE Acta Physica Hungarica Quantum Electronics", "AcPP. Acta Physica Polonica", "AcPPA Acta Physica Polonica A", "AcPPB Acta Physica Polonica B", "AcPSn Acta Physica Sinica", "AcPSl Acta Physica Slovaca", "AcPhS Acta Physiologica Scandinavica", "AcPol Acta Polytechnica", "AcPSc Acta Polytechnica Scandinavica Applied Physics Series", "AcPSP Acta Polytechnica Scandinavica Physics", "AcSSn Acta Seismologica Sinica", "ASSF. Acta Societatis Scientarum Fennicae", "ASSFA Acta Societatis Scientarum Fennicae Series A", "AcTec Acta Technica", "AcUni Acta Universitaria", "AcMPh Acta Universitatis Caroliae. Mathematica et Physica", "AcMPS Acta Universitatis Caroliae. Mathematica et Physica Supplement", "APEC. Active and Passive Electronic Components", "Acu.. Acustica", "AdBeh Adaptive Behaviour", "AdAs. Ad Astra", "ARPM. Adgeziia Rasplavov i Paika Materialov", "Adsor Adsorption", "AdCM. Advanced Ceramic Materials", "AdCoL Advanced Composites Letters", "AMP.. Advanced Materials and Processes", "APM.. Advanced Performance Materials", "ASL.. Advanced Science Letters", "AdSAC Advanced Series in Astrophysics and Cosmology", "AdSMP Advanced Series in Mathematical Physics", "ASDHE Advanced Series on Directions in High Energy Physics", "AdTPh Advanced Texts in Physics", "AdAeS Advances in Aeronautical Sciences", "AdApM Advances in Applied Mathematics", "AdAst Advances in Astronomy", "AASP. Advances in Astronomy and Space Physics", "AdAtS Advances in Atmospheric Sciences", "AdAMP Advances in Atomic and Molecular Physics", "AAMOP Advances in Atomic Molecular and Optical Physics", "AdBMP Advances in Biological and Medical Physics", "AdBio Advances in Biophysics", "AdCP. Advances in Cardiovascular Physics", "AdChP Advances in Chemical Physics", "AdCIS Advances in Colloid and Interface Science", "AdCoM Advances in Computational Mathematics", "AdCMP Advances in Condensed Matter Physics", "AdEPS Advances in Earth and Planetary Sciences", "AdEOA Advances in Earth Oriented Applications and Space Technology", "AEEP. Advances in Electronics and Electron Physics", "AEEPS Advances in Electronics and Electron Physics Supplement", "AdExG Advances in Exploration Geophysics", "AdGDP Advances in Geophysical Data Processing", "AdGR. Advances in Geophysical Research", "AdGeo Advances in Geophysics", "AdGeS Advances in Geophysics Supplement", "AdG.. Advances in Geosciences", "AdHEP Advances in High Energy Physics", "ADIEP Advances in Imaging and Electron Physics", "AdMRe Advances in Magnetic Resonance", "AdMPC Advances in Materials Physics and Chemistry", "AdMS. Advances in Materials Science", "AdMSE Advances in Materials Science and Engineering", "AdMaP Advances in Mathematical Physics", "AdMat Advances in Mathematics", "AdMPS Advances in Mechanics and Physics of Surfaces", "AdMUM Advances in Mechanics Uspekhi Mekhaniki", "AdMet Advances in Meteorology", "AdNOp Advances in Nonlinear Optics", "AdNuP Advances in Nuclear Physics", "AdPhG Advances in Physical Geochemistry", "AdPhy Advances in Physics", "AdPlP Advances in Plasma Physics", "AdPPR Advances in Plasma Physics Research", "AdPoS Advances in Polymer Science", "AdQC. Advances in Quantum Chemistry", "AdRS. Advances in Radio Science", "AdSR. Advances in Science and Research", "AdSSP Advances in Solid State Physics", "AdSpR Advances in Space Research", "AdAnS Advances in the Astronautical Sciences", "AdTAM Advances in Theoretical and Applied Mechanics", "AdTMP Advances in Theoretical and Mathematical Physics", "AdThP Advances in Theoretical Physics", "AdWR. Advances in Water Resources", "AAMS. Adv. Appl. Mech. Suppl.", "ATTM. AEG Telefunken Technische Mitteilungen", "AeoRe Aeolian Research", "Aekv. Aerodinamika kanalov i ventiliatorov", "AeRaG Aerodinamika Razrezhennykh Gazov", "AerTe Aerojet Technology", "AeIBu Aerokosmicheski Izsledvaniia B lgariia", "AeJ.. Aeronautical Journal", "AeQ.. Aeronautical Quarterly", "AeSIJ Aeronautical Society India Journal", "AerST Aerosol Science Technology", "AeAm. Aerospace America", "AeCh. Aerospace China", "AeCM. Aerospace Composites and Materials", "AeDy. Aerospace Dynamics", "AeEn. Aerospace Engineering", "AeMat Aerospace Materials", "AeMed Aerospace Medicine", "ARBl. Aerospace Research in Bulgaria", "AeTJa Aerospace Technology Japan", "Aero. Aerospace UK", "AFGL. AFGL-TR-0208 Environemental Research papers", "AfrSk African Skies", "AGUFM AGU Fall Meeting Abstracts", "AGUSM AGU Spring Meeting Abstracts", "AIAAJ AIAA Journal", "AIASJ AIAA Student Journal", "AIChE AIChE Journal", "EDAM. AI EDAM", "AIHAJ AIHA Journal", "AIPA. AIP Advances", "AirSp Air and Space", "AirE. Aircraft Engineering", "AirCo Air et Cosmos", "AFMa. Air Force Magazine", "AiInt Air International", "APCAJ Air Pollution Control Association Journal", "AkAtP Akademia Athenon Praktika", "DoArm Akademiia Nauk Armianskoi SSR Doklady", "DoAze Akademiia Nauk Azerbaidzhanskoi SSR Doklady", "IzAze Akademiia Nauk Azerbaidzhanskoi SSR Izvestiia Seriia Fiziko Tekhnicheskikh i Matematicheskikh Nauk", "IFBel Akademiia Nauk Belorusskoi SSR Institut Fiziki Nauchnaia Sessiia Minsk Belorussian SSR Zhurnal Prikladnoi Spektroskopii", "DoBel Akademiia Nauk BSSR Doklady", "SoGru Akademiia Nauk Gruzii Soobshcheniia", "VeKaz Akademiia Nauk Kazakhskoi SSR Vestnik", "IzLat Akademiia Nauk Latviiskoi SSR Izvestiia Seriia Fizicheskikh i Tekhnicheskikh Nauk", "IzMol Akademiia Nauk Moldavskoi SSR Izvestiia Seriia Fiziko Tekhnicheskikh i Matematicheskikh Nauk", "DoSSR Akademiia Nauk SSSR Doklady", "FizAO Akademiia Nauk SSSR Fizika Atmosfery i Okeana", "InSSR Akademiia Nauk SSSR Investiia Mekhanika Zhidkosti i Gaza", "IzFZ. Akademiia Nauk SSSR, Izvestiia, Fizika Zemli", "IzSSR Akademiia Nauk SSSR Izvestiia Seriia Fizicheskaia", "MeSSR Akademiia Nauk SSSR Mekhanika Zhidkosti i Gaza", "FiMos Akademiia Nauk SSSR Otdelenie Obshchei Fiziki i Astronomii Nauchnaia Sessiia Moscow USSR Uspekhi Fizicheskikh Nauk", "IzSib Akademiia Nauk SSSR Sibirskoe Otdelenie Izvestiia", "SiSSR Akademiia Nauk SSSR Sibirskoe Otdelenie Izvestiia Seriia Tekhnicheskie Nauki", "KzSib Akademiia Nauk SSSR Sibirskoi Otdelenie Izvestiia Seriia Tekhnicheskikh Nauk", "VeSSR Akademiia Nauk SSSR Vestnik", "DoTad Akademiia Nauk Tadzhikskoi SSR Doklady", "FiSSR Akademiia Nauk Tadzhikskoi SSR Fiziko Tekhnicheskii Institut Dyushambe Tadzhik SSR Akademiia Nauk Tadzhikskoi SSR Doklady", "ABTad Akademiia Nauk Tadzhikskoi SSR Institut Astrofiziki Biulleten", "IzTur Akademiia Nauk Turkmenskoi SSR Izvestiia Seriia Fiziko Tekhnicheskikh Khimicheskikh i Geologicheskikh Nauk", "IzUkr Akademiia Nauk Ukrainian SSSR Izvestiia Seriia Fizicheskaia", "PrUkr Akademiia Nauk Ukrains koi RSR Dopovidi Matematika Prirodoznavstvo Tekhnichni Nauki", "FiUkr Akademiia Nauk Ukrain skoi RSR Dopovidi Seriia Fiziko Matematichni ta Tekhnichni Nauki", "DoUkr Akademiia Nauk Ukrains koi RSR Dopovidi Seriia Fiziko Matematichni ta Tekhnichni Nauki", "ViUkr Akademiia Nauk Ukrains koi RSR Visnik", "MGUkr Akademiia Nauk Ukrainskoi SSR Morskie Gidrofizicheskie Issledovaniia", "DoUzb Akademiia Nauk Uzbekskoi SSR Doklady", "IzUzb Akademiia Nauk Uzbekskoi SSR Izvestiia Seriia Fiziko Matematicheskikh Nauk", "VeNav Akademiia Navuk BSSR Vestsi Seryia Fizika Tekhnichnykh Navuk", "AkZh. Akusticheskii Zhurnal", "AkTek Akustika i Ul trazvukovaia Tekhnika", "AAIzN Alma Ata Izdatel Nauka", "ALMAN ALMA Newsletter", "AlFr. Alta Frequenza", "AFRE. Alta Frequenza Rivista di Elettronica", "Ambio Ambio", "AVSOA American Association of Variable Stars Observers Abstracts", "AVSOM American Association of Variable Stars Observers Monographs", "AVSOQ American Association of Variable Stars Observers Quarterly Reports", "AVSOR American Association of Variable Stars Observers Reports", "ACSB. American Ceramic Society Bulletin", "ACSC. American Ceramic Society Communications", "ACSJ. American Ceramic Society Journal", "AHSJ. American Helicopter Society Journal", "AmJC. American Journal of Cardiology", "AmJM. American Journal of Mathematics", "AmJPh American Journal of Physics", "AmJS. American Journal of Science", "AmJSA American Journal of Science and Arts", "AMSBu American Meteorological Society Bulletin", "AmMin American Mineralogist", "AmSci American Scientist", "ASME. American Society of Mechanical Engineers", "AnCoi Anais do Observatorio Astronomico da Universidade de Coimbra", "AnFis Anales de Fisica", "AICSP Analog Integrated Circuits and Signal Processing", "AnMP. Analysis and Mathematical Physics", "AnBio Analytical Biochemistry", "AnaCh Analytical Chemistry", "AnaIn Analytical Instrumentation", "BSSR. AN BSSR Institut Teplo i Massoobmena Vsesoiuznaia Konferentsiia Teplomassoobmenu Minsk Belorussian SSR Preprint", "AAONw Anglo-Australian Observatory Epping Newsletter", "AAOPr Anglo-Australian Observatory Epping Preprint", "ARIJ. An Interdisciplinary Journal of Physical and Engineering Sciences", "CSMPA Ankara Universite Faculte des Sciences Communications Serie Mathematiques Physique et Astronomie", "AASF. Ann. Acad. Sci. Fennicae", "AnStr Annalen der Kaiserlichen Universitats-Sternwarte in Strassburg", "AnWie Annalen der K.K. Sternwarte Wien", "AnSWi Annalen der K.K. Universitaets-Sternwarte in Wien (Waehring)", "AnMun Annalen der Koeniglichen Sternwarte bei Muenchen", "AnP.. Annalen der Physik", "AnWiD Annalen der Universitaets-Sternwarte Wien, Dritter Folge", "AnMet Annalen Meteorologie", "AnLei Annalen van de Sterrewacht te Leiden", "AnAp. Annales d'Astrophysique", "AnCPh Annales de Chimie et de Physique", "AnG.. Annales de Geophysique", "AFLB. Annales de la Fondation Louis de Broglie", "ASSB. Annales de la Societe Scietifique de Bruxelles", "AnIHP Annales de L'Institut Henri Poincare Section Physique Theorique", "AnTou Annales de l'Observatoire Astron. et Meteo. de Toulouse", "AnAIK Annales de l'Observatoire astronomique de l'Université imériale de Kharkow", "AOTok Annales de l'Observatoire astronomique de Tokyo", "AnZoC Annales de l'Observatoire astronomique de Zô-sè (Chine)", "AnAPM Annales de l'Observatoire d'astronomie physique de Paris, Section d'astrophysique, à Meudon", "AnBes Annales de l'Observatoire de Besancon", "AnBor Annales de l'Observatoire de Bordeaux", "AnNic Annales de l'Observatoire de Nice", "AnPar Annales de l'Observatoire de Paris", "AnPOb Annales de l'Observatoire de Paris. Observations", "AnOSt Annales de l'Observatoire de Strasbourg", "AnRio Annales de l'Observatoire Imperial de Rio de Janeiro", "AnAth Annales de l'Observatoire national d'Athènes", "AnOB. Annales de l'Observatoire Royal de Belgique", "AnOBN Annales de l'Observatoire Royal de Belgique Nouvelle serie", "AnBru Annales de l'Observatoire Royal de Bruxelles", "AnPh. Annales de Physique", "AnPBM Annales de Physique Biologique et Medicale", "AnPCS Annales de Physique Colloque Supplement", "AnTel Annales des Telecommunications", "AnGVP Annales du Bureau des Longitudes, Gauthier-Villars, Paris", "AFChr Annales Francaises de Chronometrie", "AnGeo Annales Geophysicae", "AnGeA Annales Geophysicae Series A Upper Atmosphere and Space Sciences", "AnGeB Annales Geophysicae Series B Terrestrial and Planetary Physics", "AnHP. Annales Henri Poincaré", "AnTec Annales Tectonicae", "AUGGM Annales UMCS, Geographia, Geologia, Mineralogia et Petrographia", "AUSPh Annales UMCS, Sectio AAA: PHYSICA", "AnApS Annals of Applied Statistics", "AGp.. Annals of Geophysics", "AnGla Annals of Glaciology", "AnGAG Annals of Global Analysis Geometry", "AnHar Annals of Harvard College Observatory", "AnMat Annals of Mathematics", "AnMAI Annals of Mathematics and Artificial Intelligence", "AnOR. Annals of Operations Research", "AnPhy Annals of Physics", "AnREE Annals of Research on Engineering Education", "AnCGH Annals of Royal Observatory, Cape of Good Hope", "AnSci Annals of Science", "AnSta Annals of Statistics", "AnSAO Annals of the Astrophysical Observatory of the Smithsonian Institution", "AnBos Annals of the Bosscha Observatory Lembang (Java) Indonesia", "AnCap Annals of the Cape Observatory", "AnDea Annals of the Dearborn Observatory", "AnDud Annals of the Dudley Observatory", "AnISM Annals of the Institute of Statistical Mathematics", "AIQSY Annals of the IQSY", "AnIPS Annals of the Israel Physical Society", "AnLow Annals of the Lowell Observatory", "NYASA Annals of the New York Academy of Sciences", "AnLL. Annals of the Observatory of Lucien Libert", "AnLun Annals of the Observatory of Lund", "AnLuS Annals of the Observatory of Lund Supplement", "AnOLL Annals of the Private Observatory of Lucien Libert", "AnEdi Annals of the Royal Observatory, Edinburgh", "AnSPC Annals of the Solar Physics Observatory Cambridge England", "AnTok Annals of the Tokyo Astronomical Observatory", "AnUCP Annals of the University of Craiova Physics AUC", "AnRev Ann Rev", "AnBSJ Annual Bulletin of the Societe Jersiaise", "YalAR Annual Report of the Astronomer of the Winchester Observatory of Yale College", "ARKod Annual Report of the Kodaikanal Observatory", "MMAAR Annual Report of the Maria Mitchell Association", "ARAOJ Annual Report of the National Astronomical Observatory of Japan", "AnRSI Annual Report of the Smithsonian Institution", "WinAR Annual Report of the Windsor Observatory, New South Wales", "ARAC. Annual Review of Analytical Chemistry", "ARCMP Annual Review of Condensed Matter Physics", "AREPS Annual Review of Earth and Planetary Sciences", "AnRE. Annual Review of Energy", "AnRFM Annual Review of Fluid Mechanics", "ARIST Annual Review of Information Science and Technology", "ARMS. Annual Review of Marine Science", "AnRMS Annual Review of Materials Science", "ARNPS Annual Review of Nuclear and Particle Science", "ARPC. Annual Review of Physical Chemistry", "ARCP. Annual Reviews of Computational Physics", "AnMN. Antarctic Meteorite Newsletter", "AMR.. Antarctic Meteorite Research", "Antk. Antarktika", "Anten Antenny", "AnCan Anticancer Research", "IORA. Anuario publicado pelo Imperial Observatorio do Rio de Janeiro", "IORAS Anuario publicado pelo Imperial Observatorio do Rio de Janeiro Suplemento", "ApAN. Apatity Akademiia Nauk SSSR", "ApKF. Apatity Kol skii Filial AN SSSR", "Apei. Apeiron", "ApMat Aplikace Matematiky, Applied Mathematics", "AppAn Applicable Analysis", "ApMa. Applications of Mathematics", "ApAc. Applied Acoustics", "ApAI. Applied Artificial Intelligence", "ApCM. Applied Composite Materials", "ACESJ Applied Computational Electromagnetics Society Journal", "ApEn. Applied Energy", "ApEnM Applied Environmental Microbiology", "ApGeo Applied Geophysics", "ApMF. Applied Mathematical Finance", "AMat. Applied Mathematics", "ApMM. Applied Mathematics and Mechanics", "ApMaC Applied Mathematics Computation", "ApMaL Applied Mathematics Letters", "ApMaM Applied Mathematics Mechanics English Edition", "ApMaO Applied Mathematics Optimization", "AMM.. Applied Mechanics and Materials", "ApMRv Applied Mechanics Reviews", "ApMic Applied Microbiology", "ApMT. Applied Microgravity Technology", "ApNan Applied Nanoscience", "ApNM. Applied Numerical Mathematics", "ApOpt Applied Optics", "ApPhy Applied Physics", "ApPhA Applied Physics A: Materials Science &", "ApPhB Applied Physics B: Lasers and Optics", "ApPPL Applied Physics B Photophysics Laser Chemistry", "ApPhC Applied Physics Communications", "APExp Applied Physics Express", "ApPhL Applied Physics Letters", "ApPhR Applied Physics Research", "ApScR Applied Scientific Research", "ApSRA Applied Scientific Research Section A", "ApSRB Applied Scientific Research Section B", "ApSpe Applied Spectroscopy", "ApSRv Applied Spectroscopy Reviews", "ApSup Applied Superconductivity", "ApSS. Applied Surface Science", "ApWS. Applied Water Science", "APS.. APS Meeting Abstracts", "ACMFE Aquatic Conservation: Marine and Freshwater Ecosystems", "AJSE. Arabian Journal of Science Engineering", "Arch. Archaeoastronomy", "ArchS Archaeoastronomy Supplement", "Archa Archaeometry", "ASBTV Archenhold-Sternwarte Berlin-Treptow, Vortrage Schr.", "ArApM Archive Applied Mechanics", "AHES. Archive for History of Exact Sciences", "ArRMA Archive for Rational Mechanics and Analysis", "ArElU Archiv Elektronik und Uebertragungstechnik", "AAM.. Archive of Applied Mechanics", "ArApM Archive of Applied Mechanics", "ArBB. Archive of Biochemistry and Biophysics", "ArAco Archives Acoustics", "ArS.. Archives des Sciences", "ArSPN Archives des Sciences Physiques et Naturelles", "AMGBA Archives for Meteorology Geophysics and Bioclimatology Series A Meteorology and Atmopsheric Physics", "AMGBB Archives for Meteorology Geophysics and Bioclimatology Series B Theoretical and Applied Climatology", "AIPBB Archives Internationales de Physiologie de Biochimie et de Biophysique", "ArNSc Archives Neerlandaises des Sciences Exactes et Naturelles", "ArMaN Archiv for Mathematik og Naturvidenskab", "AMGBK Archiv Meteorologie Geophysik und Bioklimatologie Serie B Klimatologie und Umweltmeteorologie Strahlungsforschung", "AMGBS Archiv Meteorologie Geophysik und Bioklimatologie Serie Meteorologie und Geophysik", "ArMeS Archiv of Mechanics, Archiwum Mechaniki Stosowanej", "ArCom Archivum Combustionis", "ArAku Archiwum Akustyki", "ArAuT Archiwum Automatyki i Telemechaniki", "ArBuM Archiwum Budowy Maszyn", "ArEle Archiwum Elektrotechniki", "ArMeS Archiwum Mechaniki Stosowanej", "ArPSp Archiwum Procesow Spalania", "ArTSp Archiwum Termodynamiki i Spalania", "AAAR. Arctic, Antarctic and Alpine Research", "ArA.. Arkiv for Astronomi", "ArM.. Arkiv for Matematik", "ArMAF Arkiv for Matematik, Astronomi och Fysik", "ArmOL Armagh Observatory Leaflet", "ArJPh Armenian Journal of Physics", "ArtSa Artificial Satellites", "astro ArXiv Astrophysics e-prints", "cs... ArXiv Computer Science e-prints", "arXiv ArXiv e-prints", "gr.qc ArXiv General Relativity and Quantum Cosmology eprints", "hepex ArXiv High Energy Physics - Experiment e-prints", "hepla ArXiv High Energy Physics - Lattice e-prints", "hepph ArXiv High Energy Physics - Phenomenology e-prints", "hepth ArXiv High Energy Physics - Theory e-prints", "mathp ArXiv Mathematical Physics e-prints", "math. ArXiv Mathematics e-prints", "nlin. ArXiv Nonlinear Sciences e-prints", "nucle ArXiv Nuclear Experiment e-prints", "nuclt ArXiv Nuclear Theory e-prints", "physicArXiv Physics e-prints", "ASHRA ASHRAE Journal", "AsJPh Asian Journal of Physics", "Aslib Aslib Proceedings: new information perspectives", "ATJEM ASME Transactions Journal Engineering Materials and Technology", "ATJDS ASME Transactions Journal of Dynamic Systems and Measurement Control B", "ATJEl ASME Transactions Journal of Electronic Packaging", "ATJEG ASME Transactions Journal of Engineering Gas Turbines and Power", "ATJEP ASME Transactions Journal of Engineering Power", "ATJFE ASME Transactions Journal of Fluids Engineering", "ATJHT ASME Transactions Journal of Heat Transfer", "ATJLT ASME Transactions Journal of Lubrication Technology", "ATJSE ASME Transactions Journal of Solar Energy and Engineering", "ATJTr ASME Transactions Journal of Tribology", "ATJTu ASME Transactions Journal of Turbomachinery", "ATJVA ASME Transactions Journal of Vibration Acoustics", "ATJAM ASME Transactions Series E Journal of Applied Mechanics", "ATJEP ASME Transactions Series Journal of Engineering Power", "AsAut Assembly Automation", "ATMAB Association Technique Maritime et Aeronautique Bulletin", "ATMAS Association Technique Maritime et Aeronautique Session Paris France ONERA TP", "AVSVB Associazione Veneta Osservatori di Stelle Variabili Bulletin", "Aster Aster", "StNws ASTM Standardization News", "AsBio Astrobiology", "AISAO Astrofizicheskie Issledovaniia Izvestiya Spetsial'noj Astrofizicheskoj Observatorii", "AISof Astrofizicheskie Issledovaniya Sofia", "Afz.. Astrofizika", "AAfz. Astrometriia i Astrofizika", "AsAc. Astronautica Acta", "AsAcS Astronautica Acta Supplement", "AsAer Astronautics Aeronautics", "Asnau Astronautik", "AUBas Astron. Inst. Univ. Basel", "Anews ASTRON Newsletter", "AsUAI Astronomia. La rivista dell' Unione Astrofili Italiani", "Astnm Astronomia UAI", "USNOM Astronomical and Meteorological Observations made at the U.S. Naval Observatory", "ACiCh Astronomical Circular", "ACMan Astronomical Contributions from the University of Manchester", "TamCo Astronomical Contributions from the University of South Florida Tampa", "adass Astronomical Data Analysis Software and Systems", "ADCBu Astronomical Data Center Bulletin", "AstHe Astronomical Herald", "AstLt Astronomical Letters", "ANote Astronomical Notes University of Gothenburg Sweden Section of Astronomy", "USNOA Astronomical Observations made at the U.S. Naval Observatory", "UCLAP Astronomical Papers University of California Los Angeles", "AReg. Astronomical Register", "ASSA. Astronomical Society of South Africa, Cape Centre", "AVest Astronomicheskii Vestnik", "AVISS Astronomicheskii Vestnik Issledovaniia Solnechnoi Sistemy", "AZh.. Astronomicheskii Zhurnal", "ATsir Astronomicheskij Tsirkulyar", "KazOB Astronomicheskoj Observatorii Kazan Byulleten", "AsSch Astronomie in der Schule", "AAAN. Astronomische Abhandlungen als Erganzungshefte zu den Astronomische Nachrichten", "AAHam Astronomische Abhandlungen der Hamburger Sternwarte", "ABMun Astronomische Beobachtungen angestellt auf der K. Sternwarte zu Bogenhausen bei Muenchen", "ABSBe Astronomische Beobachtungen auf der Koniglichen Sternwarte zu Berlin", "ABKie Astronomische Beobachtungen auf der Sternwarte der Koeniglichen Christian-Albrechts-Universitaet zu Kiel", "MiZur Astronomische Mitteilungen der Eidgenössischen Sternwarte Zurich", "MiBre Astronomische Mitteilungen der Koeniglichen Universitaets-Sternwarte zu Breslau", "MiGoe Astronomische Mitteilungen der Universitaets-Sternwarte zu Goettingen", "AN... Astronomische Nachrichten", "ANS.. Astronomische Nachrichten Supplement", "MitSZ Astronomischen Mitteilungen Eidgen. Sternwarte Zurich", "AJB.. Astronomischer Jahresbericht", "MiARI Astronomisches Rechen-Institut Heidelberg Mitteilungen Serie A", "MiARB Astronomisches Rechen-Institut Heidelberg Mitteilungen Serie B", "ATi.. Astronomisk Tidsskrift", "Ast.. Astronomy", "Astro Astronomy", "AstAp Astronomy and Astro-Physics (formerly The Sidereal Messenger)", "ADIL. Astronomy Data Image Library", "AEdRv Astronomy Education Review", "AExpr Astronomy Express", "AstL. Astronomy Letters", "AsNow Astronomy Now", "AstQ. Astronomy Quarterly", "ARep. Astronomy Reports", "AASPP Astrononomy and Astrophysics Series", "APh.. Astroparticle Physics", "AstBu Astrophysical Bulletin", "ApInv Astrophysical Investigations", "ApL.. Astrophysical Letters", "ApNr. Astrophysica Norvegica", "Ap... Astrophysics", "ASPRv Astrophysics and Space Physics Reviews", "ApSSP Astrophysics and Space Science Proceedings", "ASTRA Astrophysics and Space Sciences Transactions", "ApSSS Astrophysics and Space Science Supplement", "MKAtl Astrophysics monographs University of Chicago Press", "ArBei Astrophysics Reports Publications of the Beijing Astronomical Observatory", "ApT.. Astrophysics Today", "AstPo Astropolitics", "AsAna Asymptotic Analysis", "BLabR AT&", "AJSEd Atlas Journal of Science Education", "AtlVS Atlas Poiskovykh Kart Peremennykh Zvezd", "Atmos Atmosphere", "AtO.. Atmosphere Ocean", "AtOpt Atmosphere Optics", "ACP.. Atmospheric Chemistry &", "ACPD. Atmospheric Chemistry &", "AtmEn Atmospheric Environment", "AMT.. Atmospheric Measurement Techniques", "AMTD. Atmospheric Measurement Techniques Discussions", "AtmRe Atmospheric Research", "AtSc. Atmospheric Science", "AtScL Atmospheric Science Letters", "AtmTe Atmospheric Technology", "atnfp ATNF Proposal", "Atom. Atom", "AD... Atomic Data", "ADNDT Atomic Data and Nuclear Data Tables", "AtERv Atomic Energy Review", "AMOP. Atomic Molecular and Optical Physics", "AtPhy Atomic Physics", "AtST. Atomisation Spray Technology", "AtKe. Atomkernenergie", "AtEn. Atomnaia Energiia", "AVET. Atomno Vodorodnaia Energetika i Tekhnologiia", "ATR.. ATR Australian Telecommunication Research", "AALST Atti Accad. Ligure Sci. Lett.", "AAPon Atti Accad. Pontaniana", "AAST. Atti Accad. Sco. Torino I", "ATTTJ AT T Technical Journal", "AurPh Auroral physics", "AuJAR Australian Journal of Agricultural Research", "AuJA. Australian Journal of Astronomy", "AuJCE Australian Journal of Chemical Education", "AJCh. Australian Journal of Chemistry", "AuJES Australian Journal of Earth Sciences", "AuJPh Australian Journal of Physics", "AuJPA Australian Journal of Physics Astrophysical Supplement", "AuSRA Australian Journal of Scientific Research A Physical Sciences", "AJSR. Australian Journal of Soil Research", "AuMSJ Australian Mathematical Society Journal Series B -- Applied Mathematics", "AuMM. Australian Meteorological Magazine", "Autom Automatica", "ACTAp Automatic Control Theory Applications", "AuRob Autonomous Robots", "AvSeM Aviation Space and Environmental Medicine", "AvWST Aviation Week Space Technology", "AvKos Aviatsiia i Kosmonavtika", "AvTek Aviatsionnaia Tekhnika", "AvTel Avtomatika i Telemekhanika", "AvPE. Avtomatizatsiia Proektirovaniia Elektronike", "Avtme Avtometriia", "BBUSS Babes Bolyai Universitas Studia Series Mathematica", "BBUSM Babes Bolyai Universitas Studia Series Physica", "BaPhL Balkan Physics Letters", "BaltA Baltic Astronomy", "BamKV Bamberg Kleine Veroeffentlichungen der Remeis-Sternwarte", "BAVRu BAV Rundbrief", "BAVSR BAV Rundbrief - Mitteilungsblatt der Berliner Arbeits-gemeinschaft fuer Veraenderliche Sterne", "BAWMN Bayerische Akademie Wissenschaften mathematisch naturwissenschaftliche Klasse Sitzungsberichte", "BayAn Bayesian Analysis", "BBCEn BBC Engineering", "BRMIC Behavior Research Methods Instruments and Computers", "BIT.. Behaviour &", "BUAAJ Beijing University Aeronautics and Astronautics Journal", "BePl. Beitraege Plasmaphysik", "BeiGe Beitraege zur Geophysik", "BeiMP Beitraege zur Mineralogie und Petrographie", "BROGS Belgian Royal Observatory Communications Series Geophysics Series", "BKAD. Beobachtungen der Kaiserlichen Universitaets-Sternwarte Dorpat", "BKUJ. Beobachtungen der Kaiserlichen Universitaets-Sternwarte Jurjew", "BESBe Beobachtungs-Ergebnisse der Koniglichen Sternwarte zu Berlin", "ANZi. Beobachtungs-Zirkular der Astronomischen Nachrichten", "BBGPC Berichte der Bunsen-Gesellschaft Physical Chemistry Chemical Physics Berichte", "BADPG Berlin East Germany Akademie Verlag GmbH Ergebnisse Plasmaphysik und Gaselektronik", "BAVMM Berlin East Germany Akademie Verlag GmbH Shriftenreihe des Zentralinstituts Mathematik und Mechanik", "BAVSM Berliner Arbeitsgemeinschaft fuer Veraenderliche Sterne - Mitteilungen", "BGBGM Berlin Gebrueder Borntraeger Geoexploration Monographs Series", "Bern. Bernoulli", "BeElM Beskontaktnye Elektricheskie Mashiny", "BeSN. Be Star Newsletter", "BGIBI BGI Bulletin d'Information", "AstBa Biblioteca Astrei Basarabene", "BEPM. Bielefeld Encounters in Physics and Mathematics", "BiLuf Bildmessung und Luftbildwessen", "BBRC. Biochemical and Biophysical Research Communications", "BioJ. Biochemical Journal", "BCB.. Biochemistry and Cell Biology", "AcBB. Biochimica et Biophysica Acta", "BioFa Biofabrication", "BGeo. Biogeosciences", "BGD.. Biogeosciences Discussions", "BMNAS Biographical Memoirs National Academy of Sciences", "BMFRS Biographical Memoirs of Fellows of the Royal Society", "BiBi. Bioinspiration and Biomimetics", "BMP.. Biological and Medical Physics", "BPS.. Biological Physics Series", "BRCPS Biological Reviews of the Cambridge Philosophical Society", "BioMa Biomedical Materials", "BioMi Biomedical Microdevices", "Biome Biometrika", "Bion. Bionika", "BioCh Biophysical Chemistry", "BpJ.. Biophysical Journal", "BpBeS Biophysics and Bioengineering Series", "BioSM Biophysics of Structure and Mechanism", "Bioph Biophysics USSR", "Biopk Biophysik", "Biorh Biorheology", "BioSc BioScience", "BiotL Biotechnology Letters", "BOTor Biuletyn Obserwatoium Astronomicznego Uniwersytetu M. Kopernika w Toruniu", "BITad Biulletini of the Astronomical Institute Akademiia Nauk Tadzhikskoi", "BIAst Bjull. Inst. Astrofizikii", "BlazD BLAZAR Data", "BAAA. Boletin de la Asociacion Argentina de Astronomia La Plata Argentina", "BAOM. Boletin de la Astronomico Observatorio de Madrid", "BIMAF Boletin del Instituto de Matematica Astronomica y Fisica Universidad Nacional de Cordoba Argentina", "BITon Boletin del Instituto de Tonantzintla", "BOTT. Boletin de los Observatorios Tonantzintla y Tacubaya", "BMOE. Boletin mensual del Observatorio del Ebro", "BlDok Bolgarska Akademiia Nauk Doklady", "BSVit Bolletino della Societa dei Variabilisti Italiani", "BoSAI Bollettino della Societa Astronomica Italiana", "BGSA. Bollettino Geod. Scienzi Affini", "BonD. Bonner Durchmusterung", "BoLMe Boundary-Layer Meteorology", "Brain Brain", "BVVSA Bratislava Veda Vydavatelstvo Slovenskej Akademie Vied", "BFWSG Braunschweig Friedr Vieweg und Sohn GmbH", "BTUM. Braunschweig Technische Universitaet Mitteilungen", "BrJPh Brazilian Journal of Physics", "BrWK. Brennstoff Waerme Kraft", "BJAP. British Journal of Applied Physics", "BJET. British Journal of Educational Technology", "BJMSP British Journal of Mathematical and Statistical Psychology", "BJP.. British Journal of Psychology", "BTE.. British Telecommunications Engineering", "BIRM. Brussels Institute Royal Meteorologique de Belgique", "BuAkK Budapest Akademiai Kiado", "BlgAJ Bulgarian Astronomical Journal", "BlGJ. Bulgarian Geophysical Journal", "BlJMH Bulgarian Journal of Meteorology and Hydrology", "BlJPh Bulgarian Journal of Physics", "BlJPS Bulgarian Journal of Physics Supplement", "BlGeo Bulgarska Akademiia Naukite Geofizichni Institut Izvestiia", "BlTek Bulgarska Akademiia Naukite Institut Tekhnicheska Kibernetika Izvestiia", "BlMat Bulgarska Akademiia Naukite Matematicheski Institut Izvestiia", "BlSpi Bulgarska Akademiia Naukite Spisanie", "BlTse Bulgarska Akademiia Naukite Tsentralna Laboratoriia Geodeziia Izvestiia", "BlGSp Bulgarsko Geofizichno Spisanie", "BAFOE Bulletin Association Fran. Obs. Etoiles Variables", "BuAst Bulletin Astronomique", "BABel Bulletin Astronomique de Belgrade", "BuAsR Bulletin Astronomique, Revue Generale des Travaux Astronomiques", "BuAsI Bulletin Astronomique, Serie I", "BuChr Bulletin Chronometrique (Besancon)", "BCSAB Bulletin Cl. Science Academy Royal de Belgique", "BCrAO Bulletin Crimean Astrophysical Observatory", "BAPSS Bulletin de l'Academie Polonaise des Sciences Series des Sciences Mathematiques Astronomiques et Physiques", "BARB. Bulletin de l'Academie Royale de Belgique", "BSAF. Bulletin de la Societe Astronomique de France", "BSAFR Bulletin de la Societe Astronomique de France et Revue Mensuelle d'Astronomie, de Meteorologie et de Physique du Globe", "BSAL. Bulletin de la Societe Astronomique de Liege", "BSBA. Bulletin de la Societe Belge d'Astronomie", "BSRSL Bulletin de la Societe Royale des Sciences de Liege", "AFOEV Bulletin de l'Association Francaise d'Observateurs d'Etoiles Variables", "BMai. Bulletin de la Station Astrophotographique de Mainterne", "BOBeo Bulletin de l'Observatoire Astronomique de Belgrade", "BuLyo Bulletin de l'Observatoire de Lyon", "BBSAG Bulletin der Bedeckungsveraenderlichen-Beobachter der Schweizerischen Astronomischen Gesellschaft", "BIEBe Bulletin d'Information d'Etoiles Be", "BIM.. Bulletin d'Information des Marees Terrestres", "BIBGI Bulletin d'Information du Bureau Gravimetrique International", "BICDS Bulletin d'Information du Centre de Donnees Stellaires", "BCFHT Bulletin d'information du telescope Canada-France-Hawaii", "BGeod Bulletin Geodesique", "BGNS. Bulletin Geodesique, Nouvelle Series", "BuBIH Bulletin Horaire du Bureau International de l'Heure", "BOPul Bulletin (Izvestiya) de l'Observatoire Central a Poulkovo", "BuMat Bulletin Mathematique", "BKoAS Bulletin of Korean Astronomical Society", "BMBio Bulletin of Mathematical Biology", "BMBp. Bulletin of Mathematical Biophysics", "BPAS. Bulletin of Pure and Applied Science (Physics)", "BAAPG Bulletin of the American Association of Petroleum Geologists", "BAVSO Bulletin of the American Association of Variable Stars Observers", "BAAS. Bulletin of the American Astronomical Society", "BAMaS Bulletin of the American Mathematical Society", "BAMS. Bulletin of the American Meteorological Society", "BAPS. Bulletin of the American Physical Society", "BAICz Bulletin of the Astronomical Institutes of Czechoslovakia", "BAN.. Bulletin of the Astronomical Institutes of the Netherlands", "BANS. Bulletin of the Astronomical Institutes of the Netherlands Supplement Series", "BAORB Bulletin of the Astronomical Observatoire Royale de Belgique", "IllOB Bulletin of the Astronomical Observatory of the University of Illinois", "BASBr Bulletin of the Astronomical Society of Brazil", "BASI. Bulletin of the Astronomical Society of India", "BCAIC Bulletin of the Central Astronomical Institute of Czechoslovakia", "BuGSA Bulletin of the Geological Society of America", "BIMIA Bulletin of the Institute of Mathematics and Its Applications", "BuIPS Bulletin of the Israel Physical Society", "BKobO Bulletin of the Kobe Marine Observatory Kobe Japan", "BLPI. Bulletin of the Lebedev Physics Institute", "BuLMS Bulletin of the London Mathematical Society", "BRASP Bulletin of the Russian Academy of Science, Phys.", "BSAst Bulletin of the Section of Astronomy", "BSAE. Bulletin of the Soviet Antarctic Expedition", "BuONC Bulletin of the Special Astrophysical Observatory, Northern Caucasus", "BSAO. Bulletin of the Special Astrophysics Observatory", "BTasO Bulletin of the Tashkent Observatory", "BTok. Bulletin of the Tokyo Astronomical Observatory", "BToIT Bulletin of the Tokyo Institute of Technology", "BUBes Bulletin of the University of Besancon Observatory", "BYam. Bulletin of the Yamagata University Yamagata Japan", "YerOB Bulletin of the Yerkes Observatory of the University of Chicago", "BVol. Bulletin of Volcanology", "BCNRS Bulletin Signaletique - Centre National de la Recherche Scientifique", "BSAO. Bull. Special Astrophys. Obs.", "BIHCD Bureau Internationale Heure, Paris, Circulaire", "BDus. Byulleten' Instituta Astrofiziki Dushanbe Akademiya Nauk Tadzhikskoj SSR", "BITA. Byulleten' Instituta Teoreticheskoj Astronomii (Leningrad)", "BStaO Byulleten' Stalinabadskoj Astronomicheskoj Observatorii Akademiya Nauk Tadzhikskoj SSR", "ByuRe Byurakan Astrophysical Observatory Armenia USSR Reprints", "ByuPr Byurakanskaya Astrofizicheskaya Observatoriya Preprint", "CahPh Cahiers de Physique", "CAS.. Cambridge Astrophysics Series", "CCA.. Cambridge Contemporary Astrophysics", "CamRe Cambridge Observatories Reprints", "CMPNC Cambridge Monographs on Particle Physics, Nuclear Physics and Cosmology", "CMPPh Cambridge Monographs on Plasma Physics", "CSLPT Cambridge Studies in Low Temperature Physics", "CTMPC Cambridge Topics in Mineral Physics and Chemistry", "BCNRC Canada National Research Council Division Mechanical Engineering National Aeronautical Establishment Quarterly Bulletin", "CASJ. Canadian Aeronautics and Space Journal", "CASJQ Canadian Aeronautics and Space Journal Quarter", "CEEJ. Canadian Electrical Engineering Journal", "CaGeJ Canadian Geotechnical Journal", "CIPSG Canadian Information Processing Society Graphics Interface", "CJChE Canadian Journal of Chemical Engineering", "CaJCh Canadian Journal of Chemistry", "CaJCE Canadian Journal of Civil Engineering", "CaJES Canadian Journal of Earth Sciences", "CJECE Canadian Journal of Electrical Computer Engineering", "CJMat Canadian Journal of Mathematics", "CaJPh Canadian Journal of Physics", "CaJPS Canadian Journal of Physics Supplement", "CaJRS Canadian Journal of Remote Sensing", "CJRA. Canadian Journal of Research Section A", "CJSMT Canadian Journal of Science Mathematics and Technology Education", "CaJSS Canadian Journal of Soil Science", "CaRes Cancer Research", "CPhD. Cape Photographic Durchmusterung", "CarR. Caries Research", "GCRV. Carnegie Institute Washington D.C. Publication", "CarOB Carter Observatory Wellington New Zealand Astronomical Bulletins", "CarRe Carter Observatory Wellington New Zealand Reprints", "CasRe Case Western Reserve University Warner and Swasey Observatory Cleveland Ohio Reprints", "CASI. CASI Transactions", "CSVS. Catalogue of suspected variable stars. Acad. of Sciences USSR Shternberg.", "CatL. Catalysis Letters", "CarRv Catalysis Reviews", "Catt. CATTECH", "CCDA. CCD Astronomy", "CEGB. CEGB Research", "CeMec Celestial Mechanics", "CeMDA Celestial Mechanics and Dynamical Astronomy", "Cell. Cell", "Cellu Cellulose", "Cent. Centaurus", "CfAPr Center for Astrophysics Cambridge Mass Preprint Series", "CBET. Central Bureau Electronic Telegrams", "CEAB. Central European Astrophysical Bulletin", "CEJE. Central European Journal of Engineering", "CEJG. Central European Journal of Geosciences", "CEJPh Central European Journal of Physics", "CPH.. Centre de Physique des Houches", "CCpFS Ceskoslovensky Casopis pro Fyziku Sekce", "CFDAA CFD Advances Applications", "CKH.. Chagyo Kenkyu Hokoku (Tea Research Journal)", "ChNew Chandra News", "Chaos Chaos", "CSF.. Chaos Solitons and Fractals", "ChCom Chemical Communications", "ChEdu Chemical Educator", "ChEnC Chemical Engineering Communications", "ChEnN Chemical Engineering News", "CERDA Chemical Engineering Research &", "ChEnS Chemical Engineering Science", "ChGeo Chemical Geology", "CP... Chemical Physics", "CPL.. Chemical Physics Letters", "CPSS. Chemical Physics of Solid Surfaces", "CPSSH Chemical Physics of Solid Surfaces and Heterogeneous Catalysis", "CPR.. Chemical Physics Reports", "ChSRv Chemical Society Reviews", "ChEG. Chemie der Erde / Geochemistry", "CEJ.. Chemistry A European Journal", "CPCar Chemistry and Physics of Carbon", "CPLip Chemistry and Physics of Lipids", "ChUDA Chile Universidad Departamento de Astronomia Publicaciones", "ChOE. China Ocean Engineering", "ChRST China Rept Sci Technol JPRS CST", "ChA.. Chinese Astronomy", "ChIEJ Chinese Institute of Engineers Journal", "ChJA. Chinese Journal of Aeronautics", "ChJAA Chinese Journal of Astronomy and Astrophysics", "ChJAS Chinese Journal of Astronomy and Astrophysics Supplement", "ChJCP Chinese Journal of Chemical Physics", "ChJG. Chinese Journal of Geophysics", "ChJIR Chinese Journal of Infrared Research", "ChJL. Chinese Journal of Lasers", "ChJLB Chinese Journal of Lasers B", "CJLTP Chinese Journal of Low Temperature Physics", "ChJME Chinese Journal of Mechanical Engineering", "ChJNP Chinese Journal of Nuclear Physics", "ChJOL Chinese Journal of Oceanology and Limnology", "ChJPh Chinese Journal of Physics", "ChJPR Chinese Journal of Polar Research", "ChJS. Chinese Journal of Semiconductors", "ChJSS Chinese Journal of Space Science", "ChOpL Chinese Optics Letters", "ChPhy Chinese Physics", "ChPhB Chinese Physics B", "ChPhC Chinese Physics C", "ChPhL Chinese Physics Letters", "ChSBu Chinese Science Bulletin", "ChSAJ Chinese Society of Astronautics Journal", "ChSMJ Chinese Society of Mechanical Engineers Journal", "ChSST Chinese Space Science Technology", "CMDRG Chislennye Metody Dinamike Razrezhennykh Gazov", "CHOCS CHOCS", "CITM. Chubu Institute Technology Memoirs", "CIDA. CIDA", "CTE.. Ciencias de la Tierra y del Espacio", "CiInf Circ. Inf.", "CiSSV Circolare Interna della Sezione Stelle Variabili dell'Unione Astrofili Italiani", "CSSP. Circuits Systems and Signal Processing", "CirW. Circuit World", "CAFOE Circulaire de l'Association Francaise d'Observateurs d'Etoiles Variables", "CiBAA Circular of the British Astronomical Association", "CiUO. Circular of the Union Observatory Johannesburg", "CiPoJ Circumpolar Journal", "CQGra Classical and Quantum Gravity", "CQGrS Classical and Quantum Gravity Supplement", "CRMMP Classical Reviews in Mathematics and Mathematical Physics", "CTPhy Classical Theoretical Physics", "CCM.. Clays and Clay Minerals", "ClDy. Climate Dynamics", "CliPa Climate of the Past", "CliPD Climate of the Past Discussions", "ClCh. Climatic Change", "COIR. Clinical Oral Implants Research", "CPPM. Clinical Physics and Physiological Measurement", "CNRAe CNR Aeritalia S", "CODAB CODATA Bulletin", "Coel. Coelum Periodico Bimestrale per la Divulgazione dell'Astronomia", "AeSc. Collection of Papers on Aerospace Science", "ColJ. Colloid Journal", "ColSu Colloids and Surfaces", "CPC.. Combinatorics, Probability and Computing", "CoFl. Combustion and Flame", "CST.. Combustion Science and Technology", "CTM.. Combustion Theory Modelling", "CNSMP Comet News Service, McDonnell Planetarium", "CPMCM Commentationes Physico-Mathematicae et Chemico-Medicae", "ComMP Comments in Modern Physics", "ComAp Comments on Astrophysics", "CoASP Comments on Astrophysics and Space Physics", "CoAMP Comments on Atomic and Molecular Physics", "CoCMP Comments on Condensed Matter Physics", "CoNPP Comments on Nuclear and Particle Physics", "CoPPC Comments on Plasma Physics and Controlled Fusion", "ComSp Commercial Space", "CoKon Commmunications of the Konkoly Observatory Hungary", "CAPJ. Communication Astronomy with the Public Journal", "ComBr Communication Broadcasting", "CoSSC Communication in Statistics - Simulation and Computation", "CoSTM Communication in Statistics - Theory and Methods", "Commu Communications", "CoORB Communications de l'Observatoire Royal de Belgique", "MonAP Communications du Departement d'Astrophysique de la Faculte des Sciences de Mons Mons Astrophysical Papers", "CoDDO Communications from the David Dunlap Observatory", "CoMtW Communications from the Mount Wilson Solar Observatory to the National Academy of Sciences", "CoRad Communications from the Radcliffe Observatory Pretoria South Africa", "CoROE Communications from the Royal Observatory Edinburgh", "CoOxf Communications from the University Observatory Oxford", "CoStA Communications from the University Observatory St Andrews Scotland", "CEST. Communications Gillies Inc Electronic Systems in Transportation", "CoAlg Communications in Algebra", "CANM. Communications in Applied Numerical Methods", "CoAst Communications in Asteroseismology", "CCoPh Communications in Computational Physics", "CMaPh Communications in Mathematical Physics", "CNSNS Communications in Nonlinear Science and Numerical Simulations", "CNME. Communications in Numerical Methods in Engineering", "CoPDE Communications in Partial Differential Equations", "CPAM. Communications in Pure Applied Mathematics", "CoTPh Communications in Theoretical Physics", "CoAnk Communications of the Department of Astronomy of Ankara University", "CoLPL Communications of the Lunar and Planetary Laboratory", "CoLon Communications of the University of London Observatory", "CPhy. Communications on Physics", "CRLJ. Communications Research Laboratory Journal", "CRLRv Communications Research Laboratory Review", "ComSo Communications Society", "Compe COMPEL: The International Journal for Computation and Mathematics in Electrical and Electronic Engineering", "CoVar Complex Variables", "Compo Composites", "CmpEn Composites Engineering", "CmpMa Composites Manufacturing", "ComST Composites Science Technology", "CmpSt Composite Structures", "CoMat Compositio Mathematica", "CRSPH Compte Rendu des Seances de la Societe de Physique et d'Histoire Naturelle de Genere", "CR... Comptes Rendus Academie des Sciences (serie non specifiee)", "CRABS Comptes Rendus de l'Academie Bulgare des Sciences", "CRASE Comptes Rendus de l'Académie des Sciences - Series IIA - Earth and Planetary Science", "CRGeo Comptes Rendus Geoscience", "CRMat Comptes Rendus Mathematique", "CRMec Comptes Rendus Mecanique", "CRPhy Comptes Rendus Physique", "CAMP. Computational and Applied Mathematical Physics", "ComMS Computational Materials Science", "CMMPh Computational Mathematics and Mathematical Physics", "CompM Computational Mechanics", "COA.. Computational Optimization and Applications", "CSMA. Computational Structural Mechanics and Applications", "Compr Computer", "CAD.. Computer-Aided Design", "CGIP. Computer Graphics Image Processing", "CMAME Computer Methods in Applied Mechanics and Engineering", "CoPhC Computer Physics Communications", "CoPhR Computer Physics Reports", "CBR.. Computers and Biomedical Research", "CEE.. Computers and Electrical Engineering", "CF... Computers and Fluids", "CG... Computers and Geosciences", "CMwA. Computers and Mathematics with Applications", "CoStr Computers and Structures", "CSEd. Computer Science Education", "ComPh Computers in Physics", "CVIU. Computer Vision and Image Understanding", "CVGIP Computer Vision Graphics and Image Processing", "Compu Computing", "CSE.. Computing in Science and Engineering", "ComSE Computing Systems in Engineering", "COMTR COMSAT Technical Review", "CoCoi Comunicacoes do Observatonio Astronomico da Universidade de Coimbra", "CoMRA Concepts in Magnetic Resonances A", "CoMRB Concepts in Magnetic Resonances B", "CMPhy Condensed Matter Physics", "CGDAM Conformal Geometry and Dynamics of the American Mathematical Society", "CDT.. Connaissance des Temps", "ConSc Connection Science", "CoFra Consiglio Nazionale delle Ricerche Italia. Laboratorio di Astrofisica Frascati Roma Contributi", "ConCP Contemporary Concepts in Physics", "ConFP Contemporary Fundamental Physics", "ConPh Contemporary Physics", "CSR.. Continental Shelf Research", "CMT.. Continuum Mechanics and Thermodynamics", "CoIAP Contributions de l'Institut d'Astrophysique de Paris Serie A", "CoIAB Contributions de l'Institut d'Astrophysique de Paris Serie B", "CoAsi Contributions dell'Osservatorio Astrofisica dell'Universita di Padova in Asiago", "CoMil Contributions dell'Osservatorio Astrononia di Milano-Merate", "CoArm Contributions from the Armagh Observatory", "CoThe Contributions from the Astronomical Department of the University of Thessaloniki", "CoBos Contributions from the Bosscha Observervatory", "CoCam Contributions from the Cambridge Observatory England", "CoTol Contributions from the Cerro Tololo Inter-American Observatory", "CoTok Contributions from the Department of Astronomy University of Tokyo", "CoDAO Contributions from the Dominion Astrophysical Observatory in Victoria", "CoDun Contributions from the Dunsink Observatory Dublin Ireland", "CoKyo Contributions from the Institute of Astrophysics and Kwasan Observatory Kyoto", "CoKit Contributions from the Kitt Peak National Observatory", "CoKwa Contributions from the Kwasan and Hida Observatories University of Kyoto", "CoIoa Contributions from the Laboratory of Astronomy - University of Ioannina Greece", "CoMcD Contributions from the McDonald Observatory University of Texas Fort Davis", "CMWCI Contributions from the Mount Wilson Observatory / Carnegie Institution of Washington", "CoPri Contributions from the Princeton University Observatory", "CoRut Contributions from the Rutherford Observatory of Columbia University New York", "CoWas Contributions from the Washburn Observatory of the University of Wisconsin", "CoAth Contributions from the Wroclaw Astronomical Observatory", "CoLic Contributions of Lick Observatory", "CLic2 Contributions of Lick Observatory, Series II", "CoPer Contributions of Perkins Observatory", "CoSka Contributions of the Astronomical Observatory Skalnate Pleso", "CoSkL Contributions of the Astronomical Observatory Skalnate Pleso Letters", "CoSkS Contributions of the Astronomical Observatory Skalnate Pleso Supplement", "CoLou Contributions of the Louisiana State University Observatory Baton Rouge Louisiana", "CoNMx Contributions of the Observatory of New Mexico State University Las Cruces New Mexico", "CoBrn Contributions of the Public Observatory and Planetarium in Brno", "CSASG Contributions of the Slovak Academy Sciences Geophysical Institute", "CoWat Contributions of the University of Waterloo Observatory", "CoVVO Contributions of the Van Vleck Observatory", "ConAP Contributions to Atmospheric Physics/Beitraege zur Physik Atmosphaere", "CoGG. Contributions to Geophysics and Geodesy", "CoMP. Contributions to Mineralogy and Petrology", "CoPP. Contributions to Plasma Physics", "CoUCL Contributions Universite Catholique de Louvain", "CoSte Contributions University of Arizona Steward Observatory Tucson Arizona", "CoRHO Contributions University of Florida Rosemary Hill Observatory Gainesville", "CoCom Control and Computers", "CopRe Copenhagen University Observatory Reprints", "CorRe Coral Reefs", "CorD. Cordoba Durchmusterung", "CAGHS Correspondance Astronomique, Geographique, Hydrographique et statistique", "CosEl Cosmic Electrodynamics", "CosRe Cosmic Research", "CosSe Cosmic Search", "CTP.. Course of Theoretical Physics", "CRB.. C.R. Acad. Sci. Ser. B1", "CraRe Cracow Observatory Reprints", "CRSSM Critical Reviews in Solid State &", "Cryo. Cryogenics", "CryRp Crystallography Reports", "CSSE. Cultural Studies of Science Education", "CuCo. Culture and Cosmos", "CAP.. Current Applied Physics", "CCPCE Current Contents Physical Chemical and Earth Sciences", "CEyeR Current Eye Research", "CNan. Current Nanoscience", "COSSM Current Opinion in Solid State and Materials Science", "CSci. Current Science", "CySys Cybernetics and Systems", "CzJPh Czechoslovak Journal of Physics", "CzJPB Czechoslovak Journal of Physics B", "CzJPS Czechoslovak Journal of Physics Supplement", "CzMJ. Czechoslovak Mathematical Journal", "DTr.. Dalton Transactions", "DMKD. Data Mining and Knowledge Discovery", "DatSJ Data Science Journal", "DDORe David Dunlap Observatory Richmond Hill Reprints", "DeaCo Dearborn Observatory Contributions", "DSR.. Deep Sea Research Part II: Topical Studies in Oceanography", "DSRI. Deep Sea Research Part I: Oceanographic Research", "DSNPR Deep Space Network Progress Report", "Defek Defektoskopiia", "DefEl Defense Electronics", "DMJ.. Defense Management Journal", "DeScE Defense Science Electronics", "DSJ.. Defense Science Journal", "DSRMC Defense Systems Review Military Communications", "DSSN. Delta Scuti Star Newsletter", "Sterb Der Sternenbote Monatsschrift fuer Oesterreichs Amateur-astronomen", "DGKBA Deutsche Geodaetische Kommission Bayer. Akad. Wiss.", "DGKBB Deutsche Geodaetische Kommission Bayer. Akad. Wiss. B", "DGKGN Deutsche Geodaetische Kommission Gravity Network West Germany DSGN Data Adjustment", "DeHyZ Deutsche Hydrographische Zeitschrift", "DPhyG Deutsche Physikalische Gesellschaft", "DSEG. Developments in Solid Earth Geophysics", "DFVLR DFVLR", "DRM.. Diamond and Related Materials", "Stern Die Sterne", "Welt. Die Weltall", "DnU.. Differentsial nye Uravneniia", "DSP.. Digital Signal Processing", "Dimen Dimensions", "DiSis Dinamicheskie Sistemy", "DPM.. Dinamika i Prochnost Mashin", "DiRaG Dinamika razrezhennykh gazov", "DIO.. DIO", "DCMP. Directions in Condensed Matter Physics", "DISA. DISA Information", "Disc. Discover", "DImTe Display Imaging Technology", "Displ Displays", "DSE.. Distributed Systems Engineering", "DLGRM DLGR Magnetofluiddyn", "Dlib. D-Lib Magazine", "DLRNa DLR Nachrichten", "DOCi. Documentation des Observateurs Circulaire", "DOIAP Documentation des Observateurs Institut d'Astrophysique de Paris", "DoANT Doklady Akademiia Nauk TadzhSSR", "DokAN Doklady Akad Nauk Minerologia USSR", "DoBan Doklady Bolgarskoi Akademiia Nauk", "DokES Doklady Earth Sciences", "DokPC Doklady Physical Chemistry", "DAOAR Dominion Astrophysical Observatory Annual Report", "DorPo Dornier Post", "DSO.. Double Star Observer", "DSSC. Double Star Section Circulars", "DudOR Dudley Observatory Reports", "PODE. Dun Echt Observatory Publications", "DunOP Dunsink Observatory Publications", "DunRe Dunsink Observatory Reprints", "DurOO Durham Observatory Observations", "IzDus Dushanbe Izdatel Donish", "DyeRe Dyer Observatory Reprints", "DySys Dynamical Systems: An International Journal", "DynCo Dynamics and Control", "DSSys Dynamics and Stability of Systems", "DyAtO Dynamics of Atmospheres and Oceans", "EESC. Earth and Environmental Science Conference Series", "EaEvS Earth and Evolution Sciences", "EExSc Earth and Extraterrestrial Sciences", "EaInt Earth Interactions", "EOAST Earth-Oriented Applications and Space Technology", "EEEV. Earthquake Engineering and Engineering Vibration", "EaSci Earthquake Science", "ESRv. Earth Science Reviews", "ESPL. Earth Surface Processes and Landforms", "ESD.. Earth System Dynamics", "ESDD. Earth System Dynamics Discussion", "ESSD. Earth System Science Data", "ESSDD Earth System Science Data Discussions", "EERST East European Rept Sci. Technol. JPRS ESA", "EERSA East Europe Rept Sci Affairs JPRS", "EBCi. Eclipsing Binaries Circulars", "EcGH. Eclogae geologae Helvetii", "Ecogr Ecography", "EcGou Ecole de Goutelas", "Earth eEarth", "EartD eEarth Discussions", "ETATF Eesti NSV Teaduste Akadeemia Toimetised Fuusika Matemaatika", "IzmP. Ege University Izmir Publications of the Department of Astronomy", "EJSM. e-Journal of Soft Materials", "Elast Elastic", "ECLRv Electrical Communication Laboratories Review", "JElEn Electrical Engineering of Japan", "EMPS. Electric Machines and Power Systems", "Elecm Electromagnetics", "EJSEd Electronic Journal of Science Education", "EJSta Electronic Journal of Statistics", "EJTP. Electronic Journal of Theoretical Physics", "EML.. Electronic Materials Letters", "ElPro Electronic Progress", "JElCo Electronics Communications of Japan", "ElL.. Electronics Letters", "ElP.. Electronics Power", "EOSD. Electro Optical Systems Design", "ElLC. Electrotechnical Laboratory Circulars", "ElLR. Electrotechnical Laboratory Researches", "ElW.. Electrowaerme International", "ElBah Elektrische Bahnen", "Elem. Elektromekhanika", "Elek. Elektronika", "ElTA. Elektronnaia Tekhnika Avtomatike", "ElMod Elektronnoe Modelirovanie", "ETRE. Elektrosviaz Telecommunications Radio Engineering Telecommunications", "EVest Elektrotehniski Vestnik", "OED.. El Observador de Estrellas Dobles", "ElUn. El Universo", "EMCT. EMC Technology", "EBBT. Emerging Biochemical and Biophysical Techniques", "EAA.. Encyclopedia of Astronomy and Astrophysics", "Endvr Endeavour", "Energ Energetika", "EnAt. Energia es Atomtechnika", "EnUK. Energy", "EnC.. Energy Conversion", "ECM.. Energy Conversion Management", "EnS.. Energy Sources", "EnTR. Energy Technology Review", "EnUK. Energy UK", "EngAn Engineering Analysis", "EnSci Engineering and Science", "EngCo Engineering Computations", "EnFM. Engineering Fracture Mechanics", "EnOp. Engineering Optimization", "CEnTp Engineering Thermophysics China", "Entro Entropie", "Entrp Entropy", "EnAPC Environmental Analytical and Physical Chemistry Series", "EES.. Environmental Earth Sciences", "EnEng Environmental Engineering", "EFM.. Environmental Fluid Mechanics", "EnGeo Environmental Geology", "EnMan Environmental Management", "EnP.. Environmental Pollution Series B Chemical and Physical", "ER... Environmental Research", "ERL.. Environmental Research Letters", "EnST. Environmental Science Technology", "EnTox Environmental Toxicology", "ETWQ. Environmental Toxicology and Water Quality", "Env.. Environmentrics", "EOSTr EOS Transactions", "EL... EPL (Europhysics Letters)", "EPRIJ EPRI Journal", "AnErg Ergaenzungshefte zu den Astronomischen Nachrichten", "ErNW. Ergebnisse der exakten Naturwissenschaften", "ETDS. Ergodic Theory and Dynamical Systems", "Ergo. Ergonomics", "ESABu ESA Bulletin", "ESAHR ESA History Study Reports", "EIUEN ESA IUE Newsletter", "ESAJ. ESA Journal", "ESASM ESA Scientific &", "ESAST ESA Scientific Technical Review", "ESATM ESA Training Manual", "EssPh Essays in Physics", "ECSS. Estuarine Coastal and Shelf Science", "EUCAS EUCASS Proceedings Series", "EurSS Eurasian Soil Science", "EJASP EURASIP Journal on Applied Signal Processing", "EBioJ European Biophysics Journal", "EJAM. European Journal of Applied Mathematics", "EJBio European Journal of Biochemistry", "EJC.. European Journal of Combinatorics", "EJEE. European Journal of Engineering Education", "EJMF. European Journal of Mechanics B Fluids", "EJMS. European Journal of Mechanics Solids", "EJPh. European Journal of Physics", "EPJA. European Physical Journal A", "EPJAP European Physical Journal Applied Physics", "EPJAS European Physical Journal A Supplement", "EPJB. European Physical Journal B", "EPJC. European Physical Journal C", "EPJCS European Physical Journal C Supplement", "EPJD. European Physical Journal D", "EPJE. European Physical Journal E", "EPJH. European Physical Journal H", "EPJP. European Physical Journal Plus", "EPJST European Physical Journal Special Topics", "EuRv. European Review", "ESN.. European Science Notes", "ESOAR European Southern Observatory Annual Reports", "ESOB. European Southern Observatory ESO Bulletin", "ESOSP European Southern Observatory Scientific Preprints", "ESOSR European Southern Observatory Scientific Report", "ETTRT European Transactions Telecommunications Related Technologies", "ERST. Europe Report Science Technology", "EL... Europhysics Letters", "ENews Europhysics News", "EXOSA EXOSAT Express", "ExA.. Experimental Astronomy", "EEyeR Experimental Eye Research", "ExHT. Experimental Heat Transfer", "ExM.. Experimental Mechanics", "ExMPS Experimental Methods in the Physical Sciences", "ExT.. Experimental Techniques", "ExTFS Experimental Thermal Fluid Science", "ExFl. Experiments in Fluids", "ExG.. Exploration Geophysics", "Extr. Extraction", "PMtv. Facultad de Humanidades y Ciencias Universidad de la Republica Montevideo", "FaDi. Faraday Discussions", "FaTr. Faraday Transactions", "FFEMS Fatigue and Fracture of Engineering Materials and Structures", "FerNo Fermilab Note", "Fer.. Ferroelectrics", "FerLS Ferroelectrics Letters Section", "FBS.. Few-Body Systems", "FiIO. Fiber and Integrated Optics", "Filom Filomat", "FeMik Finommechanika Mikrotechnika", "FiBr. First Break", "FizEl Fizicheskaia Elektronika", "FiMek Fizicheskaia Mekhanika", "Fiz.. Fizika", "FizA. Fizika A", "FizAS Fizika Aerodispersnykh Sistem", "FizB. Fizika B", "FizGV Fizika Goreniia i Vzryva", "FizKO Fizika i Khimiia Obrabotki Materialov", "FizTV Fizika i Tekhnika Vysokikh Davlenii", "FizMM Fizika Metallov i Metallovedenie", "FizMS Fizika Mnogochastichnykh Sistem", "FizNT Fizika Nizkikh Temperatur", "FizPl Fizika Plazmy", "FizSz Fizika Sz.", "FizTT Fizika Tverdogo Tela", "FizZS Fizika Zhidkogo Sostoianiia", "FizAt Fiziki Atmosfery", "FizKM Fiziko Khimicheskaia Mekhanika Materialov", "FizCh Fizyki i Chemii Seria Fizyka", "FliIn Flight International", "FNL.. Fluctuation and Noise Letters", "FRFI. Flug Revue Flugwelt International", "FlDy. Fluid Dynamics", "FlDyR Fluid Dynamics Research", "FlDyT Fluid Dynamics Transactions", "Fluid Fluidika", "FMAG. Fluid Mechanics of Astrophysics and Geophysics", "FlMSR Fluid Mechanics Soviet Research", "FluQ. Fluids Quarterly", "FBP.. Food and Bioproducts Processing. Part C, Transactions of the Institution of Chemical Engineers", "ForPh Fortschritte der Physik", "FoGeo Fotointerpretacja w Geografii", "FoPh. Foundations of Physics", "FoPhL Foundations of Physics Letters", "Fract Fractals", "Freq. Frequenz", "FrES. Frontiers of Earth Science", "FrMS. Frontiers of Materials Science", "FrME. Frontiers of Mechanical Engineering", "FrPhy Frontiers of Physics", "FrPhC Frontiers of Physics in China", "IzFru Frunze Izdatel Ilim", "FSTJ. Fujitsu Scientific Technical Journal", "FST.. Fullerene Science and Technology", "FAAp. Functional Analysis and Its Applications", "FML.. Functional Materials Letters", "FACM. Functiones et Approximatio Commentarii Mathematici", "FInfo Fundamenta Informaticae", "FANP. Fundamental and Applied Nuclear Physics Series", "OOPS. Fundamental nye Osnovy Opticheskoi Pamiati i Sredy", "FCPh. Fundamentals of Cosmic Physics", "FTP.. Fundamental Theories of Physics", "Futur Future Spring", "GCNew Galactic Center Newsletter", "galxp GALEX Proposal", "GalEl Galilean Electrodynamics", "GEB.. Games and Economic Behavior", "GGMit Gauss-Gesellschaft e.V. Göttingen, Mitteilungen", "GVPOO Gauthier-Villars Paris Observatory Observations", "GazA. Gazette Astronomique", "GazAM Gazette Astronomique Memoires", "GazT. Gazodinamika i Teploobmen", "GCNR. GCN Report", "GECJR GEC Journal Research", "Gelio Geliotekhnika", "Gemin GEMINI Newsletter Royal Greenwich Observatory", "GHA.. General History of Astronomy", "GPB.. General Physiology and Biophysics", "GReGr General Relativity and Gravitation", "Gen.. Genetica", "GeoIn Geocarto International", "GeocJ Geochemical Journal", "Geoch Geochemistry", "GGG.. Geochemistry, Geophysics, Geosystems", "GeocI Geochemistry International", "GeCoA Geochimica et Cosmochimica Acta", "GeCAS Geochimica et Cosmochimica Acta Supplement", "GeCar Geodesy and Cartography", "GeAer Geodeziia i Aerofotos", "GeKar Geodeziia i Kartografiia", "GKA.. Geodeziia i Kartografiia Aehrofotosemka, L'vov", "GeKaA Geodeziia Kartografiia i Aerofotos", "GeoK. Geodezja i Kartografia", "GeoAc Geodinamica Acta", "GeofI Geofisica Internacional", "GeoPA Geofisica Pura e Applicata", "GeoSb Geofizicheskii Sbornik", "GeoZh Geofizicheskii Zhurnal", "GeoAA Geografiska Annaler, Series A: Physical Geography", "GeoAB Geografiska Annaler, Series B: Human Geography", "GeIss Geoinformation Issues", "Geokh Geokhimiia", "GCarp Geologica Carpathica", "GeolJ Geological Journal", "GeoM. Geological Magazine", "GeoSJ Geological Society Journal", "GSAMB Geological Society of America Bulletin", "GSAMm Geological Society of America Memoir", "GSASP Geological Society of America Special Papers", "GSLSP Geological Society of London Special Publications", "Geolo Geologija", "GeoRu Geologische Rundschau", "Geolg Geologos", "Geo.. Geology", "GeoOD Geology of Ore Deposits", "GeoIs Geomagnitnye Issledovaniia", "GML.. Geo-Marine Letters", "GeoD. Geometriae Dedicata", "GeomJ Geomicrobiology Journal", "Geomo Geomorphology", "Geoph Geophysica", "GeGe. Geophysica et Geodaetica", "GApFD Geophysical and Astrophysical Fluid Dynamics", "GDS.. Geophysical Developments Series", "GeoJ. Geophysical Journal", "GeoJI Geophysical Journal International", "GeopP Geophysical Prospecting", "GeopR Geophysical References", "GeoRL Geophysical Research Letters", "GeoSu Geophysical Surveys", "GeoNr Geophysica Norvegica", "Geop. Geophysics", "GAM.. Geophysics and Astrophysics Monographs", "GeoOM Georgetown Observatory Monogram", "GeoRe Georgetown Observatory Reprints", "GMD.. Geoscientific Model Development", "GMDD. Geoscientific Model Development Discussions", "GEOCE GEOS Circular on Eclipsing Binaries", "GEOCR GEOS Circular on RR Lyr Type Variables", "GEOCA GEOS Circular on Small-Amplitude Variables", "GEOSN GEOS Note Circulaire", "Geote Geotectonics", "TrGRC Geothermal Resources Council Transactions", "Geoth Geothermics", "Geot. Geotimes", "Gerb. Gerbertvs, International Academic Publication on History of Medieval Science", "GBzG. Gerlands Beitraege zur Geophysik", "GUL.. Geschichte und Lichtwechsel der Veraenderlichen Sterne (Potsdam)", "GATAN Gesellschaft Aerosolforschung Tagung ueber Aerosole Naturwissenschaft Medizin und Technik Messtechnik und technische Anwendung", "GMMWJ Gesellschaft angewandte Mathematik und Mechanik Jahrestagung Goettingen West Germany Zeitschrift Flugwissenschaften", "GaMuM Gesellschaft Angewandte Mathematik und Mechanik Workshop Paris France", "GMuD. Gesellschaft Mathematik und Datenverarbeitung mbH Multigrid Methods Special Topics Applications", "GVMK. Gibridnye Vychislitel nye Mashiny i Kompleksy", "Gidro Gidromekhanika", "GiGi. Gidroprivod i Gidropnevmoavtomatika", "GiSan Gigiena i Sanitariia", "GTPZ. Gigiena Truda i Professional nye Zabolevaniia", "GAst. Giornale di Astronomia", "GlMaJ Glasgow Mathematical Journal", "GPC.. Global and Planetary Change", "GBioC Global Biogeochemical Cycles", "GLORe Goethe Link Observatory Reprints", "GPSW. GPS World", "GMIP. Graphical Models and Image Processing", "GrCo. Gravitation and Cosmology", "GrCoS Gravitation and Cosmology Supplement", "GrTOn Gravitatsiia i Teoriia Otnositel nosti", "GCN.. GRB Coordinates Network", "GGMM. Greenhouse Gas Measurement &", "GriO. Griffith Observer", "GrAeH Grumman Aerospace Horizons", "Grund Grundwasser", "GICi. Gruppo Italiano RV Tauri Circolare", "HalRe Hale Observatories Reprints", "HadJ. Hadronic Journal", "HadJS Hadronic Journal Supplement", "BSD.. Hamburger Sternwarte Bergedorf", "HamS. Hamburger Sternwarte Sonderdrucke", "LS... Hamburger Sternw. Warner &", "HAAG. Handbook of Astronomy Astrophysics and Geophysics", "HBP.. Handbook of Biological Physics", "HGE.. Handbook of Geophysical Exploration", "HPlPh Handbook of Plasma Physics", "HPCRE Handbook on the Physics and Chemistry of Rare Earths", "HDA.. Handbuch der Astrophysik", "HDP.. Handbuch der Physik", "HarZi Harthaer Beobachtungs-Zirkular", "HarAC Harvard College Observatory Announcement Card", "HarAR Harvard College Observatory Annual Report", "BHarO Harvard College Observatory Bulletin", "HarCi Harvard College Observatory Circular", "HarPa Harvard College Observatory Papers", "HarRe Harvard College Observatory Reprints", "HarMi Harvard Observatory Mimeograms", "HarMo Harvard Observatory Monographs", "HeaPh Health Physics", "HMT.. Heat and Mass Transfer", "HTrEn Heat Transfer Engineering", "HTJR. Heat Transfer Japanese Research", "HTSR. Heat Transfer Soviet Research", "Heavn Heavens", "HWM.. Helgoländer Wissenschaftliche Meeresuntersuchungen", "HMR.. Helgoland Marine Research", "AcHCh Helvetica Chimica Acta", "AcHPh Helvetica Physica Acta", "AcHPS Helvetica Physica Acta Supplementum", "HelOB Helwan Institute of Astronomy and Geophysics Bulletins", "HemD. Hemel en Dampkring", "HECh. High Energy Chemistry", "HEDP. High Energy Density Physics", "HEPNP High Energy Physics and Nuclear Physics", "HiA.. Highlights of Astronomy", "HPP.. High Performance Polymers", "HPR.. High Pressure Research", "HiTec High Technology", "HTHP. High Temperatures and High Pressures", "HTemS High Temperature Science", "HARSB Histoire de l'Academie Royale des Sciences et des Belles-Lettres de Berlin", "HSPBS Historical Studies in the Physical and Biological Sciences", "HGeo. History of Geophysics", "HGSS. History of Geo- and Space Sciences", "HisSc History of Science", "HUFEB Hokkaido University Faculty Engineering Bulletin", "HUFEM Hokkaido University Faculty Engineering Memoirs", "Holz. Holzforschung", "HBB.. Horizons in Biochemistry and Biophysics", "HWP.. Horizons in World Physics", "HCHy. Hovering Craft and Hydrofoil", "HGT.. Human Gene Therapy", "HvaOB Hvar Observatory Bulletin", "HvOBS Hvar Observatory Bulletin Supplement", "HyBio Hydrobiologia", "HydJ. Hydrogeology Journal", "HyPr. Hydrological Processes", "HESS. Hydrology and Earth System Sciences", "HESSD Hydrology and Earth System Sciences Discussions", "HyInt Hyperfine Interactions", "IadEn Iadernaia Energiia", "IAGBu IAGA Bulletin", "IaIaF Iakutsk Iakutskii Filial SO AN SSSR", "BSEEA Iasi Institutul Politehnic Buletinul Sectia Electrotehnica Electronica Automatizari", "BSMMT Iasi Institutul Politehnic Buletinul Sectia Matematica Mecanica Teoretica Fizica", "BSMT. Iasi Institutul Politehnic Buletinul Sectia Mecanica Tehnica", "IAUCB IAU Commission on Close Binary Stars", "IAUDS IAU Commission on Double Stars", "IAUIn IAU Commission on Instruments", "IAUGA IAU General Assembly", "IAUIB IAU Information Bulletin", "IAUSS IAU Special Session", "WFINw IAU Working Group on Wide-Field Imaging, Newsletter", "IBMJ. IBM Journal of Research and Development", "ICAOB ICAO Bulletin", "Icar. Icarus", "IAESM IEEE Aerospace Electronic Systems Magazine", "IAWPL IEEE Antennas and Wireless Propagation Letters", "IAPM. IEEE Antennas Propagation Magazine", "IASSP IEEE ASSP Magazine", "ICiSM IEEE Circuits Systems Magazine", "IComM IEEE Communications Magazine", "ICSEn IEEE Computational Science and Engineering", "ICGA. IEEE Computer Graphics Applications", "ICSM. IEEE Computer Systems Magazine", "IDTC. IEEE Design Test Computers", "IEDL. IEEE Electron Device Letters", "IExp. IEEE Expert", "IGRSL IEEE Geoscience and Remote Sensing Letters", "IISys IEEE Intelligent Systems", "IJOE. IEEE Journal of Oceanic Engineering", "IJQE. IEEE Journal of Quantum Electronics", "IJRA. IEEE Journal of Robotics Automation", "ISTSP IEEE Journal of Selected Topics in Signal Processing", "IJSSC IEEE Journal of Solid-State Circuits", "IJSAC IEEE Journal on Selected Areas in Communications", "ILCSM IEEE LCS Magazine", "ILTS. IEEE LTS", "IMGWL IEEE Microwave and Guided Wave Letters", "IMMag IEEE Microwave Magazine", "IEEEN IEEE Network", "IPTL. IEEE Photonics Technology Letters", "IEEEP IEEE Proceedings", "ISPL. IEEE Signal Processing Letters", "ISPM. IEEE Signal Processing Magazine", "IEEES IEEE Spectrum", "ISysJ IEEE Systems Journal", "ITASS IEEE Transactions on Acoustics Speech and Signal Processing", "ITAES IEEE Transactions on Aerospace Electronic Systems", "ITAP. IEEE Transactions on Antennas and Propagation", "ITAS. IEEE Transactions on Applied Superconductivity", "ITAC. IEEE Transactions on Automatic Control", "ITBE. IEEE Transactions on Biomedical Engineering", "ITB.. IEEE Transactions on Broadcasting", "ITCS. IEEE Transactions on Circuits Systems", "ITCom IEEE Transactions on Communications", "ITCHM IEEE Transactions on Components Hybrids and Manufacturing Technology", "ITCAD IEEE Transactions on Computer Aided Design", "ITCmp IEEE Transactions on Computers", "ITDEI IEEE Transactions on Dielectrics and Electrical Insulation", "ITEdu IEEE Transactions on Education", "ITEI. IEEE Transactions on Electrical Insulation", "ITElC IEEE Transactions on Electromagnetic Compatibility", "ITED. IEEE Transactions on Electron Devices", "ITEnC IEEE Transactions on Energy Conversion", "ITEM. IEEE Transactions on Engineering Management", "ITGRS IEEE Transactions on Geoscience and Remote Sensing", "ITGE. IEEE Transactions on Geoscience Electronics", "ITIP. IEEE Transactions on Image Processing", "ITIE. IEEE Transactions on Industrial Electronics", "ITIEC IEEE Transactions on Industrial Electronics and Control Instrumentation", "ITIA. IEEE Transactions on Industry Applications", "ITIT. IEEE Transactions on Information Theory", "ITIM. IEEE Transactions on Instrumentation Measurement", "ITM.. IEEE Transactions on Magnetics", "ITMI. IEEE Transactions on Medical Imaging", "ITMTT IEEE Transactions on Microwave Theory Techniques", "ITME. IEEE Transactions on Military Electronics", "ITNan IEEE Transactions on Nanotechnology", "ITNN. IEEE Transactions on Neural Networks", "ITNS. IEEE Transactions on Nuclear Science", "ITPHP IEEE Transactions on Parts Hybrids and Packaging", "ITPAM IEEE Transactions on Pattern Analysis and Machine Intelligence", "ITPS. IEEE Transactions on Plasma Science", "ITPAS IEEE Transactions on Power Apparatus Systems", "ITPD. IEEE Transactions on Power Delivery", "ITPE. IEEE Transactions on Power Electronics", "ITR.. IEEE Transactions on Reliability", "ITRA. IEEE Transactions on Robotics Automation", "ITSTQ IEEE Transactions on Selected Topics in Quantum Electronics", "ITSM. IEEE Transactions on Semiconduct M", "ITSP. IEEE Transactions on Signal Processing", "ITSE. IEEE Transactions on Software Engineering", "ITSU. IEEE Transactions on Sonics Ultrasonics", "ITSMC IEEE Transactions on Systems Man and Cybernetics", "ITUFF IEEE Transactions on Ultrasonics Ferroelectrics and Frequency Control", "ITVT. IEEE Transactions on Vehicular Technology", "JMOA. IEE Journal of Microwaves Optics and Acoustics", "JSSED IEE Journal of Solid-State Electron Devices", "ITEIS IEEJ Transactions on Electronics, Information and Systems", "IJTFM IEEJ Transactions on Fundamentals and Materials", "IJTIA IEEJ Transactions on Industry Applications", "IJTPE IEEJ Transactions on Power and Energy", "IJTSM IEEJ Transactions on Sensors and Micromachines", "IPEPA IEE Proceedings B: Electric Power Applications", "IPGTD IEE Proceedings C: Generation Transmission Distribution", "IPCSV IEE Proceedings: Communications Speech and Vision", "IPCTA IEE Proceedings D: Control Theory Applications", "IPCDT IEE Proceedings E: Computers and Digital Techniques", "IPCRS IEE Proceedings F: Communications Radar and Signal Processing", "IPRSP IEE Proceedings F: Radar and Signal Processing", "IPMAP IEE Proceedings H: Microwaves Antennas and Propagation", "IPMOA IEE Proceedings H: Microwaves Optics and Antennas", "IPOpt IEE Proceedings J: Optoelectronics", "IPPSM IEE Proceedings: Physical Science Measurement and Instrumentation Management and Education Reviews", "IPSSE IEE Proceedings: Solid-State Electron Devices", "IEERv IEE Reviews", "IEIEE IEICE Electronics Express", "ESSFR IEICE ESS Fundamentals Review", "IEITC IEICE Transactions on Communications", "IEITE IEICE Transactions on Electronics", "IEITF IEICE Transactions on Fundamentals of Electronics Communications and Computer Sciences", "IEITI IEICE Transactions on Information and Systems", "ITN.. IERS Technical Note", "IESJ. IES Journal", "IHWN. IHW Newsletter", "JApMa IMA Journal of Applied Mathematics", "IJNA. IMA Journal of Numerical Analysis", "IVMA. IMA Volumes in Mathematics and its Applications", "IMEPA IME Proceedings. Part A: Journal of Power and Energy", "IMEPB IME Proceedings. Part B: Journal of Engineering Manufacture", "IMEPC IME Proceedings. Part C: Journal of Mechanical Engineering Science", "IMEPD IME Proceedings. Part D: Journal of Automobile Engineering", "IMEPE IME Proceedings. Part E: Journal of Process Mechanical Engineering", "IMEPG IME Proceedings. Part G: Journal of Aerospace Engineering", "IMEPH IME Proceedings. Part H: Journal of Engineering in Medicine", "IMEPI IME Proceedings. Part I: Journal of Systems and Control Engineering", "IMEPK IME Proceedings. Part K: Journal of Multibody Dynamics", "ICSE. Impact of Computing in Science and Engineering", "InEPS Indian Academy of Sciences Proceedings: Earth and Planetary Sciences", "InMS. Indian Academy of Sciences Proceedings Mathematical Sciences", "InASP Indian Academy of Sciences Proceedings Section", "InES. Indian Academy of Sciences Proceedings: Section C Engineering Sciences", "IUMJ. Indiana University Mathematics Journal", "IIApN Indian Institute of Astrophysics Newsletter", "InISJ Indian Institute of Science Journal", "InISA Indian Institute of Science Journal of Aeronomical Society of India", "ITJSE Indian Institute of Technology Journal on Section Engineering Technology", "InJAE Indian Journal of Aerospace Engineering Division", "InJBB Indian Journal of Biochemistry and Biophysics", "InJET Indian Journal of Electronics Telecommunication Engineering Division", "InJME Indian Journal of Mechanical Engineering Division", "IJMHG Indian Journal of Meteorology Hydrology and Geophysics", "InJPh Indian Journal of Physics", "InJP. Indian Journal of Physics and Proceedings of the Indian Assocatiation for the Cultivation of Science", "InJPA Indian Journal of Physics Section A", "InJPB Indian Journal of Physics Section B", "IJPAM Indian Journal of Pure and Applied Mathematics", "IJPAP Indian Journal of Pure and Applied Physics", "IJRSP Indian Journal of Radio and Space Physics", "InJHS Indian Journal of the History of Science", "InJTP Indian Journal of Theoretical Physics", "INSAP Indian National Science Academy Proceedings Supplement", "IDAQP Infinite Dimensional Analysis, Quantum Probability and Related Topics", "IBSH. Informational Bulletin of the Southern Hemisphere", "IBUAA Informational Bulletin of the Ukrainian Astronomical Association", "InCo. Information and Computation", "IBVS. Information Bulletin on Variable Stars", "InfCo Information Control", "InfD. Information Display", "IPM.. Information Processing and Management", "IPL.. Information Processing Letters", "ISNL. Information Systems Newsletter", "IRA.. Infrared Astronomy", "InfPh Infrared Physics", "InPhT Infrared Physics and Technology", "Ingeg Ingegneria", "IngAr Ingenieur Archiv", "InCh. Inorganic Chemistry", "IAL1K Institut d'Astronomie de Lausanne", "IMA.. Institute for Mathematics and Its Applications", "InFuJ Institute Fuel Journal", "JIECE Institute of Electronics Communication Engineers of Japan Transactions Section E English", "IPASA Institute of Physics Academia Sinica Annual Report", "ISASS Institute of Space and Astronautical Science Report", "ITABO Institute of Theoretical Astrophysics, Blindern-Oslo", "OslR. Institute of Theoretical Astrophysics Blindern Oslo Reports", "IEAEE Institution Engineers Australia Electrical Engineering Transactions", "IEEP. Institution of Electrical Engineers Proceedings", "IEREJ Institution of Electronic Radio Engineers Journal", "IETE. Institution of Electronics Telecommunication Engineers", "IAFET Instituto de Astronomia y Fisica del Espacio Buenos Aires", "MerRe Instituto Venezolano de Astronomia Merida Venezuela", "IRMBP Institut Royal Meteorologique de Belgique Publications Serie", "ITAB. Institut Teoreticheskoi Astronomii Byulleten", "TrITA Institut Teoreticheskoi Astronomii Trudy", "IET.. Instruments and Experimental Techniques", "InLoP Instytut Lotnictwa Prace", "InMPP Instytut Maszyn Przeplywowych Prace", "IntaC Inta Conie", "ITSF. Integral Transforms and Special Functions", "ICAE. Integrated Computer-Aided Engineering", "InFer Integrated Ferroelectrics", "Inter Interavia", "IntSM Interavia Space Markets", "ISRv. Interdisciplinary Science Reviews", "IFB.. Interfaces and Free Boundaries", "IPAUC INTERKOSMOS Prague Astronomicky Ustav Ceskoslovenske Akademie Ved", "IANT. International Advances in Nondestructive Testing", "IntAg International Agrophysics", "IAPPP International Amateur-Professional Photoelectric Photometry Communications", "IAM.. International Applied Mechanics", "IAUC. International Astronomical Union Circular", "ICQ.. International Comet Quarterly", "ICHMT International Communications in Heat and Mass Transfer", "IrPH. International Conference Infrared Physics Zurich Switzerland", "ICML. International Conference on Machine Learning", "IER.. Internationale Elektronische Rundschau", "InGeo International Geophysics Series", "IJCEM International Journal for Computational Methods in Engineering Science and Mechanics", "IJNAM International Journal for Numerical and Analytical Methods in Geomechanics", "IJNME International Journal for Numerical Methods in Engineering", "IJNMF International Journal for Numerical Methods in Fluids", "IJRPC International Journal for Radiation Physics and Chemistry", "IJACS International Journal of Adaptive Control and Signal Processing", "IJAdA International Journal of Adhesion Adhesives", "IJASS International Journal of Aeronautical and Space Sciences", "IJAEM International Journal of Analytical and Experimental Modal Analysis", "IJAEO International Journal of Applied Earth Observation and Geoinformation", "IJApE International Journal of Electromagnetics and Mechanics", "IJAIS International Journal of Applied Information Systems", "IJAM. International Journal of Applied Mechanics", "IJAsB International Journal of Astrobiology", "IJAA. International Journal of Astronomy and Astrophysics", "IJAP. International Journal of Aviation Psychology", "IJBC. International Journal of Bifurcation and Chaos", "IJBB. International Journal of Bioclimatology Biometeorology", "IJBm. International Journal of Biometeorology", "IJCli International Journal of Climatology", "IJCES International Journal of Computational Engineering Science", "IJCFD International Journal of Computational Fluid Dynamics", "IJCMS International Journal of Computational Materials Science and Engineering", "IJCA. International Journal of Computer Applications", "IJCAT International Journal of Computer Applications and Technology", "IJCMB International Journal of Computer Mathematics Section B", "IJCV. International Journal of Computer Vision", "IJC.. International Journal of Control", "IJDM. International Journal of Damage Mechanics", "IJDE. International Journal of Digital Earth", "IJDF. International Journal of Dynamics of Fluids", "IJEaS International Journal of Earth Sciences", "IJE.. International Journal of Electronics", "IJER. International Journal of Energy Research", "IJEFM International Journal of Engineering and Fluid Mechanics Spring", "IJES. International Journal of Engineering Science", "IJFa. International Journal of Fatigue", "IJFD. International Journal of Fluid Dynamics", "IJFr. International Journal of Fracture", "IJFE. International Journal of Fusion Energy", "IJGS. International Journal of General Systems", "IJGA. International Journal of Geomagnetism and Aeronomy", "IJGMM International Journal of Geometric Methods in Modern Physics", "IJGeo International Journal of Geophysics", "IJGNP International Journal of Green Nanotechnology Physics and Chemistry", "IJHFF International Journal of Heat and Fluid Flow", "IJHMT International Journal of Heat and Mass Transfer", "IJHSC International Journal of High Speed Computing", "IJHSE International Journal of High Speed Electronics and Systems", "IJHM. International Journal of Hybrid Microelectronics Fall", "IJHE. International Journal of Hydrogen Energy", "IJHy. International Journal of Hyperthermia", "IJIDF International Journal of Image and Data Fusion", "IJIG. International Journal of Image and Graphics", "IJIST International Journal of Imaging Systems Technology", "IJIE. International Journal of Impact Engineering", "IJIMW International Journal of Infrared and Millimeter Waves", "IJICS International Journal of Intelligent Control and Systems", "IJMSE International Journal of Mars Science and Exploration", "IJMSp International Journal of Mass Spectrometry", "IJMSI International Journal of Mass Spectrometry and Ion Processes", "IJMES International Journal of Mathematical Education in Science and Technology", "IJM.. International Journal of Mathematics", "IJMS. International Journal of Mechanical Sciences", "IJMW. International Journal of Mine Water", "IJMM. International Journal of Mini Microcomputers", "IJMoS International Journal of Modelling and Simulation", "IJMPA International Journal of Modern Physics A", "IJMPB International Journal of Modern Physics B", "IJMPC International Journal of Modern Physics C", "IJMPS International Journal of Modern Physics Conference Series", "IJMPD International Journal of Modern Physics D", "IJMPE International Journal of Modern Physics E", "IJMF. International Journal of Multiphase Flow", "IJN.. International Journal of Nanoscience", "IJNT. International Journal of Nanotechnology", "IJNS. International Journal of Neural Systems", "IJNLM International Journal of Non Linear Mechanics", "IJNOP International Journal of Nonlinear Optical Physics", "IJNMH International Journal of Numerical Methods for Heat &", "IJOpt International Journal of Optics", "IJOMS International Journal of Oral and Maxillofacial Surgery", "IJPRS International Journal of Photogrammetry and Remote Sensing", "IJPES International Journal of Physical and Engineering Sciences", "IJP.. International Journal of Plasticity", "IJPM. International Journal of Polymeric Materials", "IJPG. International Journal of Population Geography", "IJPR. International Journal of Production Research", "IJQC. International Journal of Quantum Chemistry", "IJRAI International Journal of Radiation Applications and Instrumentation D Nuclear Tracks and Radiation Measurements", "IJRB. International Journal of Radiation Biology", "IJRQS International Journal of Reliability, Quality and Safety Engineering", "IJRS. International Journal of Remote Sensing", "IJRR. International Journal of Robotics Research", "IJSC. International Journal of Satellite Communications", "IJSME International Journal of Science and Mathematics Education", "IJSEd International Journal of Science Education", "IJSE. International Journal of Solar Energy", "IJSS. International Journal of Solids and Structures", "IJSSD International Journal of Structural Stability and Dynamics", "IJScA International Journal of Supercomputer Applications", "IJSyS International Journal of Systems Science", "IJTP. International Journal of Theoretical Physics", "IJT.. International Journal of Thermophysics", "IJTJE International Journal of Turbo Jet Engines", "IMRv. International Materials Reviews", "IMeRv International Metals Reviews", "IREdu International Review of Education", "IRH.. International Review of Hydrobiology", "IRNP. International Review of Nuclear Physics", "IRPC. International Reviews in Physical Chemistry", "ISBRv International Space Business Review", "IUGG. International Union of Geodesy and Geophysics General Assembly", "IPNPR Interplanetary Network Progress Report", "IMPA. Interscience Monographs in Physics and Astronomy", "ITPA. Interscience Tracts on Physics and Astronomy", "InMat Inventiones Mathematicae", "InvPr Inverse Problems", "IGeo. Investigations in Geophysics", "InFiZ Inzhenerno Fizicheskii Zhurnal", "IonIs Ionosfernye Issledovaniia", "Iono. Ionosphere", "Ippa. Ipparchos", "IrJST Iranian Journal of Science Technology", "IRETE IRE Transactions on Education", "IrAJ. Irish Astronomical Journal", "IrAJS Irish Astronomical Journal Supplement", "ISAP. ISA Proceedings", "ISAT. ISA Transactions", "IHERv Ishikawajima Harima Engineering Review", "Isis. Isis. Journal of the History of Science Society", "IPBS. Isotopes in the Physical and Biomedical Sciences", "IsJT. Israel Journal of Technology", "IsSRT Israel Space Research and Technology Information Bulletin", "ISRAA ISRN Astronomy and Astrophysics", "ISCJS ISRO Satellite Centre Journal of Spacecraft Technology", "ISSIR ISSI Scientific Reports Series", "ISSIR ISSI Scientific Reports Series", "IssZK Issledovanie Zemli Fiz Kosmosa", "IGAFS Issledovaniia Geomagnetizmu Aeronomii i Fizike Solntsa", "IsMTD Issledovaniia Mekhanike i Teploobmenu Dvukhfaznykh Sred", "IssUP Issledovaniia Uprugosti i Plastichnosti", "ISKZ. Issledovaniya Solntsa i Krasnykh Zvezd", "IST.. Issues in Science and Technology", "IsJAP Istanbul University Faculty of Science Journal of Astronomy Physics", "IsRvC Istanbul University Faculty Science Review Serie C", "IINA. Istituto Italiano di Navigazione Atti", "IAIss Istoriko-Astronomicheskie Issledovaniya", "ITCJ. ITC Journal", "INTSA Itogi Nauki i Tekhniki Seriia Astronomiia", "INTSF Itogi Nauki i Tekhniki Seriia Fizika Plazmy", "INTSI Itogi Nauki i Tekhniki Seriia Issledovanie Kosmicheskogo Prostranstva", "INTMK Itogi Nauki i Tekhniki Seriia Meteorologiia i Klimatologiia", "INTSO Itogi Nauki i Tekhniki Seriia Okeanologiia", "INTSR Itogi Nauki i Tekhniki Seriia Radiotekhnika", "INTSS Itogi Nauki i Tekhniki Seriia Sovremennye Problemy Matematiki", "INTSV Itogi Nauki i Tekhniki Seriia Vozdushnyi Transport", "ITUTJ ITU Telecommunication Journal", "IUEEN IUE ESA Newsletter", "IUENN IUE NASA Newsletter", "IzTad Izvestiia Akademiia Nauk TadzhSSR", "IzSF. Izvestiia Akademii Nauk Seriya Fizicheskaya", "IzGla Izvestiia Glavnoi rossiiskoi astronomicheskoi observatorii", "IzVGA Izvestiia vuzov. Geodeziia Aehrofotosemka", "IzVF. Izvestiia Vysshaia Uchebn. Zaved., Fizika", "IzVUZ Izvestiia Vysshaia Uchebn. Zaved., Radiofizika", "IzAsh Izvestiya Akademii Nauk Turkmenskoj SSR Ashkhabad", "IzArm Izvestiya Akademiya Nauk Armyanskoi", "IzAlm Izvestiya Astrofizicheskogo Instituta Alma-Ata", "IzEhn Izvestiya Astronomicheskoj Engel'gardt obskoj Observatorii Kazan", "IzAOP Izvestiya Atmospheric and Oceanic Physics", "IzKie Izvestiya Glavnoj Astronomicheskoj Observatorii Kiev", "IzPul Izvestiya Glavnoj Astronomicheskoj Observatorii v Pulkove", "IzMat Izvestiya: Mathematics", "IzAne Izvestiya na Fizicheskiya Institut s Aneb", "IzKry Izvestiya Ordena Trudovogo Krasnogo Znameni Krymskoj Astrofizicheskoj Observatorii", "IzPSE Izvestiya Physics of the Solid Earth", "IzAvT Izvestiya VUZ Aviatsionnaya Tekhnika", "IzRad Izvestiya VUZ Radiofizika", "IzNic Izviestiia Nikolaevskoi glavnoi astronomicheskoi observatorii", "JWUDF Jahns Wöchentliche Unterhaltungen Für Dilettanten und Freunde der Astronomie, Georgraphie und Witterungskunde", "JRE.. Jahrbuch der Radioaktivität und Elektronik", "JASAC Japan Astronomical Study Association Circulars", "JaJAP Japanese Journal of Applied Physics", "JJAPL Japanese Journal of Applied Physics Letters B", "JJAPR Japanese Journal of Applied Physics Regular Papers Short Notes and Review Papers", "JJAPS Japanese Journal of Applied Physics Supplement", "JaJAG Japanese Journal of Astronomy and Geophysics", "JMMPS Japanese Magazine of Mineralogical and Petrological Sciences", "JaIMJ Japan Institute of Metals Journal", "JSASS Japan Society of Aeronautical Space Sciences", "JSAST Japan Society of Aeronautical Space Sciences Transactions", "JSAPJ Japan Society of Air Pollution Journal", "JSCMJ Japan Society of Composite Materials Journal", "JSLEJ Japan Society of Lubrication Engineers Journal", "JSMSJ Japan Society of Materials Science Journal", "JSPS. Japan Society of Promotion Science", "JSMAJ JASMA Japan Society of Microgravity Application Journal", "JMeOp Jemna Mechanika Optika", "JenRu Jenaer Rundschau", "JenRv Jena Review", "JBAn. Jodrell Bank Annals", "JBASP Jodrell Bank Ann Ser Pt", "JBRe. Jodrell Bank Reprints", "JHATD Johns Hopkins APL Technical Digest", "JOM.. JOM - Journal of the Minerals, Metals and Materials Society", "RSNSW Journal and Proceedings of the Royal Society of New South Wales", "JAco. Journal d'Acoustique", "JCP.. Journal de Chimie Physique", "JCPPC Journal de Chimie Physique et de Physico-Chimie Biologique", "JMec. Journal de Mecanique", "JMecA Journal de Mecanique Appliquee", "JMecT Journal de Mecanique Theorique et Appliquee", "JMTAS Journal de Mecanique Theorique et Appliquee Supplement", "JPhys Journal de Physique", "JPhyC Journal de Physique Colloque", "JPR.. Journal de Physique et le Radium", "JPhy1 Journal de Physique I", "JPhy2 Journal de Physique II", "JPhy3 Journal de Physique III", "JPhy4 Journal de Physique IV", "JPhyL Journal de Physique Lettres", "JPhTA Journal de Physique Theorique et Apliquee", "JReAt Journal de Recherches Atmospheriques", "JAF.. Journal des Astronomes Francais", "JO... Journal des Observateurs", "JOp.. Journal d'Optique", "JTP.. Journal for Technology of Plasticity", "JHA.. Journal for the History of Astronomy", "JHAS. Journal for the History of Astronomy Supplement", "JRAM. Journal fur die reine und angewandte Mathematik", "JNanU Journal Nanjing Univ", "JNIRE Journal NIRE", "JAE.. Journal of Acoustic Emission", "JAMDS Journal of Advanced Mechanical Design, Systems, and Manufacturing", "JAMES Journal of Advances in Modeling Earth Systems", "JAerS Journal of Aerosol Science", "JAerE Journal of Aerospace Engineering", "JAerP Journal of Aerospace Power", "JAfES Journal of African Earth Sciences", "JAER. Journal of Agricultural Engineering Research", "JAir. Journal of Aircraft", "JAlg. Journal of Algebra", "JAlgC Journal of Algebraic Combinatorics", "JAlgo Journal of Algorithms", "JAllC Journal of Alloys and Compounds", "JACS. Journal of American Ceramic Society", "JAAS. Journal of Analytical Atomic Spectrometry", "JApCr Journal of Applied Crystallography", "JApEl Journal of Applied Electrochemistry", "JAG.. Journal of Applied Geophysics", "JApMM Journal of Applied Mathematics and Mechanics", "JAM.. Journal of Applied Mechanics", "JAMTP Journal of Applied Mechanics and Technical Physics", "JApMw Journal of Applied Metalworking", "JApMe Journal of Applied Meteorology", "JApMC Journal of Applied Meteorology and Climatology", "JAPE. Journal of Applied Photographic Engineering", "JAP.. Journal of Applied Physics", "JAPh. Journal of Applied Physiology", "JARS. Journal of Applied Remote Sensing", "JASE. Journal of Applied Science and Engineering Section on Electrical Power and Information Systems", "JApSc Journal of Applied Sciences", "JApSp Journal of Applied Spectroscopy", "JApS. Journal of Applied Statistics", "JApT. Journal of Approximation Theory", "JAESc Journal of Asian Earth Sciences", "JAD.. Journal of Astronomical Data", "JAHH. Journal of Astronomical History and Heritage", "JAI.. Journal of Astronomical Instrumentation", "JAsPh Journal of Astronomy and Physics (Turkey)", "JASS. Journal of Astronomy and Space Sciences", "JApA. Journal of Astrophysics and Astronomy", "JApAS Journal of Astrophysics and Astronomy Supplement", "JAtOT Journal of Atmospheric and Oceanic Technology", "JASTP Journal of Atmospheric and Solar-Terrestrial Physics", "JATP. Journal of Atmospheric and Terrestrial Physics", "JAtC. Journal of Atmospheric Chemistry", "JAtS. Journal of Atmospheric Sciences", "JAMOP Journal of Atomic, Molecular and Optical Physics", "JAES. Journal of Audio Engineering Society", "JAuGG Journal of Australian Geology and Geophysics", "JAuR. Journal of Automated Reasoning", "JBall Journal of Ballistics", "JBBM. Journal of Biochemical and Biophysical Methods", "JBB.. Journal of Bioenergetics and Biomembranes", "JBC.. Journal of Biological Chemistry", "JBP.. Journal of Biological Physics", "JBiom Journal of Biomechanics", "JBO.. Journal of Biomedical Optics", "JBNMR Journal of Biomolecular NMR", "JBBC. Journal of Biophysical and Biochemical Cytology", "JBiop Journal of Biophysics", "JBiBi Journal of Biophysique et Biomecanique", "JBMN. Journal of Biophysique et Medecine Nucleaire", "JBMR. Journal of Bone and Mineral Research", "JBR.. Journal of Breath Research", "JCat. Journal of Catalysis", "JChEd Journal of Chemical Education", "JChPh Journal of Chemical Physics", "JChS. Journal of Chromatographic Science", "JCh.. Journal of Chromatography", "JCSC. Journal of Circuits, Systems and Computers", "JCli. Journal of Climate", "JCAM. Journal of Climate and Applied Meteorology", "JClim Journal of Climatology", "JCS.. Journal of Clinical Microbiology", "JClP. Journal of Clinical Pharmacology", "JCS.. Journal of Cluster Science", "JCScT Journal of College Science Teaching", "JCIS. Journal of Colloid and Interface Science", "JCoSc Journal of Colloid Science", "JCTA. Journal of Combinatorial Theory, Series A", "JCTB. Journal of Combinatorial Theory, Series B", "JCom. Journal of Communications", "CoNet Journal of Communications and Networks", "JComp Journal of Complexity", "JCoMa Journal of Composite Materials", "JCTR. Journal of Composites and Technology Research", "JCA.. Journal of Computational Acoustics", "JTCN. Journal of Computational and Theoretical Nanoscience", "JCoAM Journal of Computational and Applied Mathematics", "JCoB. Journal of Computational Biology", "JCoCh Journal of Computational Chemistry", "JCM.. Journal of Computational Mathematics", "JCoN. Journal of Computational Neuroscience", "JCoPh Journal of Computational Physics", "JCST. Journal of Computational Science and Technology", "JCMD. Journal of Computer-Aided Materials Design", "JCAMD Journal of Computer-Aided Molecular Design", "JCoSS Journal of Computer and System Sciences", "JCHyd Journal of Contaminant Hydrology", "JConP Journal of Contemporary Physics (Armenian Academy of Sciences)", "JCos. Journal of Cosmology", "JCAP. Journal of Cosmology and Astro-Particle Physics", "JCrGr Journal of Crystal Growth", "JDR.. Journal of Dairy Research", "JDE.. Journal of Differential Equations", "JDGeo Journal of Differential Geometry", "JoDI. Journal of Digital Information", "JDST. Journal of Dispersion Science and Technology", "JDisT Journal of Display Technology", "JDSO. Journal of Double Star Observations", "JDCS. Journal of Dynamical and Control Systems", "JDDE. Journal of Dynamics and Differential Equations", "JESS. Journal of Earth System Science", "JElas Journal of Elasticity", "JEEEA Journal of Electrical and Electronics Engineering Australia", "JEE.. Journal of Electrical Engineering", "JElec Journal of Electroceramics", "JEAA. Journal of Electromagnetic Analysis and Application", "JEWA. Journal of Electromagnetic Waves and Applications", "JECS. Journal of Electronic Circuits and Systems", "JEI.. Journal of Electronic Imaging", "JEMat Journal of Electronic Materials", "JEPub Journal of Electronic Publishing", "JECTC Journal of Electronics Cooling and Thermal Control", "JElM. Journal of Electronics Manufacturing", "JEMT. Journal of Electron Microscopy Technique", "JESRP Journal of Electron Spectroscopy and Related Phenomena", "JESEd Journal of Elementary Science Education", "JEner Journal of Energy", "JEAS. Journal of Engineering and Applied Sciences", "JEnMa Journal of Engineering and Mathematics", "JEngM Journal of Engineering and Mechanics", "JETh. Journal of Engineering and Thermophysics", "JEER. Journal of Engineering Education Research", "JEP.. Journal of Engineering Physics", "JEPT. Journal of Engineering Physics and Thermophysics", "JEngS Journal of Engineering Sciences", "JEEM. Journal of Environmental and Economics Management", "JECE. Journal of Environmental Conservation Engineering", "JEnvS Journal of Environmental Sciences", "JExB. Journal of Experimental Botany", "JENan Journal of Experimental Nanoscience", "JFF.. Journal of Fire Flammability", "JFC.. Journal of Fluid Control", "JFM.. Journal of Fluid Mechanics", "JFS.. Journal of Fluids and Structures", "JFST. Journal of Fluid Science and Technology", "JFlu. Journal of Fluorescence", "JFAA. Journal of Fourier Analysis and Applications", "JFuA. Journal of Functional Analysis", "JGeod Journal of Geodesy", "JGeo. Journal of Geodynamics", "JGS.. Journal of Geographical Systems", "JGIS. Journal of Geographic Information System", "JG... Journal of Geology", "JGG.. Journal of Geomagnetism and Geoelectricity", "JGGS. Journal of Geomagnetism and Geoelectricity Supplement", "JGP.. Journal of Geometry and Physics", "JGR.. Journal of Geophysical Research", "JGRD. Journal of Geophysical Research (Atmospheres)", "JGRG. Journal of Geophysical Research (Biogeosciences)", "JGRF. Journal of Geophysical Research (Earth Surface)", "JGRC. Journal of Geophysical Research (Oceans)", "JGRE. Journal of Geophysical Research (Planets)", "JGRB. Journal of Geophysical Research (Solid Earth)", "JGRA. Journal of Geophysical Research (Space Physics)", "JGRS. Journal of Geophysical Research Supplement", "JGE.. Journal of Geophysics and Engineering", "JGZG. Journal of Geophysics Zeitschrift Geophysik", "JGeEd Journal of Geoscience Education", "JGlac Journal of Glaciology", "JGO.. Journal of Global Optimization", "JGrPh Journal of Gravitational Physics", "JGHyd Journal of Groundwater Hydrology", "JGuC. Journal of Guidance Control", "JGCD. Journal of Guidance Control Dynamics", "JHeu. Journal of Heuristics", "JHENP Journal of High Energy and Nuclear Physics", "JHEP. Journal of High Energy Physics", "JHEPC Journal of High Energy Physics Conference Proceedings", "JHSN. Journal of High Speed Networks", "JHTS. Journal of High Temperature Society", "JHyd. Journal of Hydrology", "JHyMe Journal of Hydrometeorology", "JHyn. Journal of Hydronautics", "JIST. Journal of Imaging Science and Technology", "JIPM. Journal of Information Processing and Management", "JInfo Journal of Informetrics", "JIMW. Journal of Infrared and Millimeter Waves", "JInst Journal of Instrumentation", "JIntS Journal of Integer Sequences", "JIEq. Journal of Integral Equations", "JIRS. Journal of Intelligent and Robotic Systems", "JIMSS Journal of Intelligent Material Systems and Structures", "JIEx. Journal of Ion Exchange", "JJAEE Journal of Japan Association for Earthquake Engineering", "JJAHS Journal of Japanese Association of Hydrological Sciences", "JJSEE Journal of Japanese Society for Engineering Education", "JSCSE Journal of Japan Society of Civil Engineers, Ser. A1 (Structural Engineering &", "JSCAM Journal of Japan Society of Civil Engineers, Ser. A2 (Applied Mechanics (AM))", "JSCHE Journal of Japan Society of Civil Engineers, Ser. B1 (Hydraulic Engineering)", "JSCGE Journal of Japan Society of Civil Engineers, Ser. C (Geosphere Engineering)", "JSCAI Journal of Japan Society of Civil Engineers, Ser. D1 (Architecture of Infrastructure and Environment)", "JSCHS Journal of Japan Society of Civil Engineers, Ser. D2 (Historical Studies in Civil Engineering)", "JSCIP Journal of Japan Society of Civil Engineers, Ser. D3 (Infrastructure Planning and Management)", "JSCPE Journal of Japan Society of Civil Engineers, Ser. E1 (Pavement Engineering)", "JSCMC Journal of Japan Society of Civil Engineers, Ser. E2 (Materials and Concrete Structures)", "JSCTE Journal of Japan Society of Civil Engineers, Ser. F1 (Tunnel Engineering)", "JSCUS Journal of Japan Society of Civil Engineers, Ser. F2 (Underground Space Research)", "JSCCE Journal of Japan Society of Civil Engineers, Ser. F3 (Civil Engineering Informatics)", "JSCCM Journal of Japan Society of Civil Engineers, Ser. F4 (Construction and Management)", "JSCPP Journal of Japan Society of Civil Engineers, Ser. F5 (Professional Practices in Civil Engineering)", "JSCSP Journal of Japan Society of Civil Engineers, Ser. F6 (Safety Problem)", "JSCER Journal of Japan Society of Civil Engineers, Ser. G (Environmental Research)", "JKTR. Journal of Knot Theory and its Ramifications", "JKAS. Journal of Korean Astronomical Society", "JKASS Journal of Korean Astronomical Society Supplement", "JKPS. Journal of Korean Physical Society", "JLCMe Journal of Laboratory and Clinical Medicine", "JLasA Journal of Laser Applications", "JLCM. Journal of Less Common Metals", "JLVEn Journal of Light &", "JLwT. Journal of Lightwave Technology", "JLTP. Journal of Low Temperature Physics", "JLum. Journal of Luminescence", "JMSB. Journal of Macromolecular Science, Part B: Physics", "JMSC. Journal of Macromolecular Science, Part C: Reviews in Macromolecular Chemistry and Physics", "JMagR Journal of Magnetic Resonance", "JMMM. Journal of Magnetism and Magnetic Materials", "JMR.. Journal of Marine Research", "JMSA. Journal of Marine Science and Application", "JMS.. Journal of Marine Systems", "JMarA Journal of Maritime Archaeology", "JMES. Journal of Materials and Energy Systems", "JMCh. Journal of Materials Chemistry", "JMEP. Journal of Materials Engineering and Performance", "JMPMS Journal of Materials Processing and Manufacturing Science", "JMatR Journal of Materials Research", "JMatS Journal of Materials Science", "JMSME Journal of Materials Science and Materials Electronics", "JMSL. Journal of Materials Science Letters", "JMSMM Journal of Materials Science: Materials in Medicine", "JMSP. Journal of Materials Synthesis and Processing", "JMAA. Journal of Mathematical Analysis and Applications", "JMCS. Journal of Mathematical and Computational Science", "JMPS. Journal of Mathematical and Physical Sciences", "JMaCh Journal of Mathematical Chemistry", "JMFM. Journal of Mathematical Fluid Mechanics", "JMIV. Journal of Mathematical Imaging and Vision", "JMP.. Journal of Mathematical Physics", "JMPsy Journal of Mathematical Psychology", "JMaSc Journal of Mathematical Sciences", "JMSo. Journal of Mathematical Sociology", "JMaMe Journal of Mathematics and Mechanics", "JMaPh Journal of Mathematics and Physics", "JMecE Journal of Mechanical and Engineering Science", "JMBM. Journal of Mechanical Behavior and Materials", "JMSTL Journal of Mechanical Systems for Transportation and Logistics", "JMPSo Journal of Mechanics Physics of Solids", "JMNB. Journal of Medecine Nucleaire et Biophysique", "JMet. Journal of Metals", "JMemS Journal of Microelectromechanical Systems", "JMiMi Journal of Micromechanics and Microengineering", "JMic. Journal of Microscopy", "JMPeS Journal of Mineralogical and Petrological Sciences", "JMOp. Journal of Modern Optics", "JMPh. Journal of Modern Physics", "JMBio Journal of Molecular Biology", "JMoEl Journal of Molecular Electronics", "JMolE Journal of Molecular Evolution", "JMoSp Journal of Molecular Spectroscopy", "JMoSt Journal of Molecular Structure", "JMA.. Journal of Multivariate Analysis", "JNUNS Journal of Nanjing University (Natural Sciences)", "JNR.. Journal of Nanoparticle Research", "JNano Journal of Nanophotonics", "JNav. Journal of Navigation", "JNIS. Journal of Near Infrared Spectroscopy", "JNEng Journal of Neural Engineering", "JNeur Journal of Neurochemistry", "JNO.. Journal of Neuro-Oncology", "JNCS. Journal of Non Crystalline Solids", "JNE.. Journal of Nondestructive Evaluation", "JNET. Journal of Non Equilibrium Thermodynamics", "JNMP. Journal of Nonlinear Mathematical Physics", "JNLM. Journal of Non Linear Mechanics", "JNOPM Journal of Nonlinear Optical Physics and Materials", "JNS.. Journal of NonLinear Science", "JNuE. Journal of Nuclear Energy", "JNuM. Journal of Nuclear Materials", "JNT.. Journal of Number Theory", "JOUC. Journal of Ocean University of China", "JOC.. Journal of Optical Communications", "JON.. Journal of Optical Networking", "JOptT Journal of Optical Technology", "JOpt. Journal of Optics", "JOptA Journal of Optics A: Pure and Applied Optics", "JOptB Journal of Optics B: Quantum and Semiclassical Optics", "JOTA. Journal of Optimization Theory Applications", "JOMS. Journal of Oral and Maxillofacial Surgery", "JOR.. Journal of Oral Rehabilitation", "JPal. Journal of Paleontology", "JPDC. Journal of Parallel and Distributed Computing", "JPet. Journal of Petrology", "JPhPh Journal of Pharmacy and Pharmacology", "JPCRD Journal of Physical and Chemical Reference Data", "JPCC. Journal of Physical and Colloid Chemistry", "JPhCh Journal of Physical Chemistry", "JPCA. Journal of Physical Chemistry A", "JPCB. Journal of Physical Chemistry B", "JPO.. Journal of Physical Oceanography", "JPhSt Journal of Physical Studies", "JPhA. Journal of Physics A Mathematical General", "JPCS. Journal of Physics and Chemistry of Solids", "JPhB. Journal of Physics B Atomic Molecular Physics", "JPCM. Journal of Physics Condensed Matter", "JPhCS Journal of Physics Conference Series", "JPhC. Journal of Physics C Solid State Physics", "JPhD. Journal of Physics D Applied Physics", "JPhE. Journal of Physics E Scientific Instruments", "JPhF. Journal of Physics F Metal Physics", "JPhG. Journal of Physics G Nuclear Physics", "JPhGS Journal of Physics G Nuclear Physics Supplement", "JPE.. Journal of Physics of the Earth", "JPTEO Journal of Physics Teacher Education Online", "JPhsg Journal of Physiology", "JPFR. Journal of Plasma and Fusion Research", "JPlPh Journal of Plasma Physics", "JPoSc Journal of Polymer Science", "JPoSA Journal of Polymer Science A Polymer Chemistry", "JPoSB Journal of Polymer Science B Polymer Physics", "JPoSL Journal of Polymer Science: Polymer Letters Edition", "JPMat Journal of Porous Materials", "JPES. Journal of Power and Energy Systems", "JPS.. Journal of Power Sources", "JPAS. Journal of Practical Applications in Space", "JPP.. Journal of Propulsion and Power", "JPT.. Journal of Propulsion Technology", "JPrCh Journal of Protein Chemistry", "JPApS Journal of Pure Applied Sciences", "JQT.. Journal of Quality Technology", "JQSRT Journal of Quantitative Spectroscopy and Radiative Transfer", "JQS.. Journal of Quaternary Science", "JRNC. Journal of Radioanalytical and Nuclear Chemistry", "JRAC. Journal of Radioanalytical Chemistry", "JRP.. Journal of Radiological Protection", "JRSp. Journal of Raman Spectroscopy", "JRPC. Journal of Reinforced Plastics and Composites", "JRes. Journal of Research", "JRPhy Journal of Research in Physics", "JRScT Journal of Research in Science Teaching", "JRIST Journal of Research Institute of Science and Technology, College of Science and Technology, Nihon University", "JRNBS Journal of Research of the National Bureau of Standards", "JRNBA Journal of Research of the National Bureau of Standards A Physica and Chemsitry", "JRNBB Journal of Research of the National Bureau of Standards B Mathematical Sciences", "JRTEd Journal of Research on Technology in Education", "JResB Journal of Research Section B Mathematical Sciences B", "JRheo Journal of Rheology", "JRoS. Journal of Robotic Systems", "JRLR. Journal of Russian Laser Research", "JSEdT Journal of Science Education and Technology", "JSTEd Journal of Science Teacher Education", "JSCom Journal of Scientific Computing", "JScI. Journal of Scientific Instruments", "JSIPI Journal of Scientific Instruments and of Physics in Industry", "JSR.. Journal of Sea Research", "JSedR Journal of Sedimentary Research", "JSeis Journal of Seismology", "JSemi Journal of Semiconductors", "JSGeo Journal of Series Geophysics", "JShR. Journal of Ship Research", "JSGST Journal of Sol-Gel Science and Technology", "JSMME Journal of Solid Mechanics and Materials Engineering", "JSSCh Journal of Solid State Chemistry France", "JSCh. Journal of Solution Chemistry", "JSV.. Journal of Sound Vibration", "JSAES Journal of South American Earth Sciences", "JSLR. Journal of Soviet Laser Research", "JSAR. Journal of Space Astronomy Research", "JSpRo Journal of Spacecraft and Rockets", "JSpT. Journal of Spacecraft Technology", "JSpEn Journal of Space Engineering", "JSWSC Journal of Space Weather and Space Climate", "JSCS. Journal of Statistical Computation and Simulation", "JSMTE Journal of Statistical Mechanics: Theory and Experiment", "JSP.. Journal of Statistical Physics", "JStA. Journal of Strain Analysis and Engineering Design", "JSG.. Journal of Structural Geology", "JSM.. Journal of Structural Mechanics", "JSup. Journal of Superconductivity", "JSymC Journal of Symbolic Computation", "JSDD. Journal of System Design and Dynamics", "JTePh Journal of Technical Physics", "JTech Journal of Technology", "JTeEv Journal of Testing Evaluation", "JASJa Journal of the Acoustical Society of Japan", "JAVSO Journal of the American Association of Variable Star Observers (JAAVSO)", "JAChS Journal of the American Chemical Society", "JAMS. Journal of the American Mathematical Society", "JASIS Journal of the American Society for Information Science and Technology", "JASCE Journal of the American Society of Civil Engineers", "JAWRA Journal of the American Water Resources Association", "JALPO Journal of the Association of Lunar and Planetary Observers, the Strolling Astronomer", "JAnSc Journal of the Astronautical Sciences", "JASEg Journal of the Astronomical Society of Egypt", "JASSA Journal of the Astronomical Society of Southern Africa", "JASV. Journal of the Astronomical Society of Victoria Melbourne", "JASWA Journal of the Astronomical Society of Western Australia", "JBAA. Journal of the British Astronomical Association", "JBAS. Journal of the British Astronomical Society", "JBIS. Journal of the British Interplanetary Society", "JCSS. Journal of the Chinese Silicate Society", "JElS. Journal of the Electrochemical Society", "FrInJ Journal of The Franklin Institute", "JGSJ. Journal of the Geodetic Society of Japan", "JIISB Journal of the Indian Institute of Science Section B Physical and Chemical Series", "JIEEJ Journal of The Institute of Electrical Engineers of Japan", "JIMIA Journal of the Institute of Mathematics and Its Applications", "JIPNT Journal of the Institute of Positioning, Navigation and Timing of Japan", "JIETE Journal of the Institution of Electronics and Telecommunication Engineers", "JJSMS Journal of the Japan Society for Marine Surveys and Technology", "JLMS. Journal of the London Mathematical Society", "JORS. Journal of the Operational Research Society", "JOSA. Journal of the Optical Society of America (1917-1983)", "JOSAA Journal of the Optical Society of America A", "JOSAB Journal of the Optical Society of America B Optical Physics", "JTAM. Journal of Theoretical and Applied Mechanics", "JTBio Journal of Theoretical Biology", "JPSJ. Journal of the Physical Society of Japan", "JPSJS Journal of the Physical Society of Japan Supplement", "JTAC. Journal of Thermal Analysis and Calorimetry", "JThSc Journal of Thermal Science", "JJTST Journal of Thermal Science and Technology", "JTST. Journal of Thermal Spray Technology", "JThSt Journal of Thermal Stresses", "JTh.. Journal of Thermodynamics", "JTHT. Journal of Thermophysics and Heat Transfer", "JThCM Journal of Thermoplastic Composite Materials", "JRASA Journal of the Royal Aeronautical Society of London", "JRASC Journal of the Royal Astronomical Society of Canada", "JRASN Journal of the Royal Astronomical Society of New Zealand", "JRCSE Journal of the Royal College of Surgeons of Edinburgh", "JRSSD Journal of the Royal Statistical Society: Series D (The Statistician)", "JSRP. Journal of the Society for Radiological Protection", "JSPST Journal of The Society of Photographic Science and Technology of Japan", "JSARA Journal of the Southeastern Association for Research in Astronomy", "JSD.. Journal of the Structural Division, American Society of Civil Engineers", "JVSJ Journal of the Vacuum Society of Japan", "JWasA Journal of the Washington Academy of Sciences", "JTF.. Journal of Time and Frequency", "JTurb Journal of Turbulence", "JVST. Journal of Vacuum Science Technology", "JVSTA Journal of Vacuum Science Technology A: Vacuum Surfaces and Films", "JVSTB Journal of Vacuum Science Technology B: Microelectronics and Nanometer Structures", "JVC.. Journal of Vibration and Control", "JVE.. Journal of Vibration Engineering", "JVCIR Journal of Visual Communication and Image Representation", "JVGR. Journal of Volcanology and Geothermal Research", "JWMSE Journal of Women and Minorities in Science and Engineering", "JXST. Journal of X-Ray Science and Technology", "RpScT JPRS Report Science Technology USSR Space", "JSMB. JSME Bulletin", "JSMEJ JSME International Journal", "JSMEA JSME International Journal Series A", "JSMEB JSME International Journal Series B", "JSMEC JSME International Journal Series C", "JSMET JSME Transactions", "KKR.. Kagaku Kogaku Ronbunshu", "MmKMO Kakioka Magnetic Observatory Memoirs", "KEIJ. Kansei Engineering International Journal", "GroR. Kapteyn Astronomical Laboratory Groningen Reports", "KIzKU Kazan Izdatel Kazanskogo Universiteta", "MeeRe Kenneth Mees Observatory Reprints", "KernR Kernforschungsanlage Rept Res Results Solid State Nucl Phys", "KexT. Kexue Tongbao", "Khago Khagol", "KharI Kharkov Izdanie IRE AN USSR", "KTTM. Khimiia i Tekhnologiia Topliv i Masel", "KhPl. Khimiia Plazmy", "KVnT. Kibernetika i Vychislitel naia Tekhnika", "KiInF Kiev Institut Fiziki AN USSR", "KiInM Kiev Institut Matematiki AN USSR", "KIPME Kiev Institut Problem Modelirovaniia Energetike AN USSR", "KIzIM Kiev Izdanie Instituta Matematiki AN USSR", "KiIND Kiev Izdatel Naukova Dumka", "KiIzT Kiev Izdatel Tekhnika", "KIzVS Kiev Izdatel Vishcha Shkola", "KiePr Kievskij Ordena Lenina Gosudarstvennyj Universitet Shevchenko Astronomicheskaya Observatoriya - Preprint", "KPCB. Kinematics and Physics of Celestial Bodies", "KPCBS Kinematics and Physics of Celestial Bodies, Supplement", "KFNT. Kinematika i Fizika Nebesnykh Tel", "KFNTS Kinematika i Fizika Nebesnykh Tel Supplement", "KiCat Kinetics and Catalysis", "KIzS. Kishinev Izdatel Shtiintsa", "KPNON Kitt Peak National Observatory Newsletter", "KVeBB Kleine Veroeffentlichungen der Universitaetssternwarte zu Berlin Babelsberg", "KlBer Kleinheubacher Berichte", "KodOB Kodaikanal Observatory Bulletins", "KodRe Kodaikanal Observatory Reprints", "KomTs Kometnyj Tsirkulyar", "KomMe Komety i Meteory", "KNAB. Koninklijke Nederlandse Akademie van Weteschappen Proceedings Series B Physical Sciences", "KIMMJ Korean Institute of Metals and Materials Journal", "KNT.. Kosmicheskaia Nauka i Tekhnika", "KosIs Kosmicheskie Issledovaniia", "KosIU Kosmicheskie Issledovaniia Ukraine", "KosLu Kosmicheskie Luchi", "KosNT Kosmichna Nauka i Tekhnologiya", "Kozmo Kozmos", "KT... K-Theory", "KSVH. Kungl. Svenska Vetenskapsakademiens Handlingar", "KvanE Kvantovaia Elektronika Moscow", "Kyb.. Kybernetes", "KyoMe Kyoto University Faculty Engineering Memoirs", "KyITB Kyushu Institute Technology Bulletin", "KUFEM Kyushu University Faculty Engineering Memoirs", "KyUAM Kyushu University Research Institute Applied Mechanics Reports", "KyUSR Kyushu University Research Institute Industrial Science Reports", "KyUTR Kyushu University Technology Reports", "LChip Lab on a Chip", "AerAs L'Aeronautique et L'Astronautique", "AerMS L'Aerotecnica Missili e Spazio", "LHBl. La Houille Blanche", "Meteo La Meteorologie", "LDD.. Land Degradation &", "LanB. Landolt Börnstein", "Langm Langmuir", "LaJ.. Lapidary Journal", "Rech. La Recherche", "ReAer La Recherche Aerospatiale", "ReAeB La Recherche Aerospatiale Bimonthly Bulletin ESA", "ReSp. La Recherche Spatiale", "LPB.. Laser and Particle Beams", "LaEO. Laser Elektro Optik", "LaFoc Laser Focus", "LasJ. Laser Journal", "LaPhy Laser Physics", "LaPhL Laser Physics Letters", "LaPhR Laser Physics Review", "Astrf L'Astrofilo Bolletino Trimestral del Gruppo Astrofili Villaggio Sereno Brescia", "LAstr L'Astronomie", "LTerm La Termotecnica", "LatJP Latvian Journal of Physics and Technical Sciences", "LatME Latviiskii Matematicheskii Ezhegodnik", "LawOB Laws Observatory Bulletin, University of Missouri", "LBLRR LBL Research Review", "ASPL. Leaflet of the Astronomical Society of the Pacific", "ASPLS Leaflet of the Astronomical Society of the Pacific (Supplement)", "LePub Learned Publishing", "LERec L'Echo des Recherches", "Ciel. Le Ciel", "LNEA. Lecture Notes and Essays in Astrophysics", "LNSP. Lecture Notes and Supplements in Physics", "LNCS. Lecture Notes in Computer Science", "LNES. Lecture Notes in Earth Sciences, Berlin Springer Verlag", "LNEn. Lecture Notes in Engineering, Berlin Springer Verlag", "LNM.. Lecture Notes in Mathematics, Berlin Springer Verlag", "LNP.. Lecture Notes in Physics, Berlin Springer Verlag", "LNPAM Lecture Notes in Pure and Applied Mathematics", "LeBAN Leningrad Biblioteka Akademii Nauk SSSR", "LeEne Leningrad Energoizdat", "LeGid Leningrad Gidrometeoizdat", "PrAtO Leningrad Gidrometeoizdat Sovremennye Problemy Atmosfernoi Optiki", "LeIzE Leningrad Izdatel Energiia", "LeIzG Leningrad Izdatel Gidrometeoizdat", "LeIzK Leningrad Izdatel Khimiia", "LeIzU Leningrad Izdatel Leningradskogo Universiteta", "LeIzM Leningrad Izdatel Mashinostroenie", "LeIzN Leningrad Izdatel Nauka", "LIzNe Leningrad Izdatel Nedra", "IzLen Leningrad, Izdatel'stvo Nauka", "LeIzS Leningrad Izdatel Sudostroenie", "LeLen Leningrad Lenizdat", "LGUPM Leningradskii Gosudarstvennyi Universitet Problemy Matematicheskoi Fiziki", "VeLen Leningradskii Universitet Vestnik Matematika Mekhanika Astronomiia", "LeRad Le Radium", "Leo.. Leonardo", "LFTR. LEST Foundation, Technical Report", "LHMT. Letters Heat Mass Transfer", "LAES. Letters in Applied and Engineering Sciences", "LMaPh Letters in Mathematical Physics", "LicOB Lick Observatory Bulletin", "LFR.. Lietuvos Fizikos Rinkinys", "LDA.. Lifetime Data Analysis", "LLabJ Lincoln Laboratory Journal", "LiCr. Liquid Crystals", "Litho Lithos", "LitJP Lithuanian Journal of Physics and Technical Sciences", "LRR.. Living Reviews in Relativity", "LRSP. Living Reviews in Solar Physics", "LockH Lockheed Horizons", "LOEle L'Onde Electrique", "LowOB Lowell Observatory Bulletin", "LTP.. Low Temperature Physics", "LPIBu LPI Bulletin", "LPICo LPI Contributions", "LubEn Lubrication Engineering", "LR... Luft und Raumfahrt", "LuRaQ Luft und Raumfahrt Quarter", "LPSC. Lunar and Planetary Science Conference Proceedings", "LCEC. Luxembourg Commission European Communities", "LIVS. Lvov Izdatel Vishcha Shkola", "LvoTs L'vovskij Ordena Lenina Gosudarstvennyj Universitet Tsirkulyar", "MaDes Machine Design", "MLear Machine Learning", "MmCP. Macromolecular Chemistry and Physics", "MaMol Macromolecules", "MadOO Madras Observatory Astronomical Observations", "MadOb Madras Observatory Observations", "MagFE Magnetic Fusion Energy", "MRMed Magnetic Resonance in Medicine", "MRMPB Magnetic Resonance Materials in Physics Biology and Medicine", "MRRev Magnetic Resonance Review", "MHD.. Magnetohydrodynamics", "MagGi Magnitnaia Gidrodinamika", "MagIs Magnitosfernye Issledovaniia", "MTACI Magyar Tudomanyos Akademia Csillagvizsgalo Intezetenek koezlemenyei", "MAWMN Mainz Akademie Wissenschaften Mathematisch Naturwissenschaftliche Klasse", "Lapa. Majalah LAPAN", "MWGBI Mannheim West Germany Bibliographisches Institut AG", "MaTeJ ManTech Journal", "MGeo. Manuscr. Geod.", "ManGe Manuscripta Geodaetica", "MarRv Marconi Review", "MarGe Marine Geodesy", "MarGR Marine Geophysical Research", "MarPG Marine Petroleum Geology", "Mars. Mars", "Mashi Mashinostroenie", "MsT.. Masters Thesis", "MaFiz Matematicheskaia Fizika", "MFiNM Matematicheskaia Fizika i Nelineinaia Mekhanika", "MatIs Matematicheskie Issledovaniia", "MMFMP Matematicheskie Metody i Fiziko Mekhanicheskie Polia", "MISTr Matematicheskii Institut imeni Steklova Trudy", "MMTET Matematicheskoe Modelirovanie i Teoriia Elektricheskikh Tsepei", "MatVe Matematichki Vesnik", "Mater Materialpruefung", "Mate. Materials", "MMP.. Materials and Manufacturing Processes", "MCP.. Materials Chemistry and Physics", "MaHT. Materials at High Temperatures", "MatEv Materials Evaluation", "MatL. Materials Letters", "MaRBu Materials Research Bulletin", "MRSSP Materials Research Society Symposia Proceedings", "MSEng Materials Science and Engineering", "MSEnA Materials Science and Engineering A", "MSEnB Materials Science and Engineering B", "MSEnC Materials Science and Engineering C", "MSEnR Materials Science and Engineering R Reports", "MSTec Materials Science and Technology", "MSF.. Materials Science Forum", "MatSP Materials Science Poland", "MatST Materials Science Technology", "MatTr Materials Transactions JIM", "MatTe Materiaux et Techniques", "MComM Mathematical and Computer Modelling", "MEI.. Mathematical Engineering Industry", "MaFi. Mathematical Finance", "MatG. Mathematical Geology", "MMAS. Mathematical Methods in the Applied Sciences", "MatM. Mathematical Modelling", "MMNA. Mathematical Modelling Numerical Analysis", "M3AS. Mathematical Models and Methods in Applied Sciences", "MPAG. Mathematical Physics, Analysis and Geometry", "MPAM. Mathematical Physics and Applied Mathematics", "MaPEJ Mathematical Physics Electronic Journal", "MaPhS Mathematical Physics Studies", "MaPr. Mathematical Proceedings", "MPCPS Mathematical Proceedings of the Cambridge Philosophical Society", "MatPr Mathematical Programming", "MatRv Mathematical Reviews", "MMS.. Mathematics and Mechanics of Solids", "MEdRJ Mathematics Education Research Journal", "MaCom Mathematics of Computation", "Mat.. Mathematika", "MatAn Mathematische Annalen", "MatNa Mathematische Nachrichten", "MatZe Mathematische Zeitschrift", "MitAe Max Planck Institut Aeronomie Mitteilungen", "MPARp Max Planck Institut fur Astrophysik Report", "Meas. Measurements", "MeScT Measurement Science and Technology", "MeScR Measurement Science Review", "Mecc. Meccanica", "MecEn Mechanical Engineering", "MSSP. Mechanical Systems and Signal Processing", "MPDS. Mechanics and Physics of Discrete Systems", "MCMS. Mechanics of Composite Materials", "MSM.. Mechanics of Structures and Machines", "MTDM. Mechanics of Time-Dependent Materials", "MeReC Mechanics Research Communications", "MeTeS Mechanika Teoretyczna i Stosowana", "MeMaT Mechanism and Machine Theory", "MeUpp Meddelanden fran Astronomiska Observatorium Uppsala", "MeLu1 Meddelanden fran Lunds Astronomiska Observatorium Serie I", "MeLu2 Meddelanden fran Lunds Astronomiska Observatorium Serie II", "MeAar Meddelser fra Ole Romer Observatoriet Aarhus", "MeGen Mededelingen Universiteit te Gent Sterrenkundig Instituut", "MeLeu Mededelingen van het Astronomisch Instituut van de Katholieke Universiteit Leuven", "MedPh Medical Physics", "MekGS Mekhanika Giroskopicheskikh Sistem", "MekKM Mekhanika Kompozitnykh Materialov", "MekP. Mekhanika Polimerov", "MekTT Mekhanika Tverdogo Tela", "MelAR Melbourne Observatory Annual Report", "MelOO Melbourne Observatory Observations", "MmEbr Memoires de l'Observatoire de l'Ebre", "MmARB Memoires of the Academie Royale de Belgique", "MmMtS Memoires of the Mount Stromlo Observervatory", "MSRSL Memoires of the Societe Royale des Sciences de Liege", "MeSRM Memoires Scientifiques de la Revue de Metallurgie", "MmKyo Memoirs Faculty of Sciences University of Kyoto", "MmASI Memoirs of the Astronomical Society of India", "MmBAA Memoirs of the British Astronomical Association", "MmRAS Memoirs of the Royal Astronomical Society", "MmSAI Memorie della Societa Astronomica Italiana", "MSAIS Memorie della Societa Astronomica Italiana Supplementi", "MmSSI Memorie della Societa Degli Spettroscopisti Italiani", "MmSS. Memorie della Societa Degli Spettroscopisti Italiani, serie 2", "MmSGI Memorie della Societa Geologica Italiana", "MmNap Memorie del R. Osservatorio di Capodimonte in Napoli", "MeCom Mendeleev Communications", "Mercu Mercury", "MeAut Meres es Automatika", "MeRAu Mesures Regulation Automatisme", "Metal Metallofizika", "MTObM Metallovedenie i Termicheskaia Obrabotka Metallov", "MMTA. Metallurgical and Materials Transactions A", "MMTB. Metallurgical and Materials Transactions B", "MTA.. Metallurgical Transactions A", "MTB.. Metallurgical Transactions B", "MTPMM Metallurgical Transactions Physical Metallurgy Materials Science", "MetaM Metamaterials", "MTRMA Meteor Forschungsergebnisse Reihe B Meteorologie und Aeronomie", "Metit Meteorites", "Met.. Meteorite - The International Quarterly of Meteorites and Meteorite Science", "Metic Meteoritics", "Metik Meteoritika", "MetRR Meteornoe Rasprostranenie Radiovoln", "MetIs Meteornye Issledovaniia", "MeApp Meteorological Applications", "MetMa Meteorological Magazine", "MetMo Meteorological Monographs", "MSCTN Meteorological Satellite Center Technical Note", "MeSJJ Meteorological Society of Japan Journal", "MetZp Meteorologicke Zpravy", "MeGid Meteorologiia i Gidrologiia", "MetRu Meteorologische Rundschau", "MetZe Meteorologische Zeitschrift", "MAP.. Meteorology and Atmospheric Physics", "MetAP Meteorology Atmospheric Physics", "MetHy Meteorology Hydrology JPRS", "MeRR. Meteor. rasprostr. radiovoln, Kazan", "MVMP. Methoden und Verfahren der Mathematischen Physik", "MCME. Methods: A Companion to Methods in Enzymology", "MApAn Methods and Applications of Analysis", "MComP Methods in Computational Physics", "MGG.. Methods in Geochemistry and Geophysics", "MSB.. Methods in Subnuclear Physics", "MExP. Methods of Experimental Physics", "MetVy Metody Vychislenii", "Metro Metrologia", "MicEc Microbial Ecology", "MPFD. Microdevices: Physics and Fabrication Technologies", "MiEng Microelectronic Engineering", "MiI.. Microelectronics International", "MiRe. Microelectronics Reliability", "MicgQ Microgravity Quarterly", "MiST. Microgravity Science and Technology", "MTEng Microscale Thermophysical Engineering", "MiMic Microscopy and Microanalysis", "MiOTL Microwave and Optical Technology Letters", "MiJo. Microwave Journal", "MicWa Microwaves", "AcMik Mikrochimica Acta", "Mikro Mikroelektronika", "MikSb Mikroelektronika Sbornik", "MAIMT Milan Associazione Italiana di Meccanica Teorica ed Applicata", "MSMFR Milano Seminario Matematico e Fisico Rendiconti", "MiElC Military Electronics Countermeasures", "MiLa. Mind and Language", "MinDe Mineralium Deposita", "Miner Mineralogia", "MinM. Mineralogical Magazine", "MinPe Mineralogy and Petrology", "MinPh Mineral Physics", "MWE.. Mine Water and The Environment", "MPBu. Minor Planet Bulletin", "MPC.. Minor Planet Circulars", "MPEC. Minor Planet Electronic Circulars", "IzMin Minsk Izdatel BGU", "MiINT Minsk Izdatel Nauka i Tekhnika", "MisSp Missiles Spacecraft", "MAPSE Mission Analysis Program Solar Electric Propulsion MAPSEP", "MHITR Mitsubishi Heavy Industries Technical Review", "MitAG Mitteilungen der Astronomischen Gesellschaft Hamburg", "MiBon Mitteilungen der Astronomischen Institute der Universitaet Bonn", "MiBas Mitteilungen der Astronomisch-Meteorologischen Anstalt der Universitaet Basel Astronomische Reihe", "MiHar Mitteilungen der Bruno-H.-Buergel-Sternwarte Hartha DDR", "MiHam Mitteilungen der Hamburger Sternwarte in Bergedorf", "MiKon Mitteilungen der Konkoly Sternwarte Budapest-Szabadsaghegy", "MiPul Mitteilungen der Nikolai-Hauptsternwarte zu Pulkowo", "MiBud Mitteilungen der Sternwarte der Ungarischen Akademie der Wissenschaften Budapest", "MiInn Mitteilungen der Sternwarte Innsbruck", "MiMun Mitteilungen der Sternwarte Munchen", "MiSon Mitteilungen der Sternwarte zu Sonneberg", "MiGra Mitteilungen der Universitaets-Sternwarte Graz", "MiWie Mitteilungen der Universitaets-Sternwarte Wien", "MiJen Mitteilungen der Universitaets-Sternwarte zu Jena", "MiTue Mitteilungen des Astronomischen Instituts der Universitaet Tuebingen", "MiMue Mitteilungen des Astronomischen Instituts des Universitaet Munster", "MiPot Mitteilungen des Astrophysikalischen Observatoriums Potsdam", "MiGIR Mitteilungen Geod. Institut Rheinischen Friedrich-Wilhelms-Universitaets. Bonn", "MSMSE Modelling Simul. Mater. Sci. Eng.", "MAG.. Modern Approaches in Geophysics", "ModGe Modern Geology", "ModIn Modern Instrumentation", "MIMPE Modern Instrumentation and Measurements in Physics and Engineering", "ModPh Modern Physics", "MPLA. Modern Physics Letters A", "MPLB. Modern Physics Letters B", "MJPS. Moldavian Journal of the Physical Sciences", "MBB.. Molecular Biology and Biophysics", "MBBB. Molecular Biology Biochemistry and Biophysics", "MCLC. Molecular Crystals and Liquid Crystals", "MGM.. Molecular Genetics and Metabolism", "MolPh Molecular Physics", "MoPhR Molecular Physics Reports", "MoSim Molecular Simulation", "MCBEH Monatliche Correspondenz zur Beforderung der Erd- und Himmels-kunde", "WisBB Monatsber. Deutsch. Akad Wissenschaftliche Berlin", "MEEP. Monographs on Environment, Earth and Planets", "MNSSJ Monthly notes of the Astronomical Society of South Africa", "MNSSA Monthly Notes of the Astronomical Society of South Africa", "MNRAS Monthly Notices of the Royal Astronomical Society", "MWRv. Monthly Weather Review", "Moon. Moon", "MorGI Morskie Gidrofizicheskie Issledovaniia", "MAtom Moscow Atomizdat", "MoEBA Moscow Energoatomizdat Biblioteka Automatike", "MEner Moscow Energoizdat", "MoGid Moscow Gidrometeoizdat", "MoIKI Moscow Institut Kosmicheskikh Issledovanii AN SSSR", "MoIPM Moscow Institut Prikladnoi Matematiki AN SSSR", "MoIzA Moscow Izdatel Atomizdat", "MoIzE Moscow Izdatel Energiia", "MIEBA Moscow Izdatel Energiia Biblioteka Avtomatike", "MIEBR Moscow Izdatel Energiia Biblioteka Radioelektronike", "MoIzK Moscow Izdatel Khimiia", "MIzLI Moscow Izdatel Legkaia Industriia", "MIzMa Moscow Izdatel Mashinostroenie", "MIzMe Moscow Izdatel Metallurgiia", "MoIzM Moscow Izdatel Moskovskogo Universiteta", "MIzMU Moscow Izdatel Moskovskogo Universiteta Pt", "MoIzN Moscow Izdatel Nauka", "MINFI Moscow Izdatel Nauka AN SSR Fizicheskii Institut Trudy", "MINCV Moscow Izdatel Nauka AN SSSR Chteniia imeni Vernadskogo", "MoINA Moscow Izdatel Nauka AN SSSR Fizicheskii Institut Trudy", "MINGI Moscow Izdatel Nauka AN SSSR Geologicheskoi Institut Trudy", "MINMI Moscow Izdatel Nauka AN SSSR Matematicheskii Institut Trudy", "MoINI Moscow Izdatel Nauka Issledovaniia Geomagnetizmu Aeronomii i Fizike Solntsa", "MINTF Moscow Izdatel Nauka Teoreticheskaia Fizika", "MINVS Moscow Izdatel Nauka Vychislitel naia Seismologiia", "MIzNe Moscow Izdatel Nedra", "MIzRS Moscow Izdatel Radio Sviaz", "MIzSR Moscow Izdatel Sovetskoe Radio", "MISRI Moscow Izdatel Sovetskoe Radio Ionosfernye Issledovaniia", "MoIzS Moscow Izdatel Sviaz", "MISST Moscow Izdatel Sviaz Statisticheskaia Teoriia sviazi", "MoIzT Moscow Izdatel Transport", "MoIzV Moscow Izdatel VINITI", "MIzVS Moscow Izdatel Vysshaia Shkola", "MoIzZ Moscow Izdatel Znanie", "MIZNZ Moscow Izdatel Znanie Novoe Zhizni Nauke Tekhnike Seriia Fizika", "MosIZ Moscow IZMIRAN", "MoMTN Moscow Mezhdunarodnyi Tsentr Nauchnoi i Tekhnicheskoi Informatsii", "MoMGK Moscow Mezhduvedomstvennyi Geofizicheskii Komitet", "MUPB. Moscow University Physics Bulletin", "MoVIN Moscow VINITI", "MosVo Moscow Voenizdat", "MosVI Moscow Voennoe Izdatel", "MoVNT Moscow Vychislitel nyi Tsentr AN SSSR", "MoVyS Moscow Vysshaia Shkola", "MoLLP Moshchnye lazery i lazernaia plazma", "MoEIT Moskovskii Energeticheskii Institut Trudy", "MGUMN Moskovskii Gosudarstvennyi Universitet Institut Mekhaniki Nauchnye Trudy", "MGIMO Moskovskii Gosudarstvennyi Universitet Institut Mekhaniki Otchet", "MVSFA Moskovskii Universitet Vestnik Seriia Fizika Astronomiia", "MUVSK Moskovskii Universitet Vestnik Seriia Khimiia", "MVSMM Moskovskii Universitet Vestnik Seriia Matematika Mekhanika", "MGTVM Moskovskij Gosudarstvennyj Tekhnicheskij Universitet Vestnik Seriya Mashinostroenie", "MGTVP Moskovskij Gosudarstvennyj Tekhnicheskij Universitet Vestnik Seriya Priborostroenie", "MotZe Motortechnische Zeitschrift", "MtSOM Mount Stromlo Observatory Mimeographs", "MtSRe Mount Stromlo Observatory Reprints", "MtWAR Mount Wilson and Palomar Observatory Annual Report", "MtWRe Mount Wilson and Palomar Observatory Reprints", "MWOAR Mount Wilson Observatory Annual Report", "MPERp MPE Report", "MRSBu MRS Bulletin", "MUSS. Muenchen Universitaets Schriften Serie", "MROVG Munich R Oldenbourg Verlag GmbH", "NISZ. Nabliudeniia Iskusstvennykh Sputnikov Zemli", "NINT. Nablyud. Iskusstvennykh Nebesnykh Tel", "NAZ.. Nachrichtenblatt der Astronomischen Zentralstelle Heidelberg", "NVS.. Nachrichtenblatt der Vereinigung der Sternfreunde", "NacEl Nachrichten Elektronik", "NGFAW Nachrichtentechnische Gesellschaft Fachtagung ueber Antennen", "NacZe Nachrichtentechnische Zeitschrift", "NOGB. Nachr. Olbers-Ges. Bremen", "NUFEM Nagoya University Faculty Engineering Memoirs", "NURIA Nagoya University Research Institute of Atmospherics Proceedings", "NUSEM Nagoya University School Engineering Memoirs", "NaAIJ Nanjing Aeronautical Institute Journal", "NUAAJ Nanjing University Aeronautics and Astronautics Journal", "NanoL Nano Letters", "Nanos Nanoscale", "NRL.. Nanoscale Research Letters", "Nanot Nanotechnology", "NIUNA Napoli Istituto Universitario Navale Annali", "NASCL NASA Circular Letter", "PDSS. NASA Planetary Data System", "NASRP NASA Reference Publication", "NASSP NASA Special Publication", "STIA. NASA STI/Recon Technical Report A", "STIN. NASA STI/Recon Technical Report N", "NASTM NASA Technical Memo", "NBSSP National Bureau of Standards Special Publication", "NBSTN National Bureau of Standards Technical Note", "NaGe. National Geographic", "NISTJ National Institute of Standards and Technology Journal of Research", "PolRe National Institute Polar Research Memoirs", "BAth. National Observatory of Athens Greece Bulletin of the Astronomical Institute", "NRAON National Radio Astronomy Observatory Newsletter", "NRAOR National Radio Astronomy Observatory Reprints", "NRAOW National Radio Astronomy Observatory Workshop", "NUDTJ National University Defense Technology Journal", "NHESS Natural Hazards and Earth System Sciences", "NatH. Natural History", "NatSc Natural Science", "Natur Nature", "NatBi Nature Biotechnology", "NatCh Nature Chemistry", "NatCC Nature Climate Change", "NatCo Nature Communications", "NatGe Nature Geoscience", "NatMa Nature Materials", "NatNa Nature Nanotechnology", "NaPho Nature Photonics", "NPhS. Nature Physical Science", "NatPh Nature Physics", "NatSR Nature Scientific Reports", "NW... Naturwissenschaften", "NInfo Nauchnye Informatsii", "NRRv. Naval Research Reviews", "Navig Navigation", "NavAu Navigation Australia", "NavPa Navigation Paris", "NVVSR Nederlandse Vereiniging voor Weer en Sterrenkunde Werkgroep veranderlijke Sterren Reports", "NCNS. Network: Computation in Neural Systems", "NSpEc Networks and Spatial Economics", "AnBog Neue Annalen der Koeniglichen Sternwarte in Bogenhausen bei Muenchen", "NJMM. Neues Jahrbuch Mineralogie Monatshefte", "NeCom Neural Computation", "NN... Neural Networks", "NeuL. Neuroscience Letters", "NPNDS Neutron Physics and Nuclear Data in Science and Technology", "NewA. New Astronomy", "NewAR New Astronomy Reviews", "NJCh. New Journal of Chemistry", "NJPh. New Journal of Physics", "NewSc New Scientist", "ASNYN News Letter of the Astronomical Society of New York", "ICHIN Newsletters of the Interdivisional Commission on History of the IAGA", "NTN.. New Technology News", "NZJGG New Zealand Journal Geology and Geophysics", "NZJS. New Zealand Journal of Science", "NKG.. Nihon Kessho Gakkaishi", "NOHIC Nizamiah JAPAL Rangapur Observatories Hyderabad India Contributions", "NizRe Nizamiah Observatory Reprints", "NCE.. Noise Control Engineering Journal", "NTE.. Nondestructive Testing and Evaluation", "NDTI. Nondestructive Testing and Evaluation International", "NTCo. Nondestructive Testing Communications", "NPPSB Nonequilibrium Problems in the Physical Sciences and Biology", "NATM. Nonlinear Analysis Theory Methods Applications", "Nonli Nonlinearity", "NlOpt Nonlinear Optics", "NPGeo Nonlinear Processes in Geophysics", "NSAP. Nonlinear, Statistical and Applied Physics", "NTA.. Nonlinear Theory and Its Applications, IEICE", "NATi. Nordisk Astronomisk Tidsskrift", "SApMM North Holland Series Applied Mathematical Mechanics", "NHCWP North Hollywood Calif Western Periodicals Co", "NPUJ. Northwestern Polytechnical University Journal", "NoDef Not Defined", "NoPar Notes et Informations", "NROpt Nouvelle Revue d'Optique", "NROA. Nouvelle Revue d'Optique Appliquee", "UGC.. Nova Acta Regiae Soc. Sci. Upsaliensis Ser. V", "NTvA. Novaya tekhn. v astron.", "NoIGG Novosibirsk Institut Geologii i Geofiziki SO AN SSSR", "NovIG Novosibirsk Institut Gidrodinamiki SO AN SSSR Dinamika Sploshnoi Sredy", "NoIzN Novosibirsk Izdatel Nauka", "NSSDC NSSDC Publication", "NTTRv NTT Review", "NDS.. Nuclear Data Sheets", "NDT.. Nuclear Data Tables", "NuEnD Nuclear Engineering and Design", "NucFu Nuclear Fusion", "NucFS Nuclear Fusion Special Supplement", "NuGeo Nuclear Geophysics", "NucIM Nuclear Instruments and Methods", "NIMPR Nuclear Instruments and Methods in Physics Research", "NIMPA Nuclear Instruments and Methods in Physics Research A", "NIMPB Nuclear Instruments and Methods in Physics Research B", "NucPh Nuclear Physics", "NuPhA Nuclear Physics A", "NuPhB Nuclear Physics B", "NuPhS Nuclear Physics B Proceedings Supplements", "NSE.. Nuclear Science Engineering", "NucTe Nuclear Technology", "NucTF Nuclear Technology Fusion", "NAR.. Nucleic Acids Research", "NuAlg Numerical Algorithms", "NFAO. Numerical Functional Analysis and Optimization", "NumHT Numerical Heat Transfer", "NHTA. Numerical Heat Transfer Part A - Applications", "NHTB. Numerical Heat Transfer Part B - Fundamentals", "NuMat Numerische Mathematik", "NCimA Nuovo Cimento A Serie", "NCimB Nuovo Cimento B Serie", "NCimC Nuovo Cimento C Geophysics Space Physics C", "NCimD Nuovo Cimento D Serie", "NCimL Nuovo Cimento Lettere", "NCimR Nuovo Cimento Rivista Serie", "NCimS Nuovo Cimento Serie", "OCSC. OAA Compututer Section Circular", "OSUC. Observationes Astronomicas Insitutas in Specula Universitatis Caesareae Dorpatensis", "OVS.. Observation of Variable Stars", "Obser Observation pi", "OAORP Observations astronomiques faites a l'Observatoire royal de Paris", "USNOO Observations made at the U.S. Naval Observatory", "OOVRO Observations Owens Valley Radio Observatory", "Bes1K Observatoire de Besancon", "OBN1K Observatoire de Besancon - CNES", "Gen1K Observatoire de Geneve", "OSFOT Observatoire de la Société Astronomique de France Observations et Travaux", "LyoRe Observatoire de Lyon Reprints", "Meu1K Observatoire de Meudon", "Nic1K Observatoire de Nice", "CORB. Observatoire Royal de Belgique Communications Serie B", "LPlaC Observatorio Astronomico de La Plata Circular", "LPlaS Observatorio Astronomico de La Plata Separata Astronomica", "RosOB Observatorio Astronomico Municipal de Rosario Argentia Boletin", "RioB. Observatorio Nacional Publicacoes do Servico Astronomico Rio de Janeiro", "HelR. Observatory and Astrophysics Laboratory University of Helsinki Report", "PLPla Observatory Astronomical La Plata Series Astronomies", "ObVyS Obzory Vysokotemperaturnoi Sverkhprovodimosti", "ONRAS Occasional Notes of the Royal Astronomical Society", "ORROE Occasional Reports of the Royal Observatory Edinburgh", "OccN. Occultation Newsletter, International Occultation Timing Association (IOTA)", "OcDyn Ocean Dynamics", "OcEng Ocean Engineering", "OcMod Ocean Modelling", "OSJaJ Oceanographical Society of Japan Journal", "AcOC. Oceanologica Acta", "Ocgy. Oceanology", "OcPhE Ocean Physics and Engineering", "OcSci Ocean Science", "OcScD Ocean Science Discussions", "OSJ.. Ocean Science Journal", "Ocean Oceanus Summer", "OAP.. Odessa Astronomical Publications", "BOOde Odesskij Gosudarstvennyi Universitet im. I. I. Mechnikova Byulletin Astronomicheskoj Observatorii", "IzOde Odesskij Gosudarstvennyi Universitet im. I. I. Mechnikova Izvestiya Astronomicheskoj Observatorii", "OAWMN Oesterreichische Akademie Wissenschaften Mathematisch naturwissenschaftliche Klasse Sitzungsberichte Abteilung", "Oikos Oikos", "Okean Okeanologiia", "ONCP. Old and New Concepts of Physics", "OCzAS Ondrejov Czechoslovakia Czechoslovak Academy Sciences CAS Astronomical Institute Publications", "ONERA ONERA TP", "OEJV. Open European Journal on Variable Stars", "OJA.. Open Journal of Acoustics", "OJAS. Open Journal of Applied Sciences", "OJBp. Open Journal of Biophysics", "OJFD. Open Journal of Fluid Dynamics", "OJGeo Open Journal of Geology", "OJMic Open Journal of Microphysics", "OLear Open Learning", "OSID. Open Systems and Information Dynamics", "AcOpt Optica Acta", "OQE.. Optical and Quantum Electronics", "OptEn Optical Engineering", "OptFT Optical Fiber Technology", "OptMa Optical Materials", "OptPE Optical Physics and Engineering", "OptQE Optical Quantum Electronics", "OptRv Optical Review", "OpSCN Optical Sciences Center Newsletter", "OSAJI Optical Society of America Journal Optics and Image Science", "OptPN Optics &", "OptLE Optics and Lasers in Engineering", "OPJ.. Optics and Photonics Journal", "OptSp Optics and Spectroscopy", "OptCo Optics Communications", "OExpr Optics Express", "OptLT Optics Laser Technology", "OptL. Optics Letters", "OptN. Optics News", "Optik Optik", "OpAt. Optika Atmosfery", "OpAtO Optika Atmosfery i Okeana", "OpSp. Optika i Spektroskopiia", "OpMeP Optiko Mekhanicheskaia Promyshlennost", "OCAM. Optimal Control Applications and Methods", "OptEL Optoelectronics Letters", "OERv. Opto-Electronics Review", "OpPuT Optoelektronika i Poluprovodnikovaia Tekhnika", "OrGeo Organic Geochemistry", "OrLi. Origins of Life", "OLEB. Origins of Life and Evolution of the Biosphere", "Ori.. Orione", "Orion Orion: Zeitschrift für Amateur-Astronomie", "IGS.. Orlando FL Academic Press Inc International Geophysics Series", "OrNav Ortung und Navigation", "BuENS Osaka Prefecture University Bulletin Series Engineering Natural Sciences", "OsUTR Osaka University Technology Reports", "Osir. Osiris", "NapCo Osservatorio Astronomico di Capodimonte Napoli Contributi Astronomici", "TerCo Osservatorio Astronomico di Collurania Teramo Contributi", "TerMm Osservatorio Astronomico di Collurania Teramo Memorie ed Osservazioni", "TerNC Osservatorio Astronomico di Collurania Teramo Note e Comunicazioni", "PadCR Osservatorio Astronomico di Padova Comunicazioni e Rassegne", "RomCo Osservatorio Astronomico di Roma su Monte Mario Contributi Scientifici", "TriP. Osservatorio Astronomico di Trieste Pubblicazioni", "TreP. Osservatorio Privato Specola Ariel Treviso Italia Pubblicazione", "MmArc Osservazioni e memorie dell'Osservatorio astrofisico di Arcetri", "MmArS Osservazioni e memorie dell'Osservatorio astrofisico di Arcetri - Appendici", "OsCar Osteoarthritis and Cartilage", "OtObI Otbor i Obrabotka Informatsii", "OtPI. Otbor i Peredacha Informatsii", "OISNP Oxford Pergamon Press International Series on Natural Philosophy", "OISTS Oxford Pergamon Press International Tables Selected Constants", "OxfOO Oxford University Observatory Observations", "OxM.. Oxidation of Metals", "OzSE. Ozone: Science &", "Palb. Paleobiology", "PalOc Paleoceanography", "PMetR Papers in Meteorological Research", "PPh.. Papers in Physics", "PMG.. Papers Meteorology Geophysics", "PGC.. Papers on Global Change IGBP", "ParC. Parallel Computing", "Paras Parasitology", "ParAc Particle Accelerators", "PPhI. Particle Physics Insights", "PaReL Pattern Recognition Letters", "PerMS Perceptual Motor Skills", "PZ... Peremennye Zvezdy", "PZP.. Peremennye Zvezdy Prilozhenie", "PMHu. Periodica Mathematica Hungarica", "PPEE. Periodica Polytechnica Electrical Engineering", "PPME. Periodica Polytechnica Mechanical Engineering", "PPTE. Periodica Polytechnica Transportation Engineering", "PerCo Perkins Observatory Contributions", "PMO.. Perth Meridien Observations", "PTMJ. Phase Transitions: A Multinational Journal", "PhDT. Ph.D. Thesis", "PhiJR Philips Journal Research", "PhiRR Philips Research Reports", "PhiTR Philips Technical Review", "PMag. Philosophical Magazine", "PMagL Philosophical Magazine Letters", "PMagA Philosophical Magazine, Part A", "PMagB Philosophical Magazine, Part B", "PFP.. Philosophy and Foundations of Physics", "Phoen Phoenix Mitteilungsblatt fuer Veraenderlichenbeobachter", "PcPb. Photochemistry and Photobiology", "Pg... Photogrammetria", "PgE.. Photogrammetric Engineering", "PgERS Photogrammetric Engineering and Remote Sensing", "PhInt Photo Interpretation", "PhNan Photonics and Nanostructures", "PhSen Photonic Sensors", "PhoSp Photonics Spectra", "PsynR Photosynthesis Research", "Psyn. Photosynthetica", "PhyOJ Physcs Online Journal", "Phy.. Physica", "PhyA. Physica A Statistical Mechanics and its Applications", "PhyBC Physica B+C", "PhyB. Physica B Condensed Matter", "PhyC. Physica C Superconductivity", "PhyD. Physica D Nonlinear Phenomena", "PhyE. Physica E Low-Dimensional Systems and Nanostructures", "PEFPN Physica Energiae Fortis et Physica Nuclearis", "PhAco Physical Acoustics", "PhBio Physical Biology", "PCESR Physical Chemical and Earth Sciences Research Reports", "PCCP. Physical Chemistry Chemical Physics (Incorporating Faraday Transactions)", "PCSE. Physical Chemistry: Science and Engineering", "PhGeo Physical Geography", "PPHTS Physical Properties of High Temperature Superconductors", "PhyR. Physical Research", "PhRv. Physical Review", "PhRvA Physical Review A", "PhRvB Physical Review B", "PhRvC Physical Review C", "PhRvD Physical Review D", "PhRvE Physical Review E", "PhRvL Physical Review Letters", "PhRvI Physical Review Series I", "PhRvS Physical Review Special Topics Accelerators and Beams", "PRSTP Physical Review Special Topics Physics Education", "PhRvX Physical Review X", "PSD.. Physical Sciences Data", "PSCEC Physical Sciences Series of the Commission of European Communities", "PhyNr Physica Norvegica", "PhyS. Physica Scripta", "PhySB Physica Scripta B", "PhST. Physica Scripta Volume T", "PSSAR Physica Status Solidi Applied Research", "PSSBR Physica Status Solidi B Basic Research", "PSSCR Physica Status Solidi C Current Topics", "PSSRR Physica Status Solidi Rapid Research Letters", "PhySS Physica Status Solids", "PhyL. Physic Letters", "PhChH PhysicoChemical Hydrodynamics", "Physi Physics", "PCS.. Physics and Chemistry in Space", "PhChE Physics and Chemistry of Earth", "PCL.. Physics and Chemistry of Liquids", "PCMLD Physics and Chemistry of Materials with Low-Dimensional Structures", "PCMLA Physics and Chemistry of Materials with Low-Dimensional Structures Series A", "PCMLB Physics and Chemistry of Materials with Low-Dimensional Structures Series B", "PCMLC Physics and Chemistry of Materials with Low-Dimensional Structures Series C", "PCM.. Physics and Chemistry of Minerals", "PCE.. Physics and Chemistry of the Earth", "PCEA. Physics and Chemistry of the Earth A", "PCEB. Physics and Chemistry of the Earth B", "PCEC. Physics and Chemistry of the Earth C", "PCED. Physics and Chemistry of the Earth Delta", "PEEI. Physics and Evolution of the Earth's Interior", "PhApp Physics and its Applications", "PTPPB Physics and Technology of Particle and Photon Beams", "PhB.. Physics Bulletin", "DokPh Physics - Doklady", "PhyEd Physics Education", "PhyEs Physics Essays", "PCHEI Physics in Collision: High-Energy ee/ep/pp Interactions", "PMB.. Physics in Medicine and Biology", "PhP.. Physics in Perspective", "PhTec Physics in Technology", "PhyIn Physics International", "PhLF. Physics Laser Fusion", "PhL.. Physics Letters", "PhLA. Physics Letters A", "PhLB. Physics Letters B", "PhLC. Physics Letters Section C Physics Reports C", "PhyNY Physics New York", "PhyN. Physics Notes", "PAN.. Physics of Atomic Nuclei", "PAM.. Physics of Atoms and Molecules", "PhFl. Physics of Fluids", "PhFlB Physics of Fluids B", "PhLRv Physics of Life Reviews", "PLDS. Physics of Low-Dimensional Structures", "PhMet Physics of Metals", "PMM.. Physics of Metals and Metallography", "PPN.. Physics of Particles and Nuclei", "PPNL. Physics of Particles and Nuclei Letters", "PhPl. Physics of Plasmas", "PhQE. Physics of Quantum Electronics", "PSL.. Physics of Solids and Liquids", "PEPI. Physics of the Earth and Planetary Interiors", "PhSS. Physics of the Solid State", "PTF.. Physics of Thin Films", "PWP.. Physics of Wave Phenomena", "PhR.. Physics Reports", "PRI.. Physics Research International", "PhT.. Physics Today", "PhyU. Physics Uspekhi", "PhyW. Physics World", "PCTM. Physikalisch-Chemische Trenn- und Messmethoden", "PhyBl Physikalische Blötter", "PhyG. Physikalische Gesellschaft", "PhyGZ Physikalische Gesellschaft Zürich", "PhyZ. Physikalische Zeitschrift", "PKM.. Physik der Kondensierten Materie", "PhuZ. Physik in unserer Zeit", "PhyCP Physiological Chemistry and Physics", "PhyM. Physiological Measurement", "PhylS Physiologist Supplement", "PAZh. Pis ma Astronomicheskii Zhurnal", "PZETF Pis ma Zhurnal Eksperimental noi i Teoreticheskoi Fiziki", "PZhTF Pis ma Zhurnal Tekhnischeskoi Fiziki", "PlAst Planetary Astronomy", "PlR.. Planetary Report", "PlSci Planetary Science", "PSRD. Planetary Science Research Discoveries", "PCPhy Plant and Cell Physiology", "PFR.. Plasma and Fusion Research", "PCPP. Plasma Chemistry and Plasma Processing", "PlPh. Plasma Physics", "PPCF. Plasma Physics and Controlled Fusion", "PlPhR Plasma Physics Reports", "PlPo. Plasmas and Polymers", "PlST. Plasma Science and Technology", "PSST. Plasma Sources Science Technology", "PRFVT Plastiques Renforces Fibres de Verre Textile", "PLoSB PLoS Biology", "PLoSC PLoS Clinical Trials", "PLSCB PLoS Computational Biology", "PLoSG PLoS Genetics", "PLoSM PLoS Medicine", "PLoSN PLoS Neglected Tropical Diseases", "PLoSO PLoS ONE", "PLoSP PLoS Pathogens", "PMCPA PMC Physics A", "PMCPB PMC Physics B", "PMCPC PMC Physics C", "PMTF. PMTF Zhurnal Prikladnoi Mekhaniki i Tekhnicheskoi Fiziki", "nraop National Radio Astronomy Observatory Press Release", "PnGid Pnevmatika i Gidravlika", "noaop NOAO Proposal", "PolSc Polar Science", "PolSi Poliarnye Siianiia", "PSSNN Poliarnye Siianiia i Svechenie Nochnogo Neba", "PASAM Polish Academy of Science Arch Mech", "PASAS Polish Academy of Science Artificial Satellites", "PASIG Polish Academy of Sciences Institute of Geophysics Publications", "PASTA Polish Academy of Sciences Theory Aggregation Coagulation", "PJMPE Polish Journal of Medical Physics And Engineering", "PCZNN Politechnika Czestochowska Zeszyty Naukowe Nauki Techniczne Mechanika", "PGZNM Politechnika Gdanska Zeszyty Naukowe Mechanika", "PSZNM Politechnika Slaska Zeszyty Naukowe Mechanika", "PolAt Pollution Atmospherique", "CraR. Polskie Towarzyslwo Milosnikow Astronomii", "PolTM Poluprovodnikovaia Tekhnika i Mikroelektronika", "PolPP Poluprovodnikovye Pribory i ikh Primenenie", "Poly. Polymer", "PoCom Polymer Composites", "PolPh Polymer Physics", "PPTEn Polymer-Plastics Technology and Engineering", "PomAK Pomiary Automatyka Kontrola", "PATi. Popular Astronomisk Tidsskrift", "PA... Popular Astronomy", "PorMe Poroshkovaia Metallurgiia", "PoAn. Postepy Astronautyki", "PoAst Postepy Astronomii Krakow", "PSci. Pour la Science", "PDiff Powder Diffraction", "PUAMA Poznan Uniwersytet im Adama Mickiewicza Seria Akustyka", "PUAMF Poznan Uniwersytet im Adama Mickiewicza Seria Fizyka", "PrAst Practical Astronomy", "NaiRe Pradesh State Observatory Naini Tal Insia Reprints", "PraAc Prague Academia", "Prama Pramana", "PreR. Precambrian Research", "Prib. Priborostroenie", "PriTE Pribory i Tekhnika Eksperimenta", "PriMM Prikladnaia Matematika i Mekhanika", "PriMP Prikladnaia Matematika i Programmirovanie", "PriM. Prikladnaia Mekhanika", "PPPLR Princeton Plasma Physics Laboratory Report", "Prir. Priroda", "Priv. Private Communication", "PrEM. Probabilistic Engineering Mechanics", "PrAiA Problemy Arktiki i Antarktiki", "PrBio Problemy Bioniki", "PrDRV Problemy Difraktsii i Rasprostraneniia Voln", "PrFA. Problemy Fiziki Atmosfery", "PrFKL Problemy Iadernoi Fiziki i Kosmicheskikh Luchei", "PrKFi Problemy Kosmicheskoi Fiziki", "PrMas Problemy Mashinostroeniia", "PrPro Problemy Prochnosti", "PrSP. Problemy Sluchainogo Poiska", "PrTE. Problemy Tekhnicheskoi Elektrodinamiki", "PrTGE Problemy Teorii Gravitatsii i Elementarnykh Chastits", "PrTPT Problemy Teploenergetiki i Prikladnoi Teplofiziki", "PJA.. Proceeding of the Japan Academy", "PJAA. Proceeding of the Japan Academy, Series A", "PJAB. Proceeding of the Japan Academy, Series B", "PBioS Proceedings: Biological Sciences", "PMPES Proceedings: Mathematical, Physical and Engineering Sciences", "PAMS. Proceedings of the American Mathematical Society", "PAPhS Proceedings of the American Philosophical Society", "PASAu Proceedings of the Astronomical Society of Australia", "PCAS. Proceedings of the California Academy of Sciences", "PCPS. Proceedings of the Cambridge Philosophical Society", "PEMS. Proceedings of the Edinburgh Mathematical Society", "PIASE Proceedings of the Indian Academy of Science, Earth and Planetary Sciences", "PINSA Proceedings of the Indian National Science Academy Part A", "PINSB Proceedings of the Indian National Science Academy Part B", "PIGP. Proceedings of the Institute of General Physics, Adademy of the Sciences of Russia", "PILOM Proceedings of the International Latitude Observatory at Mizusawa", "PIRE. Proceedings of the IRE", "PNAS. Proceedings of the National Academy of Sciences", "PNAS. Proceedings of the National Academy of Sciences USA", "PNAS. Proceedings of the National Academy of Sciences of the USA", "PNSC. Proceedings of the National Science Council", "PNSBP Proceedings of the National Society of Black Physicists", "PPS.. Proceedings of the Physical Society", "PPSA. Proceedings of the Physical Society A", "PPSB. Proceedings of the Physical Society B", "PPSL. Proceedings of the Physical Society of London", "PRIAN Proceedings of the Research Institute of Atmospherics, Nagoya University", "PRIAA Proceedings of the Royal Irish Academy Section A", "PRNAS Proceedings of the Royal Netherlands Academy of Arts and Sciences", "PSEBM Proceedings of the Society for Experimental Biology and Medicine", "PrVP. Proceedings of Vibration Problems", "PELIS Program: electronic library &", "PrAeS Progress in Aerospace Sciences", "PrAA. Progress in Astronautics and Aeronautics", "PrA.. Progress in Astronomy", "PABei Progress in Astronomy", "PBB.. Progress in Biochemistry and Biophysics", "PBBC. Progress in Biophysics and Biophysical Chemistry", "PBMB. Progress in Biophysics and Molecular Biology", "PrECS Progress in Energy and Combustion Science", "PLTP. Progress in Low Temperature Physics", "PrMS. Progress in Materials Science", "PMatP Progress in Mathematical Physics", "PMRP. Progress in Medical Radiation Physics", "PMetP Progress in Metal Physics", "PNSci Progress in Natural Science", "PrOce Progress in Oceanography", "POrCo Progress in Organic Coatings", "PrPNP Progress in Particle and Nuclear Physics", "PPcPp Progress in Photochemistry and Photophysics", "PPGeo Progress in Physical Geography", "PrPh. Progress in Physics", "PQE.. Progress in Quantum Electronics", "PrSS. Progress In Surface Science", "PTCP. Progress in Theoretical Chemistry and Physics", "PTEP. Progress of Theoretical and Experimental Physics", "PThPh Progress of Theoretical Physics", "PThPS Progress of Theoretical Physics Supplement", "ProTe Promyshlennaia Teplotekhnika", "PrEx. Propellants and Explosives", "PrExP Propellants and Explosives Pyrotechnics", "PMMin Proper Motion Survey, University of Minnesota", "rxte pRXTE Proposal", "sptz pSpitzer Proposal", "suba pSubaru Proposal", "PUFir Pubblicazioni della R. Universita degli studi di Firenze", "PSAIL Pubblicazioni della Stazione Astronomica Internazionale di Latitudine", "POMil Pubblicazioni dell'Osservatorio Astronomico di Milano-Merate", "POPad Pubblicazioni dell'Osservatorio Astronomico di Padova", "POPal Pubblicazioni dell'Osservatorio Astronomico di Palermo", "POTor Pubblicazioni Varie Fuori Serie dell'Osservatorio Astronomico di Torino", "PKCat Publ. House Czech. Acad. Sci.", "PMad. Publicacion Facultad de Ciencias Madrid", "POClu Publicatiile Observatorului Astronomical Universitatii din Cluj", "POPar Publication de l'Observatoire de Paris Notes et Informations", "POStr Publication de l'Observatoire de Strasbourg", "PUSK. Publication der Koeniglichen Sternwarte in Kiel", "PULei Publicationen der K. Universitoats-Sternwarte zu Leipzig", "PCARS Publication of COMU Astrophysics Research Center", "PKAS. Publication of Korean Astronomical Society", "PPCAS Publication of the Pomona College Astronomical Society", "PIAGL Publications de l'Institut d'Astronomie et de Geophysique Georges Lemaitre", "POBeo Publications de l'Observatoire Astronomique de Beograd", "POBor Publications de l'Observatoire de l'Universite de Bordeaux", "POTou Publications de l'Observatoire de Toulouse", "PLAGL Publications du Laboratoire d'Astronomie et de Geodesie de l'Universite de Louvain", "PDHO. Publications of Debrecen Heliophysical Observatory", "POBol Publications of dell'Osservatorio Astronomie de Bologna", "PLawO Publications of Laws Observatory, University of Missouri", "PLicO Publications of Lick Observatory", "POMic Publications of Michigan Observatory", "PCat. Publications of Osservatorio Astrofisico di Catania", "PASK. Publications of the Academy of Science Kasakstan Sect. Astrobotanics", "PAllO Publications of the Allegheny Observatory of the University of Pittsburgh", "PAASA Publications of the Astronomical and Astrophysical Society of America", "PAICU Publications of the Astronomical Institute of the Charles University", "PAICz Publications of the Astronomical Institute of the Czechoslovak Academy of Sciences", "PUAms Publications of the Astronomical Institute of the University of Amsterdam", "PBrn. Publications of the Astronomical Institute of the University of Borneo", "POHel Publications of the Astronomical Observatory Helsinki", "PAOS. Publications of the Astronomical Observatory of Sarajevo", "POMin Publications of the Astronomical Observatory University of Minnesota", "PASA. Publications of the Astronomical Society of Australia", "PASJ. Publications of the Astronomical Society of Japan", "PASP. Publications of the Astronomical Society of the Pacific", "PASPS Publications of the Astronomical Society of the Pacific Supplement", "PASRB Publications of the Astronomical Society Rudjer Boskovic", "PADEU Publications of the Astronomy Department of the Eotvos Lorand University", "PAIB. Publications of the Astronomy Institute of Bonn", "PAB.. Publications of The Astrophysics Branch Ottawa", "PBeiO Publications of the Beijing Astronomical Observatory", "PBosO Publications of the Bosscha Observatory Lembang Indonesia", "PCinO Publications of the Cincinnati Observatory", "PCooO Publications of the Cook Observatory", "PDDO. Publications of the David Dunlap Observatory", "PDAUC Publications of the Department of Astronomy University of Chile", "PDAO. Publications of the Dominion Astrophysical Observatory Victoria", "PDO.. Publications of the Dominion Observatory Ottawa", "PDreO Publications of the Dresden Observatory", "PFAO. Publications of the Flower Astronomical Observatory", "PGLO. Publications of the Goethe Link Observatory", "PGooO Publications of the Goodsell Observatory, Carleton College", "ILOMP Publications of the International Latitude Observatory at Mizusawa", "PIstO Publications of the Istanbul University Observatory", "PGro. Publications of the Kapteyn Astronomical Laboratory Groningen", "PKirO Publications of the Kirkwood Observatory of Indiana University", "PAth. Publications of the Laborotory of Astronomy University of Athens", "PMcCO Publications of the Leander McCormick Observatory", "PManO Publications of the Manila Observatory", "PMunO Publications of the Munich Observatory", "PNAOC Publications of the National Astronomical Observatories of China", "PNAOJ Publications of the National Astronomical Observatory of Japan", "POLyo Publications of the Observatoire de Lyon", "PGenA Publications of the Observatoire Geneve Series A", "PGenB Publications of the Observatoire Geneve Series B", "POHP. Publications of the Observatoire Haute-Provence", "POANC Publications of the Observatorie Astronomie Nacional Cerro Calan", "POIst Publications of the Observatory Astronomie University Istambul", "POslO Publications of the Oslo Observatory", "POVRO Publications of the Owens Valley Observatory", "PPMtO Publications of the Purple Mountain Observatory", "PRCO. Publications of the Riverview College Observatory", "PROE. Publications of the Royal Observatory of Edinburgh", "PSAO. Publications of the Shaanxi Astronomical Observatory", "PShaO Publications of the Shaanxi Astronomy Observatory", "PSprO Publications of the Sproul Observatory", "PSSAI Publications of the Sternberg State Astronomical Institute", "PTarO Publications of the Tartu Astrofizica Observatory", "PTasO Publications of the Tashkent Astronomical Observatory", "PUPFA Publications of the University of Pennsylvania Flower Astronomical Observatory", "PUSNO Publications of the U.S. Naval Observatory Second Series", "PVVO. Publications of the Van Vleck Observatory", "PVasO Publications of the Vassar College Observatory", "PWasO Publications of the Washburn Observatory", "PYerO Publications of the Yerkes Observatory", "PYunO Publications of the Yunnan Observatory", "PWHHO Publications of West Hendon House Observatory, Sunderland", "PSCDS Publication Speciale du Centre de Donnees Stellaires", "POxf. Publications University of Oxford Department of Astrophysics", "PUS.. Public Understanding of Science", "PKUJ. Publikationen der Kaiserlichen Universitaets-Sternwarte Jurjew", "PAIKH Publikationen des Astrophysikalischen Instituts Koenigstuhl-Heidelberg", "POPot Publikationen des Astrophysikalischen Observatoriums zu Potsdam", "PCopO Publikationer og mindre Meddeler fra Kobenhavns Observatorium", "PGAOI Pulkovo Glavnaia Astronomicheskaia Observatoriia Izvestiia", "PApCh Pure &", "PApGe Pure and Applied Geophysics", "PApPh Pure and Applied Physics", "PApOp Pure Applied Optics", "QUnJ. Qinghua University Journal", "xmm.. XMM-Newton Press Release", "xmm.. XMM-Newton Proposal", "QREI. Quality Reliability Engineering International", "QuFin Quantitative Finance", "QuSOp Quantum and Semiclassical Optics", "QuEle Quantum Electronics", "QuIP. Quantum Information Processing", "QuOpt Quantum Optics", "QBSA. Quarterly Bulletin on Solar Activity", "QJMAM Quarterly Journal of Mechanics and Applied Mathematics", "QJRAS Quarterly Journal of the Royal Astronomical Society", "QJRMS Quarterly Journal of the Royal Meteorological Society", "QApMa Quarterly of Applied Mathematics", "QRBio Quarterly Reviews of Biophysics", "QuInt Quaternary International", "QuRes Quaternary Research", "QSRv. Quaternary Science Reviews", "Quest Quest", "RadRe Radcliffe Observatory Pretoria South Africa Reprints", "Rad.. Radiant, Journal of the Dutch Meteor Society", "REB.. Radiation and Environmental Biophysics", "RadEf Radiation Effects", "REDS. Radiation Effects and Defects in Solids", "RaPC. Radiation Physics and Chemistry", "RaRe. Radiation Research", "RaEE. Radio and Electronic Engineer", "Radel Radioehlektronika", "REEP. Radio Engineering and Electronic Physics", "RaF.. Radiofizika", "RaSol Radioizluchenie Solntsa", "RPRA. Radio Physics and Radio Astronomy", "RaRLJ Radio Research Laboratory, Journal", "RaRLR Radio Research Laboratory, Review", "RaSc. Radio Science", "RaScB Radio Science Bulletin", "RaScS Radio Science Supplement", "RaT.. Radioteknika", "RaEl. Radiotekhnika i Elektronika", "RERE. Radiotekhnika i Elektronika Radio Engineering Electronic Physics", "RatK. Radiotekhnika Kharkov", "RTRE. Radiotekhnika Tecommunications Radio Engineering Radio Engineering", "RaPro Raschety Prochnost", "RF... Raumfahrtforschung", "RCAEn RCA Engineer", "RCARv RCA Review", "RTI.. Real-Time Imaging", "RDCMP Recent Development in Condensed Matter Physics", "RRDAP Recent Research Development in Applied Physics", "RRDBC Recent Research Development in Biophysical Chemistry", "RRDBB Recent Research Development in Biophysics and Biochemistry", "RRDCP Recent Research Development in Chemical Physics", "RRDPC Recent Research Development in Physical Chemistry", "RRDP. Recent Research Development in Physics", "RRDPF Recent Research Development in Physics of Fluids", "RRDSP Recent Research Development in Statistical Physics", "ReAA. Recherches Aeronautiques et Aerospatiales", "RAOU. Recherches Astronomiques de l'Observatoire d'Utrecht", "RZh.. Referationyj Zhurnal", "RJEHM Regional Journal of Energy Heat and Mass Transfer", "RCD.. Regular and Chaotic Dynamics", "RemS. Remote Sensing", "RSEMS Remote Sensing Electro Magnetic Spectrum", "RSEnv Remote Sensing of Environment", "RSQ.. Remote Sensing Quarterly", "Renor Renormalization", "RISRJ Report Ionosphere Space Research Japan", "HarOR Report of the Committee of the Overseers of Harvard College appointed to visit the Observatory", "RNAOJ Report of the National Astronomical Observatory of Japan", "RSPUT Report Series of the Department of Physics and Science, University of Turku", "YalRY Reports for the year presented by the Board of Managers of the Observatory of Yale University to the President and Fellows", "ROLun Reports of the Lund Observatory", "RpMP. Reports on Mathematical Physics", "RPPh. Reports on Progress in Physics", "RTAMS Representation Theory of the American Mathematical Society", "BeiRe Reprints Beijing Astronomical Observatory Academia Sinica", "ROCi. Republic Observatory Johannesburg Circular", "ChPAS Republic of China National Science Council Proceedings Applied Sciences", "RBSEJ Research Based Science Education Journal", "RAA.. Research in Astronomy and Astrophysics", "ReNEv Research in Nondestructive Evaluation", "RSTEd Research in Science and Technological Education", "RScEd Research in Science Education", "RJPh. Research Journal of Physics", "RLEMR Research Laboratory Engineering Materials Report", "RLPME Research Laboratory Precision Machinery Electronics Bulletin", "RLOpt Research Letters in Optics", "RLPhy Research Letters in Physics", "RMA.. Research Measurement Approach", "RNOST Research News &", "RPFSU Research Papers Faculty of Materials Science and Technology Slovak University of Technology", "RRP.. Research Reports in Physics", "RTP.. Research Trends in Physics", "RNAO. Resultados del Observatorio Nacional Argentino", "ROCor Resultados del Observatorio Nacional Argentino en Cordoba", "ResPh Results in Physics", "RAROC Results of Astronomical Observations made at the Royal Observatory, Cape of Good Hope", "RMROC Results of Meridian Observations made at the Royal Observatory, Cape of Good Hope", "RDR.. Review of Derivatives Research", "RvPCJ Review of Physical Chemistry of Japan", "RvPT. Review of Physics in Technology", "RScI. Review of Scientific Instruments", "RvAqS Reviews in Aquatic Sciences", "RvMaP Reviews in Mathematical Physics", "RvMA. Reviews in Modern Astronomy", "RvGeo Reviews of Geophysics", "RvGSP Reviews of Geophysics and Space Physics", "RvGeS Reviews of Geophysics Supplement", "RvMin Reviews of Mineralogy", "RvMP. Reviews of Modern Physics", "RvMPS Reviews of Modern Physics Supplement", "RvOp. Reviews of Optics", "RvPP. Reviews of Plasma Physics", "RvRRL Reviews of the Radio Research Laboratory", "RvA.. Revista Astronomica Organo de la Asociacion Argengina Amigos de la Astronomia Buenos Aires", "RBrFi Revista Brasileira de Fisica", "RvCF. Revista Colombiana de Fisica", "IORP. Revista do observatorio : publicacao mensal do Imperial Observatorio do Rio de Janeiro", "RMxAA Revista Mexicana de Astronomia y Astrofisica", "RMxF. Revista Mexicana de Fisica", "RMxFE Revista Mexicana de Fisica E", "RMxFS Revista Mexicana de Fisica Supplement", "RvMad Revista Real Acad. Ciencias Exact. Fis. Nat. Madrid", "RTrTe Revista Transporturilor si Telecomunicatiilor", "AerRv Revue Aerospatiale", "RvAc. Revue d'Acoustique", "RvGPG Revue de Geographie Physique et de Geologie Dynamique", "RvGDG Revue de Geologie Dynamique et de Geographie Physique", "RvPA. Revue de Physique Appliquee", "RvPD. Revue du Palais de la Decouverte", "RvFEQ Revue Francaise de l'Electricite Quarter", "RFrM. Revue Francaise de Mecanique", "RFrMQ Revue Francaise de Mecanique Quarter", "RRMPA Revue Roumaine de Mathematiques Pures et Appliquees", "RvRP. Revue Roumaine de Physique", "RvRST Revue Roumaine des Sciences Techniques Serie de Mecanique Appliquee", "RST.. Revue Scientifique et Technique CECLES CERS", "RvT.. Revue Technique Thomson CSF", "RNISZ Rezul taty Nabliudenii Iskusstvennykh Sputnikov Zemli", "RWTHA Rheinisch Westfaelische Technische Hochschule Aerodynamisches Institut Abhandlungen", "AcRhe Rheologica Acta", "RA... Ricerche Astronomiche", "RIzZi Riga Izdatel Zinatne", "Rise. Rise Hvezd", "RRA.. River Research and Applications", "RIG.. Rivista Italiana di Geofisica", "RIGSA Rivista Italiana di Geofisica e Scienze Affini", "RvTS. Rivista Tecnica Selenia", "Robot Robotica", "RMRE. Rock Mechanics and Rock Engineering", "RMFMR Rock Mechanics Felsmechanik Mecanique des Roches", "Roczn Rocznik Astronomiczny Observatorjum Krakowskiego Krakow", "RoAJ. Romanian Astronomical Journal", "RoJPh Romanian Journal of Physics", "RoRPh Romanian Reports in Physics", "RoIE. Rossiiskaia Akademiia Nauk Izvestiia Energetika", "RoIMZ Rossiiskaia Akademiia Nauk Izvestiia Mekhanika Zhidkosti i Gaza", "RoISF Rossiiskaia Akademiia Nauk Izvestiia Seriia Fizicheskaia", "RoDok Rossijskaya Akademiya Nauk Doklady", "RoIMT Rossijskaya Akademiya Nauk Izvestiya Mekhanika Tverdogo Tela", "RoIzF Rossijskaya Akademiya Nauk Izvestiya Seriya Fizicheskaya", "RWPWZ Rostock Wilhelm Pieck Universitaet Wissenschaftliche Zeitschrift Mathematisch Naturwissenschaftliche Reihe", "PVSS. Royal Astronomical Society of New Zealand Publications of Variable Star Section", "VSSCi Royal Astronomical Society of New Zealand Variable Star Section Circulars", "VSSRe Royal Astronomical Society of New Zealand Variable Star Section Reprints", "VSSSC Royal Astronomical Society of New Zealand Variable Star Section Special Circulars", "RGOB. Royal Greenwich Observatory Bulletin", "RGOO. Royal Greenwich Observatory Observations", "ROAn. Royal Observatory Annals", "CapMi Royal Observatory Cape Mimeogram", "CoRSE Royal Society Edinburgh Communications Physical Sciences", "RSCT. Royal Society of Canada Transactions", "RSEPS Royal Society of Edinburgh Proceedings Section", "RSET. Royal Society of Edinburgh Transactions", "RSPTA Royal Society of London Philosophical Transactions Series A", "RSPTB Royal Society of London Philosophical Transactions Series B", "RSPT. Royal Society of London Philosophical Transactions Series I", "RSPSA Royal Society of London Proceedings Series A", "RSPSB Royal Society of London Proceedings Series B", "RSPS. Royal Society of London Proceedings Series I", "RoIn. Rozprawy Inzynierskie", "RoIET Rozprawy Inzynierskie Engineering Transactions", "asc.. Space Telescope ASC Instrument Science Report", "nicm. Space Telescope NICMOS Instrument Science Report", "stis. Space Telescope STIS Instrument Science Report", "wfc.. Space Telescope WFC Instrument Science Report", "wfpc. Space Telescope WFPC2 Instrument Science Report", "Ruimt Ruimtevaart", "RuCRv Russian Chemical Reviews", "RuGG. Russian Geology and Geophysics", "RJET. Russian Journal of Engineering Thermophysics", "RJMP. Russian Journal of Mathematical Physics", "RJPC. Russian Journal Physical Chemistry", "RJPCA Russian Journal Physical Chemistry A", "RJTAM Russian Journal Theoretical and Applied Mechanics", "RuMaS Russian Mathematical Surveys", "RuMet Russian Metallurgy", "RuPhJ Russian Physics Journal", "RALR. Rutherford Appleton Laboratory Report", "Sadha Sadhana", "STVF. Samoletostroenie Tekhnika Vozdushnogo Flota", "SAMPJ SAMPE Journal", "SAMPQ SAMPE Quarterly", "UISTS San Diego CA Univelt Inc Science Technology Series", "MaMeA Sankt Peterburgskii Universitet Vestnik Seriia Matematika Mekhanika Astronomiia", "SAOSR SAO Special Report", "asd.. Astrophysics Software Database", "ascl. Astrophysics Source Code Library", "SatCo Satellite Communications", "SBARM SBARMO Bulletin", "SbMat Sbornik: Mathematics", "SJMet Scandinavian Journal of Metallurgy", "SUVSR Scandinavian Union of Amateur Astronomers Variable Star Section", "ScReE Scholarly Research Exchange", "SNG.. Schweizerische Naturforschende Gesellschaft", "Sci.. Science", "SCSA. Science and Culture Series: Astrophysics", "SCSP. Science and Culture Series: Physics", "SECM. Science and Engineering of Composite Materials", "STAdM Science and Technology of Advanced Materials", "SCSMP Science China Series Mathematics Physics Astronomy Technological Sciences", "SciDi Science Dimension", "SciEd Science Education", "ScEdR Science Education Research", "SFCh. Science Foundation in China", "ScChA Science in China A: Mathematics", "ScChB Science in China B: Chemistry", "ScChC Science in China C: Life Sciences", "ScChD Science in China D: Earth Sciences", "ScChE Science in China E: Technological Sciences", "ScChF Science in China F: Information Sciences", "ScChG Science in China G: Physics and Astronomy", "SISN. Science Information Systems Newsletter", "SciN. Science News", "ScTEn Science of the Total Environment", "ScPr. Science Progress", "Scis. Sciences", "SciB. Scientia (Bologna)", "SciSn Scientia Sinica", "SSPMA Scientia Sinica Physica, Mechanica &", "SSSMP Scientia Sinica Series Mathematical Physical Technical Sciences", "SciAm Scientific American", "SMS.. Scientific Modeling and Simulation SMNS", "Scim. Scientometrics", "SRToh Sci. Rep. Tohoku Univ. Eighth Ser.", "SFSN. Scripta Faculty Science Nat. Ujep Brunensis Physica", "ScM.. Scripta Metallurgica", "ScMM. Scripta Metallurgica et Materialia", "SedG. Sedimentary Geology", "Sedim Sedimentology", "SeiKa Seikei-Kakou", "BSSA. Seismological Society America Bulletin", "SEGeo Seismology and Exploration Geophysics", "STSSP Selected Topics in Solid State Physics", "Semic Semiconductors", "SeScT Semiconductor Science Technology", "SeSTS Semiconductor Science Technology Supplement", "TrKra Seminar Kraevym Zadacham Trudy", "SCB.. Seminars in Cancer Biology", "SDia. Seminars in Dialysis", "GEOCS Semi-Regular Variables", "SenAR Sendai Astronomiaj Raportoj", "SenIm Sensing and Imaging", "SPTS. Sensor Physics and Technology Series", "SeRv. Sensor Review", "SeAc. Sensors and Actuators", "SeAcA Sensors and Actuators A Physical", "SeAcB Sensors and Actuators B Chemical", "SAERI Seoul Korea Atomic Energy Research Institute", "SanS. Separata Universidad de Chile Departamento de Astronomia Santiago", "SerAJ Serbian Astronomical Journal", "AnShO Shanghai Observatory Annals", "SV... Shock and Vibration", "SVD.. Shock Vibration Digest", "SVICB Shock Vibration Information Center Shock Vibration Bulletin", "SVICP Shock Vibration Information Center Shock Vibration Computer Programs", "SVICD Shock Vibration Information Center Shock Vibration Digest", "SVICI Shock Vibration Information Center Shock Vibration Inform Digest", "ShWav Shock Waves", "SJAM. SIAM Journal of Applied Mathematics", "SJCO. SIAM Journal of Control Optimization", "SJMA. SIAM Journal of Mathematical Analysis", "SJADS SIAM Journal on Applied Dynamical Systems", "SJNA. SIAM Journal on Numerical Analysis", "SIAMR SIAM Review", "SiMaJ Siberian Mathematical Journal", "SiFTZ Sibirskii Fiziko Tekhnicheskii Zhurnal", "JCMSI SICE Journal of Control, Measurement, and System Integration", "SidM. Sidereal Messenger", "SIDPQ SID Proceedings Quarter", "SiFoE Siemens Forschungs und Entwicklungsberichte", "SIGMA SIGMA", "Sig.. Signal", "SigPr Signal Processing", "Simul Simulation", "SiMol Single Molecules", "SZPA. SIRIUS. Zeitschrift fuer Populaere Astronomie", "Situ. Situ", "SkInq Skeptical Inquirer", "SRT.. Skin Research and Technology", "SkyN. Sky News", "SlaOb Slaboproudy Obzor", "SJCE. Slovak Journal of Civil Engineering", "SBE.. Small Business Economics", "SMaS. Smart Material Structures", "Smith Smithsonian", "SCoA. Smithsonian Contributions to Astrophysics", "SCoK. Smithsonian Contributions to Knowledge", "SmCES Smithsonian Contributions to the Earth Sciences", "SSS.. Social Studies of Science", "MSAIQ Societa Astronomica Italiana Memorie Quarter", "SFPTB Societe Francaise de Photogrammetrie et de Teledetection Bulletin", "SASS. Society for Astronomical Sciences Annual Symposium", "SEEJ. Society of Environmental Engineers Journal", "SIAM. Society of Industrial and Applied Mathematics", "SIBAN Sofia Izdatel Bolgarskoi Akademii Nauk", "SMat. Soft Matter", "SSSAJ Soil Science Society of America Journal", "SoCe. Solar Cells", "SoEn. Solar Energy", "SoEnM Solar Energy Materials", "SoPh. Solar Physics", "SoSyR Solar System Research", "STERJ Solar Terrestrial and Environmental Research Japan", "SolE. Solid Earth", "SolED Solid Earth Discussions", "SMArc Solid Mechanics Archives", "SSCom Solid State Communications", "SSEle Solid State Electronics", "SSIon Solid State Ionics", "SSNMR Solid State Nuclear Magnetic Resonance", "SSPAR Solid State Physics Advances in Research and Applications", "SSPAS Solid State Physics Advances in Research and Applications Supplement", "SSSci Solid State Sciences", "SSTec Solid State Technology", "BSolD Solnechnye Dann. Bull. Akad. Nauk SSSR", "SoKie Sonderdrucke der Sternwarte Kiel", "SoMue Sonderdrucke Universitaet Muenster Astronomisches Institut", "Sonne Sonne", "SoShe Soobshchenie Shemakhinskoj Astrofizicheskoj Observatorii", "SoByu Soobshcheniya Byurakanskoj Observatorii Akademiya Nauk Armyanskoj SSR Erevan", "SoSht Soobshcheniya Gosudarstvennogo Astronomicheskogo Instituta", "SoSAO Soobshcheniya Spetsial'noj Astrofizicheskoj Observatorii", "SMTS. Soprotivlenie Materialov i Teoriia Sooruzhenii", "SSHMP Sources and Studies in the History of Mathematics and Physical Sciences", "SHMPS Sources in the History of Mathematics and Physical Sciences", "SAAOC South African Astronomical Observatory Circular", "SAAOR South African Astronomical Observatory Republic", "SAJPh South African Journal of Physics", "SAJSc South African Journal of Science", "SouSt Southern Stars", "IBSAE Sovetskaia Antarkticheskaia Ekspeditsiia Informatsionnyi Byulleten", "SovAe Soviet Aeronomii", "SvApM Soviet Applied Mechanics", "SvA.. Soviet Astronomy", "SvAL. Soviet Astronomy Letters", "JETP. Soviet Journal of Experimental and Theoretical Physics", "JETPL Soviet Journal of Experimental and Theoretical Physics Letters", "SvJNP Soviet Journal of Nuclear Physics", "SvJOT Soviet Journal of Optical Technology", "SvJPP Soviet Journal of Plasma Physics", "SvJQE Soviet Journal of Quantum Electronics", "SvPAC Soviet Physics Acoustics", "SvPhA Soviet Physics Astronomy", "SvPC. Soviet Physics Crystallography", "SPhD. Soviet Physics Doklady", "SvPhJ Soviet Physics Journal", "SvPS. Soviet Physics Semiconductors", "SvPSS Soviet Physics Solid State", "SPTP. Soviet Physics Technical Physics", "SvPhU Soviet Physics Uspekhi", "SvRP. Soviet Radiophysics", "SSRvA Soviet Scientific Reviews A Physics Reviews", "SSRvC Soviet Scientific Reviews C Mathematical Physics Reviews", "SSRvD Soviet Scientific Reviews D Physicochemical Biology Reviews", "SSRvE Soviet Scientific Reviews E Astrophysics and Space Physics Reviews", "SvTRv Soviet Technology Reviews", "Space Space", "SSPRv Space and Solar Power Review", "SpCoB Space Communication Broadcasting", "SpCom Space Communications", "SpEd. Space Education", "SpFl. Spaceflight", "SLSci Space Life Sciences", "SpMar Space Markets", "SpMME Space Medicine Medical Engineering", "SpPol Space Policy", "SpPow Space Power", "SPRMD Space Power - Resources, Manufacturing and Development", "SpRBu Space Research Bulgaria", "SpReT Space Research Today", "SSI.. Space Science Instrumentation", "SSRv. Space Science Reviews", "SpT.. Space Technology", "STICA Space Technology Industrial and Commercial Applications", "STECF Space Telescope European Coordinating Facility Newsletter", "Spvw. Spaceview", "SpWea Space Weather", "SpWd. Space World", "SpWdU Space World U", "SpWdW Space World W", "SpWdY Space World Y", "Spark Spark, the AAS Education Newsletter", "VatAR Specola Astronomica Vaticana Annual Reports", "AtlSV Specola Astronomica Vaticana Atlas Stellarum Variabilium", "VatCo Specola Astronomica Vaticana Comunicazione", "VatMA Specola Astronomica Vaticana Miscellanea Astronomica", "VatPS Specola Astronomica Vaticana Pubblicazioni Serie Seconda", "VatRS Specola Astronomica Vaticana Ricerche Spettroscopiche", "VatRA Specola Astronomica Vaticana Richerche Astronomiche", "AcSpe Spectrochimica Acta", "AcSpA Spectrochimica Acta Part A: Molecular Spectroscopy", "SpecL Spectroscopy Letters", "SRMO. Specula Regia Monachiensi Observationes astronomicae", "SScT. Speculations in Science and Technology", "Spika Spika", "SpEng Sports Engineering", "SSSSc Springer Series in Surface Sciences", "STMP. Springer Tracts in Modern Physics", "SSCP. Springer Verlag Springer Series on Chemical Physics", "SSEp. Springer Verlag Springer Series on Electrophysics", "SSGSR Springer Verlag Springer Series on Group Geophysics Space Research", "SSOS. Springer Verlag Springer Series on Optical Sciences", "SVPCS Springer Verlag Springer Series on Physics Chemistry Space", "SSSSS Springer Verlag Springer Series on Solid State Sciences", "SSSyn Springer Verlag Springer Series on Synergetics", "SSWP. Springer Verlag Springer Series on Wave Phenomena", "SprRe Sproul Observatory Reprints", "SrLJP Sri Lankan Journal of Physics", "SANUG Srpska Akademiia Nauka i Umetnosti Glas Odeljenje Tekhnichkikh Nauka", "SRXPh SRX Physics", "StarD StarDate Magazine", "StSky Star Sky", "StMet Statistical Methodology", "StaSc Statistical Science", "StCom Statistics and Computing", "StReL Staub Reinhaltung Luft", "SMSPS Stephan Mueller Special Publication Series", "Sterz Sternzeit Mitteilungen der Astrnomischen Vereinigungen Aachen", "IEWS. Stevenage Herts England Peter Peregrinus Ltd IEE Electromagnetic Waves Series", "SteRe Steward Observatory Reprints", "TriTr STLE Tribology Transactions", "SAA.. Stochastic Analysis and Applications", "SHH.. Stochastic Hydrology and Hydraulics", "SSRp. Stochastics and Stochastics Reports", "StoAn Stockholms Observatoriums Annaler", "StoMe Stockholms Observatoriums Meddelande", "StoOR Stockholms Observatoriums Reports", "Strab Strabismus", "Strai Strain", "SGC.. Stratigraphy and Geological Correlation", "Stroj Strojarstvo", "StAst Strolling Astronomer", "StrOp Structural Optimization", "SASn. Studia Astronomica Sinica", "StBio Studia Biophysica", "StGG. Studia Geophysica et Geodaetica", "StuMa Studia Mathematica", "SSTor Studia Societatis Scientiarum Torunensis Sectio F Astronomia", "StAM. Studies in Applied Mathematics", "SCMP. Studies in Condensed Matter Physics", "SGORS Studies in Geophysical Optics and Remote Sensing", "StGeo Studies in Geophysics", "StHEP Studies in High Energy Physics", "StHCG Studies in High Energy Physics Cosmology and Gravitation", "StMaP Studies in Mathematical Physics", "StPTC Studies in Physical and Theoretical Chemistry", "SScEd Studies in Science Education", "StHPM Studies in the History and Philosophy of Modern Physics", "StHMP Studies in the History of Mathematics and the Physical Sciences", "Sttur Studies in turbulence", "SCA.. Studii si Cercetari de Astronomie Bucuresti", "StCeF Studii si Cercetari de Fizica", "StCeM Studii si Cercetari Matematice", "StCMA Studii si Cercetary de Mecanica Aplicata", "SSTA. Subsurface Sensing Technologies and Applications", "SunGe Sun and Geosphere", "Sunwo Sunworld", "SuScT Superconductor Science Technology", "SuMi. Superlattices and Microstructures", "JPhSu Supplement au Journal de Physique", "AnMuS Supplementband zu den Annalen der Munchener Sternwarte", "SAnAp Supplements aux Annales d'Astrophysique", "SuCT. Surface and Coatings Technology", "SurIA Surface and Interface Analysis", "SRL.. Surface Review and Letters", "SurSc Surface Science", "SurSL Surface Science Letter", "SurSR Surface Science Reports", "SurSS Surface Science Spectra", "SGeo. Surveys in Geophysics", "SHEP. Surveys in High Energy Physics", "SvPro Svarochnoe Proizvodstvo", "SvUNT Sverdlovsk Ural skii Nauchnyi Tsentr AN SSSR", "SydOP Sydney Observatory Papers", "SynMe Synthetic Metals", "SAMS. Systems Analysis Modelling Simulation", "SyTec Systems Technology", "TMPGO Tagung ueber Mathematische Probleme Geodaesie Oberwolfach West Germany Bulleting Geodesique", "TANEs Tartu Akademiia Nauk Estonskoi SSR", "TarPr Tartu Astrofizicheskoj Observatorii Preprint", "TarOT Tartu Astrofuusika Observatoorium Teated", "IzTas Tashkent Izdatel Fan", "IzGeo Tbilisi Georgian SSR Izdatel Metsniereba", "TIzSS Tbilisi Izdatel Sabchota Sakartvelo", "TecN. Technical News", "TePhL Technical Physics Letters", "TeLoA Technika Lotnicza i Astronautyczna", "TBBM. Techniques of Biochemical and Biophysical Morphology", "TPhy. Techniques of Physics", "TMKF. Technische Mitteilungen Krupp Forschungsberichte", "TUnGG Technische Univ Geodesy Global Geodyn", "ToIzL Technisch oekonomische Informationen zivilen Luftfahrt", "Tech. Technology", "TeCu. Technology and Culture", "TecRv Technology Review", "Tecto Tectonics", "Tectp Tectonophysics", "TekEl Tekhnicheskaia Elektrodinamika", "TJAu. Telecommunication Journal of Australia", "TDAPR Telecommunications and Data Acquisition Progress Report", "TMOPR Telecommunications and Mission Operations Progress Report", "TRET. Telecommunications and Radio Engineering Telecommunications", "TelIn Telematics Informatics", "Telet Telettra S", "Tell. Tellus", "TellA Tellus Series A", "TellB Tellus Series B Chemical and Physical Meteorology B", "TSDMO Tellus Series Dynamic Meteorology and Oceanography", "TeoEl Teoreticheskaia Elektrotekhnika", "TeoPM Teoreticheskaia i Prikladnaia Mekhanika", "TFFAP Teoriia Funktsii Funktsional nyi Analiz i ikh Prilozheniia", "TeoVP Teoriia Veroiatnostei i ee Primeneniia", "Teplo Teploenergetika", "Tepsg Teplofizicheskie svoistva gazov", "TepT. Teplofizika i Teplotekhnika", "TepVT Teplofizika Vysokikh Temperatur", "TFizG Teploobmen i Fizicheskaia Gazodinamika", "TNEK. Teplovye Napriazheniia Elementakh Konstruktsii", "TeMAE Terrestrial Magnetism and Atmospheric Electricity (Journal of Geophysical Research)", "TeMag Terrestrial Magnetism (Journal of Geophysical Research)", "Tesla TESLA Electronics", "TTPhy Teubner Texte zur Physik", "TexMi Textures and Microstructures", "Ana.. The Analyst", "Agrph The Astrograph", "Astr. The Astronomer", "ATel. The Astronomer's Telegram", "AJ... The Astronomical Journal", "AJS.. The Astronomical Journal Supplement", "AstRv The Astronomical Review", "ApJ.. The Astrophysical Journal", "ApJL. The Astrophysical Journal Letters", "ApJS. The Astrophysical Journal Supplement Series", "BJHS. The British Journal for the History of Science", "BJPS. The British Journal for the Philosophy of Science", "BuSSA The Bulletin of the Seismological Society of America", "ComRv The Communication Review", "CompJ The Computer Journal", "TCD.. The Cryosphere Discussions", "EMBO. The EMBO Journal", "JAS.. The Journal of Agricultural Science", "JChTh The Journal of Chemical Thermodynamics", "JFin. The Journal of Finance", "MatMo The Mathematical Monthly", "Msngr The Messenger", "Neuro The Neuroscientist", "INGN. The Newsletter of the Isaac Newton Group of Telescopes", "Obs.. The Observatory", "OAcJ. The Open Acoustics Journal", "OAeEJ The Open Aerospace Engineering Journal", "OAPJ. The Open Applied Physics Journal", "OAJ.. The Open Astronomy Journal", "OASJ. The Open Atmospheric Science Journal", "OCPJ. The Open Chemical Physics Journal", "OCMPJ The Open Condensed Matter Physics Journal", "OGC.. The Open Geology Journal", "OHJ.. The Open Hydrology Journal", "OMEJ. The Open Mechanical Engineering Journal", "OMJ.. The Open Mechanics Journal", "OMnJ. The Open Mineralogy Journal", "OMPJ. The Open Mineral Processing Journal", "ONJ.. The Open Nanoscience Journal", "ONPPJ The Open Nuclear &", "ONMJ. The Open Numerical Methods Journal", "OOcJ. The Open Oceanagraphy Journalurnal", "OOEJ. The Open Ocean Engineering Journal", "OOJ.. The Open Optics Journal", "OPalJ The Open Paleontology Journal", "OPCJ. The Open Physical Chemistry Journal", "OPPJ. The Open Plasma Physics Journal", "ORSJ. The Open Remote Sensing Journal", "OREJ. The Open Renewable Energy Journal", "OSPJ. The Open Signal Processing Journal", "OSpeJ The Open Spectroscopy Journal", "OSuJ. The Open Superconductors Journal", "OSSJ. The Open Surface Science Journal", "AcTC. Theoretica Chimica Acta", "ThApC Theoretical and Applied Climatology", "ThAFM Theoretical and Applied Fracture Mechanics", "TAM.. Theoretical and Applied Mechanics", "ThCFD Theoretical and Computational Fluid Dynamics", "TMP.. Theoretical and Mathematical Physics", "ThAst Theoretical Astrophysics", "TPAG. Theory and Practice of Applied Geophysics", "PhTea The Physics Teacher", "PlJ.. The Plant Journal", "QJMat The Quarterly Journal of Mathematics", "QJPAM The Quarterly Journal of Pure and Applied Mathematics", "RamJ. The Ramaujan Journal", "RvES. The Review of Economic Studies", "ThEng Thermal Engineering", "TSE.. Thermal Science and Engineering", "SJCLI The Scandinavian Journal of Clinical and Laboratory Investigation", "SciMo The Scientific Monthly", "TSF.. Thin Solid Films", "TETB. Thyssen Edelstahl Technische Berichte", "TrTIM Tiflis Izdatel Metsniereba Akademiia Nauk Gruzinskoi SSR Institut Geofiziki Trudy", "TrGru Tiflis Izdatel Metsniereba Akademiia Nauk Gruzinskoi SSR Matematicheskii Institut Trudy", "IzTif Tiflis Izdatel Tbilisskogo Universiteta", "CorTi Tirada Aparte Universidad Nacional de Cordoba Argentina Observatorio Astronomico", "TiEng Tissue Engineering", "TNKS. Tochnost i Nadezhnost Kiberneticheskikh Sistem", "TSRSG Tohoku University Science Reports Series Geophysics", "TokAB Tokyo Astronomical Bulletin", "TokRe Tokyo Astronomical Observatory Reprints", "TUFER Tokyo Denki University Faculty of Engineering Research Reports", "TAEMm Tokyo Metropolitan College Aeronautical Engineering Memoirs", "TUFEJ Tokyo University Faculty of Engineering Journal Series", "TUISR Tokyo University Institute Industrial Science Report", "TUASB Tokyo University Institute of Space and Aeronautical Science Bulletin", "TUASR Tokyo University Institute of Space and Aeronautical Science Report", "TIOA. Tomsk Institut Optiki Atmosfery CO AN SSSR", "TApPh Topics in Applied Physics", "TAASS Topics in Astrophysics, Astrononmy, and Space Science", "ToCat Topics in Catalysis", "TCPh. Topics in Current Physics", "TPhCh Topics in Physical Chemistry", "ToASC Torino Accademia delle Scienze Classe di Scienze Fisiche Matematiche e Naturali Atti", "TosRv Toshiba Review", "TouCE Toulouse Cepadues Editions", "TrSpT Transactions of Space Technology Japan", "TAGU. Transactions of the American Geophysical Union", "TAMS. Transactions of the American Mathematical Society", "TAPS. Transactions of the American Philosophical Society", "TOYal Transactions of the Astronomical Observatory of Yale University", "TCaPS Transactions of the Cambridge Philosophical Society", "TIMC. Transactions of the Institute of Measurement and Control", "TISCI Transactions of the Institute of Systems, Control and Information Engineers", "IAUTA Transactions of the International Astronomical Union, Series A", "IAUTB Transactions of the International Astronomical Union, Series B", "TIUCS Transactions of the International Union for Cooperation in Solar Research", "TJSAI Transactions of the Japanese Society for Artificial Intelligence", "TATJ. Transactions of the Japanese Society for Artificial Intelligence, Aerospace Technology Japan", "TJSIE Transactions of The Japanese Society of Irrigation, Drainage and Rural Engineering", "TRACE Transactions of the Japan Society of Refrigerating and Air Conditioning Engineers", "TLHSQ Transactions of the Literary and Historical Society of Quebec", "TrOS. Transactions of the Optical Society", "TSICE Transactions of the Society of Instrument and Control Engineers", "TPM.. Transport in Porous Media", "TTSP. Transport Theory and Statistical Physics", "TvOC. Transvaal Observatory Circular", "TSSLW Travaux de la Societe des Sciences et des Letters de Wroclaw", "TOMar Travaux de l'Observatoire de Marseille", "TraGe Travaux Geophysiques", "TrGeo Treatise on Geochemistry", "TTP.. Trends in Theoretical Physics", "TriL. Tribology Letters", "TrLit Trudy Akademiia Nauk Litovskoi", "TrSSR Trudy Akademiia Nauk SSSR Fizicheskii Institut", "TrAlm Trudy Astrofizicheskogo Instituta Alma-Ata", "TrRig Trudy Astrofiz. Lab. Riga", "TrLen Trudy Astronomicheskoj Observatorii Leningrad", "TrPul Trudy Glavnoj Astronomicheskoj Observatorii v Pulkovo", "TrSht Trudy Gosudarstvennogo Astronomicheskogo Instituta", "TrDus Trudy Instituta Astrofiziki Dushanbe", "TrSta Trudy Instituta Astrofiziki Stalinabad", "TrKaz Trudy Kazanskaia Gorodkoj Astronomicheskoj Observatorii", "TrMMO Trudy Moskovskoe Matematicheskoe Obshchestvo", "TrPet Trudy Seminar imeni G Petrovskogo", "TrTas Trudy Tashkentskoj Astronomicheskoj Observatorii", "TrTsA TsAGI Trudy", "ZaTsA TsAGI Uchenye Zapiski", "TrTsI TsIAM Trudy", "TsHUJ Tsing Hua University Journal", "TITas Tsirkulyar Astronomicheskogo Instituta Akademiya Nauk Uzbekskoj SSR", "TsLvo Tsirkulyar Astronomicheskoj Observatorii Lvov", "TsShe Tsirkulyar Shemakhinskoj Astrofizicheskoj Observatorii", "TsSta Tsirkulyar Stalinabadskoj Astronomicheskoj Observatorii", "TsTas Tsirkulyar Tashkentskoj Astronomicheskoj Observatorii", "TsVse Tsirkulyar Vses. astron.-geod. o-va", "TsPul Tsirkulyary Glavnoj Astronomicheskoj Observatorii i Pulkove", "TUAID Tuebingen Universitaet Astronomisches Institut Diplomarbeit", "TJJPT Tuijin Jishu Journal of Propulsion Technology", "TurTe Turbulentnye techeniia", "TJPh. Turkish Journal of Physics", "UkJPO Ukrainian Journal of Physical Optics", "UkFiZ Ukrainskii Fizicheskii Zhurnal", "UkMaZ Ukrainskii Matematicheskii Zhurnal", "Ultmi Ultramicroscopy", "UltIm Ultrasonic Imaging", "Ultra Ultrasonics", "Umsch Umschau", "USOC. Unified System Orbit Computation USOC", "UMIB. Unione Matematica Italiana Bollettino", "UNPSA United Nations Programme on Space Applications", "UniCl Universe Classroom", "UNAer Universita di Napoli Aeritalia S", "UCAFR Universitas Comeniana Acta Facultatis Rerum Naturalium Physica", "UMt1K Universite de Montpellier", "UECBu University Electro Communications Bulletin", "UnECR University Electro Communications Reports", "StARe University Observatory St. Andrews Scotland Reprints", "HawRe University of Hawaii Reprints", "ADUrb University of Illinois Astronomy Department Urbana Illinois", "MicRe University of Michigan Observatory Reprints", "XXFD. University of Minnesota 1969 (XXFD)", "LP... University of Minnesota Minneapolis", "OklRe University of Oklahoma Observatory Reprints", "MAUTx University of Texas Monographs in Astronomy", "PAUTx University of Texas Publications in Astronomy", "Unpub Unpublished", "UAPET Updates in Applied Physics and Electrical Technology", "UppAn Uppsala Astronomical Observatory Annals", "UppOR Uppsala Astronomical Observatory Reports", "USM.. Upravliaiushchie Sistemy i Mashiny", "UrBar Urania (Bracelona)", "Urani Urania (Krakow)", "UrMad Urania (Madrid)", "UGSJR U S Geological Survey Journal Research", "USNOC U.S. Naval Observatory Circulars", "USNOR U.S. Naval Observatory Reports", "UsFiN Uspekhi Fizicheskikh Nauk", "UMAM. Uspekhi Mekhaniki Advances Mechanics", "RpCCA USSR Report Cybernetics Computers Automation Technology JPRS UCC", "RpESc USSR Report Earth Sciences JPRS UES", "RpSpR USSR Report Space", "RpBAM USSR Report Space Biology Aerospace Medicine JPRS USB", "RpEEE USSR Rept Electron Elec Eng JPRS UEE", "RpEn. USSR Rept Energy JPRS UEN", "RpEE. USSR Rept Eng Equipment JPRS UEQ", "RLSBB USSR Rept Life Sci Biomed Behavioral Sci JPRS", "RMTME USSR Rept Machine Tools Metalworking Equipment JPRS UMM", "RpMSM USSR Rept Mater Sci Met JPRS", "RpPhM USSR Rept Phys Math JPRS UPM", "RSBAM USSR Rept Space Biol Aerospace Med Jun JPRS", "RpSBA USSR Rept Space Biol Aerospace Med Sep", "RpTr. USSR Rept Transportation JPRS UTR", "UtMat Utilitas Mathematica", "UtrOv Utrechtse Sterrekundige Overdrukken", "Vacuu Vacuum", "VVORe Van Vleck Observatory Reprints", "VSOLB Variable Star Observers League in Japan - Bulletin", "Vasio Vasiona", "VatOP Vatican Observatory Publications", "VDIF. VDI Forschungsheft", "VDIZ. VDI Z", "VDIZF VDI Zeitschriften Fortschritt Berichte Reihe Stroemungstechnik", "VSD.. Vehicle System Dynamics", "VKAWA Verhandelingen der Koninklijke Akademie van Wetenschappen te Amsterdam", "Verme Vermessungstechnik", "VeWFS Veroeffentlichung der Wilhelm Foerster Sterwarte", "ViHei Veroeffentlichungen der Badischen Landes-Sternwarte zu Heidelberg", "VeHei Veroeffentlichungen der Badischen Sternwarte zu Heidelberg", "VeGG. Veroeffentlichungen der Geod. Geophys", "VeKar Veroeffentlichungen der Grossherzoglichen Sternwarte zu Karlsruhe", "VeBam Veroeffentlichungen der Remeis-Sternwarte zu Bamberg", "VeBab Veroeffentlichungen der Sternwarte Babelsberg", "VeMun Veroeffentlichungen der Sternwarte Munchen", "VeSon Veroeffentlichungen der Sternwarte Sonneberg", "VeKie Veroeffentlichungen der Universitaets-Sternwarte Kiel", "VeKoe Veroeffentlichungen der Universitaets-Sternwarte Koenigsberg Pr.", "VeBB. Veroeffentlichungen der Universitaetssternwarte zu Berlin-Babelsberg", "VeGoe Veroeffentlichungen der Universitaets-Sternwarte zu Goettingen", "VeJen Veroeffentlichungen der Universitaets-Sternwarte zu Jena", "VeLei Veroeffentlichungen der Universitaetssternwarte zu Leipzig", "VeBoc Veroeffentlichungen des Astronomischen Instituts der Ruhr-Universitaet Bochum", "VeARI Veroeffentlichungen des Astronomischen Rechen-Instituts Heidelberg", "VeABD Veroeffentlichungen des Astronomischen Rechen-Instituts zu Berlin-Dahlem", "VeBon Veroeffentlichungen des Astronomisches Institute der Universitaet Bonn", "VeFra Veroeffentlichungen des Astronomisches Institute der Universitaet Frankfurt", "VeBKI Veroeffentlichungen des Bayerische Kommission Int. Erdmessung", "VeKAB Veroeffentlichungen des Koeniglichen Astronomischen Rechen-Instituts zu Berlin", "VeZPE Veroffentlichungen des Zentralinstituts Physik der Erde", "VMKAN Verslagen en Mededeelingen der Kon. Academie van Wetenschappen, Afd. Natuurkunde", "VeLdn Verslag van den staat der Sterrewacht te Leiden", "Vert. Vertica", "Vertf Vertiflite", "Vesmi Vesmir", "VKha. Vestnik Khar'kovskogo Universiteta", "VeKha Vestnik Khar'kov Universitet", "VKie. Vestnik Kievskogo Universiteta Seriya Astronomii", "VeLGU Vestnik LGU", "VeMos Vestnik Moskovskogo Universiteta Seriya 3 Fizika Astronomiya", "VISBD Vibration Inst Shock Vibration Digest", "VIAEA Vienna International Atomic Energy Agency", "VAG.. Vierteljahresschrift der Astronomischen Gesellschaft", "VMed. Vierteljahrschrift für Gerichtliche Medizin und Öffentliches Sanitätswesen", "VNG.. Vierteljahrsschrift der Naturforschenden Gesellschaft in Zürich", "VilCo Villanova University Observatory Contributions", "VilOB Vilnius Astronomijos Observatorijos Biuletenis", "IzVil Vilnius Izdatel Mokslas", "VJS.. Virginia Journal of Science", "VisKi Visnik Kiiv. Univ., Fiz.-Mat. Nauki, Astron", "ViGeo Vissha Geodeziia", "VA... Vistas in Astronomy", "VTJ.. Vitro Technical Journal", "yCat. VizieR Online Data Catalog", "yCatp VizieR Online Data Catalog", "VADVS VKI Advanced Design of Ventilation Systems", "VICFD VKI An Introduction to Computational Fluid Dynamics", "VIMT. VKI An Introduction to Modeling Turbulence", "VAFC. VKI Axial Flow Compressors", "VBLT. VKI Boundary Layers in Turbomachines", "VCCPP VKI Combined Cycles for Power Plants", "VCFD. VKI Computational Fluid Dynamics", "VCFDI VKI Computational Fluid Dynamics for Industrial Flows", "VCGFV VKI Computer Graphics Flow Visualization and Computational Fluid Dynamics", "VGTET VKI Gas Turbine Engine Transient Behaviour", "VIHE. VKI Industrial Heat Exchangers", "VKILV VKI Laser Velocimetry", "VKIMT VKI Measurement and Techniques", "VMTA. VKI Measurement Techniques in Aerodynamics", "VMHT. VKI Methodology Hypersonic Testing", "VMATP VKI Modeling and Applications of Transport Phenomena in Porous Media", "VADMT VKI New Approaches in the Description and Modeling of Turbulence", "VNGG. VKI Numerical Grid Generation", "VNMFT VKI Numerical Methods for Flows in Turbomachinery", "VPIDV VKI Particle Image Displacement Velocimetry", "VKIRT VKI Radial Turbines", "VKISP VKI Spacecraft Propulsion", "VTSF. VKI Turbulent Shear Flows", "VVRD. VKI Vibration Rotor Dynamics", "VLSID VLSI Design", "VAC.. Voies Aviation Civile Fall Winter", "VANTS Voprosy Atomnoi Nauki i Tekhniki Seriia Fizika Plazmy i Problemy Upravliaemykh Termoiadernykh Reaktsii", "VopDP Voprosy Dinamiki i Prochnosti", "VETT. Voprosy Elektroniki Tverdogo Tela", "VopGA Voprosy Gidrodinamiki Atmosfery", "VopK. Voprosy Kibernetiki", "VMOIP Voprosy Metrologicheskogo Obespecheniia Izmereniia Parametrov Tekhnologicheskikh Lazerov", "VoTAS Voprosy Teorii Atomnykh Stolknovenii", "VopTP Voprosy Teorii Plazmy", "VTSAU Voprosy Teorii Sistem Avtomaticheskogo Upravleniia", "VossZ Vossische Zeitung", "IzYak Vsesoiuznaia Konferentsiia Kosmicheskim Lucham Yakutsk USSR Akademiia Nauk SSSR Izvestiia Seriia Fizicheskaia", "IzYer Vsesoiuznaia Konferentsiia Kosmicheskim Lucham Yerevan Armenian SSR Aademiia Nauk SSSR Izvestiia Seriia Fizicheskaia", "RaUkr Vsesoiuznyi Simpozium Difraktsii i Rasprostraneniiu Voln Lvov Ukrainian SSR Radiofizika", "VnPM. Vychislitel naia i Prikladnaia Matematika", "VnMP. Vychislitel nye Metody i Programmirovanie", "VyGeo Vyssha Geodeziia", "WarRe Warsaw University Reprints", "WasOA Washburn Observatory Astrophysics", "GMS.. Washington DC American Geophysical Union Geophysical Monograph Series", "WRR.. Water Resources Research", "WavEl Wave Electronics", "WaMot Wave Motion", "WRCM. Waves in Random and Complex Media", "WRM.. Waves in Random Media", "Wear. Wear", "WearB Wear B", "Wthr. Weather", "WtFor Weather and Forecasting", "WeiEn Weight Engineering", "WeldJ Welding Journal", "Werk. Werkgroepnieuws", "JIMO. WGN, Journal of the International Meteor Organization", "WilOO Williamstown Observatory Observations", "WiEn. Wind Energy", "WiEng Wind Engineering", "WisBT Wissenschaftliche Berichte AEG Telefunken", "WisZe Wissenschaftliche Zeitschrift", "WSAAA Workshop Series of the Asociacion Argentina de Astronomia", "WCRp. World Climate Report", "WJCMP World Journal of Condensed Matter Physics", "WJM.. World Journal of Mechanics", "WJNSE World Journal of Nano Science and Engineering", "WJNST World Journal of Nuclear Science and Technology", "WroRe Wroclaw Astronomical Observatory Reprints", "Wuli. Wuli", "YaFiz Yadernaya Fizika", "YalOY Yale University Observatory Reports for the Year", "YUFEM Yamaguchi University Faculty of Engineering Memoirs", "YUTR. Yamaguchi University Technology Reports", "YamC. Yamamoto Circular", "ZaDN. Zagadnienia Drgan Nieliniowych", "JAMP. ZAMP Journal of Applied Mathematics and Physics", "ZaLab Zavodskaia Laboratoriia", "ZaMM. Zeitschrift Angewandte Mathematik und Mechanik", "ZaMP. Zeitschrift Angewandte Mathematik und Physik", "ZFHDG Zeitschrift der Fachsektion Hydrogeologie in der Deutschen Geologischen Gesellschaft", "ZeIE. Zeitschrift elektrische Informations und Energietechnik", "ZAGeo Zeitschrift fur Angewandte Geographie", "ZAPhy Zeitschrift fur Angewandte Physik", "ZAAC. Zeitschrift fur Anorganische und Allgemeine Chemie", "ZA... Zeitschrift fur Astrophysik", "ZEVGA Zeitschrift fur Eisenbahnwesen und Verkehrstechnik Glasers Annalen", "ZEAPC Zeitschrift für Elektrochemie und Angewandte Physikalische Chemie", "ZFlu. Zeitschrift fur Flugwissenschaften", "ZFlWe Zeitschrift fur Flugwissenschaften und Weltraumforschung", "ZGm.. Zeitschrift fur Geomorphologie", "ZGmS. Zeitschrift fur Geomorphologie Supplement", "ZGeo. Zeitschrift fur Geophysik", "ZGlGl Zeitschrift fur Gletscherkunde und Glazialgeologie", "ZK... Zeitschrift fur Kristallographie", "ZKMP. Zeitschrift fur Kristallographie Mineralogie und Petrographie", "ZKS.. Zeitschrift fur Kristallographie Supplements", "ZMP.. Zeitschrift für Mathematik und Physik", "ZMetl Zeitschrift fur Metallkunde", "ZeMet Zeitschrift fur Meteorologie", "ZPhy. Zeitschrift fur Physik", "ZPhyA Zeitschrift fur Physik A Hadrons and Nuclei", "ZPC.. Zeitschrift fur Physikalische Chemie", "ZPCF. Zeitschrift fur Physikalische Chemie Frankfurt", "ZPCL. Zeitschrift fur Physikalische Chemie Leipzig", "ZPCNF Zeitschrift fur Physikalische Chemie Neue Folge", "ZPCW. Zeitschrift fur Physikalische Chemie Wiesbaden", "ZPhyB Zeitschrift fur Physik B Condensed Matter", "ZPhyC Zeitschrift fur Physik C Particles and Fields", "ZPhyD Zeitschrift fur Physik D Atoms Molecules Clusters", "ZNatA Zeitschrift Naturforschung Teil A", "ZNatB Zeitschrift Naturforschung Teil B", "ZePAN Zeitschrift Physik Atomic Nuclei", "ZVer. Zeitschrift Vermessungswes.", "ZWer. Zeitschrift Werkstofftechnik", "ZemVs Zemlia i Vselennaia", "Zenit Zenit", "MiTau Zentralinstitut fuer Astrophysik Mitteilungen des Karl-Schwarzschild-Observatoriums Tautenburg", "MitVS Zentralinstitut fuer Astrophysik Sternwarte Sonneberg Mitteilungen ueber Veraenderliche Sterne", "ZhPmR ZhETF Pis ma Redaktsiiu", "ZhETF Zhurnal Eksperimental noi i Teoreticheskoi Fiziki", "ZhFK. Zhurnal Fizicheskoi Khimii", "ZNPFK Zhurnal Nauchnoi i Prikladnoi Fotografii i Kinematografii", "ZhPhy Zhurnal Physik", "ZhPS. Zhurnal Prikladnoi Spektroskopii", "ZhTFi Zhurnal Tekhnicheskoi Fiziki", "ZVMMF Zhurnal Vychislitel noi Matematiki i Matematicheskoi Fiziki", "ZiZa. Ziran Zazhi", "Zprav Zpravodaj VZLU", "ZvDeb Zvaigsnota Debess", }; static const int njournals = sizeof( journals ) / sizeof( journals[0] ); hs-bibutils-5.5/bibutils/modsin.h0000644000000000000000000000075512445605732015274 0ustar0000000000000000/* * modsin.h * * Copyright (c) Chris Putnam 2004-2014 * * Source code released under the GPL version 2 * */ #ifndef MODSIN_H #define MODSIN_H #include "newstr.h" #include "fields.h" #include "reftypes.h" extern int modsin_readf( FILE *fp, char *buf, int bufsize, int *bufpos, newstr *line, newstr *reference, int *fcharset ); extern int modsin_processf( fields *medin, char *data, char *filename, long nref ); extern void modsin_initparams( param *p, const char *progname ); #endif hs-bibutils-5.5/bibutils/endin.h0000644000000000000000000000145712445605732015100 0ustar0000000000000000/* * endin.h * * Copyright (c) Chris Putnam 2003-2014 * * Source code released under the GPL version 2 * */ #ifndef ENDIN_H #define ENDIN_H #include "newstr.h" #include "fields.h" #include "reftypes.h" #include "bibutils.h" extern int endin_readf( FILE *fp, char *buf, int bufsize, int *bufpos, newstr *line, newstr *reference, int *fcharset ); extern int endin_processf( fields *endin, char *p, char *filename, long nref ); extern int endin_typef( fields *endin, char *filename, int nrefs, param *p, variants *all, int nall ); extern int endin_convertf( fields *endin, fields *info, int reftype, param *p, variants *all, int nall ); extern int endin_cleanf( bibl *bin, param *p ); extern void endin_initparams( param *p, const char *progname ); extern variants end_all[]; extern int end_nall; #endif hs-bibutils-5.5/bibutils/isiin.c0000644000000000000000000002223112445605732015102 0ustar0000000000000000/* * isiin.c * * Copyright (c) Chris Putnam 2004-2013 * * Program and source code released under the GPL version 2 * */ #include #include #include #include "is_ws.h" #include "newstr.h" #include "newstr_conv.h" #include "fields.h" #include "name.h" #include "title.h" #include "serialno.h" #include "reftypes.h" #include "isiin.h" /***************************************************** PUBLIC: void isiin_initparams() *****************************************************/ void isiin_initparams( param *p, const char *progname ) { p->readformat = BIBL_ISIIN; p->charsetin = BIBL_CHARSET_DEFAULT; p->charsetin_src = BIBL_SRC_DEFAULT; p->latexin = 0; p->xmlin = 0; p->utf8in = 0; p->nosplittitle = 0; p->verbose = 0; p->addcount = 0; p->output_raw = 0; p->readf = isiin_readf; p->processf = isiin_processf; p->cleanf = NULL; p->typef = isiin_typef; p->convertf = isiin_convertf; p->all = isi_all; p->nall = isi_nall; list_init( &(p->asis) ); list_init( &(p->corps) ); if ( !progname ) p->progname = NULL; else p->progname = strdup( progname ); } /***************************************************** PUBLIC: int isiin_readf() *****************************************************/ /* ISI definition of a tag is strict: * char 1 = uppercase alphabetic character * char 2 = uppercase alphabetic character or digit */ static int isiin_istag( char *buf ) { if ( ! (buf[0]>='A' && buf[0]<='Z') ) return 0; if ( ! (((buf[1]>='A' && buf[1]<='Z'))||(buf[1]>='0'&&buf[1]<='9'))) return 0; return 1; } static int readmore( FILE *fp, char *buf, int bufsize, int *bufpos, newstr *line ) { if ( line->len ) return 1; else return newstr_fget( fp, buf, bufsize, bufpos, line ); } int isiin_readf( FILE *fp, char *buf, int bufsize, int *bufpos, newstr *line, newstr *reference, int *fcharset ) { int haveref = 0, inref = 0; char *p; *fcharset = CHARSET_UNKNOWN; while ( !haveref && readmore( fp, buf, bufsize, bufpos, line ) ) { if ( !line->data ) continue; p = &(line->data[0]); /* Recognize UTF8 BOM */ if ( line->len > 2 && (unsigned char)(p[0])==0xEF && (unsigned char)(p[1])==0xBB && (unsigned char)(p[2])==0xBF ) { *fcharset = CHARSET_UNICODE; p += 3; } /* Each reference ends with 'ER ' */ if ( isiin_istag( p ) ) { if ( !strncmp( p, "FN ", 3 ) ) { if (strncasecmp( p, "FN ISI Export Format",20)){ fprintf( stderr, ": warning file FN type not '%s' not recognized.\n", /*r->progname,*/ p ); } } else if ( !strncmp( p, "VR ", 3 ) ) { if ( strncasecmp( p, "VR 1.0", 6 ) ) { fprintf(stderr,": warning file version number '%s' not recognized, expected 'VR 1.0'\n", /*r->progname,*/ p ); } } else if ( !strncmp( p, "ER", 2 ) ) haveref = 1; else { newstr_addchar( reference, '\n' ); newstr_strcat( reference, p ); inref = 1; } newstr_empty( line ); } /* not a tag, but we'll append to the last values */ else if ( inref ) { newstr_addchar( reference, '\n' ); newstr_strcat( reference, p ); newstr_empty( line ); } else { newstr_empty( line ); } } return haveref; } /***************************************************** PUBLIC: int isiin_processf() *****************************************************/ static char * process_isiline( newstr *tag, newstr *data, char *p ) { int i; /* collect tag and skip past it */ i = 0; while ( i<2 && *p && *p!='\r' && *p!='\n') { newstr_addchar( tag, *p++ ); i++; } while ( *p==' ' || *p=='\t' ) p++; while ( *p && *p!='\r' && *p!='\n' ) newstr_addchar( data, *p++ ); newstr_trimendingws( data ); while ( *p=='\r' || *p=='\n' ) p++; return p; } int isiin_processf( fields *isiin, char *p, char *filename, long nref ) { int status, n, ret = 1; newstr tag, data; newstrs_init( &tag, &data, NULL ); while ( *p ) { newstrs_empty( &tag, &data, NULL ); p = process_isiline( &tag, &data, p ); if ( !data.len ) continue; if ( (tag.len>1) && isiin_istag( tag.data ) ) { status = fields_add( isiin, tag.data, data.data, 0 ); if ( status!=FIELDS_OK ) { ret = 0; goto out; } } else { n = fields_num( isiin ); if ( n>0 ) { /* only one AU or AF for list of authors */ if ( !strcmp( isiin->tag[n-1].data,"AU") ){ status = fields_add( isiin, "AU", data.data, 0); if ( status!=FIELDS_OK ) ret = 0; } else if ( !strcmp( isiin->tag[n-1].data,"AF") ){ status = fields_add( isiin, "AF", data.data, 0); if ( status!=FIELDS_OK ) ret = 0; } /* otherwise append multiline data */ else { newstr_addchar( &(isiin->data[n-1]),' '); newstr_strcat( &(isiin->data[n-1]), data.data ); if ( newstr_memerr( &(isiin->data[n-1]) ) ) ret = 0; } if ( ret==0 ) goto out; } } } out: newstrs_free( &data, &tag, NULL ); return ret; } /***************************************************** PUBLIC: int isiin_typef() *****************************************************/ int isiin_typef( fields *isiin, char *filename, int nref, param *p, variants *all, int nall ) { char *refnum = ""; int n, reftype, nrefnum; n = fields_find( isiin, "PT", 0 ); nrefnum = fields_find ( isiin, "UT", 0 ); if ( nrefnum!=-1 ) refnum = isiin->data[nrefnum].data; if ( n!=-1 ) reftype = get_reftype( (isiin->data[n]).data, nref, p->progname, all, nall, refnum ); else reftype = get_reftype( "", nref, p->progname, all, nall, refnum ); /* default */ return reftype; } /***************************************************** PUBLIC: int isiin_convertf(), returns BIBL_OK or BIBL_ERR_MEMERR *****************************************************/ static int isiin_keyword_process( fields *info, char *newtag, char *p, int level ) { int fstatus, status = BIBL_OK; newstr keyword; newstr_init( &keyword ); while ( *p ) { p = newstr_cpytodelim( &keyword, skip_ws( p ), ";", 1 ); if ( newstr_memerr( &keyword ) ) { status = BIBL_ERR_MEMERR; goto out; } if ( keyword.len ) { fstatus = fields_add( info, newtag, keyword.data, level ); if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; } } } out: newstr_free( &keyword ); return status; } /* pull off authors first--use AF before AU */ static int isiin_addauthors( fields *isiin, fields *info, int reftype, variants *all, int nall, list *asis, list *corps ) { char *newtag, *authortype, use_af[]="AF", use_au[]="AU"; int level, i, n, has_af=0, has_au=0, nfields, ok; newstr *t, *d; nfields = fields_num( isiin ); for ( i=0; idata, "AU" ) ) has_au++; if ( !strcasecmp( t->data, "AF" ) ) has_af++; } if ( has_af ) authortype = use_af; else authortype = use_au; for ( i=0; idata, "AU" ) ) has_au++; if ( strcasecmp( t->data, authortype ) ) continue; d = fields_value( isiin, i, FIELDS_STRP ); n = process_findoldtag( authortype, reftype, all, nall ); level = ((all[reftype]).tags[n]).level; newtag = all[reftype].tags[n].newstr; ok = name_add( info, newtag, d->data, level, asis, corps ); if ( !ok ) return BIBL_ERR_MEMERR; } return BIBL_OK; } static void isiin_report_notag( param *p, char *tag ) { if ( p->verbose && strcmp( tag, "PT" ) ) { if ( p->progname ) fprintf( stderr, "%s: ", p->progname ); fprintf( stderr, "Did not identify ISI tag '%s'\n", tag ); } } static int isiin_simple( fields *info, char *tag, char *value, int level ) { int fstatus = fields_add( info, tag, value, level ); if ( fstatus==FIELDS_OK ) return BIBL_OK; else return BIBL_ERR_MEMERR; } int isiin_convertf( fields *isiin, fields *info, int reftype, param *p, variants *all, int nall ) { int process, level, i, n, nfields, ok, status; newstr *t, *d; char *newtag; status = isiin_addauthors( isiin, info, reftype, all, nall, &(p->asis), &(p->corps) ); if ( status!=BIBL_OK ) return status; nfields = fields_num( isiin ); for ( i=0; idata, "AU" ) || !strcasecmp( t->data, "AF" ) ) continue; n = translate_oldtag( t->data, reftype, all, nall, &process, &level, &newtag ); if ( n==-1 ) { isiin_report_notag( p, t->data ); continue; } if ( process == ALWAYS ) continue; /* add in core code */ d = fields_value( isiin, i, FIELDS_STRP ); ok = 1; switch ( process ) { case SIMPLE: case DATE: status = isiin_simple( info, newtag, d->data, level ); break; case PERSON: ok = name_add( info, newtag, d->data, level, &(p->asis), &(p->corps) ); if ( ok ) status = BIBL_OK; else status = BIBL_ERR_MEMERR; break; case TITLE: ok = title_process( info, newtag, d->data, level, p->nosplittitle ); if ( ok ) status = BIBL_OK; else status = BIBL_ERR_MEMERR; break; case KEYWORD: status = isiin_keyword_process( info, newtag, d->data, level ); break; case SERIALNO: ok = addsn( info, d->data, level ); if ( ok ) status = BIBL_OK; else status = BIBL_ERR_MEMERR; break; /* do nothing if process==TYPE || process==ALWAYS */ default: status = BIBL_OK; break; } if ( status!=BIBL_OK ) return status; } return status; } hs-bibutils-5.5/bibutils/risout.c0000644000000000000000000004744612445605732015333 0ustar0000000000000000/* * risout.c * * Copyright (c) Chris Putnam 2003-2013 * * Source code released under the GPL version 2 * */ #include #include #include #include #include "utf8.h" #include "newstr.h" #include "strsearch.h" #include "fields.h" #include "doi.h" #include "name.h" #include "risout.h" void risout_initparams( param *p, const char *progname ) { p->writeformat = BIBL_RISOUT; p->format_opts = 0; p->charsetout = BIBL_CHARSET_DEFAULT; p->charsetout_src = BIBL_SRC_DEFAULT; p->latexout = 0; p->utf8out = BIBL_CHARSET_UTF8_DEFAULT; p->utf8bom = BIBL_CHARSET_BOM_DEFAULT; p->xmlout = BIBL_XMLOUT_FALSE; p->nosplittitle = 0; p->verbose = 0; p->addcount = 0; p->singlerefperfile = 0; if ( p->charsetout == BIBL_CHARSET_UNICODE ) { p->utf8out = p->utf8bom = 1; } p->headerf = risout_writeheader; p->footerf = NULL; p->writef = risout_write; } enum { TYPE_UNKNOWN, TYPE_STD, /* standard/generic */ TYPE_ABSTRACT, /* abstract */ TYPE_ARTICLE, /* article */ TYPE_BOOK, /* book */ TYPE_CASE, /* case */ TYPE_INBOOK, /* chapter */ TYPE_CONF, /* conference */ TYPE_ELEC, /* electronic */ TYPE_HEAR, /* hearing */ TYPE_MAGARTICLE, /* magazine article */ TYPE_NEWS, /* newspaper */ TYPE_MPCT, /* mpct */ TYPE_PAMP, /* pamphlet */ TYPE_PATENT, /* patent */ TYPE_PCOMM, /* personal communication */ TYPE_PROGRAM, /* program */ TYPE_REPORT, /* report */ TYPE_STATUTE, /* statute */ TYPE_THESIS, /* thesis */ TYPE_MASTERSTHESIS, /* thesis */ TYPE_PHDTHESIS, /* thesis */ TYPE_DIPLOMATHESIS, /* thesis */ TYPE_DOCTORALTHESIS, /* thesis */ TYPE_HABILITATIONTHESIS, /* thesis */ TYPE_MAP, /* map, cartographic data */ TYPE_UNPUBLISHED, /* unpublished */ }; static void write_type( FILE *fp, int type ) { switch( type ) { case TYPE_UNKNOWN: fprintf( fp, "TYPE_UNKNOWN" ); break; case TYPE_STD: fprintf( fp, "TYPE_STD" ); break; case TYPE_ABSTRACT: fprintf( fp, "TYPE_ABSTRACT" ); break; case TYPE_ARTICLE: fprintf( fp, "TYPE_ARTICLE" ); break; case TYPE_BOOK: fprintf( fp, "TYPE_BOOK" ); break; case TYPE_CASE: fprintf( fp, "TYPE_CASE" ); break; case TYPE_INBOOK: fprintf( fp, "TYPE_INBOOK" ); break; case TYPE_CONF: fprintf( fp, "TYPE_CONF" ); break; case TYPE_ELEC: fprintf( fp, "TYPE_ELEC" ); break; case TYPE_HEAR: fprintf( fp, "TYPE_HEAR" ); break; case TYPE_MAGARTICLE: fprintf( fp, "TYPE_MAGARTICLE" ); break; case TYPE_NEWS: fprintf( fp, "TYPE_NEWS" ); break; case TYPE_MPCT: fprintf( fp, "TYPE_MCPT" ); break; case TYPE_PAMP: fprintf( fp, "TYPE_PAMP" ); break; case TYPE_PATENT: fprintf( fp, "TYPE_PATENT" ); break; case TYPE_PCOMM: fprintf( fp, "TYPE_PCOMM" ); break; case TYPE_PROGRAM: fprintf( fp, "TYPE_PROGRAM" ); break; case TYPE_REPORT: fprintf( fp, "TYPE_REPORT" ); break; case TYPE_STATUTE: fprintf( fp, "TYPE_STATUTE" ); break; case TYPE_THESIS: fprintf( fp, "TYPE_THESIS" ); break; case TYPE_MASTERSTHESIS: fprintf( fp, "TYPE_MASTERSTHESIS" ); break; case TYPE_PHDTHESIS: fprintf( fp, "TYPE_PHDTHESIS" ); break; case TYPE_DIPLOMATHESIS: fprintf( fp, "TYPE_DIPLOMATHESIS" ); break; case TYPE_DOCTORALTHESIS: fprintf( fp, "TYPE_DOCTORALTHESIS" ); break; case TYPE_HABILITATIONTHESIS: fprintf( fp, "TYPE_HABILITATIONTHESIS" ); break; case TYPE_MAP: fprintf( fp, "TYPE_MAP" ); break; case TYPE_UNPUBLISHED: fprintf( fp, "TYPE_UNPUBLISHED" ); break; default: fprintf( fp, "Error - type not in enum" );break; } } typedef struct match_type { char *name; int type; } match_type; /* Try to determine type of reference from * */ static int get_type_genre( fields *f, param *p ) { match_type match_genres[] = { { "academic journal", TYPE_ARTICLE }, { "article", TYPE_ARTICLE }, { "journal article", TYPE_ARTICLE }, { "magazine", TYPE_MAGARTICLE }, { "conference publication", TYPE_CONF }, { "newspaper", TYPE_NEWS }, { "legislation", TYPE_STATUTE }, { "communication", TYPE_PCOMM }, { "hearing", TYPE_HEAR }, { "electronic", TYPE_ELEC }, { "legal case and case notes", TYPE_CASE }, { "book chapter", TYPE_INBOOK }, { "Ph.D. thesis", TYPE_PHDTHESIS }, { "Masters thesis", TYPE_MASTERSTHESIS }, { "Diploma thesis", TYPE_DIPLOMATHESIS }, { "Doctoral thesis", TYPE_DOCTORALTHESIS }, { "Habilitation thesis", TYPE_HABILITATIONTHESIS }, { "report", TYPE_REPORT }, { "abstract or summary", TYPE_ABSTRACT }, { "patent", TYPE_PATENT }, { "unpublished", TYPE_UNPUBLISHED }, { "map", TYPE_MAP }, }; int nmatch_genres = sizeof( match_genres ) / sizeof( match_genres[0] ); int type, i, j; char *tag, *value; type = TYPE_UNKNOWN; for ( i=0; iverbose ) { tag = ( char * ) fields_tag( f, i, FIELDS_CHRP ); if ( p->progname ) fprintf( stderr, "%s: ", p->progname ); fprintf( stderr, "Type from tag '%s' data '%s': ", tag, value ); write_type( stderr, type ); fprintf( stderr, "\n" ); } if ( type==TYPE_UNKNOWN ) { if ( !strcasecmp( value, "periodical" ) ) type = TYPE_ARTICLE; else if ( !strcasecmp( value, "thesis" ) ) type = TYPE_THESIS; else if ( !strcasecmp( value, "book" ) ) { if ( fields_level( f, i )==0 ) type=TYPE_BOOK; else type=TYPE_INBOOK; } else if ( !strcasecmp( value, "collection" ) ) { if ( fields_level( f, i )==0 ) type=TYPE_BOOK; else type=TYPE_INBOOK; } } } if ( p->verbose ) { if ( p->progname ) fprintf( stderr, "%s: ", p->progname ); fprintf( stderr, "Type from genre element: " ); write_type( stderr, type ); fprintf( stderr, "\n" ); } return type; } /* Try to determine type of reference from * */ static int get_type_resource( fields *f, param *p ) { match_type match_res[] = { { "software, multimedia", TYPE_PROGRAM }, { "cartographic", TYPE_MAP }, }; int nmatch_res = sizeof( match_res ) / sizeof( match_res[0] ); int type, i, j; char *value; vplist a; type = TYPE_UNKNOWN; vplist_init( &a ); fields_findv_each( f, LEVEL_ANY, FIELDS_CHRP, &a, "RESOURCE" ); for ( i=0; iverbose ) { if ( p->progname ) fprintf( stderr, "%s: ", p->progname ); fprintf( stderr, "Type from tag 'RESOURCE' data '%s': ", value ); write_type( stderr, type ); fprintf( stderr, "\n" ); } } if ( p->verbose ) { if ( p->progname ) fprintf( stderr, "%s: ", p->progname ); fprintf( stderr, "Type from resource element: " ); write_type( stderr, type ); fprintf( stderr, "\n" ); } vplist_free( &a ); return type; } /* Try to determine type of reference from and */ /* */ static int get_type_issuance( fields *f, param *p ) { int type = TYPE_UNKNOWN; int i, monographic = 0, monographic_level = 0; // int text = 0; for ( i=0; in; ++i ) { if ( !strcasecmp( f->tag[i].data, "issuance" ) && !strcasecmp( f->data[i].data, "MONOGRAPHIC" ) ){ monographic = 1; monographic_level = f->level[i]; } // if ( !strcasecmp( f->tag[i].data, "typeOfResource" ) && // !strcasecmp( f->data[i].data,"text") ) { // text = 1; // } } // if ( monographic && text ) { if ( monographic ) { if ( monographic_level==0 ) type=TYPE_BOOK; else if ( monographic_level>0 ) type=TYPE_INBOOK; } if ( p->verbose ) { if ( p->progname ) fprintf( stderr, "%s: ", p->progname ); fprintf( stderr, "Type from issuance/typeOfReference elements: " ); write_type( stderr, type ); fprintf( stderr, "\n" ); } return type; } static int get_type( fields *f, param *p ) { int type; type = get_type_genre( f, p ); if ( type==TYPE_UNKNOWN ) type = get_type_resource( f, p ); if ( type==TYPE_UNKNOWN ) type = get_type_issuance( f, p ); if ( type==TYPE_UNKNOWN ) { if ( fields_maxlevel( f ) > 0 ) type = TYPE_INBOOK; else type = TYPE_STD; } if ( p->verbose ) { if ( p->progname ) fprintf( stderr, "%s: ", p->progname ); fprintf( stderr, "Final type: " ); write_type( stderr, type ); fprintf( stderr, "\n" ); } return type; } static void output_type( FILE *fp, int type, param *p ) { match_type tyout[] = { { "STD", TYPE_STD }, { "ABST", TYPE_ABSTRACT }, { "JOUR", TYPE_ARTICLE }, { "BOOK", TYPE_BOOK }, { "CASE", TYPE_CASE }, { "CHAP", TYPE_INBOOK }, { "CONF", TYPE_CONF }, { "ELEC", TYPE_ELEC }, { "HEAR", TYPE_HEAR }, { "MGZN", TYPE_MAGARTICLE }, { "NEWS", TYPE_NEWS }, { "MPCT", TYPE_MPCT }, { "PAMP", TYPE_PAMP }, { "PAT", TYPE_PATENT }, { "PCOMM",TYPE_PCOMM }, { "COMP", TYPE_PROGRAM }, { "RPRT", TYPE_REPORT }, { "STAT", TYPE_STATUTE }, { "THES", TYPE_THESIS }, { "THES", TYPE_MASTERSTHESIS }, { "THES", TYPE_PHDTHESIS }, { "THES", TYPE_DIPLOMATHESIS }, { "THES", TYPE_DOCTORALTHESIS }, { "THES", TYPE_HABILITATIONTHESIS }, { "MAP", TYPE_MAP }, { "UNPB", TYPE_UNPUBLISHED } }; int ntyout = sizeof( tyout ) / sizeof( tyout[0] ); int i, found; fprintf( fp, "TY - " ); found = 0; for ( i=0; iprogname ) fprintf( stderr, "%s: ", p->progname ); fprintf( stderr, "Internal Error: Cannot identify type %d\n", type ); fprintf( fp, "STD" ); } fprintf( fp, "\n" ); } static void output_people( FILE *fp, fields *f, char *tag, char *ristag, int level ) { newstr oneperson; vplist people; int i; newstr_init( &oneperson ); vplist_init( &people ); fields_findv_each( f, level, FIELDS_CHRP, &people, tag ); for ( i=0; idata ); if ( subttl ) { if ( mainttl->len > 0 && mainttl->data[ mainttl->len - 1 ]!='?' ) fprintf( fp, ":" ); fprintf( fp, " %s", subttl->data ); } fprintf( fp, "\n" ); } static int type_is_element( int type ) { if ( type==TYPE_ARTICLE ) return 1; if ( type==TYPE_INBOOK ) return 1; if ( type==TYPE_MAGARTICLE ) return 1; if ( type==TYPE_NEWS ) return 1; if ( type==TYPE_ABSTRACT ) return 1; if ( type==TYPE_CONF ) return 1; return 0; } static int type_uses_journal( int type ) { if ( type==TYPE_ARTICLE ) return 1; if ( type==TYPE_MAGARTICLE ) return 1; return 0; } static void output_alltitles( FILE *fp, fields *f, int type ) { output_titlecore( fp, f, "TI", 0, "TITLE", "SUBTITLE" ); output_titlecore( fp, f, "T2", -1, "SHORTTITLE", "SHORTSUBTITLE" ); if ( type_is_element( type ) ) { if ( type_uses_journal( type ) ) output_titlecore( fp, f, "JO", 1, "TITLE", "SUBTITLE" ); else output_titlecore( fp, f, "BT", 1, "TITLE", "SUBTITLE" ); output_titlecore( fp, f, "T3", 2, "TITLE", "SUBTITLE" ); } else { output_titlecore( fp, f, "T3", 1, "TITLE", "SUBTITLE" ); } } static void output_pages( FILE *fp, fields *f ) { char *sn = fields_findv( f, LEVEL_ANY, FIELDS_CHRP, "PAGESTART" ); char *en = fields_findv( f, LEVEL_ANY, FIELDS_CHRP, "PAGEEND" ); char *ar; if ( sn || en ) { if ( sn ) fprintf( fp, "SP - %s\n", sn ); if ( en ) fprintf( fp, "EP - %s\n", en ); } else { ar = fields_findv( f, LEVEL_ANY, FIELDS_CHRP, "ARTICLENUMBER" ); if ( ar ) fprintf( fp, "SP - %s\n", ar ); } } static void output_keywords( FILE *fp, fields *f ) { vplist vpl; int i; vplist_init( &vpl ); fields_findv_each( f, LEVEL_ANY, FIELDS_CHRP, &vpl, "KEYWORD" ); for ( i=0; iutf8bom ) utf8_writebom( outptr ); } hs-bibutils-5.5/src/0000755000000000000000000000000012445605732012575 5ustar0000000000000000hs-bibutils-5.5/src/Text/0000755000000000000000000000000012445605732013521 5ustar0000000000000000hs-bibutils-5.5/src/Text/Bibutils.hsc0000644000000000000000000003675512445605732016015 0ustar0000000000000000{-# CFILES cbits/stub.c #-} ----------------------------------------------------------------------------- -- | -- Module : Text..Bibutils -- Copyright : (C) 2008 Andrea Rossato -- License : BSD3 -- -- Maintainer : andrea.rossato@unitn.it -- Stability : provisional -- Portability : portable -- -- Here is a simple program using hs-bibutils to conver a MODS -- collection into a bibtex file, sending the output to stdout: -- -- > import Text.Bibutils -- > -- > main :: IO () -- > main = do -- > bibl <- bibl_init -- > param <- bibl_initparams mods_in bibtex_out "mods2bibtex" -- > setFormatOpts param [bibout_brackets, bibout_uppercase] -- > setBOM param -- > setVerbose param -- > bibl_read param bibl "/path/to/bibtex.bib" -- > bibl_write param bibl "-" -- > bibl_free bibl -- > bibl_freeparams param -- ----------------------------------------------------------------------------- module Text.Bibutils ( -- * Basic Functions Bibl , Param (..) , bibl_init , bibl_initparams , bibl_read , bibl_write , bibl_readasis , bibl_addtoasis , bibl_readcorps , bibl_addtocorps , bibl_free , bibl_freeparams , bibl_reporterr -- * Auxiliary Functions , numberOfRefs , status -- ** Functions for Setting Parameters , setParam , setFormatOpts , setCharsetIn , setCharsetOut , setBOM , unsetBOM , setNoSplitTitle , unsetNoSplitTitle , setLatexOut , unsetLatexOut , setXmlOut , unsetXmlOut , setAddcount , unsetAddcount , setSinglerefperfile , unsetSinglerefperfile , setVerbose , unsetVerbose -- * Input Formats , BiblioIn , mods_in , bibtex_in , ris_in , endnote_in , copac_in , isi_in , medline_in , biblatex_in , endnotexml_in -- * Output Formats , BiblioOut , mods_out , bibtex_out , ris_out , endnote_out , isi_out , word2007_out , adsab_out -- * Options for Specific Output Formats , FormatOpt , bibout_finalcomma , bibout_singledash , bibout_whitespace , bibout_brackets , bibout_uppercase , bibout_strictkey , modsout_dropkey , wordout_dropkey -- * Charsets , Charset , bibl_charset_unknown , bibl_charset_unicode , bibl_charset_gb18030 , bibl_charset_default -- * Return Status , Status , bibl_ok , bibl_err_badinput , bibl_err_memerr , bibl_err_cantopen ) where import Control.Monad import Foreign.C import Foreign -- | A type for storing the C struct with the bibliography data. -- Mostly opaque to the Haskell side. See 'numberOfRefs' to retrieve -- the number of references stored in the struct. newtype Bibl = Bibl { nrefs :: CLong } instance Storable Bibl where sizeOf _ = #{size bibl} alignment _ = #{alignment bibl} peek p = #{peek bibl, nrefs } p >>= return . Bibl poke p (Bibl n) = #{poke bibl, nrefs } p n -- | Initialize the 'Bibl' C struct. Usually the first function being -- called. bibl_init :: IO (ForeignPtr Bibl) bibl_init = alloca $ \p -> do c_bibl_init p newForeignPtr_ p -- | Free the 'Bibl' C struct. bibl_free :: ForeignPtr Bibl -> IO () bibl_free bibl = withForeignPtr bibl c_bibl_free -- | Retrieve the number of references from a 'Bibl' C struct. numberOfRefs :: ForeignPtr Bibl -> IO Int numberOfRefs b = withForeignPtr b $ \cb -> peek cb >>= return . fromIntegral . nrefs -- | A type for storing the Param C struct. It should be accessed with -- the functions provided, such as 'setCharsetIn', etc. data Param = Param { redaformat :: CInt , writeformat :: CInt , charsetin :: CInt , charsetin_src :: CUChar , latexin :: CUChar , utf8in :: CUChar , xmlin :: CUChar , nosplittitle :: CUChar , charsetout :: CInt , charsetout_src :: CUChar , latexout :: CUChar , utf8out :: CUChar , utf8bom :: CUChar , xmlout :: CUChar , format_opts :: CInt , addcount :: CInt , output_raw :: CUChar , verbose :: CUChar , singlerefperfile :: CUChar } deriving ( Show ) instance Storable Param where sizeOf _ = #{size param} alignment _ = #{alignment param} peek p = Param `fmap` #{peek param, readformat } p `ap` #{peek param, writeformat } p `ap` #{peek param, charsetin } p `ap` #{peek param, charsetin_src } p `ap` #{peek param, latexin } p `ap` #{peek param, utf8in } p `ap` #{peek param, xmlin } p `ap` #{peek param, nosplittitle } p `ap` #{peek param, charsetout } p `ap` #{peek param, charsetout_src } p `ap` #{peek param, latexout } p `ap` #{peek param, utf8out } p `ap` #{peek param, utf8bom } p `ap` #{peek param, xmlout } p `ap` #{peek param, format_opts } p `ap` #{peek param, addcount } p `ap` #{peek param, output_raw } p `ap` #{peek param, verbose } p `ap` #{peek param, singlerefperfile } p poke p (Param rf wf ci csi li ui xi nt co cso lo uo ub xo fo a raw v s) = do #{poke param, readformat } p rf #{poke param, writeformat } p wf #{poke param, charsetin } p ci #{poke param, charsetin_src } p csi #{poke param, latexin } p li #{poke param, utf8in } p ui #{poke param, xmlin } p xi #{poke param, nosplittitle } p nt #{poke param, charsetout } p co #{poke param, charsetout_src } p cso #{poke param, latexout } p lo #{poke param, utf8out } p uo #{poke param, utf8bom } p ub #{poke param, xmlout } p xo #{poke param, format_opts } p fo #{poke param, addcount } p a #{poke param, output_raw } p raw #{poke param, verbose } p v #{poke param, singlerefperfile } p s -- | Initialize the 'Param' C struct, given the input bibliographic -- format, the output bibliographic format, and the program name to -- be used for displaying debugging information. bibl_initparams :: BiblioIn -> BiblioOut -> String -> IO (ForeignPtr Param) bibl_initparams i o s = alloca $ \p -> withCString s $ \cs -> do c_bibl_initparams p (unBiblioIn i) (unBiblioOut o) cs newForeignPtr_ p -- | Free the 'Param' C struct. bibl_freeparams :: ForeignPtr Param -> IO () bibl_freeparams param = withForeignPtr param c_bibl_freeparams -- | Set fields of the 'Param' C struct directly. setParam :: ForeignPtr Param -> (Param -> Param) -> IO () setParam p f = withForeignPtr p $ \cp -> peek cp >>= poke cp . f -- | Set the input charset. Default is Latin-1 (ISO8859-1). See -- 'Charset'. setCharsetIn :: ForeignPtr Param -> Charset -> IO () setCharsetIn p c = setParam p $ \param -> param { charsetin = charset c } -- | Set the output charset. setCharsetOut :: ForeignPtr Param -> Charset -> IO () setCharsetOut p c = setParam p $ \param -> param { charsetout = charset c } -- | Set output format specific options. See 'FormatOpt'. setFormatOpts :: ForeignPtr Param -> [FormatOpt] -> IO () setFormatOpts p os = setParam p $ \param -> param { format_opts = unFormatOpt $ combineFormatOpts os } -- | Write utf8 byte-order-mark. setBOM :: ForeignPtr Param -> IO () setBOM p = setParam p $ \param -> param { utf8bom = 1 } unsetBOM :: ForeignPtr Param -> IO () unsetBOM p = setParam p $ \param -> param { utf8bom = 0 } -- | Do not split titles. setNoSplitTitle :: ForeignPtr Param -> IO () setNoSplitTitle p = setParam p $ \param -> param { nosplittitle = 1 } -- | Split titles. unsetNoSplitTitle :: ForeignPtr Param -> IO () unsetNoSplitTitle p = setParam p $ \param -> param { nosplittitle = 0 } -- | Write Latex codes. setLatexOut :: ForeignPtr Param -> IO () setLatexOut p = setParam p $ \param -> param { latexout = 1 } unsetLatexOut :: ForeignPtr Param -> IO () unsetLatexOut p = setParam p $ \param -> param { latexout = 0 } -- | Write characters in XML entities. setXmlOut :: ForeignPtr Param -> IO () setXmlOut p = setParam p $ \param -> param { xmlout = 1 } unsetXmlOut :: ForeignPtr Param -> IO () unsetXmlOut p = setParam p $ \param -> param { xmlout = 0 } -- | Add reference count to reference id. setAddcount :: ForeignPtr Param -> IO () setAddcount p = setParam p $ \param -> param { addcount = 1 } unsetAddcount :: ForeignPtr Param -> IO () unsetAddcount p = setParam p $ \param -> param { addcount = 0 } -- | Output a single reference for each file. setSinglerefperfile :: ForeignPtr Param -> IO () setSinglerefperfile p = setParam p $ \param -> param { singlerefperfile = 1 } unsetSinglerefperfile :: ForeignPtr Param -> IO () unsetSinglerefperfile p = setParam p $ \param -> param { singlerefperfile = 0 } -- | Verbose output. setVerbose :: ForeignPtr Param -> IO () setVerbose p = setParam p $ \param -> param { verbose = 1 } -- | Suppress verbose output. unsetVerbose :: ForeignPtr Param -> IO () unsetVerbose p = setParam p $ \param -> param { verbose = 0 } -- | Given a 'Param' C structure, a 'Bibl' C structure, the path to -- the input file (@\"-\"@ for the standard input), read the file, -- storing the data in the 'Bibl' struct, and report a 'Status'. bibl_read :: ForeignPtr Param -> ForeignPtr Bibl -> FilePath -> IO Status bibl_read param bibl path = withForeignPtr param $ \cparam -> withForeignPtr bibl $ \cbibl -> withCString path $ \cpath -> withCString "r" $ \cmode -> do cfile <- if path == "-" then return c_stdin else throwErrnoIfNull "fopen: " (fopen cpath cmode) cint <- c_bibl_read cbibl cfile cpath cparam when (path /= "-") $ fclose cfile >> return () return $ Status cint -- | Given a 'Param' C structure, a 'Bibl' C structure, the path to an -- output file (@\"-\"@ for the standard output), write the file -- returning a 'Status'. bibl_write :: ForeignPtr Param -> ForeignPtr Bibl -> FilePath -> IO Status bibl_write param bibl path = withForeignPtr param $ \cparam -> withForeignPtr bibl $ \cbibl -> withCString "w" $ \cmode -> do cfile <- if path == "-" then return c_stdout else withCString path $ throwErrnoIfNull "fopen: " . flip fopen cmode cint <- c_bibl_write cbibl cfile cparam when (path /= "-") $ fclose cfile >> return () return $ Status cint bibl_readasis :: ForeignPtr Param -> FilePath -> IO () bibl_readasis param path = withForeignPtr param $ \cparam -> withCString path $ \cpath -> do c_bibl_readasis cparam cpath bibl_addtoasis :: ForeignPtr Param -> String -> IO () bibl_addtoasis param entry = withForeignPtr param $ \cparam -> withCString entry $ \centry -> do c_bibl_addtoasis cparam centry bibl_readcorps :: ForeignPtr Param -> FilePath -> IO () bibl_readcorps param path = withForeignPtr param $ \cparam -> withCString path $ \cpath -> do c_bibl_readcorps cparam cpath bibl_addtocorps :: ForeignPtr Param -> String -> IO () bibl_addtocorps param entry = withForeignPtr param $ \cparam -> withCString entry $ \centry -> do c_bibl_addtocorps cparam centry bibl_reporterr :: Status -> IO () bibl_reporterr (Status n) = c_bibl_reporterr n newtype BiblioIn = BiblioIn { unBiblioIn :: CInt } deriving ( Eq ) #{enum BiblioIn, BiblioIn , mods_in = BIBL_MODSIN , bibtex_in = BIBL_BIBTEXIN , ris_in = BIBL_RISIN , endnote_in = BIBL_ENDNOTEIN , copac_in = BIBL_COPACIN , isi_in = BIBL_ISIIN , medline_in = BIBL_MEDLINEIN , endnotexml_in = BIBL_ENDNOTEXMLIN , biblatex_in = BIBL_BIBLATEXIN } newtype BiblioOut = BiblioOut { unBiblioOut :: CInt } deriving ( Eq ) #{enum BiblioOut, BiblioOut , mods_out = BIBL_MODSOUT , bibtex_out = BIBL_BIBTEXOUT , ris_out = BIBL_RISOUT , endnote_out = BIBL_ENDNOTEOUT , isi_out = BIBL_ISIOUT , word2007_out = BIBL_WORD2007OUT , adsab_out = BIBL_ADSABSOUT } newtype FormatOpt = FormatOpt { unFormatOpt :: CInt } #include "bibtexout.h" #include "modsout.h" #include "wordout.h" #{enum FormatOpt, FormatOpt , bibout_finalcomma = BIBOUT_FINALCOMMA , bibout_singledash = BIBOUT_SINGLEDASH , bibout_whitespace = BIBOUT_WHITESPACE , bibout_brackets = BIBOUT_BRACKETS , bibout_uppercase = BIBOUT_UPPERCASE , bibout_strictkey = BIBOUT_STRICTKEY , modsout_dropkey = MODSOUT_DROPKEY , wordout_dropkey = WORDOUT_DROPKEY } newtype Status = Status { status :: CInt } deriving ( Eq, Show ) #{enum Status, Status , bibl_ok = BIBL_OK , bibl_err_badinput = BIBL_ERR_BADINPUT , bibl_err_memerr = BIBL_ERR_MEMERR , bibl_err_cantopen = BIBL_ERR_CANTOPEN } newtype Charset = Charset { charset :: CInt } deriving ( Eq ) #{enum Charset, Charset , bibl_charset_unknown = BIBL_CHARSET_UNKNOWN , bibl_charset_unicode = BIBL_CHARSET_UNICODE , bibl_charset_gb18030 = BIBL_CHARSET_GB18030 , bibl_charset_default = BIBL_CHARSET_DEFAULT } -- Combine a list of options into a single option, using bitwise (.|.) combineFormatOpts :: [FormatOpt] -> FormatOpt combineFormatOpts = FormatOpt . foldr ((.|.) . unFormatOpt) 0 #include "bibutils.h" #include "bibl.h" #let alignment t = "%lu", (unsigned long)offsetof(struct {char x__; t (y__); }, y__) foreign import ccall unsafe "bibl_init" c_bibl_init :: Ptr Bibl -> IO () foreign import ccall unsafe "bibl_free" c_bibl_free :: Ptr Bibl -> IO () foreign import ccall unsafe "bibl_initparams" c_bibl_initparams :: Ptr Param -> CInt -> CInt -> CString -> IO () foreign import ccall unsafe "bibl_freeparams" c_bibl_freeparams :: Ptr Param -> IO () foreign import ccall unsafe "bibl_read" c_bibl_read :: Ptr Bibl -> Ptr CFile -> CString -> Ptr Param -> IO CInt foreign import ccall unsafe "bibl_write" c_bibl_write :: Ptr Bibl -> Ptr CFile -> Ptr Param -> IO CInt foreign import ccall unsafe "bibl_readasis" c_bibl_readasis :: Ptr Param -> CString -> IO () foreign import ccall unsafe "bibl_addtoasis" c_bibl_addtoasis :: Ptr Param -> CString -> IO () foreign import ccall unsafe "bibl_readcorps" c_bibl_readcorps :: Ptr Param -> CString -> IO () foreign import ccall unsafe "bibl_addtocorps" c_bibl_addtocorps :: Ptr Param -> CString -> IO () foreign import ccall unsafe "bibl_reporterr" c_bibl_reporterr :: CInt -> IO () foreign import ccall unsafe "fopen" fopen :: CString -> CString -> IO (Ptr CFile) foreign import ccall unsafe "fclose" fclose :: Ptr CFile -> IO CInt foreign import ccall unsafe "c_stdin" c_stdin :: Ptr CFile foreign import ccall unsafe "c_stdout" c_stdout :: Ptr CFile hs-bibutils-5.5/cbits/0000755000000000000000000000000012445605732013112 5ustar0000000000000000hs-bibutils-5.5/cbits/stub.c0000644000000000000000000000021312445605732014227 0ustar0000000000000000#include FILE *c_stdout() { return stdout; } FILE *c_stdin() { return stdin; } const char progname[] = "hs-bibutils";