home *** CD-ROM | disk | FTP | other *** search
- /*
- File: Unicode.h
-
- Contains: Unicode Interfaces.
-
- Version: Mac OS 8 (Tempo)
-
- Copyright: © 1984-1997 by Apple Computer, Inc.
- All rights reserved.
-
- Bugs: Report bugs to Radar component “System Interfaces”, “Latest”
- List the version information (from above) in the Problem Description.
-
- */
- #ifndef __UNICODE__
- #define __UNICODE__
-
- #ifndef __TYPES__
- #include <Types.h>
- #endif
- #ifndef __TEXTCOMMON__
- #include <TextCommon.h>
- #endif
- #ifndef __MIXEDMODE__
- #include <MixedMode.h>
- #endif
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- #if PRAGMA_IMPORT_SUPPORTED
- #pragma import on
- #endif
-
- #if PRAGMA_ALIGN_SUPPORTED
- #pragma options align=mac68k
- #endif
-
- /* Basic types for Unicode characters and strings: */
- typedef UniChar *UniCharArrayPtr;
- typedef const UniChar *ConstUniCharArrayPtr;
- /* Unicode conversion contexts: */
- typedef struct OpaqueTextToUnicodeInfo* TextToUnicodeInfo;
- typedef struct OpaqueUnicodeToTextInfo* UnicodeToTextInfo;
- typedef struct OpaqueUnicodeToTextRunInfo* UnicodeToTextRunInfo;
- typedef const TextToUnicodeInfo ConstTextToUnicodeInfo;
- typedef const UnicodeToTextInfo ConstUnicodeToTextInfo;
- /* UnicodeMapVersion type & values */
- typedef SInt32 UnicodeMapVersion;
-
- enum {
- kUnicodeUseLatestMapping = -1
- };
-
- /* Types used in conversion */
- struct UnicodeMapping {
- TextEncoding unicodeEncoding;
- TextEncoding otherEncoding;
- UnicodeMapVersion mappingVersion;
- };
- typedef struct UnicodeMapping UnicodeMapping;
-
- typedef UnicodeMapping *UnicodeMappingPtr;
- typedef const UnicodeMapping *ConstUnicodeMappingPtr;
- /* Control flags for ConvertUnicodeToText and ConvertTextToUnicode */
-
- enum {
- kUnicodeUseFallbacksBit = 0,
- kUnicodeKeepInfoBit = 1,
- kUnicodeDirectionalityBits = 2,
- kUnicodeVerticalFormBit = 4,
- kUnicodeLooseMappingsBit = 5,
- kUnicodeStringUnterminatedBit = 6,
- kUnicodeTextRunBit = 7,
- kUnicodeKeepSameEncodingBit = 8
- };
-
-
- enum {
- kUnicodeUseFallbacksMask = 1L << kUnicodeUseFallbacksBit,
- kUnicodeKeepInfoMask = 1L << kUnicodeKeepInfoBit,
- kUnicodeDirectionalityMask = 3L << kUnicodeDirectionalityBits,
- kUnicodeVerticalFormMask = 1L << kUnicodeVerticalFormBit,
- kUnicodeLooseMappingsMask = 1L << kUnicodeLooseMappingsBit,
- kUnicodeStringUnterminatedMask = 1L << kUnicodeStringUnterminatedBit,
- kUnicodeTextRunMask = 1L << kUnicodeTextRunBit,
- kUnicodeKeepSameEncodingMask = 1L << kUnicodeKeepSameEncodingBit
- };
-
- /* Values for kUnicodeDirectionality field */
-
- enum {
- kUnicodeDefaultDirection = 0,
- kUnicodeLeftToRight = 1,
- kUnicodeRightToLeft = 2
- };
-
- /* Directionality masks for control flags */
-
- enum {
- kUnicodeDefaultDirectionMask = kUnicodeDefaultDirection << kUnicodeDirectionalityBits,
- kUnicodeLeftToRightMask = kUnicodeLeftToRight << kUnicodeDirectionalityBits,
- kUnicodeRightToLeftMask = kUnicodeRightToLeft << kUnicodeDirectionalityBits
- };
-
- /* Control flags for TruncateForUnicodeToText: */
- /*
- None are currently defined.
- Previously we had two:
- kUnicodeTextElementSafeBit = 0
- kUnicodeRestartSafeBit = 1
- However, kUnicodeTextElementSafeBit is unnecessary since it is always implied by a call
- to TruncateForUnicodeToText. Also, kUnicodeRestartSafeBit was unimplemented and is
- probably unnecessary, since restart-safeness is handled by setting kUnicodeKeepInfoBit
- with ConvertFromUnicodeToText. TruncateForUnicodeToText can still be called with these
- flags set without generating a paramErr, but the bits have no effect on its operation.
- */
- /* Filter bits for filter field in QueryUnicodeMappings and CountUnicodeMappings: */
-
- enum {
- kUnicodeMatchUnicodeBaseBit = 0,
- kUnicodeMatchUnicodeVariantBit = 1,
- kUnicodeMatchUnicodeFormatBit = 2,
- kUnicodeMatchOtherBaseBit = 3,
- kUnicodeMatchOtherVariantBit = 4,
- kUnicodeMatchOtherFormatBit = 5
- };
-
-
- enum {
- kUnicodeMatchUnicodeBaseMask = 1L << kUnicodeMatchUnicodeBaseBit,
- kUnicodeMatchUnicodeVariantMask = 1L << kUnicodeMatchUnicodeVariantBit,
- kUnicodeMatchUnicodeFormatMask = 1L << kUnicodeMatchUnicodeFormatBit,
- kUnicodeMatchOtherBaseMask = 1L << kUnicodeMatchOtherBaseBit,
- kUnicodeMatchOtherVariantMask = 1L << kUnicodeMatchOtherVariantBit,
- kUnicodeMatchOtherFormatMask = 1L << kUnicodeMatchOtherFormatBit
- };
-
- /* Control flags for SetFallbackUnicodeToText */
-
- enum {
- kUnicodeFallbackSequencingBits = 0
- };
-
-
- enum {
- kUnicodeFallbackSequencingMask = 3L << kUnicodeFallbackSequencingBits
- };
-
- /* values for kUnicodeFallbackSequencing field */
-
- enum {
- kUnicodeFallbackDefaultOnly = 0L,
- kUnicodeFallbackCustomOnly = 1L,
- kUnicodeFallbackDefaultFirst = 2L,
- kUnicodeFallbackCustomFirst = 3L
- };
-
- #if FOR_SYSTEM7_AND_SYSTEM8_COOPERATIVE
- /* Caller-supplied entry point to a fallback handler */
- typedef pascal OSStatus (*UnicodeToTextFallbackProcPtr)(UniChar *srcUniStr, ByteCount srcUniStrLen, ByteCount *srcConvLen, TextPtr destStr, ByteCount destStrLen, ByteCount *destConvLen, LogicalAddress contextPtr, ConstUnicodeMappingPtr unicodeMappingPtr);
-
- #if GENERATINGCFM
- typedef UniversalProcPtr UnicodeToTextFallbackUPP;
- #else
- typedef UnicodeToTextFallbackProcPtr UnicodeToTextFallbackUPP;
- #endif
-
- enum {
- uppUnicodeToTextFallbackProcInfo = kPascalStackBased
- | RESULT_SIZE(SIZE_CODE(sizeof(OSStatus)))
- | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(UniChar *)))
- | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(ByteCount)))
- | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(ByteCount *)))
- | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(TextPtr)))
- | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(ByteCount)))
- | STACK_ROUTINE_PARAMETER(6, SIZE_CODE(sizeof(ByteCount *)))
- | STACK_ROUTINE_PARAMETER(7, SIZE_CODE(sizeof(LogicalAddress)))
- | STACK_ROUTINE_PARAMETER(8, SIZE_CODE(sizeof(ConstUnicodeMappingPtr)))
- };
-
- #if GENERATINGCFM
- #define NewUnicodeToTextFallbackProc(userRoutine) \
- (UnicodeToTextFallbackUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppUnicodeToTextFallbackProcInfo, GetCurrentArchitecture())
- #else
- #define NewUnicodeToTextFallbackProc(userRoutine) \
- ((UnicodeToTextFallbackUPP) (userRoutine))
- #endif
-
- #if GENERATINGCFM
- #define CallUnicodeToTextFallbackProc(userRoutine, srcUniStr, srcUniStrLen, srcConvLen, destStr, destStrLen, destConvLen, contextPtr, unicodeMappingPtr) \
- CallUniversalProc((UniversalProcPtr)(userRoutine), uppUnicodeToTextFallbackProcInfo, (srcUniStr), (srcUniStrLen), (srcConvLen), (destStr), (destStrLen), (destConvLen), (contextPtr), (unicodeMappingPtr))
- #else
- #define CallUnicodeToTextFallbackProc(userRoutine, srcUniStr, srcUniStrLen, srcConvLen, destStr, destStrLen, destConvLen, contextPtr, unicodeMappingPtr) \
- (*(userRoutine))((srcUniStr), (srcUniStrLen), (srcConvLen), (destStr), (destStrLen), (destConvLen), (contextPtr), (unicodeMappingPtr))
- #endif
- #endif
- /* Function prototypes */
- /* Create a new TextToUnicodeInfo structure. */
- extern pascal OSStatus CreateTextToUnicodeInfo(ConstUnicodeMappingPtr iUnicodeMapping, TextToUnicodeInfo *oTextToUnicodeInfo);
-
- extern pascal OSStatus CreateTextToUnicodeInfoByEncoding(TextEncoding iEncoding, TextToUnicodeInfo *oTextToUnicodeInfo);
-
- /* Create a new UnicodeToTextInfo structure. */
- extern pascal OSStatus CreateUnicodeToTextInfo(ConstUnicodeMappingPtr iUnicodeMapping, UnicodeToTextInfo *oUnicodeToTextInfo);
-
- extern pascal OSStatus CreateUnicodeToTextInfoByEncoding(TextEncoding iEncoding, UnicodeToTextInfo *oUnicodeToTextInfo);
-
- /* Create a new UnicodeToTextRunInfo structure. */
- extern pascal OSStatus CreateUnicodeToTextRunInfo(ItemCount iNumberOfMappings, const UnicodeMapping iUnicodeMappings[], UnicodeToTextRunInfo *oUnicodeToTextInfo);
-
- extern pascal OSStatus CreateUnicodeToTextRunInfoByEncoding(ItemCount iNumberOfEncodings, const TextEncoding iEncodings[], UnicodeToTextRunInfo *oUnicodeToTextInfo);
-
- /* Dispose of a TextToUnicodeInfo structure. */
- extern pascal OSStatus DisposeTextToUnicodeInfo(TextToUnicodeInfo *ioTextToUnicodeInfo);
-
- /* Dispose of a UnicodeToTextInfo structure. */
- extern pascal OSStatus DisposeUnicodeToTextInfo(UnicodeToTextInfo *ioUnicodeToTextInfo);
-
- extern pascal OSStatus DisposeUnicodeToTextRunInfo(UnicodeToTextRunInfo *ioUnicodeToTextInfo);
-
- /* Convert a string to Unicode. */
- 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);
-
- /* Convert a string from Unicode. */
- 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);
-
- 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[]);
-
- /* Truncate a multibyte string at a safe place. */
- extern pascal OSStatus TruncateForTextToUnicode(ConstTextToUnicodeInfo iTextToUnicodeInfo, ByteCount iSourceLen, ConstLogicalAddress iSourceStr, ByteCount iMaxLen, ByteCount *oTruncatedLen);
-
- /* Truncate a Unicode string at a safe place. */
- extern pascal OSStatus TruncateForUnicodeToText(ConstUnicodeToTextInfo iUnicodeToTextInfo, ByteCount iSourceLen, ConstUniCharArrayPtr iSourceStr, OptionBits iControlFlags, ByteCount iMaxLen, ByteCount *oTruncatedLen);
-
- /* Convert a Pascal string to Unicode. */
- extern pascal OSStatus ConvertFromPStringToUnicode(TextToUnicodeInfo iTextToUnicodeInfo, ConstStr255Param iPascalStr, ByteCount iBufLen, ByteCount *oUnicodeLen, UniCharArrayPtr oUnicodeStr);
-
- /* Convert a Unicode string to Pascal. */
- extern pascal OSStatus ConvertFromUnicodeToPString(UnicodeToTextInfo iUnicodeToTextInfo, ByteCount iUnicodeLen, ConstUniCharArrayPtr iUnicodeStr, Str255 oPascalStr);
-
- /* Count the available conversion mappings. */
- extern pascal OSStatus CountUnicodeMappings(OptionBits iFilter, ConstUnicodeMappingPtr iFindMapping, ItemCount *oActualCount);
-
- /* Get a list of the available conversion mappings. */
- extern pascal OSStatus QueryUnicodeMappings(OptionBits iFilter, ConstUnicodeMappingPtr iFindMapping, ItemCount iMaxCount, ItemCount *oActualCount, UnicodeMapping oReturnedMappings[]);
-
- /* Change the TextToUnicodeInfo to another mapping. */
- extern pascal OSStatus ChangeTextToUnicodeInfo(TextToUnicodeInfo ioTextToUnicodeInfo, ConstUnicodeMappingPtr iUnicodeMapping);
-
- /* Change the UnicodeToTextInfo to another mapping. */
- extern pascal OSStatus ChangeUnicodeToTextInfo(UnicodeToTextInfo ioUnicodeToTextInfo, ConstUnicodeMappingPtr iUnicodeMapping);
-
- /* Create a new UnicodeToTextRunInfo structure. */
- extern pascal OSStatus CreateUnicodeToTextRunInfoByScriptCode(ItemCount iNumberOfScriptCodes, const ScriptCode iScripts[], UnicodeToTextRunInfo *oUnicodeToTextInfo);
-
- /* Convert a string from Unicode. */
- 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[]);
-
- #if FOR_SYSTEM7_AND_SYSTEM8_COOPERATIVE
- /* Setup the fallback handler for converting Unicode To Text. */
- extern pascal OSStatus SetFallbackUnicodeToText(UnicodeToTextInfo iUnicodeToTextInfo, UnicodeToTextFallbackUPP iFallback, OptionBits iControlFlags, LogicalAddress iInfoPtr);
-
- extern pascal OSStatus SetFallbackUnicodeToTextRun(UnicodeToTextRunInfo iUnicodeToTextRunInfo, UnicodeToTextFallbackUPP iFallback, OptionBits iControlFlags, LogicalAddress iInfoPtr);
-
- #endif
-
- #if PRAGMA_ALIGN_SUPPORTED
- #pragma options align=reset
- #endif
-
- #if PRAGMA_IMPORT_SUPPORTED
- #pragma import off
- #endif
-
- #ifdef __cplusplus
- }
- #endif
-
- #endif /* __UNICODE__ */
-
-