blob: 80003faec8917023a2af15c933a8d138043419a5 [file] [log] [blame]
vapier98832b82017-03-09 07:53:581# -*- coding: utf-8 -*-
Avi Drissmandfd880852022-09-15 20:11:092# Copyright 2017 The Chromium Authors
vapier98832b82017-03-09 07:53:583# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
6"""Implements Gitiles' smart quotes.
7
8This extention converts dumb quotes into smart quotes like Gitiles:
9
10https://gerrit.googlesource.com/gitiles/+/master/gitiles-servlet/src/main/java/com/google/gitiles/doc/SmartQuotedExtension.java
11"""
12
13from markdown.inlinepatterns import Pattern
14from markdown.extensions import Extension
15
16
17class _GitilesSmartQuotesPattern(Pattern):
18 """Process Gitiles' dumb->smart quotes."""
19
20 QUOTES = {
21 '"': (u'“', u'”'),
22 "'": (u'‘', u'’'),
23 }
24
25 def handleMatch(self, m):
26 lq, rq = self.QUOTES[m.group(2)]
27 return u'%s%s%s' % (lq, m.group(3), rq)
28
29
30class _GitilesSmartQuotesExtension(Extension):
Peter Kasting3f58d92bd2022-12-16 21:07:1131 """Add Gitiles' smart quotes to Markdown, with a priority just higher than
32 that of the builtin 'em_strong'."""
Yu-Ping Wu4f924c902021-12-01 04:33:2133
34 def extendMarkdown(self, md):
Peter Kasting3f58d92bd2022-12-16 21:07:1135 md.inlinePatterns.register(
36 _GitilesSmartQuotesPattern(r"""(['"])([^\2]+)\2"""),
37 'gitilessmartquotes', 61)
vapier98832b82017-03-09 07:53:5838
39
40def makeExtension(*args, **kwargs):
41 return _GitilesSmartQuotesExtension(*args, **kwargs)