/* File: TextServices.h Contains: Text Services Manager definitions. Written by: Kenny SC. Tung Copyright: © 1991-1992 by Apple Computer, Inc., all rights reserved. Change History (most recent first): <53> 10/7/92 KST Changed InitTSMAwareApplication() to InitTSMAwareApplication(void), and CloseTSMAwareApplication too. <52> 9/26/92 DCL Changed kCursorPosition to kCaretPosition (for NIIM) <51> 9/25/92 DCL Changed kCursorPosition to kCaretPosition. (for NIIM) <50> 8/4/92 DCL Moved InformTSM out of the public eye and into TSMPrivate. Fixed spellings of HidePaletteWindows & tsmUnsupportedTypeErr <49> 7/30/92 KST #1037621 : Added two constants: keyAEPinRange 'pnrg' and typeTextRange 'txrn'. <48> 7/16/92 KST Added a AppleEvent keyword. <47> 6/23/92 DCL Fixed the include statements. <46> 6/22/92 KST #1030843 : Added a new Apple Event kShowHideInputWindow. <45> 6/17/92 KST #1032783 : The refcon was putting in the AE record with the wrong keyword, it should be keyAETSMDocumentRefcon. Defined keyAETSMDocumentRefcon in this file. <44> 5/20/92 KST #1029362 : Added an optional keywords for Pos2Offset. <43> 5/18/92 KST #1029814 : Deleted "tsmDialogStateSavedErr" (not needed any more) and added a new error code "tsmUnSupportedTypeErr". <42> 5/11/92 KST keyAETSMDocumentRefcon should really be typeTSMDocumentRefcon. <41> 5/4/92 DCL Changed struct definitions to match interface standards and allow it to be read by the stack import scripts. <40> 5/1/92 KST #1028301,: JH,#1028301: SetTSMDialogState, RestoreTSMDialogState, TSMChangeCursor, and TSMRestoreCursor calls are no longer needed and should be removed from the source code. <39> 4/24/92 KST BMcGhie,changed TSM's official error codes to start from -2500. <38> 3/29/92 KST Changed hilite styles to enum type. Added event keywords for text line hight, ascent, and angle. <37> 3/20/92 KST Added a new low level call "HidePalleteWindows". <36> 3/16/92 KST Added keyAETSMDocumentRefcon. Removed keyAECursorPosition and keyAEStartPoint. <35> 3/16/92 KST Removed DocumentID parameter from TSMEvent, TSMMenuSelect, and SetTSMCursor calls. It applies to the current active TSM document. Added definitions for Hilite styles. <34> 3/12/92 DTY Clean up some typos. <33> 3/12/92 KST We store a refcon in each document record. NewTSMDocument now takes one more parameter. <32> 3/3/92 KST Added 2 new calls: "TSMChangeCursor", "TSMRestoreCursor". <31> 3/2/92 KST Moved kMaxTSMSelector to TSMPrivate.h for adding a private trap selector. <30> 2/28/92 KST Added 2 new calls "SetTSMDialogState", and "RestoreTSMDialogState", and a new error code "tsmDialogStateSavedErr". <29> 2/27/92 KST Changed InlineHole to ActiveInputArea. Removed "kGetText" and "kMoveSelection" event IDs. Use "GetData" instead of "kGetText". Renamed "SendAEtoClient" to "SendAEFromTSMComponent". <28> 2/25/92 KST Documentation changes. <27> 2/22/92 KST Removed "GetKeyboardIconSuite" call. We get icon directly from Component's resource file. <26> 2/19/92 KST GetKeyboardIconSuite routine was using a wrong selector. <25> 2/14/92 JH Correcting definition of KeyboardIconSuite. The array is an array of Handles not unsigned shorts. <24> 2/11/92 DCL Changed the name of this file from TSMEqu.h to TextServices.h for better read-ability. <23> 2/10/92 KST Added a new error code. Moved TSM message selectors to TSMPrivate. Changed fNumOfRanges, fNumOfOffsets from long to short. <22> 2/2/92 KST Add TextRange, TextRangeArray ... data structure definitions. <21> 1/31/92 YK Added FindServiceWindow. <20> 1/31/92 hsK Defined Desc type constants and Apple Event error numbers. <19> 1/31/92 hsK Added typeQDPoint, typeAEText, typeText Desc types which are defined in AERegistry. <18> 1/29/92 KST Removed IsApplicationTSMAware, it is now only used internally. <17> 1/16/92 KST Add a new message to InformTSM: kMsgChangeToOldJIM. <16> 1/16/92 KST Adding code to get Icon Suit for the Keyboard menu. <15> 1/11/92 KST Adding new error code. <14> 1/10/92 KST Undo the previous change. That's not the problem. <13> 1/9/92 KST Changed SetDefaultInputMethod selector back to 13 so that we can build TSM INIT with d13. <12> 1/8/92 KST In TextServiceEvent, changed the data type of "numOfEvents" from int to short <11> 1/7/92 KST Add a new routine selector for "InformTSM". <10> 1/4/92 KST Add a new routine "CloseTextService". Also "OpenTextService" now returns component instance to the caller. <9> 1/3/92 KST Added definitions for Desc type. <8> 12/27/91 KST Adding ComponentResult error codes for the low level TSM calls. <7> 12/20/91 KST Making progress toward Alpha. Changed "inline" to "TSM", and added new calls. <6> 12/10/91 KST Adding a new selector:"kInlineAwareRegister" for the new "InlineAwareRegister" call. <5> 12/10/91 KST Changing the API to use ScriptLanguageRecord pointer consistently. <4> 12/6/91 KST Changing the TextServiceList definition and rename all the selectors to begin with "k". <3> 12/6/91 SMB Adding definition of component type and subtype for input methods. <2> 11/26/91 KST Low level TSM routines are now dispatched directly to the Component Manager. */ #ifndef __TEXTSERVICES__ #define __TEXTSERVICES__ #ifndef __TYPES__ #include #endif #ifndef __EVENTS__ #include #endif #ifndef __MENUS__ #include #endif #ifndef __APPLEEVENTS__ #include #endif #ifndef __ERRORS__ #include #endif #ifndef __COMPONENTS__ #include #endif #define kTSMVersion 1 /* Version of the Text Services Manager */ #define kTextService 'tsvc' /* component type for the component description */ #define kInputMethodService 'inpm' /* component subtype for the component description */ #define bTakeActiveEvent 15 /* bit set if the component takes active event */ #define bScriptMask 0x00007F00 /* bit 8 - 14 */ #define bLanguageMask 0x000000FF /* bit 0 - 7 */ #define bScriptLanguageMask bScriptMask+bLanguageMask /* bit 0 - 14 */ /* •• ************************************** •• */ /* Hilite styles ... */ typedef enum { kCaretPosition = 1, /* specify caret position */ kRawText = 2, /* specify range of raw text */ kSelectedRawText = 3, /* specify range of selected raw text */ kConvertedText = 4, /* specify range of converted text */ kSelectedConvertedText = 5 /* specify range of selected converted text */ } HiliteStyleType; /* •• ************************************** •• */ /* Apple Event constants ... */ /* Event class ... */ #define kTextServiceClass kTextService /* event ID ... */ #define kUpdateActiveInputArea 'updt' /* update the active Inline area */ #define kPos2Offset 'p2st' /* converting global coordinates to char position */ #define kOffset2Pos 'st2p' /* converting char position to global coordinates */ #define kShowHideInputWindow 'shiw' /* show or hide the input window */ /* Event keywords ... */ #define keyAETSMDocumentRefcon 'refc' /* TSM document refcon, typeLongInteger <#45> */ #define keyAEServerInstance 'srvi' /* component instance */ #define keyAETheData 'kdat' /* typeText */ #define keyAEScriptTag 'sclg' /* script tag */ #define keyAEFixLength 'fixl' /* fix len ?? */ #define keyAEHiliteRange 'hrng' /* hilite range array */ #define keyAEUpdateRange 'udng' /* update range array */ #define keyAEClauseOffsets 'clau' /* Clause Offsets array */ #define keyAECurrentPoint 'cpos' /* current point */ #define keyAEDragging 'bool' /* dragging falg */ #define keyAEOffset 'ofst' /* offset */ #define keyAERegionClass 'rgnc' /* region class */ #define keyAEPoint 'gpos' /* current point */ #define keyAEBufferSize 'buff' /* buffer size to get the text */ #define keyAERequestedType 'rtyp' /* requested text type */ #define keyAEMoveView 'mvvw' /* move view flag */ #define keyAELength 'leng' /* length */ #define keyAENextBody 'nxbd' /* next or previous body */ /* optional keywords for Offset2Pos -- 28Mar92 <#38> */ #define keyAETextFont 'ktxf' #define keyAETextPointSize 'ktps' #define keyAETextLineHeight 'ktlh' #define keyAETextLineAscent 'ktas' #define keyAEAngle 'kang' /* optional keywords for Pos2Offset -- 20May92 <#44> */ #define keyAELeftSide 'klef' /* type Boolean */ /* optional keywords for kShowHideInputWindow -- <#48> */ #define keyAEShowHideInputWindow 'shiw' /* type Boolean */ /* for PinRange */ #define keyAEPinRange 'pnrg' /* <#49> */ /* Desc type ... */ #define typeComponentInstance 'cmpi' /* server instance */ #define typeTextRangeArray 'tray' /* text range array */ #define typeOffsetArray 'ofay' /* offset array */ #define typeIntlWritingCode 'intl' /* script code */ #define typeQDPoint 'QDpt' /* QuickDraw Point */ #define typeAEText 'tTXT' /* Apple Event text */ #define typeText 'TEXT' /* Plain text */ #define typeTextRange 'txrn' /* <#49> */ /* error codes */ #define tsmComponentNoErr 0 // component result = no error #define tsmUnsupScriptLanguageErr -2500 // #define tsmInputMethodNotFoundErr -2501 // #define tsmNotAnAppErr -2502 // not an application error #define tsmAlreadyRegisteredErr -2503 // want to register again error #define tsmNeverRegisteredErr -2504 // app never registered error (not TSM aware) #define tsmInvalidDocIDErr -2505 // invalid TSM documentation id #define tsmTSMDocBusyErr -2506 // document is still active #define tsmDocNotActiveErr -2507 // document is NOT active #define tsmNoOpenTSErr -2508 // no open text service #define tsmCantOpenComponentErr -2509 // can't open the component #define tsmTextServiceNotFoundErr -2510 // no text service found #define tsmDocumentOpenErr -2511 // there are open documents #define tsmUseInputWindowErr -2512 // not TSM aware because we are using input window #define tsmTSHasNoMenuErr -2513 // the text service has no menu #define tsmTSNotOpenErr -2514 // text service is not open #define tsmComponentAlreadyOpenErr -2515 // text service already opened for the document #define tsmInputMethodIsOldErr -2516 // returned by GetDefaultInputMethod #define tsmScriptHasNoIMErr -2517 // script has no imput method or is using old IM. #define tsmUnsupportedTypeErr -2518 // unSupported interface type error #define tsmUnknownErr -2519 // any other errors /* Desc type constants */ typedef enum { kTSMOutsideOfBody = 1, kTSMInsideOfBody = 2, kTSMInsideOfActiveInputArea= 3 } AERegionClassType; typedef enum { kNextBody = 1, kPreviousBody = 2 } AENextBodyType; /* Apple Event error definitions */ typedef enum { errOffsetInvalid = -1800, errOffsetIsOutsideOfView = -1801, errTopOfDocument = -1810, errTopOfBody = -1811, errEndOfDocument = -1812, errEndOfBody = -1813 } AppleEventErrorType; /* •• ************************************** •• */ struct TextRange { /* typeTextRange 'txrn' */ long fStart; long fEnd; short fHiliteStyle; }; typedef struct TextRange TextRange; typedef TextRange *TextRangePtr; typedef TextRangePtr *TextRangeHandle; struct TextRangeArray { /* typeTextRangeArray 'txra' */ short fNumOfRanges; /* specify the size of the fRange array */ TextRange fRange[1]; /* when fNumOfRanges > 1, the size of this array has to be calculated */ }; typedef struct TextRangeArray TextRangeArray; typedef TextRangeArray *TextRangeArrayPtr; typedef TextRangeArrayPtr *TextRangeArrayHandle; struct OffsetArray { /* typeOffsetArray 'offa' */ short fNumOfOffsets; /* specify the size of the fOffset array */ long fOffset[1]; /* when fNumOfOffsets > 1, the size of this array has to be calculated */ }; typedef struct OffsetArray OffsetArray; typedef OffsetArray *OffsetArrayPtr; typedef OffsetArrayPtr *OffsetArrayHandle; /* •• ************************************** •• */ /* extract Script/Language code from Component flag ... */ #define mGetScriptCode(cdRec) ((ScriptCode) ((cdRec.componentFlags & bScriptMask) >> 8)) #define mGetLanguageCode(cdRec) ((LangCode) cdRec.componentFlags & bLanguageMask) typedef void *TSMDocumentID; /* •• ************************************** •• */ /* * Text Service Info List */ struct TextServiceInfo { Component fComponent; Str255 fItemName; }; typedef struct TextServiceInfo TextServiceInfo; typedef TextServiceInfo *TextServiceInfoPtr; struct TextServiceList { short fTextServiceCount; /* number of entries in the 'fServices' array */ TextServiceInfo fServices[1]; /* Note: array of 'TextServiceInfo' records follows */ }; typedef struct TextServiceList TextServiceList; typedef TextServiceList *TextServiceListPtr; typedef TextServiceListPtr *TextServiceListHandle; struct ScriptLanguageRecord { ScriptCode fScript; LangCode fLanguage; }; typedef struct ScriptLanguageRecord ScriptLanguageRecord; struct ScriptLanguageSupport { short fScriptLanguageCount; /* number of entries in the 'fScriptLanguageArray' array */ ScriptLanguageRecord fScriptLanguageArray[1]; /* Note: array of 'ScriptLanguageRecord' records follows */ }; typedef struct ScriptLanguageSupport ScriptLanguageSupport; typedef ScriptLanguageSupport *ScriptLanguageSupportPtr; typedef ScriptLanguageSupportPtr *ScriptLanguageSupportHandle; /* •• ************************************** •• */ #define TSMTrapNum 0xAA54 /* •• Text Services Manager function selectors ... */ /* •• High level routines ... */ #define kNewTSMDocument 0 // create new TSM aware document #define kDeleteTSMDocument 1 // delete TSM aware document #define kActivateTSMDocument 2 // activate TSM aware document #define kDeactivateTSMDocument 3 // deactivate TSM aware document #define kTSMEvent 4 // pass all events to TSM #define kTSMMenuSelect 5 // pass menu selection to TSM #define kSetTSMCursor 6 // set the cursor #define kFixTSMDocument 7 // terminate text services #define kGetServiceList 8 // get all text service components #define kOpenTextService 9 // open the text service #define kCloseTextService 10 // close the text service #define kSendAEFromTSMComponent 11 // send Apple Event to client /* •• Utilities ... */ #define kSetDefaultInputMethod 12 // #define kGetDefaultInputMethod 13 // 0x0D #define kSetTextServiceLanguage 14 // Called by Script Mgr #define kGetTextServiceLanguage 15 // #define kUseInputWindow 16 // #define kNewServiceWindow 17 // #define kCloseServiceWindow 18 // #define kGetFrontServiceWindow 19 // #define kInitTSMAwareApplication 20 // claim TSM aware application #define kCloseTSMAwareApplication 21 // application deregisters itself as TSM aware #define kFindServiceWindow 23 /* •• ************************************** •• */ /* High level TSM routines .. */ pascal OSErr NewTSMDocument(short numOfInterface, OSType supportedInterfaceTypes[], TSMDocumentID *idocID, long refcon) = { 0x303C,kNewTSMDocument, TSMTrapNum }; /* MOVE.W #selector,D0 */ pascal OSErr DeleteTSMDocument(TSMDocumentID idocID) = { 0x303C, kDeleteTSMDocument, TSMTrapNum }; pascal OSErr ActivateTSMDocument(TSMDocumentID idocID) = { 0x303C, kActivateTSMDocument, TSMTrapNum }; pascal OSErr DeactivateTSMDocument(TSMDocumentID idocID) = { 0x303C, kDeactivateTSMDocument, TSMTrapNum }; pascal Boolean TSMEvent(EventRecord *event) // pass all events to TSM (removed TSMDocumentID #35) = { 0x303C, kTSMEvent, TSMTrapNum }; pascal Boolean TSMMenuSelect(long menuResult) // pass menu selection to TSM (removed TSMDocumentID #35) = { 0x303C, kTSMMenuSelect, TSMTrapNum }; pascal Boolean SetTSMCursor(Point mousePos) // set the cursor (removed TSMDocumentID #35) = { 0x303C, kSetTSMCursor, TSMTrapNum }; pascal OSErr FixTSMDocument(TSMDocumentID idocID) // terminate text services = { 0x303C, kFixTSMDocument, TSMTrapNum }; pascal OSErr GetServiceList(short numOfInterface, OSType supportedInterfaceTypes[], TextServiceListHandle *serviceInfo, long *seedValue) // get all text services = { 0x303C, kGetServiceList, TSMTrapNum }; pascal OSErr OpenTextService(TSMDocumentID idocID, Component aComponent, ComponentInstance *aComponentInstance) = { 0x303C, kOpenTextService, TSMTrapNum }; // open the text service (return instance) pascal OSErr CloseTextService(TSMDocumentID idocID, ComponentInstance aComponentInstance) = { 0x303C, kCloseTextService, TSMTrapNum }; // close the text service (return instance) /* Sending callback AppleEvents ... */ pascal OSErr SendAEFromTSMComponent(AppleEvent *theAppleEvent, // should be a pointer AppleEvent *reply, AESendMode sendMode, AESendPriority sendPriority, long timeOutInTicks, IdleProcPtr idleProc, EventFilterProcPtr filterProc ) = { 0x303C, kSendAEFromTSMComponent, TSMTrapNum }; pascal OSErr InitTSMAwareApplication(void) // app registers itself as TSM aware = { 0x303C, kInitTSMAwareApplication, TSMTrapNum }; pascal OSErr CloseTSMAwareApplication(void) // app deregisters itself when quit = { 0x303C, kCloseTSMAwareApplication, TSMTrapNum }; /* •• Utilities ... */ pascal OSErr SetDefaultInputMethod ( Component ts, ScriptLanguageRecord *slRecordPtr ) = { 0x303C, kSetDefaultInputMethod, TSMTrapNum }; pascal OSErr GetDefaultInputMethod ( Component *ts, ScriptLanguageRecord *slRecordPtr ) = { 0x303C, kGetDefaultInputMethod, TSMTrapNum }; pascal OSErr SetTextServiceLanguage( ScriptLanguageRecord *slRecordPtr ) = { 0x303C, kSetTextServiceLanguage, TSMTrapNum }; pascal OSErr GetTextServiceLanguage( ScriptLanguageRecord *slRecordPtr ) = { 0x303C, kGetTextServiceLanguage, TSMTrapNum }; pascal OSErr UseInputWindow( TSMDocumentID idocID, Boolean useWindow ) = { 0x303C, kUseInputWindow, TSMTrapNum }; pascal OSErr NewServiceWindow(void *wStorage, const Rect *boundsRect, ConstStr255Param title, Boolean visible, short theProc, WindowPtr behind, Boolean goAwayFlag, ComponentInstance ts, WindowPtr *window ) = { 0x303C, kNewServiceWindow, TSMTrapNum }; pascal OSErr CloseServiceWindow(WindowPtr window ) = { 0x303C, kCloseServiceWindow, TSMTrapNum }; pascal OSErr GetFrontServiceWindow(WindowPtr *window ) = { 0x303C, kGetFrontServiceWindow, TSMTrapNum }; pascal short FindServiceWindow(Point thePoint,WindowPtr *theWindow) = { 0x303C, kFindServiceWindow, TSMTrapNum }; /* •• Low level routines which are dispatched directly to the Component Manager ... */ #define kCMGetScriptLangSupport 0x0001 // Component Manager call selector 1 #define kCMInitiateTextService 0x0002 // Component Manager call selector 2 #define kCMTerminateTextService 0x0003 // Component Manager call selector 3 #define kCMActivateTextService 0x0004 // Component Manager call selector 4 #define kCMDeactivateTextService 0x0005 // Component Manager call selector 5 #define kCMTextServiceEvent 0x0006 // Component Manager call selector 6 #define kCMGetTextServiceMenu 0x0007 // Component Manager call selector 7 #define kCMTextServiceMenuSelect 0x0008 // Component Manager call selector 8 #define kCMFixTextService 0x0009 // Component Manager call selector 9 #define kCMSetTextServiceCursor 0x000A // Component Manager call selector 10 #define kCMHidePaletteWindows 0x000B // Component Manager call selector 11 <#37> /* •• Low level TSM routines ... */ pascal ComponentResult GetScriptLanguageSupport(ComponentInstance ts, ScriptLanguageSupportHandle *scriptHdl) = {0x2F3C,0x04,kCMGetScriptLangSupport,0x7000,0xA82A}; /* selector = 1 */ pascal ComponentResult InitiateTextService(ComponentInstance ts) = {0x2F3C,0x00,kCMInitiateTextService,0x7000,0xA82A}; /* selector = 2 */ pascal ComponentResult TerminateTextService(ComponentInstance ts) = {0x2F3C,0x00,kCMTerminateTextService,0x7000,0xA82A}; /* selector = 3 */ pascal ComponentResult ActivateTextService(ComponentInstance ts) = {0x2F3C,0x00,kCMActivateTextService,0x7000,0xA82A}; /* selector = 4 */ pascal ComponentResult DeactivateTextService(ComponentInstance ts) = {0x2F3C,0x00,kCMDeactivateTextService,0x7000,0xA82A}; /* selector = 5 */ pascal ComponentResult TextServiceEvent(ComponentInstance ts, short numOfEvents, EventRecord *event) = {0x2F3C,0x06,kCMTextServiceEvent,0x7000,0xA82A}; /* selector = 6 */ pascal ComponentResult GetTextServiceMenu(ComponentInstance ts, MenuHandle *serviceMenu) = {0x2F3C,0x4,kCMGetTextServiceMenu,0x7000,0xA82A}; /* selector = 7 */ pascal ComponentResult TextServiceMenuSelect(ComponentInstance ts, MenuHandle serviceMenu, short item) = {0x2F3C,0x06,kCMTextServiceMenuSelect,0x7000,0xA82A}; /* selector = 8 */ pascal ComponentResult FixTextService(ComponentInstance ts) = {0x2F3C,0x00,kCMFixTextService,0x7000,0xA82A}; /* selector = 9 */ pascal ComponentResult SetTextServiceCursor(ComponentInstance ts, Point mousePos) = {0x2F3C,0x04,kCMSetTextServiceCursor,0x7000,0xA82A}; /* selector = 10 */ pascal ComponentResult HidePaletteWindows(ComponentInstance ts) = {0x2F3C,0x00,kCMHidePaletteWindows,0x7000,0xA82A}; /* selector = 11 <#37> */ #endif