Wie von redtree hervorgehoben, habe ich erfahren, dass Pelican jetzt standardmäßig die Codeblocknotation im Github-Stil verwendet.
Bitte ignorieren Sie den Inhalt dieses Artikels! Pelikan ist das Beste!
Ich benutze Pelican als Blogging-Tool. Übrigens, als ich ein Kind war, als ich in den Garten ging, war ein Pelikan vor mir. Vor mir, der enttäuscht war, schrie der Pelikan "gar" und flog davon.
Selbst wenn ich den Leuten davon erzählte, war ich enttäuscht, dass niemand es glauben konnte. Mit der Zeit und meine Erinnerung verblasst, "Ist das wirklich ein Pelikan? Ist es nicht ein Fehler auf einem Pelikanflug?" Das denke ich manchmal.
Nun, Pelican-Blogs können mit Markdown-Notation geschrieben werden. Besonders für diejenigen, die viel Quellcode schreiben, als nur Markdown Github-Flavored-Markdown (GFM) ist besser Ich denke, es gibt viele Leute, die daran gewöhnt sind und es leicht finden, zu schreiben.
Leider können Sie GFM normalerweise nicht verwenden.
Python hat eine Bibliothek namens Misaka, die die GFM-Notation verwenden kann. Lassen Sie uns sie also verfügbar machen.
Es tut mir leid für diejenigen, die die bedeutungslos lange "Einführung" lesen. Es ist eine verrückte, ziemlich besiegte Lösung. Ich denke, dass es durch Plug-Ins usw. realisiert werden sollte, aber es ist problematisch.
Übrigens versuche ich die von Pelican empfohlene Python-Version mit 2.7. Das Betriebssystem ist Mac OS 10.9.
Mit pip installieren.
$ pip install misaka
Das Markdown-Parsing erfolgt in einer Datei namens "reader.py" Ich werde direkt mit dieser Datei herumspielen.
Wenn Sie nicht wissen, wo sich die Datei befindet, verwenden Sie "pip show", um sie zu finden.
(pelican)comme@garcons$ pip show pelican
---
Name: pelican
Version: 3.3
Location: /Users/comme/.virtualenvs/pelican/lib/python2.7/site-packages
Requires: feedgenerator, jinja2, pygments, docutils, pytz, blinker, unidecode, six
Sie finden reader.py
im pelican
-Verzeichnis des durch den Standort angegebenen Verzeichnisses.
Hier in der 19. Zeile korrigiert
try:
from markdown import Markdown
except ImportError:
Markdown = False # NOQA
↓ So korrigieren
try:
from markdown import Markdown
import misaka
import pygments
except ImportError:
Markdown = False # NOQA
Hier um Zeile 215 behoben
def read(self, source_path):
"""Parse content and metadata of markdown files"""
self._md = Markdown(extensions=self.extensions)
with pelican_open(source_path) as text:
content = self._md.convert(text)
metadata = self._parse_metadata(self._md.Meta)
return content, metadata
↓ So korrigieren
def read(self, source_path):
"""Parse content and metadata of markdown files"""
self._md = Markdown(extensions=self.extensions)
with pelican_open(source_path) as text:
content = self._md.convert(text)
metadata = self._parse_metadata(self._md.Meta)
renderer = self.BleepRenderer()
misaka_md = misaka.Markdown(renderer,
extensions=misaka.EXT_FENCED_CODE | misaka.EXT_NO_INTRA_EMPHASIS)
with pelican_open(source_path) as text:
misaka_content = misaka_md.render(text)
return misaka_content, metadata
class BleepRenderer(misaka.HtmlRenderer, misaka.SmartyPants):
def block_code(self, text, lang):
if not lang:
return '\n<pre><code>%s</code></pre>\n' % escape(text.strip())
lexer = pygments.lexers.get_lexer_by_name(lang, stripall=True)
formatter = pygments.formatters.HtmlFormatter()
return pygments.highlight(text, lexer, formatter)
Das ist es.
Nun, wie Kobito und Github,
```python
def func():
print('uuuuuuuuuuwaaaaaaaaaaaaaaaaaaahhhhhhhh')
```
Wenn Sie so schreiben und "HTML erstellen", können Sie das erwartete HTML erhalten.
--- a/readers.py
+++ b/readers.py
@@ -18,6 +18,8 @@ except ImportError:
docutils = False
try:
from markdown import Markdown
+ import misaka
+ import pygments
except ImportError:
Markdown = False # NOQA
try:
@@ -215,7 +217,22 @@ class MarkdownReader(BaseReader):
content = self._md.convert(text)
metadata = self._parse_metadata(self._md.Meta)
- return content, metadata
+
+ renderer = self.BleepRenderer()
+ misaka_md = misaka.Markdown(renderer,
+ extensions=misaka.EXT_FENCED_CODE | misaka.EXT_NO_INTRA_EMPHASIS)
+ with pelican_open(source_path) as text:
+ misaka_content = misaka_md.render(text)
+
+ return misaka_content, metadata
+
+ class BleepRenderer(misaka.HtmlRenderer, misaka.SmartyPants):
+ def block_code(self, text, lang):
+ if not lang:
+ return '\n<pre><code>%s</code></pre>\n' % escape(text.strip())
+ lexer = pygments.lexers.get_lexer_by_name(lang, stripall=True)
+ formatter = pygments.formatters.HtmlFormatter()
+ return pygments.highlight(text, lexer, formatter)
class HTMLReader(BaseReader):
Recommended Posts