[Libreoffice-commits] libcdr.git: src/lib
Fridrich Å trba
fridrich.strba at bluewin.ch
Wed Apr 10 16:58:34 PDT 2013
src/lib/CDRParser.cpp | 25 ++++++++++++++-----------
src/lib/CDRTypes.h | 5 +++--
src/lib/CommonParser.cpp | 9 +++++++++
src/lib/CommonParser.h | 1 +
4 files changed, 27 insertions(+), 13 deletions(-)
New commits:
commit 188956efa91e06b2196c2444ab4936b39405a33b
Author: Fridrich Å trba <fridrich.strba at bluewin.ch>
Date: Thu Apr 11 01:58:07 2013 +0200
Styd for v 5 and 6
diff --git a/src/lib/CDRParser.cpp b/src/lib/CDRParser.cpp
index 4f99566..83fe45b 100644
--- a/src/lib/CDRParser.cpp
+++ b/src/lib/CDRParser.cpp
@@ -2958,14 +2958,14 @@ void libcdr::CDRParser::readStyd(WPXInputStream *input)
CDR_DEBUG_MSG(("Styd should not be present in this file version\n"));
return;
}
- /* unsigned styleId = */ readU16(input);
+ unsigned styleId = readUnsigned(input);
long startPosition = input->tell();
unsigned chunkLength = readUnsigned(input);
unsigned numOfArgs = readUnsigned(input);
unsigned startOfArgs = readUnsigned(input);
unsigned startOfArgTypes = readUnsigned(input);
- /* unsigned parentId = */
- readUnsigned(input);
+ CDRCharacterStyle charStyle;
+ charStyle.m_parentId = readUnsigned(input);
std::vector<unsigned> argOffsets(numOfArgs, 0);
std::vector<unsigned> argTypes(numOfArgs, 0);
unsigned i = 0;
@@ -2976,8 +2976,6 @@ void libcdr::CDRParser::readStyd(WPXInputStream *input)
while (i>0)
argTypes[--i] = readUnsigned(input);
- unsigned fillId = 0;
- unsigned outlId = 0;
for (i=0; i < argTypes.size(); i++)
{
input->seek(startPosition+argOffsets[i], WPX_SEEK_SET);
@@ -2987,14 +2985,22 @@ void libcdr::CDRParser::readStyd(WPXInputStream *input)
case STYD_NAME:
break;
case STYD_FILL_ID:
- fillId = readUnsigned(input);
+ charStyle.m_fillId = readUnsigned(input);
break;
case STYD_OUTL_ID:
- outlId = readUnsigned(input);
+ charStyle.m_outlId = readUnsigned(input);
break;
case STYD_FONTS:
+ if (m_version >= 600)
+ input->seek(4, WPX_SEEK_CUR);
+ charStyle.m_fontId = readUnsignedShort(input);
+ charStyle.m_charSet = readUnsignedShort(input);
+ if (m_version >= 600)
+ input->seek(8, WPX_SEEK_CUR);
+ charStyle.m_fontSize = readCoordinate(input);
break;
case STYD_ALIGN:
+ charStyle.m_align = readUnsigned(input);
break;
case STYD_BULLETS:
break;
@@ -3014,11 +3020,8 @@ void libcdr::CDRParser::readStyd(WPXInputStream *input)
break;
}
}
- fillId++;
- fillId--;
- outlId++;
- outlId--;
input->seek(startPosition+chunkLength, WPX_SEEK_SET);
+ m_collector->collectStld(styleId, charStyle);
}
void libcdr::CDRParser::readArtisticText(WPXInputStream * /*input*/)
diff --git a/src/lib/CDRTypes.h b/src/lib/CDRTypes.h
index 7d4e710..361932f 100644
--- a/src/lib/CDRTypes.h
+++ b/src/lib/CDRTypes.h
@@ -159,11 +159,12 @@ struct CDRCharacterStyle
double m_leftIndent, m_firstIndent, m_rightIndent;
unsigned m_outlId, m_fillId, m_parentId;
CDRCharacterStyle()
- : m_charSet(0), m_fontId(0), m_fontSize(0.0), m_align(0), m_leftIndent(0.0), m_firstIndent(0.0),
+ : m_charSet((unsigned short)-1), m_fontId((unsigned short)-1),
+ m_fontSize(0.0), m_align(0), m_leftIndent(0.0), m_firstIndent(0.0),
m_rightIndent(0.0), m_outlId(0), m_fillId(0), m_parentId(0) {}
void overrideCharacterStyle(const CDRCharacterStyle &override)
{
- if (override.m_charSet || override.m_fontId)
+ if (override.m_charSet != (unsigned short)-1 || override.m_fontId != (unsigned short)-1)
{
m_charSet = override.m_charSet;
m_fontId = override.m_fontId;
diff --git a/src/lib/CommonParser.cpp b/src/lib/CommonParser.cpp
index c8784ca..9a8bfaf 100644
--- a/src/lib/CommonParser.cpp
+++ b/src/lib/CommonParser.cpp
@@ -60,6 +60,15 @@ unsigned libcdr::CommonParser::readUnsigned(WPXInputStream *input, bool bigEndia
return readU32(input, bigEndian);
}
+unsigned short libcdr::CommonParser::readUnsignedShort(WPXInputStream *input, bool bigEndian)
+{
+ if (m_precision == PRECISION_UNKNOWN)
+ throw UnknownPrecisionException();
+ else if (m_precision == PRECISION_16BIT)
+ return (unsigned short)readU8(input, bigEndian);
+ return readU16(input, bigEndian);
+}
+
int libcdr::CommonParser::readInteger(WPXInputStream *input, bool bigEndian)
{
if (m_precision == PRECISION_UNKNOWN)
diff --git a/src/lib/CommonParser.h b/src/lib/CommonParser.h
index 3e25130..14d757b 100644
--- a/src/lib/CommonParser.h
+++ b/src/lib/CommonParser.h
@@ -56,6 +56,7 @@ protected:
double readRectCoord(WPXInputStream *input, bool bigEndian = false);
double readCoordinate(WPXInputStream *input, bool bigEndian = false);
unsigned readUnsigned(WPXInputStream *input, bool bigEndian = false);
+ unsigned short readUnsignedShort(WPXInputStream *input, bool bigEndian = false);
int readInteger(WPXInputStream *input, bool bigEndian = false);
double readAngle(WPXInputStream *input, bool bigEndian = false);
More information about the Libreoffice-commits
mailing list