# HG changeset patch # User Chris Eldredge # Date 1368460922 -3600 # Node ID c90dd6006009c22450f06fda873f9c7935ef491d # Parent c49ba42e5f0e80663fae36755cb5c83130bd37ac# Parent 103ed018ac6623c789b1e1d884796928d37ea78c merge diff -r 103ed018ac66 -r c90dd6006009 __init__.py --- a/__init__.py Tue Oct 02 15:21:18 2012 +0100 +++ b/__init__.py Mon May 13 17:02:02 2013 +0100 @@ -4,7 +4,7 @@ # If using TortoiseHg, obtain Python-Markdown and tell Python where to find it: #sys.path.append("c:/python27/Lib/site-packages/markdown-2.2.0-py2.7.egg") -import logging, markdown, mimetypes +import logging, markdown, mimetypes, codecs from mercurial import extensions, encoding, util from mercurial.hgweb import webcommands, webutil, common from mercurial.hgweb.common import ErrorResponse, HTTP_OK, HTTP_FORBIDDEN, HTTP_NOT_FOUND @@ -17,23 +17,23 @@ path = req.form.get('file', [''])[0] if path: f = f + '/' + path - + if not f: f = find_working_copy_readme(web.repo.root) - + parts = os.path.splitext(f) - + try: - text = file(web.repo.root + "/" + f, "rb").read() + text = codecs.open(web.repo.root + "/" + f, "rb", "utf-8").read() except IOError: raise ErrorResponse(HTTP_NOT_FOUND, 'path not found: ' + f) - + if not parts[1] == '.markdown' and not parts[1] == '.md': return preview_sendraw(web, req, f, text) - - md = markdown.Markdown(extensions=['wikilinks(base_url={0},end_url={1})'.format('', parts[1])]) - html = md.convert(text) - + + md = markdown.Markdown(extensions=['wikilinks(base_url={0},end_url={1})'.format('', parts[1])]) + html = md.convert(text).encode("utf-8") + args = {'file':f, 'readmefilename':parts[0].split('/')[-1], 'path':webutil.up(f), @@ -50,7 +50,7 @@ mt = 'application/binary' else: mt = 'text/plain' - + if guessmime: mt = mimetypes.guess_type(path)[0] if mt is None: @@ -60,17 +60,21 @@ req.respond(HTTP_OK, mt, path, len(data)) return [data] - + def file_markdown(orig, web, req, tmpl): f = req.form.get('file', [''])[0] parts = os.path.splitext(f) + if 'file' not in req.form: return webcommands.manifest(web, req, tmpl) + if not parts[-1] == '.markdown' and not parts[-1] == '.md': + return orig(web, req, tmpl) + try: fctx = webutil.filectx(web.repo, req) - text = fctx.data() + text = fctx.data().decode("utf-8") except LookupError, inst: try: return webcommands.manifest(web, req, tmpl) @@ -80,12 +84,9 @@ if util.binary(text): return webcommands.rawfile(web, req, tmpl) - if not parts[1] == '.markdown' and not parts[1] == '.md': - return orig(web, req, tmpl) + md = markdown.Markdown(extensions=['wikilinks(base_url={0},end_url={1})'.format('', parts[1])]) + html = md.convert(text).encode("utf-8") - md = markdown.Markdown(extensions=['wikilinks(base_url={0},end_url={1})'.format('', parts[1])]) - html = md.convert(text) - args = {'file':f, 'readmefilename':parts[0].split('/')[-1], 'path':webutil.up(f), @@ -107,25 +108,25 @@ Decorates the default summary view by adding 'readme' and 'readmefile' content to the template. """ - + changeid = web.config('web', 'markdown.changeid', 'tip') text = None - + cctx = web.repo[changeid] changeid = cctx.hex()[0:12] for filename in cctx: if filename.lower() == 'readme.md' or filename.lower() == 'readme.markdown': fctx = cctx.filectx(filename) - text = fctx.data() + text = fctx.data().decode("utf-8") filesuffix = '.' + filename.split('.')[-1] readmefile = filename break - + if text: ext = os.path.splitext(readmefile)[1] base_url = tmpl.defaults['url'] + 'file/' + changeid + "/" base_raw_url = tmpl.defaults['url'] + 'rawfile/' + changeid + "/" - + def rebase(proc, e, attr): uri = e.get(attr, '') if '://' in uri or uri.startswith('/'): @@ -134,20 +135,20 @@ if attr == 'src': base = base_raw_url e.set(attr, proc.rebase(base, uri)) - + ext = mdx_urlrebase.UrlRebaseExtension(configs=[('rebase', rebase)]) md = markdown.Markdown( extensions=[ext, 'wikilinks'], extension_configs={ 'wikilinks' : [('base_url', base_url), ('end_url', filesuffix)]}) - readme = md.convert(text) + readme = md.convert(text).encode("utf-8") else: readmefile = "ReadMe" readme = "Add ReadMe.md or ReadMe.markdown to this repository to display it here." - + tmpl.defaults['readmefilename'] = readmefile tmpl.defaults['readme'] = readme - + return orig(web, req, tmpl) def find_working_copy_readme(dir):