forked from OctaForge/libostd
allow range format to be specified positionally
This commit is contained in:
parent
55dc5bdf34
commit
47a98592f0
|
@ -131,6 +131,8 @@ struct FormatSpec {
|
||||||
const char *nested_sep = nullptr;
|
const char *nested_sep = nullptr;
|
||||||
octa::Size nested_sep_len = 0;
|
octa::Size nested_sep_len = 0;
|
||||||
|
|
||||||
|
bool is_nested = false;
|
||||||
|
|
||||||
template<typename R>
|
template<typename R>
|
||||||
bool read_until_spec(R &writer, octa::Size *wret) {
|
bool read_until_spec(R &writer, octa::Size *wret) {
|
||||||
octa::Size written = 0;
|
octa::Size written = 0;
|
||||||
|
@ -195,7 +197,10 @@ private:
|
||||||
bool read_spec_range() {
|
bool read_spec_range() {
|
||||||
p_fmt++;
|
p_fmt++;
|
||||||
const char *begin_inner = p_fmt;
|
const char *begin_inner = p_fmt;
|
||||||
if (!read_until_dummy()) return false;
|
if (!read_until_dummy()) {
|
||||||
|
is_nested = false;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
/* find delimiter or ending */
|
/* find delimiter or ending */
|
||||||
const char *begin_delim = p_fmt;
|
const char *begin_delim = p_fmt;
|
||||||
const char *p = strchr(begin_delim, '%');
|
const char *p = strchr(begin_delim, '%');
|
||||||
|
@ -213,6 +218,7 @@ private:
|
||||||
nested_sep = begin_delim;
|
nested_sep = begin_delim;
|
||||||
nested_sep_len = p - nested_sep - 1;
|
nested_sep_len = p - nested_sep - 1;
|
||||||
p_fmt = ++p;
|
p_fmt = ++p;
|
||||||
|
is_nested = true;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (*p == '|') {
|
if (*p == '|') {
|
||||||
|
@ -225,12 +231,15 @@ private:
|
||||||
if (*p == ')') {
|
if (*p == ')') {
|
||||||
nested_sep_len = p - nested_sep - 1;
|
nested_sep_len = p - nested_sep - 1;
|
||||||
p_fmt = ++p;
|
p_fmt = ++p;
|
||||||
|
is_nested = true;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
is_nested = false;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
is_nested = false;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -252,6 +261,10 @@ private:
|
||||||
havepos = true;
|
havepos = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (havepos && (*p_fmt == '(')) {
|
||||||
|
return read_spec_range();
|
||||||
|
}
|
||||||
|
|
||||||
/* parse flags */
|
/* parse flags */
|
||||||
flags = 0;
|
flags = 0;
|
||||||
octa::Size skipd = 0;
|
octa::Size skipd = 0;
|
||||||
|
|
Loading…
Reference in a new issue