[Libreoffice-commits] .: 3 commits - oox/inc starmath/inc starmath/source svtools/inc sw/source writerfilter/source

Miklos Vajna vmiklos at kemper.freedesktop.org
Fri Jul 27 07:00:28 PDT 2012


 oox/inc/oox/mathml/export.hxx                  |    2 
 starmath/inc/document.hxx                      |    2 
 starmath/inc/unomodel.hxx                      |    2 
 starmath/source/document.cxx                   |    4 
 starmath/source/rtfexport.cxx                  |   21 ++--
 starmath/source/rtfexport.hxx                  |    3 
 starmath/source/unomodel.cxx                   |    4 
 svtools/inc/svtools/rtfkeywd.hxx               |    2 
 sw/source/filter/ww8/rtfattributeoutput.cxx    |  119 ++++++++-----------------
 sw/source/filter/ww8/rtfattributeoutput.hxx    |    4 
 writerfilter/source/rtftok/rtfdocumentimpl.cxx |    1 
 11 files changed, 65 insertions(+), 99 deletions(-)

New commits:
commit 3c39dd893afec4f00039d0e0d4e97328fe848f0f
Author: Miklos Vajna <vmiklos at suse.cz>
Date:   Fri Jul 27 15:49:14 2012 +0200

    add RtfAttributeOutput::FlyFrameOLEReplacement
    
    This extracts ole replacement code from FlyFrameOLEMath() and makes
    FlyFrameOLE() use it as well, as the later didn't write png replacement,
    just wmf one. Also remove FlyFrameOLEData(), which is now unused (it was
    only used by math, but math export returns earlier).
    
    Change-Id: I5e88708cdad1468ccbc5c3c8bb77521785822832

diff --git a/svtools/inc/svtools/rtfkeywd.hxx b/svtools/inc/svtools/rtfkeywd.hxx
index ba26d76..6a4b73f 100644
--- a/svtools/inc/svtools/rtfkeywd.hxx
+++ b/svtools/inc/svtools/rtfkeywd.hxx
@@ -1201,6 +1201,8 @@
 #define LO_STRING_SVTOOLS_RTF_MSUP "\\msup"
 #define LO_STRING_SVTOOLS_RTF_MTYPE "\\mtype"
 #define LO_STRING_SVTOOLS_RTF_MVERTJC "\\mvertJc"
+#define LO_STRING_SVTOOLS_RTF_MMATH "\\mmath"
+#define LO_STRING_SVTOOLS_RTF_MMATHPICT "\\mmathPict"
 
 #endif // _RTFKEYWD_HXX
 
diff --git a/sw/source/filter/ww8/rtfattributeoutput.cxx b/sw/source/filter/ww8/rtfattributeoutput.cxx
index 73daf80..a02d407 100644
--- a/sw/source/filter/ww8/rtfattributeoutput.cxx
+++ b/sw/source/filter/ww8/rtfattributeoutput.cxx
@@ -3331,75 +3331,8 @@ static OString ExportPICT( const SwFlyFrmFmt* pFlyFrmFmt, const Size &rOrig, con
     return aRet.makeStringAndClear();
 }
 
-void RtfAttributeOutput::FlyFrameOLEData( SwOLENode& rOLENode )
+void RtfAttributeOutput::FlyFrameOLEReplacement(const SwFlyFrmFmt* pFlyFrmFmt, SwOLENode& rOLENode, const Size& rSize)
 {
-    SAL_INFO("sw.rtf", OSL_THIS_FUNC);
-
-    uno::Reference < embed::XEmbeddedObject > xObj(const_cast<SwOLENode&>(rOLENode).GetOLEObj().GetOleRef());
-    sal_Int64 nAspect = rOLENode.GetAspect();
-    svt::EmbeddedObjectRef aObjRef( xObj, nAspect );
-    SvGlobalName aObjName(aObjRef->getClassID());
-
-    if (SotExchange::IsMath(aObjName))
-    {
-        // ObjectHeader
-        m_aRunText->append(WriteHex(0x00000501)); // OLEVersion
-        m_aRunText->append(WriteHex(0x00000002)); // FormatID
-        m_aRunText->append(WriteHex(OString("Equation.3"))); // ClassName
-        m_aRunText->append(WriteHex(0x00000000)); // TopicName
-        m_aRunText->append(WriteHex(0x00000000)); // ItemName
-
-        // NativeData
-        SvMemoryStream *pStream = new SvMemoryStream;
-        SvStorage* pStorage = new SvStorage(*pStream);
-        m_rExport.pOLEExp->ExportOLEObject( aObjRef, *pStorage );
-        pStream->Seek(STREAM_SEEK_TO_END);
-        sal_uInt32 nNativeDataSize = pStream->Tell();
-        const sal_uInt8* pNativeData = (sal_uInt8*)pStream->GetData();
-        m_aRunText->append(WriteHex(nNativeDataSize));
-        m_aRunText->append(RtfExport::sNewLine);
-        m_aRunText->append(RtfAttributeOutput::WriteHex(pNativeData, nNativeDataSize, 0, 126));
-        m_aRunText->append(RtfExport::sNewLine);
-        delete pStream;
-
-        // MetaFilePresentationObject
-        pStream = new SvMemoryStream;
-        Graphic* pGraphic = rOLENode.GetGraphic();
-        if (GraphicConverter::Export(*pStream, *pGraphic, CVT_WMF) != ERRCODE_NONE)
-            OSL_FAIL("failed to export the presentation data");
-        pStream->Seek(STREAM_SEEK_TO_END);
-        sal_uInt32 nPresentationDataSize = pStream->Tell();
-        const sal_uInt8* pPresentationData = (sal_uInt8*)pStream->GetData();
-        m_aRunText->append(WriteHex(pPresentationData, nPresentationDataSize, 0, 126));
-    }
-}
-
-bool RtfAttributeOutput::FlyFrameOLEMath(const SwFlyFrmFmt* pFlyFrmFmt, SwOLENode& rOLENode, const Size& rSize)
-{
-    SAL_INFO("sw.rtf", OSL_THIS_FUNC);
-
-    uno::Reference <embed::XEmbeddedObject> xObj(const_cast<SwOLENode&>(rOLENode).GetOLEObj().GetOleRef());
-    sal_Int64 nAspect = rOLENode.GetAspect();
-    svt::EmbeddedObjectRef aObjRef(xObj, nAspect);
-    SvGlobalName aObjName(aObjRef->getClassID());
-
-    if (!SotExchange::IsMath(aObjName))
-        return false;
-
-    m_aRunText->append("{\\mmath");
-    uno::Reference<util::XCloseable> xClosable(xObj->getComponent(), uno::UNO_QUERY);
-    oox::FormulaExportBase* pBase = dynamic_cast<oox::FormulaExportBase*>(xClosable.get());
-    SAL_WARN_IF(!pBase, "sw.rtf", "Math OLE object cannot write out RTF");
-    if (pBase)
-    {
-        OStringBuffer aBuf;
-        pBase->writeFormulaRtf(aBuf, m_rExport.eCurrentEncoding);
-        m_aRunText->append(aBuf.makeStringAndClear());
-    }
-
-    // Replacement graphic.
-    m_aRunText->append("{\\mmathPict");
-
     m_aRunText->append("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_SHPPICT);
     Size aSize(sw::util::GetSwappedInSize(rOLENode));
     Size aRendered(aSize);
@@ -3428,7 +3361,34 @@ bool RtfAttributeOutput::FlyFrameOLEMath(const SwFlyFrmFmt* pFlyFrmFmt, SwOLENod
     pGraphicAry = (sal_uInt8*)aStream.GetData();
     m_aRunText->append(ExportPICT( pFlyFrmFmt, aSize, aRendered, aMapped, rCr, pBLIPType, pGraphicAry, nSize, m_rExport ));
     m_aRunText->append("}"); // nonshppict
+}
+
+bool RtfAttributeOutput::FlyFrameOLEMath(const SwFlyFrmFmt* pFlyFrmFmt, SwOLENode& rOLENode, const Size& rSize)
+{
+    SAL_INFO("sw.rtf", OSL_THIS_FUNC);
+
+    uno::Reference <embed::XEmbeddedObject> xObj(const_cast<SwOLENode&>(rOLENode).GetOLEObj().GetOleRef());
+    sal_Int64 nAspect = rOLENode.GetAspect();
+    svt::EmbeddedObjectRef aObjRef(xObj, nAspect);
+    SvGlobalName aObjName(aObjRef->getClassID());
+
+    if (!SotExchange::IsMath(aObjName))
+        return false;
 
+    m_aRunText->append("{" LO_STRING_SVTOOLS_RTF_MMATH " ");
+    uno::Reference<util::XCloseable> xClosable(xObj->getComponent(), uno::UNO_QUERY);
+    oox::FormulaExportBase* pBase = dynamic_cast<oox::FormulaExportBase*>(xClosable.get());
+    SAL_WARN_IF(!pBase, "sw.rtf", "Math OLE object cannot write out RTF");
+    if (pBase)
+    {
+        OStringBuffer aBuf;
+        pBase->writeFormulaRtf(aBuf, m_rExport.eCurrentEncoding);
+        m_aRunText->append(aBuf.makeStringAndClear());
+    }
+
+    // Replacement graphic.
+    m_aRunText->append("{" LO_STRING_SVTOOLS_RTF_MMATHPICT " ");
+    FlyFrameOLEReplacement(pFlyFrmFmt, rOLENode, rSize);
     m_aRunText->append("}"); // mmathPict
     m_aRunText->append("}"); // mmath
 
@@ -3442,40 +3402,7 @@ void RtfAttributeOutput::FlyFrameOLE( const SwFlyFrmFmt* pFlyFrmFmt, SwOLENode&
     if (FlyFrameOLEMath(pFlyFrmFmt, rOLENode, rSize))
         return;
 
-    SvMemoryStream aStream;
-    const sal_uInt8* pGraphicAry = 0;
-    sal_uInt32 nSize = 0;
-    Graphic* pGraphic = rOLENode.GetGraphic();
-
-    Size aSize(sw::util::GetSwappedInSize(rOLENode));
-    Size aRendered(aSize);
-    aRendered.Width() = rSize.Width();
-    aRendered.Height() = rSize.Height();
-    Size aMapped(pGraphic->GetPrefSize());
-    const SwCropGrf &rCr = (const SwCropGrf &)rOLENode.GetAttr(RES_GRFATR_CROPGRF);
-    const sal_Char* pBLIPType = OOO_STRING_SVTOOLS_RTF_WMETAFILE;
-
-    if (GraphicConverter::Export(aStream, *pGraphic, CVT_WMF) != ERRCODE_NONE)
-        OSL_FAIL("failed to export the graphic");
-    aStream.Seek(STREAM_SEEK_TO_END);
-    nSize = aStream.Tell();
-    pGraphicAry = (sal_uInt8*)aStream.GetData();
-
-    m_aRunText->append("{" OOO_STRING_SVTOOLS_RTF_OBJECT OOO_STRING_SVTOOLS_RTF_OBJEMB);
-
-    // export the object data in the appropriate format; RTF requires the usage of the OLE 1.0 format
-    m_aRunText->append("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_OBJDATA " ");
-    FlyFrameOLEData(rOLENode);
-    m_aRunText->append("}{" OOO_STRING_SVTOOLS_RTF_RESULT);
-
-    SwTwips nHeight = aSize.Height();
-    nHeight/=20; //nHeight was in twips, want it in half points, but then half of total height.
-    long nFontHeight = ((const SvxFontHeightItem&)m_rExport.GetItem(RES_CHRATR_FONTSIZE)).GetHeight();
-    nHeight-=nFontHeight/20;
-    m_aRunText->append("{" OOO_STRING_SVTOOLS_RTF_DN).append(nHeight);
-    m_aRunText->append("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_SHPPICT);
-    m_aRunText->append(ExportPICT( pFlyFrmFmt, aSize, aRendered, aMapped, rCr, pBLIPType, pGraphicAry, nSize, m_rExport ));
-    m_aRunText->append("}}}}");
+    FlyFrameOLEReplacement(pFlyFrmFmt, rOLENode, rSize);
 }
 
 void RtfAttributeOutput::FlyFrameGraphic( const SwFlyFrmFmt* pFlyFrmFmt, const SwGrfNode* pGrfNode)
diff --git a/sw/source/filter/ww8/rtfattributeoutput.hxx b/sw/source/filter/ww8/rtfattributeoutput.hxx
index dc97001..14e59f3 100644
--- a/sw/source/filter/ww8/rtfattributeoutput.hxx
+++ b/sw/source/filter/ww8/rtfattributeoutput.hxx
@@ -419,7 +419,7 @@ private:
     /// Output graphic fly frames.
     void FlyFrameGraphic( const SwFlyFrmFmt* pFlyFrmFmt, const SwGrfNode* pGrfNode );
     void FlyFrameOLE( const SwFlyFrmFmt* pFlyFrmFmt, SwOLENode& rOLENode, const Size& rSize );
-    void FlyFrameOLEData( SwOLENode& rOLENode );
+    void FlyFrameOLEReplacement(const SwFlyFrmFmt* pFlyFrmFmt, SwOLENode& rOLENode, const Size& rSize);
     /// Math export.
     bool FlyFrameOLEMath(const SwFlyFrmFmt* pFlyFrmFmt, SwOLENode& rOLENode, const Size& rSize);
 
commit 7c661189f4ed77b691ef3d36dc47eec8dab9b804
Author: Miklos Vajna <vmiklos at suse.cz>
Date:   Fri Jul 27 15:38:54 2012 +0200

    implement import/export of RTF_MMATHPICT
    
    to be compatible with readers not understanding RTF_MOMATH
    
    Change-Id: I8d6a28b03b740da372558f7aa245592be6ac70b9

diff --git a/sw/source/filter/ww8/rtfattributeoutput.cxx b/sw/source/filter/ww8/rtfattributeoutput.cxx
index eceb6e0..73daf80 100644
--- a/sw/source/filter/ww8/rtfattributeoutput.cxx
+++ b/sw/source/filter/ww8/rtfattributeoutput.cxx
@@ -3374,7 +3374,7 @@ void RtfAttributeOutput::FlyFrameOLEData( SwOLENode& rOLENode )
     }
 }
 
-bool RtfAttributeOutput::FlyFrameOLEMath(SwOLENode& rOLENode)
+bool RtfAttributeOutput::FlyFrameOLEMath(const SwFlyFrmFmt* pFlyFrmFmt, SwOLENode& rOLENode, const Size& rSize)
 {
     SAL_INFO("sw.rtf", OSL_THIS_FUNC);
 
@@ -3386,18 +3386,52 @@ bool RtfAttributeOutput::FlyFrameOLEMath(SwOLENode& rOLENode)
     if (!SotExchange::IsMath(aObjName))
         return false;
 
+    m_aRunText->append("{\\mmath");
     uno::Reference<util::XCloseable> xClosable(xObj->getComponent(), uno::UNO_QUERY);
     oox::FormulaExportBase* pBase = dynamic_cast<oox::FormulaExportBase*>(xClosable.get());
     SAL_WARN_IF(!pBase, "sw.rtf", "Math OLE object cannot write out RTF");
     if (pBase)
     {
-        m_aRunText->append("{\\mmath");
         OStringBuffer aBuf;
         pBase->writeFormulaRtf(aBuf, m_rExport.eCurrentEncoding);
         m_aRunText->append(aBuf.makeStringAndClear());
-        m_aRunText->append("}");
     }
 
+    // Replacement graphic.
+    m_aRunText->append("{\\mmathPict");
+
+    m_aRunText->append("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_SHPPICT);
+    Size aSize(sw::util::GetSwappedInSize(rOLENode));
+    Size aRendered(aSize);
+    aRendered.Width() = rSize.Width();
+    aRendered.Height() = rSize.Height();
+    Graphic* pGraphic = rOLENode.GetGraphic();
+    Size aMapped(pGraphic->GetPrefSize());
+    const SwCropGrf &rCr = (const SwCropGrf &)rOLENode.GetAttr(RES_GRFATR_CROPGRF);
+    const sal_Char* pBLIPType = OOO_STRING_SVTOOLS_RTF_PNGBLIP;
+    const sal_uInt8* pGraphicAry = 0;
+    SvMemoryStream aStream;
+    if (GraphicConverter::Export(aStream, *pGraphic, CVT_PNG) != ERRCODE_NONE)
+        OSL_FAIL("failed to export the graphic");
+    aStream.Seek(STREAM_SEEK_TO_END);
+    sal_uInt32 nSize = aStream.Tell();
+    pGraphicAry = (sal_uInt8*)aStream.GetData();
+    m_aRunText->append(ExportPICT( pFlyFrmFmt, aSize, aRendered, aMapped, rCr, pBLIPType, pGraphicAry, nSize, m_rExport ));
+    m_aRunText->append("}"); // shppict
+    m_aRunText->append("{" OOO_STRING_SVTOOLS_RTF_NONSHPPICT);
+    pBLIPType = OOO_STRING_SVTOOLS_RTF_WMETAFILE;
+    SvMemoryStream aWmfStream;
+    if (GraphicConverter::Export(aWmfStream, *pGraphic, CVT_WMF) != ERRCODE_NONE)
+        OSL_FAIL("failed to export the graphic");
+    aWmfStream.Seek(STREAM_SEEK_TO_END);
+    nSize = aWmfStream.Tell();
+    pGraphicAry = (sal_uInt8*)aStream.GetData();
+    m_aRunText->append(ExportPICT( pFlyFrmFmt, aSize, aRendered, aMapped, rCr, pBLIPType, pGraphicAry, nSize, m_rExport ));
+    m_aRunText->append("}"); // nonshppict
+
+    m_aRunText->append("}"); // mmathPict
+    m_aRunText->append("}"); // mmath
+
     return true;
 }
 
@@ -3405,7 +3439,7 @@ void RtfAttributeOutput::FlyFrameOLE( const SwFlyFrmFmt* pFlyFrmFmt, SwOLENode&
 {
     SAL_INFO("sw.rtf", OSL_THIS_FUNC);
 
-    if (FlyFrameOLEMath(rOLENode))
+    if (FlyFrameOLEMath(pFlyFrmFmt, rOLENode, rSize))
         return;
 
     SvMemoryStream aStream;
diff --git a/sw/source/filter/ww8/rtfattributeoutput.hxx b/sw/source/filter/ww8/rtfattributeoutput.hxx
index aa2d85d..dc97001 100644
--- a/sw/source/filter/ww8/rtfattributeoutput.hxx
+++ b/sw/source/filter/ww8/rtfattributeoutput.hxx
@@ -421,7 +421,7 @@ private:
     void FlyFrameOLE( const SwFlyFrmFmt* pFlyFrmFmt, SwOLENode& rOLENode, const Size& rSize );
     void FlyFrameOLEData( SwOLENode& rOLENode );
     /// Math export.
-    bool FlyFrameOLEMath(SwOLENode& rOLENode);
+    bool FlyFrameOLEMath(const SwFlyFrmFmt* pFlyFrmFmt, SwOLENode& rOLENode, const Size& rSize);
 
     /*
      * Table methods.
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
index e41ec9e..bece052 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -2018,6 +2018,7 @@ int RTFDocumentImpl::dispatchFlag(RTFKeyword nKeyword)
             }
             break;
         case RTF_NONSHPPICT:
+        case RTF_MMATHPICT: // Picture group used by readers not understanding \moMath group
             m_aStates.top().nDestinationState = DESTINATION_SKIP;
             break;
         case RTF_CLBRDRT:
commit d216c9fcbbbbd5b28912441567c2fa282b284a6a
Author: Miklos Vajna <vmiklos at suse.cz>
Date:   Fri Jul 27 14:12:42 2012 +0200

    SmRtfExport: get current encoding from Writer instead of assuming the default
    
    Change-Id: Ia8bdf83f36d986ca45ddad985aca827224c194f4

diff --git a/oox/inc/oox/mathml/export.hxx b/oox/inc/oox/mathml/export.hxx
index 7d6a7db..84914a5 100644
--- a/oox/inc/oox/mathml/export.hxx
+++ b/oox/inc/oox/mathml/export.hxx
@@ -44,7 +44,7 @@ class OOX_DLLPUBLIC FormulaExportBase
 {
 public:
     virtual void writeFormulaOoxml( ::sax_fastparser::FSHelperPtr m_pSerializer, oox::core::OoxmlVersion version ) = 0;
-    virtual void writeFormulaRtf( OStringBuffer& rBuffer ) = 0;
+    virtual void writeFormulaRtf( OStringBuffer& rBuffer, rtl_TextEncoding nEncoding ) = 0;
 
 protected:
     FormulaExportBase();
diff --git a/starmath/inc/document.hxx b/starmath/inc/document.hxx
index 43aefaa..e9b4a95 100644
--- a/starmath/inc/document.hxx
+++ b/starmath/inc/document.hxx
@@ -156,7 +156,7 @@ class SmDocShell : public SfxObjectShell, public SfxListener
     void                InvalidateCursor();
 
     bool writeFormulaOoxml( ::sax_fastparser::FSHelperPtr m_pSerializer, oox::core::OoxmlVersion version );
-    void writeFormulaRtf(OStringBuffer& rBuffer);
+    void writeFormulaRtf(OStringBuffer& rBuffer, rtl_TextEncoding nEncoding);
     bool readFormulaOoxml( oox::formulaimport::XmlStream& stream );
 
 public:
diff --git a/starmath/inc/unomodel.hxx b/starmath/inc/unomodel.hxx
index fc68089..dbf4b1f 100644
--- a/starmath/inc/unomodel.hxx
+++ b/starmath/inc/unomodel.hxx
@@ -93,7 +93,7 @@ public:
 
     // oox::FormulaExportBase
     virtual void writeFormulaOoxml( ::sax_fastparser::FSHelperPtr m_pSerializer, oox::core::OoxmlVersion version );
-    virtual void writeFormulaRtf(OStringBuffer& rBuffer);
+    virtual void writeFormulaRtf(OStringBuffer& rBuffer, rtl_TextEncoding nEncoding);
     // oox::FormulaImportBase
     virtual void readFormulaOoxml( oox::formulaimport::XmlStream& stream );
     virtual Size getFormulaSize() const;
diff --git a/starmath/source/document.cxx b/starmath/source/document.cxx
index 5a41f97..6cc719e 100644
--- a/starmath/source/document.cxx
+++ b/starmath/source/document.cxx
@@ -987,14 +987,14 @@ bool SmDocShell::writeFormulaOoxml( ::sax_fastparser::FSHelperPtr m_pSerializer,
     return aEquation.ConvertFromStarMath( m_pSerializer );
 }
 
-void SmDocShell::writeFormulaRtf(OStringBuffer& rBuffer)
+void SmDocShell::writeFormulaRtf(OStringBuffer& rBuffer, rtl_TextEncoding nEncoding)
 {
     if (!pTree)
         Parse();
     if (pTree && !IsFormulaArranged())
         ArrangeFormula();
     SmRtfExport aEquation(pTree);
-    aEquation.ConvertFromStarMath(rBuffer);
+    aEquation.ConvertFromStarMath(rBuffer, nEncoding);
 }
 
 bool SmDocShell::readFormulaOoxml( oox::formulaimport::XmlStream& stream )
diff --git a/starmath/source/rtfexport.cxx b/starmath/source/rtfexport.cxx
index 3e1fa3d..6f4d0a2 100644
--- a/starmath/source/rtfexport.cxx
+++ b/starmath/source/rtfexport.cxx
@@ -39,11 +39,12 @@ SmRtfExport::SmRtfExport(const SmNode* pIn)
 {
 }
 
-bool SmRtfExport::ConvertFromStarMath(OStringBuffer& rBuffer)
+bool SmRtfExport::ConvertFromStarMath(OStringBuffer& rBuffer, rtl_TextEncoding nEncoding)
 {
     if (!m_pTree)
         return false;
     m_pBuffer = &rBuffer;
+    m_nEncoding = nEncoding;
     m_pBuffer->append("{" OOO_STRING_SVTOOLS_RTF_IGNORE LO_STRING_SVTOOLS_RTF_MOMATH " ");
     HandleNode(m_pTree, 0);
     m_pBuffer->append("}"); // moMath
@@ -76,7 +77,7 @@ void SmRtfExport::HandleText(const SmNode* pNode, int /*nLevel*/)
     {
         sal_uInt16 nChar = pTemp->GetText().GetChar(i);
         OUString aValue(SmTextNode::ConvertSymbolToUnicode(nChar));
-        m_pBuffer->append(msfilter::rtfutil::OutString(aValue, RTL_TEXTENCODING_MS_1252));
+        m_pBuffer->append(msfilter::rtfutil::OutString(aValue, m_nEncoding));
     }
 
     m_pBuffer->append("}"); // mr
@@ -127,7 +128,7 @@ void SmRtfExport::HandleAttribute(const SmAttributNode* pNode, int nLevel)
             m_pBuffer->append("{" LO_STRING_SVTOOLS_RTF_MACCPR " ");
             m_pBuffer->append("{" LO_STRING_SVTOOLS_RTF_MCHR " ");
             OUString aValue(pNode->Attribute()->GetToken().cMathChar);
-            m_pBuffer->append(msfilter::rtfutil::OutString(aValue, RTL_TEXTENCODING_MS_1252));
+            m_pBuffer->append(msfilter::rtfutil::OutString(aValue, m_nEncoding));
             m_pBuffer->append("}"); // mchr
             m_pBuffer->append("}"); // maccPr
             m_pBuffer->append("{" LO_STRING_SVTOOLS_RTF_ME " ");
@@ -192,7 +193,7 @@ void SmRtfExport::HandleRoot(const SmRootNode* pNode, int nLevel)
 }
 
 namespace {
-OString mathSymbolToString(const SmNode* node)
+OString mathSymbolToString(const SmNode* node, rtl_TextEncoding nEncoding)
 {
     assert(node->GetType() == NMATH);
     const SmTextNode* txtnode = static_cast<const SmTextNode*>(node);
@@ -201,7 +202,7 @@ OString mathSymbolToString(const SmNode* node)
     assert(txtnode->GetText().Len() == 1);
     sal_Unicode chr = SmTextNode::ConvertSymbolToUnicode(txtnode->GetText().GetChar(0));
     OUString aValue(chr);
-    return msfilter::rtfutil::OutString(aValue, RTL_TEXTENCODING_MS_1252);
+    return msfilter::rtfutil::OutString(aValue, nEncoding);
 }
 }
 
@@ -225,7 +226,7 @@ void SmRtfExport::HandleOperator(const SmOperNode* pNode, int nLevel)
             m_pBuffer->append("{" LO_STRING_SVTOOLS_RTF_MNARY " ");
             m_pBuffer->append("{" LO_STRING_SVTOOLS_RTF_MNARYPR " ");
             m_pBuffer->append("{" LO_STRING_SVTOOLS_RTF_MCHR " ");
-            m_pBuffer->append(mathSymbolToString(operation));
+            m_pBuffer->append(mathSymbolToString(operation, m_nEncoding));
             m_pBuffer->append("}"); // mchr
             if (!subsup || !subsup->GetSubSup(CSUB))
                 m_pBuffer->append("{" LO_STRING_SVTOOLS_RTF_MSUBHIDE " 1}");
@@ -408,7 +409,7 @@ void SmRtfExport::HandleBrace(const SmBraceNode* pNode, int nLevel)
     m_pBuffer->append("{" LO_STRING_SVTOOLS_RTF_MD " ");
     m_pBuffer->append("{" LO_STRING_SVTOOLS_RTF_MDPR " ");
     m_pBuffer->append("{" LO_STRING_SVTOOLS_RTF_MBEGCHR " ");
-    m_pBuffer->append(mathSymbolToString(pNode->OpeningBrace()));
+    m_pBuffer->append(mathSymbolToString(pNode->OpeningBrace(), m_nEncoding));
     m_pBuffer->append("}"); // mbegChr
     std::vector< const SmNode* > subnodes;
     if (pNode->Body()->GetType() == NBRACEBODY)
@@ -424,7 +425,7 @@ void SmRtfExport::HandleBrace(const SmBraceNode* pNode, int nLevel)
                 if(!separatorWritten)
                 {
                     m_pBuffer->append("{" LO_STRING_SVTOOLS_RTF_MSEPCHR " ");
-                    m_pBuffer->append(mathSymbolToString(math));
+                    m_pBuffer->append(mathSymbolToString(math, m_nEncoding));
                     m_pBuffer->append("}"); // msepChr
                     separatorWritten = true;
                 }
@@ -436,7 +437,7 @@ void SmRtfExport::HandleBrace(const SmBraceNode* pNode, int nLevel)
     else
         subnodes.push_back(pNode->Body());
     m_pBuffer->append("{" LO_STRING_SVTOOLS_RTF_MENDCHR " ");
-    m_pBuffer->append(mathSymbolToString(pNode->ClosingBrace()));
+    m_pBuffer->append(mathSymbolToString(pNode->ClosingBrace(), m_nEncoding));
     m_pBuffer->append("}"); // mendChr
     m_pBuffer->append("}"); // mdPr
     for (unsigned int i = 0; i < subnodes.size(); ++i)
@@ -465,7 +466,7 @@ void SmRtfExport::HandleVerticalBrace(const SmVerticalBraceNode* pNode, int nLev
             m_pBuffer->append("{" LO_STRING_SVTOOLS_RTF_MGROUPCHR " ");
             m_pBuffer->append("{" LO_STRING_SVTOOLS_RTF_MGROUPCHRPR " ");
             m_pBuffer->append("{" LO_STRING_SVTOOLS_RTF_MCHR " ");
-            m_pBuffer->append(mathSymbolToString(pNode->Brace()));
+            m_pBuffer->append(mathSymbolToString(pNode->Brace(), m_nEncoding));
             m_pBuffer->append("}"); // mchr
             // TODO not sure if pos and vertJc are correct
             m_pBuffer->append("{" LO_STRING_SVTOOLS_RTF_MPOS " ").append(top ? "top" : "bot").append("}");
diff --git a/starmath/source/rtfexport.hxx b/starmath/source/rtfexport.hxx
index bf12b64..2183d39 100644
--- a/starmath/source/rtfexport.hxx
+++ b/starmath/source/rtfexport.hxx
@@ -40,7 +40,7 @@ class SmRtfExport : public SmWordExportBase
 {
 public:
     SmRtfExport(const SmNode* pIn);
-    bool ConvertFromStarMath(OStringBuffer& rBuffer);
+    bool ConvertFromStarMath(OStringBuffer& rBuffer, rtl_TextEncoding nEncoding);
 private:
     virtual void HandleVerticalStack(const SmNode* pNode, int nLevel);
     virtual void HandleText(const SmNode* pNode, int nLevel);
@@ -55,6 +55,7 @@ private:
     virtual void HandleBlank();
 
     OStringBuffer* m_pBuffer;
+    rtl_TextEncoding m_nEncoding;
 };
 
 
diff --git a/starmath/source/unomodel.cxx b/starmath/source/unomodel.cxx
index dadb8f3..40fa0eb 100644
--- a/starmath/source/unomodel.cxx
+++ b/starmath/source/unomodel.cxx
@@ -1123,9 +1123,9 @@ void SmModel::writeFormulaOoxml( ::sax_fastparser::FSHelperPtr m_pSerializer, oo
     static_cast< SmDocShell* >( GetObjectShell())->writeFormulaOoxml( m_pSerializer, version );
 }
 
-void SmModel::writeFormulaRtf(OStringBuffer& rBuffer)
+void SmModel::writeFormulaRtf(OStringBuffer& rBuffer, rtl_TextEncoding nEncoding)
 {
-    static_cast<SmDocShell*>(GetObjectShell())->writeFormulaRtf(rBuffer);
+    static_cast<SmDocShell*>(GetObjectShell())->writeFormulaRtf(rBuffer, nEncoding);
 }
 
 void SmModel::readFormulaOoxml( oox::formulaimport::XmlStream& stream )
diff --git a/sw/source/filter/ww8/rtfattributeoutput.cxx b/sw/source/filter/ww8/rtfattributeoutput.cxx
index c804ee8..eceb6e0 100644
--- a/sw/source/filter/ww8/rtfattributeoutput.cxx
+++ b/sw/source/filter/ww8/rtfattributeoutput.cxx
@@ -3393,7 +3393,7 @@ bool RtfAttributeOutput::FlyFrameOLEMath(SwOLENode& rOLENode)
     {
         m_aRunText->append("{\\mmath");
         OStringBuffer aBuf;
-        pBase->writeFormulaRtf(aBuf);
+        pBase->writeFormulaRtf(aBuf, m_rExport.eCurrentEncoding);
         m_aRunText->append(aBuf.makeStringAndClear());
         m_aRunText->append("}");
     }


More information about the Libreoffice-commits mailing list