Beispiel #1
0
    def format_field(self, value, spec):
        if ':' not in spec:
            return super(RenderingFormatter, self).format_field(
                self.render(value),
                spec
            )

        ind, sep, fmt = spec.split(':')
        if sep == '\\n':
            sep = '\n'

        if not ind:
            ind = 0
            mult = 0
        elif '*' in ind:
            ind, mult = ind.split('*')
        else:
            mult = 4
        ind = int(ind)
        mult = int(mult)

        if not fmt:
            fmt = '%s'

        if isiter(value):
            return indent(sep.join(fmt % self.render(v) for v in value), ind, mult)
        else:
            return indent(fmt % self.render(value), ind, mult)
Beispiel #2
0
    def render_fields(self, fields):
        abstract_template = trim(self.abstract_rule_template)
        abstract_rules = [
            abstract_template.format(parsername=fields['name'], name=rule.name)
            for rule in self.node.rules
        ]
        abstract_rules = indent(''.join(abstract_rules), 2)

        rule_template = trim(self.rule_template)
        rules = [
            rule_template.format(parsername=fields['name'], name=rule.name)
            for rule in self.node.rules
        ]
        rules = indent(''.join(rules), 2)

        if self.node.statetype is None:
            statetype_arg = ", int"
        else:
            statetype_arg = ", " + self.node.statetype

        version = str(tuple(int(n) for n in str(timestamp()).split('.')))

        fields.update(abstract_rules=abstract_rules,
                      rules=rules,
                      version=version,
                      statetype_arg=statetype_arg)
Beispiel #3
0
    def format_field(self, value, spec):
        if ':' not in spec:
            return super(RenderingFormatter,
                         self).format_field(self.render(value), spec)

        ind, sep, fmt = spec.split(':')
        if sep == '\\n':
            sep = '\n'

        if not ind:
            ind = 0
            mult = 0
        elif '*' in ind:
            ind, mult = ind.split('*')
        else:
            mult = 4
        ind = int(ind)
        mult = int(mult)

        if not fmt:
            fmt = '%s'

        if isiter(value):
            return indent(sep.join(fmt % self.render(v) for v in value), ind,
                          mult)
        else:
            return indent(fmt % self.render(value), ind, mult)
Beispiel #4
0
    def render_fields(self, fields):
        abstract_template = trim(self.abstract_rule_template)
        abstract_rules = [
            abstract_template.format(parsername=fields['name'], name=rule.name)
            for rule in self.node.rules
        ]
        abstract_rules = indent('\n'.join(abstract_rules))

        abstract_py_template = trim(self.abstract_rule_py_template)
        abstract_rules_py = [
            abstract_py_template.format(parsername=fields['name'], name=rule.name)
            for rule in self.node.rules
        ]
        abstract_rules_py = indent('\n'.join(abstract_rules_py))

        rule_template = trim(self.rule_template)
        rules = [
            rule_template.format(parsername=fields['name'], name=rule.name)
            for rule in self.node.rules
        ]
        rules = '\n'.join(rules)

        if self.node.statetype is not None:
            statetype_arg = ", " + self.node.statetype
        else:
            statetype_arg = ""

        version = str(tuple(int(n) for n in str(timestamp()).split('.')))

        fields.update(rules=indent(rules),
                      abstract_rules=abstract_rules,
                      abstract_rules_py=abstract_rules_py,
                      version=version,
                      statetype_arg=statetype_arg
                      )
Beispiel #5
0
    def render_fields(self, fields):
        defs = [safe_name(d) for d, l in compress_seq(self.defines())]
        defs = list(sorted(set(defs)))

        kwargs = '\n'.join('%s=None, ' % d for d in defs)
        params = '\n'.join('%s=%s,' % (d, d) for d in defs)
        if params:
            params = '\n' + params + '\n**_kwargs_\n'
            params = indent(params, 3)
            params = params + '\n' + indent(')', 2)

            kwargs = '\n' + indent(
                kwargs + '\n**_kwargs_', indent=17, multiplier=1)
        else:
            kwargs = ' **_kwargs_'
            params = '**_kwargs_)'

        spec = _typespec(self.node)

        fields.update(
            class_name=spec.class_name,
            base=spec.base,
            _kwargs_=kwargs,
            params=params,
        )
Beispiel #6
0
    def render_fields(self, fields):
        abstract_template = trim(self.abstract_rule_template)
        abstract_rules = [
            abstract_template.format(name=safe_name(rule.name))
            for rule in self.node.rules
        ]
        abstract_rules = indent('\n'.join(abstract_rules))

        if self.node.whitespace is not None:
            whitespace = urepr(self.node.whitespace)
        elif self.node.directives.get('whitespace') is not None:
            whitespace = 're.compile({0}, RE_FLAGS | re.DOTALL)'.format(
                urepr(self.node.directives.get('whitespace')))
        else:
            whitespace = 'None'

        if self.node.nameguard is not None:
            nameguard = urepr(self.node.nameguard)
        elif self.node.directives.get('nameguard') is not None:
            nameguard = self.node.directives.get('nameguard')
        else:
            nameguard = 'None'

        comments_re = urepr(self.node.directives.get('comments'))
        eol_comments_re = urepr(self.node.directives.get('eol_comments'))
        ignorecase = self.node.directives.get('ignorecase', 'None')
        left_recursion = self.node.directives.get('left_recursion', False)
        parseinfo = self.node.directives.get('parseinfo', True)

        namechars = urepr(self.node.directives.get('namechars') or '')

        rules = '\n'.join(
            [self.get_renderer(rule).render() for rule in self.node.rules])

        version = str(tuple(int(n) for n in str(timestamp()).split('.')))

        keywords = '\n'.join("    %s," % urepr(k)
                             for k in sorted(self.keywords))
        if keywords:
            keywords = '\n%s\n' % keywords

        fields.update(
            rules=indent(rules),
            abstract_rules=abstract_rules,
            version=version,
            whitespace=whitespace,
            nameguard=nameguard,
            ignorecase=ignorecase,
            comments_re=comments_re,
            eol_comments_re=eol_comments_re,
            left_recursion=left_recursion,
            parseinfo=parseinfo,
            keywords=keywords,
            namechars=namechars,
        )
Beispiel #7
0
    def render_fields(self, fields):
        abstract_template = trim(self.abstract_rule_template)
        abstract_rules = [
            abstract_template.format(name=safe_name(rule.name))
            for rule in self.node.rules
        ]
        abstract_rules = indent('\n'.join(abstract_rules))

        if self.node.whitespace is not None:
            whitespace = urepr(self.node.whitespace)
        elif self.node.directives.get('whitespace') is not None:
            whitespace = 're.compile({0}, RE_FLAGS | re.DOTALL)'.format(urepr(self.node.directives.get('whitespace')))
        else:
            whitespace = 'None'

        if self.node.nameguard is not None:
            nameguard = urepr(self.node.nameguard)
        elif self.node.directives.get('nameguard') is not None:
            nameguard = self.node.directives.get('nameguard')
        else:
            nameguard = 'None'

        comments_re = urepr(self.node.directives.get('comments'))
        eol_comments_re = urepr(self.node.directives.get('eol_comments'))
        ignorecase = self.node.directives.get('ignorecase', 'None')
        left_recursion = self.node.directives.get('left_recursion', False)
        parseinfo = self.node.directives.get('parseinfo', True)

        namechars = urepr(self.node.directives.get('namechars') or '')

        rules = '\n'.join([
            self.get_renderer(rule).render() for rule in self.node.rules
        ])

        version = str(tuple(int(n) for n in str(timestamp()).split('.')))

        keywords = '\n'.join("    %s," % urepr(k) for k in sorted(self.keywords))
        if keywords:
            keywords = '\n%s\n' % keywords

        fields.update(rules=indent(rules),
                      abstract_rules=abstract_rules,
                      version=version,
                      whitespace=whitespace,
                      nameguard=nameguard,
                      ignorecase=ignorecase,
                      comments_re=comments_re,
                      eol_comments_re=eol_comments_re,
                      left_recursion=left_recursion,
                      parseinfo=parseinfo,
                      keywords=keywords,
                      namechars=namechars,
                      )
Beispiel #8
0
 def render_fields(self, fields):
     template = trim(self.option_template)
     options = [
         template.format(option=indent(self.rend(o)))
         for o in self.node.options
     ]
     options = '\n'.join(o for o in options)
     firstset = ' '.join(f[0] for f in sorted(self.node.firstset) if f)
     if firstset:
         error = 'expecting one of: ' + firstset
     else:
         error = 'no available options'
     fields.update(n=self.counter(),
                   options=indent(options),
                   error=urepr(error))
Beispiel #9
0
    def __str__(self):
        comments = self.comments_str()
        params = ', '.join(
            self.param_repr(p) for p in self.params
        ) if self.params else ''

        kwparams = ''
        if self.kwparams:
            kwparams = ', '.join(
                '%s=%s' % (k, self.param_repr(v)) for (k, v)
                in self.kwparams.items()
            )

        if params and kwparams:
            params = '(%s, %s)' % (params, kwparams)
        elif kwparams:
                params = '(%s)' % (kwparams)
        elif params:
            if len(self.params) == 1:
                params = '::%s' % params
            else:
                params = '(%s)' % params

        base = ' < %s' % ustr(self.base.name) if self.base else ''

        return trim(self.str_template).format(
            name=self.name,
            base=base,
            params=params,
            exp=indent(str(self.exp)),
            comments=comments
        )
Beispiel #10
0
 def render_fields(self, fields):
     template = trim(self.option_template)
     options = [
         template.format(
             option=indent(self.rend(o))) for o in self.node.options
     ]
     options = '\n'.join(o for o in options)
     firstset = ' '.join(f[0] for f in sorted(self.node.firstset) if f)
     if firstset:
         error = 'expecting one of: ' + firstset
     else:
         error = 'no available options'
     fields.update(n=self.counter(),
                   options=indent(options),
                   error=cpp_repr(error)
                   )
Beispiel #11
0
    def __str__(self):
        comments = self.comments_str()
        params = ', '.join(self.param_repr(p)
                           for p in self.params) if self.params else ''

        kwparams = ''
        if self.kwparams:
            kwparams = ', '.join('%s=%s' % (k, self.param_repr(v))
                                 for (k, v) in self.kwparams.items())

        if params and kwparams:
            params = '(%s, %s)' % (params, kwparams)
        elif kwparams:
            params = '(%s)' % (kwparams)
        elif params:
            if len(self.params) == 1:
                params = '::%s' % params
            else:
                params = '(%s)' % params

        base = ' < %s' % ustr(self.base.name) if self.base else ''

        return trim(self.str_template).format(
            name=self.name,
            base=base,
            params=params,
            exp=indent(str(self.exp)),
            comments=comments,
            is_name='@name\n' if self.is_name else '',
        )
Beispiel #12
0
    def render_fields(self, fields):
        defs = [safe_name(d) for d, l in compress_seq(self.defines())]

        kwargs = '\n'.join('%s=None, ' % d for d in defs)
        params = '\n'.join('%s=%s,' % (d, d) for d in defs)
        if params:
            params = '\n*args,\n' + params + '\n**kwargs\n'
            params = indent(params, 3)
            params = params + '\n' + indent(')', 2)

            kwargs = '\n' + indent(kwargs + '\n**kwargs', indent=17, multiplier=1)
        else:
            kwargs = '**kwargs'
            params = '*args, **kwargs)'

        fields.update(
            class_name=safe_name(self.params[0]),
            kwargs=kwargs,
            params=params,
        )
Beispiel #13
0
    def __str__(self):
        options = [ustr(o) for o in self.options]

        multi = any(len(o.splitlines()) > 1 for o in options)
        single = ' | '.join(o for o in options)

        if multi:
            return '\n|\n'.join(indent(o) for o in options)
        elif len(options) and len(single) > PEP8_LLEN:
            return '  ' + '\n| '.join(o for o in options)
        else:
            return single
Beispiel #14
0
    def __str__(self):
        options = [ustr(o) for o in self.options]

        multi = any(len(o.splitlines()) > 1 for o in options)
        single = ' | '.join(o for o in options)

        if multi:
            return '\n|\n'.join(indent(o) for o in options)
        elif len(options) and len(single) > PEP8_LLEN:
            return '  ' + '\n| '.join(o for o in options)
        else:
            return single
Beispiel #15
0
    def render_fields(self, fields):
        defs = [safe_name(d) for d, l in compress_seq(self.defines())]
        defs = list(sorted(set(defs)))

        kwargs = '\n'.join('%s=None, ' % d for d in defs)
        params = '\n'.join('%s=%s,' % (d, d) for d in defs)
        if params:
            params = '\n' + params + '\n**_kwargs_\n'
            params = indent(params, 3)
            params = params + '\n' + indent(')', 2)

            kwargs = '\n' + indent(kwargs + '\n**_kwargs_', indent=17, multiplier=1)
        else:
            kwargs = ' **_kwargs_'
            params = '**_kwargs_)'

        spec = _typespec(self.node)

        fields.update(
            class_name=spec.class_name,
            base=spec.base,
            _kwargs_=kwargs,
            params=params,
        )
Beispiel #16
0
    def render_fields(self, fields):
        self.reset_counter()

        params = kwparams = ''
        if self.node.params:
            params = ', '.join(
                self.param_repr(self.rend(p))
                for p in self.node.params
            )
        if self.node.kwparams:
            kwparams = ', '.join(
                '%s=%s'
                %
                (k, self.param_repr(self.rend(v)))
                for k, v in self.kwparams.items()
            )

        if params and kwparams:
            params = params + ', ' + kwparams
        elif kwparams:
            params = kwparams

        fields.update(params=params)

        defines = compress_seq(self.defines())
        sdefs = [safe_name(d) for d, l in defines if not l]
        ldefs = [safe_name(d) for d, l in defines if l]
        if not (sdefs or ldefs):
            sdefines = ''
        else:
            sdefs = '[%s]' % ', '.join(urepr(d) for d in sdefs)
            ldefs = '[%s]' % ', '.join(urepr(d) for d in ldefs)
            if not ldefs:
                sdefines = '\n\n    self.ast._define(%s, %s)' % (sdefs, ldefs)
            else:
                sdefines = indent('\n\n' + trim('''\
                                                self.ast._define(
                                                    %s,
                                                    %s
                                                )''' % (sdefs, ldefs)
                                                )
                                  )

        fields.update(defines=sdefines)
        fields.update(
            check_name='\n    self._check_name()' if self.is_name else '',
        )
Beispiel #17
0
    def render_fields(self, fields):
        self.reset_counter()

        params = kwparams = ''
        if self.node.params:
            params = ', '.join(
                self.param_repr(self.rend(p))
                for p in self.node.params
            )
        if self.node.kwparams:
            kwparams = ', '.join(
                '%s=%s'
                %
                (k, self.param_repr(self.rend(v)))
                for k, v in self.kwparams.items()
            )

        if params and kwparams:
            params = params + ', ' + kwparams
        elif kwparams:
            params = kwparams

        fields.update(params=params)

        defines = compress_seq(self.defines())
        ldefs = set(safe_name(d) for d, l in defines if l)
        sdefs = set(safe_name(d) for d, l in defines if not l and d not in ldefs)

        if not (sdefs or ldefs):
            sdefines = ''
        else:
            sdefs = '[%s]' % ', '.join(urepr(d) for d in sorted(sdefs))
            ldefs = '[%s]' % ', '.join(urepr(d) for d in sorted(ldefs))
            if not ldefs:
                sdefines = '\n\n    self.ast._define(%s, %s)' % (sdefs, ldefs)
            else:
                sdefines = indent(
                    '\n' +
                    trim(self.define_template % (sdefs, ldefs))
                )

        fields.update(defines=sdefines)
        fields.update(
            check_name='\n    self._check_name()' if self.is_name else '',
        )
Beispiel #18
0
    def render_fields(self, fields):
        self.reset_counter()

        params = kwparams = ''
        if self.node.params:
            params = ', '.join(
                self.param_repr(self.rend(p))
                for p in self.node.params
            )
        if self.node.kwparams:
            kwparams = ', '.join(
                '%s=%s'
                %
                (k, self.param_repr(self.rend(v)))
                for k, v in self.kwparams.items()
            )

        if params and kwparams:
            params = params + ', ' + kwparams
        elif kwparams:
            params = kwparams

        fields.update(params=params)

        defines = compress_seq(self.defines())
        sdefs = [safe_name(d) for d, l in defines if not l]
        ldefs = [safe_name(d) for d, l in defines if l]
        if not (sdefs or ldefs):
            sdefines = ''
        else:
            sdefs = '[%s]' % ', '.join(urepr(d) for d in sdefs)
            ldefs = '[%s]' % ', '.join(urepr(d) for d in ldefs)
            if not ldefs:
                sdefines = '\n\n    self.ast._define(%s, %s)' % (sdefs, ldefs)
            else:
                sdefines = indent('\n\n' + trim('''\
                                                self.ast._define(
                                                    %s,
                                                    %s
                                                )''' % (sdefs, ldefs)
                                                )
                                  )

        fields.update(defines=sdefines)
Beispiel #19
0
    def render_fields(self, fields):
        abstract_template = trim(self.abstract_rule_template)
        abstract_rules = [
            abstract_template.format(parsername=fields['name'],
                                     classname=fields['name'],
                                     name=rule.name)
            for rule in self.node.rules
        ]
        abstract_rules = '\n'.join(abstract_rules)

        if self.node.whitespace is not None:
            whitespace = "set_whitespace(" + cpp_repr(
                self.node.whitespace) + ");"
        else:
            whitespace = "// use default whitespace setting"

        if self.node.nameguard is not None:
            nameguard = 'true' if self.node.nameguard else 'false'
            nameguard = "set_nameguard(" + nameguard + ");"
        else:
            nameguard = "// use default nameguard setting"

        rules = '\n'.join([
            self.get_renderer(rule).render(classname=fields['name'])
            for rule in self.node.rules
        ])

        findruleitems = '\n'.join([
            '{ "%s", &%sParser::_%s_ },' %
            (rule.name, fields['name'], rule.name) for rule in self.node.rules
        ])

        version = str(tuple(int(n) for n in str(timestamp()).split('.')))

        fields.update(rules=rules,
                      findruleitems=indent(findruleitems),
                      abstract_rules=abstract_rules,
                      version=version,
                      whitespace=whitespace,
                      nameguard=nameguard)
Beispiel #20
0
    def render_fields(self, fields):
        abstract_template = trim(self.abstract_rule_template)
        abstract_rules = [
            abstract_template.format(parsername=fields['name'], classname=fields['name'], name=rule.name)
            for rule in self.node.rules
        ]
        abstract_rules = '\n'.join(abstract_rules)

        if self.node.whitespace is not None:
            whitespace = "set_whitespace(" + cpp_repr(self.node.whitespace) + ");"
        else:
            whitespace = "// use default whitespace setting"

        if self.node.nameguard is not None:
            nameguard = 'true' if self.node.nameguard else 'false'
            nameguard = "set_nameguard(" + nameguard + ");"
        else:
            nameguard = "// use default nameguard setting"

        rules = '\n'.join([
            self.get_renderer(rule).render(classname=fields['name']) for rule in self.node.rules
        ])

        findruleitems = '\n'.join([
            '{ "%s", &%sParser::_%s_ },' % (rule.name, fields['name'], rule.name)
            for rule in self.node.rules
        ])

        version = str(tuple(int(n) for n in str(timestamp()).split('.')))

        fields.update(rules=rules,
                      findruleitems=indent(findruleitems),
                      abstract_rules=abstract_rules,
                      version=version,
                      whitespace=whitespace,
                      nameguard=nameguard
                      )
Beispiel #21
0
 def __str__(self):
     exp = ustr(self.exp)
     if len(exp.splitlines()) > 1:
         return '(\n%s\n)' % indent(exp)
     else:
         return '(%s)' % trim(exp)
Beispiel #22
0
 def _to_str(self, lean=False):
     exp = self.exp._to_ustr(lean=lean)
     if len(exp.splitlines()) > 1:
         return '(\n%s\n)' % indent(exp)
     else:
         return '(%s)' % trim(exp)
Beispiel #23
0
 def __str__(self):
     sexp = ustr(self.exp)
     if len(sexp.splitlines()) <= 1:
         return '{%s}' % sexp
     else:
         return '{\n%s\n}' % indent(sexp)
Beispiel #24
0
 def indent(self, item, ind=1, multiplier=4):
     return indent(self.rend(item), indent=ind, multiplier=4)
Beispiel #25
0
 def _to_str(self, lean=False):
     sexp = ustr(self.exp._to_str(lean=lean))
     if len(sexp.splitlines()) <= 1:
         return '{%s}' % sexp
     else:
         return '{\n%s\n}' % indent(sexp)
Beispiel #26
0
 def _to_str(self, lean=False):
     exp = self.exp._to_ustr(lean=lean)
     if len(exp.splitlines()) > 1:
         return '(\n%s\n)' % indent(exp)
     else:
         return '(%s)' % trim(exp)
Beispiel #27
0
 def __str__(self):
     exp = ustr(self.exp)
     if len(exp.splitlines()) > 1:
         return '(\n%s\n)' % indent(exp)
     else:
         return '(%s)' % trim(exp)
Beispiel #28
0
 def __str__(self):
     sexp = ustr(self.exp)
     if len(sexp.splitlines()) <= 1:
         return '{%s}' % sexp
     else:
         return '{\n%s\n}' % indent(sexp)
Beispiel #29
0
 def indent(self, item, ind=1, multiplier=4):
     return indent(self.rend(item), indent=ind, multiplier=4)
Beispiel #30
0
 def _to_str(self, lean=False):
     sexp = ustr(self.exp._to_str(lean=lean))
     if len(sexp.splitlines()) <= 1:
         return '{%s}' % sexp
     else:
         return '{\n%s\n}' % indent(sexp)