/* File: TextUtils.h Contains: C Interface to the Macintosh Libraries Written by: Don Louv Copyright: © 1985-1993 by Apple Computer, Inc., all rights reserved. Change History (most recent first): 8/17/93 JDR update from Reality <19> 8/2/93 DTY Move EqualString inlines into TextUtilsPriv.h. <18> 3/20/93 ngk Fix to <17>, Stupid _CmpString returns 0 if strings are equal, so need to NOT result in inline (glue used to do this for you). <17> 3/19/93 DTY Add InlineEqualString, CaseSensitiveEqualString, MarkSensitiveEqualString, and CaseAndMarkSensitiveEqualString in a further effort to reduce glue required by the system. <16> 10/16/92 PKE For new IM: Change reserved field name in NBreakTable to length, reflecting its real usage. <15> 8/28/92 DCL Fixed enums with commas before the closing brace. MPW now complains. <14> 6/11/92 DCL Cleanup & formatting to match Interface Stacks. Happy Happy Joy Joy. <13> 5/29/92 DCL Moved DateTime stuff to OSUtils, and intl stuff to IntlResources. <12> 5/7/92 DCL NIIM: Movin date & time Stuff from DateTime to TextUtils. <11> 5/6/92 DCL NIIM: Moved KeyTrans back from TextUtils to Events. <10> 5/5/92 DCL For New Inside Mac: removing 'sc' prefixes from some calls, moving some calls from script to TextUtils, and moving some from TextUtils & QuickDraw to QuickdrawText. Weeeeeeee! <9> 4/28/92 KST Get rid of the compiler warning. <8> 4/17/92 DCL For New Inside Mac: Mo' Better Call Names. Str -> String, Secs -> Seconds. Sorry, no more Secs. <7> 4/15/92 DCL For New Inside Mac: Moved StyledLineBreakCode from script to TextUtils. <6> 4/15/92 DCL For New Inside Mac: Moved many definitions from Script to TextUtils. And added new synonyms. #1025005 <5> 4/6/92 DCL For New Inside Mac: Moved declarations from Script.[aph] to TextUtils.[aph]. #1025005 <4> 4/1/92 DCL Fix the calls from xxxxIntlxxxx to xxxxxxxxxIntl. <3> 3/30/92 DCL New and Improved routine names for New Improved Inside Mac. #1025005 <2+> 3/26/92 DCL Moved IUMetric here. I slipped and dropped it in DateTime. Need better mousegrips. <2> 3/26/92 DCL For New IM: Moved many declarations and routines from Packages.[ph] to TextUtils.[ph] <1> 3/12/92 DCL first checked in */ #ifndef __TEXTUTILS__ #define __TEXTUTILS__ #ifndef __TYPES__ #include #endif #ifndef __SCRIPT__ #include #endif #ifndef __OSUTILS__ #include #endif enum { // New constants for System 7.0: <#9> /* Constants for truncWhere argument in TruncString and TruncText */ truncEnd = 0, /* Truncate at end */ truncMiddle = 0x4000, /* Truncate in middle */ smTruncEnd = 0, /* Truncate at end obsolete */ smTruncMiddle = 0x4000, /* Truncate in middle obsolete */ /* Constants for TruncString and TruncText results */ notTruncated = 0, /* No truncation was necessary */ truncated = 1, /* Truncation performed */ truncErr = -1, /* General error */ smNotTruncated = 0, /* No truncation was necessary obsolete */ smTruncated = 1, /* Truncation performed obsolete */ smTruncErr = -1 /* General error obsolete */ }; enum { fVNumber = 0, /*first version of NumFormatString*/ /* Special language code values for Language Order */ systemCurLang = -2, /* current (itlbLang) lang for system script */ systemDefLang = -3, /* default (table) lang for system script */ currentCurLang = -4, /* current (itlbLang) lang for current script */ currentDefLang = -5, /* default lang for current script */ scriptCurLang = -6, /* current (itlbLang) lang for specified script */ scriptDefLang = -7 /* default language for a specified script */ }; enum { iuSystemCurLang = -2, /* current (itlbLang) lang for system script */ iuSystemDefLang = -3, /* default (table) lang for system script */ iuCurrentCurLang = -4, /* current (itlbLang) lang for current script */ iuCurrentDefLang = -5, /* default lang for current script */ iuScriptCurLang = -6 /* current (itlbLang) lang for specified script */ }; enum { iuScriptDefLang = -7 /* default language for a specified script */ }; enum {smBreakWord,smBreakChar,smBreakOverflow}; typedef unsigned char StyledLineBreakCode; enum {fPositive,fNegative,fZero}; typedef unsigned char FormatClass; enum {fFormatOK,fBestGuess,fOutOfSynch,fSpuriousChars,fMissingDelimiter, fExtraDecimal,fMissingLiteral,fExtraExp,fFormatOverflow,fFormStrIsNAN, fBadPartsTable,fExtraPercent,fExtraSeparator,fEmptyFormatString}; typedef unsigned char FormatResultType; struct NumFormatString { char fLength; char fVersion; char data[254]; /*private data*/ }; typedef struct NumFormatString NumFormatString; typedef struct NumFormatString NumFormatStringRec; struct FVector { short start; short length; }; typedef struct FVector FVector; typedef FVector TripleInt[3]; /* index by [fPositive..fZero] */ struct ScriptRunStatus { char script; char variant; }; typedef struct ScriptRunStatus ScriptRunStatus; /* New types for System 7.0: type for truncWhere parameter in new TruncString, TruncText */ typedef short TruncCode; enum {shortDate,longDate,abbrevDate}; typedef unsigned char DateForm; enum { /* String2Date status values */ fatalDateTime = 0x8000, /*String2Date and String2Time mask to a fatal error*/ longDateFound = 1, /*String2Date mask to long date found*/ leftOverChars = 2, /*String2Date & Time mask to warn of left over characters*/ sepNotIntlSep = 4, /*String2Date & Time mask to warn of non-standard separators*/ fieldOrderNotIntl = 8, /*String2Date & Time mask to warn of non-standard field order*/ extraneousStrings = 16, /*String2Date & Time mask to warn of unparsable strings in text*/ tooManySeps = 32, /*String2Date & Time mask to warn of too many separators*/ sepNotConsistent = 64, /*String2Date & Time mask to warn of inconsistent separators*/ tokenErr = 0x8100, /*String2Date & Time mask for 'tokenizer err encountered'*/ cantReadUtilities = 0x8200, dateTimeNotFound = 0x8400, dateTimeInvalid = 0x8800 }; typedef short StringToDateStatus; typedef short String2DateStatus; struct DateCacheRecord { short hidden[256]; /*only for temporary use*/ }; typedef struct DateCacheRecord DateCacheRecord; typedef DateCacheRecord *DateCachePtr; struct BreakTable { char charTypes[256]; short tripleLength; short triples[1]; }; typedef struct BreakTable BreakTable; typedef BreakTable *BreakTablePtr; /* New NBreakTable for System 7.0: */ struct NBreakTable { signed char flags1; signed char flags2; short version; short classTableOff; short auxCTableOff; short backwdTableOff; short forwdTableOff; short doBackup; short length; /* length of NBreakTable */ /*<16>*/ char charTypes[256]; short tables[1]; }; typedef struct NBreakTable NBreakTable; typedef NBreakTable *NBreakTablePtr; #ifdef __cplusplus extern "C" { #endif pascal void IUDateString(long dateTime,DateForm longFlag,Str255 result) = {0x4267,0xA9ED}; void iudatestring(long dateTime,DateForm longFlag,char *result); pascal void DateString(long dateTime,DateForm longFlag,Str255 result, Handle intlHandle) = {0x3F3C,0x000E,0xA9ED}; void datestring(long dateTime,DateForm longFlag,char *result,Handle intlHandle); pascal void IUDatePString(long dateTime,DateForm longFlag,Str255 result, Handle intlHandle) = {0x3F3C,0x000E,0xA9ED}; void iudatepstring(long dateTime,DateForm longFlag,char *result,Handle intlHandle); pascal void IUTimeString(long dateTime,Boolean wantSeconds,Str255 result) = {0x3F3C,0x0002,0xA9ED}; void iutimestring(long dateTime,Boolean wantSeconds,char *result); pascal void TimeString(long dateTime,Boolean wantSeconds,Str255 result, Handle intlHandle) = {0x3F3C,0x0010,0xA9ED}; void timestring(long dateTime,Boolean wantSeconds,char *result,Handle intlHandle); pascal void IUTimePString(long dateTime,Boolean wantSeconds,Str255 result, Handle intlHandle) = {0x3F3C,0x0010,0xA9ED}; void iutimepstring(long dateTime,Boolean wantSeconds,char *result,Handle intlHandle); pascal void LongDateString(LongDateTime *dateTime,DateForm longFlag,Str255 result, Handle intlHandle) = {0x3F3C,0x0014,0xA9ED}; void longdatestring(LongDateTime *dateTime,DateForm longFlag,char *result, Handle intlHandle); pascal void IULDateString(LongDateTime *dateTime,DateForm longFlag,Str255 result, Handle intlHandle) = {0x3F3C,0x0014,0xA9ED}; void iuldatestring(LongDateTime *dateTime,DateForm longFlag,char *result, Handle intlHandle); pascal void LongTimeString(LongDateTime *dateTime,Boolean wantSeconds,Str255 result, Handle intlHandle) = {0x3F3C,0x0016,0xA9ED}; void longtimestring(LongDateTime *dateTime,Boolean wantSeconds,char *result, Handle intlHandle); pascal void IULTimeString(LongDateTime *dateTime,Boolean wantSeconds,Str255 result, Handle intlHandle) = {0x3F3C,0x0016,0xA9ED}; void iultimestring(LongDateTime *dateTime,Boolean wantSeconds,char *result, Handle intlHandle); pascal OSErr InitDateCache(DateCachePtr theCache) = {0x2F3C,0x8204,0xFFF8,0xA8B5}; pascal StringToDateStatus StringToDate(Ptr textPtr,long textLen,DateCachePtr theCache, long *lengthUsed,LongDateRec *dateTime) = {0x2F3C,0x8214,0xFFF6,0xA8B5}; pascal String2DateStatus String2Date(Ptr textPtr,long textLen,DateCachePtr theCache, long *lengthUsed,LongDateRec *dateTime) = {0x2F3C,0x8214,0xFFF6,0xA8B5}; pascal StringToDateStatus StringToTime(Ptr textPtr,long textLen,DateCachePtr theCache, long *lengthUsed,LongDateRec *dateTime) = {0x2F3C,0x8214,0xFFF4,0xA8B5}; pascal String2DateStatus String2Time(Ptr textPtr,long textLen,DateCachePtr theCache, long *lengthUsed,LongDateRec *dateTime) = {0x2F3C,0x8214,0xFFF4,0xA8B5}; pascal Boolean EqualString(ConstStr255Param str1,ConstStr255Param str2, Boolean caseSens,Boolean diacSens); Boolean equalstring(char *str1,char *str2,Boolean caseSens,Boolean diacSens); pascal void UpperString(Str255 theString,Boolean diacSens); void upperstring(char *theString,Boolean diacSens); pascal void UprString(Str255 theString,Boolean diacSens); void uprstring(char *theString,Boolean diacSens); pascal short RelString(ConstStr255Param str1,ConstStr255Param str2,Boolean caseSens, Boolean diacSens); short relstring(char *str1,char *str2,Boolean caseSens,Boolean diacSens); pascal StringHandle GetString(short stringID) = 0xA9BA; pascal long Munger(Handle h,long offset,const void *ptr1,long len1,const void *ptr2, long len2) = 0xA9E0; pascal void SetString(StringHandle theString,ConstStr255Param strNew) = 0xA907; void setstring(StringHandle theString,char *strNew); pascal StringHandle NewString(ConstStr255Param theString) = 0xA906; StringHandle newstring(char *theString); pascal void GetIndString(Str255 theString,short strListID,short index); void getindstring(char *theString,short strListID,short index); /* following four will be obsolete. Use equivalent PString call and pass a NIL handle */ pascal short IUMagString(const void *aPtr,const void *bPtr,short aLen,short bLen) = {0x3F3C,0x000A,0xA9ED}; pascal short IUMagIDString(const void *aPtr,const void *bPtr,short aLen, short bLen) = {0x3F3C,0x000C,0xA9ED}; pascal short IUCompString(ConstStr255Param aStr,ConstStr255Param bStr); short iucompstring(char *aStr,char *bStr); pascal short IUEqualString(ConstStr255Param aStr,ConstStr255Param bStr); short iuequalstring(char *aStr,char *bStr); pascal void StringToNum(ConstStr255Param theString,long *theNum); void stringtonum(char *theString,long *theNum); pascal void NumToString(long theNum,Str255 theString); void numtostring(long theNum,char *theString); pascal short CompareText(const void *aPtr,const void *bPtr,short aLen, short bLen,Handle itl2Handle) = {0x3F3C,0x001A,0xA9ED}; pascal short IUMagPString(const void *aPtr,const void *bPtr,short aLen, short bLen,Handle itl2Handle) = {0x3F3C,0x001A,0xA9ED}; pascal short IdenticalText(const void *aPtr,const void *bPtr,short aLen, short bLen,Handle itl2Handle) = {0x3F3C,0x001C,0xA9ED}; pascal short IUMagIDPString(const void *aPtr,const void *bPtr,short aLen, short bLen,Handle itl2Handle) = {0x3F3C,0x001C,0xA9ED}; pascal short CompareString(ConstStr255Param aStr,ConstStr255Param bStr, Handle itl2Handle); short comparestring(char *aStr,char *bStr,Handle intlHandle); pascal short IUCompPString(ConstStr255Param aStr,ConstStr255Param bStr, Handle itl2Handle); short iucomppstring(char *aStr,char *bStr,Handle intlHandle); pascal short IdenticalString(ConstStr255Param aStr,ConstStr255Param bStr, Handle itl2Handle); short identicalstring(char *aStr,char *bStr,Handle intlHandle); pascal short IUEqualPString(ConstStr255Param aStr,ConstStr255Param bStr, Handle itl2Handle); short iuequalpstring(char *aStr,char *bStr,Handle intlHandle); pascal short ScriptOrder(ScriptCode script1,ScriptCode script2) = {0x3F3C,0x001E,0xA9ED}; pascal short IUScriptOrder(ScriptCode script1,ScriptCode script2) = {0x3F3C,0x001E,0xA9ED}; pascal short LanguageOrder(LangCode language1,LangCode language2) = {0x3F3C,0x0020,0xA9ED}; pascal short IULangOrder(LangCode language1,LangCode language2) = {0x3F3C,0x0020,0xA9ED}; pascal short TextOrder(const void *aPtr,const void *bPtr,short aLen,short bLen, ScriptCode aScript,ScriptCode bScript,LangCode aLang,LangCode bLang) = {0x3F3C,0x0022,0xA9ED}; pascal short IUTextOrder(const void *aPtr,const void *bPtr,short aLen,short bLen, ScriptCode aScript,ScriptCode bScript,LangCode aLang,LangCode bLang) = {0x3F3C,0x0022,0xA9ED}; pascal short StringOrder(ConstStr255Param aStr,ConstStr255Param bStr, ScriptCode aScript,ScriptCode bScript,LangCode aLang,LangCode bLang); pascal short IUStringOrder(ConstStr255Param aStr,ConstStr255Param bStr, ScriptCode aScript,ScriptCode bScript,LangCode aLang,LangCode bLang); short iustringorder(char *aStr,char *bStr,ScriptCode aScript,ScriptCode bScript, LangCode aLang,LangCode bLang); pascal void FindWord(Ptr textPtr,short textLength,short offset,Boolean leadingEdge, BreakTablePtr breaks,OffsetTable offsets) = {0x2F3C,0x8012,0x001A,0xA8B5}; pascal void FindWordBreaks(Ptr textPtr,short textLength,short offset,Boolean leadingEdge, BreakTablePtr breaks,OffsetTable offsets,ScriptCode script) = {0x2F3C,0xC012,0x001A,0xA8B5}; pascal void UprText(Ptr textPtr,short len) = {0x301F,0x205F,0xA054}; pascal void LwrText(Ptr textPtr,short len) = {0x301F,0x205F,0xA056}; /* New for 7.0 */ pascal void LowerText(Ptr textPtr,short len) = {0x301F,0x205F,0xA056}; pascal void StripText(Ptr textPtr,short len) = {0x301F,0x205F,0xA256}; pascal void UpperText(Ptr textPtr,short len) = {0x301F,0x205F,0xA456}; pascal void StripUpperText(Ptr textPtr,short len) = {0x301F,0x205F,0xA656}; pascal StyledLineBreakCode StyledLineBreak(Ptr textPtr,long textLen,long textStart, long textEnd,long flags,Fixed *textWidth,long *textOffset) = {0x2F3C,0x821C,0xFFFE,0xA8B5}; pascal FormatStatus StringToFormatRec(ConstStr255Param inString,const NumberParts *partsTable, NumFormatString *outString) = {0x2F3C,0x820C,0xFFEC,0xA8B5}; pascal FormatStatus Str2Format(ConstStr255Param inString,const NumberParts *partsTable, NumFormatString *outString) = {0x2F3C,0x820C,0xFFEC,0xA8B5}; pascal FormatStatus FormatRecToString(const NumFormatString *myCanonical,const NumberParts *partsTable, Str255 outString,TripleInt positions) = {0x2F3C,0x8210,0xFFEA,0xA8B5}; pascal FormatStatus Format2Str(const NumFormatString *myCanonical,const NumberParts *partsTable, Str255 outString,TripleInt positions) = {0x2F3C,0x8210,0xFFEA,0xA8B5}; pascal FormatStatus ExtendedToString(extended80 x,const NumFormatString *myCanonical, const NumberParts *partsTable,Str255 outString) = {0x2F3C,0x8210,0xFFE8,0xA8B5}; pascal FormatStatus FormatX2Str(extended80 x,const NumFormatString *myCanonical, const NumberParts *partsTable,Str255 outString) = {0x2F3C,0x8210,0xFFE8,0xA8B5}; pascal FormatStatus StringToExtended(ConstStr255Param source,const NumFormatString *myCanonical, const NumberParts *partsTable,extended80 *x) = {0x2F3C,0x8210,0xFFE6,0xA8B5}; pascal FormatStatus FormatStr2X(ConstStr255Param source,const NumFormatString *myCanonical, const NumberParts *partsTable,extended80 *x) = {0x2F3C,0x8210,0xFFE6,0xA8B5}; pascal ScriptRunStatus FindScriptRun(Ptr textPtr,long textLen,long *lenUsed) = {0x2F3C,0x820C,0x0026,0xA8B5}; pascal void NFindWord(Ptr textPtr,short textLength,short offset,Boolean leadingEdge, NBreakTablePtr nbreaks,OffsetTable offsets) = {0x2F3C,0x8012,0xFFE2,0xA8B5}; pascal short TruncString(short width,Str255 theString,TruncCode truncWhere) = {0x2F3C,0x8208,0xFFE0,0xA8B5}; pascal short TruncText(short width,Ptr textPtr,short *length,TruncCode truncWhere) = {0x2F3C,0x820C,0xFFDE,0xA8B5}; pascal short ReplaceText(Handle baseText,Handle substitutionText,Str15 key) = {0x2F3C,0x820C,0xFFDC,0xA8B5}; pascal void LowercaseText(Ptr textPtr,short len,ScriptCode script) /*<60>*/ = {0x3F3C,0x0000,0x2F3C,0x800A,0xFFB6,0xA8B5}; pascal void StripDiacritics(Ptr textPtr,short len,ScriptCode script) /*<60>*/ = {0x3F3C,0x0200,0x2F3C,0x800A,0xFFB6,0xA8B5}; pascal void UppercaseText(Ptr textPtr,short len,ScriptCode script) /*<60>*/ = {0x3F3C,0x0400,0x2F3C,0x800A,0xFFB6,0xA8B5}; pascal void UppercaseStripDiacritics(Ptr textPtr,short len,ScriptCode script) /*<60>*/ = {0x3F3C,0x0600,0x2F3C,0x800A,0xFFB6,0xA8B5}; #ifdef __cplusplus } #endif #endif