use str parse util for blockstrs
parent
5fe766aaeb
commit
f124126b32
|
@ -8,35 +8,6 @@
|
||||||
|
|
||||||
namespace cscript {
|
namespace cscript {
|
||||||
|
|
||||||
static ostd::ConstCharRange cs_parse_str(ostd::ConstCharRange str) {
|
|
||||||
while (!str.empty()) {
|
|
||||||
switch (*str) {
|
|
||||||
case '\r':
|
|
||||||
case '\n':
|
|
||||||
case '\"':
|
|
||||||
return str;
|
|
||||||
case '^':
|
|
||||||
++str;
|
|
||||||
if (!str.empty()) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return str;
|
|
||||||
case '\\':
|
|
||||||
++str;
|
|
||||||
if (!str.empty() && ((*str == '\r') || (*str == '\n'))) {
|
|
||||||
char c = *str;
|
|
||||||
++str;
|
|
||||||
if (!str.empty() && (c == '\r') && (*str == '\n')) {
|
|
||||||
++str;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
++str;
|
|
||||||
}
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
|
|
||||||
ostd::ConstCharRange GenState::get_str() {
|
ostd::ConstCharRange GenState::get_str() {
|
||||||
ostd::Size nl;
|
ostd::Size nl;
|
||||||
ostd::ConstCharRange beg = source;
|
ostd::ConstCharRange beg = source;
|
||||||
|
@ -526,15 +497,10 @@ static bool compileblockstr(GenState &gs, ostd::ConstCharRange str, bool macro)
|
||||||
break;
|
break;
|
||||||
case '\"': {
|
case '\"': {
|
||||||
ostd::ConstCharRange start = str;
|
ostd::ConstCharRange start = str;
|
||||||
++start;
|
str = util::parse_string(gs.cs, str);
|
||||||
ostd::ConstCharRange end = cs_parse_str(start);
|
ostd::ConstCharRange strr = ostd::slice_until(start, str);
|
||||||
if (!end.empty() && (*end == '\"')) {
|
memcpy(&buf[len], strr.data(), strr.size());
|
||||||
++end;
|
len += strr.size();
|
||||||
}
|
|
||||||
ostd::Size slen = str.distance_front(end);
|
|
||||||
memcpy(&buf[len], str.data(), slen);
|
|
||||||
len += slen;
|
|
||||||
str = end;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case '/':
|
case '/':
|
||||||
|
|
Loading…
Reference in New Issue