[Libreoffice-commits] core.git: 4 commits - libreofficekit/qa sw/qa writerfilter/source
Miklos Vajna
vmiklos at collabora.co.uk
Mon Jun 22 00:11:19 PDT 2015
libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx | 37 ++++++++++++++++++--
sw/qa/extras/rtfimport/data/tdf92061.rtf | 5 ++
sw/qa/extras/rtfimport/rtfimport.cxx | 6 +++
writerfilter/source/dmapper/CellMarginHandler.cxx | 16 ++------
writerfilter/source/dmapper/LatentStyleHandler.cxx | 8 +---
writerfilter/source/dmapper/LatentStyleHandler.hxx | 2 -
writerfilter/source/dmapper/StyleSheetTable.cxx | 2 -
writerfilter/source/rtftok/rtfdocumentimpl.cxx | 2 +
8 files changed, 57 insertions(+), 21 deletions(-)
New commits:
commit 2e32eff6f1a6ac8bc0ef65e07300531d6f45275b
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Mon Jun 22 09:10:09 2015 +0200
Use SAL_WARN{,_IF}
Change-Id: Idd4693bd48b4bbe3ebfb5c86922ab0edfeba0def
diff --git a/writerfilter/source/dmapper/CellMarginHandler.cxx b/writerfilter/source/dmapper/CellMarginHandler.cxx
index 6e28f62..6d223c2 100644
--- a/writerfilter/source/dmapper/CellMarginHandler.cxx
+++ b/writerfilter/source/dmapper/CellMarginHandler.cxx
@@ -21,7 +21,6 @@
#include <ConversionHelper.hxx>
#include <ooxml/resourceids.hxx>
#include <comphelper/sequence.hxx>
-#include <osl/diagnose.h>
namespace writerfilter {
namespace dmapper {
@@ -61,11 +60,11 @@ void CellMarginHandler::lcl_attribute(Id rName, Value & rVal)
m_nValue = ConversionHelper::convertTwipToMM100Unsigned( nIntValue );
break;
case NS_ooxml::LN_CT_TblWidth_type:
- OSL_ENSURE( NS_ooxml::LN_Value_ST_TblWidth_dxa == sal::static_int_cast<Id>(nIntValue), "cell margins work for absolute values, only");
+ SAL_WARN_IF(NS_ooxml::LN_Value_ST_TblWidth_dxa != sal::static_int_cast<Id>(nIntValue), "writerfilter", "CellMarginHandler: cell margins work for absolute values only");
m_nType = nIntValue;
break;
default:
- OSL_FAIL( "unknown attribute");
+ SAL_WARN("writerfilter", "CellMarginHandler::lcl_attribute: unknown attribute");
}
}
@@ -153,7 +152,7 @@ void CellMarginHandler::lcl_sprm(Sprm & rSprm)
createGrabBag("right");
break;
default:
- OSL_FAIL( "unknown sprm");
+ SAL_WARN("writerfilter", "CellMarginHandler::lcl_sprm: unknown sprm");
}
}
m_nValue = 0;
commit f43dd61f092e3df6c58a48f587f3cd2fe4238675
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Mon Jun 22 09:08:22 2015 +0200
Use comphelper::containerToSequence
Change-Id: Ib227023eceacbcc3ca303af47794561eab708a39
diff --git a/writerfilter/source/dmapper/CellMarginHandler.cxx b/writerfilter/source/dmapper/CellMarginHandler.cxx
index 922a50b..6e28f62 100644
--- a/writerfilter/source/dmapper/CellMarginHandler.cxx
+++ b/writerfilter/source/dmapper/CellMarginHandler.cxx
@@ -20,6 +20,7 @@
#include <PropertyMap.hxx>
#include <ConversionHelper.hxx>
#include <ooxml/resourceids.hxx>
+#include <comphelper/sequence.hxx>
#include <osl/diagnose.h>
namespace writerfilter {
@@ -167,13 +168,7 @@ beans::PropertyValue CellMarginHandler::getInteropGrabBag()
{
beans::PropertyValue aRet;
aRet.Name = m_aInteropGrabBagName;
-
- uno::Sequence<beans::PropertyValue> aSeq(m_aInteropGrabBag.size());
- beans::PropertyValue* pSeq = aSeq.getArray();
- for (std::vector<beans::PropertyValue>::iterator i = m_aInteropGrabBag.begin(); i != m_aInteropGrabBag.end(); ++i)
- *pSeq++ = *i;
-
- aRet.Value = uno::makeAny(aSeq);
+ aRet.Value = uno::makeAny(comphelper::containerToSequence(m_aInteropGrabBag));
return aRet;
}
diff --git a/writerfilter/source/dmapper/LatentStyleHandler.cxx b/writerfilter/source/dmapper/LatentStyleHandler.cxx
index 67e2cb6f..0e9eb58 100644
--- a/writerfilter/source/dmapper/LatentStyleHandler.cxx
+++ b/writerfilter/source/dmapper/LatentStyleHandler.cxx
@@ -68,13 +68,9 @@ void LatentStyleHandler::lcl_sprm(Sprm& /*rSprm*/)
{
}
-uno::Sequence<beans::PropertyValue> LatentStyleHandler::getAttributes() const
+std::vector<beans::PropertyValue> LatentStyleHandler::getAttributes() const
{
- uno::Sequence<beans::PropertyValue> aAttributes(m_aAttributes.size());
- beans::PropertyValue* pAttributes = aAttributes.getArray();
- for (std::vector<beans::PropertyValue>::const_iterator i = m_aAttributes.begin(); i != m_aAttributes.end(); ++i)
- *pAttributes++ = *i;
- return aAttributes;
+ return m_aAttributes;
}
} // namespace dmapper
diff --git a/writerfilter/source/dmapper/LatentStyleHandler.hxx b/writerfilter/source/dmapper/LatentStyleHandler.hxx
index 8b1a697..fd7bf6a 100644
--- a/writerfilter/source/dmapper/LatentStyleHandler.hxx
+++ b/writerfilter/source/dmapper/LatentStyleHandler.hxx
@@ -33,7 +33,7 @@ public:
LatentStyleHandler();
virtual ~LatentStyleHandler();
- css::uno::Sequence<css::beans::PropertyValue> getAttributes() const;
+ std::vector<css::beans::PropertyValue> getAttributes() const;
};
typedef std::shared_ptr<LatentStyleHandler> LatentStyleHandlerPtr;
diff --git a/writerfilter/source/dmapper/StyleSheetTable.cxx b/writerfilter/source/dmapper/StyleSheetTable.cxx
index 713c107..9e652ea 100644
--- a/writerfilter/source/dmapper/StyleSheetTable.cxx
+++ b/writerfilter/source/dmapper/StyleSheetTable.cxx
@@ -737,7 +737,7 @@ void StyleSheetTable::lcl_sprm(Sprm & rSprm)
pProperties->resolve(*pLatentStyleHandler);
beans::PropertyValue aValue;
aValue.Name = "lsdException";
- aValue.Value = uno::makeAny(pLatentStyleHandler->getAttributes());
+ aValue.Value = uno::makeAny(comphelper::containerToSequence(pLatentStyleHandler->getAttributes()));
m_pImpl->m_pCurrentEntry->aLsdExceptions.push_back(aValue);
}
}
commit f403cecdaedf263f11081c91bed62640362a3a3e
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Mon Jun 22 09:06:31 2015 +0200
gtktiledviewer: do HTML copying if possible
Change-Id: I24e7b18442cb08814a73dd33b368b368039a11e4
diff --git a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
index 7d4960d..575588e 100644
--- a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
+++ b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
@@ -125,16 +125,49 @@ static void toggleFindbar(GtkWidget* /*pButton*/, gpointer /*pItem*/)
}
}
+/// Our GtkClipboardGetFunc implementation for HTML.
+static void htmlGetFunc(GtkClipboard* /*pClipboard*/, GtkSelectionData* pSelectionData, guint /*info*/, gpointer pUserData)
+{
+ GdkAtom aAtom(gdk_atom_intern("text/html", false));
+ const gchar* pSelection = static_cast<const gchar*>(pUserData);
+ gtk_selection_data_set(pSelectionData, aAtom, 8, reinterpret_cast<const guchar *>(pSelection), strlen(pSelection));
+}
+
+/// Our GtkClipboardClearFunc implementation for HTML.
+static void htmlClearFunc(GtkClipboard* /*pClipboard*/, gpointer pData)
+{
+ g_free(pData);
+}
+
+/// Same as gtk_clipboard_set_text(), but sets HTML.
+static void clipboardSetHtml(GtkClipboard* pClipboard, const char* pSelection)
+{
+ GtkTargetList* pList = gtk_target_list_new(0, 0);
+ GdkAtom aAtom(gdk_atom_intern("text/html", false));
+ gtk_target_list_add(pList, aAtom, 0, 0);
+ gint nTargets = 0;
+ GtkTargetEntry* pTargets = gtk_target_table_new_from_list(pList, &nTargets);
+
+ gtk_clipboard_set_with_data(pClipboard, pTargets, nTargets, htmlGetFunc, htmlClearFunc, g_strdup(pSelection));
+
+ gtk_target_table_free(pTargets, nTargets);
+ gtk_target_list_unref(pList);
+}
+
/// Handler for the copy button: write clipboard.
static void doCopy(GtkWidget* /*pButton*/, gpointer /*pItem*/)
{
LOKDocView* pLOKDocView = LOK_DOC_VIEW(pDocView);
LibreOfficeKitDocument* pDocument = lok_doc_view_get_document(pLOKDocView);
char* pUsedFormat = 0;
- char* pSelection = pDocument->pClass->getTextSelection(pDocument, "text/plain;charset=utf-8", &pUsedFormat);
+ char* pSelection = pDocument->pClass->getTextSelection(pDocument, "text/html", &pUsedFormat);
GtkClipboard* pClipboard = gtk_clipboard_get_for_display(gtk_widget_get_display(pDocView), GDK_SELECTION_CLIPBOARD);
- gtk_clipboard_set_text(pClipboard, pSelection, -1);
+ std::string aUsedFormat(pUsedFormat);
+ if (aUsedFormat == "text/plain;charset=utf-8")
+ gtk_clipboard_set_text(pClipboard, pSelection, -1);
+ else
+ clipboardSetHtml(pClipboard, pSelection);
free(pSelection);
free(pUsedFormat);
commit 7b08304b55cf2284a3c583426c60baef618ba206
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Mon Jun 22 09:05:30 2015 +0200
tdf#92061 RTF import: fix missing body text after footnote
A missing seek in the \footnote handler could result in a situation that
the missed text contained a "{" but not its matching "}", which resulted
in the parser terminating earlier than the end of the document.
Change-Id: I6df476b2d6397dfa918111b33854dc2f95fbe81d
diff --git a/sw/qa/extras/rtfimport/data/tdf92061.rtf b/sw/qa/extras/rtfimport/data/tdf92061.rtf
new file mode 100644
index 0000000..03978b4
--- /dev/null
+++ b/sw/qa/extras/rtfimport/data/tdf92061.rtf
@@ -0,0 +1,5 @@
+{\rtf1
+body-before
+{\footnote AAAAA {B} C}
+body-after\par
+}
diff --git a/sw/qa/extras/rtfimport/rtfimport.cxx b/sw/qa/extras/rtfimport/rtfimport.cxx
index 8171b6d..8a22358 100644
--- a/sw/qa/extras/rtfimport/rtfimport.cxx
+++ b/sw/qa/extras/rtfimport/rtfimport.cxx
@@ -2307,6 +2307,12 @@ DECLARE_RTFIMPORT_TEST(testBinSkipping, "bin-skipping.rtf")
CPPUNIT_ASSERT_EQUAL(OUString("text"), getRun(getParagraph(1), 1)->getString());
}
+DECLARE_RTFIMPORT_TEST(testTdf92061, "tdf92061.rtf")
+{
+ // This was "C", i.e. part of the footnote ended up in the body text.
+ CPPUNIT_ASSERT_EQUAL(OUString("body-after"), getRun(getParagraph(1), 3)->getString());
+}
+
CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
index 31e62ee..9b16e5a 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -1682,11 +1682,13 @@ RTFError RTFDocumentImpl::dispatchDestination(RTFKeyword nKeyword)
// Check if this is an endnote.
OStringBuffer aBuf;
char ch;
+ sal_Size nCurrent = Strm().Tell();
for (int i = 0; i < 7; ++i)
{
Strm().ReadChar(ch);
aBuf.append(ch);
}
+ Strm().Seek(nCurrent);
OString aKeyword = aBuf.makeStringAndClear();
if (aKeyword.equals("\\ftnalt"))
nId = NS_ooxml::LN_endnote;
More information about the Libreoffice-commits
mailing list