00001
00002 #include "StringFormat.h"
00003
00004 #include "boost/xpressive/xpressive.hpp"
00005
00006 namespace ariba {
00007 namespace utility {
00008 namespace string_format {
00009
00010 using namespace boost::xpressive;
00011
00012
00013 const sregex rstring = '"' >> keep(*~(boost::xpressive::set = '"'))
00014 >> '"';
00015
00016
00017 const sregex rbase64 = '!' >> +(range('a', 'z') | range('A', 'Z')
00018 | range('0', '9') | '/' | '+') >> *(boost::xpressive::set = '=');
00019
00020
00021 const sregex rchars = +(range('a', 'z') | range('A', 'Z'));
00022
00023
00024 const sregex rint = '0' | (range('1', '9') >> !(range('0', '9')));
00025
00026
00027 const sregex rlabel = rchars | rstring | rbase64;
00028
00029
00030 const sregex rid = rlabel >> *('.' >> rlabel) >> *('.' >> rint);
00031
00032
00033 const sregex rdata = !(boost::xpressive::set = '!') >> '{'
00034 >> *(keep(+~(boost::xpressive::set = '{', '}')) | by_ref(rdata))
00035 >> '}';
00036
00037
00038 const sregex rfield_label = rlabel >> '=';
00039 const sregex rfield = !rfield_label >> (rid | rdata);
00040 const sregex rfields = '(' >> rfield >> *(',' >> rfield) >> ')';
00041
00042
00043 const sregex robject_data = (rdata | rfields);
00044 const sregex robject_id = rid;
00045 const sregex robject = robject_id >> robject_data;
00046 const sregex robjects = robject >> *(',' >> robject);
00047
00048 }}}