[DEV] base rework regexp

This commit is contained in:
Edouard DUPIN 2014-07-18 21:58:08 +02:00
parent 7b04c193ca
commit 6a757c8a36
2 changed files with 397 additions and 401 deletions

View File

@ -11,61 +11,61 @@
const struct etk::convertionTable etk::constConvertionTable[] = { const struct etk::convertionTable etk::regexp::constConvertionTable[] = {
// haveBackSlash, inputValue, newValue // haveBackSlash, inputValue, newValue
{ false , '(' , 0 , regexpOpcodePTheseIn}, { false , '(' , 0 , etk::regexpOpcodePTheseIn},
{ true , '(' , '(' , regexpOpcodeError}, { true , '(' , '(' , etk::regexpOpcodeError},
{ false , ')' , 0 , regexpOpcodePTheseOut}, { false , ')' , 0 , etk::regexpOpcodePTheseOut},
{ true , ')' , ')' , regexpOpcodeError}, { true , ')' , ')' , etk::regexpOpcodeError},
{ false , '[' , 0 , regexpOpcodeBracketIn}, { false , '[' , 0 , etk::regexpOpcodeBracketIn},
{ true , '[' , '[' , regexpOpcodeError}, { true , '[' , '[' , etk::regexpOpcodeError},
{ false , ']' , 0 , regexpOpcodeBracketOut}, { false , ']' , 0 , etk::regexpOpcodeBracketOut},
{ true , ']' , ']' , regexpOpcodeError}, { true , ']' , ']' , etk::regexpOpcodeError},
{ false , '{' , 0 , regexpOpcodeBracetIn}, { false , '{' , 0 , etk::regexpOpcodeBracetIn},
{ true , '{' , '{' , regexpOpcodeError}, { true , '{' , '{' , etk::regexpOpcodeError},
{ false , '}' , 0 , regexpOpcodeBracetOut}, { false , '}' , 0 , etk::regexpOpcodeBracetOut},
{ true , '}' , '}' , regexpOpcodeError}, { true , '}' , '}' , etk::regexpOpcodeError},
{ false , '-' , 0 , regexpOpcodeTo}, { false , '-' , 0 , etk::regexpOpcodeTo},
{ true , '-' , '-' , regexpOpcodeError}, { true , '-' , '-' , etk::regexpOpcodeError},
{ false , '*' , 0 , regexpOpcodeStar}, { false , '*' , 0 , etk::regexpOpcodeStar},
{ true , '*' , '*' , regexpOpcodeError}, { true , '*' , '*' , etk::regexpOpcodeError},
{ false , '.' , 0 , regexpOpcodeDot}, { false , '.' , 0 , etk::regexpOpcodeDot},
{ true , '.' , '.' , regexpOpcodeError}, { true , '.' , '.' , etk::regexpOpcodeError},
{ false , '?' , 0 , regexpOpcodeQuestion}, { false , '?' , 0 , etk::regexpOpcodeQuestion},
{ true , '?' , '?' , regexpOpcodeError}, { true , '?' , '?' , etk::regexpOpcodeError},
{ false , '+' , 0 , regexpOpcodePlus}, { false , '+' , 0 , etk::regexpOpcodePlus},
{ true , '+' , '+' , regexpOpcodeError}, { true , '+' , '+' , etk::regexpOpcodeError},
{ false , '|' , 0 , regexpOpcodePipe}, { false , '|' , 0 , etk::regexpOpcodePipe},
{ true , '|' , '|' , regexpOpcodeError}, { true , '|' , '|' , etk::regexpOpcodeError},
{ false , '^' , 0 , regexpOpcodeStartOfLine}, { false , '^' , 0 , etk::regexpOpcodeStartOfLine},
{ true , '^' , '^' , regexpOpcodeError}, { true , '^' , '^' , etk::regexpOpcodeError},
{ false , '$' , 0 , regexpOpcodeEndOfLine}, { false , '$' , 0 , etk::regexpOpcodeEndOfLine},
{ true , '$' , '$' , regexpOpcodeError}, { true , '$' , '$' , etk::regexpOpcodeError},
{ true , 'd' , 0 , regexpOpcodeDigit}, { true , 'd' , 0 , etk::regexpOpcodeDigit},
{ true , 'D' , 0 , regexpOpcodeDigitNot}, { true , 'D' , 0 , etk::regexpOpcodeDigitNot},
{ true , 'l' , 0 , regexpOpcodeLetter}, { true , 'l' , 0 , etk::regexpOpcodeLetter},
{ true , 'L' , 0 , regexpOpcodeLetterNot}, { true , 'L' , 0 , etk::regexpOpcodeLetterNot},
{ true , 's' , 0 , regexpOpcodeSpace}, { true , 's' , 0 , etk::regexpOpcodeSpace},
{ true , 'S' , 0 , regexpOpcodeSpaceNot}, { true , 'S' , 0 , etk::regexpOpcodeSpaceNot},
{ true , 'w' , 0 , regexpOpcodeWord}, { true , 'w' , 0 , etk::regexpOpcodeWord},
{ true , 'W' , 0 , regexpOpcodeWordNot}, { true , 'W' , 0 , etk::regexpOpcodeWordNot},
{ true , 'a' , '\a', regexpOpcodeError}, { true , 'a' , '\a', etk::regexpOpcodeError},
{ true , 'b' , '\b', regexpOpcodeError}, { true , 'b' , '\b', etk::regexpOpcodeError},
{ true , 'e' , 0x1B, regexpOpcodeError}, // Escape character <Esc> { true , 'e' , 0x1B, etk::regexpOpcodeError}, // Escape character <Esc>
{ true , 'f' , '\f', regexpOpcodeError}, { true , 'f' , '\f', etk::regexpOpcodeError},
{ true , 'n' , '\n', regexpOpcodeError}, { true , 'n' , '\n', etk::regexpOpcodeError},
{ true , 'r' , '\r', regexpOpcodeError}, { true , 'r' , '\r', etk::regexpOpcodeError},
{ true , 't' , '\t', regexpOpcodeError}, { true , 't' , '\t', etk::regexpOpcodeError},
{ true , 'v' , '\v', regexpOpcodeError}, { true , 'v' , '\v', etk::regexpOpcodeError},
{ true , '\\' , '\\', regexpOpcodeError}, { true , '\\' , '\\', etk::regexpOpcodeError},
{ true , '&' , '&' , regexpOpcodeError}, { true , '&' , '&' , etk::regexpOpcodeError},
{ true , '0' , '\0', regexpOpcodeError}, { true , '0' , '\0', etk::regexpOpcodeError},
{ true , '@' , 0 , regexpOpcodeNoChar}, { true , '@' , 0 , etk::regexpOpcodeNoChar},
}; };
const int64_t etk::constConvertionTableSize = sizeof(etk::constConvertionTable) / sizeof(struct etk::convertionTable) ; const int64_t etk::regexp::constConvertionTableSize = sizeof(etk::regexp::constConvertionTable) / sizeof(struct etk::convertionTable) ;
std::string etk::createString(const std::vector<char32_t>& _data, int64_t _start, int64_t _stop) { std::string etk::regexp::createString(const std::vector<char32_t>& _data, int64_t _start, int64_t _stop) {
std::string output(ETK_BASH_COLOR_NORMAL); std::string output(ETK_BASH_COLOR_NORMAL);
for (int64_t iii=_start; iii<(int64_t)_data.size() && iii<_stop ; iii++) { for (int64_t iii=_start; iii<(int64_t)_data.size() && iii<_stop ; iii++) {
switch(_data[iii]) { switch(_data[iii]) {
@ -105,7 +105,7 @@ std::string etk::createString(const std::vector<char32_t>& _data, int64_t _start
return output; return output;
} }
char * etk::levelSpace(uint32_t _level) { char* etk::regexp::levelSpace(uint32_t _level) {
switch(_level) { switch(_level) {
case 0: return (char*)""; case 0: return (char*)"";
case 1: return (char*)" "; case 1: return (char*)" ";
@ -129,7 +129,7 @@ char * etk::levelSpace(uint32_t _level) {
} }
int64_t etk::getLenOfPTheseElem(const std::vector<char32_t>& _data, int64_t _startPos) { int64_t etk::regexp::getLenOfPTheseElem(const std::vector<char32_t>& _data, int64_t _startPos) {
if (_startPos>=(int64_t)_data.size()){ if (_startPos>=(int64_t)_data.size()){
return 0; return 0;
} }
@ -169,7 +169,7 @@ int64_t etk::getLenOfPTheseElem(const std::vector<char32_t>& _data, int64_t _sta
return pos - _startPos; return pos - _startPos;
} }
int64_t etk::getLenOfPThese(const std::vector<char32_t>& _data, int64_t _startPos) { int64_t etk::regexp::getLenOfPThese(const std::vector<char32_t>& _data, int64_t _startPos) {
int64_t pos = _startPos; int64_t pos = _startPos;
int32_t nbOpen = 0; int32_t nbOpen = 0;
// special case of the (...) or | ==> we search '|' or ')' // special case of the (...) or | ==> we search '|' or ')'
@ -210,7 +210,7 @@ int64_t etk::getLenOfPThese(const std::vector<char32_t>& _data, int64_t _startPo
} }
int64_t etk::getLenOfBracket(const std::vector<char32_t>& _data, int64_t _startPos) { int64_t etk::regexp::getLenOfBracket(const std::vector<char32_t>& _data, int64_t _startPos) {
int64_t pos = _startPos; int64_t pos = _startPos;
// special case of the (...) or | ==> we search '|' or ')' // special case of the (...) or | ==> we search '|' or ')'
if(_data[pos]==regexpOpcodeBracketOut) { if(_data[pos]==regexpOpcodeBracketOut) {
@ -243,7 +243,7 @@ int64_t etk::getLenOfBracket(const std::vector<char32_t>& _data, int64_t _startP
} }
int64_t etk::getLenOfBrace(const std::vector<char32_t>& _data, int64_t _startPos) { int64_t etk::regexp::getLenOfBrace(const std::vector<char32_t>& _data, int64_t _startPos) {
int32_t pos = _startPos; int32_t pos = _startPos;
// special case of the (...) or | ==> we search '|' or ')' // special case of the (...) or | ==> we search '|' or ')'
if(_data[pos]==regexpOpcodeBracetOut) { if(_data[pos]==regexpOpcodeBracetOut) {
@ -277,7 +277,7 @@ int64_t etk::getLenOfBrace(const std::vector<char32_t>& _data, int64_t _startPos
} }
int64_t etk::getLenOfNormal(const std::vector<char32_t>& _data, int64_t _startPos) { int64_t etk::regexp::getLenOfNormal(const std::vector<char32_t>& _data, int64_t _startPos) {
int64_t pos = _startPos; int64_t pos = _startPos;
// find size ... // find size ...
while (pos < (int64_t)_data.size() ) { while (pos < (int64_t)_data.size() ) {
@ -326,7 +326,7 @@ int64_t etk::getLenOfNormal(const std::vector<char32_t>& _data, int64_t _startPo
} }
bool etk::parseBrace(const std::vector<char32_t>& _data, uint32_t& _min, uint32_t& _max) bool etk::regexp::parseBrace(const std::vector<char32_t>& _data, uint32_t& _min, uint32_t& _max)
{ {
//TK_INFO("parse {...} in "; DisplayElem(data); ); //TK_INFO("parse {...} in "; DisplayElem(data); );
int64_t k=0; int64_t k=0;

File diff suppressed because it is too large Load Diff