Index: tools/md_browser/gitiles_smart_quotes.py |
diff --git a/tools/md_browser/gitiles_smart_quotes.py b/tools/md_browser/gitiles_smart_quotes.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..502a24596b03a3fd04b1f570600c86537cd35bc1 |
--- /dev/null |
+++ b/tools/md_browser/gitiles_smart_quotes.py |
@@ -0,0 +1,39 @@ |
+# -*- coding: utf-8 -*- |
+# Copyright 2017 The Chromium Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+"""Implements Gitiles' smart quotes. |
+ |
+This extention converts dumb quotes into smart quotes like Gitiles: |
+ |
+https://gerrit.googlesource.com/gitiles/+/master/gitiles-servlet/src/main/java/com/google/gitiles/doc/SmartQuotedExtension.java |
+""" |
+ |
+from markdown.inlinepatterns import Pattern |
+from markdown.extensions import Extension |
+ |
+ |
+class _GitilesSmartQuotesPattern(Pattern): |
+ """Process Gitiles' dumb->smart quotes.""" |
+ |
+ QUOTES = { |
+ '"': (u'“', u'”'), |
+ "'": (u'‘', u'’'), |
+ } |
+ |
+ def handleMatch(self, m): |
+ lq, rq = self.QUOTES[m.group(2)] |
+ return u'%s%s%s' % (lq, m.group(3), rq) |
+ |
+ |
+class _GitilesSmartQuotesExtension(Extension): |
+ """Add Gitiles' smart quotes to Markdown.""" |
+ def extendMarkdown(self, md, md_globals): |
+ md.inlinePatterns.add('gitilessmartquotes', |
+ _GitilesSmartQuotesPattern(r"""(['"])([^\2]+)\2"""), |
+ '<emphasis') |
+ |
+ |
+def makeExtension(*args, **kwargs): |
+ return _GitilesSmartQuotesExtension(*args, **kwargs) |