blob: eb77ebb51d58be7d0a2889ae22f8e0b6ca3604f9 [file] [log] [blame]
vapierfceea8e2017-03-09 07:05:131# Copyright 2017 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5"""Implements Gitiles' simpler auto linking.
6
7This extention auto links basic URLs that aren't bracketed by <...>.
8
Nate Fischer0cc74af52019-06-01 01:07:339https://gerrit.googlesource.com/gitiles/+/master/java/com/google/gitiles/Linkifier.java
vapierfceea8e2017-03-09 07:05:1310"""
11
12from markdown.inlinepatterns import (AutolinkPattern, Pattern)
13from markdown.extensions import Extension
14
15
Nate Fischer0cc74af52019-06-01 01:07:3316# Best effort attempt to match URLs without matching past the end of the URL.
17# The first "[]" is copied from Linkifier.java (safe, reserved, and unsafe
18# characters). The second "[]" is similar to the first, but with English
19# punctuation removed, since the gitiles parser treats these as punction in the
20# sentence, rather than the final character of the URL.
21AUTOLINK_RE = (r'(https?://[a-zA-Z0-9$_.+!*\',%;:@=?#/~<>-]+'
22 r'[a-zA-Z0-9$_+*\'%@=#/~<-])')
vapierfceea8e2017-03-09 07:05:1323
24
25class _GitilesSmartQuotesExtension(Extension):
26 """Add Gitiles' simpler linkifier to Markdown."""
27 def extendMarkdown(self, md, md_globals):
28 md.inlinePatterns.add('gitilesautolink',
29 AutolinkPattern(AUTOLINK_RE, md),
30 '<autolink')
31
32
33def makeExtension(*args, **kwargs):
34 return _GitilesSmartQuotesExtension(*args, **kwargs)