diff options
author | Muthu Subramanian <sumuthu@novell.com> | 2011-04-26 21:43:48 +0530 |
---|---|---|
committer | Muthu Subramanian <sumuthu@novell.com> | 2011-04-26 21:43:48 +0530 |
commit | 624f37951076b0f6b4e720d44c01eaf8359ee4ed (patch) | |
tree | 5720336cf1330250c2561cc8973f712384e3f531 | |
parent | 46f47b09b6801a25eb296529e2faa4026896467b (diff) |
n#677811 HTML Export Fixes. More might be required!!!
* Fixed ColGroup export - it should be groups of them
not all <col> listed there.
* <TBODY> should be exported only when THEAD and TFOOT
are exported.
* Fixed many export of attributes, values need to be
double quoted.
-rw-r--r-- | sc/source/filter/html/htmlexp.cxx | 97 |
1 files changed, 66 insertions, 31 deletions
diff --git a/sc/source/filter/html/htmlexp.cxx b/sc/source/filter/html/htmlexp.cxx index 1c97b00152e6..147d403d6891 100644 --- a/sc/source/filter/html/htmlexp.cxx +++ b/sc/source/filter/html/htmlexp.cxx @@ -168,7 +168,26 @@ FltError ScFormatFilterPluginImpl::ScExportHTML( SvStream& rStrm, const String& } -void lcl_AddStamp( String& rStr, const String& rName, +static ByteString lcl_getColGroupString( sal_Int32 nSpan, sal_Int32 nWidth ) +{ + ByteString aByteStr = OOO_STRING_SVTOOLS_HTML_colgroup; + aByteStr += ' '; + if( nSpan > 1 ) + { + aByteStr += OOO_STRING_SVTOOLS_HTML_O_span; + aByteStr += "=\""; + aByteStr += ByteString::CreateFromInt32( nSpan ); + aByteStr += "\" "; + } + aByteStr += OOO_STRING_SVTOOLS_HTML_O_width; + aByteStr += "=\""; + aByteStr += ByteString::CreateFromInt32( nWidth ); + aByteStr += '"'; + return aByteStr; +} + + +static void lcl_AddStamp( String& rStr, const String& rName, const ::com::sun::star::util::DateTime& rDateTime, const LocaleDataWrapper& rLoc ) { @@ -201,7 +220,7 @@ void lcl_AddStamp( String& rStr, const String& rName, } -void lcl_AppendHTMLColorTripel( ByteString& rStr, const Color& rColor ) +static void lcl_AppendHTMLColorTripel( ByteString& rStr, const Color& rColor ) { // <font COLOR="#00FF40">hallo</font> sal_Char buf[64]; @@ -701,7 +720,7 @@ void ScHTMLExport::WriteTables() ByteString aByteStrOut = OOO_STRING_SVTOOLS_HTML_table; // FRAME=VOID, we do the styling of the cells in <TD> - (((aByteStrOut += ' ') += OOO_STRING_SVTOOLS_HTML_frame) += '=') += OOO_STRING_SVTOOLS_HTML_TF_void; + ((((aByteStrOut += ' ') += OOO_STRING_SVTOOLS_HTML_frame) += "=\"") += OOO_STRING_SVTOOLS_HTML_TF_void) += '"'; bTabHasGraphics = bTabAlignedLeft = false; if ( bAll && pDrawLayer ) @@ -710,11 +729,11 @@ void ScHTMLExport::WriteTables() // more <TABLE ...> if ( bTabAlignedLeft ) - (((aByteStrOut += ' ') += OOO_STRING_SVTOOLS_HTML_O_align) += '=') += OOO_STRING_SVTOOLS_HTML_AL_left; + ((((aByteStrOut += ' ') += OOO_STRING_SVTOOLS_HTML_O_align) += "=\"") += OOO_STRING_SVTOOLS_HTML_AL_left) += '"'; // ALIGN=LEFT allow text and graphics to flow around // CELLSPACING - (((aByteStrOut += ' ' ) += OOO_STRING_SVTOOLS_HTML_O_cellspacing ) += '=') += - ByteString::CreateFromInt32( nCellSpacing ); + ((((aByteStrOut += ' ' ) += OOO_STRING_SVTOOLS_HTML_O_cellspacing ) += "=\"") += + ByteString::CreateFromInt32( nCellSpacing )) += '"'; // COLS=n SCCOL nColCnt = 0; SCCOL nCol; @@ -723,36 +742,49 @@ void ScHTMLExport::WriteTables() if ( !pDoc->ColHidden(nCol, nTab) ) ++nColCnt; } - (((aByteStrOut += ' ') += OOO_STRING_SVTOOLS_HTML_O_cols) += '=') += ByteString::CreateFromInt32( nColCnt ); + ((((aByteStrOut += ' ') += OOO_STRING_SVTOOLS_HTML_O_cols) += "=\"") += ByteString::CreateFromInt32( nColCnt ))+='"'; // RULES=NONE, we do the styling of the cells in <TD> - (((aByteStrOut += ' ') += OOO_STRING_SVTOOLS_HTML_O_rules) += '=') += OOO_STRING_SVTOOLS_HTML_TR_none; + ((((aByteStrOut += ' ') += OOO_STRING_SVTOOLS_HTML_O_rules) += "=\"") += OOO_STRING_SVTOOLS_HTML_TR_none)+='"'; // BORDER=0, we do the styling of the cells in <TD> - ((aByteStrOut += ' ') += OOO_STRING_SVTOOLS_HTML_O_border) += "=0"; + ((aByteStrOut += ' ') += OOO_STRING_SVTOOLS_HTML_O_border) += "=\"0\""; IncIndent(1); TAG_ON_LF( aByteStrOut.GetBuffer() ); - // <COLGROUP> - TAG_ON( OOO_STRING_SVTOOLS_HTML_colgroup ); - // <COL WIDTH=x> as pre-info for long tables - ByteString aByteStr = OOO_STRING_SVTOOLS_HTML_col; - aByteStr += ' '; - aByteStr += OOO_STRING_SVTOOLS_HTML_O_width; - aByteStr += '='; - for ( nCol=nStartCol; nCol<=nEndCol; nCol++ ) + // --- <COLGROUP> ---- { - if ( pDoc->ColHidden(nCol, nTab) ) - continue; // for - - aByteStrOut = aByteStr; - aByteStrOut += ByteString::CreateFromInt32( - ToPixel( pDoc->GetColWidth( nCol, nTab ) ) ); - TAG_ON( aByteStrOut.GetBuffer() ); + nCol = nStartCol; + sal_Int32 nWidth = 0; + sal_Int32 nSpan = 0; + while( nCol <= nEndCol ) + { + if( pDoc->ColHidden(nCol, nTab) ) + continue; + if( nWidth != ToPixel( pDoc->GetColWidth( nCol, nTab ) ) ) + { + if( nSpan != 0 ) + { + TAG_ON(lcl_getColGroupString(nSpan, nWidth).GetBuffer()); + TAG_OFF_LF( OOO_STRING_SVTOOLS_HTML_colgroup ); + } + nWidth = ToPixel( pDoc->GetColWidth( nCol, nTab ) ); + nSpan = 1; + } + else + nSpan++; + nCol++; + } + if( nSpan ) + { + TAG_ON(lcl_getColGroupString(nSpan, nWidth).GetBuffer()); + TAG_OFF_LF( OOO_STRING_SVTOOLS_HTML_colgroup ); + } } - TAG_OFF_LF( OOO_STRING_SVTOOLS_HTML_colgroup ); - // <TBODY> - IncIndent(1); TAG_ON_LF( OOO_STRING_SVTOOLS_HTML_tbody ); + // ------------------- + + // <TBODY> // Re-enable only when THEAD and TFOOT are exported + // IncIndent(1); TAG_ON_LF( OOO_STRING_SVTOOLS_HTML_tbody ); // At least old (3.x, 4.x?) Netscape doesn't follow <TABLE COLS=n> and // <COL WIDTH=x> specified, but needs a width at every column. bTableDataWidth = sal_True; // widths in first row @@ -784,7 +816,8 @@ void ScHTMLExport::WriteTables() IncIndent(-1); TAG_OFF_LF( OOO_STRING_SVTOOLS_HTML_tablerow ); } - IncIndent(-1); TAG_OFF_LF( OOO_STRING_SVTOOLS_HTML_tbody ); + // Uncomment later + // IncIndent(-1); TAG_OFF_LF( OOO_STRING_SVTOOLS_HTML_tbody ); IncIndent(-1); TAG_OFF_LF( OOO_STRING_SVTOOLS_HTML_table ); @@ -922,10 +955,12 @@ void ScHTMLExport::WriteCell( SCCOL nCol, SCROW nRow, SCTAB nTab ) nHeightPixel = ToPixel( pDoc->GetRowHeight( nRow, nTab ) ); } +#if 0 // No point - this is already defined in ColGroup if ( bTableDataWidth ) - (((aStrTD += ' ') += OOO_STRING_SVTOOLS_HTML_O_width) += '=') += ByteString::CreateFromInt32( nWidthPixel ); + ((((aStrTD += ' ') += OOO_STRING_SVTOOLS_HTML_O_width) += "=\"") += ByteString::CreateFromInt32( nWidthPixel )) += '"'; +#endif if ( bTableDataHeight ) - (((aStrTD += ' ') += OOO_STRING_SVTOOLS_HTML_O_height) += '=') += ByteString::CreateFromInt32( nHeightPixel ); + ((((aStrTD += ' ') += OOO_STRING_SVTOOLS_HTML_O_height) += "=\"") += ByteString::CreateFromInt32( nHeightPixel )) += '"'; const SvxFontItem& rFontItem = (const SvxFontItem&) pAttr->GetItem( ScGlobal::GetScriptedWhichID( nScriptType, ATTR_FONT), @@ -997,7 +1032,7 @@ void ScHTMLExport::WriteCell( SCCOL nCol, SCROW nRow, SCTAB nTab ) default: pChar = OOO_STRING_SVTOOLS_HTML_AL_left; break; } - (((aStrTD += ' ') += OOO_STRING_SVTOOLS_HTML_O_align) += '=') += pChar; + ((((aStrTD += ' ') += OOO_STRING_SVTOOLS_HTML_O_align) += "=\"") += pChar)+='"'; switch( rVerJustifyItem.GetValue() ) { |