[DEV] add api of sending \" element in string

This commit is contained in:
Edouard DUPIN 2016-05-27 21:57:01 +02:00
parent 3ac477a1df
commit 1f7a39741e

View File

@ -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) {