Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(77)

Side by Side Diff: third_party/Python-Markdown/markdown/extensions/abbr.py

Issue 1389543003: Revert of Check in a simple pure-python based Markdown previewer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@add
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 '''
2 Abbreviation Extension for Python-Markdown
3 ==========================================
4
5 This extension adds abbreviation handling to Python-Markdown.
6
7 See <https://pythonhosted.org/Markdown/extensions/abbreviations.html>
8 for documentation.
9
10 Oringinal code Copyright 2007-2008 [Waylan Limberg](http://achinghead.com/) and
11 [Seemant Kulleen](http://www.kulleen.org/)
12
13 All changes Copyright 2008-2014 The Python Markdown Project
14
15 License: [BSD](http://www.opensource.org/licenses/bsd-license.php)
16
17 '''
18
19 from __future__ import absolute_import
20 from __future__ import unicode_literals
21 from . import Extension
22 from ..preprocessors import Preprocessor
23 from ..inlinepatterns import Pattern
24 from ..util import etree, AtomicString
25 import re
26
27 # Global Vars
28 ABBR_REF_RE = re.compile(r'[*]\[(?P<abbr>[^\]]*)\][ ]?:\s*(?P<title>.*)')
29
30
31 class AbbrExtension(Extension):
32 """ Abbreviation Extension for Python-Markdown. """
33
34 def extendMarkdown(self, md, md_globals):
35 """ Insert AbbrPreprocessor before ReferencePreprocessor. """
36 md.preprocessors.add('abbr', AbbrPreprocessor(md), '<reference')
37
38
39 class AbbrPreprocessor(Preprocessor):
40 """ Abbreviation Preprocessor - parse text for abbr references. """
41
42 def run(self, lines):
43 '''
44 Find and remove all Abbreviation references from the text.
45 Each reference is set as a new AbbrPattern in the markdown instance.
46
47 '''
48 new_text = []
49 for line in lines:
50 m = ABBR_REF_RE.match(line)
51 if m:
52 abbr = m.group('abbr').strip()
53 title = m.group('title').strip()
54 self.markdown.inlinePatterns['abbr-%s' % abbr] = \
55 AbbrPattern(self._generate_pattern(abbr), title)
56 else:
57 new_text.append(line)
58 return new_text
59
60 def _generate_pattern(self, text):
61 '''
62 Given a string, returns an regex pattern to match that string.
63
64 'HTML' -> r'(?P<abbr>[H][T][M][L])'
65
66 Note: we force each char as a literal match (in brackets) as we don't
67 know what they will be beforehand.
68
69 '''
70 chars = list(text)
71 for i in range(len(chars)):
72 chars[i] = r'[%s]' % chars[i]
73 return r'(?P<abbr>\b%s\b)' % (r''.join(chars))
74
75
76 class AbbrPattern(Pattern):
77 """ Abbreviation inline pattern. """
78
79 def __init__(self, pattern, title):
80 super(AbbrPattern, self).__init__(pattern)
81 self.title = title
82
83 def handleMatch(self, m):
84 abbr = etree.Element('abbr')
85 abbr.text = AtomicString(m.group('abbr'))
86 abbr.set('title', self.title)
87 return abbr
88
89
90 def makeExtension(*args, **kwargs):
91 return AbbrExtension(*args, **kwargs)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698