1 // xml2yml2.ysl2 version 2.4.4 |
|
2 |
|
3 include yslt.yml2 |
|
4 |
|
5 decl textstylesheet is estylesheet(*output="text") { |
|
6 output *output; |
|
7 const "space", !"'" + " " * 200 + "'"!; |
|
8 param "autoindent", 4; |
|
9 content; |
|
10 }, tstylesheet is textstylesheet; |
|
11 |
|
12 define operator "†" as call "convert" with "tag", "name()"; |
|
13 |
|
14 tstylesheet { |
|
15 function "printNS" |
|
16 for "*/namespace::*[local-name()!='xml']" { |
|
17 > xmlns |
|
18 if "not(local-name()='')" |
|
19 > :«local-name()» |
|
20 > ="«.»" |
|
21 if "position()<last()" > , |
|
22 } |
|
23 |
|
24 template "/" { |
|
25 if "count(*/namespace::*)>1" { |
|
26 | decl «name(*)»(`call "printNS"`); |
|
27 | |
|
28 } |
|
29 apply "*", 0; |
|
30 } |
|
31 |
|
32 template "text()" { |
|
33 param "text", "normalize-space()"; |
|
34 |
|
35 if "string-length($text)>0" choose { |
|
36 when "contains($text,'\\n')" choose { |
|
37 when "string-length(substring-before($text,'\\n'))<string-length($text)-1" choose { |
|
38 when "substring($text,string-length($text),1)='\\n'" |
|
39 > \n||\n«$text»||\n\n |
|
40 otherwise > > «str:replace($text,'\\n','\\\\n')»\n |
|
41 } |
|
42 otherwise > | «$text»\n |
|
43 } |
|
44 otherwise > > `copy "."`\n |
|
45 } |
|
46 } |
|
47 |
|
48 template "*" { |
|
49 0> |
|
50 call "convert" with "tag", "name()"; |
|
51 apply "@*"; |
|
52 |
|
53 choose { |
|
54 when "count(*)=0 and string-length(normalize-space())=0" |
|
55 > ;\n |
|
56 when "count(*)=1 and string-length(normalize-space())=0" { |
|
57 > \n |
|
58 apply "*"; |
|
59 } |
|
60 when "count(*)=0 and string-length(normalize-space())>0" { |
|
61 > |
|
62 apply "text()"; |
|
63 } |
|
64 otherwise { |
|
65 > {\n |
|
66 for "*|text()" { |
|
67 if "local-name()=''" |
|
68 if "string-length(normalize-space())>0" |
|
69 1> |
|
70 apply "."; |
|
71 } |
|
72 | } |
|
73 } |
|
74 } |
|
75 } |
|
76 |
|
77 template "@*" { |
|
78 > «name()»="«.»" |
|
79 if "position()<last()" > , |
|
80 } |
|
81 |
|
82 function "convert" { |
|
83 param "tag"; |
|
84 |
|
85 > «translate($tag, '-', '_')» |
|
86 } |
|
87 } |
|