]> git.plutz.net Git - serve0/blob - html-sh.sed
8d7b61c076b93d3de8b59683e67d9b161ffc8075
[serve0] / html-sh.sed
1 #!/bin/sed -nEf
2
3 :Escapes
4 s,\\\\,\\,g; s,\\&,\&,g;
5 s,\\<,\&lt;,g; s,\\>,\&gt;,g;
6 s,\\",\&quot;,g; s,\\',\&apos;,g;
7 s,\\\[,\&#91;,g; s,\\\],\&#93;,g;
8 s,\\\.,\&#46;,g; s,\\#,\&#35;,g;
9 s,\\,,g;
10
11 :CommentHandle
12 x; /^<\/!-->/{
13   x; /--]/{
14     H; s;^(.*)--].*$;\1-->;p;
15     g; s;^.*--]([^\n]*)$;\1;
16     x; s;^</!-->\n(.*)\n[^\n]*$;\1;; x;
17     bCommentEnd
18   }
19   p; b;
20 }
21 x;
22 :CommentEnd
23
24 :shortcuts
25 s;\[hidden[ \t]+"([^"]*)"[ \t]+"([^"]*)";[input type="hidden" name="\1" value="\2";g;
26 s;\[checkbox[ \t]+"([^"]*)"[ \t]+"([^"]*)";[input type="checkbox" name="\1" value="\2";g;
27 s;\[radio[ \t]+"([^"]*)"[ \t]+"([^"]*)";[input type="radio" name="\1" value="\2";g;
28 s;\[submit[ \t]+"([^"]*)"[ \t]+"([^"]*)";[button type="submit" name="\1" value="\2";g;
29 s;\[a[ \t]+"([^"]*)";[a href="\1";g;
30 s;\[img[ \t]+"([^"]*)"[ \t]+"([^"]*)";[img src="\1" alt="\2";g;
31
32 s;\[!([^]\[]*)\];<!\1>;g;
33 s;\[!--([^]\[]*)--\];<!--\1-->;g;
34
35 :tags
36 s;\[([^]\[< \t]+)([^]\[]*)\];<\1>\2</\1>;g;
37 t tags;
38
39 G;
40 :tagclose
41 s;^([^]\n]*)\]([^\n]*)\n([^\n]+);\1\3\2;
42 t tagclose;
43 h; s;^([^\n]*)\n;;; x; s;\n.*$;;;
44
45 :tagopen
46 s;^([^\[\n]*)\[([^]\[< \t\n]+)([^\n]*);\1<\2>\3\n</\2>;
47 t tagopen;
48 G; h; s;^[^\n]*\n+;;; x; s;\n.*$;;;
49
50 :attribs
51 s;class="([^>]+)>[ \t]*\.([^< \t]+);class="\2 \1>;g; t attribs;
52 s;(<[^/][^>]*)>[ \t]*\.([^< \t]+);\1 class="\2">;g;
53 s;(<[^/][^>]*)>[ \t]*#([^< \t]+);\1 id="\2">;g;
54 s;(<[^/][^>]*)>[ \t]*([^ \t=<]+=("[^"]*"|'[^']*'|[^< \t]*));\1 \2>;g;
55 t attribs;
56 s;(<input ([^>]+ )?type=(radio|"radio"|'radio')( [^>]+)?)>[ \t]*(checked|selected);\1 checked="checked">;g;
57 s;(<input ([^>]+ )?type=(checkbox|"checkbox"|'checkbox')( [^>]+)?)>[ \t]*(checked|selected);\1 checked="checked">;g;
58 s;(<option( [^>]+)?)>[ \t]*(checked|selected);\1 selected="selected">;g;
59 s;(<select( [^>]+)?)>[ \t]*multiple;\1 multiple="multiple">;g;
60 t attribs;
61 s;(<[^/][^>]*>)[ \t]*\.[ \t];\1;g;
62
63 s;(<[^/][^>]*>)[ \t]*;\1;g;
64 # s;(<[^/][^>]*)>[ \t]*</[^>]+>;\1/>;g;
65 s;(<(br|hr|img|input|link|meta|area|base|col|command|embed|keygen|param|source|track|wbr)[^>]*)>[ \t]*</\1>;\1>;g;
66
67 s;<!-->;<!--;;
68
69 p; ${g; s;\n+;;g; p;}