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); }; };