aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--include/ILexer.h4
-rw-r--r--include/Scintilla.h4
-rw-r--r--include/Scintilla.iface15
-rw-r--r--lexers/LexCPP.cxx12
-rw-r--r--lexlib/DefaultLexer.cxx16
-rw-r--r--lexlib/DefaultLexer.h4
-rw-r--r--lexlib/LexerBase.cxx16
-rw-r--r--lexlib/LexerBase.h4
-rw-r--r--src/ScintillaBase.cxx49
9 files changed, 124 insertions, 0 deletions
diff --git a/include/ILexer.h b/include/ILexer.h
index 7f92e2b79..0e03dbdb0 100644
--- a/include/ILexer.h
+++ b/include/ILexer.h
@@ -75,6 +75,10 @@ public:
virtual void SCI_METHOD SetIdentifiers(int style, const char *identifiers) = 0;
virtual int SCI_METHOD DistanceToSecondaryStyles() = 0;
virtual const char * SCI_METHOD GetSubStyleBases() = 0;
+ virtual int SCI_METHOD NamedStyles() = 0;
+ virtual const char * SCI_METHOD NameOfStyle(int style) = 0;
+ virtual const char * SCI_METHOD TagsOfStyle(int style) = 0;
+ virtual const char * SCI_METHOD DescriptionOfStyle(int style) = 0;
};
class ILoader {
diff --git a/include/Scintilla.h b/include/Scintilla.h
index 1a0108270..37bcf146f 100644
--- a/include/Scintilla.h
+++ b/include/Scintilla.h
@@ -1008,6 +1008,10 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam,
#define SCI_SETIDENTIFIERS 4024
#define SCI_DISTANCETOSECONDARYSTYLES 4025
#define SCI_GETSUBSTYLEBASES 4026
+#define SCI_GETNAMEDSTYLES 4029
+#define SCI_NAMEOFSTYLE 4030
+#define SCI_TAGSOFSTYLE 4031
+#define SCI_DESCRIPTIONOFSTYLE 4032
#define SC_MOD_INSERTTEXT 0x1
#define SC_MOD_DELETETEXT 0x2
#define SC_MOD_CHANGESTYLE 0x4
diff --git a/include/Scintilla.iface b/include/Scintilla.iface
index 8406fa6fc..60c6b993b 100644
--- a/include/Scintilla.iface
+++ b/include/Scintilla.iface
@@ -2702,6 +2702,21 @@ get int DistanceToSecondaryStyles=4025(,)
# Result is NUL-terminated.
get int GetSubStyleBases=4026(, stringresult styles)
+# Retrieve the number of named styles for the lexer.
+get int GetNamedStyles=4029(,)
+
+# Retrieve the name of a style.
+# Result is NUL-terminated.
+fun int NameOfStyle=4030(int style, stringresult names)
+
+# Retrieve a ' ' separated list of style tags like "literal quoted string".
+# Result is NUL-terminated.
+fun int TagsOfStyle=4031(int style, stringresult names)
+
+# Retrieve a description of a style.
+# Result is NUL-terminated.
+fun int DescriptionOfStyle=4032(int style, stringresult names)
+
# Notifications
# Type of modification and the action which caused the modification.
# These are defined as a bit mask to make it easy to specify which notifications are wanted.
diff --git a/lexers/LexCPP.cxx b/lexers/LexCPP.cxx
index 5d75aa171..39e21fff3 100644
--- a/lexers/LexCPP.cxx
+++ b/lexers/LexCPP.cxx
@@ -545,6 +545,18 @@ public:
const char * SCI_METHOD GetSubStyleBases() override {
return styleSubable;
}
+ int SCI_METHOD NamedStyles() {
+ return 0;
+ }
+ const char * SCI_METHOD NameOfStyle(int) {
+ return "";
+ }
+ const char * SCI_METHOD TagsOfStyle(int) {
+ return "";
+ }
+ const char * SCI_METHOD DescriptionOfStyle(int) {
+ return "";
+ }
static ILexer4 *LexerFactoryCPP() {
return new LexerCPP(true);
diff --git a/lexlib/DefaultLexer.cxx b/lexlib/DefaultLexer.cxx
index 69310f33c..19221cc53 100644
--- a/lexlib/DefaultLexer.cxx
+++ b/lexlib/DefaultLexer.cxx
@@ -108,3 +108,19 @@ int SCI_METHOD DefaultLexer::DistanceToSecondaryStyles() {
const char * SCI_METHOD DefaultLexer::GetSubStyleBases() {
return styleSubable;
}
+
+int SCI_METHOD DefaultLexer::NamedStyles() {
+ return 0;
+}
+
+const char * SCI_METHOD DefaultLexer::NameOfStyle(int) {
+ return "";
+}
+
+const char * SCI_METHOD DefaultLexer::TagsOfStyle(int) {
+ return "";
+}
+
+const char * SCI_METHOD DefaultLexer::DescriptionOfStyle(int) {
+ return "";
+}
diff --git a/lexlib/DefaultLexer.h b/lexlib/DefaultLexer.h
index be287546b..372294e1a 100644
--- a/lexlib/DefaultLexer.h
+++ b/lexlib/DefaultLexer.h
@@ -40,6 +40,10 @@ public:
void SCI_METHOD SetIdentifiers(int style, const char *identifiers) override;
int SCI_METHOD DistanceToSecondaryStyles() override;
const char * SCI_METHOD GetSubStyleBases() override;
+ int SCI_METHOD NamedStyles() override;
+ const char * SCI_METHOD NameOfStyle(int style) override;
+ const char * SCI_METHOD TagsOfStyle(int style) override;
+ const char * SCI_METHOD DescriptionOfStyle(int style) override;
};
#ifdef SCI_NAMESPACE
diff --git a/lexlib/LexerBase.cxx b/lexlib/LexerBase.cxx
index 232b110c4..fdf8878a2 100644
--- a/lexlib/LexerBase.cxx
+++ b/lexlib/LexerBase.cxx
@@ -127,3 +127,19 @@ int SCI_METHOD LexerBase::DistanceToSecondaryStyles() {
const char * SCI_METHOD LexerBase::GetSubStyleBases() {
return styleSubable;
}
+
+int SCI_METHOD LexerBase::NamedStyles() {
+ return 0;
+}
+
+const char * SCI_METHOD LexerBase::NameOfStyle(int) {
+ return "";
+}
+
+const char * SCI_METHOD LexerBase::TagsOfStyle(int) {
+ return "";
+}
+
+const char * SCI_METHOD LexerBase::DescriptionOfStyle(int) {
+ return "";
+}
diff --git a/lexlib/LexerBase.h b/lexlib/LexerBase.h
index f0378916f..66e7560e1 100644
--- a/lexlib/LexerBase.h
+++ b/lexlib/LexerBase.h
@@ -42,6 +42,10 @@ public:
void SCI_METHOD SetIdentifiers(int style, const char *identifiers) override;
int SCI_METHOD DistanceToSecondaryStyles() override;
const char * SCI_METHOD GetSubStyleBases() override;
+ int SCI_METHOD NamedStyles() override;
+ const char * SCI_METHOD NameOfStyle(int style) override;
+ const char * SCI_METHOD TagsOfStyle(int style) override;
+ const char * SCI_METHOD DescriptionOfStyle(int style) override;
};
#ifdef SCI_NAMESPACE
diff --git a/src/ScintillaBase.cxx b/src/ScintillaBase.cxx
index 204ff9f8e..d65659ae8 100644
--- a/src/ScintillaBase.cxx
+++ b/src/ScintillaBase.cxx
@@ -582,6 +582,10 @@ public:
void SetIdentifiers(int style, const char *identifiers);
int DistanceToSecondaryStyles();
const char *GetSubStyleBases();
+ int NamedStyles();
+ const char *NameOfStyle(int style);
+ const char *TagsOfStyle(int style);
+ const char *DescriptionOfStyle(int style);
};
#ifdef SCI_NAMESPACE
@@ -790,6 +794,38 @@ const char *LexState::GetSubStyleBases() {
return "";
}
+int LexState::NamedStyles() {
+ if (instance) {
+ return instance->NamedStyles();
+ } else {
+ return -1;
+ }
+}
+
+const char *LexState::NameOfStyle(int style) {
+ if (instance) {
+ return instance->NameOfStyle(style);
+ } else {
+ return 0;
+ }
+}
+
+const char *LexState::TagsOfStyle(int style) {
+ if (instance) {
+ return instance->TagsOfStyle(style);
+ } else {
+ return 0;
+ }
+}
+
+const char *LexState::DescriptionOfStyle(int style) {
+ if (instance) {
+ return instance->DescriptionOfStyle(style);
+ } else {
+ return 0;
+ }
+}
+
#endif
void ScintillaBase::NotifyStyleToNeeded(Sci::Position endStyleNeeded) {
@@ -1101,6 +1137,19 @@ sptr_t ScintillaBase::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lPara
case SCI_GETSUBSTYLEBASES:
return StringResult(lParam, DocumentLexState()->GetSubStyleBases());
+
+ case SCI_GETNAMEDSTYLES:
+ return DocumentLexState()->NamedStyles();
+
+ case SCI_NAMEOFSTYLE:
+ return StringResult(lParam, DocumentLexState()->NameOfStyle(wParam));
+
+ case SCI_TAGSOFSTYLE:
+ return StringResult(lParam, DocumentLexState()->TagsOfStyle(wParam));
+
+ case SCI_DESCRIPTIONOFSTYLE:
+ return StringResult(lParam, DocumentLexState()->DescriptionOfStyle(wParam));
+
#endif
default: