Esempio n. 1
0
    def genCode(self, indent, codeout, tagreg, tag):
        DTCompilerUtil.tagDebug(indent, codeout, tag)
        oargs = args = DTUtil.tagCall(tag, ['module', ('items', 'None'),
                                            ('as', 'None')])
        args = DTCompilerUtil.pyifyArgs(tag, args)
        module = DTCompilerUtil.checkName(tag, 'module', args['module'],
                                          oargs['module'])

        if oargs['as'] != None:
            asname = DTCompilerUtil.checkName(tag, 'as', args['as'],
                                              oargs['as'])
            asStr = " as %s" % asname
        else:
            asStr = ''
            
        if oargs['items'] != None:
            items = DTCompilerUtil.checkName('import', 'items', args['items'],
                                             oargs['items'])
            # allow items to be separated by commas or spaces
            if ',' in items:
                formattedItems=','.join(_splitter.split(items))
            else:
                formattedItems=','.join(items.split())
            codeout.write(indent,
                          'from %s import %s%s' % (module,
                                                   formattedItems,
                                                   asStr))
        else:
            codeout.write(indent, 'import %s%s' % (module, asStr))
Esempio n. 2
0
    def genCode(self, indent, codeout, tagreg, tag):
        DTCompilerUtil.tagDebug(indent, codeout, tag)
        oargs = args = DTUtil.tagCall(
            tag, ['module', ('items', 'None'), ('as', 'None')])
        args = DTCompilerUtil.pyifyArgs(tag, args)
        module = DTCompilerUtil.checkName(tag, 'module', args['module'],
                                          oargs['module'])

        if oargs['as'] != None:
            asname = DTCompilerUtil.checkName(tag, 'as', args['as'],
                                              oargs['as'])
            asStr = " as %s" % asname
        else:
            asStr = ''

        if oargs['items'] != None:
            items = DTCompilerUtil.checkName('import', 'items', args['items'],
                                             oargs['items'])
            # allow items to be separated by commas or spaces
            if ',' in items:
                formattedItems = ','.join(_splitter.split(items))
            else:
                formattedItems = ','.join(items.split())
            codeout.write(
                indent,
                'from %s import %s%s' % (module, formattedItems, asStr))
        else:
            codeout.write(indent, 'import %s%s' % (module, asStr))
Esempio n. 3
0
 def genCode(self, indent, codeout, tagreg, tag):
     DTCompilerUtil.tagDebug(indent, codeout, tag)
     pargs = args = DTUtil.tagCall(tag, ['name', 'value'])
     args = DTCompilerUtil.pyifyArgs(tag, args)
     name = DTCompilerUtil.checkName(tag, 'name', args['name'],
                                     pargs['name'])
     codeout.write(indent, '%s = (%s)' % (name, args['value']))
Esempio n. 4
0
    def genCode(self, indent, codeout, tagreg, node, meta):
        tag = node.children[0]
        DTCompilerUtil.tagDebug(indent, codeout, tag)
        tagargs = ['name']
        if self._attend_to_comments:
            tagargs.append(('comments', None))
        pargs = args = DTUtil.tagCall(tag, tagargs)
        args = DTCompilerUtil.pyifyArgs(tag, args)
        if self._attend_to_comments and args['comments'] is not None:
            self._testCommentLevel(indent, codeout, args['comments'])
            stuff = self._pushCommentLevel(indent, codeout, args['comments'])

        name = DTCompilerUtil.checkName(tag, 'name', args['name'],
                                        pargs['name'])

        oldout = DTCompilerUtil.getTempName()
        codeout.write(indent, '%s = __h.OUTPUT' % oldout)
        codeout.write(indent, '__h.OUTPUT=__h.NEWOUTPUT()')
        for i in node.children[1:-1]:
            DTCompilerUtil.genCodeChild(indent, codeout, tagreg, i, meta)
        codeout.write(indent, '%s = __h.OUTPUT.getvalue()' % name)
        codeout.write(indent, '__h.OUTPUT = %s' % oldout)
        codeout.write(indent, 'del %s' % oldout)
        if self._attend_to_comments and args['comments'] is not None:
            self._popCommentLevel(indent, codeout, *stuff)
Esempio n. 5
0
    def genCode(self, indent, codeout, tagreg, node, meta):
        tag = node.children[0]
        DTCompilerUtil.tagDebug(indent, codeout, tag)
        pargs = args = DTUtil.tagCall(tag,
                                      ['expr', ('name', '"sequence_item"')])
        args = DTCompilerUtil.pyifyArgs(tag, args)

        name = DTCompilerUtil.checkName(tag, 'name', args['name'],
                                        pargs['name'])
        exprval = DTCompilerUtil.getTempName()

        codeout.write(indent, '%s = %s' % (exprval, args['expr']))
        codeout.write(indent, 'if %s:' % exprval)
        codeout.write(indent + 4, 'for %s in %s:' % (name, exprval))
        #do main loop shit
        for i in node.children[1:-1]:
            if (type(i) == InstanceType and i.__class__ == DTLexer.DTToken
                    and i.tagname == 'else'):
                break
            else:
                DTCompilerUtil.genCodeChild(indent + 8, codeout, tagreg, i,
                                            meta)
        codeout.write(indent, 'else:')
        codeout.write(indent + 4, 'pass')
        #do else clause
        on = 0
        for i in node.children[1:-1]:
            if (type(i) == InstanceType and i.__class__ == DTLexer.DTToken
                    and i.tagname == 'else'):
                on = 1
            elif on:
                DTCompilerUtil.genCodeChild(indent + 4, codeout, tagreg, i,
                                            meta)
        codeout.write(indent, 'del %s' % exprval)
Esempio n. 6
0
 def genCode(self, indent, codeout, tagreg, tag):
     DTCompilerUtil.tagDebug(indent, codeout, tag)
     pargs=args=DTUtil.tagCall(tag, ['name', 'value'])
     args=DTCompilerUtil.pyifyArgs(tag, args)
     name = DTCompilerUtil.checkName(tag, 'name', args['name'],
                                     pargs['name'])
     codeout.write(indent, '%s = (%s)' % (name, args['value']))
Esempio n. 7
0
    def genCode(self, indent, codeout, tagreg, node, meta):
        tag=node.children[0]
        DTCompilerUtil.tagDebug(indent, codeout, tag)
        pargs=args=DTUtil.tagCall(tag, ['expr', ('name','"sequence_item"')])
        args=DTCompilerUtil.pyifyArgs(tag, args)

        name = DTCompilerUtil.checkName(tag, 'name', args['name'],
                                        pargs['name'])
        exprval=DTCompilerUtil.getTempName()

        codeout.write(indent, '%s = %s' % (exprval, args['expr']))
        codeout.write(indent, 'if %s:' % exprval)
        codeout.write(indent+4, 'for %s in %s:' % (name, exprval))
        #do main loop shit
        for i in node.children[1:-1]:
            if (type(i) == InstanceType
                and i.__class__ == DTLexer.DTToken
                and i.tagname == 'else'):
                break
            else:
                DTCompilerUtil.genCodeChild(indent+8, codeout, tagreg, i, meta)
        codeout.write(indent, 'else:')
        codeout.write(indent+4, 'pass')
        #do else clause
        on=0
        for i in node.children[1:-1]:
            if (type(i) == InstanceType
                and i.__class__ == DTLexer.DTToken
                and i.tagname == 'else'):
                on=1
            elif on:
                DTCompilerUtil.genCodeChild(indent+4, codeout, tagreg, i, meta)
        codeout.write(indent, 'del %s' % exprval)
Esempio n. 8
0
    def genCode ( self, indent, codeout, tagreg, node, meta):
        tag = node.children[0]
        DTCompilerUtil.tagDebug(indent, codeout, tag)
        tagargs=['name']
        if self._attend_to_comments:
            tagargs.append(('comments', None))
        pargs = args = DTUtil.tagCall(tag, tagargs)
        args = DTCompilerUtil.pyifyArgs(tag, args)
        if self._attend_to_comments and args['comments'] is not None:
            self._testCommentLevel(indent, codeout, args['comments'])
            stuff=self._pushCommentLevel(indent, codeout, args['comments'])

        name = DTCompilerUtil.checkName(tag, 'name', args['name'],
                                        pargs['name'])
        
        oldout = DTCompilerUtil.getTempName()
        codeout.write(indent, '%s = __h.OUTPUT' % oldout)
        codeout.write(indent, '__h.OUTPUT=__h.NEWOUTPUT()')
        for i in node.children[1:-1]:
            DTCompilerUtil.genCodeChild(indent, codeout, tagreg, i, meta)
        codeout.write(indent, '%s = __h.OUTPUT.getvalue()' % name)
        codeout.write(indent, '__h.OUTPUT = %s' % oldout)
        codeout.write(indent, 'del %s' % oldout)
        if self._attend_to_comments and args['comments'] is not None:
            self._popCommentLevel(indent, codeout, *stuff)
Esempio n. 9
0
    def genCode(self, indent, codeout, tagreg, tag):
        DTCompilerUtil.tagDebug(indent, codeout, tag)
        pargs = args = DTUtil.tagCall(tag, [('expr', 'None')])
        args = DTCompilerUtil.pyifyArgs(tag, args)

        try:
            DTCompilerUtil.checkName(tag, 'expr', args['expr'], pargs['expr'])
        except:
            pass
        else:
            raise DTExcept.DTCompileError(tag, 'cannot call a string')

        stmt = args['expr'] + '\n'

        try:
            compile(stmt, stmt, 'exec')
        except SyntaxError:
            raise DTExcept.DTCompileError(
                tag, 'syntax error in statement "%s"' % stmt)

        codeout.writemultiline(indent, stmt)
Esempio n. 10
0
    def genCode(self, indent, codeout, tagreg, tag):
        DTCompilerUtil.tagDebug ( indent, codeout, tag )
        pargs = args = DTUtil.tagCall(tag, [('expr', 'None')])
        args = DTCompilerUtil.pyifyArgs(tag, args)

        try:
            DTCompilerUtil.checkName(tag, 'expr', args['expr'], pargs['expr'])
        except:
            pass
        else:
            raise DTExcept.DTCompileError( tag, 'cannot call a string')

        stmt = args['expr'] + '\n'

        try:
            compile(stmt, stmt, 'exec')
        except SyntaxError:
            raise DTExcept.DTCompileError ( tag, 
                                  'syntax error in statement "%s"' % stmt )

        codeout.writemultiline(indent, stmt)
Esempio n. 11
0
 def genCode(self, indent, codeout, tagreg, tag):
     DTCompilerUtil.tagDebug(indent, codeout, tag)
     pargs = args = DTUtil.tagCall(tag, ['name', ('value', '""')])
     args = DTCompilerUtil.pyifyArgs(tag, args)
     name = DTCompilerUtil.checkName(tag, 'name', args['name'],
                                     pargs['name'])
     codeout.write(indent, 'try:')
     codeout.write(indent + 4, '%s' % name)
     codeout.write(indent, 'except (NameError, AttributeError):')
     codeout.write(indent + 4, '%s = %s' % (name, args['value']))
     codeout.write(indent, 'else:')
     codeout.write(indent + 4, 'if %s is None:' % name)
     codeout.write(indent + 8, '%s = %s' % (name, args['value']))
Esempio n. 12
0
 def genCode(self, indent, codeout, tagreg, tag):
     DTCompilerUtil.tagDebug(indent, codeout, tag)
     pargs=args=DTUtil.tagCall(tag, ['name', ('value', '""')])
     args=DTCompilerUtil.pyifyArgs(tag, args)
     name = DTCompilerUtil.checkName(tag, 'name', args['name'],
                                     pargs['name'])
     codeout.write(indent, 'try:')
     codeout.write(indent+4, '%s' % name)
     codeout.write(indent, 'except (NameError, AttributeError):')
     codeout.write(indent+4, '%s = %s' % (name, args['value']))
     codeout.write(indent, 'else:')
     codeout.write(indent+4, 'if %s is None:' % name)
     codeout.write(indent+8, '%s = %s' % (name, args['value']))
Esempio n. 13
0
    def genCode(self, indent, codeout, tagreg, tag):
        DTCompilerUtil.tagDebug(indent, codeout, tag)
        oargs = args = DTUtil.tagCall(
            tag, ['module', ('items', 'None'), ('as', 'None')])
        args = DTCompilerUtil.pyifyArgs(tag, args)
        module = DTCompilerUtil.checkName(tag, 'module', args['module'],
                                          oargs['module'])

        if oargs['as'] != None:
            asname = DTCompilerUtil.checkName(tag, 'as', args['as'],
                                              oargs['as'])
            asStr = " as %s" % asname
        else:
            asStr = ''

        if oargs['items'] != None:
            items = DTCompilerUtil.checkName('import', 'items', args['items'],
                                             oargs['items'])
            codeout.write(
                indent, 'from %s import %s%s' %
                (module, string.join(string.split(items), ','), asStr))
        else:
            codeout.write(indent, 'import %s%s' % (module, asStr))
Esempio n. 14
0
    def genCode(self, indent, codeout, tagreg, node):
        tag = node.children[0]
        DTCompilerUtil.tagDebug(indent, codeout, tag)
        pargs = args = DTUtil.tagCall(tag, ['name'])
        args = DTCompilerUtil.pyifyArgs(tag, args)
        name = DTCompilerUtil.checkName(tag, 'name', args['name'],
                                        pargs['name'])

        oldout = DTCompilerUtil.getTempName()
        codeout.write(indent, '%s = __h.OUTPUT' % oldout)
        codeout.write(indent, '__h.OUTPUT=__h.NEWOUTPUT()')
        for i in node.children[1:-1]:
            DTCompilerUtil.genCodeChild(indent, codeout, tagreg, i)
        codeout.write(indent, '%s = __h.OUTPUT.getvalue()' % name)
        codeout.write(indent, '__h.OUTPUT = %s' % oldout)
        codeout.write(indent, 'del %s' % oldout)
Esempio n. 15
0
    def genCode(self, indent, codeout, tagreg, tag):
        DTCompilerUtil.tagDebug(indent, codeout, tag)
        pargs = args = DTUtil.tagCall(tag, ['var'], 'plainArgs', 'kwArgs')
        kwargs = DTCompilerUtil.pyifyArgs(tag, args['kwArgs'])
        args = DTCompilerUtil.pyifyArgs(tag, args)

        varname = DTCompilerUtil.checkName(tag, 'var', args['var'],
                                           pargs['var'])
        # First, generate the plain args
        out = []
        for _j in args['plainArgs']:
            out.append('"%s": %s' % (_j, _j))

        codeout.write(indent,
                      '%s = { %s }' % (varname, string.join(out, ', ')))

        # Now, add the keyword arguments
        codeout.write(indent, '%s.update(%s)' % (varname, str(args['kwArgs'])))
Esempio n. 16
0
    def genCode(self, indent, codeout, tagreg, tag):
        DTCompilerUtil.tagDebug(indent, codeout, tag)
        pargs = args = DTUtil.tagCall(tag, ['var'], 'plainArgs', 'kwArgs' )
        kwargs = DTCompilerUtil.pyifyArgs(tag, args['kwArgs'])
        args = DTCompilerUtil.pyifyArgs(tag, args)

        varname = DTCompilerUtil.checkName(tag, 'var', args['var'],
                                           pargs['var'])
        # First, generate the plain args
        out = []
        for _j in args['plainArgs']:
            out.append ( '"%s": %s' % ( _j, _j ) )

        codeout.write ( indent, '%s = { %s }' % ( varname,
                                                  string.join ( out, ', ' )) )

        # Now, add the keyword arguments
        codeout.write ( indent, '%s.update(%s)' % ( varname,
                                                    str(args['kwArgs']) ))