X-Git-Url: https://projects.mako.cc/source/pyblosxom-markdown2/blobdiff_plain/0e812d7c5df0514c0bef33f1141acd7a4ed450d0..3627c82ebc2ef7fe96dd38d8a90aecf11857a750:/markdown-plugin.py diff --git a/markdown-plugin.py b/markdown-plugin.py index 09343f8..a7c3b95 100644 --- a/markdown-plugin.py +++ b/markdown-plugin.py @@ -1,22 +1,23 @@ #!/usr/bin/env python """ -markdown-plugin.py -- A python-markdown 2 plugin for pyblosxom. +markdown-plugin.py -- A Python-Markdown v2.x plugin for PyBlosxom. -This plugin requires python-markdown 2, which you can download from: +This plugin requires Python-Markdown v2.x, which you can download from: - http://www.freewisdom.org/projects/python-markdown/ + http://www.freewisdom.org/projects/python-markdown/ -Extract python-markdown 2 into your pyblosxom plugins dir alongside this plugin. -Your plugins dir should look like this: +Extract python-markdown into your pyblosxom plugins dir alongside this +plugin. Your plugins dir should look like this: - plugins/ <-- your pyblosxom plugins dir - markdown-plugin.py <-- this file - markdown.py <-- the python-markdown command line script - markdown/ <-- directory containing python-markdown's files - ... <-- (any other pyblosxom plugins) + plugins/ <-- your pyblosxom plugins dir + markdown-plugin.py <-- this file + markdown.py <-- the python-markdown command line script + markdown/ <-- directory containing python-markdown's files + ... <-- (any other pyblosxom plugins) + +Now any posts with filenames ending in `.mkdn` will be passed through +python-markdown. -Now any posts with filenames ending in `.mkdn` will be passed through python-markdown. - Copyright (C) Benjamin Mako Hill, 2005 Updated for python-markdown 2 by seanh 2009 @@ -37,7 +38,7 @@ USA. """ PREFORMATTER_ID = 'markdown' -FILE_EXT = 'mkdn' +FILENAME_EXTENSIONS = ('txt','text','mkdn','markdown','md','mdown','markdn','mkd') _version__ = '0.2' __author__ = 'Benjamin Mako Hill ' __author__ = 'seanh' @@ -47,58 +48,49 @@ import markdown from Pyblosxom import tools md = markdown.Markdown( - #safe_mode=True, - output_format='html4', - extensions=[ 'codehilite', # Requires python-pygments - 'extra', # Abbreviations, definition lists, fenced code blocks, - # footnotes, headerid and tables. - #'html_tidy', # Enable this if you have libtidy and uTidylib - #'imagelinks', # Broken? - #'meta', - #'rss', - 'toc', - #'wikilinks' - ] + #safe_mode=True, + output_format='html4', + extensions=[ 'codehilite', # Requires python-pygments + 'extra', # Abbreviations, definition lists, fenced code blocks, + # footnotes, headerid and tables. + #'html_tidy', # Enable this if you have libtidy and uTidylib + #'imagelinks', # Broken? + #'meta', + #'rss', + 'toc', + #'wikilinks' + ] ) def cb_entryparser(args): - args[FILE_EXT] = readfile - return args + for FILENAME_EXTENSION in FILENAME_EXTENSIONS: + args[FILENAME_EXTENSION] = readfile + return args def cb_preformat(args): - if args['parser'] == PREFORMATTER_ID: - return parse(''.join(args['story'])) - -def to_ascii(char): - """Return char if char is an ASCII character, '?' otherwise.""" - if ord(char) < 128: - return char - else: - return '?' - -def parse(story): - # Replace any non-ascii characters in the story with '?', so that - # python-markdown doesn't crash. - ascii = "".join([to_ascii(x) for x in story]) - # Convert the ASCII text to HTML with python-markdown. - html = md.convert(ascii) - # Reset python-markdown ready for next time. - md.reset() - return html + if args['parser'] == PREFORMATTER_ID: + return parse(''.join(args['story'])) + +def parse(story): + # Convert the ASCII text to HTML with python-markdown. + html = md.convert(story) + # Reset python-markdown ready for next time. + md.reset() + return html def readfile(filename, request): - entryData = {} - lines = codecs.open(filename, mode="r", encoding="utf8").readlines() - title = lines.pop(0).strip() - while lines and lines[0].startswith("#"): - meta = lines.pop(0) - meta = meta[1:].strip() - meta = meta.split(" ", 1) - entryData[meta[0].strip()] = meta[1].strip() - entryData['title'] = title - entryData['body'] = parse(''.join(lines)) - # Call the postformat callbacks - tools.run_callback('postformat', - {'request': request, - 'entry_data': entryData}) - return entryData + entryData = {} + lines = codecs.open(filename, mode="r", encoding="utf8").readlines() + title = lines.pop(0).strip() + while lines and lines[0].startswith("#"): + meta = lines.pop(0) + meta = meta[1:].strip() + meta = meta.split(" ", 1) + entryData[meta[0].strip()] = meta[1].strip() + entryData['title'] = title + entryData['body'] = parse(''.join(lines)) + # Call the postformat callbacks + tools.run_callback('postformat', + {'request': request, + 'entry_data': entryData}) + return entryData