diff options
Diffstat (limited to 'markdown/extensions')
-rw-r--r-- | markdown/extensions/smarty.py | 46 |
1 files changed, 32 insertions, 14 deletions
diff --git a/markdown/extensions/smarty.py b/markdown/extensions/smarty.py index 16d2936..cc6b694 100644 --- a/markdown/extensions/smarty.py +++ b/markdown/extensions/smarty.py @@ -85,7 +85,20 @@ openingQuotesBase = ( '|&[mn]dash;' # or named dash entities '|–|—' # or decimal entities ')' -) +) + +substitutions = { + 'mdash': '—', + 'ndash': '–', + 'ellipsis': '…', + 'left-angle-quote': '«', + 'right-angle-quote': '»', + 'left-single-quote': '‘', + 'right-single-quote': '’', + 'left-double-quote': '“', + 'right-double-quote': '”', +} + # Special case if the very first character is a quote # followed by punctuation at a non-word-break. Close the quotes by brute force: @@ -138,12 +151,12 @@ class SmartyExtension(Extension): 'smart_angled_quotes': [False, 'Educate angled quotes'], 'smart_dashes': [True, 'Educate dashes'], 'smart_ellipses': [True, 'Educate ellipses'], - 'smart_lsquo' : ['‘', 'Replacement text for single left quote'], - 'smart_rsquo' : ['’', 'Replacement text for single right quote'], - 'smart_ldquo' : ['“', 'Replacement text for double left quote'], - 'smart_rdquo' : ['”', 'Replacement text for double right quote'], + 'smart_substitutions' : [{}, 'Overwrite default substitutions'], } super(SmartyExtension, self).__init__(*args, **kwargs) + self.substitutions = dict(substitutions) + self.substitutions.update(self.getConfig('smart_substitutions', + default={})) def _addPatterns(self, md, patterns, serie): for ind, pattern in enumerate(patterns): @@ -154,19 +167,24 @@ class SmartyExtension(Extension): self.inlinePatterns.add(name, pattern, after) def educateDashes(self, md): - emDashesPattern = SubstituteTextPattern(r'(?<!-)---(?!-)', ('—',), md) - enDashesPattern = SubstituteTextPattern(r'(?<!-)--(?!-)', ('–',), md) + emDashesPattern = SubstituteTextPattern(r'(?<!-)---(?!-)', + (self.substitutions['mdash'],), md) + enDashesPattern = SubstituteTextPattern(r'(?<!-)--(?!-)', + (self.substitutions['ndash'],), md) self.inlinePatterns.add('smarty-em-dashes', emDashesPattern, '_begin') self.inlinePatterns.add('smarty-en-dashes', enDashesPattern, '>smarty-em-dashes') def educateEllipses(self, md): - ellipsesPattern = SubstituteTextPattern(r'(?<!\.)\.{3}(?!\.)', ('…',), md) + ellipsesPattern = SubstituteTextPattern(r'(?<!\.)\.{3}(?!\.)', + (self.substitutions['ellipsis'],), md) self.inlinePatterns.add('smarty-ellipses', ellipsesPattern, '_begin') def educateAngledQuotes(self, md): - leftAngledQuotePattern = SubstituteTextPattern(r'\<\<', ('«',), md) - rightAngledQuotePattern = SubstituteTextPattern(r'\>\>', ('»',), md) + leftAngledQuotePattern = SubstituteTextPattern(r'\<\<', + (self.substitutions['left-angle-quote'],), md) + rightAngledQuotePattern = SubstituteTextPattern(r'\>\>', + (self.substitutions['right-angle-quote'],), md) self.inlinePatterns.add('smarty-left-angle-quotes', leftAngledQuotePattern, '_begin') self.inlinePatterns.add('smarty-right-angle-quotes', @@ -174,10 +192,10 @@ class SmartyExtension(Extension): def educateQuotes(self, md): configs = self.getConfigs() - lsquo = configs['smart_lsquo'] - rsquo = configs['smart_rsquo'] - ldquo = configs['smart_ldquo'] - rdquo = configs['smart_rdquo'] + lsquo = self.substitutions['left-single-quote'] + rsquo = self.substitutions['right-single-quote'] + ldquo = self.substitutions['left-double-quote'] + rdquo = self.substitutions['right-double-quote'] patterns = ( (singleQuoteStartRe, (rsquo,)), (doubleQuoteStartRe, (rdquo,)), |