summaryrefslogtreecommitdiff
path: root/public/vendor/remarkable.js
diff options
context:
space:
mode:
Diffstat (limited to 'public/vendor/remarkable.js')
-rwxr-xr-xpublic/vendor/remarkable.js44
1 files changed, 31 insertions, 13 deletions
diff --git a/public/vendor/remarkable.js b/public/vendor/remarkable.js
index 81b8c01b..97c32370 100755
--- a/public/vendor/remarkable.js
+++ b/public/vendor/remarkable.js
@@ -5239,31 +5239,30 @@ StateBlock.prototype.skipCharsBack = function skipCharsBack(pos, code, min) {
}
return pos;
};
+
+function isSpace(code) {
+ switch (code) {
+ case 0x09:
+ case 0x20:
+ return true;
+ }
+ return false;
+}
// cut lines range from source.
StateBlock.prototype.getLines = function getLines(begin, end, indent, keepLastLF) {
- var i, first, last, queue, shift,
+ var i, lineIndent, ch, first, last, queue, lineStart,
line = begin;
if (begin >= end) {
return '';
}
- // Opt: don't use push queue for single line;
- if (line + 1 === end) {
- first = this.bMarks[line] + Math.min(this.tShift[line], indent);
- last = keepLastLF ? this.bMarks[end] : this.eMarks[end - 1];
- return this.src.slice(first, last);
- }
-
queue = new Array(end - begin);
for (i = 0; line < end; line++, i++) {
- shift = this.tShift[line];
- if (shift > indent) { shift = indent; }
- if (shift < 0) { shift = 0; }
-
- first = this.bMarks[line] + shift;
+ lineIndent = 0;
+ lineStart = first = this.bMarks[line];
if (line + 1 < end || keepLastLF) {
// No need for bounds check because we have fake entry on tail.
@@ -5272,6 +5271,25 @@ StateBlock.prototype.getLines = function getLines(begin, end, indent, keepLastLF
last = this.eMarks[line];
}
+ while (first < last && lineIndent < indent) {
+ ch = this.src.charCodeAt(first);
+
+ if (isSpace(ch)) {
+ if (ch === 0x09) {
+ lineIndent += 4 - lineIndent % 4;
+ } else {
+ lineIndent++;
+ }
+ } else if (first - lineStart < this.tShift[line]) {
+ // patched tShift masked characters to look like spaces (blockquotes, list markers)
+ lineIndent++;
+ } else {
+ break;
+ }
+
+ first++;
+ }
+
queue[i] = this.src.slice(first, last);
}