claudio@52: // xml2yml2.ysl2 version 2.4.4 claudio@52: claudio@52: include yslt.yml2 claudio@52: claudio@52: decl textstylesheet is estylesheet(*output="text") { claudio@52: output *output; claudio@52: const "space", !"'" + " " * 200 + "'"!; claudio@52: param "autoindent", 4; claudio@52: content; claudio@52: }, tstylesheet is textstylesheet; claudio@52: claudio@52: define operator "†" as call "convert" with "tag", "name()"; claudio@52: claudio@52: tstylesheet { claudio@52: function "printNS" claudio@52: for "*/namespace::*[local-name()!='xml']" { claudio@52: > xmlns claudio@52: if "not(local-name()='')" claudio@52: > :«local-name()» claudio@52: > ="«.»" claudio@52: if "position() , claudio@52: } claudio@52: claudio@52: template "/" { claudio@52: if "count(*/namespace::*)>1" { claudio@52: | decl «name(*)»(`call "printNS"`); claudio@52: | claudio@52: } claudio@52: apply "*", 0; claudio@52: } claudio@52: claudio@52: template "text()" { claudio@52: param "text", "normalize-space()"; claudio@52: claudio@52: if "string-length($text)>0" choose { claudio@52: when "contains($text,'\\n')" choose { claudio@52: when "string-length(substring-before($text,'\\n')) \n||\n«$text»||\n\n claudio@52: otherwise > > «str:replace($text,'\\n','\\\\n')»\n claudio@52: } claudio@52: otherwise > | «$text»\n claudio@52: } claudio@52: otherwise > > `copy "."`\n claudio@52: } claudio@52: } claudio@52: claudio@52: template "*" { claudio@52: 0> claudio@52: call "convert" with "tag", "name()"; claudio@52: apply "@*"; claudio@52: claudio@52: choose { claudio@52: when "count(*)=0 and string-length(normalize-space())=0" claudio@52: > ;\n claudio@52: when "count(*)=1 and string-length(normalize-space())=0" { claudio@52: > \n claudio@52: apply "*"; claudio@52: } claudio@52: when "count(*)=0 and string-length(normalize-space())>0" { claudio@52: > claudio@52: apply "text()"; claudio@52: } claudio@52: otherwise { claudio@52: > {\n claudio@52: for "*|text()" { claudio@52: if "local-name()=''" claudio@52: if "string-length(normalize-space())>0" claudio@52: 1> claudio@52: apply "."; claudio@52: } claudio@52: | } claudio@52: } claudio@52: } claudio@52: } claudio@52: claudio@52: template "@*" { claudio@52: > «name()»="«.»" claudio@52: if "position() , claudio@52: } claudio@52: claudio@52: function "convert" { claudio@52: param "tag"; claudio@52: claudio@52: > «translate($tag, '-', '_')» claudio@52: } claudio@52: }