diff -r 000000000000 -r 40c8f766c9b8 src/cm/converters/old_converters.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/cm/converters/old_converters.py Mon Nov 23 15:14:29 2009 +0100 @@ -0,0 +1,136 @@ +########## converters +from django.core.cache import cache + +# adapted [to django] from http://code.activestate.com/recipes/325205/ +def memoize(f): + def g(*args, **kwargs): + key = ( f.__name__, f, tuple(args), frozenset(kwargs.items()) ) + val = cache.get(key) + if not val: + val = f(*args, **kwargs) + cache.set(key,val) + return val + return g + + +def to_unicode(string): + if type(string) != 'unicode': + return string.decode('utf8') + else: + return string + +def to_utf8(string): + if type(string) != 'str': + return string.encode('utf8') + else: + return string + +#@memoize +def rst_to_html(rst): + from docutils import core, io + html, pub = _get_html_and_pub(rst) + parts = pub.writer.parts + return parts['stylesheet']+parts['body'] + +#@memoize +def rst_to_fullhtml(rst): + html, pub = _get_html_and_pub(rst) + parts = pub.writer.parts + return html + #return '' + parts['stylesheet'] + '' + parts['body'] + '' + +def markdown_to_html(markdown): + return _markdown_to_html(markdown) + +def markdown_to_fullhtml(markdown): + return ''+_markdown_to_html(markdown) + '' + +def _markdown_to_html(markdown): + from markdown import Markdown + md = Markdown() + html = md.convert(markdown) + return html + +def _get_html_and_pub(rst): + from docutils import core, io + html, pub = core.publish_programmatically( + source_class=io.StringInput, source=rst, + source_path=None, + destination_class=io.StringOutput, destination=None, + destination_path=None, + reader=None, reader_name='standalone', + parser=None, parser_name='restructuredtext', + writer=None, writer_name='HTML', + settings=None, settings_spec=None, settings_overrides=None, + config_section=None, enable_exit_status=None) + return html, pub + +#@memoize +def html_to_pdf(html): + html = to_utf8(html) + + import sx.pisa3 as pisa + import StringIO + dst = StringIO.StringIO() + result = pisa.CreatePDF(html, dst) + if not result.err: + pdf = dst.getvalue() + dst.close() + return pdf + else: + return None + +# http://www.aaronsw.com/2002/html2text/ +#@memoize +def html_to_markdown(html): + from com.ext.html2text import html2text + return html2text(html) + +########## formats + +FORMATS = { + 'HTML' : {'name': 'HTML', + 'to_format' : {'Markdown' : html_to_markdown, } + }, + 'FULLHTML' : {'name': 'FULLHTML', + 'to_format' : {'PDF' : html_to_pdf, } + }, + 'RST' : {'name': 'reStructuredText', + 'to_format' : {'HTML' : rst_to_html, + 'FULLHTML' : rst_to_fullhtml, + } + }, + + 'Markdown' : {'name': 'Markdown', + 'to_format' : {'HTML' : markdown_to_html, + 'FULLHTML' : markdown_to_fullhtml, + } + }, + 'Textile' : {'name': 'Textile', + }, + 'PDF' : {'name': 'PDF', + }, + } + +CHOICES_FORMATS = [ (k,v.get('name')) for k,v in FORMATS.items()] + +INPUT_FORMATS = ['RST','Markdown'] + +DEFAULT_INPUT_FORMAT = 'Markdown' + +CHOICES_INPUT_FORMATS = [ (k,v.get('name')) for k,v in FORMATS.items() if k in INPUT_FORMATS] + +def get_supported_conversions(from_format): + return FORMATS[from_format]['to_format'].keys() + +def is_supported_conversion(from_format, to_format): + infos = FORMATS.get(from_format) + return infos.get('to_format') and infos.get('to_format').get(to_format) + +def convert(content, from_format, to_format): + if is_supported_conversion(from_format, to_format): + infos = FORMATS.get(from_format) + conv_fun = infos.get('to_format').get(to_format) + return conv_fun(content) + else: + pass \ No newline at end of file