Source code for pyorg.elisp.printing

"""Print Elisp AST to code."""

from functools import singledispatch
import re

from .ast import *








@print_elisp.register(Literal)
def _print_literal(literal):
	if isinstance(literal.pyvalue, str):
		return print_elisp_string(literal.pyvalue)
	else:
		return str(literal.pyvalue)


@print_elisp.register(Symbol)
def _print_symbol(symbol):
	return symbol.name


@print_elisp.register(Cons)
def _print_cons(cons):
	return '(%s . %s)' % (print_elisp(cons.car), print_elisp(cons.cdr))


@print_elisp.register(List)
def _print_list(list_):
	return '(%s)' % ' '.join(map(print_elisp, list_.items))


@print_elisp.register(Quote)
def _print_quote(quote):
	return "'" + print_elisp(quote.form)


@print_elisp.register(Raw)
def _print_raw(raw):
	return raw.src