Mercurial > pub > ModelGenerator
comparison xslt/preprocess.xsl @ 2:035de8b7b18e
Temporary commit, refactoring, added readme
author | cin |
---|---|
date | Sun, 25 Feb 2018 17:12:33 +0300 |
parents | |
children | d240adc2ac70 |
comparison
equal
deleted
inserted
replaced
1:7f803979305f | 2:035de8b7b18e |
---|---|
1 <?xml version="1.0" encoding="utf-8"?> | |
2 <xsl:stylesheet version="1.0" | |
3 xmlns:xsl="http://www.w3.org/1999/XSL/Transform" | |
4 xmlns:m="http://implab.org/schemas/data-model.v1.xsd" | |
5 xmlns:exsl="http://exslt.org/common" | |
6 xmlns:t="http://implab.org/schemas/temp" | |
7 > | |
8 <!-- | |
9 This template provides 'module' variable which is the | |
10 result of processing imports from packages. | |
11 | |
12 Variable $module is a node set created from the result-tree | |
13 which is the result of applying templates in mode=preprocess | |
14 --> | |
15 <xsl:output method="xml" indent="yes" /> | |
16 <xsl:variable name="preprocessResult"> | |
17 <t:module> | |
18 <xsl:call-template name="preprocess" /> | |
19 </t:module> | |
20 </xsl:variable> | |
21 <xsl:variable name="module" select="exsl:node-set($preprocessResult)/t:module"/> | |
22 | |
23 <xsl:template name="preprocess"> | |
24 <xsl:param name="root" select="/" /> | |
25 <xsl:param name="pending" select="$root/m:package/m:import[@href]" /> | |
26 <xsl:param name="seen" select="/.." /> | |
27 <xsl:param name="file" select="''" /> | |
28 <xsl:param name="primary" select="true()" /> | |
29 | |
30 <xsl:if test="not($seen[generate-id() = generate-id($root)])"> | |
31 <xsl:apply-templates select="$root" mode="preprocess"> | |
32 <xsl:with-param name="primary" select="$primary" /> | |
33 <xsl:with-param name="file" select="$file" /> | |
34 </xsl:apply-templates> | |
35 <xsl:if test="$pending"> | |
36 <xsl:variable name="doc" select="document($pending[1]/@href)" /> | |
37 <xsl:call-template name="preprocess"> | |
38 <xsl:with-param name="root" select="$doc" /> | |
39 <xsl:with-param name="file" select="$pending[1]/@href" /> | |
40 <xsl:with-param name="pending" | |
41 select="$pending[position() > 1] | $doc/m:package/m:import[@href]" /> | |
42 <xsl:with-param name="seen" select="$root | $seen" /> | |
43 <xsl:with-param name="primary" select="false()" /> | |
44 </xsl:call-template> | |
45 </xsl:if> | |
46 </xsl:if> | |
47 </xsl:template> | |
48 | |
49 <xsl:template match="m:package" mode="preprocess"> | |
50 <xsl:param name="primary" /> | |
51 <xsl:param name="file" /> | |
52 <xsl:copy> | |
53 <xsl:copy-of select="@*" /> | |
54 <xsl:if test="$primary"> | |
55 <xsl:attribute name="primary"><xsl:value-of select="$primary" /></xsl:attribute> | |
56 </xsl:if> | |
57 <xsl:if test="$file"> | |
58 <xsl:attribute name="file"><xsl:value-of select="$file" /></xsl:attribute> | |
59 </xsl:if> | |
60 <xsl:apply-templates mode="preprocess"> | |
61 <xsl:with-param name="primary" select="$primary" /> | |
62 <xsl:with-param name="file" select="$file" /> | |
63 </xsl:apply-templates> | |
64 </xsl:copy> | |
65 </xsl:template> | |
66 | |
67 <xsl:template match="*|/" mode="preprocess"> | |
68 <xsl:param name="primary" /> | |
69 <xsl:param name="file" /> | |
70 <xsl:copy> | |
71 <xsl:copy-of select="@*" /> | |
72 <xsl:apply-templates mode="preprocess"> | |
73 <xsl:with-param name="primary" select="$primary" /> | |
74 <xsl:with-param name="file" select="$file" /> | |
75 </xsl:apply-templates> | |
76 </xsl:copy> | |
77 </xsl:template> | |
78 </xsl:stylesheet> |