[DEV] add api of sending \" element in string
This commit is contained in:
parent
3ac477a1df
commit
1f7a39741e
@ -31,18 +31,34 @@ const std::string& ejson::internal::String::get() const {
|
|||||||
bool ejson::internal::String::iParse(const std::string& _data, size_t& _pos, ejson::FilePos& _filePos, ejson::internal::Document& _doc) {
|
bool ejson::internal::String::iParse(const std::string& _data, size_t& _pos, ejson::FilePos& _filePos, ejson::internal::Document& _doc) {
|
||||||
EJSON_PARSE_ELEMENT("start parse : 'String' ");
|
EJSON_PARSE_ELEMENT("start parse : 'String' ");
|
||||||
char end = _data[_pos];
|
char end = _data[_pos];
|
||||||
|
bool backslashPrevious = false;
|
||||||
for (size_t iii=_pos+1; iii<_data.size(); iii++) {
|
for (size_t iii=_pos+1; iii<_data.size(); iii++) {
|
||||||
_filePos.check(_data[iii]);
|
_filePos.check(_data[iii]);
|
||||||
#ifdef ENABLE_DISPLAY_PARSED_ELEMENT
|
#ifdef ENABLE_DISPLAY_PARSED_ELEMENT
|
||||||
drawElementParsed(_data[iii], _filePos);
|
drawElementParsed(_data[iii], _filePos);
|
||||||
#endif
|
#endif
|
||||||
ejson::FilePos tmpPos;
|
ejson::FilePos tmpPos;
|
||||||
// TODO : manage \x
|
if(_data[iii] == '\\') {
|
||||||
if(_data[iii] != end) {
|
if (backslashPrevious == true) {
|
||||||
|
m_value += '\\';
|
||||||
|
backslashPrevious = false;
|
||||||
|
} else {
|
||||||
|
backslashPrevious = true;
|
||||||
|
}
|
||||||
|
} else if (_data[iii] != end) {
|
||||||
|
if (backslashPrevious == true) {
|
||||||
|
m_value += '\\';
|
||||||
|
backslashPrevious = false;
|
||||||
|
}
|
||||||
m_value += _data[iii];
|
m_value += _data[iii];
|
||||||
} else {
|
} else {
|
||||||
_pos = iii;
|
if (backslashPrevious == true) {
|
||||||
return true;
|
m_value += '"';
|
||||||
|
backslashPrevious = false;
|
||||||
|
} else {
|
||||||
|
_pos = iii;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_pos=_data.size();
|
_pos=_data.size();
|
||||||
@ -52,17 +68,27 @@ bool ejson::internal::String::iParse(const std::string& _data, size_t& _pos, ejs
|
|||||||
|
|
||||||
|
|
||||||
bool ejson::internal::String::iGenerate(std::string& _data, size_t _indent) const {
|
bool ejson::internal::String::iGenerate(std::string& _data, size_t _indent) const {
|
||||||
_data += "\"";;
|
_data += "\"";
|
||||||
// TODO : Manage the \" elements ....
|
for (auto &it: m_value) {
|
||||||
_data += m_value;
|
if ( it == '\\'
|
||||||
_data += "\"";;
|
|| it == '"') {
|
||||||
|
_data += '\\';
|
||||||
|
}
|
||||||
|
_data += it;
|
||||||
|
}
|
||||||
|
_data += "\"";
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
void ejson::internal::String::iMachineGenerate(std::string& _data) const {
|
void ejson::internal::String::iMachineGenerate(std::string& _data) const {
|
||||||
_data += "\"";;
|
_data += "\"";
|
||||||
// TODO : Manage the \" elements ....
|
for (auto &it: m_value) {
|
||||||
_data += m_value;
|
if ( it == '\\'
|
||||||
_data += "\"";;
|
|| it == '"') {
|
||||||
|
_data += '\\';
|
||||||
|
}
|
||||||
|
_data += it;
|
||||||
|
}
|
||||||
|
_data += "\"";
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ejson::internal::String::transfertIn(ememory::SharedPtr<ejson::internal::Value> _obj) {
|
bool ejson::internal::String::transfertIn(ememory::SharedPtr<ejson::internal::Value> _obj) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user