def _typespec(rule, default_base=True): if not _get_node_class_name(rule): return _TypeSpec(None, None) spec = rule.params[0].split(BASE_CLASS_TOKEN) class_name = safe_name(spec[0]) base = None bases = spec[1:] if bases: base = safe_name(bases[0]) elif default_base: base = 'ModelBase' return _TypeSpec(class_name, base)
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, )
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 '', )
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 '', )
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)
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, )
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, )
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, )
def _find_semantic_rule(self, name): if self.semantics is None: return None, None postproc = getattr(self.semantics, '_postproc', None) if not callable(postproc): postproc = None rule = getattr(self.semantics, safe_name(name), None) if callable(rule): return rule, postproc rule = getattr(self.semantics, '_default', None) if callable(rule): return rule, postproc return None, postproc
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, )
def render_fields(self, fields): fields.update(n=self.counter(), name=safe_name(self.node.name) )