Mercurial > hg > xslscript
annotate xsls.pl @ 3:0fa786e03744
XSLScript: some preliminary work on conversion.
The aproach seems to be wrong though, it looks like the only correct
way is to build a tree, and then process the tree. Major changes
expected.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Thu, 20 Feb 2014 19:16:42 +0400 |
parents | bcd96c403898 |
children | eb959dce273b |
rev | line source |
---|---|
1
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
1 #!/usr/bin/perl |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
2 |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
3 # (C) Maxim Dounin |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
4 |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
5 # Convert from XSLScript to XSLT. |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
6 # |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
7 # Originally XSLScript was written by Paul Tchistopolskii. It is believed |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
8 # to be mostly identical to XSLT, but uses shorter syntax. Original |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
9 # implementation has major Java dependency, no longer supported and hard |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
10 # to find. |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
11 # |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
12 # This code doesn't pretend to be a full replacement, but rather an attempt |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
13 # to provide functionality needed for nginx documentation. |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
14 |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
15 ############################################################################### |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
16 |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
17 use warnings; |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
18 use strict; |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
19 |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
20 use Parse::RecDescent; |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
21 use Getopt::Long; |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
22 use Data::Dumper qw/Dumper/; |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
23 |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
24 ############################################################################### |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
25 |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
26 GetOptions( |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
27 "trace!" => \$::RD_TRACE, |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
28 "hint!" => \$::RD_HINT, |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
29 ) |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
30 or die "oops\n"; |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
31 |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
32 ############################################################################### |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
33 |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
34 my $grammar = <<'EOF'; |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
35 |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
36 # XSLTScript grammar, reconstructed |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
37 |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
38 startrule : item(s) eofile |
3
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
39 { $return = $item[1]; 1 } |
2
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
40 |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
41 item : "<!--" <commit> comment |
3
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
42 | "!!" <commit> exclam_double |
2
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
43 | "!{" <commit> exclam_xpath |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
44 | "!" name <commit> exclam_name |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
45 | "<%" <commit> instruction "%>" |
3
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
46 { $return = $item{instruction}; 1 } |
2
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
47 | "<" name attrs ">" <commit> item(s?) "</" name ">" |
3
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
48 { $return = ::format_tag($item{name}, $item{attrs}, $item[6]); 1 } |
2
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
49 | "<" <commit> name attrs "/" ">" |
3
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
50 { $return = ::format_tag($item{name}, $item{attrs}); 1 } |
2
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
51 | "X:variable" <commit> xvariable |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
52 | "X:var" <commit> xvariable |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
53 | "X:template" <commit> xtemplate |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
54 | "X:if" <commit> xif |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
55 | "X:param" <commit> xparam |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
56 | "X:for-each" <commit> xforeach |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
57 | "X:sort" <commit> xsort |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
58 | "X:when" <commit> xwhen |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
59 | "X:attribute" <commit> xattribute |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
60 | "X:output" <commit> xoutput |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
61 | "X:copy-of" <commit> xcopyof |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
62 | instruction <commit> attrs body |
3
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
63 { $return = ::format_instruction( |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
64 $item{instruction}, $item{attrs}, $item{body}); |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
65 1 } |
2
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
66 | text |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
67 | <error> |
1
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
68 |
2
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
69 # list of simple instructions |
1
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
70 |
2
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
71 instruction : "X:stylesheet" |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
72 | "X:transform" |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
73 | "X:attribute-set" |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
74 | "X:element" |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
75 | "X:apply-templates" |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
76 | "X:choose" |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
77 | "X:otherwise" |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
78 | "X:value-of" |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
79 | "X:apply-imports" |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
80 | "X:number" |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
81 | "X:include" |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
82 | "X:import" |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
83 | "X:strip-space" |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
84 | "X:preserve-space" |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
85 | "X:copy" |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
86 | "X:text" |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
87 | "X:comment" |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
88 | "X:processing-instruction" |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
89 | "X:decimal-format" |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
90 | "X:namespace-alias" |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
91 | "X:key" |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
92 | "X:fallback" |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
93 | "X:message" |
1
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
94 |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
95 # comments, <!-- ... --> |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
96 # not sure if it's something to be interpreted specially |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
97 # likely an artifact of our dump process |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
98 |
2
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
99 comment : /((?!-->).)*/ms "-->" |
3
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
100 { $return = "<!-- " . $item[1] . "-->"; 1; } |
1
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
101 |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
102 # special chars: ', ", {, }, \ |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
103 # if used in text, they needs to be escaped with backslash |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
104 |
2
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
105 text : quoted | unreserved | "'" | "\"" | "{" |
1
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
106 quoted : "\\" special |
3
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
107 { $return = $item{special}; 1; } |
1
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
108 special : "'" | "\"" | "\\" | "{" | "}" |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
109 unreserved : /[^'"\\{}]/ |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
110 |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
111 # shortcuts: |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
112 # |
3
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
113 # !! for X:apply-templates |
1
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
114 # !{xpath-expression} for X:value-of select="xpath-expression"; |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
115 # !foo() for X:call-template name="foo" |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
116 |
2
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
117 # !root (path = { !{ substring($DIRNAME, 2) } }) |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
118 # !root (path = "substring-after($path, '/')") |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
119 |
3
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
120 exclam_double : value(?) params(?) attrs ";" |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
121 { $return = ::format_apply($item{value}, $item{params}, $item{attrs}); 1 } |
2
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
122 |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
123 exclam_xpath : xpath(s?) "}" |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
124 xpath : /[^}'"]+/ |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
125 | /"[^"]*"/ |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
126 | /'[^']*'/ |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
127 |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
128 exclam_name : params |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
129 |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
130 # instruction attributes |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
131 # name="value" |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
132 |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
133 attrs : attr(s?) |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
134 attr : name "=" value |
1
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
135 name : /[a-z0-9_:-]+/i |
2
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
136 value : /"[^"]*"/ |
1
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
137 |
2
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
138 # template parameters |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
139 # ( bar="init", baz={markup} ) |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
140 |
3
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
141 params : "(" param(s /,/) ")" |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
142 { $return = $item[2]; 1 } |
2
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
143 param : name "=" value |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
144 | name "=" <commit> "{" item(s) "}" |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
145 | name |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
146 |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
147 # instruction body |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
148 # ";" for empty body, "{ ... }" otherwise |
1
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
149 |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
150 body : ";" |
3
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
151 { $return = ""; } |
2
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
152 | "{" <commit> item(s?) "}" |
3
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
153 { $return = join("\n", @{$item[3]}); 1 } |
1
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
154 |
2
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
155 # special handling of some instructions |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
156 # X:if attribute is test= |
1
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
157 |
2
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
158 xif : value(?) attrs body "else" <commit> body |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
159 | value(?) attrs body |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
160 | <error> |
1
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
161 |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
162 # X:template name(params) = "match" { |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
163 # X:template name( bar="init", baz={markup} ) = "match" mode="some" { |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
164 |
3
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
165 xtemplate : name(?) params(?) ( "=" value )(?) |
2
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
166 attrs body |
1
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
167 |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
168 # X:var LINK = "/article/@link"; |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
169 # X:var year = { ... } |
2
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
170 # semicolon is optional |
1
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
171 |
2
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
172 xvariable : name "=" value(?) attrs body |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
173 | name "=" value(?) |
1
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
174 | <error> |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
175 |
2
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
176 # X:param XML = "'../xml'"; |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
177 # X:param YEAR; |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
178 |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
179 xparam : name ("=" value)(?) attrs body |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
180 |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
181 # X:for-each "section[@id and @name]" { ... } |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
182 # X:for-each "link", X:sort "@id" { |
1
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
183 |
2
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
184 xforeach : value attrs body |
3
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
185 { $return = ::format_instruction_value( |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
186 "X:for-each", "select", $item{value}, $item{attrs}, $item{body}); |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
187 1 } |
2
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
188 | value attrs "," "X:sort" <commit> value attrs body |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
189 |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
190 # X:sort select |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
191 # X:sort "@id" |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
192 |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
193 xsort : value attrs body |
3
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
194 { $return = ::format_instruction_value( |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
195 "X:sort", "select", $item{value}, $item{attrs}, $item{body}); |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
196 1 } |
2
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
197 |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
198 # X:when "position() = 1" { ... } |
1
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
199 |
2
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
200 xwhen : value attrs body |
3
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
201 { $return = ::format_instruction_value( |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
202 "X:when", "test", $item{value}, $item{attrs}, $item{body}); |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
203 1 } |
2
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
204 |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
205 # X:attribute "href" { ... } |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
206 |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
207 xattribute : value attrs body |
3
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
208 { $return = ::format_instruction_value( |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
209 "X:attribute", "name", $item{value}, $item{attrs}, $item{body}); |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
210 1 } |
2
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
211 |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
212 # X:output |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
213 # semicolon is optional |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
214 |
3
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
215 xoutput : attrs body(?) |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
216 { $return = ::format_instruction( |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
217 "X:output", $item{attrs}, $item{body}); |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
218 1 } |
2
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
219 |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
220 # "X:copy-of" |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
221 # semicolon is optional |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
222 |
3
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
223 xcopyof : value attrs body(?) |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
224 { $return = ::format_instruction_value( |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
225 "X:copy-of", "select", $item{value}, $item{attrs}, $item{body}); |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
226 1 } |
2
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
227 |
bcd96c403898
XSLScript: rewritten grammar, matches all xsls.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
228 # eof |
1
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
229 |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
230 eofile : /^\Z/ |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
231 |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
232 EOF |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
233 |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
234 ############################################################################### |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
235 |
3
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
236 # helper formatting functions, used by grammar |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
237 |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
238 sub format_instruction { |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
239 my ($instruction, $attrs, $body) = @_; |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
240 my $s = "<"; |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
241 |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
242 $instruction =~ s/^X:/xsl:/; |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
243 |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
244 $s .= join(" ", $instruction, @{$attrs}); |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
245 |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
246 if ($body) { |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
247 $s .= ">\n" . $body . "\n</" . $instruction . ">\n"; |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
248 } else { |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
249 $s .= "/>\n"; |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
250 } |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
251 |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
252 return $s; |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
253 } |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
254 |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
255 sub format_instruction_value { |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
256 my ($instruction, $name, $value, $attrs, $body) = @_; |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
257 my $s = "<"; |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
258 |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
259 if ($value) { |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
260 push(@{$attrs}, "$name=$value"); |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
261 } |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
262 |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
263 return format_instruction($instruction, $attrs, $body); |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
264 } |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
265 |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
266 sub format_tag { |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
267 my ($tag, $attrs, $body) = @_; |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
268 my $s = "\n<"; |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
269 |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
270 $s .= join(" ", $tag, @{$attrs}); |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
271 |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
272 $body = join("\n", @{$body}); |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
273 |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
274 if ($body) { |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
275 $s .= ">" . $body . "\n</" . $tag . ">\n"; |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
276 } else { |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
277 $s .= "/>\n"; |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
278 } |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
279 |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
280 return $s; |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
281 } |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
282 |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
283 sub format_apply { |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
284 my ($select, $params, $attrs) = @_; |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
285 my $s = "\n<"; |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
286 my $tag = "xsl:apply-templates"; |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
287 |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
288 if ($select) { |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
289 unshift "select=$select", @{$attrs}; |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
290 } |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
291 |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
292 $s .= join(" ", $tag, @{$attrs}); |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
293 |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
294 if ($params) { |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
295 $params = join("\n", @{$params}); |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
296 $s .= ">\n" . $params . "\n</" . $tag . ">\n"; |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
297 } else { |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
298 $s .= "/>\n"; |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
299 } |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
300 } |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
301 |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
302 ############################################################################### |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
303 |
1
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
304 my $parser = Parse::RecDescent->new($grammar) |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
305 or die "Failed to create parser.\n"; |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
306 |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
307 my $lines; |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
308 |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
309 { |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
310 local $/; |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
311 $lines = <>; |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
312 } |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
313 |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
314 my $tree = $parser->startrule($lines) |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
315 or die "Failed to parse $ARGV.\n"; |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
316 |
3
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
317 #print Dumper($tree); |
0fa786e03744
XSLScript: some preliminary work on conversion.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
318 #print join("\n", @{$tree}); |
1
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
319 |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
320 ############################################################################### |
f082f8c2ebb0
XSLScript: some preliminary grammar, incomplete.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
321 ############################################################################### |