X-Git-Url: https://projects.mako.cc/source/pyblosxom-markdown2/blobdiff_plain/0e812d7c5df0514c0bef33f1141acd7a4ed450d0..a5b61fa1ca3d5fddb5071421193bbfdf5bcf68b0:/markdown-plugin.py diff --git a/markdown-plugin.py b/markdown-plugin.py index 09343f8..d30e85b 100644 --- a/markdown-plugin.py +++ b/markdown-plugin.py @@ -1,24 +1,26 @@ #!/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 the 'markdown' directory from the Python Markdown tarball (the +directory containing __init__.py, not the Markdown-2.x.y directory) 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/ <-- the Python Markdown module + ... <-- (any other pyblosxom plugins) + +Now any posts with filenames ending in one of the FILENAME_EXTENSIONS defined +below 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 +Updated for Python Markdown 2 by seanh 2009 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -37,68 +39,58 @@ USA. """ PREFORMATTER_ID = 'markdown' -FILE_EXT = 'mkdn' -_version__ = '0.2' +FILENAME_EXTENSIONS = ('txt','text','mkdn','markdown','md','mdown','markdn','mkd') +_version__ = '0.3' __author__ = 'Benjamin Mako Hill ' -__author__ = 'seanh' +__author__ = 'seanh ' import re,codecs 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', + #'html_tidy', # Requires 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