summaryrefslogtreecommitdiff
path: root/writerfilter
diff options
context:
space:
mode:
authorMark Hung <marklh9@gmail.com>2017-06-11 08:55:05 +0800
committerMark Hung <marklh9@gmail.com>2017-06-16 15:54:23 +0200
commitdfed429eaceb4ec8316b06ad18a8473ff1d34a2b (patch)
tree88cacd41752c08a6e8f6f6b0356e781cadf7112e /writerfilter
parent6e855d89e9d7807c16569ec7e335ea2dbafba47d (diff)
tdf#85161 implement ooxml SYMBOL field instruction
Only font name switch (f) is implemented. Change-Id: I09df8230dff3cf0619065da69bfaf3caad0a39ae Reviewed-on: https://gerrit.libreoffice.org/38654 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Mark Hung <marklh9@gmail.com>
Diffstat (limited to 'writerfilter')
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.cxx44
1 files changed, 42 insertions, 2 deletions
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 4c29c1f7cc34..4949deb0a030 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -67,6 +67,7 @@
#include <com/sun/star/drawing/XControlShape.hpp>
#include <com/sun/star/text/ControlCharacter.hpp>
#include <com/sun/star/text/XTextColumns.hpp>
+#include <com/sun/star/awt/CharSet.hpp>
#include <oox/mathml/import.hxx>
#include <rtl/uri.hxx>
@@ -2937,7 +2938,7 @@ if(!bFilled)
// {OUString("SKIPIF"),"", FIELD_SKIPIF },
// {OUString("STYLEREF"),"", FIELD_STYLEREF },
{OUString("SUBJECT"), "DocInfo.Subject", FIELD_SUBJECT },
-// {OUString("SYMBOL"),"", FIELD_SYMBOL },
+ {OUString("SYMBOL"),"", FIELD_SYMBOL },
{OUString("TEMPLATE"), "TemplateName", FIELD_TEMPLATE},
{OUString("TIME"), "DateTime", FIELD_TIME },
{OUString("TITLE"), "DocInfo.Title", FIELD_TITLE },
@@ -3733,6 +3734,7 @@ void DomainMapper_Impl::CloseFieldCommand()
case FIELD_TC:
case FIELD_EQ:
case FIELD_INCLUDEPICTURE:
+ case FIELD_SYMBOL:
bCreateField = false;
break;
case FIELD_FORMCHECKBOX :
@@ -4239,7 +4241,45 @@ void DomainMapper_Impl::CloseFieldCommand()
}
}
break;
- case FIELD_SYMBOL : break;
+ case FIELD_SYMBOL:
+ {
+ uno::Reference< text::XTextAppend > xTextAppend = m_aTextAppendStack.top().xTextAppend;
+ OUString sSymbol( sal_Unicode( sFirstParam.startsWithIgnoreAsciiCase("0x") ? sFirstParam.copy(2).toUInt32(16) : sFirstParam.toUInt32() ) );
+ OUString sFont;
+ bool bHasFont = lcl_FindInCommand( pContext->GetCommand(), 'f', sFont);
+ if ( bHasFont )
+ {
+ sFont = sFont.trim();
+ if (sFont.startsWith("\""))
+ sFont = sFont.copy(1);
+ if (sFont.endsWith("\""))
+ sFont = sFont.copy(0,sFont.getLength()-1);
+ }
+
+
+
+ if (xTextAppend.is())
+ {
+ uno::Reference< text::XTextCursor > xCrsr = xTextAppend->getText()->createTextCursor();
+ uno::Reference< text::XText > xText = xTextAppend->getText();
+ if(xCrsr.is() && xText.is())
+ {
+ xCrsr->gotoEnd(false);
+ xText->insertString(xCrsr, sSymbol, true);
+ uno::Reference< beans::XPropertySet > xProp( xCrsr, uno::UNO_QUERY );
+ xProp->setPropertyValue(getPropertyName(PROP_CHAR_FONT_CHAR_SET), uno::makeAny(awt::CharSet::SYMBOL));
+ if(bHasFont)
+ {
+ uno::Any aVal = uno::makeAny( sFont );
+ xProp->setPropertyValue(getPropertyName(PROP_CHAR_FONT_NAME), aVal);
+ xProp->setPropertyValue(getPropertyName(PROP_CHAR_FONT_NAME_ASIAN), aVal);
+ xProp->setPropertyValue(getPropertyName(PROP_CHAR_FONT_NAME_COMPLEX), aVal);
+
+ }
+ }
+ }
+ }
+ break;
case FIELD_TEMPLATE: break;
case FIELD_TIME :
{