summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lib/VSD5Parser.cpp16
-rw-r--r--src/lib/VSD5Parser.h1
-rw-r--r--src/lib/VSD6Parser.cpp7
-rw-r--r--src/lib/VSD6Parser.h4
-rw-r--r--src/lib/VSDParser.cpp6
5 files changed, 25 insertions, 9 deletions
diff --git a/src/lib/VSD5Parser.cpp b/src/lib/VSD5Parser.cpp
index c8a28dc..55351b1 100644
--- a/src/lib/VSD5Parser.cpp
+++ b/src/lib/VSD5Parser.cpp
@@ -406,6 +406,22 @@ void libvisio::VSD5Parser::readTextBlock(WPXInputStream *input)
verticalAlign, isBgFilled, c, 0.0, (unsigned char)0));
}
+void libvisio::VSD5Parser::readTextField(WPXInputStream *input)
+{
+ input->seek(3, WPX_SEEK_CUR);
+ if (0xe8 == readU8(input))
+ {
+ int nameId = readS16(input);
+ m_shape.m_fields.addTextField(m_header.id, m_header.level, nameId, 0xffff);
+ }
+ else
+ {
+ double numericValue = readDouble(input);
+ m_shape.m_fields.addNumericField(m_header.id, m_header.level, 0xffff, numericValue, 0xffff);
+ }
+}
+
+
unsigned libvisio::VSD5Parser::getUInt(WPXInputStream *input)
{
int value = readS16(input);
diff --git a/src/lib/VSD5Parser.h b/src/lib/VSD5Parser.h
index 9cf39c2..ceb73d6 100644
--- a/src/lib/VSD5Parser.h
+++ b/src/lib/VSD5Parser.h
@@ -63,6 +63,7 @@ protected:
virtual void readFillAndShadow(WPXInputStream *input);
virtual void readTextBlock(WPXInputStream *input);
virtual void readCharIX(WPXInputStream *input);
+ virtual void readTextField(WPXInputStream *input);
virtual void readShape(WPXInputStream *input);
virtual void readPage(WPXInputStream *input);
diff --git a/src/lib/VSD6Parser.cpp b/src/lib/VSD6Parser.cpp
index 0a4f83e..335872c 100644
--- a/src/lib/VSD6Parser.cpp
+++ b/src/lib/VSD6Parser.cpp
@@ -269,16 +269,16 @@ void libvisio::VSD6Parser::readTextField(WPXInputStream *input)
unsigned char tmpCode = readU8(input);
if (tmpCode == 0xe8)
{
- int nameId = (int)readU32(input);
+ int nameId = readS32(input);
input->seek(6, WPX_SEEK_CUR);
- int formatStringId = (int)readU32(input);
+ int formatStringId = readS32(input);
m_shape.m_fields.addTextField(m_header.id, m_header.level, nameId, formatStringId);
}
else
{
double numericValue = readDouble(input);
input->seek(2, WPX_SEEK_CUR);
- int formatStringId = (int)readU32(input);
+ int formatStringId = readS32(input);
unsigned blockIdx = 0;
unsigned length = 0;
@@ -331,5 +331,4 @@ void libvisio::VSD6Parser::readTextField(WPXInputStream *input)
}
}
-
/* vim:set shiftwidth=2 softtabstop=2 expandtab: */
diff --git a/src/lib/VSD6Parser.h b/src/lib/VSD6Parser.h
index 219894f..6550324 100644
--- a/src/lib/VSD6Parser.h
+++ b/src/lib/VSD6Parser.h
@@ -53,8 +53,8 @@ private:
virtual void readCharIX(WPXInputStream *input);
virtual void readParaIX(WPXInputStream *input);
virtual void readFillAndShadow(WPXInputStream *input);
- void readName(WPXInputStream *input);
- void readTextField(WPXInputStream *input);
+ virtual void readName(WPXInputStream *input);
+ virtual void readTextField(WPXInputStream *input);
VSD6Parser();
VSD6Parser(const VSDParser &);
diff --git a/src/lib/VSDParser.cpp b/src/lib/VSDParser.cpp
index d56674a..e649c56 100644
--- a/src/lib/VSDParser.cpp
+++ b/src/lib/VSDParser.cpp
@@ -1730,16 +1730,16 @@ void libvisio::VSDParser::readTextField(WPXInputStream *input)
unsigned char tmpCode = readU8(input);
if (tmpCode == 0xe8)
{
- int nameId = (int)readU32(input);
+ int nameId = readS32(input);
input->seek(6, WPX_SEEK_CUR);
- int formatStringId = (int)readU32(input);
+ int formatStringId = readS32(input);
m_shape.m_fields.addTextField(m_header.id, m_header.level, nameId, formatStringId);
}
else
{
double numericValue = readDouble(input);
input->seek(2, WPX_SEEK_CUR);
- int formatStringId = (int)readU32(input);
+ int formatStringId = readS32(input);
unsigned blockIdx = 0;
unsigned length = 0;