You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
620 lines
24 KiB
620 lines
24 KiB
From ad5f5d5c5feaac3c1351609c79aaa7d2802d5a55 Mon Sep 17 00:00:00 2001
|
|
From: osnola <alonso@loria.fr>
|
|
Date: Mon, 4 Nov 2013 18:35:36 +0100
|
|
Subject: [PATCH 3/8] Correct some cppcheck errors + change code to avoid
|
|
calling isfinite...
|
|
|
|
---
|
|
configure.ac | 10 -------
|
|
src/conv/csv/mwaw2csv.cpp | 2 +-
|
|
src/conv/raw/mwaw2raw.cpp | 2 +-
|
|
src/conv/text/mwaw2text.cpp | 2 +-
|
|
src/lib/CWDbaseContent.cxx | 19 +++++++------
|
|
src/lib/CWDbaseContent.hxx | 6 ++--
|
|
src/lib/CWGraph.cxx | 30 ++++++++++----------
|
|
src/lib/CWGraph.hxx | 2 +-
|
|
src/lib/HMWKGraph.cxx | 12 ++++----
|
|
src/lib/MSKGraph.cxx | 2 +-
|
|
src/lib/MSKGraph.hxx | 2 +-
|
|
src/lib/MSKParser.cxx | 18 ++----------
|
|
src/lib/MSKParser.hxx | 2 --
|
|
src/lib/MSWTextStyles.cxx | 2 +-
|
|
src/lib/MWAWDocument.cxx | 6 ++--
|
|
src/lib/MWAWInputStream.cxx | 4 ++-
|
|
src/lib/MWAWInputStream.hxx | 2 +-
|
|
src/lib/MWAWOLEParser.cxx | 2 +-
|
|
src/lib/MWAWOLEStream.cxx | 2 +-
|
|
src/lib/MWAWPropertyHandler.cxx | 63 +++++++++++++++++++++--------------------
|
|
20 files changed, 84 insertions(+), 106 deletions(-)
|
|
|
|
diff --git a/src/conv/csv/mwaw2csv.cpp b/src/conv/csv/mwaw2csv.cpp
|
|
index 0937a46..ed3799d 100644
|
|
--- a/src/conv/csv/mwaw2csv.cpp
|
|
+++ b/src/conv/csv/mwaw2csv.cpp
|
|
@@ -103,7 +103,7 @@ int main(int argc, char *argv[])
|
|
CSVGenerator documentGenerator(output);
|
|
error = MWAWDocument::parse(&input, &documentGenerator);
|
|
}
|
|
- catch(MWAWDocument::Result err)
|
|
+ catch(MWAWDocument::Result const &err)
|
|
{
|
|
error=err;
|
|
}
|
|
diff --git a/src/conv/raw/mwaw2raw.cpp b/src/conv/raw/mwaw2raw.cpp
|
|
index 5e365f1..8e6a92c 100644
|
|
--- a/src/conv/raw/mwaw2raw.cpp
|
|
+++ b/src/conv/raw/mwaw2raw.cpp
|
|
@@ -90,7 +90,7 @@ int main(int argc, char *argv[])
|
|
{
|
|
error=MWAWDocument::parse(&input, &documentGenerator);
|
|
}
|
|
- catch (MWAWDocument::Result err)
|
|
+ catch (MWAWDocument::Result const &err)
|
|
{
|
|
error=err;
|
|
}
|
|
diff --git a/src/conv/text/mwaw2text.cpp b/src/conv/text/mwaw2text.cpp
|
|
index edb980d..2b561bf 100644
|
|
--- a/src/conv/text/mwaw2text.cpp
|
|
+++ b/src/conv/text/mwaw2text.cpp
|
|
@@ -96,7 +96,7 @@ int main(int argc, char *argv[])
|
|
{
|
|
MWAWDocument::parse(&input, &documentGenerator);
|
|
}
|
|
- catch (MWAWDocument::Result err)
|
|
+ catch (MWAWDocument::Result const &err)
|
|
{
|
|
error=err;
|
|
}
|
|
diff --git a/src/lib/CWDbaseContent.cxx b/src/lib/CWDbaseContent.cxx
|
|
index 7198103..2c2d971 100644
|
|
--- a/src/lib/CWDbaseContent.cxx
|
|
+++ b/src/lib/CWDbaseContent.cxx
|
|
@@ -518,7 +518,7 @@ bool CWDbaseContent::readRecordSSV1(Vec2i const &id, long pos, CWDbaseContent::R
|
|
break;
|
|
}
|
|
record.m_resType=Record::R_Double;
|
|
- if (input->readDouble(record.m_resDouble))
|
|
+ if (input->readDouble(record.m_resDouble, record.m_resDoubleNaN))
|
|
f << record.m_resDouble << ",";
|
|
else {
|
|
MWAW_DEBUG_MSG(("CWDbaseContent::readRecordSSV1: can not read a float\n"));
|
|
@@ -572,7 +572,7 @@ bool CWDbaseContent::readRecordSSV1(Vec2i const &id, long pos, CWDbaseContent::R
|
|
f << "###int" << rType << "[res],";
|
|
break;
|
|
case 2:
|
|
- if (input->checkPosition(resPos+10) && input->readDouble(record.m_resDouble)) {
|
|
+ if (input->checkPosition(resPos+10) && input->readDouble(record.m_resDouble, record.m_resDoubleNaN)) {
|
|
record.m_resType=Record::R_Double;
|
|
f << "=" << record.m_resDouble << ",";
|
|
break;
|
|
@@ -674,7 +674,7 @@ bool CWDbaseContent::readRecordSS(Vec2i const &id, long pos, CWDbaseContent::Rec
|
|
break;
|
|
}
|
|
record.m_resType=Record::R_Double;
|
|
- if (input->readDouble(record.m_resDouble))
|
|
+ if (input->readDouble(record.m_resDouble, record.m_resDoubleNaN))
|
|
f << record.m_resDouble << ",";
|
|
else {
|
|
MWAW_DEBUG_MSG(("CWDbaseContent::readRecordSS: can not read a float\n"));
|
|
@@ -736,7 +736,7 @@ bool CWDbaseContent::readRecordSS(Vec2i const &id, long pos, CWDbaseContent::Rec
|
|
f << "###int" << rType << "[res],";
|
|
break;
|
|
case 2:
|
|
- if (remainSz>=10 && input->readDouble(record.m_resDouble)) {
|
|
+ if (remainSz>=10 && input->readDouble(record.m_resDouble, record.m_resDoubleNaN)) {
|
|
record.m_resType=Record::R_Double;
|
|
f << "=" << record.m_resDouble << ",";
|
|
break;
|
|
@@ -858,7 +858,7 @@ bool CWDbaseContent::readRecordDB(Vec2i const &id, long pos, CWDbaseContent::Rec
|
|
f << "###";
|
|
break;
|
|
}
|
|
- if (input->readDouble(record.m_resDouble)) {
|
|
+ if (input->readDouble(record.m_resDouble, record.m_resDoubleNaN)) {
|
|
record.m_resType=Record::R_Double;
|
|
f << record.m_resDouble << ",";
|
|
} else {
|
|
@@ -929,7 +929,7 @@ bool CWDbaseContent::send(Vec2i const &pos)
|
|
switch(record.m_resType) {
|
|
case Record::R_Long:
|
|
if (format.m_format)
|
|
- send(double(record.m_resLong), format);
|
|
+ send(double(record.m_resLong), false, format);
|
|
else {
|
|
std::stringstream s;
|
|
s << record.m_resLong;
|
|
@@ -937,7 +937,7 @@ bool CWDbaseContent::send(Vec2i const &pos)
|
|
}
|
|
break;
|
|
case Record::R_Double:
|
|
- send(record.m_resDouble, format);
|
|
+ send(record.m_resDouble, record.m_resDoubleNaN, format);
|
|
break;
|
|
case Record::R_String:
|
|
if (record.m_resString.valid()) {
|
|
@@ -959,7 +959,7 @@ bool CWDbaseContent::send(Vec2i const &pos)
|
|
return true;
|
|
}
|
|
|
|
-void CWDbaseContent::send(double val, CWStyleManager::CellFormat const &format)
|
|
+void CWDbaseContent::send(double val, bool isNotANumber, CWStyleManager::CellFormat const &format)
|
|
{
|
|
MWAWContentListenerPtr listener=m_parserState->m_listener;
|
|
if (!listener)
|
|
@@ -970,7 +970,8 @@ void CWDbaseContent::send(double val, CWStyleManager::CellFormat const &format)
|
|
if (type>=10&&type<=11) type += 4;
|
|
else if (type>=14) type=16;
|
|
}
|
|
- if (type <= 0 || type >=16 || type==10 || type==11 || !boost::math::isfinite(val)) {
|
|
+ // note: if val*0!=0, val is a NaN so better so simply print NaN
|
|
+ if (type <= 0 || type >=16 || type==10 || type==11 || isNotANumber) {
|
|
s << val;
|
|
listener->insertUnicodeString(s.str().c_str());
|
|
return;
|
|
diff --git a/src/lib/CWDbaseContent.hxx b/src/lib/CWDbaseContent.hxx
|
|
index 36596e9..04177fe 100644
|
|
--- a/src/lib/CWDbaseContent.hxx
|
|
+++ b/src/lib/CWDbaseContent.hxx
|
|
@@ -78,7 +78,7 @@ protected:
|
|
//! different result type
|
|
enum Type { R_Unknown, R_Long, R_Double, R_String };
|
|
//! contructor
|
|
- Record() : m_style(-1), m_resType(R_Unknown), m_resLong(0), m_resDouble(0), m_resString(), m_format(0), m_font(3,9), m_justify(0), m_borders(0) {
|
|
+ Record() : m_style(-1), m_resType(R_Unknown), m_resLong(0), m_resDouble(0), m_resDoubleNaN(false), m_resString(), m_format(0), m_font(3,9), m_justify(0), m_borders(0) {
|
|
}
|
|
|
|
//! the style if known
|
|
@@ -89,6 +89,8 @@ protected:
|
|
long m_resLong;
|
|
//! the result id double
|
|
double m_resDouble;
|
|
+ //! a flag to know if a double result is nan or not
|
|
+ bool m_resDoubleNaN;
|
|
//! the result entry if string
|
|
MWAWEntry m_resString;
|
|
//! the format ( in a v1-3 spreadsheet)
|
|
@@ -123,7 +125,7 @@ protected:
|
|
bool readRecordDB(Vec2i const &where, long pos, Record &record);
|
|
|
|
//! send a double with a corresponding cell format
|
|
- void send(double val, CWStyleManager::CellFormat const &format);
|
|
+ void send(double val, bool isNotaNumber, CWStyleManager::CellFormat const &format);
|
|
|
|
//! the file version
|
|
int m_version;
|
|
diff --git a/src/lib/CWGraph.cxx b/src/lib/CWGraph.cxx
|
|
index 6f34628..01109f6 100644
|
|
--- a/src/lib/CWGraph.cxx
|
|
+++ b/src/lib/CWGraph.cxx
|
|
@@ -311,7 +311,7 @@ struct ZonePict : public Zone {
|
|
struct Bitmap : public CWStruct::DSET {
|
|
//! constructor
|
|
Bitmap(CWStruct::DSET const &dset = CWStruct::DSET()) :
|
|
- DSET(dset), m_bitmapType(-1), m_size(0,0), m_entry(), m_colorMap() {
|
|
+ DSET(dset), m_bitmapType(-1), m_bitmapSize(0,0), m_entry(), m_colorMap() {
|
|
}
|
|
|
|
//! operator<<
|
|
@@ -324,7 +324,7 @@ struct Bitmap : public CWStruct::DSET {
|
|
//! the bitmap type
|
|
int m_bitmapType;
|
|
//! the bitmap size
|
|
- Vec2i m_size;
|
|
+ Vec2i m_bitmapSize;
|
|
//! the bitmap entry
|
|
MWAWEntry m_entry;
|
|
//! the color map
|
|
@@ -666,7 +666,7 @@ void CWGraph::askToSend(int number, bool asGraphic, MWAWPosition const& pos)
|
|
////////////////////////////////////////////////////////////
|
|
// Intermediate level
|
|
////////////////////////////////////////////////////////////
|
|
-bool CWGraph::getSurfaceColor(CWGraphInternal::Style const style, MWAWColor &col) const
|
|
+bool CWGraph::getSurfaceColor(CWGraphInternal::Style const &style, MWAWColor &col) const
|
|
{
|
|
if (!style.hasSurfaceColor())
|
|
return false;
|
|
@@ -814,7 +814,7 @@ shared_ptr<CWStruct::DSET> CWGraph::readBitmapZone
|
|
dim[j] = (int) input->readLong(2);
|
|
f << "sz=" << dim[1] << "x" << dim[0] << ",";
|
|
if (dim[0] > 0 && dim[1] > 0) {
|
|
- bitmap->m_size = Vec2i(dim[1]+2, dim[0]+2);
|
|
+ bitmap->m_bitmapSize = Vec2i(dim[1]+2, dim[0]+2);
|
|
sizeSet = true;
|
|
}
|
|
ascFile.addDelimiter(input->tell(),']');
|
|
@@ -852,7 +852,7 @@ shared_ptr<CWStruct::DSET> CWGraph::readBitmapZone
|
|
for (int j = 0; j < 2; j++)
|
|
dim[j] = (int) input->readLong(2);
|
|
if (i == N-1 && !sizeSet)
|
|
- bitmap->m_size = Vec2i(dim[0]+2, dim[1]+2);
|
|
+ bitmap->m_bitmapSize = Vec2i(dim[0]+2, dim[1]+2);
|
|
|
|
f << "dim?=" << dim[0] << "x" << dim[1] << ",";
|
|
for (int j = 3; j < 6; j++) {
|
|
@@ -1993,18 +1993,18 @@ bool CWGraph::readBitmapData(CWGraphInternal::Bitmap &zone)
|
|
return false;
|
|
}
|
|
/* Fixme: this code can not works for the packed bitmap*/
|
|
- long numColors = zone.m_size[0]*zone.m_size[1];
|
|
+ long numColors = zone.m_bitmapSize[0]*zone.m_bitmapSize[1];
|
|
int numBytes = numColors ? int(sz/numColors) : 0;
|
|
if (sz != numBytes*numColors) {
|
|
// check for different row alignement: 2 and 4
|
|
for (int align=2; align <= 4; align*=2) {
|
|
- int diffToAlign=align-(zone.m_size[0]%align);
|
|
+ int diffToAlign=align-(zone.m_bitmapSize[0]%align);
|
|
if (diffToAlign==align) continue;
|
|
- numColors = (zone.m_size[0]+diffToAlign)*zone.m_size[1];
|
|
+ numColors = (zone.m_bitmapSize[0]+diffToAlign)*zone.m_bitmapSize[1];
|
|
numBytes = numColors ? int(sz/numColors) : 0;
|
|
if (sz == numBytes*numColors) {
|
|
- zone.m_size[0]+=diffToAlign;
|
|
- MWAW_DEBUG_MSG(("CWGraph::readBitmapData: increase width to %d\n",zone.m_size[0]));
|
|
+ zone.m_bitmapSize[0]+=diffToAlign;
|
|
+ MWAW_DEBUG_MSG(("CWGraph::readBitmapData: increase width to %d\n",zone.m_bitmapSize[0]));
|
|
break;
|
|
}
|
|
}
|
|
@@ -2048,7 +2048,7 @@ void CWGraph::checkNumberAccrossPages(CWGraphInternal::Group &group) const
|
|
|
|
void CWGraph::updateInformation(CWGraphInternal::Group &group) const
|
|
{
|
|
- if (group.m_blockToSendList.size() || group.m_idLinkedZonesMap.size())
|
|
+ if (!group.m_blockToSendList.empty() || !group.m_idLinkedZonesMap.empty())
|
|
return;
|
|
std::set<int> forbiddenZone;
|
|
|
|
@@ -2633,19 +2633,19 @@ bool CWGraph::sendBitmap(CWGraphInternal::Bitmap &bitmap, bool asGraphic, MWAWPo
|
|
MWAWPictBitmapColor *bmapColor = 0;
|
|
bool indexed = false;
|
|
if (numColors > 2) {
|
|
- bmapIndexed = new MWAWPictBitmapIndexed(bitmap.m_size);
|
|
+ bmapIndexed = new MWAWPictBitmapIndexed(bitmap.m_bitmapSize);
|
|
bmapIndexed->setColors(bitmap.m_colorMap);
|
|
bmap.reset(bmapIndexed);
|
|
indexed = true;
|
|
} else
|
|
- bmap.reset((bmapColor=new MWAWPictBitmapColor(bitmap.m_size)));
|
|
+ bmap.reset((bmapColor=new MWAWPictBitmapColor(bitmap.m_bitmapSize)));
|
|
|
|
//! let go
|
|
int fSz = bitmap.m_bitmapType;
|
|
MWAWInputStreamPtr &input= m_parserState->m_input;
|
|
input->seek(bitmap.m_entry.begin(), WPX_SEEK_SET);
|
|
- for (int r = 0; r < bitmap.m_size[1]; r++) {
|
|
- for (int c = 0; c < bitmap.m_size[0]; c++) {
|
|
+ for (int r = 0; r < bitmap.m_bitmapSize[1]; r++) {
|
|
+ for (int c = 0; c < bitmap.m_bitmapSize[0]; c++) {
|
|
long val = (long) input->readULong(fSz);
|
|
if (indexed) {
|
|
bmapIndexed->set(c,r,(int)val);
|
|
diff --git a/src/lib/CWGraph.hxx b/src/lib/CWGraph.hxx
|
|
index 0655464..bdb2bd5 100644
|
|
--- a/src/lib/CWGraph.hxx
|
|
+++ b/src/lib/CWGraph.hxx
|
|
@@ -98,7 +98,7 @@ public:
|
|
(CWStruct::DSET const &zone, MWAWEntry const &entry, bool &complete);
|
|
|
|
//! return the surface color which corresponds to some ids (if possible)
|
|
- bool getSurfaceColor(CWGraphInternal::Style const style, MWAWColor &col) const;
|
|
+ bool getSurfaceColor(CWGraphInternal::Style const &style, MWAWColor &col) const;
|
|
protected:
|
|
//! set the slide list ( for presentation )
|
|
void setSlideList(std::vector<int> const &slideList);
|
|
diff --git a/src/lib/HMWKGraph.cxx b/src/lib/HMWKGraph.cxx
|
|
index 2ad56d2..ab8b904 100644
|
|
--- a/src/lib/HMWKGraph.cxx
|
|
+++ b/src/lib/HMWKGraph.cxx
|
|
@@ -292,7 +292,7 @@ std::string Group::print() const
|
|
//! Internal: the picture of a HMWKGraph
|
|
struct PictureFrame : public Frame {
|
|
//! constructor
|
|
- PictureFrame(Frame const &orig) : Frame(orig), m_type(0), m_dim(0,0), m_borderDim(0,0) {
|
|
+ PictureFrame(Frame const &orig) : Frame(orig), m_pictureType(0), m_dim(0,0), m_borderDim(0,0) {
|
|
for (int i = 0; i < 7; ++i) m_values[i] = 0;
|
|
}
|
|
//! destructor
|
|
@@ -307,7 +307,7 @@ struct PictureFrame : public Frame {
|
|
//! print local data
|
|
std::string print() const {
|
|
std::stringstream s;
|
|
- if (m_type) s << "type?=" << m_type << ",";
|
|
+ if (m_pictureType) s << "type?=" << m_pictureType << ",";
|
|
if (m_dim[0] || m_dim[1])
|
|
s << "dim?=" << m_dim << ",";
|
|
if (m_borderDim[0] > 0 || m_borderDim[1] > 0)
|
|
@@ -319,7 +319,7 @@ struct PictureFrame : public Frame {
|
|
}
|
|
|
|
//! a type
|
|
- int m_type;
|
|
+ int m_pictureType;
|
|
//! a dim?
|
|
Vec2i m_dim;
|
|
//! the border dim?
|
|
@@ -422,7 +422,7 @@ private:
|
|
//! Internal: the textbox of a HMWKGraph
|
|
struct TextBox : public Frame {
|
|
//! constructor
|
|
- TextBox(Frame const &orig, bool isComment) : Frame(orig), m_commentBox(isComment), m_textFileId(-1), m_linkedIdList(), m_isLinked(false), m_extra("") {
|
|
+ TextBox(Frame const &orig, bool isComment) : Frame(orig), m_commentBox(isComment), m_textFileId(-1), m_linkedIdList(), m_isLinked(false) {
|
|
for (int i = 0; i < 2; ++i) m_dim[i] = 0;
|
|
}
|
|
//! destructor
|
|
@@ -517,8 +517,6 @@ struct TextBox : public Frame {
|
|
std::vector<long> m_linkedIdList;
|
|
//! a flag to know if this textbox is linked to a previous box
|
|
bool m_isLinked;
|
|
- //! extra data
|
|
- std::string m_extra;
|
|
};
|
|
|
|
bool TableCell::sendContent(MWAWContentListenerPtr, MWAWTable &table)
|
|
@@ -1603,7 +1601,7 @@ shared_ptr<HMWKGraphInternal::PictureFrame> HMWKGraph::readPictureFrame(shared_p
|
|
picture.reset(new HMWKGraphInternal::PictureFrame(header));
|
|
libmwaw::DebugFile &asciiFile = zone->ascii();
|
|
libmwaw::DebugStream f;
|
|
- picture->m_type = (int) input->readLong(2); // 0 or 4 : or maybe wrapping
|
|
+ picture->m_pictureType = (int) input->readLong(2); // 0 or 4 : or maybe wrapping
|
|
for (int i = 0; i < 5; ++i) // always 0
|
|
picture->m_values[i] = (int) input->readLong(2);
|
|
float bDim[2];
|
|
diff --git a/src/lib/MSKGraph.cxx b/src/lib/MSKGraph.cxx
|
|
index fa876a1..dd873c1 100644
|
|
--- a/src/lib/MSKGraph.cxx
|
|
+++ b/src/lib/MSKGraph.cxx
|
|
@@ -2729,7 +2729,7 @@ void MSKGraph::sendAll(int zoneId, bool mainZone)
|
|
}
|
|
}
|
|
|
|
-void MSKGraph::sendObjects(MSKGraph::SendData what)
|
|
+void MSKGraph::sendObjects(MSKGraph::SendData const &what)
|
|
{
|
|
MWAWContentListenerPtr listener=m_parserState->m_listener;
|
|
if (!listener) {
|
|
diff --git a/src/lib/MSKGraph.hxx b/src/lib/MSKGraph.hxx
|
|
index 29ee53a..f9518e4 100644
|
|
--- a/src/lib/MSKGraph.hxx
|
|
+++ b/src/lib/MSKGraph.hxx
|
|
@@ -110,7 +110,7 @@ public:
|
|
Vec2i m_size;
|
|
};
|
|
/** sends all the object of a page, frame, ... */
|
|
- void sendObjects(SendData const what);
|
|
+ void sendObjects(SendData const &what);
|
|
|
|
/** try to update positions knowing pages and lines height */
|
|
void computePositions(int zoneId, std::vector<int> &linesHeight, std::vector<int> &pagesHeight);
|
|
diff --git a/src/lib/MSKParser.cxx b/src/lib/MSKParser.cxx
|
|
index 16b7d84..c527e90 100644
|
|
--- a/src/lib/MSKParser.cxx
|
|
+++ b/src/lib/MSKParser.cxx
|
|
@@ -36,27 +36,13 @@
|
|
|
|
#include "MSKParser.hxx"
|
|
|
|
-/** Internal: the structures of a MSKParser */
|
|
-namespace MSKParserInternal
|
|
-{
|
|
-////////////////////////////////////////
|
|
-//! Internal: the state of a MSK3Parser
|
|
-struct State {
|
|
- //! constructor
|
|
- State() {
|
|
- }
|
|
-};
|
|
-}
|
|
-
|
|
MSKParser::MSKParser(MWAWInputStreamPtr input, MWAWRSRCParserPtr rsrcParser, MWAWHeader *header) :
|
|
- MWAWParser(input, rsrcParser, header), m_state(new MSKParserInternal::State),
|
|
- m_input(input), m_asciiFile(input)
|
|
+ MWAWParser(input, rsrcParser, header), m_input(input), m_asciiFile(input)
|
|
{
|
|
}
|
|
|
|
MSKParser::MSKParser(MWAWInputStreamPtr input, MWAWParserStatePtr parserState) :
|
|
- MWAWParser(parserState), m_state(new MSKParserInternal::State),
|
|
- m_input(input), m_asciiFile(input)
|
|
+ MWAWParser(parserState), m_input(input), m_asciiFile(input)
|
|
{
|
|
}
|
|
|
|
diff --git a/src/lib/MSKParser.hxx b/src/lib/MSKParser.hxx
|
|
index eb29d1b..88244b9 100644
|
|
--- a/src/lib/MSKParser.hxx
|
|
+++ b/src/lib/MSKParser.hxx
|
|
@@ -94,8 +94,6 @@ public:
|
|
return m_asciiFile;
|
|
}
|
|
protected:
|
|
- //! the state
|
|
- shared_ptr<MSKParserInternal::State> m_state;
|
|
//! the input which can be an OLE in MSWorks 4 file
|
|
MWAWInputStreamPtr m_input;
|
|
//! the debug file of the actual input
|
|
diff --git a/src/lib/MSWTextStyles.cxx b/src/lib/MSWTextStyles.cxx
|
|
index 93a6e62..2bba921 100644
|
|
--- a/src/lib/MSWTextStyles.cxx
|
|
+++ b/src/lib/MSWTextStyles.cxx
|
|
@@ -386,6 +386,7 @@ bool MSWTextStyles::readParagraph(MSWStruct::Paragraph ¶, int dataSz)
|
|
int const vers = version();
|
|
libmwaw::DebugFile &ascFile = m_parserState->m_asciiFile;
|
|
libmwaw::DebugStream f;
|
|
+ int numFont=0;
|
|
while (long(input->tell()) < endPos) {
|
|
long actPos = input->tell();
|
|
/* 5-16: basic paragraph properties
|
|
@@ -403,7 +404,6 @@ bool MSWTextStyles::readParagraph(MSWStruct::Paragraph ¶, int dataSz)
|
|
}
|
|
bool done = false;
|
|
long dSz = endPos-actPos;
|
|
- int numFont=0;
|
|
switch(wh) {
|
|
case 0:
|
|
done = (actPos+1==endPos||(dataSz==2 && actPos+2==endPos));
|
|
diff --git a/src/lib/MWAWDocument.cxx b/src/lib/MWAWDocument.cxx
|
|
index ef9d280..182de89 100644
|
|
--- a/src/lib/MWAWDocument.cxx
|
|
+++ b/src/lib/MWAWDocument.cxx
|
|
@@ -522,9 +522,9 @@ void GraphicExporter::endElement(const char *psName)
|
|
m_output->endTextObject();
|
|
#ifdef DEBUG
|
|
else if (strcmp(psName, "SetStyle") && strcmp(psName, "Rectangle") &&
|
|
- strcmp(psName, "Rectangle") && strcmp(psName, "Ellipse") &&
|
|
- strcmp(psName, "Polygon") && strcmp(psName, "Polyline") &&
|
|
- strcmp(psName, "Path") && strcmp(psName, "GraphicObject")) {
|
|
+ strcmp(psName, "Ellipse") && strcmp(psName, "Polygon") &&
|
|
+ strcmp(psName, "Polyline") && strcmp(psName, "Path") &&
|
|
+ strcmp(psName, "GraphicObject")) {
|
|
MWAW_DEBUG_MSG(("GraphicExporter::endElement: called with unexpected name %s\n", psName));
|
|
}
|
|
#endif
|
|
diff --git a/src/lib/MWAWInputStream.cxx b/src/lib/MWAWInputStream.cxx
|
|
index c4dc2b6..9b2e28c 100644
|
|
--- a/src/lib/MWAWInputStream.cxx
|
|
+++ b/src/lib/MWAWInputStream.cxx
|
|
@@ -229,7 +229,7 @@ uint8_t MWAWInputStream::readU8(WPXInputStream *stream)
|
|
return *(uint8_t const *)(p);
|
|
}
|
|
|
|
-bool MWAWInputStream::readDouble(double &res)
|
|
+bool MWAWInputStream::readDouble(double &res, bool &isNotANumber)
|
|
{
|
|
if (!m_stream) return false;
|
|
long pos=tell();
|
|
@@ -244,6 +244,7 @@ bool MWAWInputStream::readDouble(double &res)
|
|
}
|
|
exp -= 0x3fff;
|
|
|
|
+ isNotANumber=false;
|
|
unsigned long mantisse = (unsigned long) readULong(4);
|
|
if ((mantisse & 0x80000000) == 0) {
|
|
if (readULong(4) != 0) return false;
|
|
@@ -251,6 +252,7 @@ bool MWAWInputStream::readDouble(double &res)
|
|
if (exp == -0x3fff && mantisse == 0) return true; // ok zero
|
|
if (exp == 0x4000 && (mantisse & 0xFFFFFFL)==0) { // ok Nan
|
|
res=std::numeric_limits<double>::quiet_NaN();
|
|
+ isNotANumber = true;
|
|
return true;
|
|
}
|
|
return false;
|
|
diff --git a/src/lib/MWAWInputStream.hxx b/src/lib/MWAWInputStream.hxx
|
|
index 818451a..bc29165 100644
|
|
--- a/src/lib/MWAWInputStream.hxx
|
|
+++ b/src/lib/MWAWInputStream.hxx
|
|
@@ -139,7 +139,7 @@ public:
|
|
//! return a int8, int16, int32 readed from actualPos
|
|
long readLong(int num);
|
|
//! try to read a double (ppc)
|
|
- bool readDouble(double &res);
|
|
+ bool readDouble(double &res, bool &isNotANumber);
|
|
|
|
/**! reads numbytes data, WITHOUT using any endian or section consideration
|
|
* \return a pointer to the read elements
|
|
diff --git a/src/lib/MWAWOLEParser.cxx b/src/lib/MWAWOLEParser.cxx
|
|
index a14aee1..70d6dd6 100644
|
|
--- a/src/lib/MWAWOLEParser.cxx
|
|
+++ b/src/lib/MWAWOLEParser.cxx
|
|
@@ -622,7 +622,7 @@ bool MWAWOLEParser::readCompObj(MWAWInputStreamPtr ip, std::string const &oleNam
|
|
if (clsName)
|
|
f << "'" << clsName << "'";
|
|
else {
|
|
- MWAW_DEBUG_MSG(("MWAWOLEParser::readCompObj: unknown clsid=%ld\n", clsData[0]));
|
|
+ MWAW_DEBUG_MSG(("MWAWOLEParser::readCompObj: unknown clsid=%ld\n", (long) clsData[0]));
|
|
f << "unknCLSID='" << std::hex << clsData[0] << "'";
|
|
}
|
|
} else {
|
|
diff --git a/src/lib/MWAWOLEStream.cxx b/src/lib/MWAWOLEStream.cxx
|
|
index 6ffebea..9abdd90 100644
|
|
--- a/src/lib/MWAWOLEStream.cxx
|
|
+++ b/src/lib/MWAWOLEStream.cxx
|
|
@@ -454,7 +454,7 @@ void DirEntry::load( unsigned char *buffer, unsigned len )
|
|
m_name="R";
|
|
m_macRootEntry=true;
|
|
} else {
|
|
- for( unsigned j=0; ( buffer[j]) && (j<name_len); j+= 2 )
|
|
+ for( unsigned j=0; j<name_len && buffer[j]; j+= 2 )
|
|
m_name.append( 1, char(buffer[j]) );
|
|
}
|
|
|
|
diff --git a/src/lib/MWAWPropertyHandler.cxx b/src/lib/MWAWPropertyHandler.cxx
|
|
index a81f5fe..e4737f4 100644
|
|
--- a/src/lib/MWAWPropertyHandler.cxx
|
|
+++ b/src/lib/MWAWPropertyHandler.cxx
|
|
@@ -410,39 +410,40 @@ protected:
|
|
if (!readString(input, key)) return false;
|
|
if (!readString(input, val)) return false;
|
|
|
|
- // check if the val can be a double, ...
|
|
- if (!val.empty() && (val[0]=='-' || val[0]=='.' || (val[0]>='0' && val[0]<='9'))) {
|
|
- std::istringstream iss(val);
|
|
- double res = 0.0;
|
|
- iss >> res;
|
|
- if (!iss.fail()) {
|
|
- if (iss.eof() || iss.peek() == std::char_traits<char>::eof()) {
|
|
- list.insert(key.c_str(), res);
|
|
- return true;
|
|
- }
|
|
- std::string remain;
|
|
- iss >> remain;
|
|
- if (iss.peek() == std::char_traits<char>::eof()) {
|
|
- if (remain=="pt") {
|
|
- list.insert(key.c_str(), res/72., WPX_INCH);
|
|
- return true;
|
|
- }
|
|
- if (remain=="in") {
|
|
- list.insert(key.c_str(), res, WPX_INCH);
|
|
- return true;
|
|
- }
|
|
- if (remain=="%") {
|
|
- list.insert(key.c_str(), res/100., WPX_PERCENT);
|
|
- return true;
|
|
- }
|
|
- if (remain=="*") {
|
|
- list.insert(key.c_str(), res/1440., WPX_INCH);
|
|
- return true;
|
|
- }
|
|
- }
|
|
+ std::string number(""), remain("");
|
|
+ // check if the val can be a double, first isolate the potential numbering part ...
|
|
+ for (size_t s=0; s<val.size(); ++s) {
|
|
+ char c=(char) val[s];
|
|
+ if (c=='-' || c=='.' || c=='e' || c=='E' || (c>='0' && c<='9')) {
|
|
+ number+=c;
|
|
+ continue;
|
|
}
|
|
+ remain=val.substr(s);
|
|
+ break;
|
|
+ }
|
|
+ if (number.empty()) {
|
|
+ list.insert(key.c_str(), val.c_str());
|
|
+ return true;
|
|
+ }
|
|
+ std::istringstream iss(number);
|
|
+ double res = 0.0;
|
|
+ iss >> res;
|
|
+ if (iss.fail() || iss.peek()!=std::char_traits<char>::eof()) {
|
|
+ list.insert(key.c_str(), val.c_str());
|
|
+ return true;
|
|
}
|
|
- list.insert(key.c_str(), val.c_str());
|
|
+ if (remain.empty())
|
|
+ list.insert(key.c_str(), res);
|
|
+ else if (remain=="pt")
|
|
+ list.insert(key.c_str(), res/72., WPX_INCH);
|
|
+ else if (remain=="in")
|
|
+ list.insert(key.c_str(), res, WPX_INCH);
|
|
+ else if (remain=="%")
|
|
+ list.insert(key.c_str(), res/100., WPX_PERCENT);
|
|
+ else if (remain=="*")
|
|
+ list.insert(key.c_str(), res/1440., WPX_INCH);
|
|
+ else
|
|
+ list.insert(key.c_str(), val.c_str());
|
|
return true;
|
|
}
|
|
|
|
--
|
|
1.9.0
|
|
|