Customizing Smart Paste Support
The Smart Paste feature preserves certain style and structure information when copying content from some of the most common applications and pasting into frameworks (document types) that support Smart Paste in Oxygen XML Editor. For other document types, the default behavior of the paste operation is to keep only the text content without the styling.
The style of the pasted content can be customized by editing an XSLT stylesheet for a particular document type (framework). The XSLT stylesheet must accept an XHTML flavor of the copied content as input, and transform it to the equivalent XML markup that is appropriate for the target document type of the paste operation.
How to Customize the Smart Paste Mapping
-
Make sure the particular framework contains a folder named resources in the following path structure:
/frameworks/[Document Type]/resources
-
Create an XSLT file named xhtml2content.xsl and save it in the resources folder for the particular framework.
For example: /frameworks/[Document Type]/resources/xhtml2content.xsl
- Add your customized styling in the XSLT file. A list of supported parameters can be
found in the Supported Parameters for the Custom Smart Paste XSLT section below.Tip: The built-in DITA framework includes an xhtml2ditaDriver.xsl file (in [OXYGEN_INSTALL_DIR]/frameworks/dita/resources) that imports various other stylesheets that apply cleanup and handle the conversion from the pasted HTML content to DITA. If you are using a custom extension of the DITA framework, you can copy the entire contents of the built-in dita/resources folder and customize the stylesheets according to your needs.
- You can test modifications done in the stylesheet by pasting content without having to restart Oxygen XML Editor.
Result: When you paste content from external applications (such as a web browser or and Office document) to a document that is open in Author mode, and that matches the particular framework, the styling from the xhtml2content.xsl stylesheet will be applied on the clipboard contents.
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
xmlns="urn:hl7-org:v3"
exclude-result-prefixes="xsl xhtml">
<xsl:output method="xml" indent="no" omit-xml-declaration="yes"/>
<xsl:template match="xhtml:b | xhtml:strong">
<content styleCode="bold" >
<xsl:apply-templates select="@* | node()"/>
</content>
</xsl:template>
<xsl:template match="*">
<xsl:apply-templates select="@* | node()"/>
</xsl:template>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Supported Parameters for the Custom Smart Paste XSLT
The following parameters can be used in your XSLT stylesheet for customizing the Smart Paste mechanism:
- inTableContext
- The custom XSLT stylesheet receives this parameter with a value of true if the end-user is pasting content inside a table.
- folderOfPasteTargetXml
- A URL pointing to the folder where the currently edited XML document is located. This is used to save images relative to the current XML document.
- context.path.names
- A sequence of element names showing the current context in the XML document where the paste occurred.
- context.path.uris
- A sequence of namespaces, one for each context path name.
- context.path.separator
- The separator between the path names. Its value can be used to split the context path names to a sequence.
<!-- Options that control external paste
(automatic conversions when pasting HTML and URL flavors from the clipboard). -->
<pasteOptions>
<!-- True to check if the entire sequence of words which get pasted are
converted to the target vocabulary. If the check fails, the content
will be inserted as a simple sequence of words without any formatting. -->
<checkEntireContentIsFullyPreserved>true</checkEntireContentIsFullyPreserved>
</pasteOptions>