home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 April: Technology Seed / Mac Tech Seed Apr '97.toast / Text Encoding Converter / Headers / TextCommon.h < prev    next >
Encoding:
C/C++ Source or Header  |  1997-03-12  |  13.9 KB  |  351 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.      DRI:        Julio Gonzalez
  9.  
  10.      Copyright:    © 1984-1996 by Apple Computer, Inc.
  11.                  All rights reserved.
  12.  
  13.      Warning:    *** APPLE INTERNAL USE ONLY ***
  14.                  This file may contain unreleased API's
  15.  
  16.      BuildInfo:    Built by:            Sue Kuo
  17.                  With Interfacer:    2.0d13   (PowerPC native)
  18.                  From:                TextCommon.i
  19.                      Revision:        30
  20.                      Dated:            2/27/97
  21.                      Last change by:    PKE
  22.                      Last comment:    #1633936: Change kTextEncodingISO10646_1993 to have value 0x101
  23.  
  24.      Bugs:        Report bugs to Radar component “System Interfaces”, “Latest”
  25.                  List the version information (from above) in the Problem Description.
  26.  
  27. */
  28. #ifndef __TEXTCOMMON__
  29. #define __TEXTCOMMON__
  30.  
  31. #ifndef __TYPES__
  32. #include <Types.h>
  33. #endif
  34.  
  35. #ifdef __cplusplus
  36. extern "C" {
  37. #endif
  38.  
  39. #if PRAGMA_IMPORT_SUPPORTED
  40. #pragma import on
  41. #endif
  42.  
  43. #if PRAGMA_ALIGN_SUPPORTED
  44. #pragma options align=mac68k
  45. #endif
  46.  
  47. #if 1
  48. /*
  49.  The following 7 typedefs are required for seeds until they get
  50.  moved to a future version of Types.[hp] in a future ETO release.
  51.  Also note that seeds should include a copy of the new TextCommon.[hp].
  52. */
  53. typedef UInt8 *BytePtr;
  54. typedef UInt32 ByteCount;
  55. typedef UInt32 ItemCount;
  56. typedef UInt32 OptionBits;
  57. typedef short RegionCode;
  58. typedef UInt32 ByteOffset;
  59. typedef const void *ConstLogicalAddress;
  60. /*
  61.  The following typedefs are required for seeds until they get
  62.  moved to a future version of Errors.[hp] in a future ETO release.
  63.  Text Encoding Converter & Unicode Converter Error Codes, for reference
  64. */
  65.  
  66. enum {
  67.                                                                 /* general text errors*/
  68.     kTextUnsupportedEncodingErr    = -8738,                        /* specified encoding not supported for this operation*/
  69.     kTextMalformedInputErr        = -8739,                        /* in DBCS, for example, high byte followed by invalid low byte*/
  70.     kTextUndefinedElementErr    = -8740,                        /* text conversion errors*/
  71.     kTECMissingTableErr            = -8745,
  72.     kTECTableChecksumErr        = -8746,
  73.     kTECTableFormatErr            = -8747,
  74.     kTECCorruptConverterErr        = -8748,                        /* invalid converter object reference*/
  75.     kTECNoConversionPathErr        = -8749,
  76.     kTECBufferBelowMinimumSizeErr = -8750,                        /* output buffer too small to allow processing of first input text element*/
  77.     kTECArrayFullErr            = -8751,                        /* supplied name buffer or TextRun, TextEncoding, or UnicodeMapping array is too small*/
  78.     kTECBadTextRunErr            = -8752,
  79.     kTECPartialCharErr            = -8753,                        /* input buffer ends in the middle of a multibyte character, conversion stopped*/
  80.     kTECUnmappableElementErr    = -8754,
  81.     kTECIncompleteElementErr    = -8755,                        /* text element may be incomplete or is too long for internal buffers*/
  82.     kTECDirectionErr            = -8756,                        /* direction stack overflow, etc.*/
  83.                                                                 /* text conversion status codes*/
  84.     kTECUsedFallbacksStatus        = -8783,
  85.     kTECNeedFlushStatus            = -8784,
  86.     kTECOutputBufferFullStatus    = -8785,                        /* output buffer has no room for conversion of next input text element (partial conversion)*/
  87.                                                                 /* deprecated error & status codes for low-level converter, now unused*/
  88.     unicodeChecksumErr            = -8769,
  89.     unicodeNoTableErr            = -8768,
  90.     unicodeVariantErr            = -8767,
  91.     unicodeFallbacksErr            = -8766,
  92.     unicodePartConvertErr        = -8765,
  93.     unicodeBufErr                = -8764,
  94.     unicodeCharErr                = -8763,
  95.     unicodeElementErr            = -8762,
  96.     unicodeNotFoundErr            = -8761,
  97.     unicodeTableFormatErr        = -8760,
  98.     unicodeDirectionErr            = -8759,
  99.     unicodeContextualErr        = -8758,
  100.     unicodeTextEncodingDataErr    = -8757
  101. };
  102.  
  103. #endif
  104. #if FOR_SYSTEM8_PREEMPTIVE
  105. typedef UInt32 LocaleIdentifier;
  106. #endif
  107. #if FOR_SYSTEM7_AND_SYSTEM8_PREEMPTIVE
  108. /* TextEncodingBase type & values */
  109. /* (values 0-32 correspond to the Script Codes defined in Inside Macintosh: Text pages 6-52 and 6-53 */
  110. typedef UInt32 TextEncodingBase;
  111.  
  112. enum {
  113.                                                                 /* Mac OS encodings*/
  114.     kTextEncodingMacRoman        = 0L,
  115.     kTextEncodingMacJapanese    = 1,
  116.     kTextEncodingMacChineseTrad    = 2,
  117.     kTextEncodingMacKorean        = 3,
  118.     kTextEncodingMacArabic        = 4,
  119.     kTextEncodingMacHebrew        = 5,
  120.     kTextEncodingMacGreek        = 6,
  121.     kTextEncodingMacCyrillic    = 7,
  122.     kTextEncodingMacDevanagari    = 9,
  123.     kTextEncodingMacGurmukhi    = 10,
  124.     kTextEncodingMacGujarati    = 11,
  125.     kTextEncodingMacOriya        = 12,
  126.     kTextEncodingMacBengali        = 13,
  127.     kTextEncodingMacTamil        = 14,
  128.     kTextEncodingMacTelugu        = 15,
  129.     kTextEncodingMacKannada        = 16,
  130.     kTextEncodingMacMalayalam    = 17,
  131.     kTextEncodingMacSinhalese    = 18,
  132.     kTextEncodingMacBurmese        = 19,
  133.     kTextEncodingMacKhmer        = 20,
  134.     kTextEncodingMacThai        = 21,
  135.     kTextEncodingMacLaotian        = 22,
  136.     kTextEncodingMacGeorgian    = 23,
  137.     kTextEncodingMacArmenian    = 24,
  138.     kTextEncodingMacChineseSimp    = 25,
  139.     kTextEncodingMacTibetan        = 26,
  140.     kTextEncodingMacMongolian    = 27,
  141.     kTextEncodingMacEthiopic    = 28,
  142.     kTextEncodingMacCentralEurRoman = 29,
  143.     kTextEncodingMacVietnamese    = 30,
  144.     kTextEncodingMacExtArabic    = 31,
  145.     kTextEncodingMacSymbol        = 33,
  146.     kTextEncodingMacDingbats    = 34,
  147.     kTextEncodingMacTurkish        = 35,
  148.     kTextEncodingMacCroatian    = 36,
  149.     kTextEncodingMacIcelandic    = 37,
  150.     kTextEncodingMacRomanian    = 38,
  151.     kTextEncodingMacUkrainian    = 0x98,
  152.     kTextEncodingMacHFS            = 0xFF,                            /* Meta-value, should never appear in a table.*/
  153.                                                                 /* Unicode & ISO UCS encodings begin at 0x100*/
  154.     kTextEncodingUnicodeDefault    = 0x0100,                        /* Meta-value, should never appear in a table.*/
  155.     kTextEncodingUnicodeV1_1    = 0x0101,
  156.     kTextEncodingISO10646_1993    = 0x0101,                        /* Code points identical to Unicode 1.1*/
  157.     kTextEncodingUnicodeV2_0    = 0x0103,                        /* New location for Korean Hangul*/
  158.                                                                 /* ISO 8-bit and 7-bit encodings begin at 0x200*/
  159.     kTextEncodingISOLatin1        = 0x0201,                        /* ISO 8859-1*/
  160.     kTextEncodingISOLatin2        = 0x0202,                        /* ISO 8859-2*/
  161.     kTextEncodingISOLatinCyrillic = 0x0205,                        /* ISO 8859-5*/
  162.     kTextEncodingISOLatinArabic    = 0x0206,                        /* ISO 8859-6, = ASMO 708, =DOS CP 708*/
  163.     kTextEncodingISOLatinGreek    = 0x0207,                        /* ISO 8859-7*/
  164.     kTextEncodingISOLatinHebrew    = 0x0208,                        /* ISO 8859-8*/
  165.     kTextEncodingISOLatin5        = 0x0209,                        /* ISO 8859-9*/
  166.                                                                 /* MS-DOS & Windows encodings begin at 0x400*/
  167.     kTextEncodingDOSLatinUS        = 0x0400,                        /* code page 437*/
  168.     kTextEncodingDOSGreek        = 0x0405,                        /* code page 737 (formerly code page 437G)*/
  169.     kTextEncodingDOSBalticRim    = 0x0406,                        /* code page 775*/
  170.     kTextEncodingDOSLatin1        = 0x0410,                        /* code page 850, "Multilingual"*/
  171.     kTextEncodingDOSGreek1        = 0x0411,                        /* code page 851*/
  172.     kTextEncodingDOSLatin2        = 0x0412,                        /* code page 852, Slavic*/
  173.     kTextEncodingDOSCyrillic    = 0x0413,                        /* code page 855, IBM Cyrillic*/
  174.     kTextEncodingDOSTurkish        = 0x0414,                        /* code page 857, IBM Turkish*/
  175.     kTextEncodingDOSPortuguese    = 0x0415,                        /* code page 860*/
  176.     kTextEncodingDOSIcelandic    = 0x0416,                        /* code page 861*/
  177.     kTextEncodingDOSHebrew        = 0x0417,                        /* code page 862*/
  178.     kTextEncodingDOSCanadianFrench = 0x0418,                    /* code page 863*/
  179.     kTextEncodingDOSArabic        = 0x0419,                        /* code page 864*/
  180.     kTextEncodingDOSNordic        = 0x041A,                        /* code page 865*/
  181.     kTextEncodingDOSRussian        = 0x041B,                        /* code page 866*/
  182.     kTextEncodingDOSGreek2        = 0x041C,                        /* code page 869, IBM Modern Greek*/
  183.     kTextEncodingDOSThai        = 0x041D,                        /* code page 874, also for Windows*/
  184.     kTextEncodingDOSJapanese    = 0x0420,                        /* code page 932, also for Windows*/
  185.     kTextEncodingDOSChineseSimplif = 0x0421,                    /* code page 936, also for Windows*/
  186.     kTextEncodingDOSKorean        = 0x0422,                        /* code page 949, also for Windows; Unified Hangul Code*/
  187.     kTextEncodingDOSChineseTrad    = 0x0423,                        /* code page 950, also for Windows*/
  188.     kTextEncodingWindowsLatin1    = 0x0500,                        /* code page 1252*/
  189.     kTextEncodingWindowsANSI    = 0x0500,                        /* code page 1252 (alternate name)*/
  190.     kTextEncodingWindowsLatin2    = 0x0501,                        /* code page 1250, Central Europe*/
  191.     kTextEncodingWindowsCyrillic = 0x0502,                        /* code page 1251, Slavic Cyrillic*/
  192.     kTextEncodingWindowsGreek    = 0x0503,                        /* code page 1253*/
  193.     kTextEncodingWindowsLatin5    = 0x0504,                        /* code page 1254, Turkish*/
  194.     kTextEncodingWindowsHebrew    = 0x0505,                        /* code page 1255*/
  195.     kTextEncodingWindowsArabic    = 0x0506,                        /* code page 1256*/
  196.     kTextEncodingWindowsBalticRim = 0x0507,                        /* code page 1257*/
  197.     kTextEncodingWindowsKoreanJohab = 0x0510,                    /* code page 1361, for Windows NT*/
  198.                                                                 /* Various national standards begin at 0x600*/
  199.     kTextEncodingUS_ASCII        = 0x0600,
  200.     kTextEncodingJIS_X0201_76    = 0x0620,
  201.     kTextEncodingJIS_X0208_83    = 0x0621,
  202.     kTextEncodingJIS_X0208_90    = 0x0622,
  203.     kTextEncodingJIS_X0212_90    = 0x0623,
  204.     kTextEncodingJIS_C6226_78    = 0x0624,
  205.     kTextEncodingGB_2312_80        = 0x0630,
  206.     kTextEncodingGBK_95            = 0x0631,                        /* annex to GB 13000-93; for Windows 95*/
  207.     kTextEncodingKSC_5601_87    = 0x0640,                        /* same as KSC 5601-92 without Johab annex*/
  208.     kTextEncodingKSC_5601_92_Johab = 0x0641,                    /* KSC 5601-92 Johab annex*/
  209.     kTextEncodingCNS_11643_92_P1 = 0x0651,                        /* CNS 11643-1992 plane 1*/
  210.     kTextEncodingCNS_11643_92_P2 = 0x0652,                        /* CNS 11643-1992 plane 2*/
  211.     kTextEncodingCNS_11643_92_P3 = 0x0653,                        /* CNS 11643-1992 plane 3 (was plane 14 in 1986 version)*/
  212.                                                                 /* ISO 2022 collections begin at 0x800*/
  213.     kTextEncodingISO_2022_JP    = 0x0820,
  214.     kTextEncodingISO_2022_JP_2    = 0x0821,
  215.     kTextEncodingISO_2022_CN    = 0x0830,
  216.     kTextEncodingISO_2022_CN_EXT = 0x0831,
  217.     kTextEncodingISO_2022_KR    = 0x0840,                        /* EUC collections begin at 0x900*/
  218.     kTextEncodingEUC_JP            = 0x0920,                        /* ISO 646, 1-byte katakana, JIS 208, JIS 212*/
  219.     kTextEncodingEUC_CN            = 0x0930,                        /* ISO 646, GB 2312-80*/
  220.     kTextEncodingEUC_TW            = 0x0931,                        /* ISO 646, CNS 11643-1992 Planes 1-16*/
  221.     kTextEncodingEUC_KR            = 0x0940,                        /* ISO 646, KS C 5601-1987*/
  222.                                                                 /* Other standards begin at 0xA00*/
  223.     kTextEncodingShiftJIS        = 0x0A01,                        /* plain Shift-JIS*/
  224.     kTextEncodingKOI8_R            = 0x0A02,                        /* Russian internet standard*/
  225.     kTextEncodingBig5            = 0x0A03,                        /* Big-5 (has variants)*/
  226.     kTextEncodingMacRomanLatin1    = 0x0A04,                        /* Mac OS Roman permuted to align with ISO Latin-1*/
  227.     kTextEncodingHZ_GB_2312        = 0x0A05,                        /* HZ (RFC 1842, for Chinese mail & news)*/
  228.                                                                 /* Special value*/
  229.     kTextEncodingMultiRun        = 0x0FFF,                        /* Multi-encoding text with external run info*/
  230.                                                                 /* The following are older names for backward compatibility*/
  231.     kTextEncodingMacTradChinese    = 2,
  232.     kTextEncodingMacRSymbol        = 8,
  233.     kTextEncodingMacSimpChinese    = 25,
  234.     kTextEncodingMacGeez        = 28,
  235.     kTextEncodingMacEastEurRoman = 29,
  236.     kTextEncodingMacUninterp    = 32
  237. };
  238.  
  239. /* TextEncodingVariant type & values */
  240. typedef UInt32 TextEncodingVariant;
  241.  
  242. enum {
  243.                                                                 /* Default TextEncodingVariant, for any TextEncodingBase*/
  244.     kTextEncodingDefaultVariant    = 0,                            /* Variants of kTextEncodingMacJapanese*/
  245.     kJapaneseStandardVariant    = 0,
  246.     kJapaneseStdNoVerticalsVariant = 1,
  247.     kJapaneseBasicVariant        = 2,
  248.     kJapanesePostScriptScrnVariant = 3,
  249.     kJapanesePostScriptPrintVariant = 4,
  250.     kJapaneseVertAtKuPlusTenVariant = 5,
  251.     kJapaneseStdNoOneByteKanaVariant = 6,
  252.     kJapaneseBasicNoOneByteKanaVariant = 7,                        /* Variants of kTextEncodingMacHebrew*/
  253.     kHebrewStandardVariant        = 0,
  254.     kHebrewFigureSpaceVariant    = 1,                            /* Variants of Unicode & ISO 10646 encodings*/
  255.     kUnicodeNoSubset            = 0,
  256.     kUnicodeNoCompatibilityVariant = 1,
  257.     kUnicodeMaxDecomposedVariant = 2,
  258.     kUnicodeNoComposedVariant    = 3,
  259.     kUnicodeNoCorporateVariant    = 4,                            /* Variants of Big-5 encoding*/
  260.     kBig5_BasicVariant            = 0,
  261.     kBig5_StandardVariant        = 1,                            /* 0xC6A1-0xC7FC: kana, Cyrillic, enclosed numerics*/
  262.     kBig5_ETenVariant            = 2                                /* adds kana, Cyrillic, radicals, etc with hi bytes C6-C8,F9*/
  263. };
  264.  
  265. /* TextEncodingFormat type & values */
  266. typedef UInt32 TextEncodingFormat;
  267.  
  268. enum {
  269.                                                                 /* Default TextEncodingFormat for any TextEncodingBase*/
  270.     kTextEncodingDefaultFormat    = 0,                            /* Formats for Unicode & ISO 10646*/
  271.     kUnicode16BitFormat            = 0,
  272.     kUnicodeUTF7Format            = 1,
  273.     kUnicodeUTF8Format            = 2,
  274.     kUnicode32BitFormat            = 3
  275. };
  276.  
  277. /* TextEncoding type */
  278. typedef UInt32 TextEncoding;
  279. /* name part selector for GetTextEncodingName*/
  280. typedef UInt32 TextEncodingNameSelector;
  281.  
  282. enum {
  283.     kTextEncodingFullName        = 0,
  284.     kTextEncodingBaseName        = 0,
  285.     kTextEncodingVariantName    = 0,
  286.     kTextEncodingFormatName        = 0
  287. };
  288.  
  289. /* Types used in conversion */
  290. struct ScriptCodeRun {
  291.     ByteOffset                         offset;
  292.     ScriptCode                         script;
  293. };
  294. typedef struct ScriptCodeRun ScriptCodeRun;
  295.  
  296. typedef ScriptCodeRun *ScriptCodeRunPtr;
  297. typedef const ScriptCodeRun *ConstScriptCodeRunPtr;
  298. struct TextEncodingRun {
  299.     ByteOffset                         offset;
  300.     TextEncoding                     textEncoding;
  301. };
  302. typedef struct TextEncodingRun TextEncodingRun;
  303.  
  304. typedef UInt8 *TextPtr;
  305. typedef const UInt8 *ConstTextPtr;
  306. typedef TextEncodingRun *TextEncodingRunPtr;
  307. typedef TextEncodingRun *ConstTextEncodingRunPtr;
  308. /* enums for TextEncoding Conversion routines */
  309.  
  310. enum {
  311.     kTextScriptDontCare            = -128,
  312.     kTextLanguageDontCare        = -128,
  313.     kTextRegionDontCare            = -128
  314. };
  315.  
  316. /* Prototypes for TextEncoding functions */
  317. extern pascal TextEncoding CreateTextEncoding(TextEncodingBase encodingBase, TextEncodingVariant encodingVariant, TextEncodingFormat encodingFormat);
  318.  
  319. extern pascal TextEncodingBase GetTextEncodingBase(TextEncoding encoding);
  320.  
  321. extern pascal TextEncodingVariant GetTextEncodingVariant(TextEncoding encoding);
  322.  
  323. extern pascal TextEncodingFormat GetTextEncodingFormat(TextEncoding encoding);
  324.  
  325. extern pascal TextEncoding ResolveDefaultTextEncoding(TextEncoding encoding);
  326.  
  327. extern OSStatus GetTextEncodingName(TextEncoding iEncoding, TextEncodingNameSelector iNamePartSelector, RegionCode iPreferredRegion, TextEncoding iPreferredEncoding, ByteCount iBufLen, ByteCount *oNameLength, RegionCode *oActualRegion, TextEncoding *oActualEncoding, TextPtr oEncodingName);
  328.  
  329. #endif
  330. #if FOR_SYSTEM7_AND_SYSTEM8_COOPERATIVE
  331. extern pascal OSStatus UpgradeScriptInfoToTextEncoding(ScriptCode textScriptID, LangCode textLanguageID, RegionCode regionID, ConstStr255Param textFontname, TextEncoding *encoding);
  332.  
  333. extern pascal OSStatus RevertTextEncodingToScriptInfo(TextEncoding encoding, ScriptCode *textScriptID, LangCode *textLanguageID, Str255 textFontname);
  334.  
  335. #endif
  336.  
  337. #if PRAGMA_ALIGN_SUPPORTED
  338. #pragma options align=reset
  339. #endif
  340.  
  341. #if PRAGMA_IMPORT_SUPPORTED
  342. #pragma import off
  343. #endif
  344.  
  345. #ifdef __cplusplus
  346. }
  347. #endif
  348.  
  349. #endif /* __TEXTCOMMON__ */
  350.  
  351.