aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--doc/ScintillaDoc.html25
-rw-r--r--doc/ScintillaHistory.html4
-rw-r--r--include/ILexer.h9
-rw-r--r--lexers/LexAsm.cxx11
-rw-r--r--lexers/LexBaan.cxx8
-rw-r--r--lexers/LexBash.cxx7
-rw-r--r--lexers/LexBasic.cxx15
-rw-r--r--lexers/LexCIL.cxx8
-rw-r--r--lexers/LexCPP.cxx17
-rw-r--r--lexers/LexD.cxx6
-rw-r--r--lexers/LexDMIS.cxx8
-rw-r--r--lexers/LexEDIFACT.cxx23
-rw-r--r--lexers/LexHTML.cxx8
-rw-r--r--lexers/LexHaskell.cxx9
-rw-r--r--lexers/LexHollywood.cxx28
-rw-r--r--lexers/LexJSON.cxx6
-rw-r--r--lexers/LexLaTeX.cxx9
-rw-r--r--lexers/LexNim.cxx8
-rw-r--r--lexers/LexPerl.cxx6
-rw-r--r--lexers/LexProgress.cxx6
-rw-r--r--lexers/LexPython.cxx7
-rw-r--r--lexers/LexRegistry.cxx8
-rw-r--r--lexers/LexRust.cxx7
-rw-r--r--lexers/LexSQL.cxx8
-rw-r--r--lexers/LexVerilog.cxx6
-rw-r--r--lexers/LexVisualProlog.cxx7
-rw-r--r--lexers/LexX12.cxx7
-rw-r--r--lexlib/DefaultLexer.cxx20
-rw-r--r--lexlib/DefaultLexer.h10
-rw-r--r--lexlib/LexerBase.cxx16
-rw-r--r--lexlib/LexerBase.h6
-rw-r--r--lexlib/LexerSimple.cxx8
-rw-r--r--lexlib/LexerSimple.h3
33 files changed, 270 insertions, 64 deletions
diff --git a/doc/ScintillaDoc.html b/doc/ScintillaDoc.html
index d6d98b578..ef9e3e81b 100644
--- a/doc/ScintillaDoc.html
+++ b/doc/ScintillaDoc.html
@@ -1808,7 +1808,7 @@ struct Sci_TextToFind {
<b id="SCI_GETSELECTIONNEND">SCI_GETSELECTIONNEND(int selection) &rarr; position</b><br />
<b id="SCI_GETSELECTIONNENDVIRTUALSPACE">SCI_GETSELECTIONNENDVIRTUALSPACE(int selection) &rarr; position</b><br />
Set or query the start and end position of each already existing selection.
- Query the virtual space at start and end of each selection.
+ Query the virtual space at start and end of each selection.
Mostly of use to query each range for its text. The selection parameter is zero-based. </p>
<p>
@@ -7143,7 +7143,7 @@ optimisation could be to remember where a setting first affects the document and
<p><code>Version</code> returns an enumerated value specifying which version of the interface is implemented:
<code>lvOriginal</code> for <code>ILexer</code>, <code>lvSubStyles</code> for <code>ILexerWithSubStyles</code>,
-and <code>lvMetaData</code> for <code>ILexerWithMetaData</code>.</p>
+<code>lvMetaData</code> for <code>ILexerWithMetaData</code>, and <code>lvIdentity</code> for <code>ILexerWithIdentity></code>.</p>
<p><code>Release</code> is called to destroy the lexer object.</p>
@@ -7205,6 +7205,27 @@ A set of common tags and conventions for combining them is <a class="jump" href
<span class="S10">};</span><br />
</div>
+<h4 class="provisional">ILexerWithIdentity</h4>
+
+<div class="highlighted">
+<span><span class="S5">class</span><span class="S0"> </span>ILexerWithIdentity<span class="S0"> </span><span class="S10">:</span><span class="S0"> </span><span class="S5">public</span><span class="S0"> </span>ILexer<span class="S0"> </span><span class="S10">{</span><br />
+<span class="S5">public</span><span class="S10">:</span><br />
+<span class="S0">&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="S5">virtual</span><span class="S0"> </span><span class="S5">const</span><span class="S0"> </span><span class="S5">char</span><span class="S0"> </span><span class="S10">*</span><span class="S0"> </span>SCI_METHOD<span class="S0"> </span>GetName<span class="S10">()</span><span class="S0"> </span><span class="S10">=</span><span class="S0"> </span><span class="S4">0</span><span class="S10">;</span><br />
+<span class="S0">&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="S5">virtual</span><span class="S0"> </span><span class="S5">int</span><span class="S0"> </span>SCI_METHOD<span class="S0"> &nbsp;</span>GetIdentifier<span class="S10">()</span><span class="S0"> </span><span class="S10">=</span><span class="S0"> </span><span class="S4">0</span><span class="S10">;</span><br />
+<span class="S0">&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="S5">virtual</span><span class="S0"> </span><span class="S5">const</span><span class="S0"> </span><span class="S5">char</span><span class="S0"> </span><span class="S10">*</span><span class="S0"> </span>SCI_METHOD<span class="S0"> </span>PropertyGet<span class="S10">(</span><span class="S5">const</span><span class="S0"> </span><span class="S5">char</span><span class="S0"> </span><span class="S10">*</span>key<span class="S10">)</span><span class="S0"> </span><span class="S10">=</span><span class="S0"> </span><span class="S4">0</span><span class="S10">;</span><br />
+<span class="S10">};</span><br />
+<span class="S0"></span></span>
+</div>
+
+<p class="provisional"><code>GetName</code> and <code>GetIdentifier</code> may be called
+to discover the identity of a lexer and be used to implement
+<a class="message" href="#SCI_GETLEXERLANGUAGE">SCI_GETLEXERLANGUAGE</a> and
+<a class="message" href="#SCI_GETLEXER">SCI_GETLEXER</a>.</p>
+
+<p class="provisional"><code>PropertyGet</code> may be called
+to discover the value of a property stored by a lexer and be used to implement
+<a class="message" href="#SCI_GETPROPERTY">SCI_GETPROPERTY</a>.</p>
+
<h4>IDocument</h4>
<div class="highlighted">
diff --git a/doc/ScintillaHistory.html b/doc/ScintillaHistory.html
index 308c1d40c..fe08f84a4 100644
--- a/doc/ScintillaHistory.html
+++ b/doc/ScintillaHistory.html
@@ -561,6 +561,10 @@
Released 07 December 2019.
</li>
<li>
+ ILexerWithIdentity interface defined provisionally to support use of Lexilla.
+ The details of this interface may change before being stabilised in Scintilla 5.0.
+ </li>
+ <li>
SCI_LOADLEXERLIBRARY implemented on Cocoa.
</li>
<li>
diff --git a/include/ILexer.h b/include/ILexer.h
index 42f980f89..f7f188972 100644
--- a/include/ILexer.h
+++ b/include/ILexer.h
@@ -46,7 +46,7 @@ public:
virtual int SCI_METHOD GetCharacterAndWidth(Sci_Position position, Sci_Position *pWidth) const = 0;
};
-enum { lvOriginal=0, lvSubStyles=1, lvMetaData=2 };
+enum { lvOriginal=0, lvSubStyles=1, lvMetaData=2, lvIdentity=3 };
class ILexer {
public:
@@ -85,6 +85,13 @@ public:
virtual const char * SCI_METHOD DescriptionOfStyle(int style) = 0;
};
+class ILexerWithIdentity : public ILexerWithMetaData {
+public:
+ virtual const char * SCI_METHOD GetName() = 0;
+ virtual int SCI_METHOD GetIdentifier() = 0;
+ virtual const char * SCI_METHOD PropertyGet(const char *key) = 0;
+};
+
}
#endif
diff --git a/lexers/LexAsm.cxx b/lexers/LexAsm.cxx
index bd82b1621..9bc775ceb 100644
--- a/lexers/LexAsm.cxx
+++ b/lexers/LexAsm.cxx
@@ -151,7 +151,7 @@ class LexerAsm : public DefaultLexer {
OptionSetAsm osAsm;
int commentChar;
public:
- LexerAsm(int commentChar_) {
+ LexerAsm(const char *languageName_, int language_, int commentChar_) : DefaultLexer(languageName_, language_) {
commentChar = commentChar_;
}
virtual ~LexerAsm() {
@@ -160,7 +160,7 @@ public:
delete this;
}
int SCI_METHOD Version() const override {
- return lvOriginal;
+ return lvIdentity;
}
const char * SCI_METHOD PropertyNames() override {
return osAsm.PropertyNames();
@@ -172,6 +172,9 @@ public:
return osAsm.DescribeProperty(name);
}
Sci_Position SCI_METHOD PropertySet(const char *key, const char *val) override;
+ const char * SCI_METHOD PropertyGet(const char *key) override {
+ return osAsm.PropertyGet(key);
+ }
const char * SCI_METHOD DescribeWordListSets() override {
return osAsm.DescribeWordListSets();
}
@@ -184,11 +187,11 @@ public:
}
static ILexer *LexerFactoryAsm() {
- return new LexerAsm(';');
+ return new LexerAsm("asm", SCLEX_ASM, ';');
}
static ILexer *LexerFactoryAs() {
- return new LexerAsm('#');
+ return new LexerAsm("as", SCLEX_AS, '#');
}
};
diff --git a/lexers/LexBaan.cxx b/lexers/LexBaan.cxx
index fa8b46302..2fb1debd0 100644
--- a/lexers/LexBaan.cxx
+++ b/lexers/LexBaan.cxx
@@ -393,14 +393,14 @@ class LexerBaan : public DefaultLexer {
OptionsBaan options;
OptionSetBaan osBaan;
public:
- LexerBaan() {
+ LexerBaan() : DefaultLexer("baan", SCLEX_BAAN) {
}
virtual ~LexerBaan() {
}
int SCI_METHOD Version() const override {
- return lvOriginal;
+ return lvIdentity;
}
void SCI_METHOD Release() override {
@@ -421,6 +421,10 @@ public:
Sci_Position SCI_METHOD PropertySet(const char *key, const char *val) override;
+ const char * SCI_METHOD PropertyGet(const char *key) override {
+ return osBaan.PropertyGet(key);
+ }
+
const char * SCI_METHOD DescribeWordListSets() override {
return osBaan.DescribeWordListSets();
}
diff --git a/lexers/LexBash.cxx b/lexers/LexBash.cxx
index 45832b77d..66bec3846 100644
--- a/lexers/LexBash.cxx
+++ b/lexers/LexBash.cxx
@@ -201,7 +201,7 @@ class LexerBash : public DefaultLexer {
SubStyles subStyles;
public:
LexerBash() :
- DefaultLexer(lexicalClasses, ELEMENTS(lexicalClasses)),
+ DefaultLexer("bash", SCLEX_BASH, lexicalClasses, ELEMENTS(lexicalClasses)),
subStyles(styleSubable, 0x80, 0x40, 0) {
}
virtual ~LexerBash() {
@@ -210,7 +210,7 @@ public:
delete this;
}
int SCI_METHOD Version() const override {
- return lvMetaData;
+ return lvIdentity;
}
const char * SCI_METHOD PropertyNames() override {
return osBash.PropertyNames();
@@ -222,6 +222,9 @@ public:
return osBash.DescribeProperty(name);
}
Sci_Position SCI_METHOD PropertySet(const char *key, const char *val) override;
+ const char * SCI_METHOD PropertyGet(const char* key) override {
+ return osBash.PropertyGet(key);
+ }
const char * SCI_METHOD DescribeWordListSets() override {
return osBash.DescribeWordListSets();
}
diff --git a/lexers/LexBasic.cxx b/lexers/LexBasic.cxx
index 4ec58dcdd..a288f9daa 100644
--- a/lexers/LexBasic.cxx
+++ b/lexers/LexBasic.cxx
@@ -232,7 +232,9 @@ class LexerBasic : public DefaultLexer {
OptionsBasic options;
OptionSetBasic osBasic;
public:
- LexerBasic(char comment_char_, int (*CheckFoldPoint_)(char const *, int &), const char * const wordListDescriptions[]) :
+ LexerBasic(const char *languageName_, int language_, char comment_char_,
+ int (*CheckFoldPoint_)(char const *, int &), const char * const wordListDescriptions[]) :
+ DefaultLexer(languageName_, language_),
comment_char(comment_char_),
CheckFoldPoint(CheckFoldPoint_),
osBasic(wordListDescriptions) {
@@ -243,7 +245,7 @@ public:
delete this;
}
int SCI_METHOD Version() const override {
- return lvOriginal;
+ return lvIdentity;
}
const char * SCI_METHOD PropertyNames() override {
return osBasic.PropertyNames();
@@ -255,6 +257,9 @@ public:
return osBasic.DescribeProperty(name);
}
Sci_Position SCI_METHOD PropertySet(const char *key, const char *val) override;
+ const char * SCI_METHOD PropertyGet(const char *key) override {
+ return osBasic.PropertyGet(key);
+ }
const char * SCI_METHOD DescribeWordListSets() override {
return osBasic.DescribeWordListSets();
}
@@ -266,13 +271,13 @@ public:
return 0;
}
static ILexer *LexerFactoryBlitzBasic() {
- return new LexerBasic(';', CheckBlitzFoldPoint, blitzbasicWordListDesc);
+ return new LexerBasic("blitzbasic", SCLEX_BLITZBASIC, ';', CheckBlitzFoldPoint, blitzbasicWordListDesc);
}
static ILexer *LexerFactoryPureBasic() {
- return new LexerBasic(';', CheckPureFoldPoint, purebasicWordListDesc);
+ return new LexerBasic("purebasic", SCLEX_PUREBASIC, ';', CheckPureFoldPoint, purebasicWordListDesc);
}
static ILexer *LexerFactoryFreeBasic() {
- return new LexerBasic('\'', CheckFreeFoldPoint, freebasicWordListDesc );
+ return new LexerBasic("freebasic", SCLEX_FREEBASIC, '\'', CheckFreeFoldPoint, freebasicWordListDesc );
}
};
diff --git a/lexers/LexCIL.cxx b/lexers/LexCIL.cxx
index 2a572ad3e..f396acb72 100644
--- a/lexers/LexCIL.cxx
+++ b/lexers/LexCIL.cxx
@@ -114,7 +114,7 @@ class LexerCIL : public DefaultLexer {
OptionSetCIL osCIL;
public:
- LexerCIL() : DefaultLexer(lexicalClasses, ELEMENTS(lexicalClasses)) { }
+ LexerCIL() : DefaultLexer("cil", SCLEX_CIL, lexicalClasses, ELEMENTS(lexicalClasses)) { }
virtual ~LexerCIL() { }
@@ -123,7 +123,7 @@ public:
}
int SCI_METHOD Version() const override {
- return lvMetaData;
+ return lvIdentity;
}
const char * SCI_METHOD PropertyNames() override {
@@ -140,6 +140,10 @@ public:
Sci_Position SCI_METHOD PropertySet(const char *key, const char *val) override;
+ const char * SCI_METHOD PropertyGet(const char* key) override {
+ return osCIL.PropertyGet(key);
+ }
+
const char * SCI_METHOD DescribeWordListSets() override {
return osCIL.DescribeWordListSets();
}
diff --git a/lexers/LexCPP.cxx b/lexers/LexCPP.cxx
index 06d4c0265..c6b52784e 100644
--- a/lexers/LexCPP.cxx
+++ b/lexers/LexCPP.cxx
@@ -499,7 +499,7 @@ LexicalClass lexicalClasses[] = {
}
-class LexerCPP : public ILexerWithMetaData {
+class LexerCPP : public ILexerWithIdentity {
bool caseSensitive;
CharacterSet setWord;
CharacterSet setNegationOp;
@@ -562,7 +562,7 @@ public:
delete this;
}
int SCI_METHOD Version() const noexcept override {
- return lvMetaData;
+ return lvIdentity;
}
const char * SCI_METHOD PropertyNames() override {
return osCPP.PropertyNames();
@@ -672,6 +672,15 @@ public:
return "";
}
+ // ILexerWithIdentity methods
+ const char * SCI_METHOD GetName() override {
+ return caseSensitive ? "cpp" : "cppnocase";
+ }
+ int SCI_METHOD GetIdentifier() override {
+ return caseSensitive ? SCLEX_CPP : SCLEX_CPPNOCASE;
+ }
+ const char * SCI_METHOD PropertyGet(const char *key) override;
+
static ILexer *LexerFactoryCPP() {
return new LexerCPP(true);
}
@@ -699,6 +708,10 @@ Sci_Position SCI_METHOD LexerCPP::PropertySet(const char *key, const char *val)
return -1;
}
+const char * SCI_METHOD LexerCPP::PropertyGet(const char *key) {
+ return osCPP.PropertyGet(key);
+}
+
Sci_Position SCI_METHOD LexerCPP::WordListSet(int n, const char *wl) {
WordList *wordListN = nullptr;
switch (n) {
diff --git a/lexers/LexD.cxx b/lexers/LexD.cxx
index acbf462ed..a661b4f13 100644
--- a/lexers/LexD.cxx
+++ b/lexers/LexD.cxx
@@ -157,6 +157,7 @@ class LexerD : public DefaultLexer {
OptionSetD osD;
public:
LexerD(bool caseSensitive_) :
+ DefaultLexer("D", SCLEX_D),
caseSensitive(caseSensitive_) {
}
virtual ~LexerD() {
@@ -165,7 +166,7 @@ public:
delete this;
}
int SCI_METHOD Version() const override {
- return lvOriginal;
+ return lvIdentity;
}
const char * SCI_METHOD PropertyNames() override {
return osD.PropertyNames();
@@ -177,6 +178,9 @@ public:
return osD.DescribeProperty(name);
}
Sci_Position SCI_METHOD PropertySet(const char *key, const char *val) override;
+ const char * SCI_METHOD PropertyGet(const char *key) override {
+ return osD.PropertyGet(key);
+ }
const char * SCI_METHOD DescribeWordListSets() override {
return osD.DescribeWordListSets();
}
diff --git a/lexers/LexDMIS.cxx b/lexers/LexDMIS.cxx
index fa024e9e7..b4cd11c9d 100644
--- a/lexers/LexDMIS.cxx
+++ b/lexers/LexDMIS.cxx
@@ -56,7 +56,7 @@ class LexerDMIS : public DefaultLexer
virtual ~LexerDMIS(void);
int SCI_METHOD Version() const override {
- return lvOriginal;
+ return lvIdentity;
}
void SCI_METHOD Release() override {
@@ -79,6 +79,10 @@ class LexerDMIS : public DefaultLexer
return -1;
}
+ const char * SCI_METHOD PropertyGet(const char *) override {
+ return NULL;
+ }
+
Sci_Position SCI_METHOD WordListSet(int n, const char *wl) override;
void * SCI_METHOD PrivateCall(int, void *) override {
@@ -129,7 +133,7 @@ void SCI_METHOD LexerDMIS::InitWordListSets(void)
}
-LexerDMIS::LexerDMIS(void) {
+LexerDMIS::LexerDMIS(void) : DefaultLexer("DMIS", SCLEX_DMIS) {
this->InitWordListSets();
this->m_majorWords.Clear();
diff --git a/lexers/LexEDIFACT.cxx b/lexers/LexEDIFACT.cxx
index 9c1de5d77..efc9b5806 100644
--- a/lexers/LexEDIFACT.cxx
+++ b/lexers/LexEDIFACT.cxx
@@ -13,6 +13,8 @@
#include <cstring>
#include <cctype>
+#include <string>
+
#include "ILexer.h"
#include "Scintilla.h"
#include "SciLexer.h"
@@ -35,7 +37,7 @@ public:
int SCI_METHOD Version() const override
{
- return lvOriginal;
+ return lvIdentity;
}
void SCI_METHOD Release() override
{
@@ -73,6 +75,21 @@ public:
}
return -1;
}
+
+ const char * SCI_METHOD PropertyGet(const char *key) override
+ {
+ m_lastPropertyValue = "";
+ if (!strcmp(key, "fold"))
+ {
+ m_lastPropertyValue = m_bFold ? "1" : "0";
+ }
+ if (!strcmp(key, "lexer.edifact.highlight.un.all")) // GetProperty
+ {
+ m_lastPropertyValue = m_bHighlightAllUN ? "1" : "0";
+ }
+ return m_lastPropertyValue.c_str();
+ }
+
const char * SCI_METHOD DescribeWordListSets() override
{
return NULL;
@@ -105,6 +122,8 @@ protected:
char m_chDecimal;
char m_chRelease;
char m_chSegment;
+
+ std::string m_lastPropertyValue;
};
LexerModule lmEDIFACT(SCLEX_EDIFACT, LexerEDIFACT::Factory, "edifact");
@@ -115,7 +134,7 @@ LexerModule lmEDIFACT(SCLEX_EDIFACT, LexerEDIFACT::Factory, "edifact");
///////////////////////////////////////////////////////////////////////////////
-LexerEDIFACT::LexerEDIFACT()
+LexerEDIFACT::LexerEDIFACT() : DefaultLexer("edifact", SCLEX_EDIFACT)
{
m_bFold = false;
m_bHighlightAllUN = false;
diff --git a/lexers/LexHTML.cxx b/lexers/LexHTML.cxx
index 6a769f67b..24e9215da 100644
--- a/lexers/LexHTML.cxx
+++ b/lexers/LexHTML.cxx
@@ -862,7 +862,10 @@ class LexerHTML : public DefaultLexer {
std::set<std::string> nonFoldingTags;
public:
explicit LexerHTML(bool isXml_, bool isPHPScript_) :
- DefaultLexer(isXml_ ? lexicalClassesHTML : lexicalClassesXML,
+ DefaultLexer(
+ isXml_ ? "xml" : (isPHPScript_ ? "phpscript" : "hypertext"),
+ isXml_ ? SCLEX_XML : (isPHPScript_ ? SCLEX_PHPSCRIPT : SCLEX_HTML),
+ isXml_ ? lexicalClassesHTML : lexicalClassesXML,
isXml_ ? ELEMENTS(lexicalClassesHTML) : ELEMENTS(lexicalClassesXML)),
isXml(isXml_),
isPHPScript(isPHPScript_),
@@ -884,6 +887,9 @@ public:
return osHTML.DescribeProperty(name);
}
Sci_Position SCI_METHOD PropertySet(const char *key, const char *val) override;
+ const char * SCI_METHOD PropertyGet(const char *key) override {
+ return osHTML.PropertyGet(key);
+ }
const char *SCI_METHOD DescribeWordListSets() override {
return osHTML.DescribeWordListSets();
}
diff --git a/lexers/LexHaskell.cxx b/lexers/LexHaskell.cxx
index bf8199548..93c670a0c 100644
--- a/lexers/LexHaskell.cxx
+++ b/lexers/LexHaskell.cxx
@@ -390,7 +390,8 @@ class LexerHaskell : public DefaultLexer {
public:
LexerHaskell(bool literate_)
- : literate(literate_)
+ : DefaultLexer(literate_ ? "literatehaskell" : "haskell", literate_ ? SCLEX_LITERATEHASKELL : SCLEX_HASKELL)
+ , literate(literate_)
, firstImportLine(-1)
, firstImportIndent(0)
{}
@@ -401,7 +402,7 @@ public:
}
int SCI_METHOD Version() const override {
- return lvOriginal;
+ return lvIdentity;
}
const char * SCI_METHOD PropertyNames() override {
@@ -418,6 +419,10 @@ public:
Sci_Position SCI_METHOD PropertySet(const char *key, const char *val) override;
+ const char * SCI_METHOD PropertyGet(const char *key) override {
+ return osHaskell.PropertyGet(key);
+ }
+
const char * SCI_METHOD DescribeWordListSets() override {
return osHaskell.DescribeWordListSets();
}
diff --git a/lexers/LexHollywood.cxx b/lexers/LexHollywood.cxx
index e4d6edab9..90be36043 100644
--- a/lexers/LexHollywood.cxx
+++ b/lexers/LexHollywood.cxx
@@ -252,35 +252,39 @@ class LexerHollywood : public DefaultLexer {
OptionSetHollywood osHollywood;
public:
LexerHollywood(int (*CheckFoldPoint_)(char const *), const char * const wordListDescriptions[]) :
+ DefaultLexer("hollywood", SCLEX_HOLLYWOOD),
CheckFoldPoint(CheckFoldPoint_),
osHollywood(wordListDescriptions) {
}
virtual ~LexerHollywood() {
}
- void SCI_METHOD Release() {
+ void SCI_METHOD Release() override {
delete this;
}
- int SCI_METHOD Version() const {
- return lvMetaData;
+ int SCI_METHOD Version() const override {
+ return lvIdentity;
}
- const char * SCI_METHOD PropertyNames() {
+ const char * SCI_METHOD PropertyNames() override {
return osHollywood.PropertyNames();
}
- int SCI_METHOD PropertyType(const char *name) {
+ int SCI_METHOD PropertyType(const char *name) override {
return osHollywood.PropertyType(name);
}
- const char * SCI_METHOD DescribeProperty(const char *name) {
+ const char * SCI_METHOD DescribeProperty(const char *name) override {
return osHollywood.DescribeProperty(name);
}
- Sci_Position SCI_METHOD PropertySet(const char *key, const char *val);
- const char * SCI_METHOD DescribeWordListSets() {
+ Sci_Position SCI_METHOD PropertySet(const char *key, const char *val) override;
+ const char * SCI_METHOD PropertyGet(const char* key) override {
+ return osHollywood.PropertyGet(key);
+ }
+ const char * SCI_METHOD DescribeWordListSets() override {
return osHollywood.DescribeWordListSets();
}
- Sci_Position SCI_METHOD WordListSet(int n, const char *wl);
- void SCI_METHOD Lex(Sci_PositionU startPos, Sci_Position length, int initStyle, IDocument *pAccess);
- void SCI_METHOD Fold(Sci_PositionU startPos, Sci_Position length, int initStyle, IDocument *pAccess);
+ Sci_Position SCI_METHOD WordListSet(int n, const char *wl) override;
+ void SCI_METHOD Lex(Sci_PositionU startPos, Sci_Position length, int initStyle, IDocument *pAccess) override;
+ void SCI_METHOD Fold(Sci_PositionU startPos, Sci_Position length, int initStyle, IDocument *pAccess) override;
- void * SCI_METHOD PrivateCall(int, void *) {
+ void * SCI_METHOD PrivateCall(int, void *) override {
return 0;
}
static ILexer *LexerFactoryHollywood() {
diff --git a/lexers/LexJSON.cxx b/lexers/LexJSON.cxx
index 3c754f888..2f76a103b 100644
--- a/lexers/LexJSON.cxx
+++ b/lexers/LexJSON.cxx
@@ -201,6 +201,7 @@ class LexerJSON : public DefaultLexer {
public:
LexerJSON() :
+ DefaultLexer("json", SCLEX_JSON),
setOperators(CharacterSet::setNone, "[{}]:,"),
setURL(CharacterSet::setAlphaNum, "-._~:/?#[]@!$&'()*+,),="),
setKeywordJSONLD(CharacterSet::setAlpha, ":@"),
@@ -208,7 +209,7 @@ class LexerJSON : public DefaultLexer {
}
virtual ~LexerJSON() {}
int SCI_METHOD Version() const override {
- return lvOriginal;
+ return lvIdentity;
}
void SCI_METHOD Release() override {
delete this;
@@ -228,6 +229,9 @@ class LexerJSON : public DefaultLexer {
}
return -1;
}
+ const char * SCI_METHOD PropertyGet(const char *key) override {
+ return optSetJSON.PropertyGet(key);
+ }
Sci_Position SCI_METHOD WordListSet(int n, const char *wl) override {
WordList *wordListN = 0;
switch (n) {
diff --git a/lexers/LexLaTeX.cxx b/lexers/LexLaTeX.cxx
index 391a36c5c..496d04177 100644
--- a/lexers/LexLaTeX.cxx
+++ b/lexers/LexLaTeX.cxx
@@ -26,6 +26,7 @@
#include "StyleContext.h"
#include "CharacterSet.h"
#include "LexerModule.h"
+#include "DefaultLexer.h"
#include "LexerBase.h"
using namespace Scintilla;
@@ -88,6 +89,14 @@ public:
}
void SCI_METHOD Lex(Sci_PositionU startPos, Sci_Position length, int initStyle, IDocument *pAccess) override;
void SCI_METHOD Fold(Sci_PositionU startPos, Sci_Position length, int initStyle, IDocument *pAccess) override;
+
+ // ILexerWithIdentity methods
+ const char * SCI_METHOD GetName() override {
+ return "latex";
+ }
+ int SCI_METHOD GetIdentifier() override {
+ return SCLEX_LATEX;
+ }
};
static bool latexIsSpecial(int ch) {
diff --git a/lexers/LexNim.cxx b/lexers/LexNim.cxx
index 2152e418c..4562b764c 100644
--- a/lexers/LexNim.cxx
+++ b/lexers/LexNim.cxx
@@ -225,7 +225,7 @@ class LexerNim : public DefaultLexer {
public:
LexerNim() :
- DefaultLexer(lexicalClasses, ELEMENTS(lexicalClasses)),
+ DefaultLexer("nim", SCLEX_NIM, lexicalClasses, ELEMENTS(lexicalClasses)),
setWord(CharacterSet::setAlphaNum, "_", 0x80, true) { }
virtual ~LexerNim() { }
@@ -235,7 +235,7 @@ public:
}
int SCI_METHOD Version() const noexcept override {
- return lvMetaData;
+ return lvIdentity;
}
const char * SCI_METHOD PropertyNames() override {
@@ -252,6 +252,10 @@ public:
Sci_Position SCI_METHOD PropertySet(const char *key, const char *val) override;
+ const char * SCI_METHOD PropertyGet(const char* key) override {
+ return osNim.PropertyGet(key);
+ }
+
const char * SCI_METHOD DescribeWordListSets() override {
return osNim.DescribeWordListSets();
}
diff --git a/lexers/LexPerl.cxx b/lexers/LexPerl.cxx
index a9c81ce51..75c61cb8c 100644
--- a/lexers/LexPerl.cxx
+++ b/lexers/LexPerl.cxx
@@ -423,6 +423,7 @@ class LexerPerl : public DefaultLexer {
OptionSetPerl osPerl;
public:
LexerPerl() :
+ DefaultLexer("perl", SCLEX_PERL),
setWordStart(CharacterSet::setAlpha, "_", 0x80, true),
setWord(CharacterSet::setAlphaNum, "_", 0x80, true),
setSpecialVar(CharacterSet::setNone, "\"$;<>&`'+,./\\%:=~!?@[]"),
@@ -434,7 +435,7 @@ public:
delete this;
}
int SCI_METHOD Version() const override {
- return lvOriginal;
+ return lvIdentity;
}
const char *SCI_METHOD PropertyNames() override {
return osPerl.PropertyNames();
@@ -446,6 +447,9 @@ public:
return osPerl.DescribeProperty(name);
}
Sci_Position SCI_METHOD PropertySet(const char *key, const char *val) override;
+ const char * SCI_METHOD PropertyGet(const char *key) override {
+ return osPerl.PropertyGet(key);
+ }
const char *SCI_METHOD DescribeWordListSets() override {
return osPerl.DescribeWordListSets();
}
diff --git a/lexers/LexProgress.cxx b/lexers/LexProgress.cxx
index 0d27fdcdb..b05b0ba77 100644
--- a/lexers/LexProgress.cxx
+++ b/lexers/LexProgress.cxx
@@ -136,6 +136,7 @@ class LexerABL : public DefaultLexer {
OptionSetABL osABL;
public:
LexerABL() :
+ DefaultLexer("abl", SCLEX_PROGRESS),
setWord(CharacterSet::setAlphaNum, "_", 0x80, true),
setNegationOp(CharacterSet::setNone, "!"),
setArithmethicOp(CharacterSet::setNone, "+-/*%"),
@@ -148,7 +149,7 @@ public:
delete this;
}
int SCI_METHOD Version() const override {
- return lvOriginal;
+ return lvIdentity;
}
const char * SCI_METHOD PropertyNames() override {
return osABL.PropertyNames();
@@ -160,6 +161,9 @@ public:
return osABL.DescribeProperty(name);
}
Sci_Position SCI_METHOD PropertySet(const char *key, const char *val) override ;
+ const char * SCI_METHOD PropertyGet(const char *key) override {
+ return osABL.PropertyGet(key);
+ }
const char * SCI_METHOD DescribeWordListSets() override {
return osABL.DescribeWordListSets();
diff --git a/lexers/LexPython.cxx b/lexers/LexPython.cxx
index 6cfb03b5e..836f76155 100644
--- a/lexers/LexPython.cxx
+++ b/lexers/LexPython.cxx
@@ -344,7 +344,7 @@ class LexerPython : public DefaultLexer {
std::map<Sci_Position, std::vector<SingleFStringExpState> > ftripleStateAtEol;
public:
explicit LexerPython() :
- DefaultLexer(lexicalClasses, ELEMENTS(lexicalClasses)),
+ DefaultLexer("python", SCLEX_PYTHON, lexicalClasses, ELEMENTS(lexicalClasses)),
subStyles(styleSubable, 0x80, 0x40, 0) {
}
~LexerPython() override {
@@ -353,7 +353,7 @@ public:
delete this;
}
int SCI_METHOD Version() const override {
- return lvSubStyles;
+ return lvIdentity;
}
const char *SCI_METHOD PropertyNames() override {
return osPython.PropertyNames();
@@ -365,6 +365,9 @@ public:
return osPython.DescribeProperty(name);
}
Sci_Position SCI_METHOD PropertySet(const char *key, const char *val) override;
+ const char * SCI_METHOD PropertyGet(const char *key) override {
+ return osPython.PropertyGet(key);
+ }
const char *SCI_METHOD DescribeWordListSets() override {
return osPython.DescribeWordListSets();
}
diff --git a/lexers/LexRegistry.cxx b/lexers/LexRegistry.cxx
index bd0ea18f4..71c3535e6 100644
--- a/lexers/LexRegistry.cxx
+++ b/lexers/LexRegistry.cxx
@@ -161,10 +161,10 @@ class LexerRegistry : public DefaultLexer {
}
public:
- LexerRegistry() {}
+ LexerRegistry() : DefaultLexer("registry", SCLEX_REGISTRY) {}
virtual ~LexerRegistry() {}
int SCI_METHOD Version() const override {
- return lvOriginal;
+ return lvIdentity;
}
void SCI_METHOD Release() override {
delete this;
@@ -184,6 +184,10 @@ public:
}
return -1;
}
+ const char * SCI_METHOD PropertyGet(const char *key) override {
+ return optSetRegistry.PropertyGet(key);
+ }
+
Sci_Position SCI_METHOD WordListSet(int, const char *) override {
return -1;
}
diff --git a/lexers/LexRust.cxx b/lexers/LexRust.cxx
index a866203db..f0360b605 100644
--- a/lexers/LexRust.cxx
+++ b/lexers/LexRust.cxx
@@ -120,13 +120,15 @@ class LexerRust : public DefaultLexer {
OptionsRust options;
OptionSetRust osRust;
public:
+ LexerRust() : DefaultLexer("rust", SCLEX_RUST) {
+ }
virtual ~LexerRust() {
}
void SCI_METHOD Release() override {
delete this;
}
int SCI_METHOD Version() const override {
- return lvOriginal;
+ return lvIdentity;
}
const char * SCI_METHOD PropertyNames() override {
return osRust.PropertyNames();
@@ -138,6 +140,9 @@ public:
return osRust.DescribeProperty(name);
}
Sci_Position SCI_METHOD PropertySet(const char *key, const char *val) override;
+ const char * SCI_METHOD PropertyGet(const char *key) override {
+ return osRust.PropertyGet(key);
+ }
const char * SCI_METHOD DescribeWordListSets() override {
return osRust.DescribeWordListSets();
}
diff --git a/lexers/LexSQL.cxx b/lexers/LexSQL.cxx
index 196d07a40..87b852bfd 100644
--- a/lexers/LexSQL.cxx
+++ b/lexers/LexSQL.cxx
@@ -303,12 +303,12 @@ struct OptionSetSQL : public OptionSet<OptionsSQL> {
class LexerSQL : public DefaultLexer {
public :
- LexerSQL() {}
+ LexerSQL() : DefaultLexer("sql", SCLEX_SQL) {}
virtual ~LexerSQL() {}
int SCI_METHOD Version () const override {
- return lvOriginal;
+ return lvIdentity;
}
void SCI_METHOD Release() override {
@@ -334,6 +334,10 @@ public :
return -1;
}
+ const char * SCI_METHOD PropertyGet(const char *key) override {
+ return osSQL.PropertyGet(key);
+ }
+
const char * SCI_METHOD DescribeWordListSets() override {
return osSQL.DescribeWordListSets();
}
diff --git a/lexers/LexVerilog.cxx b/lexers/LexVerilog.cxx
index 3dc2ac1ef..d31425e3f 100644
--- a/lexers/LexVerilog.cxx
+++ b/lexers/LexVerilog.cxx
@@ -216,12 +216,13 @@ class LexerVerilog : public DefaultLexer {
public:
LexerVerilog() :
+ DefaultLexer("verilog", SCLEX_VERILOG),
setWord(CharacterSet::setAlphaNum, "._", 0x80, true),
subStyles(styleSubable, 0x80, 0x40, activeFlag) {
}
virtual ~LexerVerilog() {}
int SCI_METHOD Version() const override {
- return lvSubStyles;
+ return lvIdentity;
}
void SCI_METHOD Release() override {
delete this;
@@ -238,6 +239,9 @@ public:
Sci_Position SCI_METHOD PropertySet(const char* key, const char* val) override {
return osVerilog.PropertySet(&options, key, val);
}
+ const char * SCI_METHOD PropertyGet(const char *key) override {
+ return osVerilog.PropertyGet(key);
+ }
const char* SCI_METHOD DescribeWordListSets() override {
return osVerilog.DescribeWordListSets();
}
diff --git a/lexers/LexVisualProlog.cxx b/lexers/LexVisualProlog.cxx
index 460ecfab8..4aae79332 100644
--- a/lexers/LexVisualProlog.cxx
+++ b/lexers/LexVisualProlog.cxx
@@ -71,7 +71,7 @@ class LexerVisualProlog : public DefaultLexer {
OptionsVisualProlog options;
OptionSetVisualProlog osVisualProlog;
public:
- LexerVisualProlog() {
+ LexerVisualProlog() : DefaultLexer("visualprolog", SCLEX_VISUALPROLOG) {
}
virtual ~LexerVisualProlog() {
}
@@ -79,7 +79,7 @@ public:
delete this;
}
int SCI_METHOD Version() const override {
- return lvOriginal;
+ return lvIdentity;
}
const char * SCI_METHOD PropertyNames() override {
return osVisualProlog.PropertyNames();
@@ -91,6 +91,9 @@ public:
return osVisualProlog.DescribeProperty(name);
}
Sci_Position SCI_METHOD PropertySet(const char *key, const char *val) override;
+ const char * SCI_METHOD PropertyGet(const char *key) override {
+ return osVisualProlog.PropertyGet(key);
+ }
const char * SCI_METHOD DescribeWordListSets() override {
return osVisualProlog.DescribeWordListSets();
}
diff --git a/lexers/LexX12.cxx b/lexers/LexX12.cxx
index 31ef32a96..1b2cdfd18 100644
--- a/lexers/LexX12.cxx
+++ b/lexers/LexX12.cxx
@@ -36,7 +36,7 @@ public:
int SCI_METHOD Version() const override
{
- return lvMetaData;
+ return lvIdentity;
}
void SCI_METHOD Release() override
{
@@ -67,6 +67,9 @@ public:
}
return -1;
}
+ const char * SCI_METHOD PropertyGet(const char *) override {
+ return "";
+ }
const char * SCI_METHOD DescribeWordListSets() override
{
return NULL;
@@ -109,7 +112,7 @@ LexerModule lmX12(SCLEX_X12, LexerX12::Factory, "x12");
///////////////////////////////////////////////////////////////////////////////
-LexerX12::LexerX12()
+LexerX12::LexerX12() : DefaultLexer("x12", SCLEX_X12)
{
m_bFold = false;
m_chSegment[0] = m_chSegment[1] = m_chSegment[2] = m_chElement = m_chSubElement = 0;
diff --git a/lexlib/DefaultLexer.cxx b/lexlib/DefaultLexer.cxx
index 9ca39b44a..e0f61084e 100644
--- a/lexlib/DefaultLexer.cxx
+++ b/lexlib/DefaultLexer.cxx
@@ -24,8 +24,12 @@ using namespace Scintilla;
static const char styleSubable[] = { 0 };
-DefaultLexer::DefaultLexer(const LexicalClass *lexClasses_, size_t nClasses_) :
- lexClasses(lexClasses_), nClasses(nClasses_) {
+DefaultLexer::DefaultLexer(const char *languageName_, int language_,
+ const LexicalClass *lexClasses_, size_t nClasses_) :
+ languageName(languageName_),
+ language(language_),
+ lexClasses(lexClasses_),
+ nClasses(nClasses_) {
}
DefaultLexer::~DefaultLexer() {
@@ -36,7 +40,7 @@ void SCI_METHOD DefaultLexer::Release() {
}
int SCI_METHOD DefaultLexer::Version() const {
- return lvMetaData;
+ return lvIdentity;
}
const char * SCI_METHOD DefaultLexer::PropertyNames() {
@@ -123,3 +127,13 @@ const char * SCI_METHOD DefaultLexer::TagsOfStyle(int style) {
const char * SCI_METHOD DefaultLexer::DescriptionOfStyle(int style) {
return (style < NamedStyles()) ? lexClasses[style].description : "";
}
+
+// ILexerWithIdentity methods
+const char * SCI_METHOD DefaultLexer::GetName() {
+ return languageName;
+}
+
+int SCI_METHOD DefaultLexer::GetIdentifier() {
+ return language;
+}
+
diff --git a/lexlib/DefaultLexer.h b/lexlib/DefaultLexer.h
index 636bd0690..7856a1dd1 100644
--- a/lexlib/DefaultLexer.h
+++ b/lexlib/DefaultLexer.h
@@ -13,11 +13,14 @@
namespace Scintilla {
// A simple lexer with no state
-class DefaultLexer : public ILexerWithMetaData {
+class DefaultLexer : public ILexerWithIdentity {
+ const char *languageName;
+ int language;
const LexicalClass *lexClasses;
size_t nClasses;
public:
- DefaultLexer(const LexicalClass *lexClasses_ = nullptr, size_t nClasses_ = 0);
+ DefaultLexer(const char *languageName_, int language_,
+ const LexicalClass *lexClasses_ = nullptr, size_t nClasses_ = 0);
virtual ~DefaultLexer();
void SCI_METHOD Release() override;
int SCI_METHOD Version() const override;
@@ -44,6 +47,9 @@ public:
const char * SCI_METHOD NameOfStyle(int style) override;
const char * SCI_METHOD TagsOfStyle(int style) override;
const char * SCI_METHOD DescriptionOfStyle(int style) override;
+ // ILexerWithIdentity methods
+ const char * SCI_METHOD GetName() override;
+ int SCI_METHOD GetIdentifier() override;
};
}
diff --git a/lexlib/LexerBase.cxx b/lexlib/LexerBase.cxx
index 655f96be6..97edc621c 100644
--- a/lexlib/LexerBase.cxx
+++ b/lexlib/LexerBase.cxx
@@ -44,7 +44,7 @@ void SCI_METHOD LexerBase::Release() {
}
int SCI_METHOD LexerBase::Version() const {
- return lvMetaData;
+ return lvIdentity;
}
const char * SCI_METHOD LexerBase::PropertyNames() {
@@ -69,6 +69,10 @@ Sci_Position SCI_METHOD LexerBase::PropertySet(const char *key, const char *val)
}
}
+const char *SCI_METHOD LexerBase::PropertyGet(const char *key) {
+ return props.Get(key);
+}
+
const char * SCI_METHOD LexerBase::DescribeWordListSets() {
return "";
}
@@ -139,3 +143,13 @@ const char * SCI_METHOD LexerBase::TagsOfStyle(int style) {
const char * SCI_METHOD LexerBase::DescriptionOfStyle(int style) {
return (style < NamedStyles()) ? lexClasses[style].description : "";
}
+
+// ILexerWithIdentity methods
+
+const char *SCI_METHOD LexerBase::GetName() {
+ return "";
+}
+
+int SCI_METHOD LexerBase::GetIdentifier() {
+ return SCLEX_AUTOMATIC;
+}
diff --git a/lexlib/LexerBase.h b/lexlib/LexerBase.h
index afeaa8038..a023d0fe1 100644
--- a/lexlib/LexerBase.h
+++ b/lexlib/LexerBase.h
@@ -11,7 +11,7 @@
namespace Scintilla {
// A simple lexer with no state
-class LexerBase : public ILexerWithMetaData {
+class LexerBase : public ILexerWithIdentity {
protected:
const LexicalClass *lexClasses;
size_t nClasses;
@@ -46,6 +46,10 @@ public:
const char * SCI_METHOD NameOfStyle(int style) override;
const char * SCI_METHOD TagsOfStyle(int style) override;
const char * SCI_METHOD DescriptionOfStyle(int style) override;
+ // ILexerWithIdentity methods
+ const char * SCI_METHOD GetName() override;
+ int SCI_METHOD GetIdentifier() override;
+ const char *SCI_METHOD PropertyGet(const char *key) override;
};
}
diff --git a/lexlib/LexerSimple.cxx b/lexlib/LexerSimple.cxx
index 0be7d97ca..e69c44ad6 100644
--- a/lexlib/LexerSimple.cxx
+++ b/lexlib/LexerSimple.cxx
@@ -51,3 +51,11 @@ void SCI_METHOD LexerSimple::Fold(Sci_PositionU startPos, Sci_Position lengthDoc
astyler.Flush();
}
}
+
+const char * SCI_METHOD LexerSimple::GetName() {
+ return module->languageName;
+}
+
+int SCI_METHOD LexerSimple::GetIdentifier() {
+ return module->GetLanguage();
+}
diff --git a/lexlib/LexerSimple.h b/lexlib/LexerSimple.h
index 87882eaeb..a2589cf44 100644
--- a/lexlib/LexerSimple.h
+++ b/lexlib/LexerSimple.h
@@ -19,6 +19,9 @@ public:
const char * SCI_METHOD DescribeWordListSets() override;
void SCI_METHOD Lex(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyle, IDocument *pAccess) override;
void SCI_METHOD Fold(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyle, IDocument *pAccess) override;
+ // ILexerWithIdentity methods
+ const char * SCI_METHOD GetName() override;
+ int SCI_METHOD GetIdentifier() override;
};
}