|
|
|
@ -173,7 +173,7 @@ exports.kMaxLength = kMaxLength()
|
|
|
|
|
function typedArraySupport () {
|
|
|
|
|
try {
|
|
|
|
|
var arr = new Uint8Array(1)
|
|
|
|
|
arr.foo = function () { return 42 }
|
|
|
|
|
arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
|
|
|
|
|
return arr.foo() === 42 && // typed array instances can be augmented
|
|
|
|
|
typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
|
|
|
|
|
arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
|
|
|
|
@ -317,7 +317,7 @@ function allocUnsafe (that, size) {
|
|
|
|
|
assertSize(size)
|
|
|
|
|
that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)
|
|
|
|
|
if (!Buffer.TYPED_ARRAY_SUPPORT) {
|
|
|
|
|
for (var i = 0; i < size; i++) {
|
|
|
|
|
for (var i = 0; i < size; ++i) {
|
|
|
|
|
that[i] = 0
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -373,7 +373,9 @@ function fromArrayBuffer (that, array, byteOffset, length) {
|
|
|
|
|
throw new RangeError('\'length\' is out of bounds')
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (length === undefined) {
|
|
|
|
|
if (byteOffset === undefined && length === undefined) {
|
|
|
|
|
array = new Uint8Array(array)
|
|
|
|
|
} else if (length === undefined) {
|
|
|
|
|
array = new Uint8Array(array, byteOffset)
|
|
|
|
|
} else {
|
|
|
|
|
array = new Uint8Array(array, byteOffset, length)
|
|
|
|
@ -495,14 +497,14 @@ Buffer.concat = function concat (list, length) {
|
|
|
|
|
var i
|
|
|
|
|
if (length === undefined) {
|
|
|
|
|
length = 0
|
|
|
|
|
for (i = 0; i < list.length; i++) {
|
|
|
|
|
for (i = 0; i < list.length; ++i) {
|
|
|
|
|
length += list[i].length
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var buffer = Buffer.allocUnsafe(length)
|
|
|
|
|
var pos = 0
|
|
|
|
|
for (i = 0; i < list.length; i++) {
|
|
|
|
|
for (i = 0; i < list.length; ++i) {
|
|
|
|
|
var buf = list[i]
|
|
|
|
|
if (!Buffer.isBuffer(buf)) {
|
|
|
|
|
throw new TypeError('"list" argument must be an Array of Buffers')
|
|
|
|
@ -534,7 +536,6 @@ function byteLength (string, encoding) {
|
|
|
|
|
switch (encoding) {
|
|
|
|
|
case 'ascii':
|
|
|
|
|
case 'binary':
|
|
|
|
|
// Deprecated
|
|
|
|
|
case 'raw':
|
|
|
|
|
case 'raws':
|
|
|
|
|
return len
|
|
|
|
@ -772,15 +773,16 @@ function arrayIndexOf (arr, val, byteOffset, encoding) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var foundIndex = -1
|
|
|
|
|
for (var i = 0; byteOffset + i < arrLength; i++) {
|
|
|
|
|
if (read(arr, byteOffset + i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
|
|
|
|
|
for (var i = byteOffset; i < arrLength; ++i) {
|
|
|
|
|
if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
|
|
|
|
|
if (foundIndex === -1) foundIndex = i
|
|
|
|
|
if (i - foundIndex + 1 === valLength) return (byteOffset + foundIndex) * indexSize
|
|
|
|
|
if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
|
|
|
|
|
} else {
|
|
|
|
|
if (foundIndex !== -1) i -= i - foundIndex
|
|
|
|
|
foundIndex = -1
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return -1
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -845,7 +847,7 @@ function hexWrite (buf, string, offset, length) {
|
|
|
|
|
if (length > strLen / 2) {
|
|
|
|
|
length = strLen / 2
|
|
|
|
|
}
|
|
|
|
|
for (var i = 0; i < length; i++) {
|
|
|
|
|
for (var i = 0; i < length; ++i) {
|
|
|
|
|
var parsed = parseInt(string.substr(i * 2, 2), 16)
|
|
|
|
|
if (isNaN(parsed)) return i
|
|
|
|
|
buf[offset + i] = parsed
|
|
|
|
@ -1059,7 +1061,7 @@ function asciiSlice (buf, start, end) {
|
|
|
|
|
var ret = ''
|
|
|
|
|
end = Math.min(buf.length, end)
|
|
|
|
|
|
|
|
|
|
for (var i = start; i < end; i++) {
|
|
|
|
|
for (var i = start; i < end; ++i) {
|
|
|
|
|
ret += String.fromCharCode(buf[i] & 0x7F)
|
|
|
|
|
}
|
|
|
|
|
return ret
|
|
|
|
@ -1069,7 +1071,7 @@ function binarySlice (buf, start, end) {
|
|
|
|
|
var ret = ''
|
|
|
|
|
end = Math.min(buf.length, end)
|
|
|
|
|
|
|
|
|
|
for (var i = start; i < end; i++) {
|
|
|
|
|
for (var i = start; i < end; ++i) {
|
|
|
|
|
ret += String.fromCharCode(buf[i])
|
|
|
|
|
}
|
|
|
|
|
return ret
|
|
|
|
@ -1082,7 +1084,7 @@ function hexSlice (buf, start, end) {
|
|
|
|
|
if (!end || end < 0 || end > len) end = len
|
|
|
|
|
|
|
|
|
|
var out = ''
|
|
|
|
|
for (var i = start; i < end; i++) {
|
|
|
|
|
for (var i = start; i < end; ++i) {
|
|
|
|
|
out += toHex(buf[i])
|
|
|
|
|
}
|
|
|
|
|
return out
|
|
|
|
@ -1125,7 +1127,7 @@ Buffer.prototype.slice = function slice (start, end) {
|
|
|
|
|
} else {
|
|
|
|
|
var sliceLen = end - start
|
|
|
|
|
newBuf = new Buffer(sliceLen, undefined)
|
|
|
|
|
for (var i = 0; i < sliceLen; i++) {
|
|
|
|
|
for (var i = 0; i < sliceLen; ++i) {
|
|
|
|
|
newBuf[i] = this[i + start]
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -1352,7 +1354,7 @@ Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
|
|
|
|
|
|
|
|
|
|
function objectWriteUInt16 (buf, value, offset, littleEndian) {
|
|
|
|
|
if (value < 0) value = 0xffff + value + 1
|
|
|
|
|
for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
|
|
|
|
|
for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {
|
|
|
|
|
buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
|
|
|
|
|
(littleEndian ? i : 1 - i) * 8
|
|
|
|
|
}
|
|
|
|
@ -1386,7 +1388,7 @@ Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert
|
|
|
|
|
|
|
|
|
|
function objectWriteUInt32 (buf, value, offset, littleEndian) {
|
|
|
|
|
if (value < 0) value = 0xffffffff + value + 1
|
|
|
|
|
for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
|
|
|
|
|
for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {
|
|
|
|
|
buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -1601,12 +1603,12 @@ Buffer.prototype.copy = function copy (target, targetStart, start, end) {
|
|
|
|
|
|
|
|
|
|
if (this === target && start < targetStart && targetStart < end) {
|
|
|
|
|
// descending copy from end
|
|
|
|
|
for (i = len - 1; i >= 0; i--) {
|
|
|
|
|
for (i = len - 1; i >= 0; --i) {
|
|
|
|
|
target[i + targetStart] = this[i + start]
|
|
|
|
|
}
|
|
|
|
|
} else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
|
|
|
|
|
// ascending copy from start
|
|
|
|
|
for (i = 0; i < len; i++) {
|
|
|
|
|
for (i = 0; i < len; ++i) {
|
|
|
|
|
target[i + targetStart] = this[i + start]
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
@ -1667,7 +1669,7 @@ Buffer.prototype.fill = function fill (val, start, end, encoding) {
|
|
|
|
|
|
|
|
|
|
var i
|
|
|
|
|
if (typeof val === 'number') {
|
|
|
|
|
for (i = start; i < end; i++) {
|
|
|
|
|
for (i = start; i < end; ++i) {
|
|
|
|
|
this[i] = val
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
@ -1675,7 +1677,7 @@ Buffer.prototype.fill = function fill (val, start, end, encoding) {
|
|
|
|
|
? val
|
|
|
|
|
: utf8ToBytes(new Buffer(val, encoding).toString())
|
|
|
|
|
var len = bytes.length
|
|
|
|
|
for (i = 0; i < end - start; i++) {
|
|
|
|
|
for (i = 0; i < end - start; ++i) {
|
|
|
|
|
this[i + start] = bytes[i % len]
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -1717,7 +1719,7 @@ function utf8ToBytes (string, units) {
|
|
|
|
|
var leadSurrogate = null
|
|
|
|
|
var bytes = []
|
|
|
|
|
|
|
|
|
|
for (var i = 0; i < length; i++) {
|
|
|
|
|
for (var i = 0; i < length; ++i) {
|
|
|
|
|
codePoint = string.charCodeAt(i)
|
|
|
|
|
|
|
|
|
|
// is surrogate component
|
|
|
|
@ -1792,7 +1794,7 @@ function utf8ToBytes (string, units) {
|
|
|
|
|
|
|
|
|
|
function asciiToBytes (str) {
|
|
|
|
|
var byteArray = []
|
|
|
|
|
for (var i = 0; i < str.length; i++) {
|
|
|
|
|
for (var i = 0; i < str.length; ++i) {
|
|
|
|
|
// Node's code seems to be doing this and not & 0x7F..
|
|
|
|
|
byteArray.push(str.charCodeAt(i) & 0xFF)
|
|
|
|
|
}
|
|
|
|
@ -1802,7 +1804,7 @@ function asciiToBytes (str) {
|
|
|
|
|
function utf16leToBytes (str, units) {
|
|
|
|
|
var c, hi, lo
|
|
|
|
|
var byteArray = []
|
|
|
|
|
for (var i = 0; i < str.length; i++) {
|
|
|
|
|
for (var i = 0; i < str.length; ++i) {
|
|
|
|
|
if ((units -= 2) < 0) break
|
|
|
|
|
|
|
|
|
|
c = str.charCodeAt(i)
|
|
|
|
@ -1820,7 +1822,7 @@ function base64ToBytes (str) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function blitBuffer (src, dst, offset, length) {
|
|
|
|
|
for (var i = 0; i < length; i++) {
|
|
|
|
|
for (var i = 0; i < length; ++i) {
|
|
|
|
|
if ((i + offset >= dst.length) || (i >= src.length)) break
|
|
|
|
|
dst[i + offset] = src[i]
|
|
|
|
|
}
|
|
|
|
@ -3543,7 +3545,7 @@ CodeMirror.overlayMode = function(base, overlay, combine) {
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
function hiddenTextarea() {
|
|
|
|
|
var te = elt("textarea", null, null, "position: absolute; padding: 0; width: 1px; height: 1em; outline: none");
|
|
|
|
|
var te = elt("textarea", null, null, "position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none");
|
|
|
|
|
var div = elt("div", [te], null, "overflow: hidden; position: relative; width: 3px; height: 0px;");
|
|
|
|
|
// The textarea is kept positioned near the cursor to prevent the
|
|
|
|
|
// fact that it'll be scrolled into view on input from scrolling
|
|
|
|
@ -5010,6 +5012,16 @@ CodeMirror.overlayMode = function(base, overlay, combine) {
|
|
|
|
|
return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function getUsefulRect(rects, bias) {
|
|
|
|
|
var rect = nullRect
|
|
|
|
|
if (bias == "left") for (var i = 0; i < rects.length; i++) {
|
|
|
|
|
if ((rect = rects[i]).left != rect.right) break
|
|
|
|
|
} else for (var i = rects.length - 1; i >= 0; i--) {
|
|
|
|
|
if ((rect = rects[i]).left != rect.right) break
|
|
|
|
|
}
|
|
|
|
|
return rect
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function measureCharInner(cm, prepared, ch, bias) {
|
|
|
|
|
var place = nodeAndOffsetInLineMap(prepared.map, ch, bias);
|
|
|
|
|
var node = place.node, start = place.start, end = place.end, collapse = place.collapse;
|
|
|
|
@ -5019,17 +5031,10 @@ CodeMirror.overlayMode = function(base, overlay, combine) {
|
|
|
|
|
for (var i = 0; i < 4; i++) { // Retry a maximum of 4 times when nonsense rectangles are returned
|
|
|
|
|
while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) --start;
|
|
|
|
|
while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) ++end;
|
|
|
|
|
if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart) {
|
|
|
|
|
if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart)
|
|
|
|
|
rect = node.parentNode.getBoundingClientRect();
|
|
|
|
|
} else if (ie && cm.options.lineWrapping) {
|
|
|
|
|
var rects = range(node, start, end).getClientRects();
|
|
|
|
|
if (rects.length)
|
|
|
|
|
rect = rects[bias == "right" ? rects.length - 1 : 0];
|
|
|
|
|
else
|
|
|
|
|
rect = nullRect;
|
|
|
|
|
} else {
|
|
|
|
|
rect = range(node, start, end).getBoundingClientRect() || nullRect;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
rect = getUsefulRect(range(node, start, end).getClientRects(), bias)
|
|
|
|
|
if (rect.left || rect.right || start == 0) break;
|
|
|
|
|
end = start;
|
|
|
|
|
start = start - 1;
|
|
|
|
@ -5255,10 +5260,23 @@ CodeMirror.overlayMode = function(base, overlay, combine) {
|
|
|
|
|
for (;;) {
|
|
|
|
|
if (bidi ? to == from || to == moveVisually(lineObj, from, 1) : to - from <= 1) {
|
|
|
|
|
var ch = x < fromX || x - fromX <= toX - x ? from : to;
|
|
|
|
|
var outside = ch == from ? fromOutside : toOutside
|
|
|
|
|
var xDiff = x - (ch == from ? fromX : toX);
|
|
|
|
|
// This is a kludge to handle the case where the coordinates
|
|
|
|
|
// are after a line-wrapped line. We should replace it with a
|
|
|
|
|
// more general handling of cursor positions around line
|
|
|
|
|
// breaks. (Issue #4078)
|
|
|
|
|
if (toOutside && !bidi && !/\s/.test(lineObj.text.charAt(ch)) && xDiff > 0 &&
|
|
|
|
|
ch < lineObj.text.length && preparedMeasure.view.measure.heights.length > 1) {
|
|
|
|
|
var charSize = measureCharPrepared(cm, preparedMeasure, ch, "right");
|
|
|
|
|
if (innerOff <= charSize.bottom && innerOff >= charSize.top && Math.abs(x - charSize.right) < xDiff) {
|
|
|
|
|
outside = false
|
|
|
|
|
ch++
|
|
|
|
|
xDiff = x - charSize.right
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
while (isExtendingChar(lineObj.text.charAt(ch))) ++ch;
|
|
|
|
|
var pos = PosWithInfo(lineNo, ch, ch == from ? fromOutside : toOutside,
|
|
|
|
|
xDiff < -1 ? -1 : xDiff > 1 ? 1 : 0);
|
|
|
|
|
var pos = PosWithInfo(lineNo, ch, outside, xDiff < -1 ? -1 : xDiff > 1 ? 1 : 0);
|
|
|
|
|
return pos;
|
|
|
|
|
}
|
|
|
|
|
var step = Math.ceil(dist / 2), middle = from + step;
|
|
|
|
@ -5982,6 +6000,7 @@ CodeMirror.overlayMode = function(base, overlay, combine) {
|
|
|
|
|
// Let the drag handler handle this.
|
|
|
|
|
if (webkit) display.scroller.draggable = true;
|
|
|
|
|
cm.state.draggingText = dragEnd;
|
|
|
|
|
dragEnd.copy = mac ? e.altKey : e.ctrlKey
|
|
|
|
|
// IE's approach to draggable
|
|
|
|
|
if (display.scroller.dragDrop) display.scroller.dragDrop();
|
|
|
|
|
on(document, "mouseup", dragEnd);
|
|
|
|
@ -6212,7 +6231,7 @@ CodeMirror.overlayMode = function(base, overlay, combine) {
|
|
|
|
|
try {
|
|
|
|
|
var text = e.dataTransfer.getData("Text");
|
|
|
|
|
if (text) {
|
|
|
|
|
if (cm.state.draggingText && !(mac ? e.altKey : e.ctrlKey))
|
|
|
|
|
if (cm.state.draggingText && !cm.state.draggingText.copy)
|
|
|
|
|
var selected = cm.listSelections();
|
|
|
|
|
setSelectionNoUndo(cm.doc, simpleSelection(pos, pos));
|
|
|
|
|
if (selected) for (var i = 0; i < selected.length; ++i)
|
|
|
|
@ -6727,7 +6746,7 @@ CodeMirror.overlayMode = function(base, overlay, combine) {
|
|
|
|
|
|
|
|
|
|
// Revert a change stored in a document's history.
|
|
|
|
|
function makeChangeFromHistory(doc, type, allowSelectionOnly) {
|
|
|
|
|
if (doc.cm && doc.cm.state.suppressEdits) return;
|
|
|
|
|
if (doc.cm && doc.cm.state.suppressEdits && !allowSelectionOnly) return;
|
|
|
|
|
|
|
|
|
|
var hist = doc.history, event, selAfter = doc.sel;
|
|
|
|
|
var source = type == "undo" ? hist.done : hist.undone, dest = type == "undo" ? hist.undone : hist.done;
|
|
|
|
@ -9252,6 +9271,7 @@ CodeMirror.overlayMode = function(base, overlay, combine) {
|
|
|
|
|
var content = elt("span", null, null, webkit ? "padding-right: .1px" : null);
|
|
|
|
|
var builder = {pre: elt("pre", [content], "CodeMirror-line"), content: content,
|
|
|
|
|
col: 0, pos: 0, cm: cm,
|
|
|
|
|
trailingSpace: false,
|
|
|
|
|
splitSpaces: (ie || webkit) && cm.getOption("lineWrapping")};
|
|
|
|
|
lineView.measure = {};
|
|
|
|
|
|
|
|
|
@ -9313,7 +9333,7 @@ CodeMirror.overlayMode = function(base, overlay, combine) {
|
|
|
|
|
// the line map. Takes care to render special characters separately.
|
|
|
|
|
function buildToken(builder, text, style, startStyle, endStyle, title, css) {
|
|
|
|
|
if (!text) return;
|
|
|
|
|
var displayText = builder.splitSpaces ? text.replace(/ {3,}/g, splitSpaces) : text;
|
|
|
|
|
var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text
|
|
|
|
|
var special = builder.cm.state.specialChars, mustWrap = false;
|
|
|
|
|
if (!special.test(text)) {
|
|
|
|
|
builder.col += text.length;
|
|
|
|
@ -9358,6 +9378,7 @@ CodeMirror.overlayMode = function(base, overlay, combine) {
|
|
|
|
|
builder.pos++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32
|
|
|
|
|
if (style || startStyle || endStyle || mustWrap || css) {
|
|
|
|
|
var fullStyle = style || "";
|
|
|
|
|
if (startStyle) fullStyle += startStyle;
|
|
|
|
@ -9369,11 +9390,17 @@ CodeMirror.overlayMode = function(base, overlay, combine) {
|
|
|
|
|
builder.content.appendChild(content);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function splitSpaces(old) {
|
|
|
|
|
var out = " ";
|
|
|
|
|
for (var i = 0; i < old.length - 2; ++i) out += i % 2 ? " " : "\u00a0";
|
|
|
|
|
out += " ";
|
|
|
|
|
return out;
|
|
|
|
|
function splitSpaces(text, trailingBefore) {
|
|
|
|
|
if (text.length > 1 && !/ /.test(text)) return text
|
|
|
|
|
var spaceBefore = trailingBefore, result = ""
|
|
|
|
|
for (var i = 0; i < text.length; i++) {
|
|
|
|
|
var ch = text.charAt(i)
|
|
|
|
|
if (ch == " " && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32))
|
|
|
|
|
ch = "\u00a0"
|
|
|
|
|
result += ch
|
|
|
|
|
spaceBefore = ch == " "
|
|
|
|
|
}
|
|
|
|
|
return result
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Work around nonsense dimensions being reported for stretches of
|
|
|
|
@ -9410,6 +9437,7 @@ CodeMirror.overlayMode = function(base, overlay, combine) {
|
|
|
|
|
builder.content.appendChild(widget);
|
|
|
|
|
}
|
|
|
|
|
builder.pos += size;
|
|
|
|
|
builder.trailingSpace = false
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Outputs a number of spans to make up a line, taking highlighting
|
|
|
|
@ -10857,8 +10885,9 @@ CodeMirror.overlayMode = function(base, overlay, combine) {
|
|
|
|
|
if (badBidiRects != null) return badBidiRects;
|
|
|
|
|
var txt = removeChildrenAndAdd(measure, document.createTextNode("A\u062eA"));
|
|
|
|
|
var r0 = range(txt, 0, 1).getBoundingClientRect();
|
|
|
|
|
if (!r0 || r0.left == r0.right) return false; // Safari returns null in some cases (#2780)
|
|
|
|
|
var r1 = range(txt, 1, 2).getBoundingClientRect();
|
|
|
|
|
removeChildren(measure);
|
|
|
|
|
if (!r0 || r0.left == r0.right) return false; // Safari returns null in some cases (#2780)
|
|
|
|
|
return badBidiRects = (r1.right - r0.right < 3);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -11224,7 +11253,7 @@ CodeMirror.overlayMode = function(base, overlay, combine) {
|
|
|
|
|
|
|
|
|
|
// THE END
|
|
|
|
|
|
|
|
|
|
CodeMirror.version = "5.15.2";
|
|
|
|
|
CodeMirror.version = "5.17.0";
|
|
|
|
|
|
|
|
|
|
return CodeMirror;
|
|
|
|
|
});
|
|
|
|
@ -11427,7 +11456,9 @@ CodeMirror.defineMode("markdown", function(cmCfg, modeCfg) {
|
|
|
|
|
list2: "variable-3",
|
|
|
|
|
list3: "keyword",
|
|
|
|
|
hr: "hr",
|
|
|
|
|
image: "tag",
|
|
|
|
|
image: "image",
|
|
|
|
|
imageAltText: "image-alt-text",
|
|
|
|
|
imageMarker: "image-marker",
|
|
|
|
|
formatting: "formatting",
|
|
|
|
|
linkInline: "link",
|
|
|
|
|
linkEmail: "link",
|
|
|
|
@ -11677,6 +11708,9 @@ CodeMirror.defineMode("markdown", function(cmCfg, modeCfg) {
|
|
|
|
|
if (state.strikethrough) { styles.push(tokenTypes.strikethrough); }
|
|
|
|
|
if (state.linkText) { styles.push(tokenTypes.linkText); }
|
|
|
|
|
if (state.code) { styles.push(tokenTypes.code); }
|
|
|
|
|
if (state.image) { styles.push(tokenTypes.image); }
|
|
|
|
|
if (state.imageAltText) { styles.push(tokenTypes.imageAltText, "link"); }
|
|
|
|
|
if (state.imageMarker) { styles.push(tokenTypes.imageMarker); }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (state.header) { styles.push(tokenTypes.header, tokenTypes.header + "-" + state.header); }
|
|
|
|
@ -11796,12 +11830,29 @@ CodeMirror.defineMode("markdown", function(cmCfg, modeCfg) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (ch === '!' && stream.match(/\[[^\]]*\] ?(?:\(|\[)/, false)) {
|
|
|
|
|
stream.match(/\[[^\]]*\]/);
|
|
|
|
|
state.imageMarker = true;
|
|
|
|
|
state.image = true;
|
|
|
|
|
if (modeCfg.highlightFormatting) state.formatting = "image";
|
|
|
|
|
return getType(state);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (ch === '[' && state.imageMarker) {
|
|
|
|
|
state.imageMarker = false;
|
|
|
|
|
state.imageAltText = true
|
|
|
|
|
if (modeCfg.highlightFormatting) state.formatting = "image";
|
|
|
|
|
return getType(state);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (ch === ']' && state.imageAltText) {
|
|
|
|
|
if (modeCfg.highlightFormatting) state.formatting = "image";
|
|
|
|
|
var type = getType(state);
|
|
|
|
|
state.imageAltText = false;
|
|
|
|
|
state.image = false;
|
|
|
|
|
state.inline = state.f = linkHref;
|
|
|
|
|
return tokenTypes.image;
|
|
|
|
|
return type;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (ch === '[' && stream.match(/[^\]]*\](\(.*\)| ?\[.*?\])/, false)) {
|
|
|
|
|
if (ch === '[' && stream.match(/[^\]]*\](\(.*\)| ?\[.*?\])/, false) && !state.image) {
|
|
|
|
|
state.linkText = true;
|
|
|
|
|
if (modeCfg.highlightFormatting) state.formatting = "link";
|
|
|
|
|
return getType(state);
|
|
|
|
@ -16856,10 +16907,16 @@ SimpleMDE.prototype.createStatusbar = function(status) {
|
|
|
|
|
* Get or set the text content.
|
|
|
|
|
*/
|
|
|
|
|
SimpleMDE.prototype.value = function(val) {
|
|
|
|
|
var cm = this.codemirror;
|
|
|
|
|
if(val === undefined) {
|
|
|
|
|
return this.codemirror.getValue();
|
|
|
|
|
return cm.getValue();
|
|
|
|
|
} else {
|
|
|
|
|
this.codemirror.getDoc().setValue(val);
|
|
|
|
|
cm.getDoc().setValue(val);
|
|
|
|
|
if(this.isPreviewActive()) {
|
|
|
|
|
var wrapper = cm.getWrapperElement();
|
|
|
|
|
var preview = wrapper.lastChild;
|
|
|
|
|
preview.innerHTML = this.options.previewRender(val, preview);
|
|
|
|
|
}
|
|
|
|
|
return this;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|