Comme indiqué par redtree, j'ai appris que Pelican utilise désormais la notation de bloc de code de style github par défaut.
Veuillez donc ignorer le contenu de cet article! Pelican est le meilleur!
J'utilise Pelican comme outil de blog. Au fait, quand j'étais enfant, quand je sortais dans le jardin, il y avait un pélican devant moi. Devant moi, déçu, le pélican a crié "gar" et s'est envolé.
Même si j'en parlais aux gens, j'étais déçu que personne ne puisse y croire. Avec le temps et ma mémoire s'estompe "Est-ce vraiment un pélican? N'est-ce pas une erreur sur un vol de pélican?" Je pense parfois ça.
Eh bien, les blogs Pelican peuvent être écrits en utilisant la notation Markdown, Surtout pour ceux qui écrivent beaucoup de code source, que Markdown simple Github-Flavored-Markdown (GFM) est meilleur Je pense qu'il y a beaucoup de gens qui y sont habitués et qui trouvent cela facile à écrire.
Malheureusement, vous ne pouvez généralement pas utiliser GFM.
Python a une bibliothèque appelée misaka qui peut utiliser la notation GFM, alors rendons-la disponible.
Je suis désolé pour ceux qui ont lu la longue "Introduction" sans signification. C'est une solution folle et assez vaincue. Je pense que cela devrait être réalisé par des plug-ins etc., mais c'est gênant.
Au fait, j'essaye la version Python avec 2.7 recommandée par Pelican. Le système d'exploitation est Mac OS 10.9.
Installez avec pip.
$ pip install misaka
L'analyse de Markdown est effectuée dans un fichier appelé reader.py
, donc
Je vais jouer directement avec ce fichier.
Si vous ne savez pas où se trouve le fichier, utilisez pip show
pour le trouver.
(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
Vous pouvez trouver «reader.py» dans le répertoire «pélican» du répertoire indiqué par emplacement.
Corrigé ici à la 19e ligne
try:
from markdown import Markdown
except ImportError:
Markdown = False # NOQA
↓ Corriger comme ça
try:
from markdown import Markdown
import misaka
import pygments
except ImportError:
Markdown = False # NOQA
Fixé ici autour de la ligne 215
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
↓ Corriger comme ça
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)
C'est tout.
Maintenant, comme kobito et github,
```python
def func():
print('uuuuuuuuuuwaaaaaaaaaaaaaaaaaaahhhhhhhh')
```
Si vous écrivez comme ceci et «make html», vous pouvez obtenir le html que vous attendiez.
--- 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