home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 April: Technology Seed / Mac Tech Seed Apr '97.toast / Text Encoding Converter / Headers / Unicode.h < prev   
Encoding:
C/C++ Source or Header  |  1997-03-12  |  12.9 KB  |  309 lines  |  [TEXT/MPS ]

  1. /*
  2.      File:        Unicode.h
  3.  
  4.      Contains:    Unicode Interfaces.
  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:                Unicode.i
  19.                      Revision:        53
  20.                      Dated:            2/6/97
  21.                      Last change by:    jag
  22.                      Last comment:    Fix a few typos and move deprecated APIs to the UnicodePriv.h
  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 __UNICODE__
  29. #define __UNICODE__
  30.  
  31. #ifndef __TYPES__
  32. #include <Types.h>
  33. #endif
  34. #ifndef __TEXTCOMMON__
  35. #include <TextCommon.h>
  36. #endif
  37. #ifndef __MIXEDMODE__
  38. #include <MixedMode.h>
  39. #endif
  40.  
  41. #ifdef __cplusplus
  42. extern "C" {
  43. #endif
  44.  
  45. #if PRAGMA_IMPORT_SUPPORTED
  46. #pragma import on
  47. #endif
  48.  
  49. #if PRAGMA_ALIGN_SUPPORTED
  50. #pragma options align=mac68k
  51. #endif
  52.  
  53. #if FOR_SYSTEM7_AND_SYSTEM8_PREEMPTIVE
  54. /* Unicode Converter Gestalt Constants: (••••these belong in Gestalt.i••••) */
  55.  
  56. enum {
  57.     gestaltUnicodeAttr            = 'unic',
  58.     gestaltUnicodeConverterPresent = 0,
  59.     gestaltUnicodeConverterMask    = 1L << gestaltUnicodeConverterPresent
  60. };
  61.  
  62. /* Basic types for Unicode characters and strings: */
  63. typedef UniChar *UniCharArrayPtr;
  64. typedef const UniChar *ConstUniCharArrayPtr;
  65. /* Unicode conversion contexts: */
  66. typedef struct OpaqueTextToUnicodeInfo* TextToUnicodeInfo;
  67. typedef struct OpaqueUnicodeToTextInfo* UnicodeToTextInfo;
  68. typedef struct OpaqueUnicodeToTextRunInfo* UnicodeToTextRunInfo;
  69. typedef const TextToUnicodeInfo ConstTextToUnicodeInfo;
  70. typedef const UnicodeToTextInfo ConstUnicodeToTextInfo;
  71. /* UnicodeMapVersion type & values */
  72. typedef SInt32 UnicodeMapVersion;
  73.  
  74. enum {
  75.     kUnicodeUseLatestMapping    = -1
  76. };
  77.  
  78. /* Types used in conversion */
  79. struct UnicodeMapping {
  80.     TextEncoding                     unicodeEncoding;
  81.     TextEncoding                     otherEncoding;
  82.     UnicodeMapVersion                 mappingVersion;
  83. };
  84. typedef struct UnicodeMapping UnicodeMapping;
  85.  
  86. typedef UnicodeMapping *UnicodeMappingPtr;
  87. typedef const UnicodeMapping *ConstUnicodeMappingPtr;
  88. /* Control flags for ConvertUnicodeToText and ConvertTextToUnicode */
  89.  
  90. enum {
  91.     kUnicodeUseFallbacksBit        = 0,
  92.     kUnicodeKeepInfoBit            = 1,
  93.     kUnicodeDirectionalityBits    = 2,
  94.     kUnicodeVerticalFormBit        = 4,
  95.     kUnicodeLooseMappingsBit    = 5,
  96.     kUnicodeStringUnterminatedBit = 6,
  97.     kUnicodeTextRunBit            = 7,
  98.     kUnicodeKeepSameEncodingBit    = 8
  99. };
  100.  
  101.  
  102. enum {
  103.     kUnicodeUseFallbacksMask    = 1L << kUnicodeUseFallbacksBit,
  104.     kUnicodeKeepInfoMask        = 1L << kUnicodeKeepInfoBit,
  105.     kUnicodeDirectionalityMask    = 3L << kUnicodeDirectionalityBits,
  106.     kUnicodeVerticalFormMask    = 1L << kUnicodeVerticalFormBit,
  107.     kUnicodeLooseMappingsMask    = 1L << kUnicodeLooseMappingsBit,
  108.     kUnicodeStringUnterminatedMask = 1L << kUnicodeStringUnterminatedBit,
  109.     kUnicodeTextRunMask            = 1L << kUnicodeTextRunBit,
  110.     kUnicodeKeepSameEncodingMask = 1L << kUnicodeKeepSameEncodingBit
  111. };
  112.  
  113. /* Values for kUnicodeDirectionality field */
  114.  
  115. enum {
  116.     kUnicodeDefaultDirection    = 0,
  117.     kUnicodeLeftToRight            = 1,
  118.     kUnicodeRightToLeft            = 2
  119. };
  120.  
  121. /* Control flags for TruncateForUnicodeToText: */
  122.  
  123. enum {
  124.     kUnicodeTextElementSafeBit    = 0,
  125.     kUnicodeRestartSafeBit        = 1
  126. };
  127.  
  128.  
  129. enum {
  130.     kUnicodeTextElementSafeMask    = 1L << kUnicodeTextElementSafeBit,
  131.     kUnicodeRestartSafeMask        = 1L << kUnicodeRestartSafeBit
  132. };
  133.  
  134. /* Filter bits for filter field in QueryUnicodeMappings and CountUnicodeMappings: */
  135.  
  136. enum {
  137.     kUnicodeMatchUnicodeBaseBit    = 0,
  138.     kUnicodeMatchUnicodeVariantBit = 1,
  139.     kUnicodeMatchUnicodeFormatBit = 2,
  140.     kUnicodeMatchOtherBaseBit    = 3,
  141.     kUnicodeMatchOtherVariantBit = 4,
  142.     kUnicodeMatchOtherFormatBit    = 5
  143. };
  144.  
  145.  
  146. enum {
  147.     kUnicodeMatchUnicodeBaseMask = 1L << kUnicodeMatchUnicodeBaseBit,
  148.     kUnicodeMatchUnicodeVariantMask = 1L << kUnicodeMatchUnicodeVariantBit,
  149.     kUnicodeMatchUnicodeFormatMask = 1L << kUnicodeMatchUnicodeFormatBit,
  150.     kUnicodeMatchOtherBaseMask    = 1L << kUnicodeMatchOtherBaseBit,
  151.     kUnicodeMatchOtherVariantMask = 1L << kUnicodeMatchOtherVariantBit,
  152.     kUnicodeMatchOtherFormatMask = 1L << kUnicodeMatchOtherFormatBit
  153. };
  154.  
  155. /* Control flags for SetFallbackUnicodeToText */
  156.  
  157. enum {
  158.     kUnicodeFallbackSequencingBits = 0
  159. };
  160.  
  161.  
  162. enum {
  163.     kUnicodeFallbackSequencingMask = 3L << kUnicodeFallbackSequencingBits
  164. };
  165.  
  166. /* values for kUnicodeFallbackSequencing field */
  167.  
  168. enum {
  169.     kUnicodeFallbackDefaultOnly    = 0L,
  170.     kUnicodeFallbackCustomOnly    = 1L,
  171.     kUnicodeFallbackDefaultFirst = 2L,
  172.     kUnicodeFallbackCustomFirst    = 3L
  173. };
  174.  
  175. #endif
  176. #if FOR_SYSTEM7_AND_SYSTEM8_COOPERATIVE
  177. /* Caller-supplied entry point to a fallback handler */
  178. typedef pascal OSStatus (*UnicodeToTextFallbackProcPtr)(UniChar *srcUniStr, ByteCount srcUniStrLen, ByteCount *srcConvLen, TextPtr destStr, ByteCount destStrLen, ByteCount *destConvLen, LogicalAddress contextPtr, ConstUnicodeMappingPtr unicodeMappingPtr);
  179.  
  180. #if GENERATINGCFM
  181. typedef UniversalProcPtr UnicodeToTextFallbackUPP;
  182. #else
  183. typedef UnicodeToTextFallbackProcPtr UnicodeToTextFallbackUPP;
  184. #endif
  185.  
  186. enum {
  187.     uppUnicodeToTextFallbackProcInfo = kPascalStackBased
  188.          | RESULT_SIZE(SIZE_CODE(sizeof(OSStatus)))
  189.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(UniChar *)))
  190.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(ByteCount)))
  191.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(ByteCount *)))
  192.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(TextPtr)))
  193.          | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(ByteCount)))
  194.          | STACK_ROUTINE_PARAMETER(6, SIZE_CODE(sizeof(ByteCount *)))
  195.          | STACK_ROUTINE_PARAMETER(7, SIZE_CODE(sizeof(LogicalAddress)))
  196.          | STACK_ROUTINE_PARAMETER(8, SIZE_CODE(sizeof(ConstUnicodeMappingPtr)))
  197. };
  198.  
  199. #if GENERATINGCFM
  200. #define NewUnicodeToTextFallbackProc(userRoutine)        \
  201.         (UnicodeToTextFallbackUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppUnicodeToTextFallbackProcInfo, GetCurrentArchitecture())
  202. #else
  203. #define NewUnicodeToTextFallbackProc(userRoutine)        \
  204.         ((UnicodeToTextFallbackUPP) (userRoutine))
  205. #endif
  206.  
  207. #if GENERATINGCFM
  208. #define CallUnicodeToTextFallbackProc(userRoutine, srcUniStr, srcUniStrLen, srcConvLen, destStr, destStrLen, destConvLen, contextPtr, unicodeMappingPtr)        \
  209.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppUnicodeToTextFallbackProcInfo, (srcUniStr), (srcUniStrLen), (srcConvLen), (destStr), (destStrLen), (destConvLen), (contextPtr), (unicodeMappingPtr))
  210. #else
  211. #define CallUnicodeToTextFallbackProc(userRoutine, srcUniStr, srcUniStrLen, srcConvLen, destStr, destStrLen, destConvLen, contextPtr, unicodeMappingPtr)        \
  212.         (*(userRoutine))((srcUniStr), (srcUniStrLen), (srcConvLen), (destStr), (destStrLen), (destConvLen), (contextPtr), (unicodeMappingPtr))
  213. #endif
  214. #endif
  215. #if FOR_SYSTEM7_AND_SYSTEM8_PREEMPTIVE
  216. typedef pascal OSStatus (*UnicodeToTextFallbackPreemptiveProcPtr)(UniChar *srcUniStr, ByteCount srcUniStrLen, ByteCount *srcConvLen, TextPtr destStr, ByteCount destStrLen, ByteCount *destConvLen, LogicalAddress contextPtr, ConstUnicodeMappingPtr unicodeMappingPtr);
  217. /* Function prototypes */
  218. /* Create a new TextToUnicodeInfo structure. */
  219. extern pascal OSStatus CreateTextToUnicodeInfo(ConstUnicodeMappingPtr iUnicodeMapping, TextToUnicodeInfo *oTextToUnicodeInfo);
  220.  
  221. extern pascal OSStatus CreateTextToUnicodeInfoByEncoding(TextEncoding iEncoding, TextToUnicodeInfo *oTextToUnicodeInfo);
  222.  
  223. /* Create a new UnicodeToTextInfo structure. */
  224. extern pascal OSStatus CreateUnicodeToTextInfo(ConstUnicodeMappingPtr iUnicodeMapping, UnicodeToTextInfo *oUnicodeToTextInfo);
  225.  
  226. extern pascal OSStatus CreateUnicodeToTextInfoByEncoding(TextEncoding iEncoding, UnicodeToTextInfo *oUnicodeToTextInfo);
  227.  
  228. /* Create a new UnicodeToTextRunInfo structure. */
  229. extern pascal OSStatus CreateUnicodeToTextRunInfo(ItemCount iNumberOfMappings, const UnicodeMapping iUnicodeMappings[], UnicodeToTextRunInfo *oUnicodeToTextInfo);
  230.  
  231. extern pascal OSStatus CreateUnicodeToTextRunInfoByEncoding(ItemCount iNumberOfEncodings, const TextEncoding iEncodings[], UnicodeToTextRunInfo *oUnicodeToTextInfo);
  232.  
  233. /* Dispose of a TextToUnicodeInfo structure. */
  234. extern pascal OSStatus DisposeTextToUnicodeInfo(TextToUnicodeInfo *ioTextToUnicodeInfo);
  235.  
  236. /* Dispose of a UnicodeToTextInfo structure. */
  237. extern pascal OSStatus DisposeUnicodeToTextInfo(UnicodeToTextInfo *ioUnicodeToTextInfo);
  238.  
  239. extern pascal OSStatus DisposeUnicodeToTextRunInfo(UnicodeToTextRunInfo *ioUnicodeToTextInfo);
  240.  
  241. /* Convert a string to Unicode. */
  242. extern pascal OSStatus ConvertFromTextToUnicode(TextToUnicodeInfo iTextToUnicodeInfo, ByteCount iSourceLen, ConstLogicalAddress iSourceStr, OptionBits iControlFlags, ItemCount iOffsetCount, ByteOffset iOffsetArray[], ItemCount *oOffsetCount, ByteOffset oOffsetArray[], ByteCount iBufLen, ByteCount *oSourceRead, ByteCount *oUnicodeLen, UniCharArrayPtr oUnicodeStr);
  243.  
  244. /* Convert a string from Unicode. */
  245. extern pascal OSStatus ConvertFromUnicodeToText(UnicodeToTextInfo iUnicodeToTextInfo, ByteCount iUnicodeLen, ConstUniCharArrayPtr iUnicodeStr, OptionBits iControlFlags, ItemCount iOffsetCount, ByteOffset iOffsetArray[], ItemCount *oOffsetCount, ByteOffset oOffsetArray[], ByteCount iBufLen, ByteCount *oInputRead, ByteCount *oOutputLen, LogicalAddress oOutputStr);
  246.  
  247. extern pascal OSStatus ConvertFromUnicodeToTextRun(UnicodeToTextRunInfo iUnicodeToTextInfo, ByteCount iUnicodeLen, ConstUniCharArrayPtr iUnicodeStr, OptionBits iControlFlags, ItemCount iOffsetCount, ByteOffset iOffsetArray[], ItemCount *oOffsetCount, ByteOffset oOffsetArray[], ByteCount iBufLen, ByteCount *oInputRead, ByteCount *oOutputLen, LogicalAddress oOutputStr, ItemCount iEncodingRunBufLen, ItemCount *oEncodingRunOutLen, TextEncodingRun oEncodingRuns[]);
  248.  
  249. /* Truncate a multibyte string at a safe place. */
  250. extern pascal OSStatus TruncateForTextToUnicode(ConstTextToUnicodeInfo iTextToUnicodeInfo, ByteCount iSourceLen, ConstLogicalAddress iSourceStr, ByteCount iMaxLen, ByteCount *oTruncatedLen);
  251.  
  252. /* Truncate a Unicode string at a safe place. */
  253. extern pascal OSStatus TruncateForUnicodeToText(ConstUnicodeToTextInfo iUnicodeToTextInfo, ByteCount iSourceLen, ConstUniCharArrayPtr iSourceStr, OptionBits iControlFlags, ByteCount iMaxLen, ByteCount *oTruncatedLen);
  254.  
  255. /* Convert a Pascal string to Unicode. */
  256. extern pascal OSStatus ConvertFromPStringToUnicode(TextToUnicodeInfo iTextToUnicodeInfo, ConstStr255Param iPascalStr, ByteCount iBufLen, ByteCount *oUnicodeLen, UniCharArrayPtr oUnicodeStr);
  257.  
  258. /* Convert a Unicode string to Pascal. */
  259. extern pascal OSStatus ConvertFromUnicodeToPString(UnicodeToTextInfo iUnicodeToTextInfo, ByteCount iUnicodeLen, ConstUniCharArrayPtr iUnicodeStr, Str255 oPascalStr);
  260.  
  261. /* Count the available conversion mappings. */
  262. extern pascal OSStatus CountUnicodeMappings(OptionBits iFilter, ConstUnicodeMappingPtr iFindMapping, ItemCount *oActualCount);
  263.  
  264. /* Get a list of the available conversion mappings. */
  265. extern pascal OSStatus QueryUnicodeMappings(OptionBits iFilter, ConstUnicodeMappingPtr iFindMapping, ItemCount iMaxCount, ItemCount *oActualCount, UnicodeMapping oReturnedMappings[]);
  266.  
  267. /* Change the TextToUnicodeInfo to another mapping. */
  268. extern pascal OSStatus ChangeTextToUnicodeInfo(TextToUnicodeInfo ioTextToUnicodeInfo, ConstUnicodeMappingPtr iUnicodeMapping);
  269.  
  270. /* Change the UnicodeToTextInfo to another mapping. */
  271. extern pascal OSStatus ChangeUnicodeToTextInfo(UnicodeToTextInfo ioUnicodeToTextInfo, ConstUnicodeMappingPtr iUnicodeMapping);
  272.  
  273. #endif
  274. #if FOR_SYSTEM8_PREEMPTIVE
  275. /* Setup the fallback handler for converting Unicode To Text. */
  276. extern pascal OSStatus SetFallbackUnicodeToTextPreemptive(UnicodeToTextInfo iUnicodeToTextInfo, UnicodeToTextFallbackPreemptiveProcPtr iFallback, OptionBits iControlFlags, LogicalAddress iInfoPtr);
  277.  
  278. extern pascal OSStatus SetFallbackUnicodeToTextRunPreemptive(UnicodeToTextRunInfo iUnicodeToTextRunInfo, UnicodeToTextFallbackPreemptiveProcPtr iFallback, OptionBits iControlFlags, LogicalAddress iInfoPtr);
  279.  
  280. #endif
  281. #if FOR_SYSTEM7_AND_SYSTEM8_COOPERATIVE
  282. /* Create a new UnicodeToTextRunInfo structure. */
  283. extern pascal OSStatus CreateUnicodeToTextRunInfoByScriptCode(ItemCount iNumberOfScriptCodes, const ScriptCode iScripts[], UnicodeToTextRunInfo *oUnicodeToTextInfo);
  284.  
  285. /* Convert a string from Unicode. */
  286. extern pascal OSStatus ConvertFromUnicodeToScriptCodeRun(UnicodeToTextRunInfo iUnicodeToTextInfo, ByteCount iUnicodeLen, ConstUniCharArrayPtr iUnicodeStr, OptionBits iControlFlags, ItemCount iOffsetCount, ByteOffset iOffsetArray[], ItemCount *oOffsetCount, ByteOffset oOffsetArray[], ByteCount iBufLen, ByteCount *oInputRead, ByteCount *oOutputLen, LogicalAddress oOutputStr, ItemCount iScriptRunBufLen, ItemCount *oScriptRunOutLen, ScriptCodeRun oScriptCodeRuns[]);
  287.  
  288. /* Setup the fallback handler for converting Unicode To Text. */
  289. extern pascal OSStatus SetFallbackUnicodeToText(UnicodeToTextInfo iUnicodeToTextInfo, UnicodeToTextFallbackUPP iFallback, OptionBits iControlFlags, LogicalAddress iInfoPtr);
  290.  
  291. extern pascal OSStatus SetFallbackUnicodeToTextRun(UnicodeToTextRunInfo iUnicodeToTextRunInfo, UnicodeToTextFallbackUPP iFallback, OptionBits iControlFlags, LogicalAddress iInfoPtr);
  292.  
  293. #endif
  294.  
  295. #if PRAGMA_ALIGN_SUPPORTED
  296. #pragma options align=reset
  297. #endif
  298.  
  299. #if PRAGMA_IMPORT_SUPPORTED
  300. #pragma import off
  301. #endif
  302.  
  303. #ifdef __cplusplus
  304. }
  305. #endif
  306.  
  307. #endif /* __UNICODE__ */
  308.  
  309.