source: freemind/trunk/fuentes/freemind/accessories/freemind2html.xsl @ 68

Last change on this file since 68 was 68, checked in by jrpelegrina, 4 years ago

First release to Xenial

File size: 17.7 KB
Line 
1<?xml version="1.0" encoding="UTF-8"?>
2
3<!--
4        File:        freemind2html.xsl
5        Version:     0.8.1
6        Description: A XSLT stylesheet to transform mindmap files created with
7        FreeMind (http://freemind.sf.net) into HTML files. The
8        transformation will keep the structure of the files, clouds
9        (with it's colors), icons, internal and external links and the ability
10        to collapse whole subtrees of the document (with JavaScript enabled).
11        The results of the transformation were tested and found to be working
12        in the following browsers:
13                - Internet Explorer 6
14                - Mozilla Firefox 0.9 (should be working with nearly any
15                  browser using the Geko engine)
16                - Konqueror
17                - Opera 7
18        Other browsers were not tested, but you should have a good chance of
19        gettting things to work with them.
20        Usage:     Use any XSLT-Processor (development was done using xsltproc
21        under Linux) to apply this stylesheet to the FreeMind-file. Copy the
22        result and all the PNG-Files inside the script directory
23        (including the icons-subdir) into a directory of it's own
24        (e.g. on a webserver).
25        Open the HTML-file with a webbrowser.
26        Author:   Markus Brueckner <freemind-xsl@slash-me.net>
27        License:  BSD license without advertising clause. (see
28        http://www.opensource.org/licenses/bsd-license.php for further details)
29        Bug fix (FC/ 25.04.2006):
30        - Export of local hyperlinks corrected.
31        Update (EWL / 2006-06-02):
32         - add export of notes & attributes
33         - re-format/re-arrange/modularize the file to align with tohtml.xsl
34-->
35<xsl:stylesheet version="1.0"
36                xmlns="http://www.w3.org/1999/xhtml" 
37                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
38                >
39<!-- mozilla doesn't parse method xhtml (in xslt 2.0) -->
40<xsl:output method="xml"
41            version="1.0"
42            encoding="UTF-8"
43            doctype-public="-//W3C//DTD XHTML 1.1//EN" 
44            doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"
45            omit-xml-declaration="no"
46            />
47
48<!-- fc, 20.10.2004: The following parameter is set by freemind. -->
49<xsl:param name="destination_dir">./</xsl:param>
50<xsl:param name="area_code"></xsl:param>
51<xsl:param name="folding_type">html_export_no_folding</xsl:param>
52        <!-- possible values:
53                html_export_fold_all,
54                html_export_no_folding,
55                html_export_fold_currently_folded,
56                html_export_based_on_headings: this means, that approx. five levels are given, more deeper nodes are folded.
57                As of the time being, this parameter is not used.
58                -->
59<!-- if false, does not show standard freemind icons
60(assumed to be in ./icons directory), default is true -->
61<xsl:param name="show_icons">true</xsl:param>
62<!-- if true, external links urls are shown, default is false. -->
63<xsl:param name="show_link_url">false</xsl:param>
64
65<!-- ### THE ROOT TEMPLATE ### -->
66
67<xsl:template match="/">
68<html>
69<!-- Thanks to gulpman: -->
70<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
71
72<xsl:comment>This file has been created with freemind2html.xsl</xsl:comment>
73<head>
74        <title><xsl:call-template name="output-title" /></title>
75        <!-- Stylesheet, generator and some JavaScript for the collapsing of
76                the trees -->
77        <xsl:element name="link">
78                <xsl:attribute name="rel">stylesheet</xsl:attribute>
79                <xsl:attribute name="href">
80                        <xsl:value-of select="$destination_dir"/>freemind2html.css</xsl:attribute>
81                <xsl:attribute name="type">text/css</xsl:attribute>
82        </xsl:element>
83        <meta name="generator" content="FreeMind-XSL Stylesheet (see: http://freemind-xsl.dev.slash-me.net/ for details)" />
84        <xsl:element name="script">
85                <xsl:attribute name="type">text/javascript</xsl:attribute>
86                <xsl:attribute name="src">
87                        <xsl:value-of select="$destination_dir"/>freemind2html.js</xsl:attribute>&#160; 
88        </xsl:element>
89        <script type="text/javascript">
90                <xsl:comment>
91          <![CDATA[
92               function toggle(id)
93               {
94                   div_el = document.getElementById(id);
95                   img_el = document.getElementById('img'+id);
96                   if (div_el.style.display != 'none')
97                   {
98          ]]>
99                                       
100                      div_el.style.display='none';
101                      img_el.src = '<xsl:value-of select="$destination_dir"/>show.png';
102          <![CDATA[
103                   }
104                   else
105                   {
106          ]]>
107                      div_el.style.display='block';
108                      img_el.src = '<xsl:value-of select="$destination_dir"/>hide.png';
109          <![CDATA[
110                   };
111               };
112          ]]>
113          </xsl:comment>
114        </script>
115</head>
116
117<body>
118        <h1><xsl:call-template name="output-title" /></h1>
119        <!-- place image -->
120        <div style="width:96%;  padding:2%;     margin-bottom:10px;     border: 0px;    text-align:center;      vertical-align:center;">
121                <xsl:element name="img">
122                        <xsl:attribute name="src">
123                                <xsl:value-of select="$destination_dir"/>image.png</xsl:attribute>
124                        <xsl:attribute name="style">margin-bottom:10px;         border: 0px;    text-align:center;      vertical-align:center;</xsl:attribute>
125                        <xsl:attribute name="alt">Imagemap</xsl:attribute>
126                        <xsl:attribute name="usemap">#fm_imagemap</xsl:attribute>
127                </xsl:element>
128        </div>
129        <map name="fm_imagemap" id="fm_imagemap">
130                <xsl:value-of select="$area_code" disable-output-escaping="yes"/>
131        </map>
132        <xsl:apply-templates />
133</body>
134
135</html>
136</xsl:template> <!-- xsl:template match="/" -->
137
138<!-- the template to output for each node -->
139<xsl:template match="node">
140<div>
141        <!-- generate a unique ID that can be used to reference this node
142                e.g. from the JavaScript -->
143        <xsl:variable name="contentID">
144                <xsl:value-of select="generate-id()"/>
145        </xsl:variable>
146        <!-- check whether this node is a cloud... -->
147        <xsl:choose>
148        <xsl:when test="cloud">
149                <!-- ...if yes, check whether it has a special color... -->
150                <xsl:choose>
151                <xsl:when test="cloud/@COLOR">
152                        <xsl:attribute name="class">cloud</xsl:attribute>
153                        <xsl:attribute name="style">background-color:<xsl:value-of select="cloud/@COLOR" /></xsl:attribute>
154                </xsl:when>
155                <!-- no? Then choose some default color -->
156                <xsl:otherwise>
157                        <xsl:attribute name="class">cloud</xsl:attribute>
158                </xsl:otherwise>
159                </xsl:choose>
160        </xsl:when>
161        <xsl:otherwise>
162                <xsl:attribute name="class">node</xsl:attribute>
163        </xsl:otherwise>
164        </xsl:choose>
165        <!-- check whether this node has any child nodes... -->
166        <xsl:choose>
167        <xsl:when test="node">
168                <!-- ...yes? Then put the "hide" button in front of the text...
169                        -->
170                <!--<img src="hide.png" class="hideshow" alt="hide">-->
171                <xsl:element name="img">
172                        <xsl:attribute name="src">
173                                <xsl:value-of select="$destination_dir"/>hide.png</xsl:attribute>
174                        <xsl:attribute name="class">hideshow</xsl:attribute>
175                        <xsl:attribute name="alt">hide</xsl:attribute>
176                        <xsl:attribute name="onClick"><![CDATA[toggle("]]><xsl:value-of select="$contentID" /><![CDATA[")]]></xsl:attribute>
177                        <xsl:attribute name="id">img<xsl:value-of select="$contentID" /></xsl:attribute>
178                </xsl:element>
179                <!--</img>-->
180        </xsl:when>
181        <xsl:otherwise>
182                <!-- ...no? Then output the empty leaf icon -->
183                <!--<img src="leaf.png" class="hideshow" alt="leaf" />-->
184                <xsl:element name="img">
185                        <xsl:attribute name="src">
186                                <xsl:value-of select="$destination_dir"/>leaf.png</xsl:attribute>
187                        <xsl:attribute name="class">hideshow</xsl:attribute>
188                        <xsl:attribute name="alt">leaf</xsl:attribute>
189                </xsl:element>
190        </xsl:otherwise>
191        </xsl:choose>
192        <xsl:call-template name="output-icons" />
193        <!-- check if this node has an ID (for the document internal links) -->
194        <xsl:if test="@ID">
195                <!-- note: as FreeMind sometimes prepends the IDs with an
196                        underscore which is not valid as the first character
197                        in an HTML id, we surround the ID with FM<ID>FM -->
198                <a>
199                        <xsl:attribute name="id">FM<xsl:value-of select="@ID"/>FM</xsl:attribute>
200                </a>
201        </xsl:if>
202        <xsl:call-template name="output-node" />
203        <!-- if there are arrowlinks inside this node (i.e. this node is
204                connected to another node in FreeMind using an arrow), then
205                create a document internal link -->
206        <xsl:if test="child::arrowlink">
207                <xsl:call-template name="output-arrowlinks" />
208        </xsl:if>
209        <!-- Output the note and attributes -->
210        <xsl:if test="richcontent[@TYPE='NOTE'] or attribute">
211                <div class="note-and-attributes">
212                        <xsl:call-template name="output-note" />
213                        <xsl:call-template name="output-attributes" />
214                </div>
215        </xsl:if>
216        <!-- the content div. This div contains all subnodes of this node.
217                It carries the unique ID created in the beginning (which is
218                used to hide this div when necessary). The content node
219                is only created if there are any subnodes -->
220        <xsl:if test="node">
221                <div class="content">
222                        <xsl:attribute name="id"><xsl:value-of select="$contentID" /></xsl:attribute>
223                        <xsl:apply-templates select="node[@POSITION='left']"/>
224                        <xsl:apply-templates select="node[@POSITION='right']"/>
225                        <xsl:apply-templates select="node[not(@POSITION)]"/>
226                </div>
227        </xsl:if>
228</div>
229</xsl:template> <!-- xsl:template match="node" -->
230
231<!-- ### XHTML LIBRARY ### -->
232<!-- (this part could be extracted and 'import'ed from toxhtml.xsl and
233     freemindtohtml.xsl if there wouldn't be issues with the path -->
234
235<xsl:template match="font">
236        <xsl:if test="string-length(@SIZE) > 0">font-size:<xsl:value-of select="round((number(@SIZE) div 12)*100)" />%;</xsl:if><xsl:if test="@BOLD='true'">font-weight:bold;</xsl:if><xsl:if test="@ITALIC='true'">font-style:italic;</xsl:if>
237</xsl:template>
238
239<xsl:template name="output-node">
240        <xsl:element name="div">
241                <xsl:attribute name="class">nodecontent</xsl:attribute>
242                <xsl:if test="@COLOR or @BACKGROUND_COLOR or font">
243                        <xsl:attribute name="style">
244                                <xsl:if test="@COLOR">color:<xsl:value-of select="@COLOR" />;</xsl:if>
245                                <xsl:if test="@BACKGROUND_COLOR">background-color:<xsl:value-of select="@BACKGROUND_COLOR" />;</xsl:if>
246                                <xsl:apply-templates select="font" />
247                        </xsl:attribute>
248                </xsl:if>
249                <xsl:choose>
250                <xsl:when test="@LINK">
251                        <xsl:call-template name="output-node-with-link" />
252                </xsl:when>
253                <xsl:otherwise>
254                        <xsl:call-template name="output-nodecontent" />
255                </xsl:otherwise>
256                </xsl:choose>
257                <!-- Taken from 'toxhtml.xsl'!! -->
258                <xsl:if test='hook/@NAME="plugins/map/MapNodePositionHolder.properties"'>
259                        <xsl:element name="a">
260                                <xsl:attribute name="href"><!--
261                                -->http://www.openstreetmap.org/?lat=<!--
262                                --><xsl:value-of select="hook/Parameters/@XML_STORAGE_MAP_LAT"></xsl:value-of><!--
263                                -->&amp;lon=<!--
264                                --><xsl:value-of select="hook/Parameters/@XML_STORAGE_MAP_LON"></xsl:value-of><!--
265                                -->&amp;mlat=<!--
266                                --><xsl:value-of select="hook/Parameters/@XML_STORAGE_POS_LAT"></xsl:value-of><!--
267                                -->&amp;mlon=<!--
268                                --><xsl:value-of select="hook/Parameters/@XML_STORAGE_POS_LON"></xsl:value-of><!--
269                                -->&amp;zoom=<!--
270                                --><xsl:value-of select="hook/Parameters/@XML_STORAGE_ZOOM"></xsl:value-of><!--
271                                -->&amp;layers=<!--
272                                --><xsl:choose><!-- 
273                                --><xsl:when test="hook/Parameters/@XML_STORAGE_TILE_SOURCE='org.openstreetmap.gui.jmapviewer.tilesources.OsmTileSource$Mapnik'">M</xsl:when><!--
274                                --><xsl:when test="hook/Parameters/@XML_STORAGE_TILE_SOURCE='plugins.map.FreeMindMapController$TransportMap'">T</xsl:when><!--
275                                --><xsl:when test="hook/Parameters/@XML_STORAGE_TILE_SOURCE='org.openstreetmap.gui.jmapviewer.tilesources.OsmTileSource$CycleMap'">C</xsl:when><!--
276                                --><xsl:when test="hook/Parameters/@XML_STORAGE_TILE_SOURCE='plugins.map.FreeMindMapController$MapQuestOpenMap'">Q</xsl:when><!--
277                                --><xsl:otherwise>M</xsl:otherwise></xsl:choose></xsl:attribute>
278                                <xsl:element name="img">
279                                        <xsl:attribute name="src"><xsl:value-of select="$destination_dir"/>map_location.png</xsl:attribute>
280                                        <xsl:attribute name="alt">MAP</xsl:attribute>
281                                        <xsl:attribute name="style">border-width:0</xsl:attribute>
282                                </xsl:element>
283                        </xsl:element>
284                </xsl:if>
285        </xsl:element>
286</xsl:template> <!-- xsl:template name="output-node" -->
287
288<xsl:template name="output-node-with-link">
289        <xsl:choose>
290        <xsl:when test="not($show_link_url='true')">
291                <xsl:variable name="link">
292                        <xsl:choose>
293                        <!-- test for local hyperlinks. -->
294                        <xsl:when test="starts-with(@LINK, '#')">#FM<xsl:value-of select="substring(@LINK,2)" />FM</xsl:when>
295                        <xsl:otherwise><xsl:value-of select="@LINK" /></xsl:otherwise>
296                        </xsl:choose>
297                </xsl:variable>
298                <xsl:element name="a">
299                        <xsl:attribute name="href">
300                                <xsl:value-of select="$link" />
301                        </xsl:attribute>
302                        <xsl:call-template name="output-nodecontent" />
303                </xsl:element>
304                <xsl:if test="not($show_icons='false')">
305                        <xsl:text> </xsl:text>
306                        <xsl:element name="a">
307                                <xsl:attribute name="href">
308                                        <xsl:value-of select="$link"/>
309                                </xsl:attribute>
310                                <xsl:element name="img">
311                                        <xsl:attribute name="src"><xsl:value-of select="$destination_dir"/>ilink.png</xsl:attribute>
312                                        <xsl:attribute name="alt">User Link</xsl:attribute>
313                                        <xsl:attribute name="style">border-width:0</xsl:attribute>
314                                </xsl:element>
315                        </xsl:element>
316                </xsl:if>
317        </xsl:when>
318        <xsl:otherwise>
319                <xsl:call-template name="output-nodecontent" />
320        </xsl:otherwise>
321        </xsl:choose>
322        <xsl:if test="$show_link_url='true'">
323                - [ <a><xsl:attribute name="href"><xsl:value-of select="@LINK" /> 
324                </xsl:attribute><xsl:value-of select="@LINK"/></a> ]   
325        </xsl:if>
326</xsl:template> <!-- xsl:template name="output-node-with-link" -->
327
328<xsl:template name="output-nodecontent">
329                <xsl:choose>
330                <xsl:when test="richcontent[@TYPE='NODE']">
331                        <xsl:apply-templates select="richcontent[@TYPE='NODE']/html/body" mode="richcontent" />
332                </xsl:when>
333                <xsl:otherwise>
334                        <xsl:call-template name="textnode" />
335                </xsl:otherwise>
336                </xsl:choose>
337</xsl:template> <!-- xsl:template name="output-nodecontent" -->
338
339<xsl:template match="body" mode="richcontent">
340        <xsl:copy-of select="*|text()"/>
341</xsl:template> <!-- xsl:template name="htmlnode" -->
342
343<xsl:template name="textnode">
344        <xsl:call-template name="format_text">
345                <xsl:with-param name="nodetext">
346                        <xsl:value-of select="@TEXT" />
347                </xsl:with-param>
348        </xsl:call-template>
349</xsl:template> <!-- xsl:template name="textnode" -->
350
351<xsl:template name="output-title">
352        <!-- look if there is any node inside the map (there should never be
353                none, but who knows?) and take its text as the title -->
354        <xsl:choose>
355        <xsl:when test="/map/node/@TEXT">
356                <xsl:value-of select="/map/node/@TEXT" />
357        </xsl:when>
358        <xsl:when test="/map/node/richcontent[@TYPE='NODE']">
359                <xsl:apply-templates select="/map/node/richcontent[@TYPE='NODE']/html/body" mode="strip-tags" />
360        </xsl:when>
361        <xsl:otherwise>
362                <xsl:text>FreeMind2HTML Mindmap</xsl:text>
363        </xsl:otherwise>
364        </xsl:choose>
365</xsl:template>
366
367       
368        <xsl:template match="text()|@*"  mode="strip-tags">
369                  <xsl:value-of select="string(.)"/>
370        </xsl:template>
371
372       
373<!-- replace ASCII line breaks through HTML line breaks (br) -->
374<xsl:template name="format_text">
375        <xsl:param name="nodetext" />
376        <xsl:if test="string-length(substring-after($nodetext,'&#xa;')) = 0">
377                <xsl:value-of select="$nodetext" />
378        </xsl:if>
379        <xsl:if test="string-length(substring-after($nodetext,'&#xa;')) > 0">
380                <xsl:value-of select="substring-before($nodetext,'&#xa;')" />
381                <br />
382                <xsl:call-template name="format_text">
383                        <xsl:with-param name="nodetext">
384                                <xsl:value-of select="substring-after($nodetext,'&#xa;')" />
385                        </xsl:with-param>
386                </xsl:call-template>
387        </xsl:if>
388</xsl:template> <!-- xsl:template name="format_text" -->
389
390<xsl:template name="output-note">
391        <xsl:if test="richcontent[@TYPE='NOTE']">
392                <span class="note">
393                        <xsl:apply-templates select="richcontent[@TYPE='NOTE']/html/body" mode="richcontent" />
394                </span>
395        </xsl:if>
396</xsl:template> <!-- xsl:template name="output-note" -->
397
398<xsl:template name="output-attributes">
399        <xsl:if test="attribute">
400                <table class="attributes" summary="Attributes Names and Values">
401                        <caption>Attributes</caption>
402                        <tr><th>Name</th><th>Value</th></tr>
403                        <xsl:for-each select="attribute">
404                                <tr>
405                                <td><xsl:value-of select="@NAME" /></td>
406                                <td><xsl:value-of select="@VALUE" /></td>
407                                </tr>
408                        </xsl:for-each>
409                </table>
410        </xsl:if>
411</xsl:template> <!-- xsl:template name="output-attributes" -->
412
413<!-- function is defined in such a way that an undefined show_icons variable
414        leads to output of the icons (important for reuse) -->
415<xsl:template name="output-arrowlinks">
416        <xsl:if test="$show_icons='false'"> - [ </xsl:if>
417        <xsl:for-each select="arrowlink">
418                <xsl:text> </xsl:text>
419                <a>
420                        <xsl:attribute name="onclick">getVisibleParents('FM<xsl:value-of select="@DESTINATION" />FM')</xsl:attribute>
421                        <xsl:attribute name="href">#FM<xsl:value-of select="@DESTINATION" />FM</xsl:attribute>
422                        <xsl:choose>
423                        <xsl:when test="$show_icons='false'">
424                                <xsl:value-of
425                                        select="concat('&amp;','rArr',';')"
426                                        disable-output-escaping="yes" />
427                        </xsl:when>
428                        <xsl:otherwise>
429                                <xsl:element name="img">
430                                        <xsl:attribute name="src"><xsl:value-of select="$destination_dir"/>ilink.png</xsl:attribute>
431                                        <xsl:attribute name="class">ilink</xsl:attribute>
432                                        <xsl:attribute name="alt">Arrow Link</xsl:attribute>
433                                </xsl:element>
434                        </xsl:otherwise>
435                        </xsl:choose>
436                </a>
437        </xsl:for-each>
438        <xsl:if test="$show_icons='false'"> ] </xsl:if>
439</xsl:template> <!-- xsl:template name="output-arrowlinks" -->
440
441<xsl:template name="output-icons">
442        <xsl:if test="not($show_icons='false')">
443                <xsl:for-each select="icon">
444                        <xsl:element name="img">
445                                <xsl:attribute name="src">
446                                        <xsl:value-of select="$destination_dir"/>icons/<xsl:value-of select="@BUILTIN" />.png</xsl:attribute>
447                                <xsl:attribute name="alt">
448                                        <xsl:value-of select="@BUILTIN" />
449                                </xsl:attribute>
450                        </xsl:element>
451                        <xsl:text> </xsl:text>
452                </xsl:for-each>
453        </xsl:if>
454</xsl:template> <!-- xsl:template name="output-icons" -->
455
456</xsl:stylesheet>
Note: See TracBrowser for help on using the repository browser.