<div dir="ltr"><br><br><div class="gmail_quote">On Sat, Jul 26, 2008 at 00:03, Anders Dahnielson <span dir="ltr"><<a href="mailto:anders@dahnielson.com">anders@dahnielson.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div dir="ltr"><br><br><div class="gmail_quote"><div class="Ih2E3d">On Wed, Jul 23, 2008 at 18:13, Anders Dahnielson <span dir="ltr"><<a href="mailto:anders@dahnielson.com" target="_blank">anders@dahnielson.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div dir="ltr"><div class="gmail_quote"><div><br>Here's a simple tokenizer for SFZ I wrote once upon a time in Python. Not sure if I got it completely right.<br></div></div></div></blockquote></div><div><br>Nope. E.g. it matches lokey= twice (once as lokey= with a value and as key= without a value). *Blushes*. LOL.<br>

<br></div></div></div>
</blockquote></div><br>Ok, this is now an old thread. But to not appear as a complete fool I will post some code that actually works. ;-)<br><br>[BEGIN PYTHON]<br><br>import sys<br><br>def parse(f):<br>    token_stack = []<br>
    string_stack = []<br>    for line in f:<br>        # COMMENT<br>        if line.startswith('//'):<br>            continue<br>        # DEFINITION<br>        for token in line.split():<br>            if token.startswith('<') and token.endswith('>'):<br>
                # HEAD<br>                if string_stack:<br>                    token_stack.append(" ".join(string_stack))<br>                    string_stack[:] = []<br>                string_stack.append(token)<br>
            elif token.find('=') != -1:<br>                # HEAD<br>                if string_stack:<br>                    token_stack.append(" ".join(string_stack))<br>                    string_stack[:] = []<br>
                string_stack.append(token)<br>            else:<br>                # TAIL<br>                string_stack.append(token)<br>        # EOL<br>        if string_stack:<br>            token_stack.append(" ".join(string_stack))<br>
            string_stack[:] = []<br>    return token_stack<br><br>if __name__ == '__main__':<br>    sfzf = open(sys.argv[1], 'r')<br>    print parse(sfzf)<br>    sfzf.close()<br><br>[END PYTHON]<br clear="all">
<br>-- <br>Anders Dahnielson<br><<a href="mailto:anders@dahnielson.com">anders@dahnielson.com</a>><br>
</div>