diff -r 000000000000 -r 76005e62091d xml2yml.ysl2 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xml2yml.ysl2 Mon Jul 11 23:15:28 2016 +0200 @@ -0,0 +1,87 @@ +// xml2yml2.ysl2 version 2.4.4 + +include yslt.yml2 + +decl textstylesheet is estylesheet(*output="text") { + output *output; + const "space", !"'" + " " * 200 + "'"!; + param "autoindent", 4; + content; +}, tstylesheet is textstylesheet; + +define operator "†" as call "convert" with "tag", "name()"; + +tstylesheet { + function "printNS" + for "*/namespace::*[local-name()!='xml']" { + > xmlns + if "not(local-name()='')" + > :«local-name()» + > ="«.»" + if "position() , + } + + template "/" { + if "count(*/namespace::*)>1" { + | decl «name(*)»(`call "printNS"`); + | + } + apply "*", 0; + } + + template "text()" { + param "text", "normalize-space()"; + + if "string-length($text)>0" choose { + when "contains($text,'\\n')" choose { + when "string-length(substring-before($text,'\\n')) \n||\n«$text»||\n\n + otherwise > > «str:replace($text,'\\n','\\\\n')»\n + } + otherwise > | «$text»\n + } + otherwise > > `copy "."`\n + } + } + + template "*" { + 0> + call "convert" with "tag", "name()"; + apply "@*"; + + choose { + when "count(*)=0 and string-length(normalize-space())=0" + > ;\n + when "count(*)=1 and string-length(normalize-space())=0" { + > \n + apply "*"; + } + when "count(*)=0 and string-length(normalize-space())>0" { + > + apply "text()"; + } + otherwise { + > {\n + for "*|text()" { + if "local-name()=''" + if "string-length(normalize-space())>0" + 1> + apply "."; + } + | } + } + } + } + + template "@*" { + > «name()»="«.»" + if "position() , + } + + function "convert" { + param "tag"; + + > «translate($tag, '-', '_')» + } +}