mdx_urlrebase.py @ f605dfaddcc9

Add link to markdown in manifest.
author Chris Eldredge <chris.eldredge@gmail.com>
date Fri, 10 Aug 2012 22:42:27 +0100
parents 299ff954bfa8
children 8659ef2c4757
import markdown

class UrlRebaseExtension(markdown.Extension):
	def __init__ (self, configs):
		# set extension defaults
		self.config = {
			'base_url' : ['/', 'String to append to beginning or URL.'],
		}

		# Override defaults with user settings
		for key, value in configs :
			self.setConfig(key, value)		

	def extendMarkdown(self, md, md_globals):
		""" Add pieces to Markdown. """
		md.registerExtension(self)
		md.treeprocessors.add("urlrebase", UrlRebaseTreeprocessor(self.getConfigs()), "_end")
		
class UrlRebaseTreeprocessor(markdown.treeprocessors.Treeprocessor):
	def __init__ (self, config):
		self.config = config
	
	def run(self, root):
		for a in root.findall(".//a"):
			uri = a.get('href', '')
			if '://' in uri or uri.startswith('/'):
				continue
			a.set('href', self.rebase(uri))
		return root

	def rebase(self, uri):
		base = self.config['base_url']
		if base[0] and not base.endswith('/'):
			base = base + '/'
		return base + uri

def makeExtension(configs=None) :
	return UrlRebaseExtension(configs=configs)