gitiles_smart_quotes.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. # -*- coding: utf-8 -*-
  2. # Copyright 2017 The Chromium Authors. All rights reserved.
  3. # Use of this source code is governed by a BSD-style license that can be
  4. # found in the LICENSE file.
  5. """Implements Gitiles' smart quotes.
  6. This extention converts dumb quotes into smart quotes like Gitiles:
  7. https://gerrit.googlesource.com/gitiles/+/master/gitiles-servlet/src/main/java/com/google/gitiles/doc/SmartQuotedExtension.java
  8. """
  9. from markdown.inlinepatterns import Pattern
  10. from markdown.extensions import Extension
  11. class _GitilesSmartQuotesPattern(Pattern):
  12. """Process Gitiles' dumb->smart quotes."""
  13. QUOTES = {
  14. '"': (u'“', u'”'),
  15. "'": (u'‘', u'’'),
  16. }
  17. def handleMatch(self, m):
  18. lq, rq = self.QUOTES[m.group(2)]
  19. return u'%s%s%s' % (lq, m.group(3), rq)
  20. class _GitilesSmartQuotesExtension(Extension):
  21. """Add Gitiles' smart quotes to Markdown."""
  22. def extendMarkdown(self, md):
  23. md.inlinePatterns.add('gitilessmartquotes',
  24. _GitilesSmartQuotesPattern(r"""(['"])([^\2]+)\2"""),
  25. '<em_strong')
  26. def makeExtension(*args, **kwargs):
  27. return _GitilesSmartQuotesExtension(*args, **kwargs)