[DEV] correct english

This commit is contained in:
Edouard DUPIN 2017-08-22 21:20:43 +02:00
parent 4b8e0397f7
commit ffff4f5a27
19 changed files with 1475 additions and 1245 deletions

233
.prude
View File

@ -1,4 +1,235 @@
# This file is for prude parsing (must start with .prude_* or project file .prude)
# some possibiliries:
# - Check the compleate name with case sensitive [a-zA-Z0-9_] ==> to ignore it. format +ABC_def
# - not case-sensitive separate word camel-case and snake-case (set direct word)
# - with # simple comment
# - start with ! for global parameter
etk etk
obj obj
rgb rgb
rgba rgba
+TK_PRINT
+TK_ERROR
+TK_WARNING
+TK_INFO
+TK_DEBUG
+TK_VERBOSE
+TK_CRITICAL
+TK_ASSERT
+TK_HIDDEN
+TK_REG_DEBUG
+TK_REG_DEBUG_2
+TK_REG_DEBUG_3
+TK_CHECK_INOUT
+ELOG_BASE
+TK_TODO
+_obj
+anjdi
+abghjkh
+abgh
+gt
+getURegEx
# Add generic color
+Peru
+peru
+NavajoWhite
+navajowhite
+IndianRed
+indianred
+Gainsboro
+gainsboro
+Darkorange
+darkorange
+Cornsilk
+cornsilk
+AliceBlue
+aliceblue
# color in a description:
+F6780FFF
+FEDCBA98
+rrggbb
+rrggbbaa
+color:aliceBlue
+color:antiqueWhite
+color:aqua
+color:aquamarine
+color:azure
+color:beige
+color:bisque
+color:black
+color:blanchedAlmond
+color:blue
+color:blueViolet
+color:brown
+color:burlyWood
+color:cadetBlue
+color:chartreuse
+color:chocolate
+color:coral
+color:cornflowerBlue
+color:cornsilk
+color:crimson
+color:cyan
+color:darkBlue
+color:darkCyan
+color:darkGoldenRod
+color:darkGray
+color:darkGrey
+color:darkGreen
+color:darkKhaki
+color:darkMagenta
+color:darkOliveGreen
+color:darkorange
+color:darkOrchid
+color:darkRed
+color:darkSalmon
+color:darkSeaGreen
+color:darkSlateBlue
+color:darkSlateGray
+color:darkSlateGrey
+color:darkTurquoise
+color:darkViolet
+color:deepPink
+color:deepSkyBlue
+color:dimGray
+color:dimGrey
+color:dodgerBlue
+color:fireBrick
+color:floralWhite
+color:forestGreen
+color:fuchsia
+color:gainsboro
+color:ghostWhite
+color:gold
+color:goldenRod
+color:gray
+color:grey
+color:green
+color:greenYellow
+color:honeyDew
+color:hotPink
+color:indianRed
+color:indigo
+color:ivory
+color:khaki
+color:lavender
+color:lavenderBlush
+color:lawnGreen
+color:lemonChiffon
+color:lightBlue
+color:lightCoral
+color:lightCyan
+color:lightGoldenRodYellow
+color:lightGray
+color:lightGrey
+color:lightGreen
+color:lightPink
+color:lightSalmon
+color:lightSeaGreen
+color:lightSkyBlue
+color:lightSlateGray
+color:lightSlateGrey
+color:lightSteelBlue
+color:lightYellow
+color:lime
+color:limeGreen
+color:linen
+color:magenta
+color:maroon
+color:mediumAquaMarine
+color:mediumBlue
+color:mediumOrchid
+color:mediumPurple
+color:mediumSeaGreen
+color:mediumSlateBlue
+color:mediumSpringGreen
+color:mediumTurquoise
+color:mediumVioletRed
+color:midnightBlue
+color:mintCream
+color:mistyRose
+color:moccasin
+color:navajoWhite
+color:navy
+color:oldLace
+color:olive
+color:oliveDrab
+color:orange
+color:orangeRed
+color:orchid
+color:paleGoldenRod
+color:paleGreen
+color:paleTurquoise
+color:paleVioletRed
+color:papayaWhip
+color:peachPuff
+color:peru
+color:pink
+color:plum
+color:powderBlue
+color:purple
+color:red
+color:rosyBrown
+color:royalBlue
+color:saddleBrown
+color:salmon
+color:sandyBrown
+color:seaGreen
+color:seaShell
+color:sienna
+color:silver
+color:skyBlue
+color:slateBlue
+color:slateGray
+color:slateGrey
+color:snow
+color:springGreen
+color:steelBlue
+color:tan
+color:teal
+color:thistle
+color:tomato
+color:turquoise
+color:violet
+color:wheat
+color:white
+color:whiteSmoke
+color:yellow
+color:yellowGreen
+parseStringStartWithRGBGen
+parseStringStartWithRGBUnsigned32
+parseStringStartWithRGBUnsigned16
+parseStringStartWithRGBUnsigned8
+navajoWhite
+indianRed
+aliceBlue
# specific regex:
pthese
+string_to_int8_t
+string_to_int16_t
+string_to_int32_t
+string_to_int64_t
+string_to_uint8_t
+string_to_uint16_t
+string_to_uint32_t
+string_to_uint64_t
+string_to_bool
std
+u32char
+BS
+ESC
+stod
+stof
+stoi
+stol
+stold
+stoll
+stoul
+stoull
+tolower
+toupper
+srand
+irand
+frand

View File

@ -12,7 +12,7 @@
// minimum gapSize when allocated // minimum gapSize when allocated
#define GAP_SIZE_MIN (80) #define GAP_SIZE_MIN (80)
// maximum gap that is automaticly resize // maximum gap that is automatically resize
#define GAP_SIZE_MAX (GAP_SIZE_MIN*4) #define GAP_SIZE_MAX (GAP_SIZE_MIN*4)
/* /*
@ -43,7 +43,7 @@ namespace etk {
*/ */
class Buffer { class Buffer {
private: private:
int8_t* m_data; //!< pointer on the curetn table of Data int8_t* m_data; //!< pointer on the current table of Data
int32_t m_allocated; //!< Current allocated size int32_t m_allocated; //!< Current allocated size
// empty part of the buffer data // empty part of the buffer data
int32_t m_gapStart; //!< points to the first character of the gap int32_t m_gapStart; //!< points to the first character of the gap
@ -90,8 +90,8 @@ namespace etk {
/** /**
* @brief Store the selected data in the requested file. * @brief Store the selected data in the requested file.
* @param[in] _file Name of the file that might be written. * @param[in] _file Name of the file that might be written.
* @return true if the data corectly stored * @return true if the data correctly stored
* @return false if an error occured * @return false if an error occurred
*/ */
bool dumpIn(const std::string& _file) { bool dumpIn(const std::string& _file) {
etk::FSNode file(_file); etk::FSNode file(_file);
@ -106,10 +106,10 @@ namespace etk {
return ret; return ret;
} }
/** /**
* @brief Load data fron a selected file name. * @brief Load data from a selected file name.
* @param[in] _file Name of the file to store buffer data. * @param[in] _file Name of the file to store buffer data.
* @return true if the data corectly stored * @return true if the data correctly stored
* @return false if an error occured * @return false if an error occurred
*/ */
bool dumpFrom(const std::string& _file) { bool dumpFrom(const std::string& _file) {
etk::FSNode file(_file); etk::FSNode file(_file);
@ -126,13 +126,13 @@ namespace etk {
changeAllocation(length + GAP_SIZE_MIN); changeAllocation(length + GAP_SIZE_MIN);
// insert Data // insert Data
int32_t nbReadData = file.fileRead(&m_data[GAP_SIZE_MIN], sizeof(int8_t), length); int32_t nbReadData = file.fileRead(&m_data[GAP_SIZE_MIN], sizeof(int8_t), length);
TK_INFO("load data : filesize=" << length << ", readData=" << nbReadData); TK_INFO("load data : fileSize=" << length << ", readData=" << nbReadData);
// check ERROR // check ERROR
if (nbReadData != length) { if (nbReadData != length) {
TK_ERROR("load data pb : filesize=" << length << ", readData=" << nbReadData); TK_ERROR("load data error: fileSize=" << length << ", readData=" << nbReadData);
ret = false; ret = false;
} }
// set the gapsize at the fd ... // set the gap size at the buffer ...
m_gapStart = 0; m_gapStart = 0;
m_gapEnd = GAP_SIZE_MIN; m_gapEnd = GAP_SIZE_MIN;
file.fileClose(); file.fileClose();
@ -142,7 +142,7 @@ namespace etk {
/** /**
* @brief Re-copy operator * @brief Re-copy operator
* @param[in] _obj Buffer that might be copy * @param[in] _obj Buffer that might be copy
* @return reference on the curent copied Buffer * @return reference on the current copied Buffer
*/ */
etk::Buffer& operator=(const etk::Buffer& _obj) { etk::Buffer& operator=(const etk::Buffer& _obj) {
if( this == &_obj ) {// avoid copy to itself if( this == &_obj ) {// avoid copy to itself
@ -161,7 +161,7 @@ namespace etk {
TK_ASSERT(NULL!=m_data, "Error in data allocation"); TK_ASSERT(NULL!=m_data, "Error in data allocation");
// Copy all data ... // Copy all data ...
memcpy(m_data, _obj.m_data, m_allocated * sizeof(int8_t) ); memcpy(m_data, _obj.m_data, m_allocated * sizeof(int8_t) );
// Return the curent pointer // Return the current pointer
return *this; return *this;
} }
/** /**
@ -170,7 +170,7 @@ namespace etk {
* @return Element at the request pos. * @return Element at the request pos.
*/ */
int8_t operator[] (int32_t _pos) const { int8_t operator[] (int32_t _pos) const {
TK_ASSERT(0 <= _pos || _pos < size(), "try to read an element non existing"); TK_ASSERT(0 <= _pos || _pos < size(), "try to read an element not existing");
if (_pos < m_gapStart) { if (_pos < m_gapStart) {
return m_data[_pos]; return m_data[_pos];
} }
@ -183,7 +183,7 @@ namespace etk {
* @return Reference on the Element * @return Reference on the Element
*/ */
int8_t& get(int32_t _pos) const { int8_t& get(int32_t _pos) const {
TK_ASSERT(0 <= _pos || _pos < size(), "try to read an element non existing"); TK_ASSERT(0 <= _pos || _pos < size(), "try to read an element not existing");
if (_pos < m_gapStart) { if (_pos < m_gapStart) {
return m_data[_pos]; return m_data[_pos];
} }
@ -245,7 +245,7 @@ namespace etk {
} else if( _pos == m_gapStart } else if( _pos == m_gapStart
&& _pos == m_gapEnd-1 ) && _pos == m_gapEnd-1 )
{ {
// mothing to do ... // Nothing to do ...
} else { } else {
if (gapMove(_pos) == false) { if (gapMove(_pos) == false) {
return; return;
@ -414,22 +414,22 @@ namespace etk {
* @param[in] _newSize Minimum number of element needed * @param[in] _newSize Minimum number of element needed
*/ */
void changeAllocation(int32_t _newSize) { void changeAllocation(int32_t _newSize) {
// set the minimal size to 1 // Set the minimal size to 1
if(_newSize <= 0) { if(_newSize <= 0) {
_newSize = 1; _newSize = 1;
} }
// set the size with the corect chose type : // Set the size with the correct chose type:
if (_newSize == m_allocated) { if (_newSize == m_allocated) {
return; return;
} }
//TODO : use new and delete and multiple of power of 2. //TODO : use new and delete and multiple of power of 2.
TK_DEBUG("Change Allocation : " << m_allocated << " ==> " << _newSize); TK_DEBUG("Change Allocation : " << m_allocated << " ==> " << _newSize);
// check if something is allocated : // Check if something is allocated:
if (m_data == NULL) { if (m_data == NULL) {
// no data allocated ==> request an allocation (might be the first) // no data allocated ==> request an allocation (might be the first)
m_data = (int8_t *)malloc( _newSize * sizeof(int8_t) ); m_data = (int8_t *)malloc( _newSize * sizeof(int8_t) );
} else { } else {
// move datas // move data
m_data = (int8_t *)realloc( m_data, _newSize* sizeof(int8_t) ); m_data = (int8_t *)realloc( m_data, _newSize* sizeof(int8_t) );
} }
// Check result with assert : // Check result with assert :
@ -440,7 +440,7 @@ namespace etk {
/** /**
* @brief Move the current gap at an other position * @brief Move the current gap at an other position
* @param[in] _pos Position of the new Gap. * @param[in] _pos Position of the new Gap.
* @return false The operation can not be proccesed. * @return false The operation can not be processed.
* @return true The operation done correctly. * @return true The operation done correctly.
*/ */
bool gapMove(int32_t _pos) { bool gapMove(int32_t _pos) {
@ -478,7 +478,7 @@ namespace etk {
return true; return true;
} else { } else {
if (_newGapLen > gapSize() ) { if (_newGapLen > gapSize() ) {
// reallocation // Change allocation size.
changeAllocation( previousSize + _newGapLen); changeAllocation( previousSize + _newGapLen);
} }
// move Data // move Data
@ -499,7 +499,7 @@ namespace etk {
memmove(&m_data[m_gapStart + _newGapLen], &m_data[m_gapEnd], previousSize - m_gapStart); memmove(&m_data[m_gapStart + _newGapLen], &m_data[m_gapEnd], previousSize - m_gapStart);
} }
if (_newGapLen < gapSize() ) { if (_newGapLen < gapSize() ) {
// rellocation // Change allocation size.
changeAllocation(previousSize + _newGapLen); changeAllocation(previousSize + _newGapLen);
} }
} }

View File

@ -13,13 +13,14 @@
#include <sstream> #include <sstream>
#include <stdexcept> #include <stdexcept>
typedef struct { class ColorList {
const char * colorName; public:
etk::Color<> color; const char * colorName;
} colorList_ts; etk::Color<> color;
};
static int32_t getColorSize(); static int32_t getColorSize();
static const colorList_ts* getColorList(); static const ColorList* getColorList();
etk::Color<uint8_t, 4> etk::parseStringStartWithSharp(const std::string& _input) { etk::Color<uint8_t, 4> etk::parseStringStartWithSharp(const std::string& _input) {
TK_VERBOSE("parseStringStartWithSharp('" << _input << "'"); TK_VERBOSE("parseStringStartWithSharp('" << _input << "'");
@ -33,7 +34,7 @@ etk::Color<uint8_t, 4> etk::parseStringStartWithSharp(const std::string& _input)
outputValue.setB(blue | blue << 4); outputValue.setB(blue | blue << 4);
outputValue.setA(0xFF); outputValue.setA(0xFF);
} else { } else {
TK_ERROR(" pb in parsing the color : '" << _input << "'"); TK_ERROR("Error in parsing the color : '" << _input << "'");
} }
} else if (len==4) { } else if (len==4) {
uint32_t red=0, green=0, blue=0, alpha=0; uint32_t red=0, green=0, blue=0, alpha=0;
@ -43,7 +44,7 @@ etk::Color<uint8_t, 4> etk::parseStringStartWithSharp(const std::string& _input)
outputValue.setB(blue | blue << 4); outputValue.setB(blue | blue << 4);
outputValue.setA(alpha | alpha << 4); outputValue.setA(alpha | alpha << 4);
} else { } else {
TK_ERROR(" pb in parsing the color : '" << _input << "'"); TK_ERROR("Error in parsing the color : '" << _input << "'");
} }
} else if (len == 6) { } else if (len == 6) {
uint32_t red=0, green=0, blue=0; uint32_t red=0, green=0, blue=0;
@ -53,7 +54,7 @@ etk::Color<uint8_t, 4> etk::parseStringStartWithSharp(const std::string& _input)
outputValue.setB(blue); outputValue.setB(blue);
outputValue.setA(0xFF); outputValue.setA(0xFF);
} else { } else {
TK_ERROR(" pb in parsing the color : '" << _input << "'"); TK_ERROR("Error in parsing the color : '" << _input << "'");
} }
} else if (len == 8) { } else if (len == 8) {
uint32_t red=0, green=0, blue=0, alpha=0; uint32_t red=0, green=0, blue=0, alpha=0;
@ -63,10 +64,10 @@ etk::Color<uint8_t, 4> etk::parseStringStartWithSharp(const std::string& _input)
outputValue.setB(blue); outputValue.setB(blue);
outputValue.setA(alpha); outputValue.setA(alpha);
} else { } else {
TK_ERROR(" pb in parsing the color : '" << _input << "'"); TK_ERROR("Error in parsing the color : '" << _input << "'");
} }
} else { } else {
TK_ERROR(" pb in parsing the color : '" << _input << "' ==> unknown methode ..."); TK_ERROR("Error in parsing the color : '" << _input << "' ==> unknown method ...");
} }
TK_VERBOSE(" result: '" << outputValue << "'"); TK_VERBOSE(" result: '" << outputValue << "'");
return outputValue; return outputValue;
@ -76,7 +77,7 @@ etk::Color<uint8_t, 4> etk::parseStringStartWithRGBGen(const std::string& _input
TK_VERBOSE("parseStringStartWithRGB('" << _input << "'"); TK_VERBOSE("parseStringStartWithRGB('" << _input << "'");
etk::Color<uint8_t, 4> outputValue(0,0,0,0); etk::Color<uint8_t, 4> outputValue(0,0,0,0);
int32_t red=0, green=0, blue=0, alpha=0; int32_t red=0, green=0, blue=0, alpha=0;
float fred=0, fgreen=0, fblue=0, falpha=0; float float_red=0, float_green=0, float_blue=0, float_alpha=0;
if (sscanf(_input.c_str(), "%u,%u,%u,%u", &red, &green, &blue, &alpha) == 4) { if (sscanf(_input.c_str(), "%u,%u,%u,%u", &red, &green, &blue, &alpha) == 4) {
outputValue.setR(std::min(0xFF, red)); outputValue.setR(std::min(0xFF, red));
outputValue.setG(std::min(0xFF, green)); outputValue.setG(std::min(0xFF, green));
@ -95,24 +96,24 @@ etk::Color<uint8_t, 4> etk::parseStringStartWithRGBGen(const std::string& _input
outputValue.setR(std::min(0xFF, red)); outputValue.setR(std::min(0xFF, red));
outputValue.setG(std::min(0xFF, green)); outputValue.setG(std::min(0xFF, green));
outputValue.setB(std::min(0xFF, blue)); outputValue.setB(std::min(0xFF, blue));
} else if (sscanf(_input.c_str(), "%f,%f,%f,%f", &fred, &fgreen, &fblue, &falpha) == 4) { } else if (sscanf(_input.c_str(), "%f,%f,%f,%f", &float_red, &float_green, &float_blue, &float_alpha) == 4) {
fred = std::avg(0.0f, fred, 1.0f); float_red = std::avg(0.0f, float_red, 1.0f);
fgreen = std::avg(0.0f, fgreen, 1.0f); float_green = std::avg(0.0f, float_green, 1.0f);
fblue = std::avg(0.0f, fblue, 1.0f); float_blue = std::avg(0.0f, float_blue, 1.0f);
falpha = std::avg(0.0f, falpha, 1.0f); float_alpha = std::avg(0.0f, float_alpha, 1.0f);
outputValue.setR((uint8_t)(fred * 255.f)); outputValue.setR((uint8_t)(float_red * 255.f));
outputValue.setG((uint8_t)(fgreen * 255.f)); outputValue.setG((uint8_t)(float_green * 255.f));
outputValue.setB((uint8_t)(fblue * 255.f)); outputValue.setB((uint8_t)(float_blue * 255.f));
outputValue.setR((uint8_t)(falpha * 255.f)); outputValue.setR((uint8_t)(float_alpha * 255.f));
} else if (sscanf(_input.c_str(), "%f,%f,%f", &fred, &fgreen, &fblue) == 3) { } else if (sscanf(_input.c_str(), "%f,%f,%f", &float_red, &float_green, &float_blue) == 3) {
fred = std::avg(0.0f, fred, 1.0f); float_red = std::avg(0.0f, float_red, 1.0f);
fgreen= std::avg(0.0f, fgreen, 1.0f); float_green= std::avg(0.0f, float_green, 1.0f);
fblue = std::avg(0.0f, fblue, 1.0f); float_blue = std::avg(0.0f, float_blue, 1.0f);
outputValue.setR((uint8_t)(fred * 255.f)); outputValue.setR((uint8_t)(float_red * 255.f));
outputValue.setG((uint8_t)(fgreen * 255.f)); outputValue.setG((uint8_t)(float_green * 255.f));
outputValue.setB((uint8_t)(fblue * 255.f)); outputValue.setB((uint8_t)(float_blue * 255.f));
} else { } else {
TK_ERROR(" pb in parsing the color : '" << _input << "' ==> unknown methode ..."); TK_ERROR("Error in parsing the color : '" << _input << "' ==> unknown method ...");
} }
return outputValue; return outputValue;
} }
@ -120,17 +121,17 @@ etk::Color<uint8_t, 4> etk::parseStringStartWithRGBGen(const std::string& _input
etk::Color<double, 4> etk::parseStringStartWithRGB(const std::string& _input) { etk::Color<double, 4> etk::parseStringStartWithRGB(const std::string& _input) {
TK_VERBOSE("parseStringStartWithRGB('" << _input << "')"); TK_VERBOSE("parseStringStartWithRGB('" << _input << "')");
etk::Color<double, 4> outputValue(0,0,0,0); etk::Color<double, 4> outputValue(0,0,0,0);
double fred=0, fgreen=0, fblue=0, falpha=0; double float_red=0, float_green=0, float_blue=0, float_alpha=0;
int32_t red=0, green=0, blue=0, alpha=0; int32_t red=0, green=0, blue=0, alpha=0;
if (sscanf(_input.c_str(), "%lf,%lf,%lf,%lf", &fred, &fgreen, &fblue, &falpha) == 4) { if (sscanf(_input.c_str(), "%lf,%lf,%lf,%lf", &float_red, &float_green, &float_blue, &float_alpha) == 4) {
outputValue.setR(fred); outputValue.setR(float_red);
outputValue.setG(fgreen); outputValue.setG(float_green);
outputValue.setB(fblue); outputValue.setB(float_blue);
outputValue.setA(falpha); outputValue.setA(float_alpha);
} else if (sscanf(_input.c_str(), "%lf,%lf,%lf", &fred, &fgreen, &fblue) == 3) { } else if (sscanf(_input.c_str(), "%lf,%lf,%lf", &float_red, &float_green, &float_blue) == 3) {
outputValue.setR(fred); outputValue.setR(float_red);
outputValue.setG(fgreen); outputValue.setG(float_green);
outputValue.setB(fblue); outputValue.setB(float_blue);
} else if (sscanf(_input.c_str(), "%u,%u,%u,%u", &red, &green, &blue, &alpha) == 4) { } else if (sscanf(_input.c_str(), "%u,%u,%u,%u", &red, &green, &blue, &alpha) == 4) {
outputValue.setR(std::min(0xFF, red)/255.0); outputValue.setR(std::min(0xFF, red)/255.0);
outputValue.setG(std::min(0xFF, green)/255.0); outputValue.setG(std::min(0xFF, green)/255.0);
@ -150,14 +151,14 @@ etk::Color<double, 4> etk::parseStringStartWithRGB(const std::string& _input) {
outputValue.setG(std::min(0xFF, green)/255.0); outputValue.setG(std::min(0xFF, green)/255.0);
outputValue.setB(std::min(0xFF, blue)/255.0); outputValue.setB(std::min(0xFF, blue)/255.0);
} else { } else {
TK_ERROR(" pb in parsing the color : '" << _input << "' ==> unknown methode ..."); TK_ERROR("Error in parsing the color : '" << _input << "' ==> unknown method ...");
} }
return outputValue; return outputValue;
} }
etk::Color<uint32_t, 4> etk::parseStringStartWithRGBUnsigned32(const std::string& _input) { etk::Color<uint32_t, 4> etk::parseStringStartWithRGBUnsigned32(const std::string& _input) {
etk::Color<uint32_t, 4> outputValue(0,0,0,0); etk::Color<uint32_t, 4> outputValue(0,0,0,0);
int32_t red=0, green=0, blue=0, alpha=0; int32_t red=0, green=0, blue=0, alpha=0;
double fred=0, fgreen=0, fblue=0, falpha=0; double float_red=0, float_green=0, float_blue=0, float_alpha=0;
if (sscanf(_input.c_str(), "%u,%u,%u,%u", &red, &green, &blue, &alpha) == 4) { if (sscanf(_input.c_str(), "%u,%u,%u,%u", &red, &green, &blue, &alpha) == 4) {
outputValue.setR(red); outputValue.setR(red);
outputValue.setG(green); outputValue.setG(green);
@ -176,17 +177,17 @@ etk::Color<uint32_t, 4> etk::parseStringStartWithRGBUnsigned32(const std::string
outputValue.setR(red); outputValue.setR(red);
outputValue.setG(green); outputValue.setG(green);
outputValue.setB(blue); outputValue.setB(blue);
} else if (sscanf(_input.c_str(), "%lf,%lf,%lf,%lf", &fred, &fgreen, &fblue, &falpha) == 4) { } else if (sscanf(_input.c_str(), "%lf,%lf,%lf,%lf", &float_red, &float_green, &float_blue, &float_alpha) == 4) {
outputValue.setR((uint32_t)(std::min(1.0, fred)*0xFFFFFFFF)); outputValue.setR((uint32_t)(std::min(1.0, float_red)*0xFFFFFFFF));
outputValue.setG((uint32_t)(std::min(1.0, fgreen)*0xFFFFFFFF)); outputValue.setG((uint32_t)(std::min(1.0, float_green)*0xFFFFFFFF));
outputValue.setB((uint32_t)(std::min(1.0, fblue)*0xFFFFFFFF)); outputValue.setB((uint32_t)(std::min(1.0, float_blue)*0xFFFFFFFF));
outputValue.setA((uint32_t)(std::min(1.0, falpha)*0xFFFFFFFF)); outputValue.setA((uint32_t)(std::min(1.0, float_alpha)*0xFFFFFFFF));
} else if (sscanf(_input.c_str(), "%lf,%lf,%lf", &fred, &fgreen, &fblue) == 3) { } else if (sscanf(_input.c_str(), "%lf,%lf,%lf", &float_red, &float_green, &float_blue) == 3) {
outputValue.setR((uint32_t)(std::min(1.0, fred)*0xFFFFFFFF)); outputValue.setR((uint32_t)(std::min(1.0, float_red)*0xFFFFFFFF));
outputValue.setG((uint32_t)(std::min(1.0, fgreen)*0xFFFFFFFF)); outputValue.setG((uint32_t)(std::min(1.0, float_green)*0xFFFFFFFF));
outputValue.setB((uint32_t)(std::min(1.0, fblue)*0xFFFFFFFF)); outputValue.setB((uint32_t)(std::min(1.0, float_blue)*0xFFFFFFFF));
} else { } else {
TK_ERROR(" pb in parsing the color : '" << _input << "' ==> unknown methode ..."); TK_ERROR("Error in parsing the color : '" << _input << "' ==> unknown method ...");
} }
return outputValue; return outputValue;
} }
@ -194,7 +195,7 @@ etk::Color<uint32_t, 4> etk::parseStringStartWithRGBUnsigned32(const std::string
etk::Color<uint16_t, 4> etk::parseStringStartWithRGBUnsigned16(const std::string& _input) { etk::Color<uint16_t, 4> etk::parseStringStartWithRGBUnsigned16(const std::string& _input) {
etk::Color<uint16_t, 4> outputValue(0,0,0,0); etk::Color<uint16_t, 4> outputValue(0,0,0,0);
int32_t red=0, green=0, blue=0, alpha=0; int32_t red=0, green=0, blue=0, alpha=0;
double fred=0, fgreen=0, fblue=0, falpha=0; double float_red=0, float_green=0, float_blue=0, float_alpha=0;
if (sscanf(_input.c_str(), "%u,%u,%u,%u", &red, &green, &blue, &alpha) == 4) { if (sscanf(_input.c_str(), "%u,%u,%u,%u", &red, &green, &blue, &alpha) == 4) {
outputValue.setR(std::min(0xFFFF, red)); outputValue.setR(std::min(0xFFFF, red));
outputValue.setG(std::min(0xFFFF, green)); outputValue.setG(std::min(0xFFFF, green));
@ -213,17 +214,17 @@ etk::Color<uint16_t, 4> etk::parseStringStartWithRGBUnsigned16(const std::string
outputValue.setR(std::min(0xFFFF, red)); outputValue.setR(std::min(0xFFFF, red));
outputValue.setG(std::min(0xFFFF, green)); outputValue.setG(std::min(0xFFFF, green));
outputValue.setB(std::min(0xFFFF, blue)); outputValue.setB(std::min(0xFFFF, blue));
} else if (sscanf(_input.c_str(), "%lf,%lf,%lf,%lf", &fred, &fgreen, &fblue, &falpha) == 4) { } else if (sscanf(_input.c_str(), "%lf,%lf,%lf,%lf", &float_red, &float_green, &float_blue, &float_alpha) == 4) {
outputValue.setR((uint16_t)(std::min(1.0, fred)*0xFFFF)); outputValue.setR((uint16_t)(std::min(1.0, float_red)*0xFFFF));
outputValue.setG((uint16_t)(std::min(1.0, fgreen)*0xFFFF)); outputValue.setG((uint16_t)(std::min(1.0, float_green)*0xFFFF));
outputValue.setB((uint16_t)(std::min(1.0, fblue)*0xFFFF)); outputValue.setB((uint16_t)(std::min(1.0, float_blue)*0xFFFF));
outputValue.setA((uint16_t)(std::min(1.0, falpha)*0xFFFF)); outputValue.setA((uint16_t)(std::min(1.0, float_alpha)*0xFFFF));
} else if (sscanf(_input.c_str(), "%lf,%lf,%lf", &fred, &fgreen, &fblue) == 3) { } else if (sscanf(_input.c_str(), "%lf,%lf,%lf", &float_red, &float_green, &float_blue) == 3) {
outputValue.setR((uint16_t)(std::min(1.0, fred)*0xFFFF)); outputValue.setR((uint16_t)(std::min(1.0, float_red)*0xFFFF));
outputValue.setG((uint16_t)(std::min(1.0, fgreen)*0xFFFF)); outputValue.setG((uint16_t)(std::min(1.0, float_green)*0xFFFF));
outputValue.setB((uint16_t)(std::min(1.0, fblue)*0xFFFF)); outputValue.setB((uint16_t)(std::min(1.0, float_blue)*0xFFFF));
} else { } else {
TK_ERROR(" pb in parsing the color : '" << _input << "' ==> unknown methode ..."); TK_ERROR("Error in parsing the color : '" << _input << "' ==> unknown method ...");
} }
return outputValue; return outputValue;
} }
@ -231,7 +232,7 @@ etk::Color<uint16_t, 4> etk::parseStringStartWithRGBUnsigned16(const std::string
etk::Color<uint8_t, 4> etk::parseStringStartWithRGBUnsigned8(const std::string& _input) { etk::Color<uint8_t, 4> etk::parseStringStartWithRGBUnsigned8(const std::string& _input) {
etk::Color<uint8_t, 4> outputValue(0,0,0,0); etk::Color<uint8_t, 4> outputValue(0,0,0,0);
int32_t red=0, green=0, blue=0, alpha=0; int32_t red=0, green=0, blue=0, alpha=0;
double fred=0, fgreen=0, fblue=0, falpha=0; double float_red=0, float_green=0, float_blue=0, float_alpha=0;
if (sscanf(_input.c_str(), "%u,%u,%u,%u", &red, &green, &blue, &alpha) == 4) { if (sscanf(_input.c_str(), "%u,%u,%u,%u", &red, &green, &blue, &alpha) == 4) {
outputValue.setR(std::min(0xFF, red)); outputValue.setR(std::min(0xFF, red));
outputValue.setG(std::min(0xFF, green)); outputValue.setG(std::min(0xFF, green));
@ -250,17 +251,17 @@ etk::Color<uint8_t, 4> etk::parseStringStartWithRGBUnsigned8(const std::string&
outputValue.setR(std::min(0xFF, red)); outputValue.setR(std::min(0xFF, red));
outputValue.setG(std::min(0xFF, green)); outputValue.setG(std::min(0xFF, green));
outputValue.setB(std::min(0xFF, blue)); outputValue.setB(std::min(0xFF, blue));
} else if (sscanf(_input.c_str(), "%lf,%lf,%lf,%lf", &fred, &fgreen, &fblue, &falpha) == 4) { } else if (sscanf(_input.c_str(), "%lf,%lf,%lf,%lf", &float_red, &float_green, &float_blue, &float_alpha) == 4) {
outputValue.setR((uint8_t)(std::min(1.0, fred)*0xFF)); outputValue.setR((uint8_t)(std::min(1.0, float_red)*0xFF));
outputValue.setG((uint8_t)(std::min(1.0, fgreen)*0xFF)); outputValue.setG((uint8_t)(std::min(1.0, float_green)*0xFF));
outputValue.setB((uint8_t)(std::min(1.0, fblue)*0xFF)); outputValue.setB((uint8_t)(std::min(1.0, float_blue)*0xFF));
outputValue.setA((uint8_t)(std::min(1.0, falpha)*0xFF)); outputValue.setA((uint8_t)(std::min(1.0, float_alpha)*0xFF));
} else if (sscanf(_input.c_str(), "%lf,%lf,%lf", &fred, &fgreen, &fblue) == 3) { } else if (sscanf(_input.c_str(), "%lf,%lf,%lf", &float_red, &float_green, &float_blue) == 3) {
outputValue.setR((uint8_t)(std::min(1.0, fred)*0xFF)); outputValue.setR((uint8_t)(std::min(1.0, float_red)*0xFF));
outputValue.setG((uint8_t)(std::min(1.0, fgreen)*0xFF)); outputValue.setG((uint8_t)(std::min(1.0, float_green)*0xFF));
outputValue.setB((uint8_t)(std::min(1.0, fblue)*0xFF)); outputValue.setB((uint8_t)(std::min(1.0, float_blue)*0xFF));
} else { } else {
TK_ERROR(" pb in parsing the color : '" << _input << "' ==> unknown methode ..."); TK_ERROR("Error in parsing the color : '" << _input << "' ==> unknown method ...");
} }
return outputValue; return outputValue;
} }
@ -272,7 +273,7 @@ etk::Color<uint8_t, 4> etk::parseStringColorNamed(const std::string& _input) {
return getColorList()[iii].color; return getColorList()[iii].color;
} }
} }
TK_ERROR(" pb in parsing the color : '" << _input << "' not find ..."); TK_ERROR("Error in parsing the color : '" << _input << "' not find ...");
return etk::Color<uint8_t, 4>(0,0,0,0); return etk::Color<uint8_t, 4>(0,0,0,0);
} }
@ -432,7 +433,7 @@ const etk::Color<> etk::color::whiteSmoke(0xF5, 0xF5, 0xF5, 0xFF);
const etk::Color<> etk::color::yellow(0xFF, 0xFF, 0x00, 0xFF); const etk::Color<> etk::color::yellow(0xFF, 0xFF, 0x00, 0xFF);
const etk::Color<> etk::color::yellowGreen(0x9A, 0xCD, 0x32, 0xFF); const etk::Color<> etk::color::yellowGreen(0x9A, 0xCD, 0x32, 0xFF);
static const colorList_ts listOfColor[] = { static const ColorList listOfColor[] = {
{ "none", etk::color::none}, { "none", etk::color::none},
{ "AliceBlue", etk::color::aliceBlue}, { "AliceBlue", etk::color::aliceBlue},
{ "AntiqueWhite", etk::color::antiqueWhite}, { "AntiqueWhite", etk::color::antiqueWhite},
@ -583,15 +584,15 @@ static const colorList_ts listOfColor[] = {
{ "YellowGreen", etk::color::yellowGreen} { "YellowGreen", etk::color::yellowGreen}
}; };
static const colorList_ts* getColorList() static const ColorList* getColorList()
{ {
return listOfColor; return listOfColor;
} }
static int32_t getColorSize() static int32_t getColorSize()
{ {
static const int32_t tmpp = sizeof(listOfColor) / sizeof(colorList_ts); static const int32_t tmp = sizeof(listOfColor) / sizeof(ColorList);
return tmpp; return tmp;
} }
namespace etk { namespace etk {

View File

@ -14,15 +14,15 @@ namespace etk {
/** /**
* @brief The color class is a template to abstract the color implementation choice. * @brief The color class is a template to abstract the color implementation choice.
* *
* It is important to note that the color choice denpznd on the level of developent. * It is important to note that the color choice depend on the level of development.
* For example : * For example :
* - Graphic application use: * - Graphic application use:
* - Image in 3/4 bytes for rgb(a) * - Image in 3/4 bytes for rgb(a)
* - Color description in char : '\#F6780FFF' or the equivalent number:0xF6780FFF * - Color description in char : '\#F6780FFF' or the equivalent number:0xF6780FFF
* - middleware will mainely use a the 4 separate value with 1 byte for each. * - middle-ware will mainly use a the 4 separate value with 1 byte for each.
* - graphic interface (openGL) store image in 1/2/3/4 bytes color and interpolate it in 'n' float. And note that the user color is sored in float. * - graphic interface (openGL) store image in 1/2/3/4 bytes color and interpolate it in 'n' float. And note that the user color is sored in float.
* *
* Then with this class we abstract the transformation format and set an easy same way to use the color independing of the developpement level. * Then with this class we abstract the transformation format and set an easy same way to use the color independent of the development level.
* *
* Some of the basic color is defined in the namespace: @ref etk::color. * Some of the basic color is defined in the namespace: @ref etk::color.
* *
@ -37,11 +37,11 @@ namespace etk {
MY_TYPE m_element[MY_TYPE_SIZE]; //!< all the color. MY_TYPE m_element[MY_TYPE_SIZE]; //!< all the color.
public: public:
/** /**
* @brief Constructor. It does not initialise element of class. * @brief Constructor. It does not initialize element of class.
*/ */
Color() { }; Color() { };
/** /**
* @brief Contructor with request initialisation. * @brief Constructor with request initialization.
* @param[in] _r Red color. * @param[in] _r Red color.
* @param[in] _g Green color. * @param[in] _g Green color.
* @param[in] _b Blue color. * @param[in] _b Blue color.
@ -51,7 +51,7 @@ namespace etk {
set(_r, _g, _b, _a); set(_r, _g, _b, _a);
}; };
/** /**
* @brief Contructor with request initialisation. * @brief Constructor with request initialization.
* @param[in] _r Red color. * @param[in] _r Red color.
* @param[in] _g Green color. * @param[in] _g Green color.
* @param[in] _b Blue color. * @param[in] _b Blue color.
@ -60,7 +60,7 @@ namespace etk {
set(_r, _g, _b); set(_r, _g, _b);
}; };
/** /**
* @brief Contructor with request initialisation. * @brief Constructor with request initialization.
* @param[in] _r Red color. * @param[in] _r Red color.
* @param[in] _g Green color. * @param[in] _g Green color.
*/ */
@ -68,25 +68,25 @@ namespace etk {
set(_r, _g); set(_r, _g);
}; };
/** /**
* @brief Contructor with request initialisation. * @brief Constructor with request initialization.
* @param[in] _r Red color. * @param[in] _r Red color.
*/ */
Color(MY_TYPE _r) { Color(MY_TYPE _r) {
set(_r); set(_r);
}; };
/** /**
* @brief Copy contructor or convert contructor * @brief Copy constructor or convert constructor
* @param[in] _obj Element to copy in this new color class. * @param[in] _obj Element to copy in this new color class.
*/ */
template<typename MY_TYPE_2, int MY_TYPE_SIZE_2> template<typename MY_TYPE_2, int MY_TYPE_SIZE_2>
Color(const etk::Color<MY_TYPE_2, MY_TYPE_SIZE_2>& _obj); Color(const etk::Color<MY_TYPE_2, MY_TYPE_SIZE_2>& _obj);
/** /**
* @brief String extractor constructor. * @brief String extractor constructor.
* @param[in] _input Color string to parse. it can be : "#rrggbb", "rgb", "rrggbbaa", "rgba", "blueviolet" ... * @param[in] _input Color string to parse. it can be : "#rrggbb", "rgb", "rrggbbaa", "rgba", "yellow" ...
*/ */
Color(const std::string& _input); Color(const std::string& _input);
/** /**
* @brief Asignemement operator * @brief Assignment operator
* @param[in] _input Color object to set in this class. * @param[in] _input Color object to set in this class.
* @return reference on this element. * @return reference on this element.
*/ */
@ -97,7 +97,7 @@ namespace etk {
return *this; return *this;
}; };
/** /**
* @brief Different comparaison operator. * @brief Different comparison operator.
* @param[in] _obj Color object to compare. * @param[in] _obj Color object to compare.
* @return true This is not the same color * @return true This is not the same color
* @return false This is the same color. * @return false This is the same color.
@ -111,7 +111,7 @@ namespace etk {
return false; return false;
} }
/** /**
* @brief Equality comparaison operator. * @brief Equality comparison operator.
* @param[in] _obj Color object to compare. * @param[in] _obj Color object to compare.
* @return true This is the same color. * @return true This is the same color.
* @return false The color are different. * @return false The color are different.
@ -208,22 +208,22 @@ namespace etk {
} }
}; };
/** /**
* @brief Convert the color in an hexedecimal string ("0xFEDCBA98") * @brief Convert the color in an hexadecimal string ("0xFEDCBA98")
* @return The formated string * @return The formatted string
*/ */
std::string getHexString() const { std::string getHexString() const {
std::ostringstream oss; std::ostringstream os;
oss << "0x" << std::setw(8) << std::setfill('0') << std::hex << get(); os << "0x" << std::setw(8) << std::setfill('0') << std::hex << get();
return oss.str(); return os.str();
}; };
/** /**
* @brief Convert the color in an generic string value ("#FEDCBA98") * @brief Convert the color in an generic string value ("#FEDCBA98")
* @return The formated string * @return The formatted string
*/ */
std::string getString() const { std::string getString() const {
std::ostringstream oss; std::ostringstream os;
oss << "#" << std::setw(8) << std::setfill('0') << std::hex << get(); os << "#" << std::setw(8) << std::setfill('0') << std::hex << get();
return oss.str(); return os.str();
}; };
/** /**
* @brief Get red color. * @brief Get red color.
@ -308,7 +308,7 @@ namespace etk {
/** /**
* @brief Operator+= Addition an other etk::color with this one * @brief Operator+= Addition an other etk::color with this one
* @param[in] _obj Reference on the external object * @param[in] _obj Reference on the external object
* @return Local reference of the vector additionned * @return Local reference of the vector addition
*/ */
const etk::Color<MY_TYPE,MY_TYPE_SIZE>& operator+= (const etk::Color<MY_TYPE,MY_TYPE_SIZE>& _obj) { const etk::Color<MY_TYPE,MY_TYPE_SIZE>& operator+= (const etk::Color<MY_TYPE,MY_TYPE_SIZE>& _obj) {
if (MY_TYPE_SIZE >= 1) { if (MY_TYPE_SIZE >= 1) {
@ -331,9 +331,9 @@ namespace etk {
* @return New vector containing the value * @return New vector containing the value
*/ */
etk::Color<MY_TYPE,MY_TYPE_SIZE> operator+ (const etk::Color<MY_TYPE,MY_TYPE_SIZE>& _obj) const { etk::Color<MY_TYPE,MY_TYPE_SIZE> operator+ (const etk::Color<MY_TYPE,MY_TYPE_SIZE>& _obj) const {
etk::Color<MY_TYPE,MY_TYPE_SIZE> tmpp(*this); etk::Color<MY_TYPE,MY_TYPE_SIZE> tmp(*this);
tmpp += _obj; tmp += _obj;
return tmpp; return tmp;
} }
/** /**
* @brief Operator*= Multiply 2 color together * @brief Operator*= Multiply 2 color together
@ -381,9 +381,9 @@ namespace etk {
* @return New vector containing the value * @return New vector containing the value
*/ */
etk::Color<MY_TYPE,MY_TYPE_SIZE> operator* (const etk::Color<MY_TYPE,MY_TYPE_SIZE>& _obj) const { etk::Color<MY_TYPE,MY_TYPE_SIZE> operator* (const etk::Color<MY_TYPE,MY_TYPE_SIZE>& _obj) const {
etk::Color<MY_TYPE,MY_TYPE_SIZE> tmpp(*this); etk::Color<MY_TYPE,MY_TYPE_SIZE> tmp(*this);
tmpp *= _obj; tmp *= _obj;
return tmpp; return tmp;
} }
/** /**
* @brief Operator*= Multiply the color With a specific value * @brief Operator*= Multiply the color With a specific value
@ -391,9 +391,9 @@ namespace etk {
* @return New vector containing the value * @return New vector containing the value
*/ */
etk::Color<MY_TYPE,MY_TYPE_SIZE> operator* (const MY_TYPE _val) const { etk::Color<MY_TYPE,MY_TYPE_SIZE> operator* (const MY_TYPE _val) const {
etk::Color<MY_TYPE,MY_TYPE_SIZE> tmpp(*this); etk::Color<MY_TYPE,MY_TYPE_SIZE> tmp(*this);
tmpp *= _val; tmp *= _val;
return tmpp; return tmp;
} }
}; };
@ -404,7 +404,7 @@ namespace etk {
*/ */
etk::Color<uint8_t, 4> parseStringStartWithSharp(const std::string& _input); etk::Color<uint8_t, 4> parseStringStartWithSharp(const std::string& _input);
/** /**
* @brief Get a color value started with a "rgb()" converted in uint8 * @brief Get a color value started with a "rgb()" converted in unsigned 8 bits integer
* @param[in] _input String to parse * @param[in] _input String to parse
* @return Value parsed * @return Value parsed
*/ */
@ -416,33 +416,33 @@ namespace etk {
*/ */
etk::Color<double, 4> parseStringStartWithRGB(const std::string& _input); etk::Color<double, 4> parseStringStartWithRGB(const std::string& _input);
/** /**
* @brief Get a color value started with a "rgb()" converted in uint32 * @brief Get a color value started with a "rgb()" converted in unsigned 32 bits integer
* @param[in] _input String to parse * @param[in] _input String to parse
* @return Value parsed * @return Value parsed
*/ */
etk::Color<uint32_t, 4> parseStringStartWithRGBUnsigned32(const std::string& _input); etk::Color<uint32_t, 4> parseStringStartWithRGBUnsigned32(const std::string& _input);
/** /**
* @brief Get a color value started with a "rgb()" converted in uint16 * @brief Get a color value started with a "rgb()" converted in unsigned 16 bits integer
* @param[in] _input String to parse * @param[in] _input String to parse
* @return Value parsed * @return Value parsed
*/ */
etk::Color<uint16_t, 4> parseStringStartWithRGBUnsigned16(const std::string& _input); etk::Color<uint16_t, 4> parseStringStartWithRGBUnsigned16(const std::string& _input);
/** /**
* @brief Get a color value started with a "rgb()" converted in uint6 * @brief Get a color value started with a "rgb()" converted in unsigned 8 bits integer
* @param[in] _input String to parse * @param[in] _input String to parse
* @return Value parsed * @return Value parsed
*/ */
etk::Color<uint8_t, 4> parseStringStartWithRGBUnsigned8(const std::string& _input); etk::Color<uint8_t, 4> parseStringStartWithRGBUnsigned8(const std::string& _input);
/** /**
* @brief Get a color value started with a "named" converted in uint8 like red, geen ... * @brief Get a color value started with a "named" converted in unsigned 8 bits integer like red, green ...
* @param[in] _input String to parse * @param[in] _input String to parse
* @return Value parsed * @return Value parsed
*/ */
etk::Color<uint8_t, 4> parseStringColorNamed(const std::string& _input); etk::Color<uint8_t, 4> parseStringColorNamed(const std::string& _input);
/** /**
* @brief Specify that the Get intance is specialized for uint8_t/4 template * @brief Specify that the Get instance is specialized for unsigned 8 bits integer on RGBA template
* @return unsignad iterger containing the color value in RGBA * @return unsigned integer containing the color value in RGBA
* @internal * @internal
*/ */
template<> uint32_t Color<uint8_t, 4>::get() const; template<> uint32_t Color<uint8_t, 4>::get() const;
@ -506,20 +506,20 @@ namespace etk {
//! @not_in_doc //! @not_in_doc
template<int MY_TYPE_SIZE> std::ostream& operator <<(std::ostream& _os, const Color<uint8_t, MY_TYPE_SIZE>& _obj) { // RGB & RGBA 8 bits template<int MY_TYPE_SIZE> std::ostream& operator <<(std::ostream& _os, const Color<uint8_t, MY_TYPE_SIZE>& _obj) { // RGB & RGBA 8 bits
std::ostringstream oss; std::ostringstream os;
if (MY_TYPE_SIZE >= 3) { if (MY_TYPE_SIZE >= 3) {
_os << "#"; _os << "#";
oss << std::setw(2) << std::setfill('0') << std::hex << uint32_t(_obj.r()); os << std::setw(2) << std::setfill('0') << std::hex << uint32_t(_obj.r());
if (MY_TYPE_SIZE >= 2) { if (MY_TYPE_SIZE >= 2) {
oss << std::setw(2) << std::setfill('0') << std::hex << uint32_t(_obj.g()); os << std::setw(2) << std::setfill('0') << std::hex << uint32_t(_obj.g());
} }
if (MY_TYPE_SIZE >= 3) { if (MY_TYPE_SIZE >= 3) {
oss << std::setw(2) << std::setfill('0') << std::hex << uint32_t(_obj.b()); os << std::setw(2) << std::setfill('0') << std::hex << uint32_t(_obj.b());
} }
if (MY_TYPE_SIZE >= 4) { if (MY_TYPE_SIZE >= 4) {
oss << std::setw(2) << std::setfill('0') << std::hex << uint32_t(_obj.a()); os << std::setw(2) << std::setfill('0') << std::hex << uint32_t(_obj.a());
} }
_os << oss.str(); _os << os.str();
} else { } else {
if (MY_TYPE_SIZE >= 2) { if (MY_TYPE_SIZE >= 2) {
_os << "be"; _os << "be";
@ -527,19 +527,19 @@ namespace etk {
_os << "Mono"; _os << "Mono";
} }
_os << "[U8]("; _os << "[U8](";
oss << "0x" << std::setw(2) << std::setfill('0') << std::hex << uint32_t(_obj.r()); os << "0x" << std::setw(2) << std::setfill('0') << std::hex << uint32_t(_obj.r());
if (MY_TYPE_SIZE >= 2) { if (MY_TYPE_SIZE >= 2) {
_os << ","; _os << ",";
oss << "0x" << std::setw(2) << std::setfill('0') << std::hex << uint32_t(_obj.g()); os << "0x" << std::setw(2) << std::setfill('0') << std::hex << uint32_t(_obj.g());
} }
_os << oss.str(); _os << os.str();
_os << ")"; _os << ")";
} }
return _os; return _os;
} }
//! @not_in_doc //! @not_in_doc
template<int MY_TYPE_SIZE> std::ostream& operator <<(std::ostream& _os, const Color<uint16_t, MY_TYPE_SIZE>& _obj) { // RGB & RGBA 8 bits template<int MY_TYPE_SIZE> std::ostream& operator <<(std::ostream& _os, const Color<uint16_t, MY_TYPE_SIZE>& _obj) { // RGB & RGBA 8 bits
std::ostringstream oss; std::ostringstream os;
if (MY_TYPE_SIZE >= 4) { if (MY_TYPE_SIZE >= 4) {
_os << "rgba"; _os << "rgba";
} else if (MY_TYPE_SIZE >= 3) { } else if (MY_TYPE_SIZE >= 3) {
@ -550,22 +550,22 @@ namespace etk {
_os << "Mono"; _os << "Mono";
} }
_os << "[U16]("; _os << "[U16](";
oss << "0x" << std::setw(4) << std::setfill('0') << std::hex << _obj.r(); os << "0x" << std::setw(4) << std::setfill('0') << std::hex << _obj.r();
if (MY_TYPE_SIZE >= 2) { if (MY_TYPE_SIZE >= 2) {
oss << ",0x" << std::setw(4) << std::setfill('0') << std::hex << _obj.g(); os << ",0x" << std::setw(4) << std::setfill('0') << std::hex << _obj.g();
} }
if (MY_TYPE_SIZE >= 3) { if (MY_TYPE_SIZE >= 3) {
oss << ",0x" << std::setw(4) << std::setfill('0') << std::hex << _obj.b(); os << ",0x" << std::setw(4) << std::setfill('0') << std::hex << _obj.b();
} }
if (MY_TYPE_SIZE >= 4) { if (MY_TYPE_SIZE >= 4) {
oss << ",0x" << std::setw(4) << std::setfill('0') << std::hex << _obj.a(); os << ",0x" << std::setw(4) << std::setfill('0') << std::hex << _obj.a();
} }
_os << oss.str() << ")"; _os << os.str() << ")";
return _os; return _os;
} }
//! @not_in_doc //! @not_in_doc
template<int MY_TYPE_SIZE> std::ostream& operator <<(std::ostream& _os, const Color<uint32_t, MY_TYPE_SIZE>& _obj) { // RGB & RGBA 8 bits template<int MY_TYPE_SIZE> std::ostream& operator <<(std::ostream& _os, const Color<uint32_t, MY_TYPE_SIZE>& _obj) { // RGB & RGBA 8 bits
std::ostringstream oss; std::ostringstream os;
if (MY_TYPE_SIZE >= 4) { if (MY_TYPE_SIZE >= 4) {
_os << "rgba"; _os << "rgba";
} else if (MY_TYPE_SIZE >= 3) { } else if (MY_TYPE_SIZE >= 3) {
@ -576,17 +576,17 @@ namespace etk {
_os << "Mono"; _os << "Mono";
} }
_os << "[U32]("; _os << "[U32](";
oss << "0x" << std::setw(8) << std::setfill('0') << std::hex << _obj.r(); os << "0x" << std::setw(8) << std::setfill('0') << std::hex << _obj.r();
if (MY_TYPE_SIZE >= 2) { if (MY_TYPE_SIZE >= 2) {
oss << ",0x" << std::setw(8) << std::setfill('0') << std::hex << _obj.g(); os << ",0x" << std::setw(8) << std::setfill('0') << std::hex << _obj.g();
} }
if (MY_TYPE_SIZE >= 3) { if (MY_TYPE_SIZE >= 3) {
oss << ",0x" << std::setw(8) << std::setfill('0') << std::hex << _obj.b(); os << ",0x" << std::setw(8) << std::setfill('0') << std::hex << _obj.b();
} }
if (MY_TYPE_SIZE >= 4) { if (MY_TYPE_SIZE >= 4) {
oss << ",0x" << std::setw(8) << std::setfill('0') << std::hex << _obj.a(); os << ",0x" << std::setw(8) << std::setfill('0') << std::hex << _obj.a();
} }
_os << oss.str() << ")"; _os << os.str() << ")";
return _os; return _os;
} }
//! @not_in_doc //! @not_in_doc

View File

@ -10,7 +10,7 @@
namespace etk { namespace etk {
/** /**
* @brief internel data of the [class[etk::hash]] class, it contain * @brief Internal data of the [class[etk::hash]] class, it contain
* the name and the value of the hash vector. * the name and the value of the hash vector.
* @internal * @internal
*/ */
@ -30,17 +30,17 @@ namespace etk {
} }
}; };
/** /**
* @brief Hash table tamplate is a simple classical hash interface. * @brief Hash table template is a simple classical hash interface.
* A hash table is a equivalent of the dictionary in python, this is a * A hash table is a equivalent of the dictionary in python, this is a
* simple interfaace between a name and a value: * simple interface between a name and a value:
* - "name" : 19 * - "name" : 19
* - "name 2" : 99 * - "name 2" : 99
* *
* @note The name is unique and the value is what you want * @note The name is unique and the value is what you want
* *
* @todo check if something ele exist in the STD. (not the std::map and the std::unordered_map * @todo check if something else exist in the generic library. (not the std::map and the std::unordered_map
* *
* @note The index are all time availlable since they are created. The order is the the one created * @note The index are all time available since they are created. The order is the the one created
* *
* A simple example of use: * A simple example of use:
* @code{.cpp} * @code{.cpp}
@ -61,18 +61,18 @@ namespace etk {
*/ */
template<class MY_TYPE> class Hash { template<class MY_TYPE> class Hash {
private: private:
std::vector<HashData<MY_TYPE>* > m_data; //!< Data of the hash ==> the Hash table is composed of pointer, this permit to have high speed when resize the vestor ... std::vector<HashData<MY_TYPE>* > m_data; //!< Data of the hash ==> the Hash table is composed of pointer, this permit to have high speed when resize the vector ...
public: public:
/** /**
* @brief Contructor of the Hach table. * @brief Constructor of the Hash table.
* @param[in] _count Number ob basic elent in the vector. * @param[in] _count Number of basic element in the table.
*/ */
Hash(int32_t _count = 0) : Hash(int32_t _count = 0) :
m_data(_count) { m_data(_count) {
// nothing to do // nothing to do
} }
/** /**
* @brief Destructor of the Hash table(clear all element in the table) * @brief Destructor of the Hash table (clear all element in the table)
*/ */
~Hash() { ~Hash() {
clear(); clear();
@ -131,7 +131,7 @@ namespace etk {
static MY_TYPE g_error; static MY_TYPE g_error;
int64_t elementId = getId(_key); int64_t elementId = getId(_key);
if (elementId<0) { if (elementId<0) {
//TK_ERROR("try to acces at an unexistant hash element : " << _key); //TK_ERROR("try to access at an inexistent hash element : " << _key);
return g_error; return g_error;
} }
return m_data[elementId]->m_value; return m_data[elementId]->m_value;
@ -228,7 +228,7 @@ namespace etk {
// NOTE :Do not change log level, this generate error only in debug mode // NOTE :Do not change log level, this generate error only in debug mode
#if DEBUG_LEVEL > 2 #if DEBUG_LEVEL > 2
if(_pos>m_data.size()){ if(_pos>m_data.size()){
//TK_CRITICAL("Access to an unexistant data in hach : " << _pos << "/ " << m_data.size()); //TK_CRITICAL("Access to an inexistent data in hash : " << _pos << "/ " << m_data.size());
} }
#endif #endif
return m_data[_pos]->m_key; return m_data[_pos]->m_key;
@ -249,13 +249,13 @@ namespace etk {
/** /**
* @brief Get a value of the hash table at a specific position. * @brief Get a value of the hash table at a specific position.
* @param[in] _pos of the element in the hash table. * @param[in] _pos of the element in the hash table.
* @return Value availlable at this position. * @return Value available at this position.
*/ */
const MY_TYPE& getValue(size_t _pos) const { const MY_TYPE& getValue(size_t _pos) const {
// NOTE :Do not change log level, this generate error only in debug mode // NOTE :Do not change log level, this generate error only in debug mode
#if DEBUG_LEVEL > 2 #if DEBUG_LEVEL > 2
if(_pos>m_data.size()){ if(_pos>m_data.size()){
//TK_CRITICAL("Access to an unexistant data in hach : " << _pos << "/ " << m_data.size()); //TK_CRITICAL("Access to an inexistent data in hash : " << _pos << "/ " << m_data.size());
} }
#endif #endif
return m_data[_pos]->m_value; return m_data[_pos]->m_value;
@ -267,7 +267,7 @@ namespace etk {
// NOTE :Do not change log level, this generate error only in debug mode // NOTE :Do not change log level, this generate error only in debug mode
#if DEBUG_LEVEL > 2 #if DEBUG_LEVEL > 2
if(_pos>m_data.size()){ if(_pos>m_data.size()){
//TK_CRITICAL("Access to an unexistant data in hach : " << _pos << "/ " << m_data.size()); //TK_CRITICAL("Access to an inexistent data in hash : " << _pos << "/ " << m_data.size());
} }
#endif #endif
return m_data[_pos]->m_value; return m_data[_pos]->m_value;

View File

@ -25,7 +25,7 @@ etk::BaseNoise::BaseNoise(const ivec2& _size, float _min, float _max) :
} }
float etk::BaseNoise::get(int32_t _x, int32_t _y) const { float etk::BaseNoise::get(int32_t _x, int32_t _y) const {
// We increment of the size to prevent the <0 result due to the "%" methode ... // We increment of the size to prevent the <0 result due to the "%" method ...
_x += m_size.x(); _x += m_size.x();
_y += m_size.y(); _y += m_size.y();
_x %= m_size.x(); _x %= m_size.x();
@ -35,8 +35,8 @@ float etk::BaseNoise::get(int32_t _x, int32_t _y) const {
float etk::Noise::smoothNoise(float _x, float _y, const etk::BaseNoise& _noise) { float etk::Noise::smoothNoise(float _x, float _y, const etk::BaseNoise& _noise) {
//get fractional part of x and y //get fractional part of x and y
float fractX = _x - (int32_t)_x; float fractionX = _x - (int32_t)_x;
float fractY = _y - (int32_t)_y; float fractionY = _y - (int32_t)_y;
//wrap around //wrap around
int32_t x1 = (int32_t)_x; int32_t x1 = (int32_t)_x;
@ -48,10 +48,10 @@ float etk::Noise::smoothNoise(float _x, float _y, const etk::BaseNoise& _noise)
//smooth the noise with bilinear interpolation //smooth the noise with bilinear interpolation
float value = 0.0f; float value = 0.0f;
value += fractX * fractY * _noise.get(x1,y1); value += fractionX * fractionY * _noise.get(x1,y1);
value += fractX * (1 - fractY) * _noise.get(x1,y2); value += fractionX * (1 - fractionY) * _noise.get(x1,y2);
value += (1 - fractX) * fractY * _noise.get(x2,y1); value += (1 - fractionX) * fractionY * _noise.get(x2,y1);
value += (1 - fractX) * (1 - fractY) * _noise.get(x2,y2); value += (1 - fractionX) * (1 - fractionY) * _noise.get(x2,y2);
return value; return value;
} }
@ -142,7 +142,7 @@ etk::Noise::Noise(enum etk::noiseType _type, ivec2 _size, int32_t _depth) :
float etk::Noise::get(int32_t _x, int32_t _y) const float etk::Noise::get(int32_t _x, int32_t _y) const
{ {
// We increment of the size to prevent the <0 result due to the "%" methode ... // We increment of the size to prevent the <0 result due to the "%" method ...
_x += m_size.x(); _x += m_size.x();
_y += m_size.y(); _y += m_size.y();
_x %= m_size.x(); _x %= m_size.x();

View File

@ -22,7 +22,7 @@ namespace etk {
ivec2 m_size; //!< Size of the noise data ivec2 m_size; //!< Size of the noise data
public: public:
/** /**
* @brief basic constructor with randon settings * @brief Basic constructor with random settings.
* @param[in] _size Size of the basic noise * @param[in] _size Size of the basic noise
* @param[in] _min Minimum value of the random * @param[in] _min Minimum value of the random
* @param[in] _max Maximum value of the random * @param[in] _max Maximum value of the random
@ -68,7 +68,7 @@ namespace etk {
*/ */
float smoothNoise(float _x, float _y, const etk::BaseNoise& _noise); float smoothNoise(float _x, float _y, const etk::BaseNoise& _noise);
/** /**
* @brief Calculate the Tubulence noise at a specific position * @brief Calculate the turbulence noise at a specific position
* @param[in] _x X position * @param[in] _x X position
* @param[in] _y Y position * @param[in] _y Y position
* @param[in] _size Turbulence ratio value * @param[in] _size Turbulence ratio value
@ -77,7 +77,7 @@ namespace etk {
*/ */
float turbulence(float _x, float _y, float _size, const etk::BaseNoise& _noise); float turbulence(float _x, float _y, float _size, const etk::BaseNoise& _noise);
/** /**
* @brief Calculate the Tubulence Not Smooth noise at a specific position * @brief Calculate the turbulence Not Smooth noise at a specific position
* @param[in] _x X position * @param[in] _x X position
* @param[in] _y Y position * @param[in] _y Y position
* @param[in] _size Turbulence ratio value * @param[in] _size Turbulence ratio value
@ -87,7 +87,7 @@ namespace etk {
float turbulenceNoSmooth(float _x, float _y, float _size, const etk::BaseNoise& _noise); float turbulenceNoSmooth(float _x, float _y, float _size, const etk::BaseNoise& _noise);
public: public:
/** /**
* @brief Contructor of a noise specific * @brief Constructor of a noise specific
* @param[in] _type Type of noise * @param[in] _type Type of noise
* @param[in] _size Size of the image output * @param[in] _size Size of the image output
* @param[in] _depth Depth calculation * @param[in] _depth Depth calculation

487
etk/RegEx.cpp Normal file
View File

@ -0,0 +1,487 @@
/**
* @author Edouard DUPIN
*
* @copyright 2011, Edouard DUPIN, all right reserved
*
* @license MPL v2.0 (see license file)
*/
#include <etk/RegEx.hpp>
const struct etk::conversionTable etk::regex::constConversionTable[] = {
// haveBackSlash, inputValue, newValue
{ false , '(' , 0 , etk::regexOpcodePTheseIn},
{ true , '(' , '(' , etk::regexOpcodeError},
{ false , ')' , 0 , etk::regexOpcodePTheseOut},
{ true , ')' , ')' , etk::regexOpcodeError},
{ false , '[' , 0 , etk::regexOpcodeBracketIn},
{ true , '[' , '[' , etk::regexOpcodeError},
{ false , ']' , 0 , etk::regexOpcodeBracketOut},
{ true , ']' , ']' , etk::regexOpcodeError},
{ false , '{' , 0 , etk::regexOpcodeBraceIn},
{ true , '{' , '{' , etk::regexOpcodeError},
{ false , '}' , 0 , etk::regexOpcodeBraceOut},
{ true , '}' , '}' , etk::regexOpcodeError},
{ false , '-' , 0 , etk::regexOpcodeTo},
{ true , '-' , '-' , etk::regexOpcodeError},
{ false , '*' , 0 , etk::regexOpcodeStar},
{ true , '*' , '*' , etk::regexOpcodeError},
{ false , '.' , 0 , etk::regexOpcodeDot},
{ true , '.' , '.' , etk::regexOpcodeError},
{ true , 'e' , 0 , etk::regexOpcodeEOF},
{ false , 'e' , 'e' , etk::regexOpcodeError},
{ false , '?' , 0 , etk::regexOpcodeQuestion},
{ true , '?' , '?' , etk::regexOpcodeError},
{ false , '+' , 0 , etk::regexOpcodePlus},
{ true , '+' , '+' , etk::regexOpcodeError},
{ false , '|' , 0 , etk::regexOpcodePipe},
{ true , '|' , '|' , etk::regexOpcodeError},
{ false , '^' , 0 , etk::regexOpcodeStartOfLine},
{ true , '^' , '^' , etk::regexOpcodeError},
{ false , '$' , 0 , etk::regexOpcodeEndOfLine},
{ true , '$' , '$' , etk::regexOpcodeError},
{ true , 'd' , 0 , etk::regexOpcodeDigit},
{ true , 'D' , 0 , etk::regexOpcodeDigitNot},
{ true , 'l' , 0 , etk::regexOpcodeLetter},
{ true , 'L' , 0 , etk::regexOpcodeLetterNot},
{ true , 's' , 0 , etk::regexOpcodeSpace},
{ true , 'S' , 0 , etk::regexOpcodeSpaceNot},
{ true , 'w' , 0 , etk::regexOpcodeWord},
{ true , 'W' , 0 , etk::regexOpcodeWordNot},
{ true , 'a' , '\a', etk::regexOpcodeError},
{ true , 'b' , '\b', etk::regexOpcodeError},
{ true , 'e' , 0x1B, etk::regexOpcodeError}, // Escape character <Esc>
{ true , 'f' , '\f', etk::regexOpcodeError},
{ true , 'n' , '\n', etk::regexOpcodeError},
{ true , 'r' , '\r', etk::regexOpcodeError},
{ true , 't' , '\t', etk::regexOpcodeError},
{ true , 'v' , '\v', etk::regexOpcodeError},
{ true , '\\' , '\\', etk::regexOpcodeError},
{ true , '&' , '&' , etk::regexOpcodeError},
{ true , '0' , '\0', etk::regexOpcodeError},
{ true , '@' , 0 , etk::regexOpcodeNoChar},
};
const int64_t etk::regex::constConversionTableSize = sizeof(etk::regex::constConversionTable) / sizeof(struct etk::conversionTable) ;
static const char* parseStatusTable[] = {
"parseStatusUnknown",
"parseStatusNone",
"parseStatusPartial",
"parseStatusFull"
};
std::ostream& etk::regex::operator <<(std::ostream& _os, enum etk::regex::parseStatus _obj) {
_os << parseStatusTable[_obj];
return _os;
}
std::ostream& etk::regex::operator <<(std::ostream& _os, const etk::regex::FindProperty& _obj) {
_os << "property([" << _obj.getPositionStart() << "," << _obj.getPositionStop() << "]*" << _obj.getMultiplicity() << " " << _obj.getStatus() << ")";
return _os;
}
std::string etk::regex::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 regexOpcodePTheseIn: output += std::string(ETK_BASH_COLOR_RED) + (char*)"(" + ETK_BASH_COLOR_NORMAL; break;
case regexOpcodePTheseOut: output += std::string(ETK_BASH_COLOR_RED) + (char*)")" + ETK_BASH_COLOR_NORMAL; break;
case regexOpcodeBracketIn: output += std::string(ETK_BASH_COLOR_YELLOW) + (char*)"[" + ETK_BASH_COLOR_NORMAL; break;
case regexOpcodeBracketOut: output += std::string(ETK_BASH_COLOR_YELLOW) + (char*)"]" + ETK_BASH_COLOR_NORMAL; break;
case regexOpcodeTo: output += std::string(ETK_BASH_COLOR_YELLOW) + (char*)"-" + ETK_BASH_COLOR_NORMAL; break;
case regexOpcodeBraceIn: output += std::string(ETK_BASH_COLOR_GREEN) + (char*)"{" + ETK_BASH_COLOR_NORMAL; break;
case regexOpcodeBraceOut: output += std::string(ETK_BASH_COLOR_GREEN) + (char*)"}" + ETK_BASH_COLOR_NORMAL; break;
case regexOpcodeStar: output += std::string(ETK_BASH_COLOR_BLUE) + (char*)"*" + ETK_BASH_COLOR_NORMAL; break;
case regexOpcodeDot: output += std::string(ETK_BASH_COLOR_BLUE) + (char*)"." + ETK_BASH_COLOR_NORMAL; break;
case regexOpcodeQuestion: output += std::string(ETK_BASH_COLOR_BLUE) + (char*)"?" + ETK_BASH_COLOR_NORMAL; break;
case regexOpcodePlus: output += std::string(ETK_BASH_COLOR_BLUE) + (char*)"+" + ETK_BASH_COLOR_NORMAL; break;
case regexOpcodePipe: output += std::string(ETK_BASH_COLOR_BLUE) + (char*)"|" + ETK_BASH_COLOR_NORMAL; break;
case regexOpcodeNoChar: output += std::string(ETK_BASH_COLOR_MAGENTA) + (char*)"@" + ETK_BASH_COLOR_NORMAL; break;
case regexOpcodeStartOfLine: output += std::string(ETK_BASH_COLOR_MAGENTA) + (char*)"^" + ETK_BASH_COLOR_NORMAL; break;
case regexOpcodeEndOfLine: output += std::string(ETK_BASH_COLOR_MAGENTA) + (char*)"$" + ETK_BASH_COLOR_NORMAL; break;
case regexOpcodeDigit: output += std::string(ETK_BASH_COLOR_MAGENTA) + (char*)"\\d" + ETK_BASH_COLOR_NORMAL; break;
case regexOpcodeDigitNot: output += std::string(ETK_BASH_COLOR_MAGENTA) + (char*)"\\D" + ETK_BASH_COLOR_NORMAL; break;
case regexOpcodeLetter: output += std::string(ETK_BASH_COLOR_MAGENTA) + (char*)"\\l" + ETK_BASH_COLOR_NORMAL; break;
case regexOpcodeLetterNot: output += std::string(ETK_BASH_COLOR_MAGENTA) + (char*)"\\L" + ETK_BASH_COLOR_NORMAL; break;
case regexOpcodeSpace: output += std::string(ETK_BASH_COLOR_MAGENTA) + (char*)"\\s" + ETK_BASH_COLOR_NORMAL; break;
case regexOpcodeSpaceNot: output += std::string(ETK_BASH_COLOR_MAGENTA) + (char*)"\\S" + ETK_BASH_COLOR_NORMAL; break;
case regexOpcodeWord: output += std::string(ETK_BASH_COLOR_MAGENTA) + (char*)"\\w" + ETK_BASH_COLOR_NORMAL; break;
case regexOpcodeWordNot: output += std::string(ETK_BASH_COLOR_MAGENTA) + (char*)"\\W" + ETK_BASH_COLOR_NORMAL; break;
case regexOpcodeEOF: output += std::string(ETK_BASH_COLOR_MAGENTA) + (char*)"\\e" + 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 output;
}
char* etk::regex::levelSpace(uint32_t _level) {
static char* tmpSpace = " ";
if (_level>30) {
return tmpSpace;
}
return tmpSpace + 60 - 2*_level;
}
int64_t etk::regex::getLenOfPTheseElement(const std::vector<char32_t>& _data, int64_t _startPos) {
if (_startPos>=(int64_t)_data.size()){
return 0;
}
int64_t pos = _startPos;
int32_t nbOpen = 0;
// special case of the (...) or | ==> we search '|' or ')'
if( _data[pos] == regexOpcodePTheseOut
|| _data[pos] == regexOpcodePipe) {
return 0;
}
// find size ...
while (pos < (int64_t)_data.size() ) {
if(_data[pos] == regexOpcodePTheseIn) {
// find a sub section :
nbOpen++;
} else if(0 < nbOpen) {
if (_data[pos] == regexOpcodePTheseOut) {
nbOpen--;
if (0 > nbOpen) {
TK_ERROR("Error in the (...) find element at "<< pos);
return -1;
}
}
} else if( _data[pos] == regexOpcodePTheseOut
|| _data[pos] == regexOpcodePipe) {
// Find the end of the (...)
// just return the size inside
int32_t sizeInside = pos - _startPos;
if (0 >= sizeInside) {
TK_ERROR("Error in the (...) no data at "<< pos-1);
return 0;
}
return sizeInside;
}
pos++;
}
return pos - _startPos;
}
int64_t etk::regex::getLenOfPThese(const std::vector<char32_t>& _data, int64_t _startPos) {
int64_t pos = _startPos;
int32_t nbOpen = 0;
// special case of the (...) or | ==> we search '|' or ')'
if(_data[pos]==regexOpcodePTheseOut) {
return 0;
}
if(_data[pos]!=regexOpcodePTheseIn) {
TK_ERROR(" find error in PThese");
return 0;
}
pos++;
// find size ...
while (pos < (int64_t)_data.size() ) {
if(_data[pos]==regexOpcodePTheseIn) {
// find a sub section :
nbOpen++;
} else if(0 < nbOpen) {
if (_data[pos]==regexOpcodePTheseOut) {
nbOpen--;
if (0 > nbOpen) {
TK_ERROR("Error in the (...) find element at "<< pos);
return 0;
}
}
} else if(_data[pos]==regexOpcodePTheseOut) {
// Find the end of the (...)
// just return the size inside
int32_t sizeInside = pos - _startPos-1;
if (0 >= sizeInside) {
TK_ERROR("Error in the (...) no data at "<< pos-1);
return 0;
}
return sizeInside;
}
pos++;
}
return 0;
}
int64_t etk::regex::getLenOfBracket(const std::vector<char32_t>& _data, int64_t _startPos) {
int64_t pos = _startPos;
// special case of the (...) or | ==> we search '|' or ')'
if(_data[pos]==regexOpcodeBracketOut) {
return 0;
}
if(_data[pos] != regexOpcodeBracketIn) {
TK_ERROR("find no [...");
return 0;
}
pos++;
// find size ...
while (pos < (int64_t)_data.size() ) {
if(_data[pos] == regexOpcodeBracketOut) {
// Find the end of the [...]
// just return the size inside
int32_t sizeInside = pos - _startPos -1 ;
if (0 >= sizeInside) {
TK_ERROR("Error in the [...] no data at "<< pos-1);
return 0;
}
return sizeInside;
} else if ( _data[pos] == regexOpcodeStartOfLine
|| _data[pos] == regexOpcodeDigit
|| _data[pos] == regexOpcodeLetter
|| _data[pos] == regexOpcodeSpace
|| _data[pos] == regexOpcodeWord
|| _data[pos] == regexOpcodeTo) {
// nothing to do ... it is permitted
} else if(_data[pos] > 0xFF ) {
std::string displayElement;
if (_data[pos] == regexOpcodeStartOfLine) {
displayElement = "^";
} else if (_data[pos] == regexOpcodeDigitNot) {
displayElement = "\\D";
} else if (_data[pos] == regexOpcodeLetterNot) {
displayElement = "\\L";
} else if (_data[pos] == regexOpcodeSpaceNot) {
displayElement = "\\S";
} else if (_data[pos] == regexOpcodeWordNot) {
displayElement = "\\W";
} else {
displayElement = (char)_data[pos];
}
TK_ERROR("Error in the [...] not permitted element at "<< pos << " '" << displayElement << "'");
return 0;
}
pos++;
}
return 0;
}
int64_t etk::regex::getLenOfBrace(const std::vector<char32_t>& _data, int64_t _startPos) {
int32_t pos = _startPos;
// special case of the (...) or | ==> we search '|' or ')'
if(_data[pos]==regexOpcodeBraceOut) {
return 0;
}
if(_data[pos]!=regexOpcodeBraceIn) {
TK_ERROR(" did not find brace IN { ");
return 0;
}
pos++;
// find size ...
while (pos < (int64_t)_data.size() ) {
if(_data[pos]==regexOpcodeBraceOut) {
// Find the end of the [...]
// just return the size inside
int32_t sizeInside = pos - _startPos -1 ;
if (0 >= sizeInside) {
TK_ERROR("Error in the {...} no data at "<< pos-1);
return 0;
}
return sizeInside;
} else if( _data[pos] != ','
&& ( _data[pos] < '0'
|| _data[pos] > '9') ) {
TK_ERROR("Error in the {...} not permitted element at "<< pos << " '" << _data[pos] << "'");
return 0;
}
pos++;
}
return 0;
}
int64_t etk::regex::getLenOfNormal(const std::vector<char32_t>& _data, int64_t _startPos) {
int64_t pos = _startPos;
// find size ...
while (pos < (int64_t)_data.size() ) {
switch(_data[pos]) {
case regexOpcodePTheseIn:
case regexOpcodePTheseOut:
case regexOpcodeBracketIn:
case regexOpcodeBracketOut:
case regexOpcodeBraceIn:
case regexOpcodeBraceOut:
case regexOpcodeTo:
case regexOpcodeStar:
case regexOpcodeDot:
case regexOpcodeQuestion:
case regexOpcodePlus:
case regexOpcodePipe:
case regexOpcodeStartOfLine:
case regexOpcodeEndOfLine:
case regexOpcodeDigit:
case regexOpcodeDigitNot:
case regexOpcodeLetter:
case regexOpcodeLetterNot:
case regexOpcodeSpace:
case regexOpcodeSpaceNot:
case regexOpcodeWord:
case regexOpcodeWordNot:
{
// just return the size inside
int32_t sizeInside = pos - _startPos;
if (0 >= sizeInside) {
TK_ERROR("Error in the normal data : no data ...");
}
return sizeInside;
}
break;
default :
// nothing to do ...
break;
}
pos++;
}
if ((int64_t)pos - (int64_t)_startPos < 0) {
return 0;
}
return pos - _startPos ;
}
bool etk::regex::parseBrace(const std::vector<char32_t>& _data, uint32_t& _min, uint32_t& _max) {
int64_t k=0;
int32_t firstElement = 0;
int32_t SecondElement = 0;
while(k < (int64_t)_data.size()) {
if (_data[k] == ',') {
k++;
break;
} if (_data[k] == '}' ) {
SecondElement = firstElement;
goto allIsSet;
} else if(u32char::isInteger(_data[k]) == true) {
firstElement *= 10;
firstElement += u32char::toInt(_data[k]);
} else {
TK_ERROR("Can not parse this element " << (char)_data[k] << " at pos " << k);
return false;
}
k++;
}
if (k == (int64_t)_data.size()) {
SecondElement = firstElement;
}
while(k < (int64_t)_data.size()) {
if (_data[k] == ',') {
TK_ERROR("Can not find a second , in {} at pos " << k);
return false;
} if (_data[k] == '}') {
goto allIsSet;
} else if (true == u32char::isInteger(_data[k])) {
SecondElement *= 10;
SecondElement += u32char::toInt(_data[k]);
} else {
TK_ERROR("Can not parse this element " << _data[k] << " at pos " << k);
return false;
}
k++;
}
allIsSet:
if (SecondElement == 0 && firstElement != 0) {
_min = 0;
_max = firstElement;
} else {
_min = firstElement;
_max = SecondElement;
}
if (_min > _max) {
TK_ERROR("Minimum=" << _min << " can not be < maximum=" << _max );
return false;
}
return true;
}
std::string etk::regex::autoStr(const std::string& _data) {
std::string out;
for (auto &it : _data) {
if (it == '\n') {
out += "\\n";
} else if (it == '\t') {
out += "\\t";
} else if (it == '\r') {
out += "\\r";
} else if (it == '\0') {
out += "\\0";
} else if (it == ' ') {
out += " ";
} else if (it <= 0x20) {
out += std::to_string((int32_t)it);
} else {
out += it;
}
}
return out;
}
std::string etk::regex::autoStr(char _data) {
std::string out;
if (_data == '\n') {
out += "\\n";
} else if (_data == '\t') {
out += "\\t";
} else if (_data == '\r') {
out += "\\r";
} else if (_data == '\0') {
out += "\\0";
} else if (_data == ' ') {
out += " ";
} else if (_data <= 0x20) {
out += std::to_string((int32_t)_data);
} else {
out += _data;
}
return out;
}
std::string etk::regex::strTick(int32_t _pos) {
std::string out;
for (int32_t iii=0; iii<_pos; ++iii) {
out += " ";
}
out += "^";
return out;
}
namespace etk {
template<> std::string to_string<etk::RegEx<std::string>>(const etk::RegEx<std::string>& _val) {
return _val.getRegEx();
}
template<> std::string to_string<etk::RegEx<std::u32string>>(const etk::RegEx<std::u32string>& _val) {
return _val.getRegEx();
}
template<> std::u32string to_u32string<etk::RegEx<std::string>>(const etk::RegEx<std::string>& _val) {
return _val.getURegEx();
}
template<> std::u32string to_u32string<etk::RegEx<std::u32string>>(const etk::RegEx<std::u32string>& _val) {
return _val.getURegEx();
}
template<> bool from_string<etk::RegEx<std::string>>(etk::RegEx<std::string>& _variableRet, const std::u32string& _value) {
_variableRet.compile(_value);
return true;
}
template<> bool from_string<etk::RegEx<std::u32string>>(etk::RegEx<std::u32string>& _variableRet, const std::u32string& _value) {
_variableRet.compile(_value);
return true;
}
template<> bool from_string<etk::RegEx<std::string>>(etk::RegEx<std::string>& _variableRet, const std::string& _value) {
_variableRet.compile(_value);
return true;
}
template<> bool from_string<etk::RegEx<std::u32string>>(etk::RegEx<std::u32string>& _variableRet, const std::string& _value) {
_variableRet.compile(_value);
return true;
}
};

File diff suppressed because it is too large Load Diff

View File

@ -1,490 +0,0 @@
/**
* @author Edouard DUPIN
*
* @copyright 2011, Edouard DUPIN, all right reserved
*
* @license MPL v2.0 (see license file)
*/
#include <etk/RegExp.hpp>
const struct etk::convertionTable etk::regexp::constConvertionTable[] = {
// haveBackSlash, inputValue, newValue
{ false , '(' , 0 , etk::regexpOpcodePTheseIn},
{ true , '(' , '(' , etk::regexpOpcodeError},
{ false , ')' , 0 , etk::regexpOpcodePTheseOut},
{ true , ')' , ')' , etk::regexpOpcodeError},
{ false , '[' , 0 , etk::regexpOpcodeBracketIn},
{ true , '[' , '[' , etk::regexpOpcodeError},
{ false , ']' , 0 , etk::regexpOpcodeBracketOut},
{ true , ']' , ']' , etk::regexpOpcodeError},
{ false , '{' , 0 , etk::regexpOpcodeBracetIn},
{ true , '{' , '{' , etk::regexpOpcodeError},
{ false , '}' , 0 , etk::regexpOpcodeBracetOut},
{ true , '}' , '}' , etk::regexpOpcodeError},
{ false , '-' , 0 , etk::regexpOpcodeTo},
{ true , '-' , '-' , etk::regexpOpcodeError},
{ false , '*' , 0 , etk::regexpOpcodeStar},
{ true , '*' , '*' , etk::regexpOpcodeError},
{ false , '.' , 0 , etk::regexpOpcodeDot},
{ true , '.' , '.' , etk::regexpOpcodeError},
{ true , 'e' , 0 , etk::regexpOpcodeEOF},
{ false , 'e' , 'e' , etk::regexpOpcodeError},
{ false , '?' , 0 , etk::regexpOpcodeQuestion},
{ true , '?' , '?' , etk::regexpOpcodeError},
{ false , '+' , 0 , etk::regexpOpcodePlus},
{ true , '+' , '+' , etk::regexpOpcodeError},
{ false , '|' , 0 , etk::regexpOpcodePipe},
{ true , '|' , '|' , etk::regexpOpcodeError},
{ false , '^' , 0 , etk::regexpOpcodeStartOfLine},
{ true , '^' , '^' , etk::regexpOpcodeError},
{ false , '$' , 0 , etk::regexpOpcodeEndOfLine},
{ true , '$' , '$' , etk::regexpOpcodeError},
{ true , 'd' , 0 , etk::regexpOpcodeDigit},
{ true , 'D' , 0 , etk::regexpOpcodeDigitNot},
{ true , 'l' , 0 , etk::regexpOpcodeLetter},
{ true , 'L' , 0 , etk::regexpOpcodeLetterNot},
{ true , 's' , 0 , etk::regexpOpcodeSpace},
{ true , 'S' , 0 , etk::regexpOpcodeSpaceNot},
{ true , 'w' , 0 , etk::regexpOpcodeWord},
{ true , 'W' , 0 , etk::regexpOpcodeWordNot},
{ true , 'a' , '\a', etk::regexpOpcodeError},
{ true , 'b' , '\b', etk::regexpOpcodeError},
{ true , 'e' , 0x1B, etk::regexpOpcodeError}, // Escape character <Esc>
{ true , 'f' , '\f', etk::regexpOpcodeError},
{ true , 'n' , '\n', etk::regexpOpcodeError},
{ true , 'r' , '\r', etk::regexpOpcodeError},
{ true , 't' , '\t', etk::regexpOpcodeError},
{ true , 'v' , '\v', etk::regexpOpcodeError},
{ true , '\\' , '\\', etk::regexpOpcodeError},
{ true , '&' , '&' , etk::regexpOpcodeError},
{ true , '0' , '\0', etk::regexpOpcodeError},
{ true , '@' , 0 , etk::regexpOpcodeNoChar},
};
const int64_t etk::regexp::constConvertionTableSize = sizeof(etk::regexp::constConvertionTable) / sizeof(struct etk::convertionTable) ;
static const char* parseStatusTable[] = {
"parseStatusUnknow",
"parseStatusNone",
"parseStatusPartial",
"parseStatusFull"
};
std::ostream& etk::regexp::operator <<(std::ostream& _os, enum etk::regexp::parseStatus _obj) {
_os << parseStatusTable[_obj];
return _os;
}
std::ostream& etk::regexp::operator <<(std::ostream& _os, const etk::regexp::FindProperty& _obj) {
_os << "property([" << _obj.getPositionStart() << "," << _obj.getPositionStop() << "]*" << _obj.getMultiplicity() << " " << _obj.getStatus() << ")";
return _os;
}
std::string etk::regexp::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: 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 regexpOpcodeEOF: output += std::string(ETK_BASH_COLOR_MAGENTA) + (char*)"\\e" + 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 output;
}
char* etk::regexp::levelSpace(uint32_t _level) {
static char* tmpSpace = " ";
if (_level>30) {
return tmpSpace;
}
return tmpSpace + 60 - 2*_level;
}
int64_t etk::regexp::getLenOfPTheseElem(const std::vector<char32_t>& _data, int64_t _startPos) {
if (_startPos>=(int64_t)_data.size()){
return 0;
}
int64_t pos = _startPos;
int32_t nbOpen = 0;
// special case of the (...) or | ==> we search '|' or ')'
if( _data[pos] == regexpOpcodePTheseOut
|| _data[pos] == regexpOpcodePipe) {
return 0;
}
// find size ...
while (pos < (int64_t)_data.size() ) {
if(_data[pos] == regexpOpcodePTheseIn) {
// find a sub section :
nbOpen++;
} else if(0 < nbOpen) {
if (_data[pos] == regexpOpcodePTheseOut) {
nbOpen--;
if (0 > nbOpen) {
TK_ERROR("Error in the (...) find element at "<< pos);
return -1;
}
}
} else if( _data[pos] == regexpOpcodePTheseOut
|| _data[pos] == regexpOpcodePipe) {
// Find the end of the (...)
// just return the size inside
int32_t sizeInside = pos - _startPos;
if (0 >= sizeInside) {
TK_ERROR("Error in the (...) no data at "<< pos-1);
return 0;
}
return sizeInside;
}
pos++;
}
return pos - _startPos;
}
int64_t etk::regexp::getLenOfPThese(const std::vector<char32_t>& _data, int64_t _startPos) {
int64_t pos = _startPos;
int32_t nbOpen = 0;
// special case of the (...) or | ==> we search '|' or ')'
if(_data[pos]==regexpOpcodePTheseOut) {
return 0;
}
if(_data[pos]!=regexpOpcodePTheseIn) {
TK_ERROR(" find error in PThese");
return 0;
}
pos++;
// find size ...
while (pos < (int64_t)_data.size() ) {
if(_data[pos]==regexpOpcodePTheseIn) {
// find a sub section :
nbOpen++;
} else if(0 < nbOpen) {
if (_data[pos]==regexpOpcodePTheseOut) {
nbOpen--;
if (0 > nbOpen) {
TK_ERROR("Error in the (...) find element at "<< pos);
return 0;
}
}
} else if(_data[pos]==regexpOpcodePTheseOut) {
// Find the end of the (...)
// just return the size inside
int32_t sizeInside = pos - _startPos-1;
if (0 >= sizeInside) {
TK_ERROR("Error in the (...) no data at "<< pos-1);
return 0;
}
return sizeInside;
}
pos++;
}
return 0;
}
int64_t etk::regexp::getLenOfBracket(const std::vector<char32_t>& _data, int64_t _startPos) {
int64_t pos = _startPos;
// special case of the (...) or | ==> we search '|' or ')'
if(_data[pos]==regexpOpcodeBracketOut) {
return 0;
}
if(_data[pos] != regexpOpcodeBracketIn) {
TK_ERROR("find no {...");
return 0;
}
pos++;
// find size ...
while (pos < (int64_t)_data.size() ) {
if(_data[pos] == regexpOpcodeBracketOut) {
// Find the end of the [...]
// just return the size inside
int32_t sizeInside = pos - _startPos -1 ;
if (0 >= sizeInside) {
TK_ERROR("Error in the [...] no data at "<< pos-1);
return 0;
}
return sizeInside;
} else if ( _data[pos] == regexpOpcodeStartOfLine
|| _data[pos] == regexpOpcodeDigit
|| _data[pos] == regexpOpcodeLetter
|| _data[pos] == regexpOpcodeSpace
|| _data[pos] == regexpOpcodeWord
|| _data[pos] == regexpOpcodeTo) {
// nothing to do ... it is permited
} else if(_data[pos] > 0xFF ) {
std::string displayElement;
if (_data[pos] == regexpOpcodeStartOfLine) {
displayElement = "^";
} else if (_data[pos] == regexpOpcodeDigitNot) {
displayElement = "\\D";
} else if (_data[pos] == regexpOpcodeLetterNot) {
displayElement = "\\L";
} else if (_data[pos] == regexpOpcodeSpaceNot) {
displayElement = "\\S";
} else if (_data[pos] == regexpOpcodeWordNot) {
displayElement = "\\W";
} else {
displayElement = (char)_data[pos];
}
TK_ERROR("Error in the [...] not permited element at "<< pos << " '" << displayElement << "'");
return 0;
}
pos++;
}
return 0;
}
int64_t etk::regexp::getLenOfBrace(const std::vector<char32_t>& _data, int64_t _startPos) {
int32_t pos = _startPos;
// special case of the (...) or | ==> we search '|' or ')'
if(_data[pos]==regexpOpcodeBracetOut) {
return 0;
}
if(_data[pos]!=regexpOpcodeBracetIn) {
TK_ERROR(" did not find brace IN { ");
return 0;
}
pos++;
// find size ...
while (pos < (int64_t)_data.size() ) {
if(_data[pos]==regexpOpcodeBracetOut) {
// Find the end of the [...]
// just return the size inside
int32_t sizeInside = pos - _startPos -1 ;
if (0 >= sizeInside) {
TK_ERROR("Error in the {...} no data at "<< pos-1);
return 0;
}
return sizeInside;
} else if( _data[pos] != ','
&& ( _data[pos] < '0'
|| _data[pos] > '9') ) {
TK_ERROR("Error in the {...} not permited element at "<< pos << " '" << _data[pos] << "'");
return 0;
}
pos++;
}
return 0;
}
int64_t etk::regexp::getLenOfNormal(const std::vector<char32_t>& _data, int64_t _startPos) {
int64_t pos = _startPos;
// find size ...
while (pos < (int64_t)_data.size() ) {
switch(_data[pos]) {
case regexpOpcodePTheseIn:
case regexpOpcodePTheseOut:
case regexpOpcodeBracketIn:
case regexpOpcodeBracketOut:
case regexpOpcodeBracetIn:
case regexpOpcodeBracetOut:
case regexpOpcodeTo:
case regexpOpcodeStar:
case regexpOpcodeDot:
case regexpOpcodeQuestion:
case regexpOpcodePlus:
case regexpOpcodePipe:
case regexpOpcodeStartOfLine:
case regexpOpcodeEndOfLine:
case regexpOpcodeDigit:
case regexpOpcodeDigitNot:
case regexpOpcodeLetter:
case regexpOpcodeLetterNot:
case regexpOpcodeSpace:
case regexpOpcodeSpaceNot:
case regexpOpcodeWord:
case regexpOpcodeWordNot:
{
// just return the size inside
int32_t sizeInside = pos - _startPos;
if (0 >= sizeInside) {
TK_ERROR("Error in the normal data : no data ...");
}
return sizeInside;
}
break;
default :
// nothing to do ...
break;
}
pos++;
}
if ((int64_t)pos - (int64_t)_startPos < 0) {
return 0;
}
return pos - _startPos ;
}
bool etk::regexp::parseBrace(const std::vector<char32_t>& _data, uint32_t& _min, uint32_t& _max) {
//TK_INFO("parse {...} in "; DisplayElem(data); );
int64_t k=0;
int32_t firstElement = 0;
int32_t SecondElement = 0;
while(k < (int64_t)_data.size()) {
if (_data[k] == ',') {
k++;
break;
} if (_data[k] == '}' ) {
SecondElement = firstElement;
goto allIsSet;
} else if(u32char::isInteger(_data[k]) == true) {
firstElement *= 10;
firstElement += u32char::toInt(_data[k]);
} else {
TK_ERROR("Can not parse this element " << (char)_data[k] << " at pos " << k);
return false;
}
k++;
}
if (k == (int64_t)_data.size()) {
SecondElement = firstElement;
}
while(k < (int64_t)_data.size()) {
if (_data[k] == ',') {
TK_ERROR("Can not find a second , in {} at pos " << k);
return false;
} if (_data[k] == '}') {
goto allIsSet;
} else if (true == u32char::isInteger(_data[k])) {
SecondElement *= 10;
SecondElement += u32char::toInt(_data[k]);
} else {
TK_ERROR("Can not parse this element " << _data[k] << " at pos " << k);
return false;
}
k++;
}
allIsSet:
if (SecondElement == 0 && firstElement != 0) {
_min = 0;
_max = firstElement;
} else {
_min = firstElement;
_max = SecondElement;
}
if (_min > _max) {
TK_ERROR("Minimum=" << _min << " can not be < maximum=" << _max );
return false;
}
return true;
}
std::string etk::regexp::autoStr(const std::string& _data) {
std::string out;
for (auto &it : _data) {
if (it == '\n') {
out += "\\n";
} else if (it == '\t') {
out += "\\t";
} else if (it == '\r') {
out += "\\r";
} else if (it == '\0') {
out += "\\0";
} else if (it == ' ') {
out += " ";
} else if (it <= 0x20) {
out += std::to_string((int32_t)it);
} else {
out += it;
}
}
return out;
}
std::string etk::regexp::autoStr(char _data) {
std::string out;
if (_data == '\n') {
out += "\\n";
} else if (_data == '\t') {
out += "\\t";
} else if (_data == '\r') {
out += "\\r";
} else if (_data == '\0') {
out += "\\0";
} else if (_data == ' ') {
out += " ";
} else if (_data <= 0x20) {
out += std::to_string((int32_t)_data);
} else {
out += _data;
}
return out;
}
std::string etk::regexp::strTick(int32_t _pos) {
std::string out;
for (int32_t iii=0; iii<_pos; ++iii) {
out += " ";
}
out += "^";
return out;
}
namespace etk {
template<> std::string to_string<etk::RegExp<std::string>>(const etk::RegExp<std::string>& _val) {
return _val.getRegExp();
}
template<> std::string to_string<etk::RegExp<std::u32string>>(const etk::RegExp<std::u32string>& _val) {
return _val.getRegExp();
}
template<> std::u32string to_u32string<etk::RegExp<std::string>>(const etk::RegExp<std::string>& _val) {
return _val.getURegExp();
}
template<> std::u32string to_u32string<etk::RegExp<std::u32string>>(const etk::RegExp<std::u32string>& _val) {
return _val.getURegExp();
}
template<> bool from_string<etk::RegExp<std::string>>(etk::RegExp<std::string>& _variableRet, const std::u32string& _value) {
_variableRet.compile(_value);
return true;
}
template<> bool from_string<etk::RegExp<std::u32string>>(etk::RegExp<std::u32string>& _variableRet, const std::u32string& _value) {
_variableRet.compile(_value);
return true;
}
template<> bool from_string<etk::RegExp<std::string>>(etk::RegExp<std::string>& _variableRet, const std::string& _value) {
_variableRet.compile(_value);
return true;
}
template<> bool from_string<etk::RegExp<std::u32string>>(etk::RegExp<std::u32string>& _variableRet, const std::string& _value) {
_variableRet.compile(_value);
return true;
}
};

View File

@ -12,7 +12,7 @@ namespace etk {
/** /**
* @brief Vector class ... * @brief Vector class ...
* *
* @tparam[in] ETK_VECTOR_TYPE class type of the current element. * @param[in] ETK_VECTOR_TYPE class type of the current element.
* *
* m_data * m_data
* <------------ m_dataSize ------------> * <------------ m_dataSize ------------>
@ -44,11 +44,11 @@ namespace etk {
public: public:
class Iterator { class Iterator {
private: private:
size_t m_current; //!< curent Id on the vector size_t m_current; //!< current Id on the vector
Vector<ETK_VECTOR_TYPE>* m_vector; //!< Pointer on the curent element of the vectorBin Vector<ETK_VECTOR_TYPE>* m_vector; //!< Pointer on the current element of the vectorBin
public: public:
/** /**
* @brief Basic itarator constructor with no link with an etkVector * @brief Basic iterator constructor with no link with an etk::Vector
*/ */
Iterator(): Iterator():
m_current(0), m_current(0),
@ -65,9 +65,9 @@ namespace etk {
// nothing to do ... // nothing to do ...
} }
/** /**
* @brief Asignation operator. * @brief Assignation operator.
* @param[in] _otherIterator The Iterator that might be copy * @param[in] _otherIterator The Iterator that might be copy
* @return reference on the curent Iterator * @return reference on the current Iterator
*/ */
Iterator& operator=(const Iterator & _otherIterator) { Iterator& operator=(const Iterator & _otherIterator) {
m_current = _otherIterator.m_current; m_current = _otherIterator.m_current;
@ -90,7 +90,7 @@ namespace etk {
} }
/** /**
* @brief Incremental operator * @brief Incremental operator
* @return Reference on the current iterator incremented * @return Reference on the current iterator increment
*/ */
Iterator& operator++ () { Iterator& operator++ () {
if ( m_vector != nullptr if ( m_vector != nullptr
@ -102,7 +102,7 @@ namespace etk {
} }
/** /**
* @brief Decremental operator * @brief Decremental operator
* @return Reference on the current iterator decremented * @return Reference on the current iterator decrement
*/ */
Iterator& operator-- () { Iterator& operator-- () {
if ( m_vector != nullptr if ( m_vector != nullptr
@ -154,8 +154,8 @@ namespace etk {
friend class Vector; friend class Vector;
}; };
private: private:
ETK_VECTOR_TYPE* m_data; //!< pointer on the curetn table of Data ETK_VECTOR_TYPE* m_data; //!< pointer on the current table of Data
size_t m_size; //!< nb Element in the buffer size_t m_size; //!< Number of element in the buffer
size_t m_allocated; //!< Current allocated size size_t m_allocated; //!< Current allocated size
public: public:
/** /**
@ -180,7 +180,7 @@ namespace etk {
// allocate all same data // allocate all same data
m_data = new ETK_VECTOR_TYPE[m_allocated]; m_data = new ETK_VECTOR_TYPE[m_allocated];
if (m_data == nullptr) { if (m_data == nullptr) {
TK_CRITICAL("Vector : Error in data allocation ... might nor work corectly anymore"); TK_CRITICAL("Vector : Error in data allocation ... might nor work correctly anymore");
return; return;
} }
// Copy all data ... // Copy all data ...
@ -221,7 +221,7 @@ namespace etk {
/** /**
* @brief Re-copy operator * @brief Re-copy operator
* @param[in] _obj Vector that might be copy * @param[in] _obj Vector that might be copy
* @return reference on the curent re-copy vector * @return reference on the current re-copy vector
*/ */
Vector& operator=(const etk::Vector<ETK_VECTOR_TYPE> & _obj) { Vector& operator=(const etk::Vector<ETK_VECTOR_TYPE> & _obj) {
//TK_DEBUG("USE RECOPY vector ... Evb.m_size=" << Evb.m_size << " Evb.m_increment=" << Evb.m_increment); //TK_DEBUG("USE RECOPY vector ... Evb.m_size=" << Evb.m_size << " Evb.m_increment=" << Evb.m_increment);
@ -236,7 +236,7 @@ namespace etk {
// allocate all same data // allocate all same data
m_data = new ETK_VECTOR_TYPE[m_allocated]; m_data = new ETK_VECTOR_TYPE[m_allocated];
if (m_data == nullptr) { if (m_data == nullptr) {
TK_CRITICAL("Vector : Error in data allocation ... might nor work corectly anymore"); TK_CRITICAL("Vector : Error in data allocation ... might nor work correctly anymore");
return *this; return *this;
} }
for(size_t iii=0; iii<m_allocated; iii++) { for(size_t iii=0; iii<m_allocated; iii++) {
@ -253,18 +253,18 @@ namespace etk {
* @param[in] _obj Element to add at the end of vector * @param[in] _obj Element to add at the end of vector
*/ */
Vector& operator+= (const etk::Vector<ETK_VECTOR_TYPE>& _obj) { Vector& operator+= (const etk::Vector<ETK_VECTOR_TYPE>& _obj) {
size_t nbElememt = _obj.size(); size_t numberElement = _obj.size();
size_t idx = m_size; size_t idElement = m_size;
resize(m_size+nbElememt); resize(m_size+numberElement);
if (m_size<=idx) { if (m_size<=idElement) {
TK_CRITICAL("allocation error"); TK_CRITICAL("allocation error");
return *this; return *this;
} }
for(size_t iii=0; iii<nbElememt; iii++) { for(size_t iii=0; iii<numberElement; iii++) {
// copy operator ... // copy operator ...
m_data[idx+iii] = _obj.m_data[iii]; m_data[idElement+iii] = _obj.m_data[iii];
} }
// Return the curent pointer // Return the current pointer
return *this; return *this;
} }
/** /**
@ -279,15 +279,15 @@ namespace etk {
* @param[in] _newSize New size of the vector * @param[in] _newSize New size of the vector
*/ */
void resize(size_t _newSize, const ETK_VECTOR_TYPE& _basicElement) { void resize(size_t _newSize, const ETK_VECTOR_TYPE& _basicElement) {
size_t idx = m_size; size_t idElement = m_size;
resize(_newSize); resize(_newSize);
if (m_size != _newSize) { if (m_size != _newSize) {
TK_CRITICAL("error to resize vector"); TK_CRITICAL("error to resize vector");
return; return;
} }
if (_newSize > idx) { if (_newSize > idElement) {
// initialize data ... // initialize data ...
for(size_t iii=idx; iii<_newSize; iii++) { for(size_t iii=idElement; iii<_newSize; iii++) {
m_data[iii] = _basicElement; m_data[iii] = _basicElement;
} }
} }
@ -308,7 +308,7 @@ namespace etk {
// NOTE :Do not change log level, this generate error only in debug mode // NOTE :Do not change log level, this generate error only in debug mode
#if DEBUG_LEVEL > 2 #if DEBUG_LEVEL > 2
if(_pos>m_size){ if(_pos>m_size){
TK_CRITICAL("[CRITICAL] Access to an unexistant data in vector : " << _pos << "/ " << m_size); TK_CRITICAL("[CRITICAL] Access to an inexistent data in vector : " << _pos << "/ " << m_size);
} }
#endif #endif
return m_data[_pos]; return m_data[_pos];
@ -330,7 +330,7 @@ namespace etk {
// NOTE :Do not change log level, this generate error only in debug mode // NOTE :Do not change log level, this generate error only in debug mode
#if DEBUG_LEVEL > 2 #if DEBUG_LEVEL > 2
if(_pos>m_size){ if(_pos>m_size){
TK_CRITICAL("[CRITICAL] Access to an unexistant data in vector : " << _pos << "/ " << m_size); TK_CRITICAL("[CRITICAL] Access to an inexistent data in vector : " << _pos << "/ " << m_size);
} }
#endif #endif
return m_data[_pos]; return m_data[_pos];
@ -355,12 +355,12 @@ namespace etk {
* @param[in] _item Element to add at the end of vector * @param[in] _item Element to add at the end of vector
*/ */
void pushBack(const ETK_VECTOR_TYPE& _item) { void pushBack(const ETK_VECTOR_TYPE& _item) {
size_t idx = m_size; size_t idElement = m_size;
resize(m_size+1); resize(m_size+1);
if (idx < m_size) { if (idElement < m_size) {
m_data[idx] = _item; m_data[idElement] = _item;
} else { } else {
TK_ERROR("Resize does not work corectly ... not added item"); TK_ERROR("Resize does not work correctly ... not added item");
} }
} }
/** /**
@ -372,14 +372,14 @@ namespace etk {
if (_item == nullptr) { if (_item == nullptr) {
return; return;
} }
size_t idx = m_size; size_t idElement = m_size;
resize(m_size+_nbElement); resize(m_size+_nbElement);
if (idx > m_size) { if (idElement > m_size) {
TK_ERROR("Resize does not work corectly ... not added item"); TK_ERROR("Resize does not work correctly ... not added item");
return; return;
} }
for (size_t iii=0; iii<_nbElement; iii++) { for (size_t iii=0; iii<_nbElement; iii++) {
m_data[idx+iii] = _item[iii]; m_data[idElement+iii] = _item[iii];
} }
} }
/** /**
@ -391,7 +391,7 @@ namespace etk {
} }
} }
/** /**
* @brief Remove all alement in the current vector * @brief Remove all element in the current vector
*/ */
void clear() { void clear() {
if(m_size>0) { if(m_size>0) {
@ -410,18 +410,18 @@ namespace etk {
pushBack(_item, _nbElement); pushBack(_item, _nbElement);
return; return;
} }
size_t idx = m_size; size_t idElement = m_size;
// Request resize of the current buffer // Request resize of the current buffer
resize(m_size+_nbElement); resize(m_size+_nbElement);
if (idx>=m_size) { if (idElement>=m_size) {
TK_ERROR("Resize does not work corectly ... not added item"); TK_ERROR("Resize does not work correctly ... not added item");
return; return;
} }
// move curent data (after the position) // move current data (after the position)
size_t sizeToMove = (idx - _pos); size_t sizeToMove = (idElement - _pos);
if ( 0 < sizeToMove) { if ( 0 < sizeToMove) {
for (size_t iii=1; iii<=sizeToMove; iii++) { for (size_t iii=1; iii<=sizeToMove; iii++) {
m_data[m_size-iii] = m_data[idx-iii]; m_data[m_size-iii] = m_data[idElement-iii];
} }
} }
// affectation of all input element // affectation of all input element
@ -450,9 +450,9 @@ namespace etk {
if (_pos+_nbElement>m_size) { if (_pos+_nbElement>m_size) {
_nbElement = m_size - _pos; _nbElement = m_size - _pos;
} }
size_t idx = m_size; size_t idElement = m_size;
// move curent data // move current data
size_t sizeToMove = (idx - (_pos+_nbElement)); size_t sizeToMove = (idElement - (_pos+_nbElement));
if ( 0 < sizeToMove) { if ( 0 < sizeToMove) {
for (size_t iii=0; iii<sizeToMove; iii++) { for (size_t iii=0; iii<sizeToMove; iii++) {
m_data[_pos+iii] = m_data[_pos+_nbElement+iii]; m_data[_pos+iii] = m_data[_pos+_nbElement+iii];
@ -490,7 +490,7 @@ namespace etk {
} }
size_t nbElement = m_size - _pos; size_t nbElement = m_size - _pos;
size_t tmpSize = m_size; size_t tmpSize = m_size;
// move curent data // move current data
size_t sizeToMove = (tmpSize - (_pos+nbElement)); size_t sizeToMove = (tmpSize - (_pos+nbElement));
if ( 0 < sizeToMove) { if ( 0 < sizeToMove) {
for (size_t iii=0; iii<sizeToMove; iii++) { for (size_t iii=0; iii<sizeToMove; iii++) {
@ -518,7 +518,7 @@ namespace etk {
return out; return out;
} }
/** /**
* @brief Get the pointer on the sata * @brief Get the pointer on the data
* @return the type pointer on data * @return the type pointer on data
*/ */
ETK_VECTOR_TYPE* dataPointer() { ETK_VECTOR_TYPE* dataPointer() {
@ -559,7 +559,7 @@ namespace etk {
m_size = _newSize; m_size = _newSize;
} }
/** /**
* @brief Change the current allocation to the corect one (depend on the current size) * @brief Change the current allocation to the correct one (depend on the current size)
* @param[in] _newSize Minimum number of element needed * @param[in] _newSize Minimum number of element needed
*/ */
void changeAllocation(size_t _newSize) { void changeAllocation(size_t _newSize) {
@ -568,7 +568,7 @@ namespace etk {
_newSize = 1; _newSize = 1;
} }
size_t requestSize = m_allocated; size_t requestSize = m_allocated;
// set the size with the corect chose type : // set the size with the correct chose type :
if (_newSize == requestSize) { if (_newSize == requestSize) {
return; return;
} else if (_newSize < requestSize) { } else if (_newSize < requestSize) {
@ -629,7 +629,7 @@ namespace etk {
if( this == &_obj ) { if( this == &_obj ) {
return true; return true;
} }
// fiist step : check the size ... // first step : check the size ...
if (m_size != _obj.m_size) { if (m_size != _obj.m_size) {
return false; return false;
} }
@ -652,7 +652,7 @@ namespace etk {
if( this == &_obj ) { if( this == &_obj ) {
return false; return false;
} }
// fiist step : check the size ... // first step : check the size ...
if (m_size!=_obj.m_size) { if (m_size!=_obj.m_size) {
return true; return true;
} }

View File

@ -34,11 +34,11 @@ namespace etk {
#define TK_HIDDEN(data) do { } while(false) #define TK_HIDDEN(data) do { } while(false)
#define TK_ASSERT(cond,data) \ #define TK_ASSERT(condition,data) \
do { \ do { \
if (!(cond)) { \ if (!(condition)) { \
TK_CRITICAL(data); \ TK_CRITICAL(data); \
assert(!#cond); \ assert(!#condition); \
} \ } \
} while (0) } while (0)

View File

@ -16,17 +16,17 @@ static int32_t nbTimeInit = 0;
void etk::unInit() { void etk::unInit() {
if (nbTimeInit > 1) { if (nbTimeInit > 1) {
nbTimeInit--; nbTimeInit--;
// not the time to uninit // not the time to un-init
return; return;
} }
nbTimeInit--; nbTimeInit--;
if (nbTimeInit < 0) { if (nbTimeInit < 0) {
TK_ERROR("E-TK system un-init More un-init than init ..."); TK_ERROR("ETK system un-init More un-init than init ...");
nbTimeInit = 0; nbTimeInit = 0;
return; return;
} }
TK_INFO("E-TK system un-init (BEGIN)"); TK_INFO("ETK system un-init (BEGIN)");
TK_INFO("E-TK system un-init (END)"); TK_INFO("ETK system un-init (END)");
} }
void etk::init(int _argc, const char** _argv) { void etk::init(int _argc, const char** _argv) {
@ -37,9 +37,9 @@ void etk::init(int _argc, const char** _argv) {
} }
nbTimeInit++; nbTimeInit++;
if (_argc >= 1) { if (_argc >= 1) {
TK_INFO("E-TK system init (BEGIN) " << _argv[0]); TK_INFO("ETK system init (BEGIN) " << _argv[0]);
} else { } else {
TK_INFO("E-TK system init (BEGIN) "); TK_INFO("ETK system init (BEGIN) ");
} }
elog::init(_argc, _argv); elog::init(_argc, _argv);
#if !defined(__TARGET_OS__Android) and !defined(__TARGET_OS__IOs) #if !defined(__TARGET_OS__Android) and !defined(__TARGET_OS__IOs)
@ -67,7 +67,7 @@ void etk::init(int _argc, const char** _argv) {
TK_ERROR("Can not parse the argument : '" << data << "'"); TK_ERROR("Can not parse the argument : '" << data << "'");
} }
} }
TK_INFO("E-TK system init (END)"); TK_INFO("ETK system init (END)");
} }
std::string etk::getApplicationName() { std::string etk::getApplicationName() {

View File

@ -7,7 +7,7 @@
#include <string> #include <string>
/** /**
* @brief basic namespace of the etk library. (it might contain all the etk fuctions/class/structures without macro) * @brief basic namespace of the etk library. (it might contain all the etk functions/class/structures without macro)
*/ */
namespace etk { namespace etk {
/** /**

View File

@ -92,11 +92,11 @@ static uint32_t getUtf8Val(char32_t _val) {
output+= (_val & 0x00000FC0)<<2; output+= (_val & 0x00000FC0)<<2;
output+= _val & 0x0000003F; output+= _val & 0x0000003F;
} else { } else {
//TK_ERROR("NON UTF8 caracter input..."); //TK_ERROR("NOT UTF8 character input...");
printf("not an utf8 char : %#08x\n", _val); printf("not an utf8 char : %#08x\n", _val);
return 0; return 0;
} }
//printf("utf8convertion : %d=%08x ==> %08x\n",value, value, output); //printf("utf-8 conversion : %d=%08x ==> %08x\n",value, value, output);
return output; return output;
} }
@ -172,7 +172,7 @@ char32_t utf8::convertChar32(const char* _input) {
len = sizeElement(_input, len); len = sizeElement(_input, len);
switch (len) { switch (len) {
default: default:
// case 0 : An error occured... // case 0 : An error occurred...
value = _input[0]; value = _input[0];
return value; return value;
case 1: case 1:
@ -196,7 +196,7 @@ char32_t utf8::convertChar32(const char* _input) {
} }
} }
int8_t utf8::theoricLen(const char _input) { int8_t utf8::length(const char _input) {
if((_input&0x80) == 0x00 ) { if((_input&0x80) == 0x00 ) {
return 1; return 1;
} }
@ -212,8 +212,8 @@ int8_t utf8::theoricLen(const char _input) {
return 1; return 1;
} }
bool utf8::theoricFirst(const char _input) { bool utf8::first(const char _input) {
// When started with the bit 0 then the size is signle element. // When started with the bit 0 then the size is single element.
if((_input&0x80) == 0x00 ) { if((_input&0x80) == 0x00 ) {
return true; return true;
} }
@ -525,11 +525,12 @@ bool etk::compare_no_case(const std::string& _obj, const std::string& _val) {
return true; return true;
} }
struct doublette { class DoubleChar {
char32_t lower; public:
char32_t upper; char32_t lower;
char32_t upper;
}; };
struct doublette convertionTable[] = { DoubleChar conversionTable[] = {
#if __CPP_VERSION__ >= 2011 #if __CPP_VERSION__ >= 2011
{U'ç', U'Ç'}, {U'ç', U'Ç'},
@ -553,15 +554,15 @@ struct doublette convertionTable[] = {
{U'ø', U'Ø'} {U'ø', U'Ø'}
#endif #endif
}; };
size_t convertionTableSize = sizeof(convertionTable)/sizeof(struct doublette); size_t conversionTableSize = sizeof(conversionTable)/sizeof(DoubleChar);
static char32_t localToUpper(char32_t _input) { static char32_t localToUpper(char32_t _input) {
if (_input >= 'a' && _input <= 'z') { if (_input >= 'a' && _input <= 'z') {
return _input + ((int)'A'-(int)'a'); return _input + ((int)'A'-(int)'a');
} }
for (size_t iii = 0; iii < convertionTableSize; ++iii) { for (size_t iii = 0; iii < conversionTableSize; ++iii) {
if (convertionTable[iii].lower == _input) { if (conversionTable[iii].lower == _input) {
return convertionTable[iii].upper; return conversionTable[iii].upper;
} }
} }
return _input; return _input;
@ -571,9 +572,9 @@ static char32_t localToLower(char32_t _input) {
if (_input >= 'A' && _input <= 'Z') { if (_input >= 'A' && _input <= 'Z') {
return _input + ((int)'a'-(int)'A'); return _input + ((int)'a'-(int)'A');
} }
for (size_t iii = 0; iii < convertionTableSize; ++iii) { for (size_t iii = 0; iii < conversionTableSize; ++iii) {
if (convertionTable[iii].upper == _input) { if (conversionTable[iii].upper == _input) {
return convertionTable[iii].lower; return conversionTable[iii].lower;
} }
} }
return _input; return _input;
@ -936,12 +937,12 @@ void etk::sort(std::vector<std::string *> &_list) {
for(size_t iii=0; iii<tmpList.size(); iii++) { for(size_t iii=0; iii<tmpList.size(); iii++) {
size_t findPos = 0; size_t findPos = 0;
for(size_t jjj=0; jjj<_list.size(); jjj++) { for(size_t jjj=0; jjj<_list.size(); jjj++) {
//EWOL_DEBUG("compare : \""<<*tmpList[iii] << "\" and \"" << *m_listDirectory[jjj] << "\""); //TK_DEBUG("compare : \""<<*tmpList[iii] << "\" and \"" << *m_listDirectory[jjj] << "\"");
if (*tmpList[iii] > *_list[jjj]) { if (*tmpList[iii] > *_list[jjj]) {
findPos = jjj+1; findPos = jjj+1;
} }
} }
//EWOL_DEBUG("position="<<findPos); //TK_DEBUG("position="<<findPos);
_list.insert(_list.begin()+findPos, tmpList[iii]); _list.insert(_list.begin()+findPos, tmpList[iii]);
} }
} }
@ -952,12 +953,12 @@ void etk::sort(std::vector<std::string *> &_list) {
for(size_t iii=0; iii<tmpList.size(); iii++) { for(size_t iii=0; iii<tmpList.size(); iii++) {
size_t findPos = 0; size_t findPos = 0;
for(size_t jjj=0; jjj<_list.size(); jjj++) { for(size_t jjj=0; jjj<_list.size(); jjj++) {
//EWOL_DEBUG("compare : \""<<*tmpList[iii] << "\" and \"" << *m_listDirectory[jjj] << "\""); //TK_DEBUG("compare : \""<<*tmpList[iii] << "\" and \"" << *m_listDirectory[jjj] << "\"");
if (*tmpList[iii] > *_list[jjj]) { if (*tmpList[iii] > *_list[jjj]) {
findPos = jjj+1; findPos = jjj+1;
} }
} }
//EWOL_DEBUG("position="<<findPos); //TK_DEBUG("position="<<findPos);
_list.insert(_list.begin()+findPos, tmpList[iii]); _list.insert(_list.begin()+findPos, tmpList[iii]);
} }
} }
@ -1277,42 +1278,42 @@ std::ostream& std::operator <<(std::ostream& _os, const std::vector<uint8_t>& _o
return tmpVal; return tmpVal;
} }
double std::stod(const std::string& _str, size_t* _idx) { double std::stod(const std::string& _str, size_t* _id) {
double ret = 0; double ret = 0;
sscanf(_str.c_str(), "%lf", &ret); sscanf(_str.c_str(), "%lf", &ret);
return ret; return ret;
} }
float std::stof(const std::string& _str, size_t* _idx) { float std::stof(const std::string& _str, size_t* _id) {
float ret = 0; float ret = 0;
sscanf(_str.c_str(), "%f", &ret); sscanf(_str.c_str(), "%f", &ret);
return ret; return ret;
} }
int std::stoi(const std::string& _str, size_t* _idx, int _base) { int std::stoi(const std::string& _str, size_t* _id, int _base) {
int ret = 0; int ret = 0;
sscanf(_str.c_str(), "%d", &ret); sscanf(_str.c_str(), "%d", &ret);
return ret; return ret;
} }
long std::stol(const std::string& _str, size_t* _idx, int _base) { long std::stol(const std::string& _str, size_t* _id, int _base) {
long ret = 0; long ret = 0;
sscanf(_str.c_str(), "%ld", &ret); sscanf(_str.c_str(), "%ld", &ret);
return ret; return ret;
} }
long double std::stold(const std::string& _str, size_t* _idx) { long double std::stold(const std::string& _str, size_t* _id) {
long double ret = 0; long double ret = 0;
sscanf(_str.c_str(), "%Lf", &ret); sscanf(_str.c_str(), "%Lf", &ret);
return ret; return ret;
} }
long long std::stoll(const std::string& _str, size_t* _idx, int _base) { long long std::stoll(const std::string& _str, size_t* _id, int _base) {
long long ret = 0; long long ret = 0;
sscanf(_str.c_str(), "%lld", &ret); sscanf(_str.c_str(), "%lld", &ret);
return ret; return ret;
} }
unsigned long std::stoul(const std::string& _str, size_t* _idx, int _base) { unsigned long std::stoul(const std::string& _str, size_t* _id, int _base) {
unsigned long ret = 0; unsigned long ret = 0;
sscanf(_str.c_str(), "%lu", &ret); sscanf(_str.c_str(), "%lu", &ret);
return ret; return ret;
} }
unsigned long long std::stoull(const std::string& _str, size_t* _idx, int _base) { unsigned long long std::stoull(const std::string& _str, size_t* _id, int _base) {
unsigned long long ret = 0; unsigned long long ret = 0;
sscanf(_str.c_str(), "%llu", &ret); sscanf(_str.c_str(), "%llu", &ret);
return ret; return ret;

View File

@ -28,39 +28,39 @@ namespace u32char {
extern const char32_t Escape; //!< Value ESC Escape extern const char32_t Escape; //!< Value ESC Escape
/** /**
* @brief check if the current element is white or not : '\\t' '\\n' '\\r' ' ' * @brief check if the current element is white or not : '\\t' '\\n' '\\r' ' '
* @param[in] _val Value to interprete * @param[in] _val Value to interpret
* @return true if it is white char * @return true if it is white char
* @return false otherwise * @return false otherwise
*/ */
bool isWhiteChar(char32_t _val); bool isWhiteChar(char32_t _val);
/** /**
* @brief check if the current element is NOT [a-zA-Z0-9] * @brief check if the current element is NOT [a-zA-Z0-9]
* @param[in] _val Value to interprete * @param[in] _val Value to interpret
* @return true Not in the previous list * @return true Not in the previous list
* @return false otherwise * @return false otherwise
*/ */
bool isSpecialChar(char32_t _val); bool isSpecialChar(char32_t _val);
/** /**
* @brief check if the curent element is number or not [0-9] * @brief check if the current element is number or not [0-9]
* @param[in] _val Value to interprete * @param[in] _val Value to interpret
* @return true if it is a number char * @return true if it is a number char
* @return false otherwise * @return false otherwise
*/ */
bool isInteger(char32_t _val); bool isInteger(char32_t _val);
/** /**
* @brief Convert char32_t in an interfer * @brief Convert char32_t in an integer
* @param[in] _val Value to interprete * @param[in] _val Value to interpret
* @return The parsed Value or ... * @return The parsed Value or ...
*/ */
int32_t toInt(char32_t _val); int32_t toInt(char32_t _val);
/** /**
* @brief Change order of the value to have an order of display with A->Z and after a->z and after 0->9 and after all the rest .... * @brief Change order of the value to have an order of display with A->Z and after a->z and after 0->9 and after all the rest ....
* @param[in] _val Value in unicode * @param[in] _val Value in unicode
* @return A value usable in interfer only ... to check order... * @return A value usable in integer only ... to check order...
*/ */
char32_t changeOrder(char32_t _val); char32_t changeOrder(char32_t _val);
/** /**
* @brief Conver unicode in UTF8 value * @brief Convert unicode in UTF8 value
* @param[in] _val Value to convert * @param[in] _val Value to convert
* @param[out] _output Char data converted * @param[out] _output Char data converted
* @return Number of char in utf8 * @return Number of char in utf8
@ -80,13 +80,13 @@ namespace utf8 {
* @param[in] _input Char to parse * @param[in] _input Char to parse
* @return number of char needed * @return number of char needed
*/ */
int8_t theoricLen(const char _input); int8_t length(const char _input);
/** /**
* @brief When parsing a string in a reverse mode, we need to know if we get the first char * @brief When parsing a string in a reverse mode, we need to know if we get the first char
* @param[in] _input Char to parse. * @param[in] _input Char to parse.
* @return true if it was the first char. * @return true if it was the first char.
*/ */
bool theoricFirst(const char _input); bool first(const char _input);
/** /**
* @brief Convert a char* in a unicode value * @brief Convert a char* in a unicode value
* @param[in] _input pointer on a string C (utf-8) to convert * @param[in] _input pointer on a string C (utf-8) to convert
@ -101,9 +101,9 @@ namespace utf8 {
*/ */
class iterator { class iterator {
private: private:
char32_t m_value; //!< store vlue to prevent multiple calcule of getting the data char32_t m_value; //!< store value to prevent multiple calculation of getting the data
std::string* m_data; //!< Pointer on the current Buffer std::string* m_data; //!< Pointer on the current Buffer
int64_t m_current; //!< curent Id in the Buffer int64_t m_current; //!< current Id in the Buffer
public: public:
/** /**
* @brief Basic constructor that is not link on a string * @brief Basic constructor that is not link on a string
@ -195,9 +195,9 @@ namespace utf8 {
// nothing to do ... // nothing to do ...
}; };
/** /**
* @brief Asignation operator. * @brief Assignation operator.
* @param[in] _obj The Iterator that might be copy * @param[in] _obj The Iterator that might be copy
* @return reference on the curent Iterator * @return reference on the current Iterator
*/ */
iterator& operator=(const iterator & _obj) { iterator& operator=(const iterator & _obj) {
m_current = _obj.m_current; m_current = _obj.m_current;
@ -231,12 +231,12 @@ namespace utf8 {
}; };
/** /**
* @brief Incremental operator * @brief Incremental operator
* @return Reference on the current iterator incremented * @return Reference on the current iterator increment
*/ */
iterator& operator++ (); iterator& operator++ ();
/** /**
* @brief Decremental operator * @brief Decremental operator
* @return Reference on the current iterator decremented * @return Reference on the current iterator decrement
*/ */
iterator& operator-- (); iterator& operator-- ();
/** /**
@ -258,7 +258,7 @@ namespace utf8 {
return it; return it;
}; };
/** /**
* @brief egality iterator * @brief equality iterator
* @param[in] _obj Iterator to compare * @param[in] _obj Iterator to compare
* @return true if the iterator is identical pos * @return true if the iterator is identical pos
*/ */
@ -270,7 +270,7 @@ namespace utf8 {
return false; return false;
}; };
/** /**
* @brief egality iterator * @brief equality iterator
* @param[in] _obj Iterator to compare * @param[in] _obj Iterator to compare
* @return true if the iterator is identical pos * @return true if the iterator is identical pos
*/ */
@ -364,64 +364,64 @@ namespace utf8 {
* @return a new iterator. * @return a new iterator.
*/ */
iterator operator+ (const int64_t _val) const { iterator operator+ (const int64_t _val) const {
iterator tmpp(*this); iterator tmp(*this);
for (int64_t iii=0; iii<_val; ++iii) { for (int64_t iii=0; iii<_val; ++iii) {
++tmpp; ++tmp;
} }
return tmpp; return tmp;
}; };
/** /**
* @copydoc utf8::iterator::operator+ (const int64_t) * @copydoc utf8::iterator::operator+ (const int64_t)
*/ */
iterator operator+ (const int32_t _val) const { iterator operator+ (const int32_t _val) const {
iterator tmpp(*this); iterator tmp(*this);
for (int64_t iii=0; iii<_val; ++iii) { for (int64_t iii=0; iii<_val; ++iii) {
++tmpp; ++tmp;
} }
return tmpp; return tmp;
}; }
/** /**
* @copydoc utf8::iterator::operator+ (const int64_t) * @copydoc utf8::iterator::operator+ (const int64_t)
*/ */
iterator operator+ (const size_t _val) const { iterator operator+ (const size_t _val) const {
iterator tmpp(*this); iterator tmp(*this);
for (int64_t iii=0; iii<(int64_t)_val; ++iii) { for (int64_t iii=0; iii<(int64_t)_val; ++iii) {
++tmpp; ++tmp;
} }
return tmpp; return tmp;
}; }
/** /**
* @brief move the element position * @brief move the element position
* @param[in] _val Value to remove on the Iterator * @param[in] _val Value to remove on the Iterator
* @return a new iterator. * @return a new iterator.
*/ */
iterator operator- (const int64_t _val) const { iterator operator- (const int64_t _val) const {
iterator tmpp(*this); iterator tmp(*this);
for (int64_t iii=0; iii<_val; ++iii) { for (int64_t iii=0; iii<_val; ++iii) {
--tmpp; --tmp;
} }
return tmpp; return tmp;
}; }
/** /**
* @copydoc utf8::iterator::operator- (const int64_t) * @copydoc utf8::iterator::operator- (const int64_t)
*/ */
iterator operator- (const int32_t _val) const { iterator operator- (const int32_t _val) const {
iterator tmpp(*this); iterator tmp(*this);
for (int64_t iii=0; iii<_val; ++iii) { for (int64_t iii=0; iii<_val; ++iii) {
--tmpp; --tmp;
} }
return tmpp; return tmp;
}; }
/** /**
* @copydoc utf8::iterator::operator- (const int64_t) * @copydoc utf8::iterator::operator- (const int64_t)
*/ */
iterator operator- (const size_t _val) const { iterator operator- (const size_t _val) const {
iterator tmpp(*this); iterator tmp(*this);
for (int64_t iii=0; iii<(int64_t)_val; ++iii) { for (int64_t iii=0; iii<(int64_t)_val; ++iii) {
--tmpp; --tmp;
} }
return tmpp; return tmp;
}; }
/* /*
iterator begin() const { iterator begin() const {
return iterator(m_data); return iterator(m_data);
@ -457,34 +457,34 @@ namespace std {
//! @not_in_doc //! @not_in_doc
std::string to_string(long double _val); std::string to_string(long double _val);
//! @not_in_doc //! @not_in_doc
double stod(const std::string& _str, size_t* _idx = 0); double stod(const std::string& _str, size_t* _id = 0);
//! @not_in_doc //! @not_in_doc
float stof(const std::string& _str, size_t* _idx = 0); float stof(const std::string& _str, size_t* _id = 0);
//! @not_in_doc //! @not_in_doc
int stoi(const std::string& _str, size_t* _idx = 0, int _base = 10); int stoi(const std::string& _str, size_t* _id = 0, int _base = 10);
//! @not_in_doc //! @not_in_doc
long stol(const std::string& _str, size_t* _idx = 0, int _base = 10); long stol(const std::string& _str, size_t* _id = 0, int _base = 10);
//! @not_in_doc //! @not_in_doc
long double stold(const std::string& _str, size_t* _idx = 0); long double stold(const std::string& _str, size_t* _id = 0);
//! @not_in_doc //! @not_in_doc
long long stoll(const std::string& _str, size_t* _idx = 0, int _base = 10); long long stoll(const std::string& _str, size_t* _id = 0, int _base = 10);
//! @not_in_doc //! @not_in_doc
unsigned long stoul(const std::string& _str, size_t* _idx = 0, int _base = 10); unsigned long stoul(const std::string& _str, size_t* _id = 0, int _base = 10);
//! @not_in_doc //! @not_in_doc
unsigned long long stoull(const std::string& _str, size_t* _idx = 0, int _base = 10); unsigned long long stoull(const std::string& _str, size_t* _id = 0, int _base = 10);
#endif #endif
}; };
namespace etk { namespace etk {
// these declaration is to prevent some under template declaration of unknown type // these declaration is to prevent some under template declaration of unknown type
/** /**
* @brief Template to declare convertion from anything in std::string * @brief Template to declare conversion from anything in std::string
* @param[in] _variable Variable to convert * @param[in] _variable Variable to convert
* @return String of the value * @return String of the value
*/ */
template <class TYPE> template <class TYPE>
std::string to_string(const TYPE& _variable); std::string to_string(const TYPE& _variable);
/** /**
* @brief Template to declare convertion from std::vector<anything> in std::string * @brief Template to declare conversion from std::vector<anything> in std::string
* @param[in] _list Variable to convert * @param[in] _list Variable to convert
* @return String of the value: {...,...,...} * @return String of the value: {...,...,...}
*/ */
@ -506,7 +506,7 @@ namespace etk {
#endif #endif
// these declaration is to prevent some under template declaration of unknown type // these declaration is to prevent some under template declaration of unknown type
/** /**
* @brief Template to declare convertion from string to anything * @brief Template to declare conversion from string to anything
* @param[out] _variableRet Output value * @param[out] _variableRet Output value
* @param[in] _value input property * @param[in] _value input property
* @return true if the can be converted. * @return true if the can be converted.
@ -652,7 +652,7 @@ namespace etk {
namespace std { namespace std {
/** /**
* @brief in std, we have min, max but not avg ==> it is missing... the Defineing avg template. * @brief in std, we have min, max but not avg ==> it is missing... the define of avg template.
* @param[in] _min Minimum value of the range * @param[in] _min Minimum value of the range
* @param[in] _val The value that we want a min/max * @param[in] _val The value that we want a min/max
* @param[in] _max Maximum value of the range * @param[in] _max Maximum value of the range
@ -665,7 +665,7 @@ namespace std {
namespace etk { namespace etk {
/** /**
* @brief in std, we have min, max but not avg ==> it is missing... the Defineing avg template. * @brief in std, we have min, max but not avg ==> it is missing... the Define of avg template.
* @param[in] _min Minimum value of the range * @param[in] _min Minimum value of the range
* @param[in] _val The value that we want a min/max * @param[in] _val The value that we want a min/max
* @param[in] _max Maximum value of the range * @param[in] _max Maximum value of the range
@ -714,9 +714,9 @@ namespace std {
} }
/** /**
* @brief Claculate the size of a string (unicode) * @brief Calculate the size of a string (unicode)
* @param[in] _data Data to parse to find the end of string * @param[in] _data Data to parse to find the end of string
* @return the Number of char32_t befor the '\\0' value * @return The Number of char32_t before the '\\0' value
*/ */
int32_t strlen(const char32_t* _data); int32_t strlen(const char32_t* _data);

View File

@ -10,7 +10,7 @@
namespace etk { namespace etk {
/** /**
* @brief Some un-usefull tools * @brief Some useful tools
* @todo Remove all of this use std11 random * @todo Remove all of this use std11 random
*/ */
namespace tool { namespace tool {

View File

@ -34,7 +34,7 @@ def configure(target, my_module):
'etk/tool.cpp', 'etk/tool.cpp',
'etk/Noise.cpp', 'etk/Noise.cpp',
'etk/Color.cpp', 'etk/Color.cpp',
'etk/RegExp.cpp', 'etk/RegEx.cpp',
'etk/math/Matrix2x2.cpp', 'etk/math/Matrix2x2.cpp',
'etk/math/Matrix2x3.cpp', 'etk/math/Matrix2x3.cpp',
'etk/math/Matrix3x3.cpp', 'etk/math/Matrix3x3.cpp',
@ -57,7 +57,7 @@ def configure(target, my_module):
'etk/tool.hpp', 'etk/tool.hpp',
'etk/Noise.hpp', 'etk/Noise.hpp',
'etk/Color.hpp', 'etk/Color.hpp',
'etk/RegExp.hpp', 'etk/RegEx.hpp',
'etk/Buffer.hpp', 'etk/Buffer.hpp',
'etk/Hash.hpp', 'etk/Hash.hpp',
'etk/math/Matrix2x2.hpp', 'etk/math/Matrix2x2.hpp',

View File

@ -7,18 +7,18 @@
*/ */
#include <gtest/gtest.h> #include <gtest/gtest.h>
#include <etk/RegExp.hpp> #include <etk/RegEx.hpp>
#include <test-debug/debug.hpp> #include <test-debug/debug.hpp>
#define NAME "Hash" #define NAME "Hash"
std::pair<int32_t, int32_t> testRegExpSingle(const std::string& _expression, const std::string& _search) { std::pair<int32_t, int32_t> testRegExSingle(const std::string& _expression, const std::string& _search) {
etk::RegExp<std::string> expression(_expression); etk::RegEx<std::string> expression(_expression);
TK_INFO("Parse RegEx: \"" << expression.getRegExDecorated() << "\""); TK_INFO("Parse RegEx: \"" << expression.getRegExDecorated() << "\"");
TK_INFO(" IN: \"" << etk::regexp::autoStr(_search) << "\""); TK_INFO(" IN: \"" << etk::regex::autoStr(_search) << "\"");
if (expression.parse(_search, 0, _search.size()) == true) { if (expression.parse(_search, 0, _search.size()) == true) {
TK_INFO(" match [" << expression.start() << ".." << expression.stop() << "] "); TK_INFO(" match [" << expression.start() << ".." << expression.stop() << "] ");
TK_INFO(" ==> '" << etk::regexp::autoStr(std::string(_search, expression.start(), expression.stop() - expression.start())) << "'"); TK_INFO(" ==> '" << etk::regex::autoStr(std::string(_search, expression.start(), expression.stop() - expression.start())) << "'");
return std::make_pair(expression.start(), expression.stop()); return std::make_pair(expression.start(), expression.stop());
} }
TK_INFO(" ==> ---------------"); TK_INFO(" ==> ---------------");
@ -29,95 +29,95 @@ static std::string data1 = " a /* plop */ \n int eee = 22; // error value \nint
static std::string data2 = "alpha /* plop */ test"; static std::string data2 = "alpha /* plop */ test";
static std::string data3 = "pp \n // qdfqdfsdf \nde"; static std::string data3 = "pp \n // qdfqdfsdf \nde";
TEST(TestEtkRegExp, MultipleLineComment ) { TEST(TestEtkRegEx, MultipleLineComment ) {
std::string expression = "/\\*.*\\*/"; std::string expression = "/\\*.*\\*/";
std::pair<int32_t, int32_t> res; std::pair<int32_t, int32_t> res;
res = testRegExpSingle(expression, data1); res = testRegExSingle(expression, data1);
EXPECT_EQ(res, std::make_pair(3,13)); EXPECT_EQ(res, std::make_pair(3,13));
res = testRegExpSingle(expression, data2); res = testRegExSingle(expression, data2);
EXPECT_EQ(res, std::make_pair(6,16)); EXPECT_EQ(res, std::make_pair(6,16));
res = testRegExpSingle(expression, data3); res = testRegExSingle(expression, data3);
EXPECT_EQ(res, std::make_pair(0,0)); EXPECT_EQ(res, std::make_pair(0,0));
} }
TEST(TestEtkRegExp, MultipleEndDollar ) { TEST(TestEtkRegEx, MultipleEndDollar ) {
std::string expression = "//.*$"; std::string expression = "//.*$";
std::pair<int32_t, int32_t> res; std::pair<int32_t, int32_t> res;
res = testRegExpSingle(expression, data1); res = testRegExSingle(expression, data1);
EXPECT_EQ(res, std::make_pair(30,46)); EXPECT_EQ(res, std::make_pair(30,46));
res = testRegExpSingle(expression, data2); res = testRegExSingle(expression, data2);
EXPECT_EQ(res, std::make_pair(0,0)); EXPECT_EQ(res, std::make_pair(0,0));
res = testRegExpSingle(expression, data3); res = testRegExSingle(expression, data3);
EXPECT_EQ(res, std::make_pair(5,19)); EXPECT_EQ(res, std::make_pair(5,19));
} }
TEST(TestEtkRegExp, MultipleNoEnd ) { TEST(TestEtkRegEx, MultipleNoEnd ) {
std::string expression = "/\\*.*"; std::string expression = "/\\*.*";
std::pair<int32_t, int32_t> res; std::pair<int32_t, int32_t> res;
res = testRegExpSingle(expression, data1); res = testRegExSingle(expression, data1);
EXPECT_EQ(res, std::make_pair(3,5)); EXPECT_EQ(res, std::make_pair(3,5));
res = testRegExpSingle(expression, data2); res = testRegExSingle(expression, data2);
EXPECT_EQ(res, std::make_pair(6,8)); EXPECT_EQ(res, std::make_pair(6,8));
res = testRegExpSingle(expression, data3); res = testRegExSingle(expression, data3);
EXPECT_EQ(res, std::make_pair(0,0)); EXPECT_EQ(res, std::make_pair(0,0));
} }
TEST(TestEtkRegExp, aToZ ) { TEST(TestEtkRegEx, aToZ ) {
std::string expression = "[a-z]"; std::string expression = "[a-z]";
std::pair<int32_t, int32_t> res; std::pair<int32_t, int32_t> res;
res = testRegExpSingle(expression, data1); res = testRegExSingle(expression, data1);
EXPECT_EQ(res, std::make_pair(1,2)); EXPECT_EQ(res, std::make_pair(1,2));
res = testRegExpSingle(expression, data2); res = testRegExSingle(expression, data2);
EXPECT_EQ(res, std::make_pair(0,1)); EXPECT_EQ(res, std::make_pair(0,1));
res = testRegExpSingle(expression, data3); res = testRegExSingle(expression, data3);
EXPECT_EQ(res, std::make_pair(0,1)); EXPECT_EQ(res, std::make_pair(0,1));
} }
TEST(TestEtkRegExp, complexString ) { TEST(TestEtkRegEx, complexString ) {
std::string expression = "a.*plop(z{2,3}|h+)+r"; std::string expression = "a.*plop(z{2,3}|h+)+r";
std::string dataToParse = " eesd a lzzml plophzzzzzhhhhhrlkmlkml"; std::string dataToParse = " eesd a lzzml plophzzzzzhhhhhrlkmlkml";
std::pair<int32_t, int32_t> res; std::pair<int32_t, int32_t> res;
res = testRegExpSingle(expression, dataToParse); res = testRegExSingle(expression, dataToParse);
EXPECT_EQ(res, std::make_pair(7,31)); EXPECT_EQ(res, std::make_pair(7,31));
} }
TEST(TestEtkRegExp, multipleUnderscore ) { TEST(TestEtkRegEx, multipleUnderscore ) {
std::string expression = "\\@\\w+_\\@"; std::string expression = "\\@\\w+_\\@";
std::string dataToParse = " aaa_bbb_ plop_ "; std::string dataToParse = " aaa_bbb_ plop_ ";
std::pair<int32_t, int32_t> res; std::pair<int32_t, int32_t> res;
res = testRegExpSingle(expression, dataToParse); res = testRegExSingle(expression, dataToParse);
EXPECT_EQ(res, std::make_pair(2,10)); EXPECT_EQ(res, std::make_pair(2,10));
} }
TEST(TestEtkRegExp, endError ) { TEST(TestEtkRegEx, endError ) {
std::string expression = "\\@((0(x|X)[0-9a-fA-F]*)|(\\d+\\.?\\d*|\\.\\d+)((e|E)(\\+|\\-)?\\d+)?)(LL|L|l|UL|ul|u|U|F|f)?\\@"; std::string expression = "\\@((0(x|X)[0-9a-fA-F]*)|(\\d+\\.?\\d*|\\.\\d+)((e|E)(\\+|\\-)?\\d+)?)(LL|L|l|UL|ul|u|U|F|f)?\\@";
std::string dataToParse = "(95"; std::string dataToParse = "(95";
std::pair<int32_t, int32_t> res; std::pair<int32_t, int32_t> res;
res = testRegExpSingle(expression, dataToParse); res = testRegExSingle(expression, dataToParse);
EXPECT_EQ(res, std::make_pair(7,31)); EXPECT_EQ(res, std::make_pair(7,31));
} }
void testRegExp() { void testRegEx() {
std::string data; std::string data;
//std::string data = "pp \n# plop // qdfqdfsdf \nde"; //std::string data = "pp \n# plop // qdfqdfsdf \nde";
//std::string data = "pp \n# plop //\\\n qdfqdfsdf \nde"; //std::string data = "pp \n# plop //\\\n qdfqdfsdf \nde";
//std::string data = "p#\ne"; //std::string data = "p#\ne";
//testRegExpSingle("#(\\\\\\\\|\\\\\\n|.)*$", data); //testRegExSingle("#(\\\\\\\\|\\\\\\n|.)*$", data);
//testRegExpSingle("#.*$", data); //testRegExSingle("#.*$", data);
//std::string data = "p//TODO:\ndse"; //std::string data = "p//TODO:\ndse";
//std::string data = "p// TODO:\ndse"; //std::string data = "p// TODO:\ndse";
//std::string data = "p// TODO :\ndse"; //std::string data = "p// TODO :\ndse";
//std::string data = "p// TODO : sdfgsdfsd \ndse"; //std::string data = "p// TODO : sdfgsdfsd \ndse";
//testRegExpSingle("//[ \\t]*TODO[ \\t]*:.*$", data); //testRegExSingle("//[ \\t]*TODO[ \\t]*:.*$", data);
data = "abc m_def ghi"; data = "abc m_def ghi";
data = " protected:\n" data = " protected:\n"
" vec2 m_offset; \n"; " vec2 m_offset; \n";
//testRegExpSingle("\\@m_[A-Za-z_0-9]*\\@", data); //testRegExSingle("\\@m_[A-Za-z_0-9]*\\@", data);
data = " * @param[in] _mode Configuring mode.\n" data = " * @param[in] _mode Configuring mode.\n"
@ -126,7 +126,7 @@ void testRegExp() {
" void setAnnimationTime(enum "; " void setAnnimationTime(enum ";
data = "virtual vec2 relativePosition(const vec2& _pos);"; data = "virtual vec2 relativePosition(const vec2& _pos);";
//testRegExpSingle("\\@(\\w|_)+[ \\t]*\\(", data); //testRegExSingle("\\@(\\w|_)+[ \\t]*\\(", data);
data = "include <ewol/Dimensio2n.h>\n" data = "include <ewol/Dimensio2n.h>\n"
"#include <ewol/Dimension.h>\n" "#include <ewol/Dimension.h>\n"
@ -142,17 +142,17 @@ void testRegExp() {
" };\n" " };\n"
"};\n" "};\n"
"#include <etk/types.h>\n"; "#include <etk/types.h>\n";
//testRegExpSingle("#(\\\\[\\\\\\n]|.)*$", data); //testRegExSingle("#(\\\\[\\\\\\n]|.)*$", data);
data = " 'dfgd\\'fg' \n" data = " 'dfgd\\'fg' \n"
" vec2 m_offset; \n"; " vec2 m_offset; \n";
//testRegExpSingle("'((\\\\[\\\\'])|.)*'", data); //testRegExSingle("'((\\\\[\\\\'])|.)*'", data);
/* /*
data = "ddfgdfgh"; data = "ddfgdfgh";
etk::RegExp<std::string> reg(".*"); etk::RegEx<std::string> reg(".*");
reg.setMaximize(true); reg.setMaximize(true);
TK_INFO("Parse RegEx : '" << reg.getRegExDecorated() << "'"); TK_INFO("Parse RegEx : '" << reg.getRegExDecorated() << "'");
@ -163,7 +163,7 @@ void testRegExp() {
} }
data = "plop \"\" sdfsdf s\"swdfsqd sdfgsdfg \" \" sdfsf"; data = "plop \"\" sdfsdf s\"swdfsqd sdfgsdfg \" \" sdfsf";
reg = etk::RegExp<std::string>("\"(\\\\[\\\\\"]|.)*\""); reg = etk::RegEx<std::string>("\"(\\\\[\\\\\"]|.)*\"");
reg.setMaximize(false); reg.setMaximize(false);
TK_INFO("Parse RegEx : '" << reg.getRegExDecorated() << "'"); TK_INFO("Parse RegEx : '" << reg.getRegExDecorated() << "'");
if (reg.parse(data, 0, data.size()) == true) { if (reg.parse(data, 0, data.size()) == true) {
@ -174,7 +174,7 @@ void testRegExp() {
//TODO : good : "(\\+|[0-9])*" ==> really bad : "(+|[0-9])*" //TODO : good : "(\\+|[0-9])*" ==> really bad : "(+|[0-9])*"
data = "void limit(const vec2& _origin, const vec2& _size);\n"; data = "void limit(const vec2& _origin, const vec2& _size);\n";
reg = etk::RegExp<std::string>("\\@(\\w|_)+[ \\t]*\\("); reg = etk::RegEx<std::string>("\\@(\\w|_)+[ \\t]*\\(");
reg.setMaximize(false); reg.setMaximize(false);
TK_INFO("Parse RegEx : '" << reg.getRegExDecorated() << "'"); TK_INFO("Parse RegEx : '" << reg.getRegExDecorated() << "'");
if (reg.parse(data, 0, data.size()) == true) { if (reg.parse(data, 0, data.size()) == true) {