aboutsummaryrefslogtreecommitdiffstats
path: root/nikola/plugins/compile_markdown
diff options
context:
space:
mode:
authorLibravatarAgustin Henze <tin@sluc.org.ar>2013-11-20 16:58:50 -0300
committerLibravatarAgustin Henze <tin@sluc.org.ar>2013-11-20 16:58:50 -0300
commitca94afc07df55cb7fc6fe3b4f3011877b7881195 (patch)
treed81e1f275aa77545f33740723f307a83dde2e0b4 /nikola/plugins/compile_markdown
parentf794eee787e9cde54e6b8f53e45d69c9ddc9936a (diff)
Imported Upstream version 6.2.1upstream/6.2.1
Diffstat (limited to 'nikola/plugins/compile_markdown')
-rw-r--r--nikola/plugins/compile_markdown/__init__.py88
-rw-r--r--nikola/plugins/compile_markdown/mdx_gist.py189
-rw-r--r--nikola/plugins/compile_markdown/mdx_nikola.py56
-rw-r--r--nikola/plugins/compile_markdown/mdx_podcast.py87
4 files changed, 0 insertions, 420 deletions
diff --git a/nikola/plugins/compile_markdown/__init__.py b/nikola/plugins/compile_markdown/__init__.py
deleted file mode 100644
index ae700e6..0000000
--- a/nikola/plugins/compile_markdown/__init__.py
+++ /dev/null
@@ -1,88 +0,0 @@
-# Copyright (c) 2012 Roberto Alsina y otros.
-
-# Permission is hereby granted, free of charge, to any
-# person obtaining a copy of this software and associated
-# documentation files (the "Software"), to deal in the
-# Software without restriction, including without limitation
-# the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the
-# Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice
-# shall be included in all copies or substantial portions of
-# the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-# PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
-# OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
-# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-"""Implementation of compile_html based on markdown."""
-
-from __future__ import unicode_literals
-
-import codecs
-import os
-
-try:
- from markdown import markdown
-
- from nikola.plugins.compile_markdown.mdx_nikola import NikolaExtension
- nikola_extension = NikolaExtension()
-
- from nikola.plugins.compile_markdown.mdx_gist import GistExtension
- gist_extension = GistExtension()
-
- from nikola.plugins.compile_markdown.mdx_podcast import PodcastExtension
- podcast_extension = PodcastExtension()
-
-except ImportError:
- markdown = None # NOQA
- nikola_extension = None
- gist_extension = None
- podcast_extension = None
-
-from nikola.plugin_categories import PageCompiler
-
-
-class CompileMarkdown(PageCompiler):
- """Compile markdown into HTML."""
-
- name = "markdown"
-
- extensions = ['fenced_code', 'codehilite', gist_extension,
- nikola_extension, podcast_extension]
-
- def compile_html(self, source, dest):
- if markdown is None:
- raise Exception('To build this site, you need to install the '
- '"markdown" package.')
- try:
- os.makedirs(os.path.dirname(dest))
- except:
- pass
- with codecs.open(dest, "w+", "utf8") as out_file:
- with codecs.open(source, "r", "utf8") as in_file:
- data = in_file.read()
- output = markdown(data, self.extensions)
- out_file.write(output)
-
- def create_post(self, path, onefile=False, **kw):
- metadata = {}
- metadata.update(self.default_metadata)
- metadata.update(kw)
- d_name = os.path.dirname(path)
- if not os.path.isdir(d_name):
- os.makedirs(os.path.dirname(path))
- with codecs.open(path, "wb+", "utf8") as fd:
- if onefile:
- fd.write('<!-- \n')
- for k, v in metadata.items():
- fd.write('.. {0}: {1}\n'.format(k, v))
- fd.write('-->\n\n')
- fd.write("Write your post here.")
diff --git a/nikola/plugins/compile_markdown/mdx_gist.py b/nikola/plugins/compile_markdown/mdx_gist.py
deleted file mode 100644
index 808e383..0000000
--- a/nikola/plugins/compile_markdown/mdx_gist.py
+++ /dev/null
@@ -1,189 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Copyright (c) 2013 Michael Rabbitt.
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-# Inspired by "[Python] reStructuredText GitHub Gist directive"
-# (https://gist.github.com/brianhsu/1407759), public domain by Brian Hsu
-
-from __future__ import print_function
-
-
-'''
-Extension to Python Markdown for Embedded Gists (gist.github.com)
-
-Basic Example:
-
- >>> import markdown
- >>> text = """
- ... Text of the gist:
- ... [:gist: 4747847]
- ... """
- >>> html = markdown.markdown(text, [GistExtension()])
- >>> print(html)
- <p>Text of the gist:
- <div class="gist">
- <script src="https://gist.github.com/4747847.js"></script>
- <noscript>
- <pre>import this</pre>
- </noscript>
- </div>
- </p>
-
-Example with filename:
-
- >>> import markdown
- >>> text = """
- ... Text of the gist:
- ... [:gist: 4747847 zen.py]
- ... """
- >>> html = markdown.markdown(text, [GistExtension()])
- >>> print(html)
- <p>Text of the gist:
- <div class="gist">
- <script src="https://gist.github.com/4747847.js?file=zen.py"></script>
- <noscript>
- <pre>import this</pre>
- </noscript>
- </div>
- </p>
-
-Example using reStructuredText syntax:
-
- >>> import markdown
- >>> text = """
- ... Text of the gist:
- ... .. gist:: 4747847 zen.py
- ... """
- >>> html = markdown.markdown(text, [GistExtension()])
- >>> print(html)
- <p>Text of the gist:
- <div class="gist">
- <script src="https://gist.github.com/4747847.js?file=zen.py"></script>
- <noscript>
- <pre>import this</pre>
- </noscript>
- </div>
- </p>
-'''
-from __future__ import unicode_literals
-import warnings
-from markdown.extensions import Extension
-from markdown.inlinepatterns import Pattern
-from markdown.util import AtomicString
-from markdown.util import etree
-
-try:
- import requests
-except ImportError:
- requests = None # NOQA
-
-GIST_JS_URL = "https://gist.github.com/{0}.js"
-GIST_FILE_JS_URL = "https://gist.github.com/{0}.js?file={1}"
-GIST_RAW_URL = "https://raw.github.com/gist/{0}"
-GIST_FILE_RAW_URL = "https://raw.github.com/gist/{0}/{1}"
-
-GIST_MD_RE = r'\[:gist:\s*(?P<gist_id>\d+)(?:\s*(?P<filename>.+?))?\]'
-GIST_RST_RE = r'(?m)^\.\.\s*gist::\s*(?P<gist_id>\d+)(?:\s*(?P<filename>.+))\s*$'
-
-
-class GistPattern(Pattern):
- """ InlinePattern for footnote markers in a document's body text. """
-
- def __init__(self, pattern, configs):
- Pattern.__init__(self, pattern)
-
- def get_raw_gist_with_filename(self, gist_id, filename):
- url = GIST_FILE_RAW_URL.format(gist_id, filename)
- return requests.get(url).text
-
- def get_raw_gist(self, gist_id):
- url = GIST_RAW_URL.format(gist_id)
- return requests.get(url).text
-
- def handleMatch(self, m):
- gist_id = m.group('gist_id')
- gist_file = m.group('filename')
-
- gist_elem = etree.Element('div')
- gist_elem.set('class', 'gist')
- script_elem = etree.SubElement(gist_elem, 'script')
-
- if gist_file:
- script_elem.set('src', GIST_FILE_JS_URL.format(
- gist_id, gist_file))
-
- else:
- script_elem.set('src', GIST_JS_URL.format(
- gist_id))
-
- if requests:
- if gist_file:
- raw_gist = (self.get_raw_gist_with_filename(
- gist_id, gist_file))
- script_elem.set('src', GIST_FILE_JS_URL.format(
- gist_id, gist_file))
-
- else:
- raw_gist = (self.get_raw_gist(gist_id))
- script_elem.set('src', GIST_JS_URL.format(
- gist_id))
-
- # Insert source as <pre/> within <noscript>
- noscript_elem = etree.SubElement(gist_elem, 'noscript')
- pre_elem = etree.SubElement(noscript_elem, 'pre')
- pre_elem.text = AtomicString(raw_gist)
-
- else:
- warnings.warn('"requests" package not installed. '
- 'Please install to add inline gist source.')
-
- return gist_elem
-
-
-class GistExtension(Extension):
- def __init__(self, configs={}):
- # set extension defaults
- self.config = {}
-
- # Override defaults with user settings
- for key, value in configs:
- self.setConfig(key, value)
-
- def extendMarkdown(self, md, md_globals):
- gist_md_pattern = GistPattern(GIST_MD_RE, self.getConfigs())
- gist_md_pattern.md = md
- md.inlinePatterns.add('gist', gist_md_pattern, "<not_strong")
-
- gist_rst_pattern = GistPattern(GIST_RST_RE, self.getConfigs())
- gist_rst_pattern.md = md
- md.inlinePatterns.add('gist-rst', gist_rst_pattern, ">gist")
-
- md.registerExtension(self)
-
-
-def makeExtension(configs=None):
- return GistExtension(configs)
-
-if __name__ == '__main__':
- import doctest
- doctest.testmod(optionflags=(doctest.NORMALIZE_WHITESPACE +
- doctest.REPORT_NDIFF))
diff --git a/nikola/plugins/compile_markdown/mdx_nikola.py b/nikola/plugins/compile_markdown/mdx_nikola.py
deleted file mode 100644
index f7a1959..0000000
--- a/nikola/plugins/compile_markdown/mdx_nikola.py
+++ /dev/null
@@ -1,56 +0,0 @@
-# Copyright (c) 2012 Roberto Alsina y otros.
-
-# Permission is hereby granted, free of charge, to any
-# person obtaining a copy of this software and associated
-# documentation files (the "Software"), to deal in the
-# Software without restriction, including without limitation
-# the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the
-# Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice
-# shall be included in all copies or substantial portions of
-# the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-# PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
-# OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
-# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-"""Markdown Extension for Nikola-specific post-processing"""
-from __future__ import unicode_literals
-import re
-from markdown.postprocessors import Postprocessor
-from markdown.extensions import Extension
-
-
-class NikolaPostProcessor(Postprocessor):
- def run(self, text):
- output = text
- # h1 is reserved for the title so increment all header levels
- for n in reversed(range(1, 9)):
- output = re.sub('<h%i>' % n, '<h%i>' % (n + 1), output)
- output = re.sub('</h%i>' % n, '</h%i>' % (n + 1), output)
-
- # python-markdown's highlighter uses the class 'codehilite' to wrap
- # code, instead of the standard 'code'. None of the standard
- # pygments stylesheets use this class, so swap it to be 'code'
- output = re.sub(r'(<div[^>]+class="[^"]*)codehilite([^>]+)',
- r'\1code\2', output)
- return output
-
-
-class NikolaExtension(Extension):
- def extendMarkdown(self, md, md_globals):
- pp = NikolaPostProcessor()
- md.postprocessors.add('nikola_post_processor', pp, '_end')
- md.registerExtension(self)
-
-
-def makeExtension(configs=None):
- return NikolaExtension(configs)
diff --git a/nikola/plugins/compile_markdown/mdx_podcast.py b/nikola/plugins/compile_markdown/mdx_podcast.py
deleted file mode 100644
index be8bb6b..0000000
--- a/nikola/plugins/compile_markdown/mdx_podcast.py
+++ /dev/null
@@ -1,87 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Copyright (c) 2013 Michael Rabbitt, Roberto Alsina
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-# Inspired by "[Python] reStructuredText GitHub Podcast directive"
-# (https://gist.github.com/brianhsu/1407759), public domain by Brian Hsu
-
-from __future__ import print_function, unicode_literals
-
-
-'''
-Extension to Python Markdown for Embedded Audio
-
-Basic Example:
-
->>> import markdown
->>> text = """[podcast]http://archive.org/download/Rebeldes_Stereotipos/rs20120609_1.mp3[/podcast]"""
->>> html = markdown.markdown(text, [PodcastExtension()])
->>> print(html)
-<p><audio src="http://archive.org/download/Rebeldes_Stereotipos/rs20120609_1.mp3"></audio></p>
-'''
-
-from markdown.extensions import Extension
-from markdown.inlinepatterns import Pattern
-from markdown.util import etree
-
-PODCAST_RE = r'\[podcast\](?P<url>.+)\[/podcast\]'
-
-
-class PodcastPattern(Pattern):
- """ InlinePattern for footnote markers in a document's body text. """
-
- def __init__(self, pattern, configs):
- Pattern.__init__(self, pattern)
-
- def handleMatch(self, m):
- url = m.group('url').strip()
- audio_elem = etree.Element('audio')
- audio_elem.set('controls', '')
- source_elem = etree.SubElement(audio_elem, 'source')
- source_elem.set('src', url)
- source_elem.set('type', 'audio/mpeg')
- return audio_elem
-
-
-class PodcastExtension(Extension):
- def __init__(self, configs={}):
- # set extension defaults
- self.config = {}
-
- # Override defaults with user settings
- for key, value in configs:
- self.setConfig(key, value)
-
- def extendMarkdown(self, md, md_globals):
- podcast_md_pattern = PodcastPattern(PODCAST_RE, self.getConfigs())
- podcast_md_pattern.md = md
- md.inlinePatterns.add('podcast', podcast_md_pattern, "<not_strong")
- md.registerExtension(self)
-
-
-def makeExtension(configs=None):
- return PodcastExtension(configs)
-
-if __name__ == '__main__':
- import doctest
- doctest.testmod(optionflags=(doctest.NORMALIZE_WHITESPACE +
- doctest.REPORT_NDIFF))