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

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