2018-07-27 04:48:09 +03:00
|
|
|
"use strict";
|
|
|
|
|
|
|
|
function getOrderedListItemInfo(orderListItem, originalText) {
|
|
|
|
const [, numberText, marker, leadingSpaces] = originalText
|
|
|
|
.slice(
|
|
|
|
orderListItem.position.start.offset,
|
|
|
|
orderListItem.position.end.offset
|
|
|
|
)
|
|
|
|
.match(/^\s*(\d+)(\.|\))(\s*)/);
|
|
|
|
|
|
|
|
return { numberText, marker, leadingSpaces };
|
|
|
|
}
|
|
|
|
|
2018-09-01 08:35:29 +03:00
|
|
|
// workaround for https://github.com/remarkjs/remark/issues/351
|
|
|
|
// leading and trailing newlines are stripped by remark
|
|
|
|
function getFencedCodeBlockValue(node, originalText) {
|
|
|
|
const text = originalText.slice(
|
|
|
|
node.position.start.offset,
|
|
|
|
node.position.end.offset
|
|
|
|
);
|
|
|
|
|
|
|
|
const leadingSpaceCount = text.match(/^\s*/)[0].length;
|
|
|
|
const replaceRegex = new RegExp(`^\\s{0,${leadingSpaceCount}}`);
|
|
|
|
|
|
|
|
const lineContents = text.split("\n");
|
|
|
|
|
|
|
|
const markerStyle = text[leadingSpaceCount]; // ` or ~
|
|
|
|
const marker = text
|
|
|
|
.slice(leadingSpaceCount)
|
|
|
|
.match(new RegExp(`^[${markerStyle}]+`))[0];
|
|
|
|
|
|
|
|
// https://spec.commonmark.org/0.28/#example-104: Closing fences may be indented by 0-3 spaces
|
|
|
|
// https://spec.commonmark.org/0.28/#example-93: The closing code fence must be at least as long as the opening fence
|
|
|
|
const hasEndMarker = new RegExp(`^\\s{0,3}${marker}`).test(
|
|
|
|
lineContents[lineContents.length - 1].slice(
|
|
|
|
getIndent(lineContents.length - 1)
|
|
|
|
)
|
|
|
|
);
|
|
|
|
|
|
|
|
return lineContents
|
|
|
|
.slice(1, hasEndMarker ? -1 : undefined)
|
|
|
|
.map((x, i) => x.slice(getIndent(i + 1)).replace(replaceRegex, ""))
|
|
|
|
.join("\n");
|
|
|
|
|
|
|
|
function getIndent(lineIndex) {
|
|
|
|
return node.position.indent[lineIndex - 1] - 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-07-27 04:48:09 +03:00
|
|
|
module.exports = {
|
2018-09-01 08:35:29 +03:00
|
|
|
getFencedCodeBlockValue,
|
2018-07-27 04:48:09 +03:00
|
|
|
getOrderedListItemInfo
|
|
|
|
};
|