sys7.1-doc-wip/Interfaces/CIncludes/TextServices.h
2019-07-27 22:37:48 +08:00

570 lines
22 KiB
C

/*
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 <LP>: 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 <JH>: Added a new Apple Event kShowHideInputWindow.
<45> 6/17/92 KST #1032783 <JH>: 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 <JH>: Added an optional keywords for Pos2Offset.
<43> 5/18/92 KST #1029814 <JH>: 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>: 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 <Types.h>
#endif
#ifndef __EVENTS__
#include <Events.h>
#endif
#ifndef __MENUS__
#include <Menus.h>
#endif
#ifndef __APPLEEVENTS__
#include <AppleEvents.h>
#endif
#ifndef __ERRORS__
#include <Errors.h>
#endif
#ifndef __COMPONENTS__
#include <Components.h>
#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