123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- /*
- * Copyright (c) 2003 Ben Harris
- * All rights reserved.
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use,
- * copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following
- * conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
- * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
- /*
- * macenc.c -- Convert a Mac OS script/region/font combination to our
- * internal charset code.
- */
- #include <string.h>
- #include "charset.h"
- #include "internal.h"
- /*
- * These are defined by Mac OS's <Script.h>, but we'd like to be
- * independent of that.
- */
- #define smRoman 0
- #define smJapanese 1
- #define smTradChinese 2
- #define smKorean 3
- #define smArabic 4
- #define smHebrew 5
- #define smCyrillic 7
- #define smDevenagari 9
- #define smGurmukhi 10
- #define smGujurati 11
- #define smThai 21
- #define smSimpChinese 25
- #define smTibetan 26
- #define smEthiopic 28
- #define smCentralEuroRoman 29
- #define verGreece 20
- #define verIceland 21
- #define verTurkey 24
- #define verYugoCroatian 25
- #define verRomania 39
- #define verFaroeIsl 47
- #define verIran 48
- #define verRussia 49
- #define verSlovenian 66
- #define verCroatia 68
- #define verBulgaria 72
- #define verScottishGaelic 75
- #define verManxGaelic 76
- #define verBreton 77
- #define verNunavut 78
- #define verWelsh 79
- #define verIrishGaelicScript 81
- static const struct {
- int script;
- int region;
- int sysvermin;
- char const *fontname;
- int charset;
- } macencs[] = {
- { smRoman, -1, 0x850, "VT100", CS_MAC_VT100 },
- { smRoman, -1, 0, "VT100", CS_MAC_VT100_OLD },
- /*
- * From here on, this table is largely derived from
- * <http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/README.TXT>,
- * with _OLD version added based on the comments in individual
- * mapping files.
- */
- { smRoman, -1, 0, "Symbol", CS_MAC_SYMBOL },
- { smRoman, -1, 0, "Zapf Dingbats", CS_MAC_DINGBATS },
- { smRoman, verTurkey, 0, NULL, CS_MAC_TURKISH },
- { smRoman, verYugoCroatian, 0x850, NULL, CS_MAC_CROATIAN },
- { smRoman, verYugoCroatian, 0, NULL, CS_MAC_CROATIAN_OLD },
- { smRoman, verSlovenian, 0x850, NULL, CS_MAC_CROATIAN },
- { smRoman, verSlovenian, 0, NULL, CS_MAC_CROATIAN_OLD },
- { smRoman, verCroatia, 0x850, NULL, CS_MAC_CROATIAN },
- { smRoman, verCroatia, 0, NULL, CS_MAC_CROATIAN_OLD },
- { smRoman, verIceland, 0x850, NULL, CS_MAC_ICELAND },
- { smRoman, verIceland, 0, NULL, CS_MAC_ICELAND_OLD },
- { smRoman, verFaroeIsl, 0x850, NULL, CS_MAC_ICELAND },
- { smRoman, verFaroeIsl, 0, NULL, CS_MAC_ICELAND_OLD },
- { smRoman, verRomania, 0x850, NULL, CS_MAC_ROMANIAN },
- { smRoman, verRomania, 0, NULL, CS_MAC_ROMANIAN_OLD },
- #if 0 /* No mapping table on ftp.unicode.org */
- { smRoman, verIreland, 0x850, NULL, CS_MAC_CELTIC },
- { smRoman, verIreland, 0, NULL, CS_MAC_CELTIC_OLD },
- { smRoman, verScottishGaelic, 0x850, NULL, CS_MAC_CELTIC },
- { smRoman, verScottishGaelic, 0, NULL, CS_MAC_CELTIC_OLD },
- { smRoman, verManxGaelic, 0x850, NULL, CS_MAC_CELTIC },
- { smRoman, verManxGaelic, 0, NULL, CS_MAC_CELTIC_OLD },
- { smRoman, verBreton, 0x850, NULL, CS_MAC_CELTIC },
- { smRoman, verBreton, 0, NULL, CS_MAC_CELTIC_OLD },
- { smRoman, verWelsh, 0x850, NULL, CS_MAC_CELTIC },
- { smRoman, verWelsh, 0, NULL, CS_MAC_CELTIC_OLD },
- { smRoman, verIrishGaelicScript, 0x850, NULL, CS_MAC_GAELIC },
- { smRoman, verIrishGaelicScript, 0, NULL, CS_MAC_GAELIC_OLD },
- #endif
- { smRoman, verGreece, 0x922, NULL, CS_MAC_GREEK },
- { smRoman, verGreece, 0, NULL, CS_MAC_GREEK_OLD },
- { smRoman, -1, 0x850, NULL, CS_MAC_ROMAN },
- { smRoman, -1, 0, NULL, CS_MAC_ROMAN_OLD },
- #if 0 /* Multi-byte encodings, not yet supported */
- { smJapanese, -1, 0, NULL, CS_MAC_JAPANESE },
- { smTradChinese, -1, 0, NULL, CS_MAC_CHINTRAD },
- { smKorean, -1, 0, NULL, CS_MAC_KOREAN },
- #endif
- #if 0 /* Bidirectional encodings, not yet supported */
- { smArabic, verIran, 0, NULL, CS_MAC_FARSI },
- { smArabic, -1, 0, NULL, CS_MAC_ARABIC },
- { smHebrew, -1, 0, NULL, CS_MAC_HEBREW },
- #endif
- { smCyrillic, -1, 0x900, NULL, CS_MAC_CYRILLIC },
- { smCyrillic, verRussia, 0, NULL, CS_MAC_CYRILLIC_OLD },
- { smCyrillic, verBulgaria, 0, NULL, CS_MAC_CYRILLIC_OLD },
- { smCyrillic, -1, 0, NULL, CS_MAC_UKRAINE },
- #if 0 /* Complex Indic scripts, not yet supported */
- { smDevanagari, -1, 0, NULL, CS_MAC_DEVENAGA },
- { smGurmukhi, -1, 0, NULL, CS_MAC_GURMUKHI },
- { smGujurati, -1, 0, NULL, CS_MAC_GUJURATI },
- #endif
- { smThai, -1, 0, NULL, CS_MAC_THAI },
- #if 0 /* Multi-byte encoding, not yet supported */
- { smSimpChinese, -1, 0, NULL, CS_MAC_CHINSIMP },
- #endif
- #if 0 /* No mapping table on ftp.unicode.org */
- { smTibetan, -1, 0, NULL, CS_MAC_TIBETAN },
- { smEthiopic, -1, 0, NULL, CS_MAC_ETHIOPIC },
- { smEthiopic, verNanavut, 0, NULL, CS_MAC_INUIT },
- #endif
- { smCentralEuroRoman, -1, 0, NULL, CS_MAC_CENTEURO },
- };
- int charset_from_macenc(int script, int region, int sysvers,
- char const *fontname)
- {
- int i;
- for (i = 0; i < (int)lenof(macencs); i++)
- if ((macencs[i].script == script) &&
- (macencs[i].region < 0 || macencs[i].region == region) &&
- (macencs[i].sysvermin <= sysvers) &&
- (macencs[i].fontname == NULL ||
- (fontname != NULL && strcmp(macencs[i].fontname, fontname) == 0)))
- return macencs[i].charset;
- return CS_NONE;
- }
|