src/lib/CDRCollector.cpp | 10 ++++++++- src/lib/CDRParser.cpp | 50 ++++++++++++++++++++++++++++++++++------------- 2 files changed, 46 insertions(+), 14 deletions(-)
New commits: commit 2bdf2a9d5d2ef15c3af1434803d9b58b0bfa0a29 Author: Fridrich Štrba <fridrich.st...@bluewin.ch> AuthorDate: Thu Feb 6 22:36:35 2020 +0100 Commit: Fridrich Štrba <fridrich.st...@bluewin.ch> CommitDate: Thu Feb 6 22:36:35 2020 +0100 Some more work on parsing CDRx6+ character colours Change-Id: Ia80c4efe9b6c3282a9ee92d9b75c9c16e1bfdc50 diff --git a/src/lib/CDRCollector.cpp b/src/lib/CDRCollector.cpp index 0119a54..3f204d0 100644 --- a/src/lib/CDRCollector.cpp +++ b/src/lib/CDRCollector.cpp @@ -337,7 +337,6 @@ unsigned libcdr::CDRParserState::_getRGBColor(const CDRColor &color) case 0x01: case 0x02: case 0x15: - case 0x14: { double cmyk[4] = { @@ -567,6 +566,15 @@ unsigned libcdr::CDRParserState::_getRGBColor(const CDRColor &color) blue = rgb[2]; break; } + // Registration colour + case 0x14: + { + red = (unsigned char)cdr_round(255.0 * col0 / 100.0); + green = (unsigned char)cdr_round(255.0 * col0 / 100.0); + blue = (unsigned char)cdr_round(255.0 * col0 / 100.0); + break; + } + default: break; } diff --git a/src/lib/CDRParser.cpp b/src/lib/CDRParser.cpp index e27357d..1cac4d5 100644 --- a/src/lib/CDRParser.cpp +++ b/src/lib/CDRParser.cpp @@ -117,16 +117,23 @@ static int parseColourString(const char *colourString, libcdr::CDRColor &colour, ("CMYK", 2) ("CMYK255", 3) ("RGB255", 5) + ("HSB", 6) + ("HLS", 7) + ("GRAY255", 9) + ("YIQ255", 11) + ("LAB255", 18) + ("REGCOLOR", 20) + ("SPOT", 25) ; auto it = colourString; const auto end = it + std::strlen(it); bRes = phrase_parse(it, end, // Begin grammar ( - (cmodel | omit[+alnum]) >> -lit(',') - >> omit[+alnum] >> -lit(',') - >> *(uint_ >> -lit(',')) - >> (repeat(8)[alnum] >> '-' >> repeat(3)[repeat(4)[alnum] >> '-'] >> repeat(12)[alnum]) + (cmodel | omit[+alnum]) >> lit(',') + >> omit[+alnum] >> lit(',') + >> *(uint_ >> lit(',')) + >> (repeat(8)[xdigit] >> '-' >> repeat(3)[repeat(4)[xdigit] >> '-'] >> repeat(12)[xdigit]) ), // End grammar space, @@ -134,8 +141,8 @@ static int parseColourString(const char *colourString, libcdr::CDRColor &colour, && it == end; } - if (bRes) - return -1; + // if (bRes) + // return -1; if (colourModel) colour.m_colorModel = get(colourModel); @@ -144,17 +151,34 @@ static int parseColourString(const char *colourString, libcdr::CDRColor &colour, { colour.m_colorValue = val[0] | (val[1] << 8) | (val[2] << 16) | (val[3] << 24); opacity = (double)val[4] / 100.0; - return 1; } - - if (val.size() >= 4) + else if (val.size() >= 4) { - colour.m_colorValue = val[0] | (val[1] << 8) | (val[2] << 16); + if (colour.m_colorModel == 5) + colour.m_colorValue = val[2] | (val[1] << 8) | (val[0] << 16); + else if (colour.m_colorModel == 6 || colour.m_colorModel == 7) + colour.m_colorValue = val[0] | (val[1] << 16) | (val[2] << 24); + else + colour.m_colorValue = val[0] | (val[1] << 8) | (val[2] << 16); opacity = (double)val[3] / 100.0; - return 1; } - - return 0; + else if (val.size() >= 2) + { + colour.m_colorValue = val[0]; + opacity = (double)val[1] / 100.0; + } + else if (val.size() >= 1) + { + colour.m_colorValue = val[0]; + opacity = 1.0; + } + else + { + CDR_DEBUG_MSG(("parseColourString --> bRes %i, size %lu, colorModel %u, colorValue 0x%.8x\n", bRes, val.size(), colour.m_colorModel, colour.m_colorValue)); + return 0; + } + CDR_DEBUG_MSG(("parseColourString --> bRes %i, size %lu, colorModel %u, colorValue 0x%.8x\n", bRes, val.size(), colour.m_colorModel, colour.m_colorValue)); + return 1; } void normalizeAngle(double &angle) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits