summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFridrich Štrba <fridrich.strba@bluewin.ch>2021-03-22 13:19:35 +0100
committerFridrich Štrba <fridrich.strba@bluewin.ch>2021-03-22 13:20:04 +0100
commit0d36bda438c8c1e33ef9aada24a65d8bb8107c6c (patch)
tree22cb299bd664a4fce17eda954f6a8707c7c78f2e
parent528018f253d8e01cd5507eed1b3f852346887a5f (diff)
use the iso8859_1 to parse colours
The standard parser chokes on some characters due to conversion of codes >127 into negative numbers Change-Id: I3e5ac008376997c0b9b657016c293d5702bf75ec
-rw-r--r--src/lib/CDRParser.cpp11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/lib/CDRParser.cpp b/src/lib/CDRParser.cpp
index 36b6aff..62bdf0d 100644
--- a/src/lib/CDRParser.cpp
+++ b/src/lib/CDRParser.cpp
@@ -105,6 +105,7 @@ static void processNameForEncoding(librevenge::RVNGString &name, unsigned short
static int parseColourString(const char *colourString, libcdr::CDRColor &colour, double &opacity)
{
using namespace boost::spirit::qi;
+
bool bRes = false;
boost::optional<unsigned> colourModel, colourPalette;
@@ -146,14 +147,14 @@ static int parseColourString(const char *colourString, libcdr::CDRColor &colour,
bRes = phrase_parse(it, end,
// Begin grammar
(
- (cmodel | omit[+alnum]) >> lit(',')
- >> (cpalette | omit[+alnum]) >> lit(',')
+ (cmodel | omit[+iso8859_1::alnum]) >> lit(',')
+ >> (cpalette | omit[+iso8859_1::alnum]) >> lit(',')
>> *(uint_ >> lit(','))
- >> omit[(repeat(8)[xdigit] >> '-' >> repeat(3)[repeat(4)[xdigit] >> '-'] >> repeat(12)[xdigit])]
- >> -(lit(',') >> *char_)
+ >> omit[(repeat(8)[iso8859_1::xdigit] >> '-' >> repeat(3)[repeat(4)[iso8859_1::xdigit] >> '-'] >> repeat(12)[iso8859_1::xdigit])]
+ >> -(lit(',') >> *iso8859_1::char_)
),
// End grammar
- space,
+ iso8859_1::space,
colourModel, colourPalette, val, rest)
&& it == end;
}