dtrans/source/win32/ftransl/ftransl.cxx | 2 include/sal/log-areas.dox | 1 include/sot/formats.hxx | 3 officecfg/registry/data/org/openoffice/Office/UI/MathCommands.xcu | 5 sot/source/base/exchange.cxx | 1 starmath/inc/starmath.hrc | 1 starmath/sdi/smath.sdi | 23 +++ starmath/sdi/smslots.sdi | 6 starmath/source/view.cxx | 75 ++++++++++ starmath/uiconfig/smath/menubar/menubar.xml | 1 vcl/unx/generic/dtrans/X11_selection.cxx | 6 11 files changed, 119 insertions(+), 5 deletions(-)
New commits: commit 64bc8b45b5c23efc5fe57585a69aa4263aaf4e83 Author: Regina Henschel <reg...@apache.org> Date: Wed Jul 8 12:31:43 2015 +0000 i#107734 Support for Math Input Panel in Windows 7 The patch introduces a new command .uno:ImportMathClipboard to module Math. It imports MathML content from clipboard and transforms it to Starmath It handles clipboard MIME type 'application/mathml+xml' and plain text, which can be interpreted as MathML segment. It partly solves issues #i14252, #i34781, and #i53509 too. Review by: Hanya <hanya.r...@gmail.com> (cherry picked from commit 9ec2148653436be8612273439180749e71e2ce58) Conflicts: dtrans/source/win32/ftransl/ftransl.cxx officecfg/registry/data/org/openoffice/Office/UI/MathCommands.xcu sot/inc/sot/formats.hxx sot/source/base/exchange.cxx starmath/sdi/smath.sdi starmath/source/view.cxx Change-Id: I6cb5e8f737ee2e39f9ce96aba841db347a8806e4 diff --git a/dtrans/source/win32/ftransl/ftransl.cxx b/dtrans/source/win32/ftransl/ftransl.cxx index bc14f54..7fe0b55 100644 --- a/dtrans/source/win32/ftransl/ftransl.cxx +++ b/dtrans/source/win32/ftransl/ftransl.cxx @@ -458,6 +458,8 @@ void SAL_CALL CDataFormatTranslator::initTranslationTable() m_TranslTable.push_back(FormatEntry("image/bmp", "Windows Bitmap", NULL, CF_INVALID, CPPUTYPE_DEFAULT)); //SotClipboardFormatId::PNG m_TranslTable.push_back(FormatEntry("image/png", "PNG", NULL, CF_INVALID, CPPUTYPE_DEFAULT)); + //SotClipboardFormatId::MATHML + m_TranslTable.push_back(FormatEntry("application/mathml+xml", "MathML", NULL, CF_INVALID, CPPUTYPE_DEFAULT)); //SotClipboardFormatId::DUMMY3 m_TranslTable.push_back(FormatEntry("application/x-openoffice-dummy3;windows_formatname=\"SO_DUMMYFORMAT_3\"", "SO_DUMMYFORMAT_3", NULL, CF_INVALID, CPPUTYPE_DEFAULT)); //SotClipboardFormatId::DUMMY4 diff --git a/include/sot/formats.hxx b/include/sot/formats.hxx index cb2ee82..c85a10f 100644 --- a/include/sot/formats.hxx +++ b/include/sot/formats.hxx @@ -185,8 +185,9 @@ enum class SotClipboardFormatId : sal_uLong HC_GDIMETAFILE = 140, PNG = 141, STARWRITERGLOB_8_TEMPLATE = 142, + MATHML = 143, // the point at which we start allocating "runtime" format IDs - USER_END = STARWRITERGLOB_8_TEMPLATE + USER_END = MATHML }; /** Make it easier to iterate over format IDs */ diff --git a/officecfg/registry/data/org/openoffice/Office/UI/MathCommands.xcu b/officecfg/registry/data/org/openoffice/Office/UI/MathCommands.xcu index 02c5b52..4d612cd 100644 --- a/officecfg/registry/data/org/openoffice/Office/UI/MathCommands.xcu +++ b/officecfg/registry/data/org/openoffice/Office/UI/MathCommands.xcu @@ -43,6 +43,11 @@ <value xml:lang="en-US">~Import Formula...</value> </prop> </node> + <node oor:name=".uno:ImportMathMLClipboard" oor:op="replace"> + <prop oor:name="Label" oor:type="xs:string"> + <value xml:lang="en-US">Import MathML from Clipboard</value> + </prop> + </node> <node oor:name=".uno:FitInWindow" oor:op="replace"> <prop oor:name="Label" oor:type="xs:string"> <value xml:lang="en-US">Fit To Window</value> diff --git a/sot/source/base/exchange.cxx b/sot/source/base/exchange.cxx index 8b3541f..599525d 100644 --- a/sot/source/base/exchange.cxx +++ b/sot/source/base/exchange.cxx @@ -201,6 +201,7 @@ namespace /*140 SotClipboardFormatId::GDIMETAFILE*/ { "application/x-openoffice-highcontrast-gdimetafile;windows_formatname=\"GDIMetaFile\"", "High Contrast GDIMetaFile", &cppu::UnoType<Sequence<sal_Int8>>::get() }, /*141 SotClipboardFormatId::PNG*/ { "image/png", "PNG Bitmap", &cppu::UnoType<Sequence<sal_Int8>>::get() }, /*142 SotClipboardFormatId::STARWRITERGLOB_8_TEMPLATE*/ { MIMETYPE_OASIS_OPENDOCUMENT_TEXT_GLOBAL_TEMPLATE_ASCII, "Writer/Global 8 Template", &cppu::UnoType<Sequence<sal_Int8>>::get() }, + /*143 SotClipboardFormatId::MATHML*/ { "application/mathml+xml", "MathML", &::cppu::UnoType<const Sequence< sal_Int8 >>::get() }, }; return &aInstance[0]; } diff --git a/starmath/inc/starmath.hrc b/starmath/inc/starmath.hrc index 7196b26..6bf6e21 100644 --- a/starmath/inc/starmath.hrc +++ b/starmath/inc/starmath.hrc @@ -45,6 +45,7 @@ #define SID_SYMBOLS (SID_SMA_START + 56) // Has to be picked up again for now! #define SID_TEXTMODE (SID_SMA_START + 57) #define SID_IMPORT_FORMULA (SID_SMA_START + 58) +#define SID_IMPORT_MATHML_CLIPBOARD (SID_SMA_START + 59) #define SID_TEXT (SID_SMA_START + 100) #define SID_GAPHIC_SM (SID_SMA_START + 101) /** Command for inserting a symbol specified by a string (Inserts an SmSpecialNode) */ diff --git a/starmath/sdi/smath.sdi b/starmath/sdi/smath.sdi index 94cacca..bbf5a6b 100644 --- a/starmath/sdi/smath.sdi +++ b/starmath/sdi/smath.sdi @@ -418,6 +418,29 @@ SfxBoolItem ImportFormula SID_IMPORT_FORMULA GroupId = GID_INSERT; ] +SfxBoolItem ImportMathMLClipboard SID_IMPORT_MATHML_CLIPBOARD +() +[ + /* flags: */ + AutoUpdate = FALSE, + Cachable = Cachable, + FastCall = TRUE, + HasCoreId = FALSE, /*obsolete */ + HasDialog = FALSE, /*obsolete */ + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, /*obsolete */ + RecordPerSet; + Synchron; + + /* config: */ + AccelConfig = TRUE, + MenuConfig = TRUE, + StatusBarConfig = FALSE, + ToolBoxConfig = TRUE, + GroupId = GID_INSERT; +] SfxVoidItem LoadSymbols SID_LOADSYMBOLS () diff --git a/starmath/sdi/smslots.sdi b/starmath/sdi/smslots.sdi index 9857d39..a43eb7c 100644 --- a/starmath/sdi/smslots.sdi +++ b/starmath/sdi/smslots.sdi @@ -251,6 +251,12 @@ interface FormulaView StateMethod = GetState ; Export = FALSE ; ] + SID_IMPORT_MATHML_CLIPBOARD //idlpp ole : no , status : no + [ + ExecMethod = Execute ; + StateMethod = GetState ; + Export = FALSE ; + ] //idlpp kein Menueeintrag , also keine Texte SID_ATTR_ZOOM //idlpp ole : no , status : no [ diff --git a/starmath/source/view.cxx b/starmath/source/view.cxx index 6bed0c3..1c4ca54 100644 --- a/starmath/source/view.cxx +++ b/starmath/source/view.cxx @@ -61,6 +61,7 @@ #include <vcl/settings.hxx> #include <fstream> +#include <unotools/streamwrap.hxx> #include "unomodel.hxx" #include "view.hxx" @@ -1653,6 +1654,80 @@ void SmViewShell::Execute(SfxRequest& rReq) break; } + case SID_IMPORT_MATHML_CLIPBOARD: + { + TransferableDataHelper aDataHelper( TransferableDataHelper::CreateFromSystemClipboard(GetEditWindow()) ); + uno::Reference < io::XInputStream > xStrm; + SotClipboardFormatId nId = SOT_FORMAT_SYSTEM_START; //dummy initialize to avoid warning + if ( aDataHelper.GetTransferable().is() ) + { + if (aDataHelper.HasFormat(nId = SotClipboardFormatId::MATHML)) + { + xStrm = aDataHelper.GetInputStream(nId, ""); + if (xStrm.is()) + { + SfxMedium* pClipboardMedium = new SfxMedium(); + pClipboardMedium->GetItemSet(); //generate initial itemset, not sure if necessary + const SfxFilter* pMathFilter = + SfxFilter::GetFilterByName(OUString::createFromAscii(MATHML_XML)); + pClipboardMedium->SetFilter(pMathFilter); + pClipboardMedium->setStreamToLoadFrom(xStrm, true /*bIsReadOnly*/); + InsertFrom(*pClipboardMedium); + GetDoc()->UpdateText(); + delete pClipboardMedium; + } + } + else + { + if (aDataHelper.HasFormat(nId = SotClipboardFormatId::STRING)) + { + // In case of FORMAT_STRING no stream exists, need to generate one + ::rtl::OUString aString; + if (aDataHelper.GetString( nId, aString)) + { + SfxMedium* pClipboardMedium = new SfxMedium(); + pClipboardMedium->GetItemSet(); //generates initial itemset, not sure if necessary + const SfxFilter* pMathFilter = + SfxFilter::GetFilterByName(OUString::createFromAscii(MATHML_XML)); + pClipboardMedium->SetFilter(pMathFilter); + + SvMemoryStream * pStrm; + // The text to be imported might asserts encoding like 'encoding="utf-8"' but FORMAT_STRING is UTF-16. + // Force encoding to UTF-16, if encoding exists. + bool bForceUTF16 = false; + sal_Int32 nPosL = aString.indexOf( OUString::createFromAscii("encoding=\"")); + sal_Int32 nPosU = -1; + if ( nPosL >= 0 && nPosL +10 < aString.getLength() ) + { + nPosL += 10; + nPosU = aString.indexOf( '"',nPosL); + if (nPosU > nPosL) + { + bForceUTF16 = true; + } + } + if ( bForceUTF16 ) + { + OUString aNewString = aString.replaceAt( nPosL,nPosU-nPosL,OUString::createFromAscii("UTF-16")); + pStrm = new SvMemoryStream( (void*)aNewString.getStr(), aNewString.getLength() * sizeof(sal_Unicode), StreamMode::READ); + } + else + { + pStrm = new SvMemoryStream( (void*)aString.getStr(), aString.getLength() * sizeof(sal_Unicode), StreamMode::READ); + } + uno::Reference<io::XInputStream> xStrm2( new ::utl::OInputStreamWrapper(*pStrm) ); + pClipboardMedium->setStreamToLoadFrom(xStrm2, true /*bIsReadOnly*/); + InsertFrom(*pClipboardMedium); + GetDoc()->UpdateText(); + delete pClipboardMedium; + delete pStrm; + } + } + } + } + break; + } + case SID_NEXTERR: NextError(); if (pWin) diff --git a/starmath/uiconfig/smath/menubar/menubar.xml b/starmath/uiconfig/smath/menubar/menubar.xml index 5a8edbb..60c48ff 100644 --- a/starmath/uiconfig/smath/menubar/menubar.xml +++ b/starmath/uiconfig/smath/menubar/menubar.xml @@ -116,6 +116,7 @@ <menu:menupopup> <menu:menuitem menu:id=".uno:SymbolCatalogue"/> <menu:menuitem menu:id=".uno:ImportFormula"/> + <menu:menuitem menu:id=".uno:ImportMathMLClipboard"/> <menu:menuseparator/> <menu:menu menu:id=".uno:MacrosMenu"> <menu:menupopup> commit 26aebe26f706d9fbc9c113f5c1fdc495578435bf Author: Michael Stahl <mst...@redhat.com> Date: Wed Jul 8 15:47:57 2015 +0200 vcl: use SAL_INFO for available X11 clipboard formats Change-Id: Ifbd87e59fa91241dd5852f7dc6b63e65d8ca6bad diff --git a/include/sal/log-areas.dox b/include/sal/log-areas.dox index 70f3456..3eb754c 100644 --- a/include/sal/log-areas.dox +++ b/include/sal/log-areas.dox @@ -407,6 +407,7 @@ certain functionality. @li @c vcl.sm - Session Manager @li @c vcl.unity @li @c vcl.unx.print +@li @c vcl.unx.dtrans @li @c vcl.virdev @li @c vcl.window @li @c vcl.wmf diff --git a/vcl/unx/generic/dtrans/X11_selection.cxx b/vcl/unx/generic/dtrans/X11_selection.cxx index fc4e97b..a323791 100644 --- a/vcl/unx/generic/dtrans/X11_selection.cxx +++ b/vcl/unx/generic/dtrans/X11_selection.cxx @@ -1305,10 +1305,8 @@ bool SelectionManager::getPasteDataTypes( Atom selection, Sequence< DataFlavor > sal_Int32 nNativeTypesIndex = 0; while( nAtoms-- ) { -#if OSL_DEBUG_LEVEL > 1 - if( *pAtoms && *pAtoms < 0x01000000 ) - fprintf( stderr, "native type: %s\n", OUStringToOString( getString( *pAtoms ), RTL_TEXTENCODING_ISO_8859_1 ).getStr() ); -#endif + SAL_INFO_IF(*pAtoms && *pAtoms < 0x01000000, "vcl.unx.dtrans", + "getPasteDataTypes: available: \"" << getString(*pAtoms) << "\""); if( *pAtoms == m_nCOMPOUNDAtom ) bHaveText = bHaveCompound = true; else if( *pAtoms && *pAtoms < 0x01000000 ) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits