summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--starmath/source/rtfexport.cxx3
-rw-r--r--svtools/inc/svtools/rtfkeywd.hxx1
-rw-r--r--sw/qa/extras/rtfexport/data/mnor.rtf86
-rw-r--r--sw/qa/extras/rtfexport/rtfexport.cxx10
-rw-r--r--writerfilter/source/rtftok/rtfdocumentimpl.cxx18
-rw-r--r--writerfilter/source/rtftok/rtfdocumentimpl.hxx2
6 files changed, 117 insertions, 3 deletions
diff --git a/starmath/source/rtfexport.cxx b/starmath/source/rtfexport.cxx
index 5d9695f71cdc..9ecf86df62d8 100644
--- a/starmath/source/rtfexport.cxx
+++ b/starmath/source/rtfexport.cxx
@@ -71,6 +71,9 @@ void SmRtfExport::HandleText(const SmNode* pNode, int /*nLevel*/)
{
m_pBuffer->append("{" LO_STRING_SVTOOLS_RTF_MR " ");
+ if( pNode->GetToken().eType == TTEXT ) // literal text
+ m_pBuffer->append(LO_STRING_SVTOOLS_RTF_MNOR " ");
+
SmTextNode* pTemp=(SmTextNode* )pNode;
SAL_INFO("starmath.rtf", "Text: " << pTemp->GetText());
for (sal_Int32 i = 0; i < pTemp->GetText().getLength(); i++)
diff --git a/svtools/inc/svtools/rtfkeywd.hxx b/svtools/inc/svtools/rtfkeywd.hxx
index 6a4b73fa9e06..52c18f07d807 100644
--- a/svtools/inc/svtools/rtfkeywd.hxx
+++ b/svtools/inc/svtools/rtfkeywd.hxx
@@ -1203,6 +1203,7 @@
#define LO_STRING_SVTOOLS_RTF_MVERTJC "\\mvertJc"
#define LO_STRING_SVTOOLS_RTF_MMATH "\\mmath"
#define LO_STRING_SVTOOLS_RTF_MMATHPICT "\\mmathPict"
+#define LO_STRING_SVTOOLS_RTF_MNOR "\\mnor"
#endif // _RTFKEYWD_HXX
diff --git a/sw/qa/extras/rtfexport/data/mnor.rtf b/sw/qa/extras/rtfexport/data/mnor.rtf
new file mode 100644
index 000000000000..c29f1b4ab4bd
--- /dev/null
+++ b/sw/qa/extras/rtfexport/data/mnor.rtf
@@ -0,0 +1,86 @@
+{\rtf1\ansi\deff4\adeflang1025
+{\fonttbl
+{\f0\froman\fprq2\fcharset0 Times New Roman;}
+{\f1\froman\fprq2\fcharset2 Symbol;}
+{\f2\fswiss\fprq2\fcharset0 Arial;}
+{\f3\froman\fprq2\fcharset0 Times New Roman;}
+{\f4\fswiss\fprq0\fcharset1 Calibri;}
+{\f5\fswiss\fprq2\fcharset0 Arial;}
+{\f6\fswiss\fprq0\fcharset1 Times New Roman;}
+{\f7\fswiss\fprq0\fcharset1 Tahoma;}
+{\f8\fnil\fprq2\fcharset0 Droid Sans Fallback;}
+{\f9\fnil\fprq2\fcharset0 Arial;}
+{\f10\fswiss\fprq0\fcharset1 Arial;}
+}
+{\colortbl;\red0\green0\blue0;\red128\green128\blue128;}
+{\stylesheet
+{\s0\snext0\ql\nowidctlpar
+\ltrpar\sl276\slmult1\sb0\sa200\cf0\dbch\af8\langfe2052\dbch\af9\afs24\alang1081\kerning1\loch\f6\fs24\lang1029 Default Style;}
+{\*\cs15\snext15 Default Paragraph Font;}
+{\*\cs16\sbasedon15\snext16\afs16\loch\f7\fs16 Balloon Text Char;}
+{\s17\sbasedon0\snext18\ql\nowidctlpar
+\sb240\sa120\keepn\ltrpar\cf0\dbch\af8\langfe2052\dbch\af9\afs28\alang1081\loch\f5\fs28\lang1029 Heading;}
+{\s18\sbasedon0\snext18\ql\nowidctlpar
+\sb0\sa120\ltrpar\cf0\dbch\af8\langfe2052\dbch\af9\afs24\alang1081\loch\f6\fs24\lang1029 Text Body;}
+{\s19\sbasedon18\snext19\ql\nowidctlpar
+\sb0\sa120\ltrpar\cf0\dbch\af8\langfe2052\dbch\af10\afs24\alang1081\loch\f4\fs24\lang1029 List;}
+{\s20\sbasedon0\snext20\ql\nowidctlpar
+\sb120\sa120\noline\ltrpar\cf0\i\dbch\af8\langfe2052\dbch\af10\afs24\alang1081\ai\loch\f4\fs24\lang1029 Caption;}
+{\s21\sbasedon0\snext21\ql\nowidctlpar
+\noline\ltrpar\cf0\dbch\af8\langfe2052\dbch\af10\afs24\alang1081\loch\f4\fs24\lang1029 Index;}
+{\s22\sbasedon0\snext22\ql\nowidctlpar
+\sb120\sa120\noline\ltrpar\cf0\i\dbch\af8\langfe2052\dbch\af9\afs24\alang1081\ai\loch\f6\fs24\lang1029 caption;}
+{\s23\sbasedon0\snext23\ql\sl100\slmult0\nowidctlpar
+\sb0\sa0\ltrpar\cf0\dbch\af8\langfe2052\dbch\af9\afs16\alang1081\loch\f7\fs16\lang1029 Balloon Text;}
+}
+{\info
+{\creatim\yr2013\mo4\dy2\hr13\min40}
+{\author vmiklos}
+{\revtim\yr2013\mo4\dy2\hr13\min40}
+{\printim\yr0\mo0\dy0\hr0\min0}
+{\comment LibreOffice}
+{\vern67174400}
+}
+\deftab709
+\viewscale147
+\formshade
+\paperh16838\paperw11906\margl1134\margr1134\margt1134\margb1134\sectd\sbknone\sectunlocked1\pgndec\pgwsxn11906\pghsxn16838\marglsxn1134\margrsxn1134\margtsxn1134\margbsxn1134\ftnbj\ftnstart1\ftnrstcont\ftnnar\aenddoc\aftnrstcont\aftnstart1\aftnnrlc
+\pgndec\pard\plain \s0\ql\nowidctlpar
+\ltrpar\sl276\slmult1\sb0\sa200\cf0\dbch\af8\langfe2052\dbch\af9\afs24\alang1081\kerning1\loch\f6\fs24\lang1029
+{
+\rtlch \ltrch
+{\mmath
+{\*\moMath
+{\mnary
+{\mnaryPr
+{\mchr \u8749\'2d}
+}
+{\msub
+{\mr V}
+}
+{\msup }
+{\me
+{\mr \mnor divF}
+}
+}
+{\mr dV}
+{\mr =}
+{\mnary
+{\mnaryPr
+{\mchr \u8751\'2f}
+}
+{\msub
+{\mr S}
+}
+{\msup }
+{\me
+{\mr \mnor F}
+{\mr \u8729\'19}
+{\mr \mnor n }
+{\mr dS}
+}
+}
+}
+}
+}
+\par }
diff --git a/sw/qa/extras/rtfexport/rtfexport.cxx b/sw/qa/extras/rtfexport/rtfexport.cxx
index ec0ff695d526..cd153fc77c9a 100644
--- a/sw/qa/extras/rtfexport/rtfexport.cxx
+++ b/sw/qa/extras/rtfexport/rtfexport.cxx
@@ -73,6 +73,7 @@ public:
void testFdo61507();
void testFdo30983();
void testPlaceholder();
+ void testMnor();
CPPUNIT_TEST_SUITE(Test);
#if !defined(MACOSX) && !defined(WNT)
@@ -120,6 +121,7 @@ void Test::run()
{"fdo61507.rtf", &Test::testFdo61507},
{"fdo30983.rtf", &Test::testFdo30983},
{"placeholder.odt", &Test::testPlaceholder},
+ {"mnor.rtf", &Test::testMnor},
};
// Don't test the first import of these, for some reason those tests fail
const char* aBlacklist[] = {
@@ -506,6 +508,14 @@ void Test::testPlaceholder()
CPPUNIT_ASSERT_EQUAL(OUString("place holder"), getProperty<OUString>(xField, "Hint"));
}
+void Test::testMnor()
+{
+ // \mnor wasn't handled, leading to missing quotes around "divF" and so on.
+ OUString aActual = getFormula(getRun(getParagraph(1), 1));
+ OUString aExpected("iiint from {V} to <?> {\"divF\"} dV = llint from {S} to <?> {\"F\" ∙ \"n\" dS}", 74, RTL_TEXTENCODING_UTF8);
+ CPPUNIT_ASSERT_EQUAL(aExpected, aActual);
+}
+
CPPUNIT_TEST_SUITE_REGISTRATION(Test);
CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
index 5afb4532d16b..0afe427dcc0a 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -215,12 +215,20 @@ static util::DateTime lcl_getDateTime(RTFParserState& aState)
aState.nDay, aState.nMonth, aState.nYear);
}
-static void lcl_DestinationToMath(OUStringBuffer& rDestinationText, oox::formulaimport::XmlStreamBuilder& rMathBuffer)
+static void lcl_DestinationToMath(OUStringBuffer& rDestinationText, oox::formulaimport::XmlStreamBuilder& rMathBuffer, bool& rMathNor)
{
OUString aStr = rDestinationText.makeStringAndClear();
if (!aStr.isEmpty())
{
rMathBuffer.appendOpeningTag(M_TOKEN(r));
+ if (rMathNor)
+ {
+ rMathBuffer.appendOpeningTag(M_TOKEN(rPr));
+ rMathBuffer.appendOpeningTag(M_TOKEN(nor));
+ rMathBuffer.appendClosingTag(M_TOKEN(nor));
+ rMathBuffer.appendClosingTag(M_TOKEN(rPr));
+ rMathNor = false;
+ }
rMathBuffer.appendOpeningTag(M_TOKEN(t));
rMathBuffer.appendCharacters(aStr);
rMathBuffer.appendClosingTag(M_TOKEN(t));
@@ -275,6 +283,7 @@ RTFDocumentImpl::RTFDocumentImpl(uno::Reference<uno::XComponentContext> const& x
m_bIsInFrame(false),
m_aUnicodeBuffer(),
m_aHexBuffer(),
+ m_bMathNor(false),
m_bIgnoreNextContSectBreak(false),
m_bNeedSect(true),
m_bWasInFrame(false),
@@ -2651,6 +2660,9 @@ int RTFDocumentImpl::dispatchFlag(RTFKeyword nKeyword)
case RTF_NOWRAP:
m_aStates.top().aFrame.setSprm(NS_sprm::LN_PWr, NS_ooxml::LN_Value_wordprocessingml_ST_Wrap_notBeside);
break;
+ case RTF_MNOR:
+ m_bMathNor = true;
+ break;
default:
{
SAL_INFO("writerfilter", "TODO handle flag '" << lcl_RtfToString(nKeyword) << "'");
@@ -3667,7 +3679,7 @@ int RTFDocumentImpl::pushState()
else
{
if (m_aStates.top().nDestinationState == DESTINATION_MR)
- lcl_DestinationToMath(m_aStates.top().aDestinationText, m_aMathBuffer);
+ lcl_DestinationToMath(m_aStates.top().aDestinationText, m_aMathBuffer, m_bMathNor);
m_aStates.push(m_aStates.top());
}
m_aStates.top().aDestinationText.setLength(0);
@@ -4151,7 +4163,7 @@ int RTFDocumentImpl::popState()
}
break;
case DESTINATION_MR:
- lcl_DestinationToMath(m_aStates.top().aDestinationText, m_aMathBuffer);
+ lcl_DestinationToMath(m_aStates.top().aDestinationText, m_aMathBuffer, m_bMathNor);
break;
case DESTINATION_MF:
m_aMathBuffer.appendClosingTag(M_TOKEN(f));
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.hxx b/writerfilter/source/rtftok/rtfdocumentimpl.hxx
index e3b84020b398..b7f367b89b48 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.hxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.hxx
@@ -590,6 +590,8 @@ namespace writerfilter {
rtl::OStringBuffer m_aHexBuffer;
/// Formula import.
oox::formulaimport::XmlStreamBuilder m_aMathBuffer;
+ /// Normal text property, that is math italic and math spacing are not applied to the current run.
+ bool m_bMathNor;
/// If the next continous section break should be ignored.
bool m_bIgnoreNextContSectBreak;
/// If a section break is needed before the end of the doc (false right after a section break).