diff options
author | Miklos Vajna <vmiklos@collabora.com> | 2019-03-12 10:21:36 +0100 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.com> | 2019-03-12 11:24:53 +0100 |
commit | 507ac9b8c20926de7479213cf2d890bbb5952a1d (patch) | |
tree | bab228678cf1067ee7db824aabe7a0b2357f1261 | |
parent | 2f7c3cce2699901c0ffe3780cfad0376a5d1a519 (diff) |
sw HTML export: handle field shadings view option
Regardless of the value of the View -> Field Shadings option, shadings
were always lost when saving to HTML.
Implement handling of this in the HTML conditionally, so in case that
UI option is on, then shadings are preserved in the HTML result;
disabling that option results in the old behavior, though.
Change-Id: I1bd19f4c6e22aff2f84fac25f0a506ad0127cc3c
Reviewed-on: https://gerrit.libreoffice.org/69081
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Tested-by: Jenkins
-rw-r--r-- | sw/qa/extras/htmlexport/data/field-shade.odt | bin | 0 -> 8249 bytes | |||
-rw-r--r-- | sw/qa/extras/htmlexport/htmlexport.cxx | 10 | ||||
-rw-r--r-- | sw/source/filter/html/css1atr.cxx | 18 | ||||
-rw-r--r-- | sw/source/filter/html/htmlfldw.cxx | 23 | ||||
-rw-r--r-- | sw/source/filter/html/wrthtml.hxx | 2 |
5 files changed, 44 insertions, 9 deletions
diff --git a/sw/qa/extras/htmlexport/data/field-shade.odt b/sw/qa/extras/htmlexport/data/field-shade.odt Binary files differnew file mode 100644 index 000000000000..38debcb48d0b --- /dev/null +++ b/sw/qa/extras/htmlexport/data/field-shade.odt diff --git a/sw/qa/extras/htmlexport/htmlexport.cxx b/sw/qa/extras/htmlexport/htmlexport.cxx index c2d8143b67b9..170213e16699 100644 --- a/sw/qa/extras/htmlexport/htmlexport.cxx +++ b/sw/qa/extras/htmlexport/htmlexport.cxx @@ -670,6 +670,16 @@ DECLARE_HTMLEXPORT_TEST(testNoLangReqIf, "reqif-no-lang.odt") assertXPathNoAttribute(pDoc, "/reqif-xhtml:html/reqif-xhtml:div/reqif-xhtml:h1", "lang"); } +DECLARE_HTMLEXPORT_TEST(testFieldShade, "field-shade.odt") +{ + htmlDocPtr pDoc = parseHtml(maTempFile); + CPPUNIT_ASSERT(pDoc); + + // Without the accompanying fix in place, this test would have failed with 'Expected: 1; Actual: + // 0', i.e. shading for the field was lost. + assertXPath(pDoc, "/html/body/p[1]/span", "style", "background: #c0c0c0"); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/filter/html/css1atr.cxx b/sw/source/filter/html/css1atr.cxx index a6599a50705d..dd6f6564a4f6 100644 --- a/sw/source/filter/html/css1atr.cxx +++ b/sw/source/filter/html/css1atr.cxx @@ -184,11 +184,6 @@ OString lclConvToHex(sal_uInt16 nHex) return OString(aNToABuf, 2); } -OString lclGetCSS1Color(const Color& rColor) -{ - return "#" + lclConvToHex(rColor.GetRed()) + lclConvToHex(rColor.GetGreen()) + lclConvToHex(rColor.GetBlue()); -} - /// Determines if rProperty has to be suppressed due to ReqIF mode. bool IgnorePropertyForReqIF(bool bReqIF, const OString& rProperty) { @@ -206,6 +201,11 @@ bool IgnorePropertyForReqIF(bool bReqIF, const OString& rProperty) } } +OString GetCSS1_Color(const Color& rColor) +{ + return "#" + lclConvToHex(rColor.GetRed()) + lclConvToHex(rColor.GetGreen()) + lclConvToHex(rColor.GetBlue()); +} + class SwCSS1OutMode { SwHTMLWriter& rWrt; @@ -2232,7 +2232,7 @@ void SwHTMLWriter::OutCSS1_FrameFormatBackground( const SwFrameFormat& rFrameFor aColor = pVSh->GetViewOptions()->GetRetoucheColor(); } - OutCSS1_PropertyAscii(sCSS1_P_background, lclGetCSS1Color(aColor)); + OutCSS1_PropertyAscii(sCSS1_P_background, GetCSS1_Color(aColor)); } } @@ -2407,7 +2407,7 @@ static Writer& OutCSS1_SvxColor( Writer& rWrt, const SfxPoolItem& rHt ) if( COL_AUTO == aColor ) aColor = COL_BLACK; - rHTMLWrt.OutCSS1_PropertyAscii(sCSS1_P_color, lclGetCSS1Color(aColor)); + rHTMLWrt.OutCSS1_PropertyAscii(sCSS1_P_color, GetCSS1_Color(aColor)); return rWrt; } @@ -3264,7 +3264,7 @@ static Writer& OutCSS1_SvxBrush( Writer& rWrt, const SfxPoolItem& rHt, { if( bColor ) { - OString sTmp(lclGetCSS1Color(aColor)); + OString sTmp(GetCSS1_Color(aColor)); sOut += OStringToOUString(sTmp, RTL_TEXTENCODING_ASCII_US); } @@ -3379,7 +3379,7 @@ static void OutCSS1_SvxBorderLine( SwHTMLWriter& rHTMLWrt, sOut.append(' '); // and also the color - sOut.append(lclGetCSS1Color(pLine->GetColor())); + sOut.append(GetCSS1_Color(pLine->GetColor())); rHTMLWrt.OutCSS1_PropertyAscii(pProperty, sOut.makeStringAndClear()); } diff --git a/sw/source/filter/html/htmlfldw.cxx b/sw/source/filter/html/htmlfldw.cxx index 7100a16b6f28..e70e856bae81 100644 --- a/sw/source/filter/html/htmlfldw.cxx +++ b/sw/source/filter/html/htmlfldw.cxx @@ -32,10 +32,12 @@ #include <fldbas.hxx> #include <docufld.hxx> #include <flddat.hxx> +#include <viewopt.hxx> #include "htmlfld.hxx" #include "wrthtml.hxx" #include <rtl/strbuf.hxx> #include "css1atr.hxx" +#include "css1kywd.hxx" using namespace nsSwDocInfoSubType; @@ -535,8 +537,29 @@ Writer& OutHTML_SwFormatField( Writer& rWrt, const SfxPoolItem& rHt ) const SwTextField *pTextField = rField.GetTextField(); OSL_ENSURE( pTextField, "Where is the txt fld?" ); if( pTextField ) + { + SwHTMLWriter& rHTMLWrt = static_cast<SwHTMLWriter&>(rWrt); + if (SwViewOption::IsFieldShadings()) + { + OStringBuffer sOut; + sOut.append("<" + rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_span); + sOut.append(" " OOO_STRING_SVTOOLS_HTML_O_style "=\""); + sOut.append(sCSS1_P_background); + sOut.append(": "); + + Color& rColor = SwViewOption::GetFieldShadingsColor(); + sOut.append(GetCSS1_Color(rColor)); + sOut.append("\">"); + rWrt.Strm().WriteCharPtr(sOut.getStr()); + } + OutHTML_SwField( rWrt, pField, pTextField->GetTextNode(), pTextField->GetStart() ); + + if (SwViewOption::IsFieldShadings()) + HTMLOutFuncs::Out_AsciiTag( + rWrt.Strm(), rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_span, false); + } } return rWrt; } diff --git a/sw/source/filter/html/wrthtml.hxx b/sw/source/filter/html/wrthtml.hxx index e06c4190aa4d..9c96d8680232 100644 --- a/sw/source/filter/html/wrthtml.hxx +++ b/sw/source/filter/html/wrthtml.hxx @@ -683,6 +683,8 @@ Writer& OutHTML_NumBulListEnd( SwHTMLWriter& rWrt, Writer& OutCSS1_SvxBox( Writer& rWrt, const SfxPoolItem& rHt ); +OString GetCSS1_Color(const Color& rColor); + #endif // INCLUDED_SW_SOURCE_FILTER_HTML_WRTHTML_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |