1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
|
<html>
<head><meta name="Generator" content="sedsed --htmlize">
<title>Colorized tex2xml.gnu.sed</title></head>
<body bgcolor="#000000" text="#ffffff"
link="#ff00ff" alink="#ff00ff" vlink="#ff00ff">
<pre>
<font color="#00ffff"><b>#!/bin/sed -f</b></font>
<font color="#00ffff"><b># Try of a nested tag{value} parser:</b></font>
<font color="#00ffff"><b># - handles multiline tags</b></font>
<font color="#00ffff"><b># - can deal with quoted \{ and \}</b></font>
<font color="#00ffff"><b># - handles nested tags</b></font>
<font color="#00ffff"><b># Limitations:</b></font>
<font color="#00ffff"><b># - tags are not allowed to have [{}<>| ] in the name.</b></font>
<font color="#00ffff"><b># - doesn't detect unbalanced brackets</b></font>
<font color="#00ffff"><b>#</b></font>
<font color="#00ffff"><b># b{foo} -> <b>foo</b></b></font>
<font color="#00ffff"><b># b{foo em{bar}} -> <b>foo <em>bar</em></b></b></font>
<font color="#00ffff"><b># Tue Nov 27 17:28:32 UTC 2001</b></font>
<font color="#00ffff"><b># \{1{2{3{4{5{6{7{8{9{a{b{c{d{e{f{g{h{i{\{text0\}}}}}}}}}}}}}}}}}}}text1\}</b></font>
<font color="#00ffff"><b># How it works</b></font>
<font color="#00ffff"><b># We build a stack of unclosed tags in holdspace</b></font>
<font color="#00ffff"><b># by appending always at the end (``H'').</b></font>
<font color="#00ffff"><b># when a closing bracket is found, fetch tag</b></font>
<font color="#00ffff"><b># from holdspace.</b></font>
<font color="#00ffff"><b># Main focus is small memory usage</b></font>
<font color="#00ffff"><b># escape Quoted and generate entities</b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>,</b></font><font color="#8080ff"><b>&</b></font><font color="#ff6060"><b>,</b></font><font color="#00ff00"><b>&</b></font>amp;<font color="#ff6060"><b>,</b></font><font color="#00ff00"><b>g</b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>,</b></font><font color="#8080ff"><b><</b></font><font color="#ff6060"><b>,</b></font><font color="#00ff00"><b>&</b></font>lt;<font color="#ff6060"><b>,</b></font><font color="#00ff00"><b>g</b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>,</b></font><font color="#8080ff"><b>></b></font><font color="#ff6060"><b>,</b></font><font color="#00ff00"><b>&</b></font>gt;<font color="#ff6060"><b>,</b></font><font color="#00ff00"><b>g</b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>,</b></font><font color="#8080ff"><b>\\{</b></font><font color="#ff6060"><b>,</b></font><font color="#00ff00"><b>&</b></font>obrace;<font color="#ff6060"><b>,</b></font><font color="#00ff00"><b>g</b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>,</b></font><font color="#8080ff"><b>\\}</b></font><font color="#ff6060"><b>,</b></font><font color="#00ff00"><b>&</b></font>cbrace;<font color="#ff6060"><b>,</b></font><font color="#00ff00"><b>g</b></font>
<font color="#00ffff"><b># uninteresting line, jump to end</b></font>
<font color="#ff6060"><b>/</b></font><font color="#8080ff"><b>[{}]</b></font><font color="#ff6060"><b>/</b></font> <font color="#ff6060"><b>!</b></font><font color="#ffff00"><b>b</b></font> <a href="#unescape">unescape</a>
<font color="#ff00ff"><b>:</b></font><font color="#ff00ff"><b><a name="open">open</a></b></font>
<font color="#ff6060"><b>/</b></font><font color="#8080ff"><b>{</b></font><font color="#ff6060"><b>/</b></font> <font color="#ff6060"><b>{</b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>,</b></font><font color="#8080ff"><b>\<font color="#ff00ff"><b>(</b></font> *\)\<font color="#ff00ff"><b>(</b></font>[^|<>}{ ]*\){</b></font><font color="#ff6060"><b>,</b></font><font color="#00ff00"><b>\1</b></font><font color="#00ff00"><b>\
</b></font><font color="#00ff00"><b>\2</b></font><font color="#00ff00"><b>\
</b></font><font color="#ff6060"><b>,</b></font>
<font color="#00ffff"><b># Isolate tag</b></font>
<font color="#00ffff"><b># Patternspace: text \n newtag \n text</b></font>
<font color="#ffff00"><b>H</b></font>;# append to holdspace
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>,</b></font><font color="#8080ff"><b>\n\<font color="#ff00ff"><b>(</b></font>[^\n]*\)\n</b></font><font color="#ff6060"><b>,</b></font><<font color="#00ff00"><b>\1</b></font>><font color="#ff6060"><b>,</b></font>;# generate XML tag
<font color="#00ffff"><b># Holdspace: ..\tagN \n text \n newtag \n text</b></font>
<font color="#00ffff"><b># We only want oldtags + newtag</b></font>
<font color="#ffff00"><b>x</b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>,</b></font><font color="#8080ff"><b>\<font color="#ff00ff"><b>(</b></font>.*\n\)[^\n]*\n\<font color="#ff00ff"><b>(</b></font>[^\n]*\)\n[^\n]*$</b></font><font color="#ff6060"><b>,</b></font><font color="#00ff00"><b>\1</b></font><font color="#00ff00"><b>\2</b></font><font color="#ff6060"><b>,</b></font>
<font color="#ffff00"><b>x</b></font>
<font color="#ff6060"><b>/</b></font><font color="#8080ff"><b>^[^{]*}</b></font><font color="#ff6060"><b>/</b></font> <font color="#ffff00"><b>b</b></font> <a href="#close">close</a>
<font color="#ff6060"><b>/</b></font><font color="#8080ff"><b>{</b></font><font color="#ff6060"><b>/</b></font> <font color="#ffff00"><b>b</b></font> <a href="#open">open</a>
<font color="#ff6060"><b>}</b></font>
<font color="#ff00ff"><b>:</b></font><font color="#ff00ff"><b><a name="close">close</a></b></font>
<font color="#ff6060"><b>/</b></font><font color="#8080ff"><b>}</b></font><font color="#ff6060"><b>/</b></font> <font color="#ff6060"><b>{</b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>,</b></font><font color="#8080ff"><b>}</b></font><font color="#ff6060"><b>,</b></font><font color="#00ff00"><b>\
</b></font><font color="#00ff00"><b>\
</b></font><font color="#00ff00"><b>\
</b></font><font color="#ff6060"><b>,</b></font>
<font color="#00ffff"><b># text1 \n\n\n text2 \n\n tag0 \n tag1 text2 may be empty</b></font>
<font color="#ffff00"><b>G</b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>,</b></font><font color="#8080ff"><b>\n\n\n\<font color="#ff00ff"><b>(</b></font>[^\n]*\)\n.*\n\<font color="#ff00ff"><b>(</b></font>[^\n]*\)$</b></font><font color="#ff6060"><b>,</b></font></<font color="#00ff00"><b>\2</b></font>><font color="#00ff00"><b>\1</b></font><font color="#ff6060"><b>,</b></font>
<font color="#ffff00"><b>x</b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>,</b></font><font color="#8080ff"><b>\n[^\n]*$</b></font><font color="#ff6060"><b>,</b></font><font color="#ff6060"><b>,</b></font>;# delete tag from holdspace
<font color="#ffff00"><b>x</b></font>
<font color="#ff6060"><b>/</b></font><font color="#8080ff"><b>^[^}]*{</b></font><font color="#ff6060"><b>/</b></font> <font color="#ffff00"><b>b</b></font> <a href="#open">open</a>;# if next bracket is an open one
<font color="#ff6060"><b>/</b></font><font color="#8080ff"><b>}</b></font><font color="#ff6060"><b>/</b></font> <font color="#ffff00"><b>b</b></font> <a href="#close">close</a>;# another one?
<font color="#ff6060"><b>}</b></font>
<font color="#ff00ff"><b>:</b></font><font color="#ff00ff"><b><a name="unescape">unescape</a></b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>,</b></font><font color="#8080ff"><b>&obrace;</b></font><font color="#ff6060"><b>,</b></font>{<font color="#ff6060"><b>,</b></font><font color="#00ff00"><b>g</b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>,</b></font><font color="#8080ff"><b>&cbrace;</b></font><font color="#ff6060"><b>,</b></font>}<font color="#ff6060"><b>,</b></font><font color="#00ff00"><b>g</b></font>
<font color="#00ffff"><b>### colorized by <a href="https://aurelio.net/projects/sedsed/">sedsed</a>, a debugger and code formatter for sed scripts</b></font>
</pre></body></html>
|