From 59ccb985cd05eb0541494bd5cdcf7c9aa90e215e Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Tue, 6 Dec 2016 15:07:13 -0800 Subject: [PATCH] Unescape Markdown Escapes inside of a link Fixes #14968 **Bug** Due to https://github.com/chjj/marked/issues/829, markdown escapes inside of links are currently not rendered properly. This also can effect regular text that contains characters that are escaped when we convert them to markdown text. **Fix** For links, remove markdown escapes before rendering them. --- src/vs/base/browser/htmlContentRenderer.ts | 5 ++++- src/vs/base/common/htmlContent.ts | 6 ++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/vs/base/browser/htmlContentRenderer.ts b/src/vs/base/browser/htmlContentRenderer.ts index 38db8a72cca..a7719542863 100644 --- a/src/vs/base/browser/htmlContentRenderer.ts +++ b/src/vs/base/browser/htmlContentRenderer.ts @@ -9,7 +9,7 @@ import DOM = require('vs/base/browser/dom'); import { defaultGenerator } from 'vs/base/common/idGenerator'; import { escape } from 'vs/base/common/strings'; import { TPromise } from 'vs/base/common/winjs.base'; -import { IHTMLContentElement, MarkedString } from 'vs/base/common/htmlContent'; +import { IHTMLContentElement, MarkedString, removeMarkdownEscapes } from 'vs/base/common/htmlContent'; import { marked } from 'vs/base/common/marked/marked'; import { IMouseEvent } from 'vs/base/browser/mouseEvent'; @@ -127,6 +127,9 @@ function _renderHtml(content: IHTMLContentElement, options: RenderOptions = {}): return ''; }; renderer.link = (href, title, text): string => { + // Remove markdown escapes in href and title. Workaround for https://github.com/chjj/marked/issues/829 + title = removeMarkdownEscapes(title); + href = removeMarkdownEscapes(href); return `${text}`; }; renderer.paragraph = (text): string => { diff --git a/src/vs/base/common/htmlContent.ts b/src/vs/base/common/htmlContent.ts index 57f8a8dc960..9a3caf34ece 100644 --- a/src/vs/base/common/htmlContent.ts +++ b/src/vs/base/common/htmlContent.ts @@ -71,6 +71,12 @@ export function textToMarkedString(text: string): MarkedString { return text.replace(/[\\`*_{}[\]()#+\-.!]/g, '\\$&'); // escape markdown syntax tokens: http://daringfireball.net/projects/markdown/syntax#backslash } +export function removeMarkdownEscapes(text: string): string { + if (!text) { + return text; + } + return text.replace(/\\([\\`*_{}[\]()#+\-.!])/g, '$1'); +} export interface IHTMLContentElement { /**