MCPcopy Create free account
hub / github.com/Python-Markdown/markdown / SmartyExtension

Class SmartyExtension

markdown/extensions/smarty.py:181–291  ·  view source on GitHub ↗

Add Smarty to Markdown.

Source from the content-addressed store, hash-verified

179
180
181class SmartyExtension(Extension):
182 """ Add Smarty to Markdown. """
183 def __init__(self, **kwargs):
184 self.config = {
185 'smart_quotes': [True, 'Educate quotes'],
186 'smart_angled_quotes': [False, 'Educate angled quotes'],
187 'smart_dashes': [True, 'Educate dashes'],
188 'smart_ellipses': [True, 'Educate ellipses'],
189 'substitutions': [{}, 'Overwrite default substitutions'],
190 }
191 """ Default configuration options. """
192 super().__init__(**kwargs)
193 self.substitutions: dict[str, str] = dict(substitutions)
194 self.substitutions.update(self.getConfig('substitutions', default={}))
195
196 def _addPatterns(
197 self,
198 md: Markdown,
199 patterns: Sequence[tuple[str, Sequence[int | str | etree.Element]]],
200 serie: str,
201 priority: int,
202 ):
203 for ind, pattern in enumerate(patterns):
204 pattern += (md,)
205 pattern = SubstituteTextPattern(*pattern)
206 name = 'smarty-%s-%d' % (serie, ind)
207 self.inlinePatterns.register(pattern, name, priority-ind)
208
209 def educateDashes(self, md: Markdown) -> None:
210 emDashesPattern = SubstituteTextPattern(
211 r'(?<!-)---(?!-)', (self.substitutions['mdash'],), md
212 )
213 enDashesPattern = SubstituteTextPattern(
214 r'(?<!-)--(?!-)', (self.substitutions['ndash'],), md
215 )
216 self.inlinePatterns.register(emDashesPattern, 'smarty-em-dashes', 50)
217 self.inlinePatterns.register(enDashesPattern, 'smarty-en-dashes', 45)
218
219 def educateEllipses(self, md: Markdown) -> None:
220 ellipsesPattern = SubstituteTextPattern(
221 r'(?<!\.)\.{3}(?!\.)', (self.substitutions['ellipsis'],), md
222 )
223 self.inlinePatterns.register(ellipsesPattern, 'smarty-ellipses', 10)
224
225 def educateAngledQuotes(self, md: Markdown) -> None:
226 leftAngledQuotePattern = SubstituteTextPattern(
227 r'\<\<', (self.substitutions['left-angle-quote'],), md
228 )
229 rightAngledQuotePattern = SubstituteTextPattern(
230 r'\>\>', (self.substitutions['right-angle-quote'],), md
231 )
232 self.inlinePatterns.register(leftAngledQuotePattern, 'smarty-left-angle-quotes', 40)
233 self.inlinePatterns.register(rightAngledQuotePattern, 'smarty-right-angle-quotes', 35)
234
235 def educateQuotes(self, md: Markdown) -> None:
236 lsquo = self.substitutions['left-single-quote']
237 rsquo = self.substitutions['right-single-quote']
238 ldquo = self.substitutions['left-double-quote']

Callers 1

makeExtensionFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected