// 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, '-', '_')» } }