diff --git a/data/languages/bash/highlight.xml b/data/languages/bash/highlight.xml
index dd5b0ea..5da44b7 100644
--- a/data/languages/bash/highlight.xml
+++ b/data/languages/bash/highlight.xml
@@ -12,11 +12,11 @@
doubleQuoteText
- "(.|\\[\\"])*?"
+ "(.|\\[\\"])*?"
doubleQuoteText
- '(.|\\[\\'])*?'
+ '(.|\\[\\'])*?'
diff --git a/data/languages/boo/highlight.xml b/data/languages/boo/highlight.xml
index a9c72a1..d7fbc8c 100644
--- a/data/languages/boo/highlight.xml
+++ b/data/languages/boo/highlight.xml
@@ -16,11 +16,11 @@
doubleQuoteText
- "(.|\\[\\"])*?$
+ "(.|\\[\\"])*?$
doubleQuoteText
- \b'(.|\\[\\'])*?$
+ \b'(.|\\[\\'])*?$
diff --git a/data/languages/c/highlight.xml b/data/languages/c/highlight.xml
index 9292d5c..e033d48 100644
--- a/data/languages/c/highlight.xml
+++ b/data/languages/c/highlight.xml
@@ -5,14 +5,12 @@
commentDoxygen
/\*(\*|!)(.|\r|\n)*?\*/
-
-
- SYNTAX_ERROR
- /\*[ \t]*TODO :(.|\r|\n)*?(\*/|\0)
+ doxyparse
comment
/\*(.|\r|\n)*?(\*/|\0)
+ TODO
SYNTAX_ERROR
@@ -33,14 +31,12 @@
commentDoxygen
//!.*
-
-
- SYNTAX_ERROR
- //[ \t]*TODO[ \t]*:.*
+ doxyparse
comment
//.*
+ TODO
doubleQuoteText
@@ -66,7 +62,7 @@
type
- \b(std::(vector|(u16|u32|w)?string|codecvt_utf(16|8_utf16|8)+|complex|iterator(_traits)?|tuple(_element|_size)?|pair))\b
+ \bstd::[\w:]*\b
storageKeyword
@@ -95,7 +91,6 @@
inputFunction
\b_\w+\b
- false
functionName
@@ -108,11 +103,30 @@
macro
([A-Z]|_){4,500}
- doxElem
SYNTAX_ERROR
- '|"
+ '|"
+
+
+ doxygen-key
+ (@|\\)[\t ]*\w+
+
+
+ doxygen-in-out
+ \[(in|in,out|out)\]
+
+
+ inputFunction
+ \b_\w+\b
+
+
+
+
+ SYNTAX_ERROR
+ TODO[ \t]*:.*
+
+
diff --git a/data/languages/cmake/highlight.xml b/data/languages/cmake/highlight.xml
index 2c1d492..082bb91 100644
--- a/data/languages/cmake/highlight.xml
+++ b/data/languages/cmake/highlight.xml
@@ -17,7 +17,7 @@
doubleQuoteText
- "(.|\\[\\"])*?"
+ "(.|\\[\\"])*?"
diff --git a/data/languages/in/highlight.xml b/data/languages/in/highlight.xml
index 33925ff..5ce5728 100644
--- a/data/languages/in/highlight.xml
+++ b/data/languages/in/highlight.xml
@@ -8,11 +8,11 @@
doubleQuoteText
- "(.|\\[\\"])*?$
+ "(.|\\[\\"])*?$
doubleQuoteText
- '(.|\\[\\'])*?$
+ '(.|\\[\\'])*?$
diff --git a/data/languages/java/highlight.xml b/data/languages/java/highlight.xml
index c19f128..3e27502 100644
--- a/data/languages/java/highlight.xml
+++ b/data/languages/java/highlight.xml
@@ -24,11 +24,11 @@
doubleQuoteText
- "(.|\\[\\"])*?"
+ "(.|\\[\\"])*?"
doubleQuoteText
- '(.|\\[\\'])*?'
+ '(.|\\[\\'])*?'
diff --git a/data/languages/json/highlight.xml b/data/languages/json/highlight.xml
index a0a9601..d48b7fa 100644
--- a/data/languages/json/highlight.xml
+++ b/data/languages/json/highlight.xml
@@ -4,7 +4,7 @@
doubleQuoteText
- "(.|\\[\\"])*?"
+ "(.|\\[\\"])*?"
@@ -18,7 +18,7 @@
functionName
- ([a-zA-Z0-9]|-|_)*
+ ([a-zA-Z0-9]|-|_)+
number
diff --git a/data/languages/lua/highlight.xml b/data/languages/lua/highlight.xml
index ea42b8c..606e7df 100644
--- a/data/languages/lua/highlight.xml
+++ b/data/languages/lua/highlight.xml
@@ -16,11 +16,11 @@
doubleQuoteText
- "(.|\\[\\"])*?"
+ "(.|\\[\\"])*?"
doubleQuoteText
- '(.|\\[\\'])*?'
+ '(.|\\[\\'])*?'
diff --git a/data/languages/makefile/highlight.xml b/data/languages/makefile/highlight.xml
index 8e19015..2416009 100644
--- a/data/languages/makefile/highlight.xml
+++ b/data/languages/makefile/highlight.xml
@@ -9,11 +9,11 @@
doubleQuoteText
- "(.|\\[\\"])*?"
+ "(.|\\[\\"])*?"
doubleQuoteText
- '(.|\\[\\'])*?'
+ '(.|\\[\\'])*?'
diff --git a/data/languages/matlab/highlight.xml b/data/languages/matlab/highlight.xml
index 50bf419..410ba87 100644
--- a/data/languages/matlab/highlight.xml
+++ b/data/languages/matlab/highlight.xml
@@ -12,11 +12,11 @@
doubleQuoteText
- ".*?($|")
+ ".*?($|")
doubleQuoteText
- '.*?($|')
+ '.*?($|')
preprocesseur
diff --git a/data/languages/php/highlight.xml b/data/languages/php/highlight.xml
index 26b2c73..592d664 100644
--- a/data/languages/php/highlight.xml
+++ b/data/languages/php/highlight.xml
@@ -20,11 +20,11 @@
doubleQuoteText
- "(.|\\[\\"])*?"
+ "(.|\\[\\"])*?"
doubleQuoteText
- '(.|\\[\\'])*?'
+ '(.|\\[\\'])*?'
diff --git a/data/languages/python/highlight.xml b/data/languages/python/highlight.xml
index c2d7301..d406528 100644
--- a/data/languages/python/highlight.xml
+++ b/data/languages/python/highlight.xml
@@ -4,7 +4,7 @@
comment
- """(.|\r|\n)*?"""
+ """(.|\r|\n)*?"""
comment
@@ -12,7 +12,7 @@
SYNTAX_ERROR
- ("""|''')(.|\n|\r)*
+ ("""|''')(.|\n|\r)*
commentDoxygen
@@ -24,11 +24,11 @@
doubleQuoteText
- "(.|\\[\\"])*?"
+ "(.|\\[\\"])*?"
doubleQuoteText
- '((\\[\\'])|.)*?'
+ '((\\[\\'])|.)*?'
@@ -70,7 +70,7 @@
SYNTAX_ERROR
- '|"
+ '|"
diff --git a/data/languages/xml/highlight.xml b/data/languages/xml/highlight.xml
index a46ea63..654799e 100644
--- a/data/languages/xml/highlight.xml
+++ b/data/languages/xml/highlight.xml
@@ -4,32 +4,74 @@
comment
- ]]>
-
+
+ -<!\-\-(.|\r|\n)*?\-\->
-
- doubleQuoteText
- "(.|\r|\n|\\\\|\\")*?"
-
-
- doubleQuoteText
- \b'(.|\r|\n)*?('|\n)
-
-
+
macro
- ]]>
+
+ <!\[CDATA\[(.|\r|\n)*?\]\]>
+
+
+ functionName
+
+ </[ \t]*\w+?[ \t]*>
+
+
+ SYNTAX_ERROR
+
+ </(.|\n|\r)*?>
+
+
+ normal
+
+ <(.|\n|\r)*?>
+ parseInsideBalise
-
- error
- ]]>
-
+
+ commonDefine
+
+ &(gt|lt|amp|apos|quot);
-
- functionName
- |>)?]]>
+
+ error
+ >|<|&|'|"
+
+
+ error
+
+ <\?\w*|\?>
+
+
+ functionName
+
+ <[ \t]*[0-9a-zA-Z_]+
+
+
+ functionName
+
+ /?>
+
+
+ doubleQuoteText
+ "(.|\r|\n|\\\\|\\")*?"
+
+
+ doubleQuoteText
+ \b'(.|\r|\n)*?('|\n)
+
+
+ boolean
+ =
+
+
+ keyword
+ \w+
+
+
diff --git a/data/theme/colorBlack/textViewer.json b/data/theme/colorBlack/textViewer.json
index f08a525..65bdc66 100644
--- a/data/theme/colorBlack/textViewer.json
+++ b/data/theme/colorBlack/textViewer.json
@@ -27,5 +27,8 @@
{ name:"functionName", foreground:"#24d1e0", bold:true},
{ name:"TestResultOK", foreground:"#000000", background:"#00FF00", bold:true},
{ name:"TestResultERROR", FG:"#000000", background:"#FF0000", bold:true}
+
+ { name:"doxygen-key", foreground:"#dc3700", bold:true, italic:false},
+ { name:"doxygen-in-out", foreground:"#dc7000", bold:true, italic:false},
]
}
diff --git a/data/theme/colorWhite/textViewer.json b/data/theme/colorWhite/textViewer.json
index dd0b0eb..a67cfc1 100644
--- a/data/theme/colorWhite/textViewer.json
+++ b/data/theme/colorWhite/textViewer.json
@@ -9,6 +9,7 @@
{ name:"SelectedText", foreground:"#292929", background:"#009ce7"},
{ name:"error", foreground:"#FF0000"},
{ name:"doubleQuoteText", foreground:"#008e00"},
+
{ name:"type", foreground:"#376d0a", bold:true},
{ name:"memberClass", foreground:"#7c5406", bold:true},
{ name:"inputFunction", foreground:"#B80000", bold:true, italic:true},
@@ -26,6 +27,9 @@
{ name:"functionName", foreground:"#09857e", bold:true},
{ name:"TestResultOK", foreground:"#000000", background:"#009c00", bold:true},
{ name:"TestResultERROR", foreground:"#000000", background:"#c20000", bold:true}
+
+ { name:"doxygen-key", foreground:"#dc3700", bold:true, italic:false},
+ { name:"doxygen-in-out", foreground:"#dc7000", bold:true, italic:false},
]
}
diff --git a/sources/appl/Buffer.cpp b/sources/appl/Buffer.cpp
index f80b8fd..225c5b6 100644
--- a/sources/appl/Buffer.cpp
+++ b/sources/appl/Buffer.cpp
@@ -938,22 +938,24 @@ void appl::Buffer::hightlightGenerateLines(appl::DisplayHLData& _MData, const ap
" start=" << HLStartPos <<
" stop=" << m_HLDataPass1[kkk].start );
m_highlight->parse2(HLStartPos,
- m_HLDataPass1[kkk].start,
- _MData.HLData,
- m_data);
+ m_HLDataPass1[kkk].start,
+ _MData.HLData,
+ m_data);
} // else : nothing to do ...
} else {
APPL_VERBOSE(" == > (empty section 2 ) kkk=" << kkk <<
" start=" << m_HLDataPass1[kkk-1].stop <<
" stop=" << m_HLDataPass1[kkk].start );
m_highlight->parse2(m_HLDataPass1[kkk-1].stop,
- m_HLDataPass1[kkk].start,
- _MData.HLData,
- m_data);
+ m_HLDataPass1[kkk].start,
+ _MData.HLData,
+ m_data);
}
// under section :
- //APPL_DEBUG(" == > (under section ) k="< (under section ) kkk="< (empty section 4 ) kkk=" << kkk <<
" start=0 stop=" << HLStop );
m_highlight->parse2(0,
- HLStop,
- _MData.HLData,
- m_data);
+ HLStop,
+ _MData.HLData,
+ m_data);
}
}
/*
diff --git a/sources/appl/Highlight.cpp b/sources/appl/Highlight.cpp
index 3afa75f..7121a50 100644
--- a/sources/appl/Highlight.cpp
+++ b/sources/appl/Highlight.cpp
@@ -25,18 +25,6 @@
//#define HL2_DEBUG APPL_INFO
#define HL2_DEBUG APPL_VERBOSE
-void appl::Highlight::parseRules(exml::Element* _child,
- std::vector>& _mListPatern,
- int32_t _level,
- bool forceMaximize) {
- // Create the patern ...
- HighlightPattern *myPattern = new HighlightPattern(m_paintingProperties);
- // parse under Element
- myPattern->parseRules(_child, _level, forceMaximize);
- // add element in the list
- _mListPatern.push_back(std::unique_ptr(myPattern));
-}
-
appl::Highlight::Highlight() {
addObjectType("appl::Highlight");
}
@@ -84,7 +72,8 @@ void appl::Highlight::init(const std::string& _xmlFilename, const std::string& _
APPL_ERROR("(l "<< passChild->getPos() << ") node not suported : \""<< passChild->getValue() << "\" must be [rule]" );
continue;
}
- parseRules(passChild, m_listHighlightPass1, level1++);
+ // Create the patern in list
+ m_listHighlightPass1.push_back(HighlightPattern(m_paintingProperties, passChild, level1++));
}
} else if (child->getValue() == "pass2") {
// get sub Nodes ...
@@ -97,7 +86,30 @@ void appl::Highlight::init(const std::string& _xmlFilename, const std::string& _
APPL_ERROR("(l "<< passChild->getPos() << ") node not suported : \""<< passChild->getValue() << "\" must be [rule]" );
continue;
}
- parseRules(passChild, m_listHighlightPass2, level2++, true);
+ // Create the patern in list
+ m_listHighlightPass2.push_back(HighlightPattern(m_paintingProperties, passChild, level2++));
+ }
+ } else if (child->getValue() == "pass") {
+ std::string attributeName = child->getAttribute("name");
+ if (attributeName == "") {
+ APPL_ERROR("Can not parse an element pass with no attribute name ... ligne=" << child->getPos());
+ continue;
+ }
+ m_listHighlightNamed.insert(std::pair>(attributeName, std::vector()));
+ auto it = m_listHighlightNamed.find(attributeName);
+ int32_t level3=0;
+ // get sub Nodes ...
+ for(size_t jjj=0; jjj< child->size(); jjj++) {
+ exml::Element* passChild = child->getElement(jjj);
+ if (passChild == nullptr) {
+ continue;
+ }
+ if (passChild->getValue() != "rule") {
+ APPL_ERROR("(l "<< passChild->getPos() << ") node not suported : \""<< passChild->getValue() << "\" must be [rule]" );
+ continue;
+ }
+ // add element in the list
+ it->second.push_back(HighlightPattern(m_paintingProperties, passChild, level3++));
}
} else {
APPL_ERROR("(l "<< child->getPos() << ") node not suported : \""<< child->getValue() << "\" must be [ext,pass1,pass2]" );
@@ -167,13 +179,20 @@ void appl::Highlight::display() {
}
// display all elements
for (auto &it : m_listHighlightPass1) {
- APPL_INFO(" Pass 1 : " << it->getName() );
- //m_listHighlightPass1[iii]->display();
+ APPL_INFO(" Pass 1 : " << it.getName() );
+ //it.display();
}
- // display all elements
for (auto &it : m_listHighlightPass2) {
- APPL_INFO(" pass 2 : " << it->getName() );
- //m_listHighlightPass2[iii]->display();
+ APPL_INFO(" pass 2 : " << it.getName() );
+ //it.display();
+ }
+ for (auto &it : m_listHighlightNamed) {
+ APPL_INFO(" pass * : " << it.first << " : ");
+ for (auto &it2 : it.second) {
+ APPL_INFO(" " << it2.getName() );
+ //it.display();
+ }
+ //it.display();
}
}
@@ -201,17 +220,17 @@ void appl::Highlight::parse(int64_t _start,
enum resultFind ret = HLP_FIND_OK;
/*
if (_buffer[elementStart] == '\n') {
- HL_DEBUG("Parse HL id=" << jjj << " position search: (" << elementStart << "," << _stop << ") input start='\\n' " << m_listHighlightPass1[jjj]->getPaternString());
+ HL_DEBUG("Parse HL id=" << jjj << " position search: (" << elementStart << "," << _stop << ") input start='\\n' " << m_listHighlightPass1[jjj].getPaternString());
} else {
- HL_DEBUG("Parse HL id=" << jjj << " position search: (" << elementStart << "," << _stop << ") input start='" << _buffer[elementStart] << "' " << m_listHighlightPass1[jjj]->getPaternString());
+ HL_DEBUG("Parse HL id=" << jjj << " position search: (" << elementStart << "," << _stop << ") input start='" << _buffer[elementStart] << "' " << m_listHighlightPass1[jjj].getPaternString());
}
*/
// Stop the search to the end (to get the end of the pattern)
- ret = m_listHighlightPass1[jjj]->find(elementStart, _buffer.size(), resultat, _buffer);
+ ret = m_listHighlightPass1[jjj].find(elementStart, _buffer.size(), resultat, _buffer);
if (HLP_FIND_ERROR != ret) {
int64_t currentTimeEnd = ewol::getTime();
int64_t deltaTime = currentTimeEnd - currentTime;
- HL_DEBUG("Find Pattern in the Buffer : time=" << (float)deltaTime/1000.0f << " ms (" << resultat.start << "," << resultat.stop << ") startPos=" << elementStart << " for=" << m_listHighlightPass1[jjj]->getPaternString());
+ HL_DEBUG("Find Pattern in the Buffer : time=" << (float)deltaTime/1000.0f << " ms (" << resultat.start << "," << resultat.stop << ") startPos=" << elementStart << " for=" << m_listHighlightPass1[jjj].getPaternString());
// remove element in the current List where the current Element have a end inside the next...
int64_t kkk=_addingPos;
while(kkk < (int64_t)_metaData.size() ) {
@@ -256,7 +275,10 @@ void appl::Highlight::parse(int64_t _start,
/**
* @brief second pass of the hightlight
- *
+ * @param[in] _start Start searching data
+ * @param[in] _stop End searching data
+ * @param[out] _metaData Output list of all find patern
+ * @param[in] _buffer buffer where we need to search data
*/
void appl::Highlight::parse2(int64_t _start,
int64_t _stop,
@@ -278,9 +300,9 @@ void appl::Highlight::parse2(int64_t _start,
enum resultFind ret;
HL2_DEBUG("Parse HL id=" << jjj << " position search: (" <<
elementStart << "," << elementStop << ") in='"
- << _buffer[elementStart] << "' " << m_listHighlightPass2[jjj]->getPaternString());
+ << _buffer[elementStart] << "' " << m_listHighlightPass2[jjj].getPaternString());
// Stop the search to the end (to get the end of the pattern)
- ret = m_listHighlightPass2[jjj]->find(elementStart, elementStop, resultat, _buffer);
+ ret = m_listHighlightPass2[jjj].find(elementStart, elementStop, resultat, _buffer);
if (ret != HLP_FIND_ERROR) {
_metaData.push_back(resultat);
elementStart = resultat.stop-1;
@@ -291,3 +313,46 @@ void appl::Highlight::parse2(int64_t _start,
elementStart++;
}
}
+
+/**
+ * @brief second pass of the hightlight pattern (have found something before)
+ * @param[in] _upper upper pattern to find the data
+ * @param[out] _metaData Output list of all find patern
+ * @param[in] _buffer buffer where we need to search data
+ */
+void appl::Highlight::parseSubElement(const appl::HighlightInfo& _upper,
+ std::vector &_metaData,
+ std::string &_buffer) {
+ if (_upper.patern->getSubPatternName().size() == 0) {
+ return;
+ }
+ HL2_DEBUG("Parse element 0 => " << m_listHighlightNamed.size() <<
+ " == > position search: (" << _upper.start << "," << _upper.stop << ")" );
+ int64_t elementStart = _upper.start;
+ int64_t elementStop = _upper.stop;
+ appl::HighlightInfo resultat;
+ // Find element in the list:
+ auto itHL = m_listHighlightNamed.find(_upper.patern->getSubPatternName());
+ if (itHL == m_listHighlightNamed.end()) {
+ APPL_ERROR("Patern does not exist : " << _upper.patern->getSubPatternName() << " note : Removing it ...");
+ _upper.patern->setSubPatternName("");
+ return;
+ }
+
+ while (elementStart < elementStop) {
+ //try to fond the HL in ALL of we have
+ for (auto &it : itHL->second){
+ enum resultFind ret;
+ HL2_DEBUG("Parse HL position search: (" << elementStart << "," << elementStop << ") in='" << _buffer[elementStart] << "' " << it.getPaternString());
+ // Stop the search to the end (to get the end of the pattern)
+ ret = it.find(elementStart, elementStop, resultat, _buffer);
+ if (ret != HLP_FIND_ERROR) {
+ _metaData.push_back(resultat);
+ elementStart = resultat.stop-1;
+ break;
+ }
+ }
+ // Go to the next element (and search again ...).
+ elementStart++;
+ }
+}
\ No newline at end of file
diff --git a/sources/appl/Highlight.h b/sources/appl/Highlight.h
index b4975d0..3f9966d 100644
--- a/sources/appl/Highlight.h
+++ b/sources/appl/Highlight.h
@@ -19,7 +19,7 @@ namespace appl {
int32_t start;
int32_t stop;
bool notEnded;
- appl::HighlightPattern* patern; // pointer on class :
+ appl::HighlightPattern* patern;
};
};
@@ -44,6 +44,10 @@ namespace appl {
private:
std::string m_typeName; //!< descriptive string type like "C/C++"
public:
+ /**
+ * @brief Get the Type of the Hightlight like c++/Bash/...
+ * @return descriptive string
+ */
const std::string& getTypeName() {
return m_typeName;
}
@@ -53,22 +57,22 @@ namespace appl {
void display();
void parse(int64_t _start,
int64_t _stop,
- std::vector &_metaData,
+ std::vector& _metaData,
int64_t _addingPos,
- std::string &_buffer);
+ std::string& _buffer);
void parse2(int64_t _start,
int64_t _stop,
- std::vector &_metaData,
- std::string &_buffer);
+ std::vector& _metaData,
+ std::string& _buffer);
+ void parseSubElement(const appl::HighlightInfo& _upper,
+ std::vector& _metaData,
+ std::string &_buffer);
private:
- void parseRules(exml::Element* _child,
- std::vector> &_mListPatern,
- int32_t _level,
- bool forceMaximize=false);
std::string m_styleName; //!< curent style name (like "c++" or "c" or "script Bash")
std::vector m_listExtentions; //!< List of possible extention for this high-light, like : ".c", ".cpp", ".h"
- std::vector> m_listHighlightPass1; //!< List of ALL hightlight modules (pass 1 == > when we load and wride data on the buffer)
- std::vector> m_listHighlightPass2; //!< List of ALL hightlight modules (pass 2 == > When we display the buffer( only the display area (100 lines)) )
+ std::vector m_listHighlightPass1; //!< List of ALL hightlight modules (pass 1 == > when we load and wride data on the buffer)
+ std::vector m_listHighlightPass2; //!< List of ALL hightlight modules (pass 2 == > When we display the buffer( only the display area (100 lines)) )
+ std::map> m_listHighlightNamed; //!< list of all sub partern to parse...
public: // herited function :
virtual void updateContext() {
// no upfate to do ...
diff --git a/sources/appl/HighlightPattern.cpp b/sources/appl/HighlightPattern.cpp
index 679b231..e465916 100644
--- a/sources/appl/HighlightPattern.cpp
+++ b/sources/appl/HighlightPattern.cpp
@@ -13,13 +13,24 @@
#undef __class__
#define __class__ "HighlightPattern"
-appl::HighlightPattern::HighlightPattern(const std::shared_ptr& _glyphPainting) :
+appl::HighlightPattern::HighlightPattern(const std::shared_ptr& _glyphPainting, exml::Element* _child, int32_t _level) :
m_glyphPainting(_glyphPainting),
m_paternName(""),
m_hasParsingError(true),
m_regexValue(""),
m_regExp(),
m_colorName(""),
+ m_level(0) {
+ parseRules(_child, _level);
+}
+
+appl::HighlightPattern::HighlightPattern() :
+ m_glyphPainting(),
+ m_paternName(""),
+ m_hasParsingError(true),
+ m_regexValue(""),
+ m_regExp(),
+ m_colorName(""),
m_level(0) {
}
@@ -28,7 +39,7 @@ appl::HighlightPattern::~HighlightPattern() {
}
-void appl::HighlightPattern::setPatern(const std::string& _regExp, bool forceMaximize) {
+void appl::HighlightPattern::setPatern(const std::string& _regExp) {
m_regexValue = _regExp;
APPL_DEBUG("parse regex='" << _regExp << "'");
try {
@@ -39,13 +50,12 @@ void appl::HighlightPattern::setPatern(const std::string& _regExp, bool forceMax
m_hasParsingError = true;
APPL_ERROR("can not parse regex : '" << e.what() << "' for : " << _regExp);
}
- //m_regExp.setMaximize(forceMaximize);
}
std::string appl::HighlightPattern::getPaternString() {
return m_regexValue;
}
-void appl::HighlightPattern::setColorGlyph(std::string& _colorName) {
+void appl::HighlightPattern::setColorGlyph(const std::string& _colorName) {
m_colorName = _colorName;
m_colorId = m_glyphPainting->request(m_colorName);
APPL_VERBOSE("Resuest color name '" << m_colorName << "' => id=" << m_colorId);
@@ -58,17 +68,17 @@ void appl::HighlightPattern::display() {
APPL_INFO(" == > regex '" << m_regexValue << "'");
}
-void appl::HighlightPattern::parseRules(exml::Element* _child, int32_t _level, bool forceMaximize) {
+void appl::HighlightPattern::parseRules(exml::Element* _child, int32_t _level) {
//--------------------------------------------------------------------------------------------
/*
preprocesseur
#
- false
+ namexxx
*/
//--------------------------------------------------------------------------------------------
- // process attribute
+ // process attribute
std::string highLightName = _child->getAttribute("name");
std::string myEdnDataTmp = "???";
if (highLightName.size()!=0) {
@@ -82,21 +92,23 @@ void appl::HighlightPattern::parseRules(exml::Element* _child, int32_t _level, b
std::string myData = xChild->getText();
if (myData.size() != 0) {
//APPL_INFO(PFX"(l %d) node fined : %s=\"%s\"", xChild->Row(), xChild->Value() , myData);
- std::string myEdnData = myData;
- setColorGlyph(myEdnData);
+ setColorGlyph(myData);
}
}
- xChild = _child->getNamed("max");
- if (nullptr != xChild) {
- forceMaximize = etk::string_to_bool(xChild->getText());
- }
xChild = _child->getNamed("regex");
if (nullptr != xChild) {
std::string myData = xChild->getText();
if (myData.size() != 0) {
//APPL_INFO(PFX"(l %d) node fined : %s=\"%s\"", xChild->Row(), xChild->Value() , myData);
- std::string myEdnData = myData;
- setPatern(myEdnData, forceMaximize);
+ setPatern(myData);
+ }
+ }
+ xChild = _child->getNamed("sub");
+ if (nullptr != xChild) {
+ std::string myData = xChild->getText();
+ if (myData.size() != 0) {
+ //APPL_INFO(PFX"(l %d) node fined : %s=\"%s\"", xChild->Row(), xChild->Value() , myData);
+ setSubPatternName(myData);
}
}
}
@@ -136,7 +148,7 @@ enum resultFind appl::HighlightPattern::find(int32_t _start,
if (_start>0) {
flags |= std::regex_constants::match_prev_avail;
}
- std::regex_search(_buffer.begin() + _start, _buffer.end(), resultMatch, m_regExp, flags);
+ std::regex_search(_buffer.begin() + _start, _buffer.begin() + _stop, resultMatch, m_regExp, flags);
if (resultMatch.size() > 0) {
_resultat.start = std::distance(_buffer.begin(), resultMatch[0].first);
_resultat.stop = std::distance(_buffer.begin(), resultMatch[0].second);
diff --git a/sources/appl/HighlightPattern.h b/sources/appl/HighlightPattern.h
index 59db43e..369c254 100644
--- a/sources/appl/HighlightPattern.h
+++ b/sources/appl/HighlightPattern.h
@@ -32,29 +32,39 @@ namespace appl {
std::shared_ptr m_glyphPainting;
public:
// Constructeur
- HighlightPattern(const std::shared_ptr& _glyphPainting);
+ HighlightPattern();
+ HighlightPattern(const std::shared_ptr& _glyphPainting, exml::Element* _child, int32_t _level);
virtual ~HighlightPattern();
private:
std::string m_paternName; //!< Current style name (like "c++" or "c" or "script Bash")
public:
- void setName(std::string& _name) {
+ void setName(const std::string& _name) {
m_paternName = _name;
};
- std::string getName() {
+ const std::string& getName() {
return m_paternName;
};
+ private:
+ std::string m_paternSubName; //!< Sub patern name if needed
+ public:
+ void setSubPatternName(const std::string& _name) {
+ m_paternSubName = _name;
+ };
+ const std::string& getSubPatternName() {
+ return m_paternSubName;
+ };
private:
bool m_hasParsingError;
std::string m_regexValue;
std::regex m_regExp; //!< Start of Regular expression
public:
- void setPatern(const std::string& _regExp, bool forceMaximize=false);
+ void setPatern(const std::string& _regExp);
std::string getPaternString();
private:
std::string m_colorName; //!< Current color name
int32_t m_colorId; //!< Id of the the glyph painting
public:
- void setColorGlyph(std::string& _colorName);
+ void setColorGlyph(const std::string& _colorName);
const appl::GlyphDecoration& getColorGlyph() {
return (*m_glyphPainting)[m_colorId];
};
@@ -86,7 +96,7 @@ namespace appl {
appl::HighlightInfo& _resultat,
const std::string& _buffer);
- void parseRules(exml::Element* _child, int32_t _level, bool forceMaximize=false);
+ void parseRules(exml::Element* _child, int32_t _level);
};
};