From 2b9e55aa4ce070eb5301adb67af85d062eb1dc36 Mon Sep 17 00:00:00 2001 From: Miklos Vajna Date: Fri, 13 Jul 2018 15:26:34 +0200 Subject: [PATCH] sw HTML export: fix XHTML mode of 'Heading 7' style Font name, font size. Change-Id: I32b8b2d596b0e0aeb72156edaae83b4b04765583 Reviewed-on: https://gerrit.libreoffice.org/57392 Reviewed-by: Miklos Vajna Tested-by: Jenkins --- sw/qa/extras/htmlexport/data/reqif.odt | Bin 0 -> 8559 bytes sw/qa/extras/htmlexport/htmlexport.cxx | 14 +++++ sw/source/filter/html/htmlatr.cxx | 72 ++++++++++++++++++------- 3 files changed, 68 insertions(+), 18 deletions(-) create mode 100644 sw/qa/extras/htmlexport/data/reqif.odt diff --git a/sw/qa/extras/htmlexport/data/reqif.odt b/sw/qa/extras/htmlexport/data/reqif.odt new file mode 100644 index 0000000000000000000000000000000000000000..a094202e9775d5bf942bb28f531cd66420c422d2 GIT binary patch literal 8559 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 sw)Rf&JJ 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 literal 0 HcmV?d00001 diff --git a/sw/qa/extras/htmlexport/htmlexport.cxx b/sw/qa/extras/htmlexport/htmlexport.cxx index 499d8c3dc0c8..0cc519ab288d 100644 --- a/sw/qa/extras/htmlexport/htmlexport.cxx +++ b/sw/qa/extras/htmlexport/htmlexport.cxx @@ -508,6 +508,20 @@ DECLARE_HTMLEXPORT_TEST(testReqIfTable2, "reqif-table2.odt") CPPUNIT_ASSERT(aStream.indexOf("") != -1); } +DECLARE_HTMLEXPORT_TEST(testReqIfWellFormed, "reqif.odt") +{ + SvStream* pStream = maTempFile.GetStream(StreamMode::READ); + CPPUNIT_ASSERT(pStream); + pStream->Seek(STREAM_SEEK_TO_END); + sal_uInt64 nLength = pStream->Tell(); + pStream->Seek(0); + OString aStream(read_uInt8s_ToOString(*pStream, nLength)); + // This failed, was written. + CPPUNIT_ASSERT(aStream.indexOf(" was written. + CPPUNIT_ASSERT(aStream.indexOf("(rHt), aNames, 0, rHTMLWrt.IsHTMLMode(HTMLMODE_FONT_GENERIC) ); - OString sOut = "<" OOO_STRING_SVTOOLS_HTML_font " " - OOO_STRING_SVTOOLS_HTML_O_face "=\""; - rWrt.Strm().WriteOString( sOut ); - HTMLOutFuncs::Out_String( rWrt.Strm(), aNames, rHTMLWrt.m_eDestEnc, &rHTMLWrt.m_aNonConvertableCharacters ) - .WriteCharPtr( "\">" ); + if (rHTMLWrt.mbXHTML) + { + OString sOut = "<" + rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_span + " " OOO_STRING_SVTOOLS_HTML_O_style "=\"font-family: "; + rWrt.Strm().WriteOString(sOut); + HTMLOutFuncs::Out_String(rWrt.Strm(), aNames, rHTMLWrt.m_eDestEnc, + &rHTMLWrt.m_aNonConvertableCharacters) + .WriteCharPtr("\">"); + } + else + { + OString sOut = "<" OOO_STRING_SVTOOLS_HTML_font " " + OOO_STRING_SVTOOLS_HTML_O_face "=\""; + rWrt.Strm().WriteOString( sOut ); + HTMLOutFuncs::Out_String( rWrt.Strm(), aNames, rHTMLWrt.m_eDestEnc, &rHTMLWrt.m_aNonConvertableCharacters ) + .WriteCharPtr( "\">" ); + } } else - HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_font, false ); + { + if (rHTMLWrt.mbXHTML) + HTMLOutFuncs::Out_AsciiTag( + rWrt.Strm(), rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_span, false); + else + HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_font, false ); + } return rWrt; } @@ -2709,24 +2727,42 @@ static Writer& OutHTML_SvxFontHeight( Writer& rWrt, const SfxPoolItem& rHt ) if( rHTMLWrt.m_bTagOn ) { - OString sOut = "<" OOO_STRING_SVTOOLS_HTML_font; - - sal_uInt32 nHeight = static_cast(rHt).GetHeight(); - sal_uInt16 nSize = rHTMLWrt.GetHTMLFontSize( nHeight ); - sOut += " " OOO_STRING_SVTOOLS_HTML_O_size "=\"" + - OString::number(static_cast(nSize)) + "\""; - rWrt.Strm().WriteOString( sOut ); - - if( rHTMLWrt.m_bCfgOutStyles && rHTMLWrt.m_bTextAttr ) + if (rHTMLWrt.mbXHTML) { - // always export font size as CSS option, too - OutCSS1_HintStyleOpt( rWrt, rHt ); + OString sOut = "<" + rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_span; + + sal_uInt32 nHeight = static_cast(rHt).GetHeight(); + // Twips -> points. + sal_uInt16 nSize = nHeight / 20; + sOut += " " OOO_STRING_SVTOOLS_HTML_O_style "=\"font-size: " + + OString::number(static_cast(nSize)) + "pt\""; + rWrt.Strm().WriteOString(sOut); + } + else + { + OString sOut = "<" OOO_STRING_SVTOOLS_HTML_font; + + sal_uInt32 nHeight = static_cast(rHt).GetHeight(); + sal_uInt16 nSize = rHTMLWrt.GetHTMLFontSize( nHeight ); + sOut += " " OOO_STRING_SVTOOLS_HTML_O_size "=\"" + + OString::number(static_cast(nSize)) + "\""; + rWrt.Strm().WriteOString( sOut ); + + if( rHTMLWrt.m_bCfgOutStyles && rHTMLWrt.m_bTextAttr ) + { + // always export font size as CSS option, too + OutCSS1_HintStyleOpt( rWrt, rHt ); + } } rWrt.Strm().WriteChar( '>' ); } else { - HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_font, false ); + if (rHTMLWrt.mbXHTML) + HTMLOutFuncs::Out_AsciiTag( + rWrt.Strm(), rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_span, false); + else + HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_font, false ); } return rWrt;