123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221 |
- {
- File: CarbonCore/UnicodeUtilities.h
-
- Contains: Types, constants, prototypes for Unicode Utilities (Unicode input and text utils)
-
- Copyright: © 1997-2011 by Apple Inc. All rights reserved.
-
- Bugs?: For bug reports, consult the following page on
- the World Wide Web:
-
- http://bugs.freepascal.org
-
- }
- {
- Modified for use with Free Pascal
- Version 308
- Please report any bugs to <[email protected]>
- }
- {$ifc not defined MACOSALLINCLUDE or not MACOSALLINCLUDE}
- {$mode macpas}
- {$packenum 1}
- {$macro on}
- {$inline on}
- {$calling mwpascal}
- unit UnicodeUtilities;
- interface
- {$setc UNIVERSAL_INTERFACES_VERSION := $0400}
- {$setc GAP_INTERFACES_VERSION := $0308}
- {$ifc not defined USE_CFSTR_CONSTANT_MACROS}
- {$setc USE_CFSTR_CONSTANT_MACROS := TRUE}
- {$endc}
- {$ifc defined CPUPOWERPC and defined CPUI386}
- {$error Conflicting initial definitions for CPUPOWERPC and CPUI386}
- {$endc}
- {$ifc defined FPC_BIG_ENDIAN and defined FPC_LITTLE_ENDIAN}
- {$error Conflicting initial definitions for FPC_BIG_ENDIAN and FPC_LITTLE_ENDIAN}
- {$endc}
- {$ifc not defined __ppc__ and defined CPUPOWERPC32}
- {$setc __ppc__ := 1}
- {$elsec}
- {$setc __ppc__ := 0}
- {$endc}
- {$ifc not defined __ppc64__ and defined CPUPOWERPC64}
- {$setc __ppc64__ := 1}
- {$elsec}
- {$setc __ppc64__ := 0}
- {$endc}
- {$ifc not defined __i386__ and defined CPUI386}
- {$setc __i386__ := 1}
- {$elsec}
- {$setc __i386__ := 0}
- {$endc}
- {$ifc not defined __x86_64__ and defined CPUX86_64}
- {$setc __x86_64__ := 1}
- {$elsec}
- {$setc __x86_64__ := 0}
- {$endc}
- {$ifc not defined __arm__ and defined CPUARM}
- {$setc __arm__ := 1}
- {$elsec}
- {$setc __arm__ := 0}
- {$endc}
- {$ifc not defined __arm64__ and defined CPUAARCH64}
- {$setc __arm64__ := 1}
- {$elsec}
- {$setc __arm64__ := 0}
- {$endc}
- {$ifc defined cpu64}
- {$setc __LP64__ := 1}
- {$elsec}
- {$setc __LP64__ := 0}
- {$endc}
- {$ifc defined __ppc__ and __ppc__ and defined __i386__ and __i386__}
- {$error Conflicting definitions for __ppc__ and __i386__}
- {$endc}
- {$ifc defined __ppc__ and __ppc__}
- {$setc TARGET_CPU_PPC := TRUE}
- {$setc TARGET_CPU_PPC64 := FALSE}
- {$setc TARGET_CPU_X86 := FALSE}
- {$setc TARGET_CPU_X86_64 := FALSE}
- {$setc TARGET_CPU_ARM := FALSE}
- {$setc TARGET_CPU_ARM64 := FALSE}
- {$setc TARGET_OS_MAC := TRUE}
- {$setc TARGET_OS_IPHONE := FALSE}
- {$setc TARGET_IPHONE_SIMULATOR := FALSE}
- {$setc TARGET_OS_EMBEDDED := FALSE}
- {$elifc defined __ppc64__ and __ppc64__}
- {$setc TARGET_CPU_PPC := FALSE}
- {$setc TARGET_CPU_PPC64 := TRUE}
- {$setc TARGET_CPU_X86 := FALSE}
- {$setc TARGET_CPU_X86_64 := FALSE}
- {$setc TARGET_CPU_ARM := FALSE}
- {$setc TARGET_CPU_ARM64 := FALSE}
- {$setc TARGET_OS_MAC := TRUE}
- {$setc TARGET_OS_IPHONE := FALSE}
- {$setc TARGET_IPHONE_SIMULATOR := FALSE}
- {$setc TARGET_OS_EMBEDDED := FALSE}
- {$elifc defined __i386__ and __i386__}
- {$setc TARGET_CPU_PPC := FALSE}
- {$setc TARGET_CPU_PPC64 := FALSE}
- {$setc TARGET_CPU_X86 := TRUE}
- {$setc TARGET_CPU_X86_64 := FALSE}
- {$setc TARGET_CPU_ARM := FALSE}
- {$setc TARGET_CPU_ARM64 := FALSE}
- {$ifc defined(iphonesim)}
- {$setc TARGET_OS_MAC := FALSE}
- {$setc TARGET_OS_IPHONE := TRUE}
- {$setc TARGET_IPHONE_SIMULATOR := TRUE}
- {$elsec}
- {$setc TARGET_OS_MAC := TRUE}
- {$setc TARGET_OS_IPHONE := FALSE}
- {$setc TARGET_IPHONE_SIMULATOR := FALSE}
- {$endc}
- {$setc TARGET_OS_EMBEDDED := FALSE}
- {$elifc defined __x86_64__ and __x86_64__}
- {$setc TARGET_CPU_PPC := FALSE}
- {$setc TARGET_CPU_PPC64 := FALSE}
- {$setc TARGET_CPU_X86 := FALSE}
- {$setc TARGET_CPU_X86_64 := TRUE}
- {$setc TARGET_CPU_ARM := FALSE}
- {$setc TARGET_CPU_ARM64 := FALSE}
- {$ifc defined(iphonesim)}
- {$setc TARGET_OS_MAC := FALSE}
- {$setc TARGET_OS_IPHONE := TRUE}
- {$setc TARGET_IPHONE_SIMULATOR := TRUE}
- {$elsec}
- {$setc TARGET_OS_MAC := TRUE}
- {$setc TARGET_OS_IPHONE := FALSE}
- {$setc TARGET_IPHONE_SIMULATOR := FALSE}
- {$endc}
- {$setc TARGET_OS_EMBEDDED := FALSE}
- {$elifc defined __arm__ and __arm__}
- {$setc TARGET_CPU_PPC := FALSE}
- {$setc TARGET_CPU_PPC64 := FALSE}
- {$setc TARGET_CPU_X86 := FALSE}
- {$setc TARGET_CPU_X86_64 := FALSE}
- {$setc TARGET_CPU_ARM := TRUE}
- {$setc TARGET_CPU_ARM64 := FALSE}
- { will require compiler define when/if other Apple devices with ARM cpus ship }
- {$setc TARGET_OS_MAC := FALSE}
- {$setc TARGET_OS_IPHONE := TRUE}
- {$setc TARGET_IPHONE_SIMULATOR := FALSE}
- {$setc TARGET_OS_EMBEDDED := TRUE}
- {$elifc defined __arm64__ and __arm64__}
- {$setc TARGET_CPU_PPC := FALSE}
- {$setc TARGET_CPU_PPC64 := FALSE}
- {$setc TARGET_CPU_X86 := FALSE}
- {$setc TARGET_CPU_X86_64 := FALSE}
- {$setc TARGET_CPU_ARM := FALSE}
- {$setc TARGET_CPU_ARM64 := TRUE}
- { will require compiler define when/if other Apple devices with ARM cpus ship }
- {$setc TARGET_OS_MAC := FALSE}
- {$setc TARGET_OS_IPHONE := TRUE}
- {$setc TARGET_IPHONE_SIMULATOR := FALSE}
- {$setc TARGET_OS_EMBEDDED := TRUE}
- {$elsec}
- {$error __ppc__ nor __ppc64__ nor __i386__ nor __x86_64__ nor __arm__ nor __arm64__ is defined.}
- {$endc}
- {$ifc defined __LP64__ and __LP64__ }
- {$setc TARGET_CPU_64 := TRUE}
- {$elsec}
- {$setc TARGET_CPU_64 := FALSE}
- {$endc}
- {$ifc defined FPC_BIG_ENDIAN}
- {$setc TARGET_RT_BIG_ENDIAN := TRUE}
- {$setc TARGET_RT_LITTLE_ENDIAN := FALSE}
- {$elifc defined FPC_LITTLE_ENDIAN}
- {$setc TARGET_RT_BIG_ENDIAN := FALSE}
- {$setc TARGET_RT_LITTLE_ENDIAN := TRUE}
- {$elsec}
- {$error Neither FPC_BIG_ENDIAN nor FPC_LITTLE_ENDIAN are defined.}
- {$endc}
- {$setc ACCESSOR_CALLS_ARE_FUNCTIONS := TRUE}
- {$setc CALL_NOT_IN_CARBON := FALSE}
- {$setc OLDROUTINENAMES := FALSE}
- {$setc OPAQUE_TOOLBOX_STRUCTS := TRUE}
- {$setc OPAQUE_UPP_TYPES := TRUE}
- {$setc OTCARBONAPPLICATION := TRUE}
- {$setc OTKERNEL := FALSE}
- {$setc PM_USE_SESSION_APIS := TRUE}
- {$setc TARGET_API_MAC_CARBON := TRUE}
- {$setc TARGET_API_MAC_OS8 := FALSE}
- {$setc TARGET_API_MAC_OSX := TRUE}
- {$setc TARGET_CARBON := TRUE}
- {$setc TARGET_CPU_68K := FALSE}
- {$setc TARGET_CPU_MIPS := FALSE}
- {$setc TARGET_CPU_SPARC := FALSE}
- {$setc TARGET_OS_UNIX := FALSE}
- {$setc TARGET_OS_WIN32 := FALSE}
- {$setc TARGET_RT_MAC_68881 := FALSE}
- {$setc TARGET_RT_MAC_CFM := FALSE}
- {$setc TARGET_RT_MAC_MACHO := TRUE}
- {$setc TYPED_FUNCTION_POINTERS := TRUE}
- {$setc TYPE_BOOL := FALSE}
- {$setc TYPE_EXTENDED := FALSE}
- {$setc TYPE_LONGLONG := TRUE}
- uses MacTypes,MacLocales,TextCommon,CFBase;
- {$endc} {not MACOSALLINCLUDE}
- {$ifc TARGET_OS_MAC}
- {$ALIGN MAC68K}
- {
- -------------------------------------------------------------------------------------------------
- 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.
- -------------------------------------------------------------------------------------------------
- }
- type
- UCKeyOutput = UInt16;
- UCKeyCharSeq = UInt16;
- const
- kUCKeyOutputStateIndexMask = $4000;
- kUCKeyOutputSequenceIndexMask = $8000;
- kUCKeyOutputTestForIndexMask = $C000; { test bits 14-15}
- kUCKeyOutputGetIndexMask = $3FFF; { 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.
- -------------------------------------------------------------------------------------------------
- }
- type
- UCKeyStateRecord = record
- stateZeroCharData: UCKeyCharSeq;
- stateZeroNextState: UInt16;
- stateEntryCount: UInt16;
- stateEntryFormat: UInt16;
- { This is followed by an array of stateEntryCount elements}
- { in the specified format. Here we just show a dummy array.}
- stateEntryData: array [0..0] of UInt32;
- end;
- {
- Here are the codes for entry formats currently defined.
- Each entry maps from curState to charData and nextState.
- }
- const
- kUCKeyStateEntryTerminalFormat = $0001;
- kUCKeyStateEntryRangeFormat = $0002;
- {
- For UCKeyStateEntryTerminal -
- nextState is always 0, so we don't have a field for it
- }
- type
- UCKeyStateEntryTerminalPtr = ^UCKeyStateEntryTerminal;
- UCKeyStateEntryTerminal = record
- curState: UInt16;
- charData: UCKeyCharSeq;
- end;
- {
- 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
- }
- type
- UCKeyStateEntryRangePtr = ^UCKeyStateEntryRange;
- UCKeyStateEntryRange = record
- curStateStart: UInt16;
- curStateRange: UInt8;
- deltaMultiplier: UInt8;
- charData: UCKeyCharSeq;
- nextState: UInt16;
- end;
- {
- -------------------------------------------------------------------------------------------------
- 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.
- -------------------------------------------------------------------------------------------------
- }
- type
- UCKeyboardTypeHeaderPtr = ^UCKeyboardTypeHeader;
- UCKeyboardTypeHeader = record
- keyboardTypeFirst: UInt32; { first keyboardType in this entry}
- keyboardTypeLast: UInt32; { last keyboardType in this entry}
- keyModifiersToTableNumOffset: UInt32; { required}
- keyToCharTableIndexOffset: UInt32; { required}
- keyStateRecordsIndexOffset: UInt32; { 0 => no table}
- keyStateTerminatorsOffset: UInt32; { 0 => no table}
- keySequenceDataIndexOffset: UInt32; { 0 => no table}
- end;
- type
- UCKeyboardLayoutPtr = ^UCKeyboardLayout;
- UCKeyboardLayout = record
- { header only; other tables accessed via offsets}
- keyLayoutHeaderFormat: UInt16; { =kUCKeyLayoutHeaderFormat}
- keyLayoutDataVersion: UInt16; { 0x0100 = 1.0, 0x0110 = 1.1, etc.}
- keyLayoutFeatureInfoOffset: UInt32; { may be 0 }
- keyboardTypeCount: UInt32; { Dimension for keyboardTypeHeadList[] }
- keyboardTypeList: array [0..0] of UCKeyboardTypeHeader;
- end;
- { -------------------------------------------------------------------------------------------------}
- type
- UCKeyLayoutFeatureInfoPtr = ^UCKeyLayoutFeatureInfo;
- UCKeyLayoutFeatureInfo = record
- keyLayoutFeatureInfoFormat: UInt16; { =kUCKeyLayoutFeatureInfoFormat}
- reserved: UInt16;
- maxOutputStringLength: UInt32; { longest possible output string}
- end;
- { -------------------------------------------------------------------------------------------------}
- type
- UCKeyModifiersToTableNumPtr = ^UCKeyModifiersToTableNum;
- UCKeyModifiersToTableNum = record
- keyModifiersToTableNumFormat: UInt16; { =kUCKeyModifiersToTableNumFormat}
- defaultTableNum: UInt16; { For modifier combos not in tableNum[]}
- modifiersCount: UInt32; { Dimension for tableNum[]}
- tableNum: array [0..0] of UInt8;
- { Then there is padding to a 4-byte boundary with bytes containing 0, if necessary.}
- end;
- { -------------------------------------------------------------------------------------------------}
- type
- UCKeyToCharTableIndexPtr = ^UCKeyToCharTableIndex;
- UCKeyToCharTableIndex = record
- keyToCharTableIndexFormat: UInt16; { =kUCKeyToCharTableIndexFormat}
- keyToCharTableSize: UInt16; { Max keyCode (128 for ADB keyboards)}
- keyToCharTableCount: UInt32; { Dimension for keyToCharTableOffsets[] (usually 6 to 12 tables)}
- keyToCharTableOffsets: array [0..0] of ByteOffset;
- { 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.}
- end;
- { -------------------------------------------------------------------------------------------------}
- type
- UCKeyStateRecordsIndexPtr = ^UCKeyStateRecordsIndex;
- UCKeyStateRecordsIndex = record
- keyStateRecordsIndexFormat: UInt16; { =kUCKeyStateRecordsIndexFormat}
- keyStateRecordCount: UInt16; { Dimension for keyStateRecordOffsets[]}
- keyStateRecordOffsets: array [0..0] of ByteOffset;
- { 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.}
- end;
- { -------------------------------------------------------------------------------------------------}
- type
- UCKeyStateTerminatorsPtr = ^UCKeyStateTerminators;
- UCKeyStateTerminators = record
- keyStateTerminatorsFormat: UInt16; { =kUCKeyStateTerminatorsFormat}
- keyStateTerminatorCount: UInt16; { Dimension for keyStateTerminators[] (# of nonzero states)}
- keyStateTerminators: array [0..0] of UCKeyCharSeq;
- { Note: keyStateTerminators[0] is terminator for state 1, etc.}
- { Then there is padding to a 4-byte boundary with bytes containing 0, if necessary.}
- end;
- { -------------------------------------------------------------------------------------------------}
- type
- UCKeySequenceDataIndexPtr = ^UCKeySequenceDataIndex;
- UCKeySequenceDataIndex = record
- keySequenceDataIndexFormat: UInt16; { =kUCKeySequenceDataIndexFormat}
- charSequenceCount: UInt16; { Dimension of charSequenceOffsets[] is charSequenceCount+1}
- charSequenceOffsets: array [0..0] of UInt16;
- { 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.}
- end;
- { -------------------------------------------------------------------------------------------------}
- { Current format codes for the various tables (bits 12-15 indicate which table)}
- const
- kUCKeyLayoutHeaderFormat = $1002;
- kUCKeyLayoutFeatureInfoFormat = $2001;
- kUCKeyModifiersToTableNumFormat = $3001;
- kUCKeyToCharTableIndexFormat = $4001;
- kUCKeyStateRecordsIndexFormat = $5001;
- kUCKeyStateTerminatorsFormat = $6001;
- kUCKeySequenceDataIndexFormat = $7001;
- {
- -------------------------------------------------------------------------------------------------
- Constants for keyAction parameter in UCKeyTranslate()
- -------------------------------------------------------------------------------------------------
- }
- const
- 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()
- -------------------------------------------------------------------------------------------------
- }
- const
- kUCKeyTranslateNoDeadKeysBit = 0; { Prevents setting any new dead-key states}
- const
- kUCKeyTranslateNoDeadKeysMask = 1 shl kUCKeyTranslateNoDeadKeysBit;
- {
- -------------------------------------------------------------------------------------------------
- CONSTANTS & DATA STRUCTURES for Unicode Collation
- -------------------------------------------------------------------------------------------------
- }
- { constant for LocaleOperationClass}
- const
- kUnicodeCollationClass = FourCharCode('ucol');
- type
- CollatorRef = ^SInt32; { an opaque type }
- CollatorRefPtr = ^CollatorRef; { when a var xx:CollatorRef parameter can be nil, it is changed to xx: CollatorRefPtr }
- UCCollateOptions = UInt32;
- const
- { Sensitivity options}
- kUCCollateComposeInsensitiveMask = 1 shl 1;
- kUCCollateWidthInsensitiveMask = 1 shl 2;
- kUCCollateCaseInsensitiveMask = 1 shl 3;
- kUCCollateDiacritInsensitiveMask = 1 shl 4; { Other general options }
- kUCCollatePunctuationSignificantMask = 1 shl 15; { Number-handling options }
- kUCCollateDigitsOverrideMask = 1 shl 16;
- kUCCollateDigitsAsNumberMask = 1 shl 17;
- const
- kUCCollateStandardOptions = kUCCollateComposeInsensitiveMask or kUCCollateWidthInsensitiveMask;
- {
- Special values to specify various invariant orders for UCCompareTextNoLocale.
- These values use the high 8 bits of UCCollateOptions.
- }
- const
- kUCCollateTypeHFSExtended = 1;
- { These constants are used for masking and shifting the invariant order type.}
- const
- kUCCollateTypeSourceMask = $000000FF;
- kUCCollateTypeShiftBits = 24;
- const
- kUCCollateTypeMask = kUCCollateTypeSourceMask shl kUCCollateTypeShiftBits;
- type
- UCCollationValue = UInt32;
- UCCollationValuePtr = ^UCCollationValue;
- {
- -------------------------------------------------------------------------------------------------
- CONSTANTS & DATA STRUCTURES for Unicode TypeSelect
- -------------------------------------------------------------------------------------------------
- }
- {
- UCTypeSelectRef
- This is the single opaque object needed to implement the Unicode TypeSelect
- utilities. It is created and initialized via a call to UCTypeSelectCreateSelector
- }
- type
- UCTypeSelectRef = ^OpaqueUCTypeSelectRef; { an opaque type }
- OpaqueUCTypeSelectRef = record end;
- {
- UCTypeSelectCompareResult
- Used as the return value for UCTypeSelectCompare()
- }
- type
- UCTypeSelectCompareResult = SInt32;
- {
- UCTSWalkDirection
- Used for UCTypeSelectWalkList to determine the direction of the walk
- }
- type
- UCTSWalkDirection = UInt16;
- UCTSWalkDirectionPtr = ^UCTSWalkDirection;
- const
- kUCTSDirectionNext = 0;
- kUCTSDirectionPrevious = 1;
- {
- UCTypeSelectOptions
- These constants may be returned from an IndexToUCString callback function
- in the location pointed to by the tsOptions parameter. *tsOptions is pre-
- initialized to zero before the callback function is called. A callback
- function does not need to set *tsOptions unless it wants behavior different
- from the default.
- kUCTSOptionsReleaseStringMask: indicates that UCTypeSelectFindItem should
- release the CFStringRef returned by the IndexToUCString callback function
- once it is done with the string. If this bit is not set, the string will
- not be released.
- kUCTSOptionsDataIsOrderedMask: indicates that the data being returned by the
- IndexToUCString callback is already in the correct alphabetical order. If so,
- UCTypeSelectFindItem can optimize its search through the data to find the closest
- matching item.
- }
- type
- UCTypeSelectOptions = UInt16;
- UCTypeSelectOptionsPtr = ^UCTypeSelectOptions;
- const
- kUCTSOptionsNoneMask = 0;
- kUCTSOptionsReleaseStringMask = 1;
- kUCTSOptionsDataIsOrderedMask = 2;
- {
- IndexToUCStringProcPtr
- This is the type used to define the user's IndexToUCString callback
- }
- type
- IndexToUCStringProcPtr = function( index: UInt32; listDataPtr: UnivPtr; refcon: UnivPtr; var outString: CFStringRef; var tsOptions: UCTypeSelectOptions ): Boolean;
- type
- IndexToUCStringUPP = IndexToUCStringProcPtr;
- {
- * NewIndexToUCStringUPP()
- *
- * Availability:
- * Mac OS X: in version 10.4 and later in CoreServices.framework
- * CarbonLib: not available in CarbonLib 1.x, is available on Mac OS X version 10.4 and later
- * Non-Carbon CFM: available as macro/inline
- }
- function NewIndexToUCStringUPP( userRoutine: IndexToUCStringProcPtr ): IndexToUCStringUPP; external name '_NewIndexToUCStringUPP';
- (* __OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_NA) *)
- {
- * DisposeIndexToUCStringUPP()
- *
- * Availability:
- * Mac OS X: in version 10.4 and later in CoreServices.framework
- * CarbonLib: not available in CarbonLib 1.x, is available on Mac OS X version 10.4 and later
- * Non-Carbon CFM: available as macro/inline
- }
- procedure DisposeIndexToUCStringUPP( userUPP: IndexToUCStringUPP ); external name '_DisposeIndexToUCStringUPP';
- (* __OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_NA) *)
- {
- * InvokeIndexToUCStringUPP()
- *
- * Availability:
- * Mac OS X: in version 10.4 and later in CoreServices.framework
- * CarbonLib: not available in CarbonLib 1.x, is available on Mac OS X version 10.4 and later
- * Non-Carbon CFM: available as macro/inline
- }
- function InvokeIndexToUCStringUPP( index: UInt32; listDataPtr: UnivPtr; refcon: UnivPtr; var outString: CFStringRef; var tsOptions: UCTypeSelectOptions; userUPP: IndexToUCStringUPP ): Boolean; external name '_InvokeIndexToUCStringUPP';
- (* __OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_NA) *)
- {
- kUCTypeSelectMaxListSize can be used for any listSize arguement
- when the length of the list is unknown.
- }
- const
- kUCTypeSelectMaxListSize = $FFFFFFFF;
- {
- -------------------------------------------------------------------------------------------------
- CONSTANTS & DATA STRUCTURES for Unicode TextBreak
- -------------------------------------------------------------------------------------------------
- }
- { constant for LocaleOperationClass}
- const
- kUnicodeTextBreakClass = FourCharCode('ubrk');
- type
- TextBreakLocatorRef = ^OpaqueTextBreakLocatorRef; { an opaque type }
- OpaqueTextBreakLocatorRef = record end;
- {
- * UCTextBreakType
- *
- * Discussion:
- * Specifies kinds of text boundaries.
- }
- type
- UCTextBreakType = UInt32;
- const
- {
- * If the bit specified by this mask is set, boundaries of characters
- * may be located (with surrogate pairs treated as a single
- * character).
- }
- kUCTextBreakCharMask = 1 shl 0;
- {
- * If the bit specified by this mask is set, boundaries of character
- * clusters may be located. A cluster is a group of characters that
- * should be treated as single text element for editing operations
- * such as cursor movement. Typically this includes groups such as a
- * base character followed by a sequence of combining characters, for
- * example, a Hangul syllable represented as a sequence of conjoining
- * jamo characters or an Indic consonant cluster.
- }
- kUCTextBreakClusterMask = 1 shl 2;
- {
- * If the bit specified by this mask is set, boundaries of words may
- * be located. This can be used to determine what to highlight as the
- * result of a double-click.
- }
- kUCTextBreakWordMask = 1 shl 4;
- kUCTextBreakLineMask = 1 shl 6;
- {
- * If the bit specified by this mask is set, boundaries of paragraphs
- * may be located. This just finds the next hard-line break as
- * defined by the Unicode standard.
- }
- kUCTextBreakParagraphMask = 1 shl 8;
- type
- UCTextBreakOptions = UInt32;
- const
- kUCTextBreakLeadingEdgeMask = 1 shl 0;
- kUCTextBreakGoBackwardsMask = 1 shl 1;
- kUCTextBreakIterateMask = 1 shl 2;
- {
- -------------------------------------------------------------------------------------------------
- FUNCTION PROTOTYPES
- -------------------------------------------------------------------------------------------------
- }
- {
- * UCKeyTranslate()
- *
- * Availability:
- * Mac OS X: in version 10.0 and later in CoreServices.framework
- * CarbonLib: in CarbonLib 1.0 and later
- * Non-Carbon CFM: in UnicodeUtilitiesCoreLib 8.5 and later
- }
- function UCKeyTranslate( const (*var*) keyLayoutPtr: UCKeyboardLayout; virtualKeyCode: UInt16; keyAction: UInt16; modifierKeyState: UInt32; keyboardType: UInt32; keyTranslateOptions: OptionBits; var deadKeyState: UInt32; maxStringLength: UniCharCount; var actualStringLength: UniCharCount; unicodeString: {variable-size-array} UniCharPtr ): OSStatus; external name '_UCKeyTranslate';
- (* __OSX_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_NA) *)
- { Standard collation functions}
- {
- * UCCreateCollator()
- *
- * Availability:
- * Mac OS X: in version 10.0 and later in CoreServices.framework
- * CarbonLib: in CarbonLib 1.0 and later
- * Non-Carbon CFM: in UnicodeUtilitiesLib 8.6 and later
- }
- function UCCreateCollator( locale: LocaleRef; opVariant: LocaleOperationVariant; options: UCCollateOptions; var collatorRef_: CollatorRef ): OSStatus; external name '_UCCreateCollator';
- (* __OSX_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_NA) *)
- {
- * UCGetCollationKey()
- *
- * Availability:
- * Mac OS X: in version 10.0 and later in CoreServices.framework
- * CarbonLib: in CarbonLib 1.0 and later
- * Non-Carbon CFM: in UnicodeUtilitiesLib 8.6 and later
- }
- function UCGetCollationKey( collatorRef_: CollatorRef; textPtr: ConstUniCharPtr; textLength: UniCharCount; maxKeySize: ItemCount; var actualKeySize: ItemCount; collationKey: {variable-size-array} UCCollationValuePtr ): OSStatus; external name '_UCGetCollationKey';
- (* __OSX_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_NA) *)
- {
- * UCCompareCollationKeys()
- *
- * Availability:
- * Mac OS X: in version 10.0 and later in CoreServices.framework
- * CarbonLib: in CarbonLib 1.0 and later
- * Non-Carbon CFM: in UnicodeUtilitiesCoreLib 8.6 and later
- }
- function UCCompareCollationKeys( key1Ptr: UCCollationValuePtr; key1Length: ItemCount; key2Ptr: UCCollationValuePtr; key2Length: ItemCount; var equivalent: Boolean; var order: SInt32 ): OSStatus; external name '_UCCompareCollationKeys';
- (* __OSX_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_NA) *)
- {
- * UCCompareText()
- *
- * Availability:
- * Mac OS X: in version 10.0 and later in CoreServices.framework
- * CarbonLib: in CarbonLib 1.0 and later
- * Non-Carbon CFM: in UnicodeUtilitiesLib 8.6 and later
- }
- function UCCompareText( collatorRef_: CollatorRef; text1Ptr: ConstUniCharPtr; text1Length: UniCharCount; text2Ptr: ConstUniCharPtr; text2Length: UniCharCount; var equivalent: Boolean; var order: SInt32 ): OSStatus; external name '_UCCompareText';
- (* __OSX_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_NA) *)
- {
- * UCDisposeCollator()
- *
- * Availability:
- * Mac OS X: in version 10.0 and later in CoreServices.framework
- * CarbonLib: in CarbonLib 1.0 and later
- * Non-Carbon CFM: in UnicodeUtilitiesLib 8.6 and later
- }
- function UCDisposeCollator( var collatorRef_: CollatorRef ): OSStatus; external name '_UCDisposeCollator';
- (* __OSX_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_NA) *)
- { Simple collation using default locale}
- {
- * UCCompareTextDefault()
- *
- * Availability:
- * Mac OS X: in version 10.0 and later in CoreServices.framework
- * CarbonLib: in CarbonLib 1.0 and later
- * Non-Carbon CFM: in UnicodeUtilitiesLib 8.6 and later
- }
- function UCCompareTextDefault( options: UCCollateOptions; text1Ptr: ConstUniCharPtr; text1Length: UniCharCount; text2Ptr: ConstUniCharPtr; text2Length: UniCharCount; var equivalent: Boolean; var order: SInt32 ): OSStatus; external name '_UCCompareTextDefault';
- (* __OSX_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_NA) *)
- { Simple locale-independent collation}
- {
- * UCCompareTextNoLocale()
- *
- * Availability:
- * Mac OS X: in version 10.0 and later in CoreServices.framework
- * CarbonLib: in CarbonLib 1.0 and later
- * Non-Carbon CFM: in UnicodeUtilitiesCoreLib 8.6 and later
- }
- function UCCompareTextNoLocale( options: UCCollateOptions; text1Ptr: ConstUniCharPtr; text1Length: UniCharCount; text2Ptr: ConstUniCharPtr; text2Length: UniCharCount; var equivalent: Boolean; var order: SInt32 ): OSStatus; external name '_UCCompareTextNoLocale';
- (* __OSX_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_NA) *)
- {
- *===============================================================================
- * Text break (text boundary) functions
- *
- * These are deprecated. Replacements are as follows:
- *
- * 1. To determine locale-sensitive text breaks for word, line, sentence and
- * paragraph boundaries, use the CFStringTokenizer functions:
- * CFStringTokenizerCreate (balanced by CFRelease), CFStringTokenizerAdvanceToNextToken
- * or CFStringTokenizerGoToTokenAtIndex, then CFStringTokenizerGetCurrentTokenRange...
- *
- * 2. To determine cluster breaks, use CFStringGetRangeOfComposedCharactersAtIndex.
- *
- * 3. For handling character boundaries / surrogate pairs in UTF16 text, the
- * following inline functions are available in CFString.h:
- * CFStringIsSurrogateHighCharacter, CFStringIsSurrogateLowCharacter,
- * CFStringGetLongCharacterForSurrogatePair, and CFStringGetSurrogatePairForLongCharacter.
- * However, CFString clients do not usually need to worry about handling surrogate pairs
- * directly.
- *
- *===============================================================================
- }
- {
- * UCCreateTextBreakLocator() *** DEPRECATED ***
- *
- * Deprecated:
- * Use CFStringTokenizer functions or
- * CFStringGetRangeOfComposedCharactersAtIndex, see discussion above
- * for details.
- *
- * Availability:
- * Mac OS X: in version 10.0 and later in CoreServices.framework but deprecated in 10.6
- * CarbonLib: in CarbonLib 1.0 and later
- * Non-Carbon CFM: in UnicodeUtilitiesLib 9.0 and later
- }
- function UCCreateTextBreakLocator( locale: LocaleRef; opVariant: LocaleOperationVariant; breakTypes: UCTextBreakType; var breakRef: TextBreakLocatorRef ): OSStatus; external name '_UCCreateTextBreakLocator';
- (* __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_0, __MAC_10_6, __IPHONE_NA, __IPHONE_NA) *)
- {
- * UCFindTextBreak() *** DEPRECATED ***
- *
- * Deprecated:
- * Use CFStringTokenizer functions or
- * CFStringGetRangeOfComposedCharactersAtIndex, see discussion above
- * for details.
- *
- * Availability:
- * Mac OS X: in version 10.0 and later in CoreServices.framework but deprecated in 10.6
- * CarbonLib: in CarbonLib 1.0 and later
- * Non-Carbon CFM: in UnicodeUtilitiesLib 9.0 and later
- }
- function UCFindTextBreak( breakRef: TextBreakLocatorRef; breakType: UCTextBreakType; options: UCTextBreakOptions; textPtr: ConstUniCharPtr; textLength: UniCharCount; startOffset: UniCharArrayOffset; var breakOffset: UniCharArrayOffset ): OSStatus; external name '_UCFindTextBreak';
- (* __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_0, __MAC_10_6, __IPHONE_NA, __IPHONE_NA) *)
- {
- * UCDisposeTextBreakLocator() *** DEPRECATED ***
- *
- * Deprecated:
- * Use CFStringTokenizer functions or
- * CFStringGetRangeOfComposedCharactersAtIndex, see discussion above
- * for details.
- *
- * Availability:
- * Mac OS X: in version 10.0 and later in CoreServices.framework but deprecated in 10.6
- * CarbonLib: in CarbonLib 1.0 and later
- * Non-Carbon CFM: in UnicodeUtilitiesLib 9.0 and later
- }
- function UCDisposeTextBreakLocator( var breakRef: TextBreakLocatorRef ): OSStatus; external name '_UCDisposeTextBreakLocator';
- (* __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_0, __MAC_10_6, __IPHONE_NA, __IPHONE_NA) *)
- {
- -------------------------------------------------------------------------------------------------
- UNICODE TYPESELECT - FUNCTION APIs
- -------------------------------------------------------------------------------------------------
- }
- {
- * UCTypeSelectCreateSelector()
- *
- * Summary:
- * Responsible for creating the opaque UCTypeSelectRef object.
- *
- * Parameters:
- *
- * locale:
- * LocaleRef obtained by client from a call such as
- * LocaleRefFromLangOrRegionCode. This can be set to NULL if the
- * default system locale is desired.
- *
- * opVariant:
- * Variant of the locale. Specify 0 if no variant is needed.
- *
- * options:
- * Any collation options the client wishes to specify. These will
- * have an impact on the order in which selection will occur.
- * Specify kUCCollateStandardOptions for the default options.
- *
- * newSelector:
- * The newly created UCTypeSelectRef object.
- *
- * Result:
- * Will return paramErr if newSelector is NULL, or any other error
- * that may be returned by an internal function call.
- *
- * Availability:
- * Mac OS X: in version 10.4 and later in CoreServices.framework
- * CarbonLib: not available in CarbonLib 1.x
- * Non-Carbon CFM: not available
- }
- function UCTypeSelectCreateSelector( locale: LocaleRef { can be NULL }; opVariant: LocaleOperationVariant; options: UCCollateOptions; var newSelector: UCTypeSelectRef ): OSStatus; external name '_UCTypeSelectCreateSelector';
- (* __OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_NA) *)
- {
- * UCTypeSelectFlushSelectorData()
- *
- * Summary:
- * Flushes the key list and resets the timeout timer for the
- * UCTypeSelectRef.
- *
- * Parameters:
- *
- * ref:
- * UCTypeSelectRef to be flushed.
- *
- * Result:
- * Returns paramErr if ref is invalid.
- *
- * Availability:
- * Mac OS X: in version 10.4 and later in CoreServices.framework
- * CarbonLib: not available in CarbonLib 1.x
- * Non-Carbon CFM: not available
- }
- function UCTypeSelectFlushSelectorData( ref: UCTypeSelectRef ): OSStatus; external name '_UCTypeSelectFlushSelectorData';
- (* __OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_NA) *)
- {
- * UCTypeSelectReleaseSelector()
- *
- * Summary:
- * Cleans up and disposes of any temporary memory acquired by the
- * UCTypeSelectRef object.
- *
- * Parameters:
- *
- * ref:
- * A pointer to the UCTypeSelectRef to be disposed of. On exit,
- * the UCTypeSelectRef to which this parameter points will be set
- * to NULL.
- *
- * Result:
- * Returns paramErr if ref is invalid.
- *
- * Availability:
- * Mac OS X: in version 10.4 and later in CoreServices.framework
- * CarbonLib: not available in CarbonLib 1.x
- * Non-Carbon CFM: not available
- }
- function UCTypeSelectReleaseSelector( var ref: UCTypeSelectRef ): OSStatus; external name '_UCTypeSelectReleaseSelector';
- (* __OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_NA) *)
- {
- * UCTypeSelectWouldResetBuffer()
- *
- * Summary:
- * Indicates whether, if the specified text were added to the
- * buffer, the current text in the buffer would be discarded.
- *
- * Parameters:
- *
- * inRef:
- * The type-selection object.
- *
- * inText:
- * The text that would be added to the buffer. Some text (such as
- * Backspace, Enter, and Clear keys) always causes the buffer to
- * be reset. May be NULL; in that case, the implementation only
- * considers the event time.
- *
- * inEventTime:
- * The time in seconds since boot (as returned by
- * GetCurrentEventTime) that the text event occurred. If the event
- * occurred at a time greater than the type-select timeout, then
- * the current buffered text would be discarded.
- *
- * Result:
- * Whether the current text in the buffer would be discarded while
- * processing the specified text.
- *
- * Availability:
- * Mac OS X: in version 10.4 and later in CoreServices.framework
- * CarbonLib: not available in CarbonLib 1.x
- * Non-Carbon CFM: not available
- }
- function UCTypeSelectWouldResetBuffer( inRef: UCTypeSelectRef; inText: CFStringRef { can be NULL }; inEventTime: Float64 ): Boolean; external name '_UCTypeSelectWouldResetBuffer';
- (* __OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_NA) *)
- {
- * UCTypeSelectAddKeyToSelector()
- *
- * Summary:
- * Appends the given Unicode values to the selector's internal
- * buffer of keystrokes. It also handles timeouts and delete/clear
- * keys. If the key sent is a delete/clear/esc code, the key buffer
- * will be flushed and false will be returned.
- *
- * Parameters:
- *
- * inRef:
- * The type-selection object.
- *
- * inText:
- * A CFString that contains the keystroke to be added.
- *
- * inEventTime:
- * The time in seconds since boot (as returned by
- * GetCurrentEventTime) that the text event occurred. If zero is
- * passed, then the current time is used automatically.
- *
- * updateFlag:
- * On exit, notifies the client if it needs to update its current
- * selection, as follows:
- *
- * TRUE - indicates that the client needs to update its selection
- * based on the keystroke passed in. A call to UCTypeSelectCompare
- * or UCTypeSelectFindItem should be made to find the new item to
- * select based on the new keys added.
- *
- * FALSE - indicates that the client does not need to update its
- * selection. This would occur if a delete/clear/esc key was
- * passed in.
- *
- * Result:
- * returns paramErr if ref or textPtr are invalid. Can also return
- * other errors from intermediate function calls.
- *
- * Availability:
- * Mac OS X: in version 10.4 and later in CoreServices.framework
- * CarbonLib: not available in CarbonLib 1.x
- * Non-Carbon CFM: not available
- }
- function UCTypeSelectAddKeyToSelector( inRef: UCTypeSelectRef; inText: CFStringRef; inEventTime: Float64; var updateFlag: Boolean ): OSStatus; external name '_UCTypeSelectAddKeyToSelector';
- (* __OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_NA) *)
- {
- * UCTypeSelectCompare()
- *
- * Summary:
- * Compares the Unicode text buffer passed in inText with the
- * keystroke buffer stored in the UCTypeSelectRef. This function
- * works the same as the non-Unicode TypeSelectCompare() call.
- *
- * Parameters:
- *
- * ref:
- * UCTypeSelectRef to which the Unicode text sent in inText will
- * be compared.
- *
- * inText:
- * A reference to the text to be compared
- *
- * result:
- * Just as in TypeSelectCompare(), the following values are
- * returned: -1 if characters in UCTypeSelectRefÕs keystroke
- * buffer sort before those in inText, 0 if characters in
- * UCTypeSelectRefÕs keystroke buffer are the same as those in
- * inText, and 1 if the characters in UCTypeSelectRefÕs keystroke
- * buffer sort after those in inText.
- *
- * Result:
- * This function can return three different types of values. First,
- * it will return paramErr if ref, inText, or result are invalid.
- * Second, if there have been no keys added to the UCTypeSelectRef
- * via calls to UCTypeSelectAddKeyToSelectorData(),
- * kUCTSNoKeysAddedToObjectErr will be returned. Finally, it can
- * also return other errors should any be encountered by
- * intermediate function calls.
- *
- * Availability:
- * Mac OS X: in version 10.4 and later in CoreServices.framework
- * CarbonLib: not available in CarbonLib 1.x
- * Non-Carbon CFM: not available
- }
- function UCTypeSelectCompare( ref: UCTypeSelectRef; inText: CFStringRef; var result: UCTypeSelectCompareResult ): OSStatus; external name '_UCTypeSelectCompare';
- (* __OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_NA) *)
- {
- * UCTypeSelectFindItem()
- *
- * Summary:
- * In a given list, pointed to by listDataPtr, find the closest
- * match to the keystrokes stored in the UCTypeSelectRef. The
- * closest matchÕs index will be returned in closestItem. The list
- * to be searched may be ordered or unordered. In order for this
- * call to work, the client needs to provide a an IndexToUCString
- * callback UPP. This callback is necessary in order to provide the
- * client with data structure independence through client-side
- * indexing.
- *
- * Parameters:
- *
- * ref:
- * UCTypeSelectRef holding the state and keystrokes to be compared.
- *
- * listSize:
- * Size of the list to be searched through. If the size of the
- * list is unknown, pass in kUCTypeSelectMaxListSize (0xFFFFFFFF)
- * and have the IndexToUCString function return false after it has
- * reached the last item in the list.
- *
- * listDataPtr:
- * Pointer to the head or first node of the clientÕs data
- * structure. This will be passed into to the clientÕs
- * IndexToUCString function. Can be NULL, depending on the
- * clientÕs IndexToUCString implementation.
- *
- * refcon:
- * Any parameter the calling function wishes to pass as a
- * reference into its IndexToUCString callback function. This
- * parameter can be set to NULL if not needed.
- *
- * userUPP:
- * The UPP pointing to the clientÕs IndexToUCString callback
- * function.
- *
- * closestItem:
- * Upon return, this will contain the index of the item that
- * matches the text in the keystroke buffer of UCTypeSelectRef.
- *
- * Result:
- * This function has four possibilities for return values. First,
- * paramErr will be returned if ref or closestItem are invalid.
- * Second, if the search list is empty or if the first item cannot
- * be read, kUCTSSearchListErr will be returned. Third, if there
- * have been no keys added to the UCTypeSelectRef via calls to
- * UCTypeSelectAddKeyToSelectorData(), kUCTSNoKeysAddedToObjectErr
- * will be returned. Finally, this function can return other OS
- * errors should any be encountered by an internal function call.
- *
- * Availability:
- * Mac OS X: in version 10.4 and later in CoreServices.framework
- * CarbonLib: not available in CarbonLib 1.x
- * Non-Carbon CFM: not available
- }
- function UCTypeSelectFindItem( ref: UCTypeSelectRef; listSize: UInt32; listDataPtr: UnivPtr { can be NULL }; refcon: UnivPtr { can be NULL }; userUPP: IndexToUCStringUPP; var closestItem: UInt32 ): OSStatus; external name '_UCTypeSelectFindItem';
- (* __OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_NA) *)
- {
- * UCTypeSelectWalkList()
- *
- * Summary:
- * UCTypeSelectWalkList can perform an in-order alphabetical walk of
- * an unsorted list. To do this, the client passes a pointer to the
- * current selectionÕs text in the currSelect parameter.
- * UCTypeSelectWalkList will then search the list pointed to by
- * listDataPtr for the closest item that is lexicographically either
- * right before or right after the selected item. The client can
- * choose which one to be returned by setting the direction
- * parameter to kUCTSDirectionPrevious or kUCTSDirectionNext to get
- * the item either lexicographically right before or after
- * respectively. This call will not walk off the end of the list or
- * do any wraparound searching. That is, if the item selected is the
- * last item in the list and kUCDirectionNext is specified for the
- * direction, that same item will be returned. Likewise for the case
- * where the first item is selected nd kUCTSDirectionPrevious is
- * specified. In order for this call to work, the client needs to
- * provide an IndexToUCString callback UPP. This callback is
- * necessary in order to provide the client with data structure
- * independence through client-side indexing.
- *
- * Parameters:
- *
- * ref:
- * UCTypeSelectRef holding state information as well as the
- * function pointer needed to call the clientÕs IndexToUCString
- * function
- *
- * currSelect:
- * CFString reference to the current selectionÕs text.
- *
- * direction:
- * The direction of the walk. The valid values for this parameter
- * are:
- *
- * kUCTSDirectionNext - find the next item in the list
- * kUCTSDirectionPrevious - find the previous item in the list
- *
- *
- * If kUCTSDirectionNext is specified and the selected item is the
- * last item in the list or if kUCTSDirectionPrevious is specified
- * and the selected item is the first item in the list, the index
- * of the selected item will be returned in closestItem.
- *
- * listSize:
- * Size of the list to be searched through. If the size of the
- * list is unknown, pass in kUCTypeSelectMaxListSize (0xFFFFFFFF)
- * and have the IndexToUCString function return false after it has
- * reached the last item in the list.
- *
- * listDataPtr:
- * Pointer to the head or first node of the clientÕs data
- * structure. This will be passed into to the clientÕs
- * IndexToUCString function. Can be NULL, depending on the
- * clientÕs IndexToUCString implementation.
- *
- * refcon:
- * Any parameter the calling function wishes to pass as a
- * reference into its IndexToUCString callback function. This
- * parameter can be set to NULL if not needed.
- *
- * userUPP:
- * The UPP pointing to the clientÕs IndexToUCString callback
- * function.
- *
- * closestItem:
- * Upon return, this will contain the index of the item that
- * matches the text in the keystroke buffer of UCTypeSelectRef.
- *
- * Result:
- * This function has three possibilities for return values. First,
- * paramErr will be returned if ref, currSelect, or closestItem are
- * invalid. Second, if the search list is empty or if the first item
- * cannot be read, kUCTSSearchListErr will be returned. Finally,
- * this function can return other OS errors should any be
- * encountered by an internal function call.
- *
- * Availability:
- * Mac OS X: in version 10.4 and later in CoreServices.framework
- * CarbonLib: not available in CarbonLib 1.x
- * Non-Carbon CFM: not available
- }
- function UCTypeSelectWalkList( ref: UCTypeSelectRef; currSelect: CFStringRef; direction: UCTSWalkDirection; listSize: UInt32; listDataPtr: UnivPtr { can be NULL }; refcon: UnivPtr { can be NULL }; userUPP: IndexToUCStringUPP; var closestItem: UInt32 ): OSStatus; external name '_UCTypeSelectWalkList';
- (* __OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_NA) *)
- {$endc} {TARGET_OS_MAC}
- {$ifc not defined MACOSALLINCLUDE or not MACOSALLINCLUDE}
- end.
- {$endc} {not MACOSALLINCLUDE}
|