예제 #1
0
    def make_getter():
        """
        NOT_RPYTHON:
        """
        return lambda s: getattr(s, 'strval')

    def to_repr(self):
        return repr(self.strval)

def IntPtr(i):
    return NodePtr(IntNode(i))

def CharPtr(c):
    return NodePtr(CharNode(c))

def StrPtr(s):
    return NodePtr(StringNode(s))

def BoolPtr(b):
    if b:
        return bool_true
    else:
        return bool_false

def UnitPtr():
    return unit


from pyops import pyops_context
default_context.update(pyops_context)
예제 #2
0
파일: __main__.py 프로젝트: Ceasar/LisPy

GLOBAL_ENV = Context()
GLOBAL_ENV.update(
    {'+': op.add,
     '-': op.sub,
     '*': op.mul,
     '/': op.div,
     'not': op.not_,
     '>': op.gt,
     '<': op.lt,
     '>=': op.ge,
     '<=': op.le,
     '==': op.eq,
     '/=': op.ne,
     'eq?': op.is_,
     'length': len,
     ':': lambda x, y: [x] + y,
     'head': lambda x: x[0],
     'tail': lambda x: x[1:],
     'append': op.add,
     'list': lambda *x: list(x),
     'list?': lambda x: isinstance(x, list),
     'null?': lambda x: x == [],
     'symbol?': lambda x: isinstance(x, str),
     'map': lambda f, xs: [f(x) for x in xs],
     }
)


def to_string(exp):
예제 #3
0
class Converter(object):
    libraries = [calculator.library, functions.library, html.library]
    elemlibraries = [elements.library]
    filetype = 'html'

    def __init__(self, manager=FileManager, context={}, config={},
                 compress=False, debug=False, optimize=False):
        self.context = Context(true=True, false=False)
        self.context.update(context)
        self.config = config
        self.manager = manager() if callable(manager) else manager
        self.compress = compress
        self.builder = Builder(debug, optimize)

    def eval(self, element):
        if element is None:
            return ''
        if not isinstance(element, Node):
            return element
        try:
            return element.evaluate(self)
        except FallThrough as e:
            return e.result

    def accepts(self, name, tag):
        function = self.function(name)
        return tag in self.function(name).receivers

    def function(self, name):
        for library in reversed(self.libraries):
            try:
                return library.get(name)
            except KeyError:
                continue
        raise ConversionError('Could not find function %s' % name,
                'Libraries searched: %s' % list(reversed(self.libraries)))

    def element(self, name):
        for library in reversed(self.elemlibraries):
            try:
                return library.get(name)
            except KeyError:
                continue
        return elements.Element

    def configuration(self, name):
        if name in self.config:
            return self.config
        import cm.config
        return getattr(cm.config, name, None)

    def join(self, lines, compress=False):
        if compress or self.compress:
            return ''.join(str(line).strip() for line in lines)
        return '\n'.join(map(str, lines))

    def build(self, filename):
        file = self.manager.input_file(filename)
        name = self.manager.relname(file)
        return self.builder.build(file.read(), name)

    def render(self, filename, context=None):
        self.context.update(context or {})
        result = self.eval(self.build(filename))
        self.context.pop()
        return result

    def convert(self, filename, outname=None, context=None):
        file = self.manager.output_file(outname or filename)
        file.write(self.render(filename, context))
        return file.name