diff --git a/lib/jsdoc/util/markdown.js b/lib/jsdoc/util/markdown.js index 003ee2a4..4f2e198c 100644 --- a/lib/jsdoc/util/markdown.js +++ b/lib/jsdoc/util/markdown.js @@ -1,4 +1,4 @@ -/*global env: true */ +/*global env */ /** * Provides access to Markdown-related functions. @@ -8,6 +8,8 @@ */ 'use strict'; +var util = require('util'); + /** * Enumeration of Markdown parsers that are available. * @enum {String} @@ -64,6 +66,18 @@ function unescapeUrls(source) { return source.replace(/(https?)\:\\\/\\\//g, '$1://'); } +/** + * Escape characters in text within a code block. + * + * @param {string} source - The source text to escape. + * @return {string} The escaped source text. + */ +function escapeCode(source) { + return source.replace(/%s', level, text, level); }; + // Allow prettyprint to work on inline code samples markedRenderer.code = function(code, language) { - return '
' + code + '';
+ var langClass = language ? ' lang-' + language : '';
+
+ return util.format( '%s',
+ langClass, escapeCode(code) );
};
parserFunction = function(source) {
diff --git a/test/specs/jsdoc/util/markdown.js b/test/specs/jsdoc/util/markdown.js
index 488065fa..70062ed6 100644
--- a/test/specs/jsdoc/util/markdown.js
+++ b/test/specs/jsdoc/util/markdown.js
@@ -54,6 +54,18 @@ describe('jsdoc/util/markdown', function() {
expect(parser._parser).toEqual('marked');
});
+ it('should log an error if an unrecognized Markdown parser is requested', function() {
+ var logger = require('jsdoc/util/logger');
+ var parser;
+ var storage = setMarkdownConf({parser: 'not-a-real-markdown-parser'});
+
+ spyOn(logger, 'error');
+
+ parser = markdown.getParser();
+
+ expect(logger.error).toHaveBeenCalled();
+ });
+
it('should not apply formatting to inline tags when the marked parser is enabled', function() {
var storage = setMarkdownConf({parser: 'marked'});
var parser = markdown.getParser();
@@ -72,16 +84,18 @@ describe('jsdoc/util/markdown', function() {
.toBe('Visit {@link https://google.com}.
'); }); - it('should log an error if an unrecognized Markdown parser is requested', function() { - var logger = require('jsdoc/util/logger'); - var parser; - var storage = setMarkdownConf({parser: 'not-a-real-markdown-parser'}); + it('should escape characters in code blocks as needed', function() { + var parser = markdown.getParser(); + var markdownText = '' + + '```html\n' + + '\n' + + '```'; + var convertedText = '' + + '' +
+ '<p><a href="#">Sample \'HTML.\'</a></p>' +
+ '';
- spyOn(logger, 'error');
-
- parser = markdown.getParser();
-
- expect(logger.error).toHaveBeenCalled();
+ expect(parser(markdownText)).toBe(convertedText);
});
});
});