diff options
author | Fridrich Štrba <fridrich.strba@bluewin.ch> | 2020-02-04 11:49:57 +0100 |
---|---|---|
committer | Fridrich Štrba <fridrich.strba@bluewin.ch> | 2020-02-04 11:49:57 +0100 |
commit | 4923f95bde2c07f33b645a298238cb79f615a016 (patch) | |
tree | d5418c4e14ca13d53cced14a1429eaa44fd410bd | |
parent | 6ec73cd4131fbb4bc6a5e4b3401cea19d5fa406b (diff) |
Extend colour string parsing to RBG255 model
Change-Id: I935d553727aef0e9ee21bac254c6fdc24349c93f
-rw-r--r-- | src/lib/CDRParser.cpp | 42 |
1 files changed, 32 insertions, 10 deletions
diff --git a/src/lib/CDRParser.cpp b/src/lib/CDRParser.cpp index 40b9b68..bd3d1bb 100644 --- a/src/lib/CDRParser.cpp +++ b/src/lib/CDRParser.cpp @@ -108,7 +108,7 @@ static int parseColourString(const char *colourString, libcdr::CDRColor &colour, bool bRes = false; boost::optional<unsigned> colourModel; - unsigned val0, val1, val2, val3, val4; + std::vector<unsigned> val; if (colourString) { @@ -116,6 +116,7 @@ static int parseColourString(const char *colourString, libcdr::CDRColor &colour, cmodel.add ("CMYK", 2) ("CMYK255", 3) + ("RGB255", 5) ; auto it = colourString; const auto end = it + std::strlen(it); @@ -124,27 +125,48 @@ static int parseColourString(const char *colourString, libcdr::CDRColor &colour, ( (cmodel | omit[+alnum]) >> -lit(',') >> omit[+alnum] >> -lit(',') - >> uint_ >> -lit(',') - >> uint_ >> -lit(',') - >> uint_ >> -lit(',') - >> uint_ >> -lit(',') - >> uint_ >> -lit(',') + >> *(uint_ >> -lit(',')) >> (repeat(8)[alnum] >> '-' >> repeat(3)[repeat(4)[alnum] >> '-'] >> repeat(12)[alnum]) ), // End grammar space, - colourModel, val0, val1, val2, val3, val4) + colourModel, val) && it == end; } - if (!bRes) + if (bRes) return -1; if (colourModel) colour.m_colorModel = get(colourModel); - colour.m_colorValue = val0 | (val1 << 8) | (val2 << 16) | (val3 << 24); - opacity = (double)val4 / 100.0; + switch (colour.m_colorModel) + { + case 5: + if (val.size() >= 4) + { + colour.m_colorValue = val[0] | (val[1] << 8) | (val[2] << 16); + opacity = (double)val[3] / 100.0; + break; + } + else + { + CDR_DEBUG_MSG(("parseColourString error: not enough values read: %lu\n", val.size())); + return 0; + } + default: + if (val.size() >= 5) + { + colour.m_colorValue = val[0] | (val[1] << 8) | (val[2] << 16) | (val[3] << 24); + opacity = (double)val[4] / 100.0; + break; + } + else + { + CDR_DEBUG_MSG(("parseColourString error: not enough values read: %lu\n", val.size())); + return 0; + } + } return 1; } |