docs(xml): code escaping for XMLDocs generation (#5703)

This commit is contained in:
Anže Vodovnik 2021-03-03 19:39:06 +01:00 committed by GitHub
parent 23b035b052
commit ad27f3bf02
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -60,7 +60,7 @@ function _innerRenderNodes(nodes, maxColumns = 80, wrapParagraphs = true) {
else
summary.push(..._wrapAndEscape(node, maxColumns));
} else if (node.type === 'code' && node.codeLang === 'csharp') {
_wrapInNode('code', node.lines, summary);
_wrapInNode('code', _wrapCode(node.lines), summary);
} else if (node.type === 'li') {
_wrapInNode('item><description', _wrapAndEscape(node, maxColumns), summary, '/description></item');
} else if (node.type === 'note') {
@ -73,6 +73,19 @@ function _innerRenderNodes(nodes, maxColumns = 80, wrapParagraphs = true) {
return { summary, remarks };
}
function _wrapCode(lines) {
let i = 0;
let out = [];
for (let line of lines) {
line = line.replace('<', '&lt;').replace('>', '&gt;');
if (i < lines.length - 1)
line = line + "<br/>";
out.push(line);
i++;
}
return out;
}
function _wrapInNode(tag, nodes, target, closingTag = null) {
if (nodes.length === 0)
return;
@ -106,7 +119,7 @@ function _wrapAndEscape(node, maxColumns = 0) {
let text = node.text;
text = text.replace(/`([^`]*)`/g, (match, code) => `<c>${code.replace('<', '&lt;').replace('>', '&gt;')}</c>`);
text = text.replace(/\[(.*?)\]\((.*?\))/g, (match, linkName, linkUrl) => {
text = text.replace(/\[(.*?)\]\((.*?\))/g, (match, linkName, linkUrl) => {
return `<a href="${linkUrl}">${linkName}</a>`;
});
const words = text.split(' ');