diff options
Diffstat (limited to 'common/quicktime_win32/UnicodeUtilities.h')
| -rw-r--r-- | common/quicktime_win32/UnicodeUtilities.h | 577 |
1 files changed, 577 insertions, 0 deletions
diff --git a/common/quicktime_win32/UnicodeUtilities.h b/common/quicktime_win32/UnicodeUtilities.h new file mode 100644 index 0000000..baf757d --- /dev/null +++ b/common/quicktime_win32/UnicodeUtilities.h @@ -0,0 +1,577 @@ +/* + File: UnicodeUtilities.h + + Contains: Types, constants, prototypes for Unicode Utilities (Unicode input and text utils) + + Version: QuickTime 7.3 + + Copyright: (c) 2007 (c) 1997-2001 by Apple Computer, Inc., all rights reserved. + + Bugs?: For bug reports, consult the following page on + the World Wide Web: + + http://developer.apple.com/bugreporter/ + +*/ +#ifndef __UNICODEUTILITIES__ +#define __UNICODEUTILITIES__ + +#ifndef __MACTYPES__ +#include <MacTypes.h> +#endif + + +#ifndef __MACLOCALES__ +#include <MacLocales.h> +#endif + +#ifndef __TEXTCOMMON__ +#include <TextCommon.h> +#endif + + + +#if PRAGMA_ONCE +#pragma once +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#if PRAGMA_IMPORT +#pragma import on +#endif + +#if PRAGMA_STRUCT_ALIGN + #pragma options align=mac68k +#elif PRAGMA_STRUCT_PACKPUSH + #pragma pack(push, 2) +#elif PRAGMA_STRUCT_PACK + #pragma pack(2) +#endif + +/* + ------------------------------------------------------------------------------------------------- + CONSTANTS & DATA STRUCTURES for UCKeyTranslate & UCKeyboardLayout ('uchr' resource) + ------------------------------------------------------------------------------------------------- +*/ + +/* + ------------------------------------------------------------------------------------------------- + UCKeyOutput & related stuff + The interpretation of UCKeyOutput depends on bits 15-14. + If they are 01, then bits 0-13 are an index in UCKeyStateRecordsIndex (resource-wide list). + If they are 10, then bits 0-13 are an index in UCKeySequenceDataIndex (resource-wide list), + or if UCKeySequenceDataIndex is not present or the index is beyond the end of the list, + then bits 0-15 are a single Unicode character. + Otherwise, bits 0-15 are a single Unicode character; a value of 0xFFFE-0xFFFF means no character + output. + UCKeyCharSeq is similar, but does not support indices in UCKeyStateRecordsIndex. For bits 15-14: + If they are 10, then bits 0-13 are an index in UCKeySequenceDataIndex (resource-wide list), + or if UCKeySequenceDataIndex is not present or the index is beyond the end of the list, + then bits 0-15 are a single Unicode character. + Otherwise, bits 0-15 are a single Unicode character; a value of 0xFFFE-0xFFFF means no character + output. + ------------------------------------------------------------------------------------------------- +*/ + +typedef UInt16 UCKeyOutput; +typedef UInt16 UCKeyCharSeq; +enum { + kUCKeyOutputStateIndexMask = 0x4000, + kUCKeyOutputSequenceIndexMask = 0x8000, + kUCKeyOutputTestForIndexMask = 0xC000, /* test bits 14-15*/ + kUCKeyOutputGetIndexMask = 0x3FFF /* get bits 0-13*/ +}; + +/* + ------------------------------------------------------------------------------------------------- + UCKeyStateRecord & related stuff + The UCKeyStateRecord information is used as follows. If the current state is zero, + output stateZeroCharData and set the state to stateZeroNextState. If the current state + is non-zero and there is an entry for it in stateEntryData, then output the corresponding + charData and set the state to nextState. Otherwise, output the state terminator from + UCKeyStateTerminators for the current state (or nothing if there is no UCKeyStateTerminators + table or it has no entry for the current state), then output stateZeroCharData and set the + state to stateZeroNextState. + ------------------------------------------------------------------------------------------------- +*/ + +struct UCKeyStateRecord { + UCKeyCharSeq stateZeroCharData; + UInt16 stateZeroNextState; + UInt16 stateEntryCount; + UInt16 stateEntryFormat; + /* This is followed by an array of stateEntryCount elements*/ + /* in the specified format. Here we just show a dummy array.*/ + UInt32 stateEntryData[1]; +}; +typedef struct UCKeyStateRecord UCKeyStateRecord; +/* + Here are the codes for entry formats currently defined. + Each entry maps from curState to charData and nextState. +*/ +enum { + kUCKeyStateEntryTerminalFormat = 0x0001, + kUCKeyStateEntryRangeFormat = 0x0002 +}; + +/* + For UCKeyStateEntryTerminal - + nextState is always 0, so we don't have a field for it +*/ + +struct UCKeyStateEntryTerminal { + UInt16 curState; + UCKeyCharSeq charData; +}; +typedef struct UCKeyStateEntryTerminal UCKeyStateEntryTerminal; +/* + For UCKeyStateEntryRange - + If curState >= curStateStart and curState <= curStateStart+curStateRange, + then it matches the entry, and we transform charData and nextState as follows: + If charData < 0xFFFE, then charData += (curState-curStateStart)*deltaMultiplier + If nextState != 0, then nextState += (curState-curStateStart)*deltaMultiplier +*/ +struct UCKeyStateEntryRange { + UInt16 curStateStart; + UInt8 curStateRange; + UInt8 deltaMultiplier; + UCKeyCharSeq charData; + UInt16 nextState; +}; +typedef struct UCKeyStateEntryRange UCKeyStateEntryRange; +/* + ------------------------------------------------------------------------------------------------- + UCKeyboardLayout & related stuff + The UCKeyboardLayout struct given here is only for the resource header. It specifies + offsets to the various subtables which each have their own structs, given below. + The keyboardTypeHeadList array selects table offsets that depend on keyboardType. The + first entry in keyboardTypeHeadList is the default entry, which will be used if the + keyboardType passed to UCKeyTranslate does not match any other entry - i.e. does not fall + within the range keyboardTypeFirst..keyboardTypeLast for some entry. The first entry + should have keyboardTypeFirst = keyboardTypeLast = 0. + ------------------------------------------------------------------------------------------------- +*/ +struct UCKeyboardTypeHeader { + UInt32 keyboardTypeFirst; /* first keyboardType in this entry*/ + UInt32 keyboardTypeLast; /* last keyboardType in this entry*/ + ByteOffset keyModifiersToTableNumOffset; /* required*/ + ByteOffset keyToCharTableIndexOffset; /* required*/ + ByteOffset keyStateRecordsIndexOffset; /* 0 => no table*/ + ByteOffset keyStateTerminatorsOffset; /* 0 => no table*/ + ByteOffset keySequenceDataIndexOffset; /* 0 => no table*/ +}; +typedef struct UCKeyboardTypeHeader UCKeyboardTypeHeader; +struct UCKeyboardLayout { + /* header only; other tables accessed via offsets*/ + UInt16 keyLayoutHeaderFormat; /* =kUCKeyLayoutHeaderFormat*/ + UInt16 keyLayoutDataVersion; /* 0x0100 = 1.0, 0x0110 = 1.1, etc.*/ + ByteOffset keyLayoutFeatureInfoOffset; /* may be 0 */ + ItemCount keyboardTypeCount; /* Dimension for keyboardTypeHeadList[] */ + UCKeyboardTypeHeader keyboardTypeList[1]; +}; +typedef struct UCKeyboardLayout UCKeyboardLayout; +/* -------------------------------------------------------------------------------------------------*/ +struct UCKeyLayoutFeatureInfo { + UInt16 keyLayoutFeatureInfoFormat; /* =kUCKeyLayoutFeatureInfoFormat*/ + UInt16 reserved; + UniCharCount maxOutputStringLength; /* longest possible output string*/ +}; +typedef struct UCKeyLayoutFeatureInfo UCKeyLayoutFeatureInfo; +/* -------------------------------------------------------------------------------------------------*/ +struct UCKeyModifiersToTableNum { + UInt16 keyModifiersToTableNumFormat; /* =kUCKeyModifiersToTableNumFormat*/ + UInt16 defaultTableNum; /* For modifier combos not in tableNum[]*/ + ItemCount modifiersCount; /* Dimension for tableNum[]*/ + UInt8 tableNum[1]; + + /* Then there is padding to a 4-byte boundary with bytes containing 0, if necessary.*/ +}; +typedef struct UCKeyModifiersToTableNum UCKeyModifiersToTableNum; +/* -------------------------------------------------------------------------------------------------*/ +struct UCKeyToCharTableIndex { + UInt16 keyToCharTableIndexFormat; /* =kUCKeyToCharTableIndexFormat*/ + UInt16 keyToCharTableSize; /* Max keyCode (128 for ADB keyboards)*/ + ItemCount keyToCharTableCount; /* Dimension for keyToCharTableOffsets[] (usually 6 to 12 tables)*/ + ByteOffset keyToCharTableOffsets[1]; + + /* Each offset in keyToCharTableOffsets is from the beginning of the resource to a*/ + /* table as follows:*/ + /* UCKeyOutput keyToCharData[keyToCharTableSize];*/ + /* These tables follow the UCKeyToCharTableIndex.*/ + /* Then there is padding to a 4-byte boundary with bytes containing 0, if necessary.*/ +}; +typedef struct UCKeyToCharTableIndex UCKeyToCharTableIndex; +/* -------------------------------------------------------------------------------------------------*/ +struct UCKeyStateRecordsIndex { + UInt16 keyStateRecordsIndexFormat; /* =kUCKeyStateRecordsIndexFormat*/ + UInt16 keyStateRecordCount; /* Dimension for keyStateRecordOffsets[]*/ + ByteOffset keyStateRecordOffsets[1]; + + /* Each offset in keyStateRecordOffsets is from the beginning of the resource to a*/ + /* UCKeyStateRecord. These UCKeyStateRecords follow the keyStateRecordOffsets[] array.*/ + /* Then there is padding to a 4-byte boundary with bytes containing 0, if necessary.*/ +}; +typedef struct UCKeyStateRecordsIndex UCKeyStateRecordsIndex; +/* -------------------------------------------------------------------------------------------------*/ +struct UCKeyStateTerminators { + UInt16 keyStateTerminatorsFormat; /* =kUCKeyStateTerminatorsFormat*/ + UInt16 keyStateTerminatorCount; /* Dimension for keyStateTerminators[] (# of nonzero states)*/ + UCKeyCharSeq keyStateTerminators[1]; + + /* Note: keyStateTerminators[0] is terminator for state 1, etc.*/ + /* Then there is padding to a 4-byte boundary with bytes containing 0, if necessary.*/ +}; +typedef struct UCKeyStateTerminators UCKeyStateTerminators; +/* -------------------------------------------------------------------------------------------------*/ +struct UCKeySequenceDataIndex { + UInt16 keySequenceDataIndexFormat; /* =kUCKeySequenceDataIndexFormat*/ + UInt16 charSequenceCount; /* Dimension of charSequenceOffsets[] is charSequenceCount+1*/ + UInt16 charSequenceOffsets[1]; + + /* Each offset in charSequenceOffsets is in bytes, from the beginning of*/ + /* UCKeySequenceDataIndex to a sequence of UniChars; the next offset indicates the*/ + /* end of the sequence. The UniChar sequences follow the UCKeySequenceDataIndex.*/ + /* Then there is padding to a 4-byte boundary with bytes containing 0, if necessary.*/ +}; +typedef struct UCKeySequenceDataIndex UCKeySequenceDataIndex; +/* -------------------------------------------------------------------------------------------------*/ +/* Current format codes for the various tables (bits 12-15 indicate which table)*/ + +enum { + kUCKeyLayoutHeaderFormat = 0x1002, + kUCKeyLayoutFeatureInfoFormat = 0x2001, + kUCKeyModifiersToTableNumFormat = 0x3001, + kUCKeyToCharTableIndexFormat = 0x4001, + kUCKeyStateRecordsIndexFormat = 0x5001, + kUCKeyStateTerminatorsFormat = 0x6001, + kUCKeySequenceDataIndexFormat = 0x7001 +}; + + +/* + ------------------------------------------------------------------------------------------------- + Constants for keyAction parameter in UCKeyTranslate() + ------------------------------------------------------------------------------------------------- +*/ + +enum { + kUCKeyActionDown = 0, /* key is going down*/ + kUCKeyActionUp = 1, /* key is going up*/ + kUCKeyActionAutoKey = 2, /* auto-key down*/ + kUCKeyActionDisplay = 3 /* get information for key display (as in Key Caps) */ +}; + +/* + ------------------------------------------------------------------------------------------------- + Bit assignments & masks for keyTranslateOptions parameter in UCKeyTranslate() + ------------------------------------------------------------------------------------------------- +*/ + +enum { + kUCKeyTranslateNoDeadKeysBit = 0 /* Prevents setting any new dead-key states*/ +}; + +enum { + kUCKeyTranslateNoDeadKeysMask = 1L << kUCKeyTranslateNoDeadKeysBit +}; + +/* + ------------------------------------------------------------------------------------------------- + CONSTANTS & DATA STRUCTURES for Unicode Collation + ------------------------------------------------------------------------------------------------- +*/ +/* constant for LocaleOperationClass*/ +enum { + kUnicodeCollationClass = FOUR_CHAR_CODE('ucol') +}; + +typedef struct OpaqueCollatorRef* CollatorRef; +typedef UInt32 UCCollateOptions; +enum { + /* Sensitivity options*/ + kUCCollateComposeInsensitiveMask = 1L << 1, + kUCCollateWidthInsensitiveMask = 1L << 2, + kUCCollateCaseInsensitiveMask = 1L << 3, + kUCCollateDiacritInsensitiveMask = 1L << 4, /* Other general options */ + kUCCollatePunctuationSignificantMask = 1L << 15, /* Number-handling options */ + kUCCollateDigitsOverrideMask = 1L << 16, + kUCCollateDigitsAsNumberMask = 1L << 17 +}; + +enum { + kUCCollateStandardOptions = kUCCollateComposeInsensitiveMask | kUCCollateWidthInsensitiveMask +}; + +/* + Special values to specify various invariant orders for UCCompareTextNoLocale. + These values use the high 8 bits of UCCollateOptions. +*/ +enum { + kUCCollateTypeHFSExtended = 1 +}; + +/* These constants are used for masking and shifting the invariant order type.*/ +enum { + kUCCollateTypeSourceMask = 0x000000FF, + kUCCollateTypeShiftBits = 24 +}; + +enum { + kUCCollateTypeMask = kUCCollateTypeSourceMask << kUCCollateTypeShiftBits +}; + + +typedef UInt32 UCCollationValue; +/* + ------------------------------------------------------------------------------------------------- + CONSTANTS & DATA STRUCTURES for Unicode TextBreak + ------------------------------------------------------------------------------------------------- +*/ +/* constant for LocaleOperationClass*/ +enum { + kUnicodeTextBreakClass = FOUR_CHAR_CODE('ubrk') +}; + +typedef struct OpaqueTextBreakLocatorRef* TextBreakLocatorRef; +typedef UInt32 UCTextBreakType; +enum { + kUCTextBreakCharMask = 1L << 0, + kUCTextBreakClusterMask = 1L << 2, + kUCTextBreakWordMask = 1L << 4, + kUCTextBreakLineMask = 1L << 6 +}; + +typedef UInt32 UCTextBreakOptions; +enum { + kUCTextBreakLeadingEdgeMask = 1L << 0, + kUCTextBreakGoBackwardsMask = 1L << 1, + kUCTextBreakIterateMask = 1L << 2 +}; + +/* + ------------------------------------------------------------------------------------------------- + FUNCTION PROTOTYPES + ------------------------------------------------------------------------------------------------- +*/ + +/* + * UCKeyTranslate() + * + * Availability: + * Non-Carbon CFM: in UnicodeUtilitiesCoreLib 8.5 and later + * CarbonLib: in CarbonLib 1.0 and later + * Mac OS X: in version 10.0 and later + */ +EXTERN_API( OSStatus ) +UCKeyTranslate( + const UCKeyboardLayout * keyLayoutPtr, + UInt16 virtualKeyCode, + UInt16 keyAction, + UInt32 modifierKeyState, + UInt32 keyboardType, + OptionBits keyTranslateOptions, + UInt32 * deadKeyState, + UniCharCount maxStringLength, + UniCharCount * actualStringLength, + UniChar unicodeString[]); + + +/* Standard collation functions*/ +/* + * UCCreateCollator() + * + * Availability: + * Non-Carbon CFM: in UnicodeUtilitiesLib 8.6 and later + * CarbonLib: in CarbonLib 1.0 and later + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( OSStatus ) +UCCreateCollator( + LocaleRef locale, + LocaleOperationVariant opVariant, + UCCollateOptions options, + CollatorRef * collatorRef); + + +/* + * UCGetCollationKey() + * + * Availability: + * Non-Carbon CFM: in UnicodeUtilitiesLib 8.6 and later + * CarbonLib: in CarbonLib 1.0 and later + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( OSStatus ) +UCGetCollationKey( + CollatorRef collatorRef, + const UniChar * textPtr, + UniCharCount textLength, + ItemCount maxKeySize, + ItemCount * actualKeySize, + UCCollationValue collationKey[]); + + +/* + * UCCompareCollationKeys() + * + * Availability: + * Non-Carbon CFM: in UnicodeUtilitiesCoreLib 8.6 and later + * CarbonLib: in CarbonLib 1.0 and later + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( OSStatus ) +UCCompareCollationKeys( + const UCCollationValue * key1Ptr, + ItemCount key1Length, + const UCCollationValue * key2Ptr, + ItemCount key2Length, + Boolean * equivalent, + SInt32 * order); + + +/* + * UCCompareText() + * + * Availability: + * Non-Carbon CFM: in UnicodeUtilitiesLib 8.6 and later + * CarbonLib: in CarbonLib 1.0 and later + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( OSStatus ) +UCCompareText( + CollatorRef collatorRef, + const UniChar * text1Ptr, + UniCharCount text1Length, + const UniChar * text2Ptr, + UniCharCount text2Length, + Boolean * equivalent, + SInt32 * order); + + +/* + * UCDisposeCollator() + * + * Availability: + * Non-Carbon CFM: in UnicodeUtilitiesLib 8.6 and later + * CarbonLib: in CarbonLib 1.0 and later + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( OSStatus ) +UCDisposeCollator(CollatorRef * collatorRef); + + +/* Simple collation using default locale*/ + +/* + * UCCompareTextDefault() + * + * Availability: + * Non-Carbon CFM: in UnicodeUtilitiesLib 8.6 and later + * CarbonLib: in CarbonLib 1.0 and later + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( OSStatus ) +UCCompareTextDefault( + UCCollateOptions options, + const UniChar * text1Ptr, + UniCharCount text1Length, + const UniChar * text2Ptr, + UniCharCount text2Length, + Boolean * equivalent, + SInt32 * order); + + + +/* Simple locale-independent collation*/ + +/* + * UCCompareTextNoLocale() + * + * Availability: + * Non-Carbon CFM: in UnicodeUtilitiesCoreLib 8.6 and later + * CarbonLib: in CarbonLib 1.0 and later + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( OSStatus ) +UCCompareTextNoLocale( + UCCollateOptions options, + const UniChar * text1Ptr, + UniCharCount text1Length, + const UniChar * text2Ptr, + UniCharCount text2Length, + Boolean * equivalent, + SInt32 * order); + + +/* Standard text break (text boundary) functions*/ +/* + * UCCreateTextBreakLocator() + * + * Availability: + * Non-Carbon CFM: in UnicodeUtilitiesLib 9.0 and later + * CarbonLib: in CarbonLib 1.0 and later + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( OSStatus ) +UCCreateTextBreakLocator( + LocaleRef locale, + LocaleOperationVariant opVariant, + UCTextBreakType breakTypes, + TextBreakLocatorRef * breakRef); + + +/* + * UCFindTextBreak() + * + * Availability: + * Non-Carbon CFM: in UnicodeUtilitiesLib 9.0 and later + * CarbonLib: in CarbonLib 1.0 and later + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( OSStatus ) +UCFindTextBreak( + TextBreakLocatorRef breakRef, + UCTextBreakType breakType, + UCTextBreakOptions options, + const UniChar * textPtr, + UniCharCount textLength, + UniCharArrayOffset startOffset, + UniCharArrayOffset * breakOffset); + + +/* + * UCDisposeTextBreakLocator() + * + * Availability: + * Non-Carbon CFM: in UnicodeUtilitiesLib 9.0 and later + * CarbonLib: in CarbonLib 1.0 and later + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( OSStatus ) +UCDisposeTextBreakLocator(TextBreakLocatorRef * breakRef); + + + +#if PRAGMA_STRUCT_ALIGN + #pragma options align=reset +#elif PRAGMA_STRUCT_PACKPUSH + #pragma pack(pop) +#elif PRAGMA_STRUCT_PACK + #pragma pack() +#endif + +#ifdef PRAGMA_IMPORT_OFF +#pragma import off +#elif PRAGMA_IMPORT +#pragma import reset +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __UNICODEUTILITIES__ */ + |