gfm autolinks: backpedal on trailing punctuation

(see https://github.github.com/gfm/#extended-autolink-path-validation)
This commit is contained in:
Federico Soave 2018-01-23 04:48:08 +01:00
parent 187d46f294
commit ca455a68de

View File

@ -475,7 +475,7 @@ var inline = {
}; };
inline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/; inline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;
inline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/ inline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;
inline.autolink = replace(inline.autolink) inline.autolink = replace(inline.autolink)
('scheme', inline._scheme) ('scheme', inline._scheme)
@ -518,6 +518,7 @@ inline.gfm = merge({}, inline.normal, {
url: replace(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/) url: replace(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/)
('email', inline._email) ('email', inline._email)
(), (),
_backpedal: /(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,
del: /^~~(?=\S)([\s\S]*?\S)~~/, del: /^~~(?=\S)([\s\S]*?\S)~~/,
text: replace(inline.text) text: replace(inline.text)
(']|', '~]|') (']|', '~]|')
@ -611,6 +612,7 @@ InlineLexer.prototype.output = function(src) {
// url (gfm) // url (gfm)
if (!this.inLink && (cap = this.rules.url.exec(src))) { if (!this.inLink && (cap = this.rules.url.exec(src))) {
cap[0] = this.rules._backpedal.exec(cap[0])[0];
src = src.substring(cap[0].length); src = src.substring(cap[0].length);
if (cap[2] === '@') { if (cap[2] === '@') {
text = escape(cap[0]); text = escape(cap[0]);