diff options
| author | Dan Goodliffe <dan@randomdan.homeip.net> | 2015-12-21 04:48:44 +0000 | 
|---|---|---|
| committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2015-12-21 04:48:44 +0000 | 
| commit | fdf50d475ee45cf58bfdee0d3aeb329ec148fb8b (patch) | |
| tree | 14638ab3ca112c29a5c18ae3ac2cb00a09cd8157 | |
| parent | Use fixture test suite to reduce repetition (diff) | |
| download | gentoobrowse-api-fdf50d475ee45cf58bfdee0d3aeb329ec148fb8b.tar.bz2 gentoobrowse-api-fdf50d475ee45cf58bfdee0d3aeb329ec148fb8b.tar.xz gentoobrowse-api-fdf50d475ee45cf58bfdee0d3aeb329ec148fb8b.zip | |
Add support for escaped string content in unpack of PQ arrays
| -rw-r--r-- | gentoobrowse-api/service/unpackPqTextArray.ll | 31 | 
1 files changed, 26 insertions, 5 deletions
| diff --git a/gentoobrowse-api/service/unpackPqTextArray.ll b/gentoobrowse-api/service/unpackPqTextArray.ll index 6281063..9c53157 100644 --- a/gentoobrowse-api/service/unpackPqTextArray.ll +++ b/gentoobrowse-api/service/unpackPqTextArray.ll @@ -17,11 +17,14 @@ begin "{"  end "}"  comma ,  unquoted [^,\"}]+ -quoted (\"[^\"]+\") +quote \" +esc \\. +char [^"]  %x FIRST  %x AFTER  %x NEXT +%x QUOTED  %% @@ -35,14 +38,32 @@ quoted (\"[^\"]+\")  	list.push_back(YYText());  	BEGIN(AFTER);  } -<FIRST,NEXT>{quoted} { -	list.push_back(YYText()); -	boost::algorithm::trim_if(list.back(), [](auto c){ return c == '"'; }); -	BEGIN(AFTER); +<FIRST,NEXT>{quote} { +	list.push_back(std::string()); +	BEGIN(QUOTED);  }  <AFTER>{comma} {  	BEGIN(NEXT);  } +<QUOTED>{quote} { +	BEGIN(AFTER); +} +<QUOTED>{esc} { +	switch (*(YYText() + 1)) { +		case '"': +			list.back().push_back('"'); +			break; +		case '\\': +			list.back().push_back('\\'); +			break; +		case 'n': +			list.back().push_back('\n'); +			break; +	} +} +<QUOTED>{char} { +	list.back().append(YYText()); +}  %% | 
