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