コード例 #1
0
def test():
    println('GO pyparse.parser.endless_sky')

    name = 'EndlessSkyParser with valid data'
    try:
        s = """# comment
root1 token1 "token 2" `token 3`
    child1.1 token 1.1
    child1.2

root2

# ignored
"""
        p = EndlessSkyParser(s)
        node = p.maybe(p.rule_DataNode)
        assert node is not None, node
        assert node.indent == '', node
        assert node.tokens == (
            'root1',
            'token1',
            '"token 2"',
            '`token 3`',
        ), node
        assert node.lines == slice(1, 5), node  # includes the comment
        assert len(node.children) == 2, node

        assert node.children[0].indent == '    ', node
        assert node.children[0].tokens == (
            'child1.1',
            'token',
            '1.1',
        ), node
        assert node.children[0].lines == slice(3, 4), node
        assert len(node.children[0].children) == 0, node

        assert node.children[1].indent == '    ', node
        assert node.children[1].tokens == ('child1.2', ), node
        assert node.children[1].lines == slice(4, 5), node
        assert len(node.children[1].children) == 0, node

        node = p.maybe(p.rule_DataNode)
        assert node is not None, node
        assert node.indent == '', node
        assert node.tokens == ('root2', ), node
        assert node.lines == slice(5, 7), node  # includes the empty line
        assert len(node.children) == 0, node

        node = p.maybe(p.rule_DataNode)
        assert node is None, node  # ignores the rest
        println('PASS', name)
    except:
        println('FAIL', name)
        raise  # print stacktrace

    # TODO test invalid data
    # TODO test s?

    println('OG pyparse.parser.endless_sky')
コード例 #2
0
ファイル: m3u.py プロジェクト: flaviojs/pyparse
def test():
    println('GO pyparse.parser.m3u')

    name = 'M3uParser m3u'
    try:
        s = """one_second.mkv
empty.mkv
"""
        p = M3uParser(s)
        m3u = p.rule_M3u()
        assert m3u.ext is None
        assert len(m3u.resources) == 2, m3u
        assert m3u.resources[0].address == 'one_second.mkv', m3u
        assert m3u.resources[0].ext is None, m3u
        assert m3u.resources[1].address == 'empty.mkv', m3u
        assert m3u.resources[1].ext is None, m3u
        println('PASS', name)
    except:
        println('FAIL', name)
        raise # print traceback

    name = 'M3uParser extm3u'
    try:
        s = """#EXTM3U

#EXTINF:1,One Second
one_second.mkv

#EXTINF:0,Empty
empty.mkv
"""
        p = M3uParser(s)
        m3u = p.rule_M3u()
        assert m3u.ext == '#EXTM3U', m3u
        assert len(m3u.resources) == 2, m3u
        assert m3u.resources[0].address == 'one_second.mkv', m3u
        assert m3u.resources[0].ext == '#EXTINF:1,One Second', m3u
        assert m3u.resources[1].address == 'empty.mkv', m3u
        assert m3u.resources[1].ext == '#EXTINF:0,Empty', m3u
        println('PASS', name)
    except:
        println('FAIL', name)
        raise # print traceback

    println('OG pyparse.parser.m3u')
コード例 #3
0
ファイル: m3u.py プロジェクト: flaviojs/pyparse
# -*- coding: utf8 -*-
# license: WTFPL version 2, or whatever is closest to "no license" and "public domain" (like Unlicense or CC0)


from __builtin__ import AssertionError
from __builtin__ import True
from __builtin__ import len
from pyparse.parser import ParserSkeleton
from pyparse.util import IndexToAttrMixin
from pyparse.util import println


try:
    assert False # assert must work
    println('the assert statement does not work, disable optimizations to fix this')
    exit(1)
except AssertionError:
    pass


class M3uParser(ParserSkeleton):
    r""" Playlist format of files that end with '.m3u'.

    Created by winamp?
    "It is an ah-hoc standard, with no formal definition, no canonical source, and no owner."

    Extended M3U
    ------------

    Before ID3 tags were supported, resource metadata was placed in the comments.
コード例 #4
0
def test():
    println('GO pyparse.parser.unicode')

    name = 'Utf8Parser codepoint 0'
    try:
        s = '0'  # zero (0)
        p = Utf8Parser(s)
        c = p.rule_Codepoint()
        assert c.codepoint == 0x30, c  # '0'
        assert c.s == ('0', ), c
        c = p.maybe(p.rule_Codepoint)
        assert c is None, c
        println('PASS', name)
    except:
        println('FAIL', name)
        raise  # print traceback

    name = 'Utf8Parser codepoint €'
    try:
        s = '\xE2\x82\xAC'  # euro (€)
        p = Utf8Parser(s)
        c = p.rule_Codepoint()
        assert c.codepoint == 0x20AC, c  # '€'
        assert c.s == (
            '\xE2',
            '\x82',
            '\xAC',
        ), c
        c = p.maybe(p.rule_Codepoint)
        assert c is None, c
        println('PASS', name)
    except:
        println('FAIL', name)
        raise  # print traceback

    println('OG pyparse.parser.unicode')
コード例 #5
0
ファイル: bnf.py プロジェクト: flaviojs/pyparse
def test():
    println('GO pyparse.parser.bnf')

    name = 'McKeemanFormParser'
    try:
        s = """
S
    '1'
    'a'
    S '+' S

test
    ""
    ' ' . '10FFFF' - '"' - '1234' . '56789'
    "characters" '0000'
"""
        syntax_tree = (
            'Grammar',
            '.rules',
            (
                (
                    'Rule',
                    '.name',
                    'S',
                    '.nothing',
                    False,
                    '.alternatives',
                    (
                        ((
                            'Codepoint',
                            '.value',
                            49,
                            '.str',
                            '1',
                        ), ),
                        ((
                            'Codepoint',
                            '.value',
                            97,
                            '.str',
                            'a',
                        ), ),
                        (
                            'S',
                            (
                                'Codepoint',
                                '.value',
                                43,
                                '.str',
                                '+',
                            ),
                            'S',
                        ),
                    ),
                ),
                (
                    'Rule',
                    '.name',
                    'test',
                    '.nothing',
                    True,
                    '.alternatives',
                    (((
                        'Range',
                        '.low',
                        (
                            'Codepoint',
                            '.value',
                            32,
                            '.str',
                            ' ',
                        ),
                        '.high',
                        (
                            'Codepoint',
                            '.value',
                            1114111,
                            '.hex',
                            '10FFFF',
                        ),
                        '.exclude',
                        (
                            (
                                'Codepoint',
                                '.value',
                                34,
                                '.str',
                                '"',
                            ),
                            (
                                'Range',
                                '.low',
                                (
                                    'Codepoint',
                                    '.value',
                                    4660,
                                    '.hex',
                                    '1234',
                                ),
                                '.high',
                                (
                                    'Codepoint',
                                    '.value',
                                    354185,
                                    '.hex',
                                    '56789',
                                ),
                            ),
                        ),
                    ), ), (
                        (
                            'Characters',
                            '.str',
                            'characters',
                        ),
                        (
                            'Codepoint',
                            '.value',
                            0,
                            '.hex',
                            '0000',
                        ),
                    )),
                ),
            ),
        )
        p = McKeemanFormParser(s)
        grammar = p.rule_Grammar()
        assert grammar == syntax_tree, (
            grammar,
            syntax_tree,
        )
        println('PASS', name)
    except:
        println('FAIL', name)
        raise  # print traceback

    println('OG pyparse.parser.bnf')
コード例 #6
0
ファイル: papers.py プロジェクト: flaviojs/pyparse
def test():
    println('GO pyparse.parser.papers')

    name = 'SsAnBnCnParser n=4'
    try:
        s = "aaaabbbbcccc"
        p = SsAnBnCnParser(s)
        ss = p.rule_Ss()
        assert ss.n == 4, ss
        println('PASS', name)
    except:
        println('FAIL', name)
        raise  # print traceback

    name = 'SsAnBnCnParser -a'
    try:
        s = "aaabbbbcccc"
        p = SsAnBnCnParser(s)
        ss = p.rule_Ss()
        println('FAIL', name, ss)
    except AssertionError:
        println('PASS', name)
    except:
        println('ERR', name)
        raise  # print traceback

    name = 'SsAnBnCnParser +a'
    try:
        s = "aaaaabbbbcccc"
        p = SsAnBnCnParser(s)
        ss = p.rule_Ss()
        println('FAIL', name, ss)
    except AssertionError:
        println('PASS', name)
    except:
        println('ERR', name)
        raise  # print traceback

    name = 'SsAnBnCnParser -b'
    try:
        s = "aaaabbbcccc"
        p = SsAnBnCnParser(s)
        ss = p.rule_Ss()
        println('FAIL', name, ss)
    except AssertionError:
        println('PASS', name)
    except:
        println('ERR', name)
        raise  # print traceback

    name = 'SsAnBnCnParser +b'
    try:
        s = "aaaabbbbbcccc"
        p = SsAnBnCnParser(s)
        ss = p.rule_Ss()
        println('FAIL', name, ss)
    except AssertionError:
        println('PASS', name)
    except:
        println('ERR', name)
        raise  # print traceback

    name = 'SsAnBnCnParser -c'
    try:
        s = "aaaabbbbccc"
        p = SsAnBnCnParser(s)
        ss = p.rule_Ss()
        println('FAIL', name, ss)
    except AssertionError:
        println('PASS', name)
    except:
        println('ERR', name)
        raise  # print traceback

    name = 'SsAnBnCnParser +c'
    try:
        s = "aaaabbbbccccc"
        p = SsAnBnCnParser(s)
        ss = p.rule_Ss()
        println('FAIL', name, ss)
    except AssertionError:
        println('PASS', name)
    except:
        println('ERR', name)
        raise  # print traceback

    println('OG pyparse.parser.papers')