html2odt 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/xsl/README.rst ADDED
@@ -0,0 +1,144 @@
1
+ XHTML to ODT XML transformation
2
+ ===============================
3
+
4
+ These stylesheets convert namespaced XHTML to ODT_.
5
+
6
+ You can download_ them from the project's website_.
7
+
8
+ The HTML must be well-formed and valid, so I recommand running it through Tidy_
9
+ before sending it to the stylesheets.
10
+
11
+ Those stylesheets do not build a whole ODT file, they only convert the XHTML to
12
+ the equivalent OpenDocument XML. The result can then be inserted in a template
13
+ ODT file. The HTML may be included in an ODT document, the ODT will be left
14
+ untouched.
15
+
16
+ .. _website: http://xhtml2odt.org/
17
+ .. _download: http://xhtml2odt.org/dl/
18
+ .. _ODT: http://en.wikipedia.org/wiki/OpenDocument
19
+ .. _Tidy: http://tidy.sourceforge.net/
20
+
21
+
22
+ Caveats
23
+ -------
24
+
25
+ Styles:
26
+ Some default styles will be added to the document, but not on the first
27
+ pass. After converting to ODT, you must run the ``content.xml`` and the
28
+ ``styles.xml`` files (in the ODT file) through the ``xsl/styles.xsl``
29
+ stylesheet to add the styles. When the default styles are added, the
30
+ stylesheet checks that the style is not already present, so customizations
31
+ to the template ODT file will be preserved. It will however add styles that
32
+ are not used in the text, but that's harmless.
33
+
34
+ Images:
35
+ Images are not added, you must manually go trough the ``draw:image``
36
+ elements in the converted ODT text and use the ``xlink:href`` attribute to
37
+ download or copy the image. While you're at it, you should update the image
38
+ dimensions if the were not provided in the ``img`` tag.
39
+
40
+
41
+ Command-line scripts
42
+ --------------------
43
+
44
+ Three command-line scripts to run the stylesheets are provided, one is
45
+ Python-based, the other is PHP-based, the last one is shell-based. The first
46
+ two do import the styles and the images, so they can also be used as a code
47
+ example for these two steps in other languages and actual export plugins. The
48
+ shell script is more of a minimalist approach to demonstrate the simplest
49
+ possible use of the stylesheets.
50
+
51
+ Documentation for the PHP and Python scripts can be generated using the ``make
52
+ doc`` command. This will require Sphinx_ for Python and phpDocumentor_ for PHP.
53
+
54
+ .. _sphinx: http://sphinx.pocoo.org/
55
+ .. _phpDocumentor: http://www.phpdoc.org/
56
+
57
+ The python script
58
+ ^^^^^^^^^^^^^^^^^
59
+
60
+ The python script is the preferred command-line script, because it currently is
61
+ a little more complete than the PHP script. It depends on the following Python
62
+ modules:
63
+
64
+ * uTidylib_
65
+ * lxml_
66
+ * PIL_
67
+
68
+ To get information on the script's options, run it with ``--help``::
69
+
70
+ ./xhtml2odt.py --help
71
+
72
+ The script can be installed on the system with the ``make install`` command.
73
+
74
+ .. _uTidylib: http://pypi.python.org/pypi/uTidylib
75
+ .. _lxml: http://pypi.python.org/pypi/lxml
76
+ .. _PIL: http://pypi.python.org/pypi/PIL
77
+
78
+ The PHP script
79
+ ^^^^^^^^^^^^^^
80
+
81
+ The PHP script can be used as an example to create an ODT export plugin for a
82
+ PHP-based application. It contains comments on what you should do differently
83
+ in a web-based application. If you want a real PHP-based export plugin, you can
84
+ look at the code of the `Dotclear ODT export plugin`_.
85
+
86
+ The PHP script requires the zip_ module, and will work better with the `tidy
87
+ extension`_.
88
+
89
+ To get information on the script's options, run it with ``--help``::
90
+
91
+ ./xhtml2odt.php --help
92
+
93
+ .. _Dotclear ODT export plugin: http://lab.dotclear.org/wiki/plugin/odt
94
+ .. _zip: http://php.net/manual/en/zip.installation.php
95
+ .. _tidy extension: http://php.net/manual/en/book.tidy.php
96
+
97
+
98
+ Tests
99
+ -----
100
+
101
+ The unit tests are python-based, you need to install the nose_ python module
102
+ availble from PyPI (or your distribution).
103
+
104
+ Then, just run ``nosetests tests``.
105
+
106
+ .. _nose: http://pypi.python.org/pypi/nose/
107
+
108
+
109
+ References
110
+ ----------
111
+
112
+ * `ODT export for Dotclear <http://lab.dotclear.org/wiki/plugin/odt>`_
113
+ * `ODT export for Trac <http://trac-hacks.org/wiki/OdtExportPlugin>`_
114
+ * `ODT export for Dokuwiki <http://www.dokuwiki.org/plugin:odt>`_
115
+ (not using this project, but similar and by the same author)
116
+
117
+
118
+ License
119
+ -------
120
+
121
+ Copyright (C) 2009-2010 `Aurelien Bompard`_.
122
+
123
+ Inspired by the work on docbook2odt_, by Roman Fordinal. Many thanks to him.
124
+
125
+ .. _Aurelien Bompard: http://aurelien.bompard.org/
126
+ .. _docbook2odt: http://open.comsultia.com/docbook2odf/
127
+
128
+ License is LGPL v2.1 or later: http://www.gnu.org/licenses/lgpl-2.1.html
129
+
130
+ This library is free software; you can redistribute it and/or
131
+ modify it under the terms of the GNU Lesser General Public
132
+ License as published by the Free Software Foundation; either
133
+ version 2.1 of the License, or (at your option) any later version.
134
+
135
+ This library is distributed in the hope that it will be useful,
136
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
137
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
138
+ Lesser General Public License for more details.
139
+
140
+ You should have received a copy of the GNU Lesser General Public
141
+ License along with this library; if not, write to the Free Software
142
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
143
+
144
+ .. vim:syntax=rst
@@ -0,0 +1,169 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!--
3
+
4
+ xhtml2odt - XHTML to ODT XML transformation.
5
+ Copyright (C) 2009 Aurelien Bompard
6
+ Inspired by the work on docbook2odt, by Roman Fordinal
7
+ http://open.comsultia.com/docbook2odf/
8
+
9
+ License: LGPL v2.1 or later <http://www.gnu.org/licenses/lgpl-2.1.html>
10
+
11
+ This library is free software; you can redistribute it and/or
12
+ modify it under the terms of the GNU Lesser General Public
13
+ License as published by the Free Software Foundation; either
14
+ version 2.1 of the License, or (at your option) any later version.
15
+
16
+ This library is distributed in the hope that it will be useful,
17
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
18
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19
+ Lesser General Public License for more details.
20
+
21
+ You should have received a copy of the GNU Lesser General Public
22
+ License along with this library; if not, write to the Free Software
23
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
24
+ MA 02110-1301 USA
25
+
26
+ -->
27
+ <xsl:stylesheet
28
+ xmlns:h="http://www.w3.org/1999/xhtml"
29
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
30
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
31
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
32
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
33
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
34
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
35
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
36
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
37
+ xmlns:xlink="http://www.w3.org/1999/xlink"
38
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
39
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
40
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
41
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
42
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
43
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
44
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
45
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
46
+ xmlns:dom="http://www.w3.org/2001/xml-events"
47
+ xmlns:xforms="http://www.w3.org/2002/xforms"
48
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
49
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
50
+ xmlns:presentation="urn:oasis:names:tc:opendocument:xmlns:presentation:1.0"
51
+ version="1.0">
52
+
53
+
54
+
55
+ <xsl:template match="h:blockquote">
56
+ <!-- special formatting is defined in paragraph -->
57
+ <xsl:apply-templates/>
58
+ </xsl:template>
59
+
60
+ <xsl:template match="h:hr">
61
+ <text:p text:style-name="Horizontal_20_Line"/>
62
+ </xsl:template>
63
+ <xsl:template match="h:hr" mode="inparagraph"/>
64
+
65
+ <!--
66
+ Preformatted paragraphs management
67
+ -->
68
+ <xsl:template match="h:pre">
69
+ <text:p text:style-name="Preformatted_20_Text">
70
+ <xsl:apply-templates mode="inparagraph"/>
71
+ </text:p>
72
+ <!-- The Preformatted_20_Text style has a margin-bottom of 0, so we add an
73
+ empty line here -->
74
+ <text:p text:style-name="Text_20_body"/>
75
+ </xsl:template>
76
+ <xsl:template match="h:pre" mode="inparagraph"/>
77
+
78
+ <xsl:template match="h:pre//text()" mode="inparagraph">
79
+ <!-- Don't generate the last line break before the </pre> -->
80
+ <xsl:variable name="content">
81
+ <xsl:choose>
82
+ <xsl:when test="contains(., '&#10;')
83
+ and position() = last()
84
+ and substring(., string-length(.)) = '&#10;'">
85
+ <xsl:value-of select="substring(., 1, string-length(.)-1)"/>
86
+ </xsl:when>
87
+ <xsl:otherwise>
88
+ <xsl:value-of select="."/>
89
+ </xsl:otherwise>
90
+ </xsl:choose>
91
+ </xsl:variable>
92
+ <!-- Now call the main template, which will handle the line-breaking -->
93
+ <xsl:call-template name="pre.line">
94
+ <xsl:with-param name="content" select="$content"/>
95
+ </xsl:call-template>
96
+ </xsl:template>
97
+
98
+ <!--
99
+ this template splits newline-separated pararagraphs into multiple
100
+ paragraphs
101
+ -->
102
+ <xsl:template name="pre.line">
103
+ <xsl:param name="content"/>
104
+ <xsl:choose>
105
+ <!-- This line-breaking manipulation is classical, e.g.:
106
+ http://skew.org/xml/stylesheets/linefeed2br/
107
+ -->
108
+ <xsl:when test="contains($content, '&#10;')">
109
+ <!-- split in two -->
110
+ <xsl:call-template name="pre.line">
111
+ <xsl:with-param name="content" select="substring-before($content, '&#10;')"/>
112
+ </xsl:call-template>
113
+ <text:line-break/>
114
+ <xsl:call-template name="pre.line">
115
+ <xsl:with-param name="content" select="substring-after($content, '&#10;')"/>
116
+ </xsl:call-template>
117
+ </xsl:when>
118
+ <xsl:otherwise>
119
+ <!-- here we're on a single line, call pre.line.single to preserve
120
+ spaces -->
121
+ <xsl:call-template name="pre.line.single">
122
+ <xsl:with-param name="content" select="string($content)"/>
123
+ </xsl:call-template>
124
+ </xsl:otherwise>
125
+ </xsl:choose>
126
+ </xsl:template>
127
+
128
+ <!-- This template escapes adjacent spaces -->
129
+ <xsl:template name="pre.line.single">
130
+ <xsl:param name="content"/>
131
+ <xsl:choose>
132
+ <xsl:when test="contains($content, ' ')">
133
+ <xsl:call-template name="pre.line.single">
134
+ <xsl:with-param name="content" select="substring-before($content, ' ')"/>
135
+ </xsl:call-template>
136
+ <text:s text:c="2"/>
137
+ <xsl:call-template name="pre.line.single">
138
+ <xsl:with-param name="content" select="substring-after($content, ' ')"/>
139
+ </xsl:call-template>
140
+ </xsl:when>
141
+ <xsl:when test="contains($content, '&#9;')">
142
+ <xsl:call-template name="pre.line.single">
143
+ <xsl:with-param name="content" select="substring-before($content, '&#9;')"/>
144
+ </xsl:call-template>
145
+ <text:tab/>
146
+ <xsl:call-template name="pre.line.single">
147
+ <xsl:with-param name="content" select="substring-after($content, '&#9;')"/>
148
+ </xsl:call-template>
149
+ </xsl:when>
150
+ <xsl:otherwise>
151
+ <xsl:value-of select="string($content)"/>
152
+ </xsl:otherwise>
153
+ </xsl:choose>
154
+ </xsl:template>
155
+
156
+
157
+ <xsl:template match="h:address">
158
+ <!-- special formatting is defined in paragraph -->
159
+ <xsl:call-template name="paragraph"/>
160
+ </xsl:template>
161
+ <xsl:template match="h:address" mode="inparagraph"/>
162
+
163
+ <xsl:template match="h:center">
164
+ <!-- special formatting is defined in paragraph -->
165
+ <xsl:call-template name="paragraph"/>
166
+ </xsl:template>
167
+ <xsl:template match="h:center" mode="inparagraph"/>
168
+
169
+ </xsl:stylesheet>
@@ -0,0 +1,122 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!--
3
+
4
+ xhtml2odt - XHTML to ODT XML transformation.
5
+ Copyright (C) 2009 Aurelien Bompard
6
+ Inspired by the work on docbook2odt, by Roman Fordinal
7
+ http://open.comsultia.com/docbook2odf/
8
+
9
+ License: LGPL v2.1 or later <http://www.gnu.org/licenses/lgpl-2.1.html>
10
+
11
+ This library is free software; you can redistribute it and/or
12
+ modify it under the terms of the GNU Lesser General Public
13
+ License as published by the Free Software Foundation; either
14
+ version 2.1 of the License, or (at your option) any later version.
15
+
16
+ This library is distributed in the hope that it will be useful,
17
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
18
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19
+ Lesser General Public License for more details.
20
+
21
+ You should have received a copy of the GNU Lesser General Public
22
+ License along with this library; if not, write to the Free Software
23
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
24
+ MA 02110-1301 USA
25
+
26
+ -->
27
+ <xsl:stylesheet
28
+ xmlns:h="http://www.w3.org/1999/xhtml"
29
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
30
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
31
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
32
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
33
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
34
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
35
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
36
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
37
+ xmlns:xlink="http://www.w3.org/1999/xlink"
38
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
39
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
40
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
41
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
42
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
43
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
44
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
45
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
46
+ xmlns:dom="http://www.w3.org/2001/xml-events"
47
+ xmlns:xforms="http://www.w3.org/2002/xforms"
48
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
49
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
50
+ xmlns:presentation="urn:oasis:names:tc:opendocument:xmlns:presentation:1.0"
51
+ version="1.0">
52
+
53
+
54
+ <xsl:template match="h:section">
55
+ <xsl:apply-templates/>
56
+ </xsl:template>
57
+
58
+ <xsl:template match="h:header">
59
+ <xsl:apply-templates/>
60
+ </xsl:template>
61
+
62
+ <xsl:template match="h:footer">
63
+ <xsl:apply-templates/>
64
+ </xsl:template>
65
+
66
+ <xsl:template match="h:summary">
67
+ <!-- TODO: Add space on the left and right of the text -->
68
+ <xsl:apply-templates/>
69
+ </xsl:template>
70
+
71
+ <xsl:template match="h:article">
72
+ <xsl:apply-templates/>
73
+ </xsl:template>
74
+
75
+ <xsl:template match="h:nav"/> <!-- only keep the content -->
76
+
77
+ <xsl:template match="h:aside">
78
+ <text:p text:style-name="Text_20_body">
79
+ <draw:frame draw:style-name="Marginalia"
80
+ text:anchor-type="paragraph"
81
+ svg:width="8.5cm" style:rel-width="50%">
82
+ <draw:text-box fo:min-height="0.5cm">
83
+ <xsl:apply-templates/>
84
+ </draw:text-box>
85
+ </draw:frame>
86
+ </text:p>
87
+ </xsl:template>
88
+
89
+ <xsl:template match="h:hgroup">
90
+ <xsl:apply-templates/>
91
+ </xsl:template>
92
+
93
+ <xsl:template match="h:time" mode="inparagraph">
94
+ <xsl:apply-templates mode="inparagraph"/>
95
+ </xsl:template>
96
+ <xsl:template match="h:time"/>
97
+
98
+ <xsl:template match="h:mark" mode="inparagraph">
99
+ <!-- TODO: make the text background color yellow -->
100
+ <xsl:apply-templates mode="inparagraph"/>
101
+ </xsl:template>
102
+
103
+ <xsl:template match="h:canvas"/>
104
+
105
+ <!-- TODO: include the source ? -->
106
+ <xsl:template match="h:audio"/>
107
+ <xsl:template match="h:video"/>
108
+ <xsl:template match="h:source"/>
109
+
110
+ <!-- form elements -->
111
+ <xsl:template match="h:command|h:datalist|h:details|h:meter|h:output|h:progress|h:keygen"/>
112
+
113
+ <!-- TODO: make a frame around it -->
114
+ <xsl:template match="h:figure"/>
115
+ <xsl:template match="h:figcaption"/>
116
+
117
+ <xsl:template match="h:ruby|h:rt|h:rp" mode="inparagraph">
118
+ <xsl:apply-templates mode="inparagraph"/>
119
+ </xsl:template>
120
+ <xsl:template match="h:ruby|h:rt|h:rp"/>
121
+
122
+ </xsl:stylesheet>
@@ -0,0 +1,93 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!--
3
+
4
+ xhtml2odt - XHTML to ODT XML transformation.
5
+ Copyright (C) 2009 Aurelien Bompard
6
+ Inspired by the work on docbook2odt, by Roman Fordinal
7
+ http://open.comsultia.com/docbook2odf/
8
+
9
+ License: LGPL v2.1 or later <http://www.gnu.org/licenses/lgpl-2.1.html>
10
+
11
+ This library is free software; you can redistribute it and/or
12
+ modify it under the terms of the GNU Lesser General Public
13
+ License as published by the Free Software Foundation; either
14
+ version 2.1 of the License, or (at your option) any later version.
15
+
16
+ This library is distributed in the hope that it will be useful,
17
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
18
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19
+ Lesser General Public License for more details.
20
+
21
+ You should have received a copy of the GNU Lesser General Public
22
+ License along with this library; if not, write to the Free Software
23
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
24
+ MA 02110-1301 USA
25
+
26
+ -->
27
+ <xsl:stylesheet
28
+ xmlns:h="http://www.w3.org/1999/xhtml"
29
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
30
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
31
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
32
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
33
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
34
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
35
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
36
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
37
+ xmlns:xlink="http://www.w3.org/1999/xlink"
38
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
39
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
40
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
41
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
42
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
43
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
44
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
45
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
46
+ xmlns:dom="http://www.w3.org/2001/xml-events"
47
+ xmlns:xforms="http://www.w3.org/2002/xforms"
48
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
49
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
50
+ xmlns:presentation="urn:oasis:names:tc:opendocument:xmlns:presentation:1.0"
51
+ version="1.0">
52
+
53
+ <xsl:template match="h:div">
54
+ <xsl:apply-templates/>
55
+ </xsl:template>
56
+ <xsl:template match="h:div" mode="inparagraph">
57
+ <xsl:apply-templates mode="inparagraph"/>
58
+ </xsl:template>
59
+
60
+ <xsl:template match="h:html">
61
+ <xsl:apply-templates/>
62
+ </xsl:template>
63
+
64
+ <xsl:template match="h:head"/>
65
+
66
+ <xsl:template match="h:body">
67
+ <xsl:apply-templates/>
68
+ </xsl:template>
69
+
70
+ <xsl:template match="h:span"/>
71
+ <xsl:template match="h:span" mode="inparagraph">
72
+ <xsl:choose>
73
+ <xsl:when test="translate(@style,' ','') != ''">
74
+ <!-- leave the style handling to xsl/styles.xsl -->
75
+ <xsl:copy>
76
+ <xsl:copy-of select="@*"/>
77
+ <xsl:apply-templates mode="inparagraph"/>
78
+ </xsl:copy>
79
+ </xsl:when>
80
+ <xsl:otherwise>
81
+ <xsl:apply-templates mode="inparagraph"/>
82
+ </xsl:otherwise>
83
+ </xsl:choose>
84
+ </xsl:template>
85
+
86
+ <xsl:template match="h:script"/>
87
+ <xsl:template match="h:noscript"/>
88
+
89
+ <xsl:template match="h:object"/>
90
+
91
+ <xsl:template match="h:form"/>
92
+
93
+ </xsl:stylesheet>