1 // SciTE - Scintilla based Text Editor
2 /** @file Extender.h
3  ** SciTE extension interface.
4  **/
5 // Copyright 1998-2001 by Neil Hodgson <neilh@scintilla.org>
6 // The License.txt file describes the conditions under which this software may be distributed.
7 
8 #ifndef EXTENDER_H
9 #define EXTENDER_H
10 
11 class StyleWriter;
12 
SptrFromPointer(void * p)13 inline intptr_t SptrFromPointer(void *p) noexcept {
14 	return reinterpret_cast<intptr_t>(p);
15 }
16 
SptrFromString(const char * cp)17 inline intptr_t SptrFromString(const char *cp) noexcept {
18 	return reinterpret_cast<intptr_t>(cp);
19 }
20 
UptrFromString(const char * cp)21 inline uintptr_t UptrFromString(const char *cp) noexcept {
22 	return reinterpret_cast<uintptr_t>(cp);
23 }
24 
25 class ExtensionAPI {
26 public:
~ExtensionAPI()27 	virtual ~ExtensionAPI() {
28 	}
29 	enum Pane { paneEditor=1, paneOutput=2, paneFindOutput=3 };
30 	virtual intptr_t Send(Pane p, Scintilla::API::Message msg, uintptr_t wParam=0, intptr_t lParam=0)=0;
31 	virtual std::string Range(Pane p, Scintilla::API::Range range)=0;
32 	virtual void Remove(Pane p, Scintilla::API::Position start, Scintilla::API::Position end)=0;
33 	virtual void Insert(Pane p, Scintilla::API::Position pos, const char *s)=0;
34 	virtual void Trace(const char *s)=0;
35 	virtual std::string Property(const char *key)=0;
36 	virtual void SetProperty(const char *key, const char *val)=0;
37 	virtual void UnsetProperty(const char *key)=0;
38 	virtual uintptr_t GetInstance()=0;
39 	virtual void ShutDown()=0;
40 	virtual void Perform(const char *actions)=0;
41 	virtual void DoMenuCommand(int cmdID)=0;
42 	virtual void UpdateStatusBar(bool bUpdateSlowData)=0;
43 	virtual void UserStripShow(const char *description)=0;
44 	virtual void UserStripSet(int control, const char *value)=0;
45 	virtual void UserStripSetList(int control, const char *value)=0;
46 	virtual std::string UserStripValue(int control)=0;
47 	virtual Scintilla::API::ScintillaCall &PaneCaller(Pane p) noexcept =0;
48 };
49 
50 /**
51  * Methods in extensions return true if they have completely handled an event and
52  * false if default processing is to continue.
53  */
54 class Extension {
55 public:
~Extension()56 	virtual ~Extension() {}
57 
58 	virtual bool Initialise(ExtensionAPI *host_)=0;
59 	virtual bool Finalise()=0;
60 	virtual bool Clear()=0;
61 	virtual bool Load(const char *filename)=0;
62 
InitBuffer(int)63 	virtual bool InitBuffer(int) { return false; }
ActivateBuffer(int)64 	virtual bool ActivateBuffer(int) { return false; }
RemoveBuffer(int)65 	virtual bool RemoveBuffer(int) { return false; }
66 
OnOpen(const char *)67 	virtual bool OnOpen(const char *) { return false; }
OnSwitchFile(const char *)68 	virtual bool OnSwitchFile(const char *) { return false; }
OnBeforeSave(const char *)69 	virtual bool OnBeforeSave(const char *) { return false; }
OnSave(const char *)70 	virtual bool OnSave(const char *) { return false; }
OnChar(char)71 	virtual bool OnChar(char) { return false; }
OnExecute(const char *)72 	virtual bool OnExecute(const char *) { return false; }
OnSavePointReached()73 	virtual bool OnSavePointReached() { return false; }
OnSavePointLeft()74 	virtual bool OnSavePointLeft() { return false; }
OnStyle(Scintilla::API::Position,Scintilla::API::Position,int,StyleWriter *)75 	virtual bool OnStyle(Scintilla::API::Position, Scintilla::API::Position, int, StyleWriter *) {
76 		return false;
77 	}
OnDoubleClick()78 	virtual bool OnDoubleClick() { return false; }
OnUpdateUI()79 	virtual bool OnUpdateUI() { return false; }
OnMarginClick()80 	virtual bool OnMarginClick() { return false; }
OnMacro(const char *,const char *)81 	virtual bool OnMacro(const char *, const char *) { return false; }
OnUserListSelection(int,const char *)82 	virtual bool OnUserListSelection(int, const char *) { return false; }
83 
SendProperty(const char *)84 	virtual bool SendProperty(const char *) { return false; }
85 
OnKey(int,int)86 	virtual bool OnKey(int, int) { return false; }
OnDwellStart(Scintilla::API::Position,const char *)87 	virtual bool OnDwellStart(Scintilla::API::Position, const char *) { return false; }
OnClose(const char *)88 	virtual bool OnClose(const char *) { return false; }
OnUserStrip(int,int)89 	virtual bool OnUserStrip(int /* control */, int /* change */) { return false; }
NeedsOnClose()90 	virtual bool NeedsOnClose() { return true; }
91 };
92 
93 #endif
94