File: tex2xml.gnu.sed.html

package info (click to toggle)
sedsed 2.0.0-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 4,008 kB
  • sloc: sed: 37,239; ansic: 2,395; python: 815; sh: 624; makefile: 95
file content (86 lines) | stat: -rw-r--r-- 8,104 bytes parent folder | download | duplicates (2)
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 [{}&lt;&gt;| ] 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} -&gt; &lt;b&gt;foo&lt;/b&gt;</b></font>
<font color="#00ffff"><b># b{foo em{bar}} -&gt; &lt;b&gt;foo &lt;em&gt;bar&lt;/em&gt;&lt;/b&gt;</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>&amp;</b></font><font color="#ff6060"><b>,</b></font><font color="#00ff00"><b>&amp;</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>&lt;</b></font><font color="#ff6060"><b>,</b></font><font color="#00ff00"><b>&amp;</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>&gt;</b></font><font color="#ff6060"><b>,</b></font><font color="#00ff00"><b>&amp;</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>&amp;</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>&amp;</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>[^|&lt;&gt;}{ ]*\){</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>&lt;<font color="#00ff00"><b>\1</b></font>&gt;<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>&lt;/<font color="#00ff00"><b>\2</b></font>&gt;<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>&amp;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>&amp;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>