-
Notifications
You must be signed in to change notification settings - Fork 18
/
FormatingFeaturesFiltering.xslt
32 lines (32 loc) · 2.51 KB
/
FormatingFeaturesFiltering.xslt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output omit-xml-declaration="yes" method="xml" cdata-section-elements="script"></xsl:output>
<xsl:template match="/ | node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"></xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match="*[ (self::br or self::p or self::div) and normalize-space(translate(., ' ', '')) = '' and not(@*) and not(processing-instruction()) and not(comment()) and not(*[not(self::br) or @* or * or node()]) and not(following::node()[not( (self::text() or self::br or self::p or self::div) and normalize-space(translate(., ' ', '')) = '' and not(@*) and not(processing-instruction()) and not(comment()) and not(*[not(self::br) or @* or * or node()]) )]) ]">
<!-- ignore all paragraphs and line-breaks at the end that have nothing but (non-breaking) spaces and line breaks -->
</xsl:template>
<xsl:template match="br[parent::div and not(preceding-sibling::node()) and not(following-sibling::node())]">
<!-- Chrome generates <div><br/></div>. Renders differently in different browsers. Replace it with a non-breaking space -->
<xsl:text> </xsl:text>
</xsl:template>
<!-- remove disallowed elements but keep its children -->
<xsl:template match="font">
<xsl:apply-templates></xsl:apply-templates>
</xsl:template>
<!-- remove all style attributes except those for a table and its cells and to allow underline -->
<xsl:template match="*[not(local-name() = 'table' or local-name() = 'tr' or local-name() = 'th' or local-name() = 'td' or local-name() = 'col')]/@style"></xsl:template>
<xsl:template match="span/@style">
<xsl:if test="contains(.,'text-decoration')">
<xsl:copy></xsl:copy>
</xsl:if>
</xsl:template>
<!-- remove rowspan and collspan when set to 1 -->
<xsl:template match="@colspan[.='1'] | @rowspan[.='1']"></xsl:template>
<!-- remove well known Microsoft Word classes -->
<xsl:template match="@class[starts-with(., 'Mso')] | @class[starts-with(., 'mso')]"></xsl:template>
<!-- remove conditional comments that Microsoft Word uses -->
<xsl:template match="comment()[contains(., 'if')] | comment()[contains(., 'endif')]"></xsl:template>
</xsl:stylesheet>