[2444] | 1 |
|
---|
| 2 | #include "StringFormat.h"
|
---|
| 3 |
|
---|
| 4 | #include "boost/xpressive/xpressive.hpp"
|
---|
| 5 |
|
---|
| 6 | using namespace boost::xpressive;
|
---|
| 7 |
|
---|
| 8 | // regex: string
|
---|
| 9 | const sregex StringFormat::rstring = '"' >> keep(*~(boost::xpressive::set = '"'))
|
---|
| 10 | >> '"';
|
---|
| 11 |
|
---|
| 12 | // regex: base64 encoding
|
---|
| 13 | const sregex StringFormat::rbase64 = '!' >> +(range('a', 'z') | range('A', 'Z')
|
---|
| 14 | | range('0', '9') | '/' | '+') >> *(boost::xpressive::set = '=');
|
---|
| 15 |
|
---|
| 16 | // regex: raw alphabet
|
---|
| 17 | const sregex StringFormat::rchars = +(range('a', 'z') | range('A', 'Z'));
|
---|
| 18 |
|
---|
| 19 | // regex: integer
|
---|
| 20 | const sregex StringFormat::rint = '0' | (range('1', '9') >> !(range('0', '9')));
|
---|
| 21 |
|
---|
| 22 | // regex: binary label
|
---|
| 23 | const sregex StringFormat::rlabel = rchars | rstring | rbase64;
|
---|
| 24 |
|
---|
| 25 | // regex: dot separated identifier
|
---|
| 26 | const sregex StringFormat::rid = rlabel >> *('.' >> rlabel) >> *('.' >> rint);
|
---|
| 27 |
|
---|
| 28 | // regex: "leaf" data
|
---|
| 29 | const sregex StringFormat::rdata = !(boost::xpressive::set = '!') >> '{'
|
---|
| 30 | >> *(keep(+~(boost::xpressive::set = '{', '}')) | by_ref(rdata))
|
---|
| 31 | >> '}';
|
---|
| 32 |
|
---|
| 33 | // regex: fields
|
---|
| 34 | const sregex StringFormat::rfield_label = rlabel >> '=';
|
---|
| 35 | const sregex StringFormat::rfield = !rfield_label >> (rid | rdata);
|
---|
| 36 | const sregex StringFormat::rfields = '(' >> rfield >> *(',' >> rfield) >> ')';
|
---|
| 37 |
|
---|
| 38 | // regex: objects
|
---|
| 39 | const sregex StringFormat::robject_data = (rdata | rfields);
|
---|
| 40 | const sregex StringFormat::robject = rid >> robject_data;
|
---|
| 41 | const sregex StringFormat::robjects = robject >> *(',' >> robject);
|
---|