From 97f5151099967e6c823d640a90d87bca92c44035 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Tue, 29 Oct 2019 03:00:39 +0000 Subject: CTAN sync 201910290300 --- dviware/dvisvgm/src/CMapReader.cpp | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) (limited to 'dviware/dvisvgm/src/CMapReader.cpp') diff --git a/dviware/dvisvgm/src/CMapReader.cpp b/dviware/dvisvgm/src/CMapReader.cpp index 08450cf17f..f873bded0a 100644 --- a/dviware/dvisvgm/src/CMapReader.cpp +++ b/dviware/dvisvgm/src/CMapReader.cpp @@ -89,9 +89,10 @@ void CMapReader::executeOperator (const string &opname, InputReader &ir) { const char *name; void (CMapReader::*handler)(InputReader&); }; - constexpr array operators {{ + constexpr array operators {{ {"beginbfchar", &CMapReader::op_beginbfchar}, {"beginbfrange", &CMapReader::op_beginbfrange}, + {"begincidchar", &CMapReader::op_begincidchar}, {"begincidrange", &CMapReader::op_begincidrange}, {"def", &CMapReader::op_def}, {"endcmap", &CMapReader::op_endcmap}, @@ -154,6 +155,22 @@ static uint32_t parse_hexentry (InputReader &ir) { } +void CMapReader::op_begincidchar (InputReader &ir) { + if (!_tokens.empty() && _tokens.back().type() == Token::Type::NUMBER) { + ir.skipSpace(); + int num_entries = static_cast(popToken().numvalue()); + while (num_entries > 0 && ir.peek() == '<') { + uint32_t first = parse_hexentry(ir); + uint32_t cid; + ir.skipSpace(); + if (!ir.parseUInt(cid)) + throw CMapReaderException("invalid char entry (decimal value expected)"); + _cmap->addCIDRange(first, first, cid); + ir.skipSpace(); + } + } +} + void CMapReader::op_begincidrange (InputReader &ir) { if (!_tokens.empty() && _tokens.back().type() == Token::Type::NUMBER) { ir.skipSpace(); @@ -249,9 +266,7 @@ void CMapReader::Token::scan (InputReader &ir) { else if (isdigit(ir.peek())) { // number? double val; if (ir.parseDouble(val)) { - ostringstream oss; - oss << val; - _value = oss.str(); + _value = util::to_string(val); _type = Type::NUMBER; } } -- cgit v1.2.3