[DEV] the update regexp log and parsing of eol
This commit is contained in:
parent
f941b1a58b
commit
7c41031ee0
@ -64,39 +64,45 @@ const struct etk::convertionTable etk::constConvertionTable[] = {
|
||||
};
|
||||
const int64_t etk::constConvertionTableSize = sizeof(etk::constConvertionTable) / sizeof(struct etk::convertionTable) ;
|
||||
|
||||
std::ostream& etk::displayElem(std::ostream& _os, const std::vector<char32_t>& _data, int64_t _start, int64_t _stop) {
|
||||
_os << ETK_BASH_COLOR_NORMAL;
|
||||
|
||||
std::string etk::createString(const std::vector<char32_t>& _data, int64_t _start, int64_t _stop) {
|
||||
std::string output(ETK_BASH_COLOR_NORMAL);
|
||||
for (int64_t iii=_start; iii<(int64_t)_data.size() && iii<_stop ; iii++) {
|
||||
switch(_data[iii]) {
|
||||
case regexpOpcodePTheseIn: _os <<ETK_BASH_COLOR_RED << (char*)"(" << ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodePTheseOut: _os<<ETK_BASH_COLOR_RED << (char*)")" << ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodeBracketIn: _os<<ETK_BASH_COLOR_YELLOW << (char*)"[" << ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodeBracketOut: _os<<ETK_BASH_COLOR_YELLOW << (char*)"]" << ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodeTo: _os<<ETK_BASH_COLOR_YELLOW << (char*)"-" << ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodeBracetIn: _os<<ETK_BASH_COLOR_GREEN << (char*)"{" << ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodeBracetOut: _os<<ETK_BASH_COLOR_GREEN << (char*)"}" << ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodeStar: _os<<ETK_BASH_COLOR_BLUE << (char*)"*" << ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodeDot: _os<<ETK_BASH_COLOR_BLUE << (char*)"." << ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodeQuestion: _os<<ETK_BASH_COLOR_BLUE << (char*)"?" << ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodePlus: _os<<ETK_BASH_COLOR_BLUE << (char*)"+" << ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodePipe: _os<<ETK_BASH_COLOR_BLUE << (char*)"|" << ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodeNoChar: _os<<ETK_BASH_COLOR_MAGENTA << (char*)"@" << ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodeStartOfLine: _os<<ETK_BASH_COLOR_MAGENTA << (char*)"^" << ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodeEndOfLine: _os<<ETK_BASH_COLOR_MAGENTA << (char*)"$" << ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodeDigit: _os<<ETK_BASH_COLOR_MAGENTA << (char*)"\\d" << ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodeDigitNot: _os<<ETK_BASH_COLOR_MAGENTA << (char*)"\\D" << ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodeLetter: _os<<ETK_BASH_COLOR_MAGENTA << (char*)"\\l" << ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodeLetterNot: _os<<ETK_BASH_COLOR_MAGENTA << (char*)"\\L" << ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodeSpace: _os<<ETK_BASH_COLOR_MAGENTA << (char*)"\\s" << ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodeSpaceNot: _os<<ETK_BASH_COLOR_MAGENTA << (char*)"\\S" << ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodeWord: _os<<ETK_BASH_COLOR_MAGENTA << (char*)"\\w" << ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodeWordNot: _os<<ETK_BASH_COLOR_MAGENTA << (char*)"\\W" << ETK_BASH_COLOR_NORMAL; break;
|
||||
case '\n': _os<<ETK_BASH_COLOR_MAGENTA << (char*)"\\n" << ETK_BASH_COLOR_NORMAL; break;
|
||||
case '\t': _os<<ETK_BASH_COLOR_MAGENTA << (char*)"\\t" << ETK_BASH_COLOR_NORMAL; break;
|
||||
default: _os<< _data[iii]; break;
|
||||
case regexpOpcodePTheseIn: output += std::string(ETK_BASH_COLOR_RED) + (char*)"(" + ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodePTheseOut: output += std::string(ETK_BASH_COLOR_RED) + (char*)")" + ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodeBracketIn: output += std::string(ETK_BASH_COLOR_YELLOW) + (char*)"[" + ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodeBracketOut: output += std::string(ETK_BASH_COLOR_YELLOW) + (char*)"]" + ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodeTo: output += std::string(ETK_BASH_COLOR_YELLOW) + (char*)"-" + ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodeBracetIn: output += std::string(ETK_BASH_COLOR_GREEN) + (char*)"{" + ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodeBracetOut: output += std::string(ETK_BASH_COLOR_GREEN) + (char*)"}" + ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodeStar: output += std::string(ETK_BASH_COLOR_BLUE) + (char*)"*" + ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodeDot: output += std::string(ETK_BASH_COLOR_BLUE) + (char*)"." + ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodeQuestion: output += std::string(ETK_BASH_COLOR_BLUE) + (char*)"?" + ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodePlus: output += std::string(ETK_BASH_COLOR_BLUE) + (char*)"+" + ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodePipe: output += std::string(ETK_BASH_COLOR_BLUE) + (char*)"|" + ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodeNoChar: output += std::string(ETK_BASH_COLOR_MAGENTA) + (char*)"@" + ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodeStartOfLine: output += std::string(ETK_BASH_COLOR_MAGENTA) + (char*)"^" + ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodeEndOfLine: output += std::string(ETK_BASH_COLOR_MAGENTA) + (char*)"$" + ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodeDigit: output += std::string(ETK_BASH_COLOR_MAGENTA) + (char*)"\\d" + ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodeDigitNot: output += std::string(ETK_BASH_COLOR_MAGENTA) + (char*)"\\D" + ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodeLetter: output += std::string(ETK_BASH_COLOR_MAGENTA) + (char*)"\\l" + ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodeLetterNot: output += std::string(ETK_BASH_COLOR_MAGENTA) + (char*)"\\L" + ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodeSpace: output += std::string(ETK_BASH_COLOR_MAGENTA) + (char*)"\\s" + ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodeSpaceNot: output += std::string(ETK_BASH_COLOR_MAGENTA) + (char*)"\\S" + ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodeWord: output += std::string(ETK_BASH_COLOR_MAGENTA) + (char*)"\\w" + ETK_BASH_COLOR_NORMAL; break;
|
||||
case regexpOpcodeWordNot: output += std::string(ETK_BASH_COLOR_MAGENTA) + (char*)"\\W" + ETK_BASH_COLOR_NORMAL; break;
|
||||
case '\n': output += std::string(ETK_BASH_COLOR_MAGENTA) + (char*)"\\n" + ETK_BASH_COLOR_NORMAL; break;
|
||||
case '\t': output += std::string(ETK_BASH_COLOR_MAGENTA) + (char*)"\\t" + ETK_BASH_COLOR_NORMAL; break;
|
||||
default:
|
||||
char plop[10];
|
||||
int8_t nb = u32char::convertUtf8(_data[iii], plop);
|
||||
plop[nb] = '\0';
|
||||
output += plop;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return _os;
|
||||
return output;
|
||||
}
|
||||
|
||||
char * etk::levelSpace(uint32_t _level) {
|
||||
|
119
etk/RegExp.h
119
etk/RegExp.h
@ -93,9 +93,11 @@ normal mode :
|
||||
\@ at the start or the end not in the parsing of element ==> check if \w is not present (other regExp will be <> ...)
|
||||
[anjdi] or [a-gt-j] range
|
||||
. dot [^\x00-\x08\x0A-\x1F\x7F]
|
||||
==> TODO :
|
||||
$ End / Start of line of line ==> ce sera un truc suplémentaire comme le \@
|
||||
==> TODO :
|
||||
^in the [] invertion of the range element
|
||||
Sart of line
|
||||
force regexp to be the shortest.
|
||||
|
||||
multiplicity :
|
||||
* ==> {0, 2147483647}
|
||||
@ -120,7 +122,7 @@ extern const struct convertionTable constConvertionTable[];
|
||||
//! @not-in-doc
|
||||
extern const int64_t constConvertionTableSize;
|
||||
//! @not-in-doc
|
||||
std::ostream& displayElem(std::ostream& _os, const std::vector<char32_t>& _data, int64_t _start=0, int64_t _stop=0x7FFFFFFF);
|
||||
std::string createString(const std::vector<char32_t>& _data, int64_t _start=0, int64_t _stop=0x7FFFFFFF);
|
||||
//! @not-in-doc
|
||||
char * levelSpace(uint32_t _level);
|
||||
//! @not-in-doc
|
||||
@ -186,7 +188,7 @@ template<class CLASS_TYPE> class RegExpNode {
|
||||
* @param[in] level of the node
|
||||
*/
|
||||
virtual void display(uint32_t _level) {
|
||||
TK_INFO("Find NODE : " << levelSpace(_level) << "@???@ {" << getMultMin() << "," << getMultMax() << "} subdata=" /*<< etk::displayElem(m_RegExpData) */);
|
||||
TK_INFO("Find NODE : " << levelSpace(_level) << "@???@ {" << getMultMin() << "," << getMultMax() << "} subdata=" << etk::createString(m_RegExpData) );
|
||||
};
|
||||
/**
|
||||
* @brief Set the multiplicity of this Node.
|
||||
@ -235,7 +237,7 @@ template<class CLASS_TYPE> class RegExpNodeValue : public etk::RegExpNode<CLASS_
|
||||
|
||||
int32_t generate(const std::vector<char32_t>& _data) {
|
||||
RegExpNode<CLASS_TYPE>::m_RegExpData = _data;
|
||||
TK_REG_EXP_DBG_MODE("Request Parse \"Value\" data=" /*<< etk::displayElem(RegExpNode<CLASS_TYPE>::m_RegExpData)*/ );
|
||||
TK_REG_EXP_DBG_MODE("Request Parse \"Value\" data=" << etk::createString(RegExpNode<CLASS_TYPE>::m_RegExpData) );
|
||||
m_data.clear();
|
||||
for (int32_t i=0; i<(int64_t)RegExpNode<CLASS_TYPE>::m_RegExpData.size(); i++) {
|
||||
m_data.push_back(RegExpNode<CLASS_TYPE>::m_RegExpData[i]);
|
||||
@ -289,8 +291,8 @@ template<class CLASS_TYPE> class RegExpNodeValue : public etk::RegExpNode<CLASS_
|
||||
TK_INFO("Find NODE : " << levelSpace(_level) << "@Value@ {"
|
||||
<< RegExpNode<CLASS_TYPE>::m_multipleMin << ","
|
||||
<< RegExpNode<CLASS_TYPE>::m_multipleMax << "} subdata="
|
||||
/*<< etk::displayElem(RegExpNode<CLASS_TYPE>::m_RegExpData)*/
|
||||
<< " data: " /*<< etk::displayElem(m_data)*/ );
|
||||
<< etk::createString(RegExpNode<CLASS_TYPE>::m_RegExpData)
|
||||
<< " data: " << etk::createString(m_data) );
|
||||
};
|
||||
};
|
||||
#undef __class__
|
||||
@ -314,7 +316,7 @@ template<class CLASS_TYPE> class RegExpNodeBracket : public etk::RegExpNode<CLAS
|
||||
~RegExpNodeBracket() { };
|
||||
int32_t generate(const std::vector<char32_t>& _data) {
|
||||
RegExpNode<CLASS_TYPE>::m_RegExpData = _data;
|
||||
TK_REG_EXP_DBG_MODE("Request Parse [...] data=" /*<< etk::displayElem(RegExpNode<CLASS_TYPE>::m_RegExpData)*/ );
|
||||
TK_REG_EXP_DBG_MODE("Request Parse [...] data=" << etk::createString(RegExpNode<CLASS_TYPE>::m_RegExpData) );
|
||||
m_data.clear();
|
||||
|
||||
char32_t lastElement = 'a';
|
||||
@ -352,7 +354,7 @@ template<class CLASS_TYPE> class RegExpNodeBracket : public etk::RegExpNode<CLAS
|
||||
TK_ERROR("No data inside type elemTypeValue");
|
||||
return false;
|
||||
}
|
||||
TK_REG_EXP_DBG_MODE("one of element value List : " /*<< etk::displayElem(m_data)*/);
|
||||
TK_REG_EXP_DBG_MODE("one of element value List : " << etk::createString(m_data));
|
||||
bool tmpFind = true;
|
||||
uint32_t jjj=0;
|
||||
for (jjj=0; jjj<RegExpNode<CLASS_TYPE>::m_multipleMax && tmpFind ==true && jjj < _lenMax; jjj++) {
|
||||
@ -380,8 +382,8 @@ template<class CLASS_TYPE> class RegExpNodeBracket : public etk::RegExpNode<CLAS
|
||||
void display(uint32_t _level) {
|
||||
TK_INFO("Find NODE : " << levelSpace(_level) << "@[...]@ {" << RegExpNode<CLASS_TYPE>::m_multipleMin
|
||||
<< "," << RegExpNode<CLASS_TYPE>::m_multipleMax
|
||||
<< "} subdata=" /*<< etk::displayElem(RegExpNode<CLASS_TYPE>::m_RegExpData)*/
|
||||
<< " data: " /*<< etk::displayElem(m_data)*/ );
|
||||
<< "} subdata=" << etk::createString(RegExpNode<CLASS_TYPE>::m_RegExpData)
|
||||
<< " data: " << etk::createString(m_data) );
|
||||
};
|
||||
};
|
||||
#undef __class__
|
||||
@ -433,7 +435,7 @@ template<class CLASS_TYPE> class RegExpNodeDigit : public etk::RegExpNode<CLASS_
|
||||
TK_INFO("Find NODE : " << levelSpace(_level) << "@Digit@ {"
|
||||
<< RegExpNode<CLASS_TYPE>::m_multipleMin << ","
|
||||
<< RegExpNode<CLASS_TYPE>::m_multipleMax <<
|
||||
"} subdata=" /*<< etk::displayElem(RegExpNode<CLASS_TYPE>::m_RegExpData)*/);
|
||||
"} subdata=" << etk::createString(RegExpNode<CLASS_TYPE>::m_RegExpData));
|
||||
};
|
||||
};
|
||||
#undef __class__
|
||||
@ -478,7 +480,7 @@ template<class CLASS_TYPE> class RegExpNodeDigitNot : public etk::RegExpNode<CLA
|
||||
return false;
|
||||
};
|
||||
void display(uint32_t _level) {
|
||||
TK_INFO("Find NODE : " << levelSpace(_level) << "@DigitNot@ {" << RegExpNode<CLASS_TYPE>::m_multipleMin << "," << RegExpNode<CLASS_TYPE>::m_multipleMax << "} subdata=" /*<< etk::displayElem(RegExpNode<CLASS_TYPE>::m_RegExpData)*/ );
|
||||
TK_INFO("Find NODE : " << levelSpace(_level) << "@DigitNot@ {" << RegExpNode<CLASS_TYPE>::m_multipleMin << "," << RegExpNode<CLASS_TYPE>::m_multipleMax << "} subdata=" << etk::createString(RegExpNode<CLASS_TYPE>::m_RegExpData) );
|
||||
};
|
||||
};
|
||||
#undef __class__
|
||||
@ -528,7 +530,7 @@ template<class CLASS_TYPE> class RegExpNodeLetter : public etk::RegExpNode<CLASS
|
||||
TK_INFO("Find NODE : " << levelSpace(_level) << "@Letter@ {"
|
||||
<< RegExpNode<CLASS_TYPE>::m_multipleMin << ","
|
||||
<< RegExpNode<CLASS_TYPE>::m_multipleMax << "} subdata="
|
||||
/*<< etk::displayElem(RegExpNode<CLASS_TYPE>::m_RegExpData) */);
|
||||
<< etk::createString(RegExpNode<CLASS_TYPE>::m_RegExpData) );
|
||||
};
|
||||
};
|
||||
#undef __class__
|
||||
@ -578,7 +580,7 @@ template<class CLASS_TYPE> class RegExpNodeLetterNot : public etk::RegExpNode<CL
|
||||
TK_INFO("Find NODE : " << levelSpace(_level) << "@LetterNot@ {"
|
||||
<< RegExpNode<CLASS_TYPE>::m_multipleMin << ","
|
||||
<< RegExpNode<CLASS_TYPE>::m_multipleMax << "} subdata="
|
||||
/*<< etk::displayElem(RegExpNode<CLASS_TYPE>::m_RegExpData)*/ );
|
||||
<< etk::createString(RegExpNode<CLASS_TYPE>::m_RegExpData) );
|
||||
};
|
||||
};
|
||||
#undef __class__
|
||||
@ -630,7 +632,7 @@ template<class CLASS_TYPE> class RegExpNodeWhiteSpace : public etk::RegExpNode<C
|
||||
TK_INFO("Find NODE : " << levelSpace(_level) << "@Space@ {"
|
||||
<< RegExpNode<CLASS_TYPE>::m_multipleMin << ","
|
||||
<< RegExpNode<CLASS_TYPE>::m_multipleMax << "} subdata="
|
||||
/*<< etk::displayElem(RegExpNode<CLASS_TYPE>::m_RegExpData)*/ );
|
||||
<< etk::createString(RegExpNode<CLASS_TYPE>::m_RegExpData) );
|
||||
};
|
||||
};
|
||||
#undef __class__
|
||||
@ -682,7 +684,7 @@ template<class CLASS_TYPE> class RegExpNodeWhiteSpaceNot : public etk::RegExpNod
|
||||
TK_INFO("Find NODE : " << levelSpace(_level) << "@SpaceNot@ {"
|
||||
<< RegExpNode<CLASS_TYPE>::m_multipleMin << ","
|
||||
<< RegExpNode<CLASS_TYPE>::m_multipleMax << "} subdata="
|
||||
/*<< etk::displayElem(RegExpNode<CLASS_TYPE>::m_RegExpData) */);
|
||||
<< etk::createString(RegExpNode<CLASS_TYPE>::m_RegExpData) );
|
||||
};
|
||||
};
|
||||
#undef __class__
|
||||
@ -734,7 +736,7 @@ template<class CLASS_TYPE> class RegExpNodeWordChar : public etk::RegExpNode<CLA
|
||||
TK_INFO("Find NODE : " << levelSpace(_level) << "@Word@ {"
|
||||
<< RegExpNode<CLASS_TYPE>::m_multipleMin << ","
|
||||
<< RegExpNode<CLASS_TYPE>::m_multipleMax << "} subdata="
|
||||
/*<< etk::displayElem(RegExpNode<CLASS_TYPE>::m_RegExpData) */);
|
||||
<< etk::createString(RegExpNode<CLASS_TYPE>::m_RegExpData));
|
||||
};
|
||||
};
|
||||
#undef __class__
|
||||
@ -785,7 +787,7 @@ template<class CLASS_TYPE> class RegExpNodeWordCharNot : public etk::RegExpNode<
|
||||
TK_INFO("Find NODE : " << levelSpace(_level) << "@WordNot@ {"
|
||||
<< RegExpNode<CLASS_TYPE>::m_multipleMin << ","
|
||||
<< RegExpNode<CLASS_TYPE>::m_multipleMax << "} subdata="
|
||||
/*<< etk::displayElem(RegExpNode<CLASS_TYPE>::m_RegExpData) */);
|
||||
<< etk::createString(RegExpNode<CLASS_TYPE>::m_RegExpData) );
|
||||
};
|
||||
};
|
||||
#undef __class__
|
||||
@ -838,7 +840,7 @@ template<class CLASS_TYPE> class RegExpNodeDot : public etk::RegExpNode<CLASS_TY
|
||||
TK_INFO("Find NODE : " << levelSpace(_level) << "@.@ {"
|
||||
<< RegExpNode<CLASS_TYPE>::m_multipleMin << ","
|
||||
<< RegExpNode<CLASS_TYPE>::m_multipleMax << "} subdata="
|
||||
/*<< etk::displayElem(RegExpNode<CLASS_TYPE>::m_RegExpData) */);
|
||||
<< etk::createString(RegExpNode<CLASS_TYPE>::m_RegExpData) );
|
||||
};
|
||||
};
|
||||
|
||||
@ -860,15 +862,36 @@ template<class CLASS_TYPE> class RegExpNodeSOL : public etk::RegExpNode<CLASS_TY
|
||||
~RegExpNodeSOL() { };
|
||||
virtual bool parse(const CLASS_TYPE& _data, int64_t _currentPos, int64_t _lenMax, int64_t& _findLen) {
|
||||
_findLen = 0;
|
||||
// TODO : ...
|
||||
TK_INFO("Parse node : SOL{" << RegExpNode<CLASS_TYPE>::m_multipleMin << "," << RegExpNode<CLASS_TYPE>::m_multipleMax << "}");
|
||||
TK_REG_EXP_DBG_MODE("Parse node : SOL{" << RegExpNode<CLASS_TYPE>::m_multipleMin << "," << RegExpNode<CLASS_TYPE>::m_multipleMax << "}");
|
||||
// TODO : is it really what I want ... (maybe next ellement will be requested... (check if previous element is \r or \n
|
||||
bool tmpFind = true;
|
||||
uint32_t jjj;
|
||||
for (jjj=0; jjj<RegExpNode<CLASS_TYPE>::m_multipleMax && tmpFind ==true && jjj < _lenMax; jjj++) {
|
||||
char32_t tmpVal = _data[_currentPos+jjj];
|
||||
// TODO : check if the file is a \r\n file ...
|
||||
if ( tmpVal == 0x0d /* <cr> */
|
||||
|| tmpVal == 0x0A /* <lf> */) {
|
||||
_findLen += 1;
|
||||
} else {
|
||||
tmpFind=false;
|
||||
}
|
||||
}
|
||||
if( jjj>=RegExpNode<CLASS_TYPE>::m_multipleMin
|
||||
&& jjj<=RegExpNode<CLASS_TYPE>::m_multipleMax
|
||||
&& _findLen>0 ) {
|
||||
TK_REG_EXP_DBG_MODE("find " << _findLen);
|
||||
return true;
|
||||
} else if( 0 == RegExpNode<CLASS_TYPE>::m_multipleMin ) {
|
||||
TK_REG_EXP_DBG_MODE("find size=0");
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
void display(uint32_t _level) {
|
||||
TK_INFO("Find NODE : " << levelSpace(_level) << "@SOL@ {"
|
||||
<< RegExpNode<CLASS_TYPE>::m_multipleMin << ","
|
||||
<< RegExpNode<CLASS_TYPE>::m_multipleMax << "} subdata="
|
||||
/*<< etk::displayElem(RegExpNode<CLASS_TYPE>::m_RegExpData) */);
|
||||
<< etk::createString(RegExpNode<CLASS_TYPE>::m_RegExpData) );
|
||||
};
|
||||
};
|
||||
|
||||
@ -890,15 +913,35 @@ template<class CLASS_TYPE> class RegExpNodeEOL : public etk::RegExpNode<CLASS_TY
|
||||
~RegExpNodeEOL() { };
|
||||
virtual bool parse(const CLASS_TYPE& _data, int64_t _currentPos, int64_t _lenMax, int64_t& _findLen) {
|
||||
_findLen = 0;
|
||||
// TODO : ...
|
||||
TK_INFO("Parse node : EOL{" << RegExpNode<CLASS_TYPE>::m_multipleMin << "," << RegExpNode<CLASS_TYPE>::m_multipleMax << "}");
|
||||
TK_REG_EXP_DBG_MODE("Parse node : EOL{" << RegExpNode<CLASS_TYPE>::m_multipleMin << "," << RegExpNode<CLASS_TYPE>::m_multipleMax << "}");
|
||||
bool tmpFind = true;
|
||||
uint32_t jjj;
|
||||
for (jjj=0; jjj<RegExpNode<CLASS_TYPE>::m_multipleMax && tmpFind ==true && jjj < _lenMax; jjj++) {
|
||||
char32_t tmpVal = _data[_currentPos+jjj];
|
||||
// TODO : check if the file is a \r\n file ...
|
||||
if ( tmpVal == 0x0d /* <cr> */
|
||||
|| tmpVal == 0x0A /* <lf> */) {
|
||||
_findLen += 1;
|
||||
} else {
|
||||
tmpFind=false;
|
||||
}
|
||||
}
|
||||
if( jjj>=RegExpNode<CLASS_TYPE>::m_multipleMin
|
||||
&& jjj<=RegExpNode<CLASS_TYPE>::m_multipleMax
|
||||
&& _findLen>0 ) {
|
||||
TK_REG_EXP_DBG_MODE("find " << _findLen);
|
||||
return true;
|
||||
} else if( 0 == RegExpNode<CLASS_TYPE>::m_multipleMin ) {
|
||||
TK_REG_EXP_DBG_MODE("find size=0");
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
void display(uint32_t _level) {
|
||||
TK_INFO("Find NODE : " << levelSpace(_level) << "@EOL@ {"
|
||||
<< RegExpNode<CLASS_TYPE>::m_multipleMin << ","
|
||||
<< RegExpNode<CLASS_TYPE>::m_multipleMax << "} subdata="
|
||||
/*<< etk::displayElem(RegExpNode<CLASS_TYPE>::m_RegExpData) */);
|
||||
<< etk::createString(RegExpNode<CLASS_TYPE>::m_RegExpData) );
|
||||
};
|
||||
};
|
||||
|
||||
@ -931,7 +974,7 @@ template<class CLASS_TYPE> class RegExpNodePTheseElem : public etk::RegExpNode<C
|
||||
~RegExpNodePTheseElem() { };
|
||||
int32_t generate(const std::vector<char32_t>& _data) {
|
||||
RegExpNode<CLASS_TYPE>::m_RegExpData = _data;
|
||||
TK_REG_EXP_DBG_MODE("Request Parse (elem) data=" /*<< etk::displayElem(RegExpNode<CLASS_TYPE>::m_RegExpData)*/ );
|
||||
TK_REG_EXP_DBG_MODE("Request Parse (elem) data=" << etk::createString(RegExpNode<CLASS_TYPE>::m_RegExpData) );
|
||||
int64_t pos = 0;
|
||||
int64_t elementSize = 0;
|
||||
std::vector<char32_t> tmpData;
|
||||
@ -1085,7 +1128,7 @@ template<class CLASS_TYPE> class RegExpNodePTheseElem : public etk::RegExpNode<C
|
||||
TK_INFO("Find NODE : " << levelSpace(_level) << "@(Elem)@ {"
|
||||
<< RegExpNode<CLASS_TYPE>::m_multipleMin << ","
|
||||
<< RegExpNode<CLASS_TYPE>::m_multipleMax << "} subdata="
|
||||
/*<< etk::displayElem(RegExpNode<CLASS_TYPE>::m_RegExpData) */);
|
||||
<< etk::createString(RegExpNode<CLASS_TYPE>::m_RegExpData) );
|
||||
for(int64_t iii=0; iii<(int64_t)m_subNode.size(); iii++) {
|
||||
m_subNode[iii]->display(_level+1);
|
||||
}
|
||||
@ -1132,7 +1175,7 @@ template<class CLASS_TYPE> class RegExpNodePThese : public etk::RegExpNode<CLASS
|
||||
~RegExpNodePThese() { }
|
||||
int32_t generate(const std::vector<char32_t>& _data) {
|
||||
RegExpNode<CLASS_TYPE>::m_RegExpData = _data;
|
||||
TK_REG_EXP_DBG_MODE("Request Parse (...) data=" /*<< etk::displayElem(RegExpNode<CLASS_TYPE>::m_RegExpData)*/ );
|
||||
TK_REG_EXP_DBG_MODE("Request Parse (...) data=" << etk::createString(RegExpNode<CLASS_TYPE>::m_RegExpData) );
|
||||
//Find all the '|' in the string (and at the good level ...)
|
||||
int64_t pos = 0;
|
||||
int32_t elementSize = getLenOfPTheseElem(RegExpNode<CLASS_TYPE>::m_RegExpData, pos);
|
||||
@ -1148,7 +1191,7 @@ template<class CLASS_TYPE> class RegExpNodePThese : public etk::RegExpNode<CLASS
|
||||
// add to the subnode list :
|
||||
m_subNode.push_back(myElem);
|
||||
pos += elementSize+1;
|
||||
TK_REG_EXP_DBG_MODE("plop=" /*<< etk::displayElem(RegExpNode<CLASS_TYPE>::m_RegExpData, pos, pos+1)*/ );
|
||||
TK_REG_EXP_DBG_MODE("plop=" << etk::createString(RegExpNode<CLASS_TYPE>::m_RegExpData, pos, pos+1) );
|
||||
elementSize = getLenOfPTheseElem(RegExpNode<CLASS_TYPE>::m_RegExpData, pos);
|
||||
TK_REG_EXP_DBG_MODE("find " << elementSize << " elements");
|
||||
}
|
||||
@ -1192,12 +1235,12 @@ template<class CLASS_TYPE> class RegExpNodePThese : public etk::RegExpNode<CLASS
|
||||
|
||||
void display(uint32_t _level) {
|
||||
if (9999 <= _level) {
|
||||
TK_INFO("regExp :" /*<< etk::displayElem(RegExpNode<CLASS_TYPE>::m_RegExpData) */);
|
||||
TK_INFO("regExp :" << etk::createString(RegExpNode<CLASS_TYPE>::m_RegExpData) );
|
||||
} else {
|
||||
TK_INFO("Find NODE : " << levelSpace(_level) << "@(...)@ {"
|
||||
<< RegExpNode<CLASS_TYPE>::m_multipleMin << ","
|
||||
<< RegExpNode<CLASS_TYPE>::m_multipleMax << "} subdata="
|
||||
/*<< etk::displayElem(RegExpNode<CLASS_TYPE>::m_RegExpData) */);
|
||||
<< etk::createString(RegExpNode<CLASS_TYPE>::m_RegExpData) );
|
||||
for(int64_t i=0; i<(int64_t)m_subNode.size(); i++) {
|
||||
m_subNode[i]->display(_level+1);
|
||||
}
|
||||
@ -1207,7 +1250,14 @@ template<class CLASS_TYPE> class RegExpNodePThese : public etk::RegExpNode<CLASS
|
||||
* @brief Just display the regExp in color ...
|
||||
*/
|
||||
void drawColoredRegEx() {
|
||||
TK_INFO("regExp :" /*<< etk::displayElem(RegExpNode<CLASS_TYPE>::m_RegExpData)*/ );
|
||||
TK_INFO("regExp :" << etk::createString(RegExpNode<CLASS_TYPE>::m_RegExpData) );
|
||||
}
|
||||
/**
|
||||
* @brief get the string represented the regexp (colored)
|
||||
* @return Regexp string
|
||||
*/
|
||||
std::string getColoredRegEx() {
|
||||
return etk::createString(RegExpNode<CLASS_TYPE>::m_RegExpData);
|
||||
}
|
||||
};
|
||||
#undef __class__
|
||||
@ -1412,7 +1462,7 @@ template<class CLASS_TYPE> class RegExp {
|
||||
return;
|
||||
}
|
||||
|
||||
//TK_REG_EXP_DBG_MODE("Main element :" /*<< etk::displayElem(tmpExp)*/ );
|
||||
//TK_REG_EXP_DBG_MODE("Main element :" << etk::createString(tmpExp) );
|
||||
if ( tmpExp.size()>0
|
||||
&& tmpExp[0] == regexpOpcodeNoChar)
|
||||
{
|
||||
@ -1647,8 +1697,7 @@ template<class CLASS_TYPE> class RegExp {
|
||||
* @return The decorated string
|
||||
*/
|
||||
std::string getRegExDecorated() {
|
||||
// TODO : do it...
|
||||
return "";
|
||||
return m_exprRootNode.getColoredRegEx();
|
||||
}
|
||||
private:
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user