home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 July: Technology Seed / ATS July '97.toast / Text Encoding Converter 1.2 / Headers / TextCommon.h < prev    next >
Encoding:
C/C++ Source or Header  |  1997-06-12  |  13.6 KB  |  319 lines  |  [TEXT/MPS ]

  1. /*
  2.      File:        TextCommon.h
  3.  
  4.      Contains:    Definitions for common text types, values for them, and related routines 
  5.  
  6.      Version:    System 7.7
  7.  
  8.      Copyright:    © 1984-1997 by Apple Computer, Inc.
  9.                  All rights reserved.
  10.  
  11.      Bugs:        Report bugs to Radar component “System Interfaces”, “Latest”
  12.                  List the version information (from above) in the Problem Description.
  13.  
  14. */
  15. #ifndef __TEXTCOMMON__
  16. #define __TEXTCOMMON__
  17.  
  18. #ifndef __TYPES__
  19. #include <Types.h>
  20. #endif
  21.  
  22. #ifdef __cplusplus
  23. extern "C" {
  24. #endif
  25.  
  26. #if PRAGMA_IMPORT_SUPPORTED
  27. #pragma import on
  28. #endif
  29.  
  30. #if PRAGMA_ALIGN_SUPPORTED
  31. #pragma options align=mac68k
  32. #endif
  33.  
  34. /*
  35.  The following 7 typedefs are required for seeds until they get
  36.  moved to a future version of Types.[hp] in a future ETO release.
  37.  Also note that seeds should include a copy of the new TextCommon.[hp].
  38. */
  39. typedef UInt8 *BytePtr;
  40. typedef UInt32 ByteCount;
  41. typedef UInt32 ItemCount;
  42. typedef UInt32 OptionBits;
  43. typedef short RegionCode;
  44. typedef UInt32 ByteOffset;
  45. typedef const void *ConstLogicalAddress;
  46. /*
  47.  The following typedefs are required for seeds until they get
  48.  moved to a future version of Errors.[hp] in a future ETO release.
  49.  Text Encoding Converter & Unicode Converter Error Codes, for reference
  50. */
  51.  
  52. /* LocaleIdentifier is an obsolete Copland typedef, will be removed soon*/
  53. typedef UInt32 LocaleIdentifier;
  54. /* TextEncodingBase type & values */
  55. /* (values 0-32 correspond to the Script Codes defined in Inside Macintosh: Text pages 6-52 and 6-53 */
  56. typedef UInt32 TextEncodingBase;
  57.  
  58. enum {
  59.                                                                 /* Mac OS encodings*/
  60.     kTextEncodingMacRoman        = 0L,
  61.     kTextEncodingMacJapanese    = 1,
  62.     kTextEncodingMacChineseTrad    = 2,
  63.     kTextEncodingMacKorean        = 3,
  64.     kTextEncodingMacArabic        = 4,
  65.     kTextEncodingMacHebrew        = 5,
  66.     kTextEncodingMacGreek        = 6,
  67.     kTextEncodingMacCyrillic    = 7,
  68.     kTextEncodingMacDevanagari    = 9,
  69.     kTextEncodingMacGurmukhi    = 10,
  70.     kTextEncodingMacGujarati    = 11,
  71.     kTextEncodingMacOriya        = 12,
  72.     kTextEncodingMacBengali        = 13,
  73.     kTextEncodingMacTamil        = 14,
  74.     kTextEncodingMacTelugu        = 15,
  75.     kTextEncodingMacKannada        = 16,
  76.     kTextEncodingMacMalayalam    = 17,
  77.     kTextEncodingMacSinhalese    = 18,
  78.     kTextEncodingMacBurmese        = 19,
  79.     kTextEncodingMacKhmer        = 20,
  80.     kTextEncodingMacThai        = 21,
  81.     kTextEncodingMacLaotian        = 22,
  82.     kTextEncodingMacGeorgian    = 23,
  83.     kTextEncodingMacArmenian    = 24,
  84.     kTextEncodingMacChineseSimp    = 25,
  85.     kTextEncodingMacTibetan        = 26,
  86.     kTextEncodingMacMongolian    = 27,
  87.     kTextEncodingMacEthiopic    = 28,
  88.     kTextEncodingMacCentralEurRoman = 29,
  89.     kTextEncodingMacVietnamese    = 30,
  90.     kTextEncodingMacExtArabic    = 31,                            /* The following use script code 0, smRoman*/
  91.     kTextEncodingMacSymbol        = 33,
  92.     kTextEncodingMacDingbats    = 34,
  93.     kTextEncodingMacTurkish        = 35,
  94.     kTextEncodingMacCroatian    = 36,
  95.     kTextEncodingMacIcelandic    = 37,
  96.     kTextEncodingMacRomanian    = 38,                            /* The following use script code 4, smArabic*/
  97.     kTextEncodingMacFarsi        = 0x8C,                            /* Like MacArabic but uses Farsi digits*/
  98.                                                                 /* The following use script code 7, smCyrillic*/
  99.     kTextEncodingMacUkrainian    = 0x98,                            /* The following use script code 32, smUnimplemented*/
  100.     kTextEncodingMacVT100        = 0xFC,                            /* VT100/102 font from Comm Toolbox: Latin-1 repertoire + box drawing etc*/
  101.                                                                 /* Special Mac OS encodings*/
  102.     kTextEncodingMacHFS            = 0xFF,                            /* Meta-value, should never appear in a table.*/
  103.                                                                 /* Unicode & ISO UCS encodings begin at 0x100*/
  104.     kTextEncodingUnicodeDefault    = 0x0100,                        /* Meta-value, should never appear in a table.*/
  105.     kTextEncodingUnicodeV1_1    = 0x0101,
  106.     kTextEncodingISO10646_1993    = 0x0101,                        /* Code points identical to Unicode 1.1*/
  107.     kTextEncodingUnicodeV2_0    = 0x0103,                        /* New location for Korean Hangul*/
  108.                                                                 /* ISO 8-bit and 7-bit encodings begin at 0x200*/
  109.     kTextEncodingISOLatin1        = 0x0201,                        /* ISO 8859-1*/
  110.     kTextEncodingISOLatin2        = 0x0202,                        /* ISO 8859-2*/
  111.     kTextEncodingISOLatinCyrillic = 0x0205,                        /* ISO 8859-5*/
  112.     kTextEncodingISOLatinArabic    = 0x0206,                        /* ISO 8859-6, = ASMO 708, =DOS CP 708*/
  113.     kTextEncodingISOLatinGreek    = 0x0207,                        /* ISO 8859-7*/
  114.     kTextEncodingISOLatinHebrew    = 0x0208,                        /* ISO 8859-8*/
  115.     kTextEncodingISOLatin5        = 0x0209,                        /* ISO 8859-9*/
  116.                                                                 /* MS-DOS & Windows encodings begin at 0x400*/
  117.     kTextEncodingDOSLatinUS        = 0x0400,                        /* code page 437*/
  118.     kTextEncodingDOSGreek        = 0x0405,                        /* code page 737 (formerly code page 437G)*/
  119.     kTextEncodingDOSBalticRim    = 0x0406,                        /* code page 775*/
  120.     kTextEncodingDOSLatin1        = 0x0410,                        /* code page 850, "Multilingual"*/
  121.     kTextEncodingDOSGreek1        = 0x0411,                        /* code page 851*/
  122.     kTextEncodingDOSLatin2        = 0x0412,                        /* code page 852, Slavic*/
  123.     kTextEncodingDOSCyrillic    = 0x0413,                        /* code page 855, IBM Cyrillic*/
  124.     kTextEncodingDOSTurkish        = 0x0414,                        /* code page 857, IBM Turkish*/
  125.     kTextEncodingDOSPortuguese    = 0x0415,                        /* code page 860*/
  126.     kTextEncodingDOSIcelandic    = 0x0416,                        /* code page 861*/
  127.     kTextEncodingDOSHebrew        = 0x0417,                        /* code page 862*/
  128.     kTextEncodingDOSCanadianFrench = 0x0418,                    /* code page 863*/
  129.     kTextEncodingDOSArabic        = 0x0419,                        /* code page 864*/
  130.     kTextEncodingDOSNordic        = 0x041A,                        /* code page 865*/
  131.     kTextEncodingDOSRussian        = 0x041B,                        /* code page 866*/
  132.     kTextEncodingDOSGreek2        = 0x041C,                        /* code page 869, IBM Modern Greek*/
  133.     kTextEncodingDOSThai        = 0x041D,                        /* code page 874, also for Windows*/
  134.     kTextEncodingDOSJapanese    = 0x0420,                        /* code page 932, also for Windows*/
  135.     kTextEncodingDOSChineseSimplif = 0x0421,                    /* code page 936, also for Windows*/
  136.     kTextEncodingDOSKorean        = 0x0422,                        /* code page 949, also for Windows; Unified Hangul Code*/
  137.     kTextEncodingDOSChineseTrad    = 0x0423,                        /* code page 950, also for Windows*/
  138.     kTextEncodingWindowsLatin1    = 0x0500,                        /* code page 1252*/
  139.     kTextEncodingWindowsANSI    = 0x0500,                        /* code page 1252 (alternate name)*/
  140.     kTextEncodingWindowsLatin2    = 0x0501,                        /* code page 1250, Central Europe*/
  141.     kTextEncodingWindowsCyrillic = 0x0502,                        /* code page 1251, Slavic Cyrillic*/
  142.     kTextEncodingWindowsGreek    = 0x0503,                        /* code page 1253*/
  143.     kTextEncodingWindowsLatin5    = 0x0504,                        /* code page 1254, Turkish*/
  144.     kTextEncodingWindowsHebrew    = 0x0505,                        /* code page 1255*/
  145.     kTextEncodingWindowsArabic    = 0x0506,                        /* code page 1256*/
  146.     kTextEncodingWindowsBalticRim = 0x0507,                        /* code page 1257*/
  147.     kTextEncodingWindowsKoreanJohab = 0x0510,                    /* code page 1361, for Windows NT*/
  148.                                                                 /* Various national standards begin at 0x600*/
  149.     kTextEncodingUS_ASCII        = 0x0600,
  150.     kTextEncodingJIS_X0201_76    = 0x0620,
  151.     kTextEncodingJIS_X0208_83    = 0x0621,
  152.     kTextEncodingJIS_X0208_90    = 0x0622,
  153.     kTextEncodingJIS_X0212_90    = 0x0623,
  154.     kTextEncodingJIS_C6226_78    = 0x0624,
  155.     kTextEncodingGB_2312_80        = 0x0630,
  156.     kTextEncodingGBK_95            = 0x0631,                        /* annex to GB 13000-93; for Windows 95*/
  157.     kTextEncodingKSC_5601_87    = 0x0640,                        /* same as KSC 5601-92 without Johab annex*/
  158.     kTextEncodingKSC_5601_92_Johab = 0x0641,                    /* KSC 5601-92 Johab annex*/
  159.     kTextEncodingCNS_11643_92_P1 = 0x0651,                        /* CNS 11643-1992 plane 1*/
  160.     kTextEncodingCNS_11643_92_P2 = 0x0652,                        /* CNS 11643-1992 plane 2*/
  161.     kTextEncodingCNS_11643_92_P3 = 0x0653,                        /* CNS 11643-1992 plane 3 (was plane 14 in 1986 version)*/
  162.                                                                 /* ISO 2022 collections begin at 0x800*/
  163.     kTextEncodingISO_2022_JP    = 0x0820,
  164.     kTextEncodingISO_2022_JP_2    = 0x0821,
  165.     kTextEncodingISO_2022_CN    = 0x0830,
  166.     kTextEncodingISO_2022_CN_EXT = 0x0831,
  167.     kTextEncodingISO_2022_KR    = 0x0840,                        /* EUC collections begin at 0x900*/
  168.     kTextEncodingEUC_JP            = 0x0920,                        /* ISO 646, 1-byte katakana, JIS 208, JIS 212*/
  169.     kTextEncodingEUC_CN            = 0x0930,                        /* ISO 646, GB 2312-80*/
  170.     kTextEncodingEUC_TW            = 0x0931,                        /* ISO 646, CNS 11643-1992 Planes 1-16*/
  171.     kTextEncodingEUC_KR            = 0x0940,                        /* ISO 646, KS C 5601-1987*/
  172.                                                                 /* Misc standards begin at 0xA00*/
  173.     kTextEncodingShiftJIS        = 0x0A01,                        /* plain Shift-JIS*/
  174.     kTextEncodingKOI8_R            = 0x0A02,                        /* Russian internet standard*/
  175.     kTextEncodingBig5            = 0x0A03,                        /* Big-5 (has variants)*/
  176.     kTextEncodingMacRomanLatin1    = 0x0A04,                        /* Mac OS Roman permuted to align with ISO Latin-1*/
  177.     kTextEncodingHZ_GB_2312        = 0x0A05,                        /* HZ (RFC 1842, for Chinese mail & news)*/
  178.                                                                 /* Other platform encodings*/
  179.     kTextEncodingNextStepLatin    = 0x0B01,                        /* NextStep encoding*/
  180.                                                                 /* Special value*/
  181.     kTextEncodingMultiRun        = 0x0FFF,                        /* Multi-encoding text with external run info*/
  182.                                                                 /* The following are older names for backward compatibility*/
  183.     kTextEncodingMacTradChinese    = 2,
  184.     kTextEncodingMacRSymbol        = 8,
  185.     kTextEncodingMacSimpChinese    = 25,
  186.     kTextEncodingMacGeez        = 28,
  187.     kTextEncodingMacEastEurRoman = 29,
  188.     kTextEncodingMacUninterp    = 32
  189. };
  190.  
  191. /* TextEncodingVariant type & values */
  192. typedef UInt32 TextEncodingVariant;
  193.  
  194. enum {
  195.                                                                 /* Default TextEncodingVariant, for any TextEncodingBase*/
  196.     kTextEncodingDefaultVariant    = 0,                            /* Variants of kTextEncodingMacJapanese*/
  197.     kMacJapaneseStandardVariant    = 0,
  198.     kMacJapaneseStdNoVerticalsVariant = 1,
  199.     kMacJapaneseBasicVariant    = 2,
  200.     kMacJapanesePostScriptScrnVariant = 3,
  201.     kMacJapanesePostScriptPrintVariant = 4,
  202.     kMacJapaneseVertAtKuPlusTenVariant = 5,                        /* Variant options for most Japanese encodings (MacJapanese, ShiftJIS, EUC-JP, ISO 2022-JP)    */
  203.                                                                 /* These can be OR-ed into the variant value in any combination*/
  204.     kJapaneseNoOneByteKanaOption = 0x20,
  205.     kJapaneseUseAsciiBackslashOption = 0x40,                    /* Variants of kTextEncodingMacArabic*/
  206.     kMacArabicStandardVariant    = 0,                            /* 0xC0 is 8-spoke asterisk, 0x2A & 0xAA are asterisk (e.g. Cairo)*/
  207.     kMacArabicTrueTypeVariant    = 1,                            /* 0xC0 is asterisk, 0x2A & 0xAA are multiply signs (e.g. Baghdad)*/
  208.     kMacArabicThuluthVariant    = 2,                            /* 0xC0 is Arabic five-point star, 0x2A & 0xAA are multiply signs*/
  209.     kMacArabicAlBayanVariant    = 3,                            /* 8-spoke asterisk, multiply sign, Koranic ligatures & parens*/
  210.                                                                 /* Variants of kTextEncodingMacFarsi*/
  211.     kMacFarsiStandardVariant    = 0,                            /* 0xC0 is 8-spoke asterisk, 0x2A & 0xAA are asterisk (e.g. Tehran)*/
  212.     kMacFarsiTrueTypeVariant    = 1,                            /* asterisk, multiply signs, Koranic ligatures, geometric shapes*/
  213.                                                                 /* Variants of kTextEncodingMacHebrew*/
  214.     kMacHebrewStandardVariant    = 0,
  215.     kMacHebrewFigureSpaceVariant = 1,                            /* Variants of Unicode & ISO 10646 encodings*/
  216.     kUnicodeNoSubset            = 0,
  217.     kUnicodeNoCompatibilityVariant = 1,
  218.     kUnicodeMaxDecomposedVariant = 2,
  219.     kUnicodeNoComposedVariant    = 3,
  220.     kUnicodeNoCorporateVariant    = 4,                            /* Variants of Big-5 encoding*/
  221.     kBig5_BasicVariant            = 0,
  222.     kBig5_StandardVariant        = 1,                            /* 0xC6A1-0xC7FC: kana, Cyrillic, enclosed numerics*/
  223.     kBig5_ETenVariant            = 2,                            /* adds kana, Cyrillic, radicals, etc with hi bytes C6-C8,F9*/
  224.                                                                 /* The following are older names for backward compatibility*/
  225.     kJapaneseStandardVariant    = 0,
  226.     kJapaneseStdNoVerticalsVariant = 1,
  227.     kJapaneseBasicVariant        = 2,
  228.     kJapanesePostScriptScrnVariant = 3,
  229.     kJapanesePostScriptPrintVariant = 4,
  230.     kJapaneseVertAtKuPlusTenVariant = 5,                        /* kJapaneseStdNoOneByteKanaVariant = 6,    // replaced by kJapaneseNoOneByteKanaOption*/
  231.                                                                 /* kJapaneseBasicNoOneByteKanaVariant = 7,    // replaced by kJapaneseNoOneByteKanaOption    */
  232.     kHebrewStandardVariant        = 0,
  233.     kHebrewFigureSpaceVariant    = 1
  234. };
  235.  
  236. /* TextEncodingFormat type & values */
  237. typedef UInt32 TextEncodingFormat;
  238.  
  239. enum {
  240.                                                                 /* Default TextEncodingFormat for any TextEncodingBase*/
  241.     kTextEncodingDefaultFormat    = 0,                            /* Formats for Unicode & ISO 10646*/
  242.     kUnicode16BitFormat            = 0,
  243.     kUnicodeUTF7Format            = 1,
  244.     kUnicodeUTF8Format            = 2,
  245.     kUnicode32BitFormat            = 3
  246. };
  247.  
  248. /* TextEncoding type */
  249. typedef UInt32 TextEncoding;
  250. /* name part selector for GetTextEncodingName*/
  251. typedef UInt32 TextEncodingNameSelector;
  252.  
  253. enum {
  254.     kTextEncodingFullName        = 0,
  255.     kTextEncodingBaseName        = 0,
  256.     kTextEncodingVariantName    = 0,
  257.     kTextEncodingFormatName        = 0
  258. };
  259.  
  260. /* Types used in conversion */
  261. struct ScriptCodeRun {
  262.     ByteOffset                         offset;
  263.     ScriptCode                         script;
  264. };
  265. typedef struct ScriptCodeRun ScriptCodeRun;
  266.  
  267. typedef ScriptCodeRun *ScriptCodeRunPtr;
  268. typedef const ScriptCodeRun *ConstScriptCodeRunPtr;
  269. struct TextEncodingRun {
  270.     ByteOffset                         offset;
  271.     TextEncoding                     textEncoding;
  272. };
  273. typedef struct TextEncodingRun TextEncodingRun;
  274.  
  275. typedef UInt8 *TextPtr;
  276. typedef const UInt8 *ConstTextPtr;
  277. typedef TextEncodingRun *TextEncodingRunPtr;
  278. typedef TextEncodingRun *ConstTextEncodingRunPtr;
  279. /* enums for TextEncoding Conversion routines */
  280.  
  281. enum {
  282.     kTextScriptDontCare            = -128,
  283.     kTextLanguageDontCare        = -128,
  284.     kTextRegionDontCare            = -128
  285. };
  286.  
  287. /* Prototypes for TextEncoding functions */
  288. extern pascal TextEncoding CreateTextEncoding(TextEncodingBase encodingBase, TextEncodingVariant encodingVariant, TextEncodingFormat encodingFormat);
  289.  
  290. extern pascal TextEncodingBase GetTextEncodingBase(TextEncoding encoding);
  291.  
  292. extern pascal TextEncodingVariant GetTextEncodingVariant(TextEncoding encoding);
  293.  
  294. extern pascal TextEncodingFormat GetTextEncodingFormat(TextEncoding encoding);
  295.  
  296. extern pascal TextEncoding ResolveDefaultTextEncoding(TextEncoding encoding);
  297.  
  298. extern OSStatus GetTextEncodingName(TextEncoding iEncoding, TextEncodingNameSelector iNamePartSelector, RegionCode iPreferredRegion, TextEncoding iPreferredEncoding, ByteCount iBufLen, ByteCount *oNameLength, RegionCode *oActualRegion, TextEncoding *oActualEncoding, TextPtr oEncodingName);
  299.  
  300. extern pascal OSStatus UpgradeScriptInfoToTextEncoding(ScriptCode textScriptID, LangCode textLanguageID, RegionCode regionID, ConstStr255Param textFontname, TextEncoding *encoding);
  301.  
  302. extern pascal OSStatus RevertTextEncodingToScriptInfo(TextEncoding encoding, ScriptCode *textScriptID, LangCode *textLanguageID, Str255 textFontname);
  303.  
  304.  
  305. #if PRAGMA_ALIGN_SUPPORTED
  306. #pragma options align=reset
  307. #endif
  308.  
  309. #if PRAGMA_IMPORT_SUPPORTED
  310. #pragma import off
  311. #endif
  312.  
  313. #ifdef __cplusplus
  314. }
  315. #endif
  316.  
  317. #endif /* __TEXTCOMMON__ */
  318.  
  319.