diff --git a/MsBinaryFile/DocFile/TableMapping.cpp b/MsBinaryFile/DocFile/TableMapping.cpp index dde86009d8..eb3390ef52 100644 --- a/MsBinaryFile/DocFile/TableMapping.cpp +++ b/MsBinaryFile/DocFile/TableMapping.cpp @@ -265,12 +265,15 @@ namespace DocFileFormat DocParagraph::~DocParagraph() { } - + void DocParagraph::AddCP(int _cpStart, int _cpEnd) + { + if (_cpStart < cpStart) cpStart = _cpStart; + if (_cpEnd > cpEnd) cpEnd = _cpEnd; + } int DocParagraph::GetCPStart() const { return cpStart; } - void DocParagraph::SetCPStart( int _cpStart ) { cpStart = _cpStart; @@ -342,7 +345,6 @@ namespace DocFileFormat if (papx_1 == papx_2) { bBadMarker = true; - return false; } return true; } @@ -414,6 +416,7 @@ namespace DocFileFormat TableRow tableRow ( documentMapping, _cp ); TableCell tableCell ( documentMapping, _cp ); + bool bBadMarker = false; do { fc = documentMapping->m_document->FindFileCharPos(_cp); @@ -442,18 +445,37 @@ namespace DocFileFormat } else { - bool bBadMarker = false; - if ( IsCellMarker( _cp, bBadMarker) ) + bool bBad = false; + if (IsCellMarker(_cp, bBad)) { - lastCellCP = _cp; - tableCell.SetCP( _cp ); - tableCell.SetDepth( _depth ); + if (bBad) + { + tableCell.AddItem(DocParagraph(documentMapping, paragraphBeginCP, _cp)); + _cp++; + paragraphBeginCP = (_cp + 1); - tableCell.AddItem( DocParagraph( documentMapping, paragraphBeginCP, _cp ) ); + bBadMarker = bBad; + } + else + { + lastCellCP = _cp; + tableCell.SetCP(_cp); + tableCell.SetDepth(_depth); - tableRow.AddCell( tableCell ); - tableCell.Clear(); - paragraphBeginCP = ( _cp + 1 ); + DocParagraph para(documentMapping, paragraphBeginCP, _cp); + //if (bBadMarker && !tableCell.IsEmpty()) + //{ + // tableCell.GetLast()->AddCP(paragraphBeginCP, _cp); + //} + //else + tableCell.AddItem(para); + + bBadMarker = false; + + tableRow.AddCell(tableCell); + tableCell.Clear(); + paragraphBeginCP = (_cp + 1); + } } else if ( IsRowMarker( _cp ) ) { @@ -462,7 +484,15 @@ namespace DocFileFormat tableCell.SetCP(_cp); tableCell.SetDepth(_depth); - tableCell.AddItem(DocParagraph(documentMapping, paragraphBeginCP, _cp)); + DocParagraph para(documentMapping, paragraphBeginCP, _cp); + //if (bBadMarker && !tableCell.IsEmpty()) + //{ + // tableCell.GetLast()->AddCP(paragraphBeginCP, _cp); + //} + //else + tableCell.AddItem(para); + + bBadMarker = false; tableRow.AddCell(tableCell); tableCell.Clear(); @@ -474,10 +504,18 @@ namespace DocFileFormat tableRow.Clear(); paragraphBeginCP++; } - else if ( !bBadMarker && IsParagraphMarker( _cp ) ) + else if ( IsParagraphMarker( _cp ) ) { - tableCell.AddItem( DocParagraph( documentMapping, paragraphBeginCP, _cp ) ); + DocParagraph para(documentMapping, paragraphBeginCP, _cp); + //if (bBadMarker && !tableCell.IsEmpty()) + //{ + // tableCell.GetLast()->AddCP(paragraphBeginCP, _cp); + //} + //else + tableCell.AddItem(para); + paragraphBeginCP = ( _cp + 1 ); + bBadMarker = false; } _cp++; } @@ -500,7 +538,11 @@ namespace DocFileFormat { cpStart = _cpStart; } - + void Table::AddCP(int _cpStart, int _cpEnd) + { + if (_cpStart < cpStart) cpStart = _cpStart; + if (_cpEnd > cpEnd) cpEnd = _cpEnd; + } int Table::GetCPEnd() const { return cpEnd; diff --git a/MsBinaryFile/DocFile/TableMapping.h b/MsBinaryFile/DocFile/TableMapping.h index ea21d68f93..b9d5db6dd0 100644 --- a/MsBinaryFile/DocFile/TableMapping.h +++ b/MsBinaryFile/DocFile/TableMapping.h @@ -41,6 +41,8 @@ namespace DocFileFormat virtual int GetCPStart() const = 0; virtual int GetCPEnd() const = 0; virtual ~ITableCellElement() {} + + virtual void AddCP(int _cpStart = 0, int _cpEnd = 0) = 0; }; typedef NSCommon::smart_ptr ITableCellElementPtr; @@ -61,6 +63,8 @@ namespace DocFileFormat void Convert( IMapping* mapping, TablePropertyExceptions* tapx, const std::vector* grid, int& gridIndex, int cellIndex ); ~TableCell(); + ITableCellElementPtr GetLast() { return cellElements.back(); } + private: int cp; @@ -105,6 +109,7 @@ namespace DocFileFormat virtual IVirtualConstructor* Clone() const; virtual void Convert( IMapping* mapping ); virtual ~DocParagraph(); + virtual void AddCP(int _cpStart = 0, int _cpEnd = 0); private: @@ -142,6 +147,7 @@ namespace DocFileFormat virtual IVirtualConstructor* Clone() const; virtual void Convert( IMapping* mapping ); virtual ~Table(); + virtual void AddCP(int _cpStart = 0, int _cpEnd = 0); private: