Hi Michael,

thank-you for looking at my problems.

Michael Stahl schrieb:
On 05.06.2015 01:44, Regina Henschel wrote:
Hi all,

I struggle with the clipboard. My goal is to import MathML in module
Math from clipboard, similar as it is imported from file. But I'm stuck.
Therefore some questions:
[skipped a lot of text]

include/sot/formats.hxx: enum class SotClipboardFormatId

there is no MathML in there, but various STARMATH_* ones.

     // the point at which we start allocating "runtime" format IDs
     USER_END  = STARWRITERGLOB_8_TEMPLATE

so what you probably have as ID is "user-defined", which means we can't
do anything with it really.

it looks like there needs to be some mapping from the OS-specific
clipboard to these office-internal IDs - if there's no ID for MathML it
can't be mapped.

there is a big array in sot/source/base/exchange.cxx, you probably need
to add an entry for MathML there.

the array is ordered and indexed by the SotClipboardFormatId.

/* 48 SotClipboardFormatId::STARMATH_50*/            {
"application/x-openoffice-starmath-50;windows_formatname=\"StarMath
5.0\"", "StarMath 5.0", &cppu::UnoType<Sequence<sal_Int8>>::get() },

that's the mime-type and human-readable name.

i was wondering how this would work on Windows, given that the Win32
clipboard presumably does not use mime-types; apparently the
";windows_formatname=\"...\"" appendix to the mime-type here covers that.

Helpful comments. Looking around I think, the connection to the OS is done in /main/dtrans/source/win32/

I have found the table m_TranslTable, which refers the SOT_FORMATSTR_IDs from exchange.cxx. I'll try what happens, when I add the MathML format there too. I had already added it in exchange.cxx, but that was not enough to be recognized. [I need some time for that. I will report back, when I have finished.]



(5)
I try to use SmViewShell::InsertFrom(SfxMedium &rMedium). It seems to
work, but when the process arrives at SmXMLImport::endDocument(void),
the node tree is empty.  Any tips, what I might have missed?

how do you prepare the SfxMedium?  i'm not sure if it requires an actual
file, or if it can read from an input stream (XInputStream); it probably
can't read from a Sequence<sal_Int8> buffer directly...

there is a SfxMedium::setStreamToLoadFrom() which looks promising.

I have used:

TransferableDataHelper aDataHelper( TransferableDataHelper::CreateFromSystemClipboard(GetEditWindow()) );
uno::Reference < io::XInputStream > xStrm;
aDataHelper.GetInputStream( nId, xStrm );
SfxMedium* pClipboardMedium = new SfxMedium();
SfxMedium aClipboardMedium = *pClipboardMedium;
aClipboardMedium.setStreamToLoadFrom( xStrm, sal_True /*bIsReadOnly*/ );
InsertFrom(aClipboardMedium);


When I then proof it with

SvStream* pStream = aClipboardMedium.GetInStream();
...
sal_uLong nBytesRead = pStream->Read( aBuffer, nBufferSize );
printf("%s \n", aBuffer);

I can see, that the stream contains the expected MathML-source in case the clipboard viewer lists the clipboard format "application/mathml+xml".

In addition I have set the filter by

const SfxFilter* pMathFilter = SfxFilter::GetFilterByName( String::CreateFromAscii(MATHML_XML) );
aClipboardMedium.SetFilter(pMathFilter);

so that

if ( rFltName.EqualsAscii(MATHML_XML) )

in InsertFrom becomes true


I'm still a novice in coding and it might be, that I do basic things wrong.



you can create an input stream from the buffer via SvMemoryStream and
then wrap that in utl::OInputStreamWrapper.

You mean, it will be possible to use the "Unicode-Text"? That would help, when copying from Websites. But first I need to solve the problem, that I get no node-tree, and the problem to detect the clipboard correctly.

Kind regards
Regina

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@openoffice.apache.org
For additional commands, e-mail: dev-h...@openoffice.apache.org

Reply via email to