@ -286,6 +286,8 @@ if (Buffer.TYPED_ARRAY_SUPPORT) {
function assertSize ( size ) {
if ( typeof size !== 'number' ) {
throw new TypeError ( '"size" argument must be a number' )
} else if ( size < 0 ) {
throw new RangeError ( '"size" argument must not be negative' )
}
}
@ -349,12 +351,20 @@ function fromString (that, string, encoding) {
var length = byteLength ( string , encoding ) | 0
that = createBuffer ( that , length )
that . write ( string , encoding )
var actual = that . write ( string , encoding )
if ( actual !== length ) {
// Writing a hex string, for example, that contains invalid characters will
// cause everything after the first invalid character to be ignored. (e.g.
// 'abxxcd' will be treated as 'ab')
that = that . slice ( 0 , actual )
}
return that
}
function fromArrayLike ( that , array ) {
var length = checked ( array . length ) | 0
var length = array. length < 0 ? 0 : checked( array . length ) | 0
that = createBuffer ( that , length )
for ( var i = 0 ; i < length ; i += 1 ) {
that [ i ] = array [ i ] & 255
@ -423,7 +433,7 @@ function fromObject (that, obj) {
}
function checked ( length ) {
// Note: cannot use `length < kMaxLength ` here because that fails when
// Note: cannot use `length < kMaxLength () ` here because that fails when
// length is NaN (which is otherwise coerced to zero.)
if ( length >= kMaxLength ( ) ) {
throw new RangeError ( 'Attempt to allocate Buffer larger than maximum ' +
@ -472,9 +482,9 @@ Buffer.isEncoding = function isEncoding (encoding) {
case 'utf8' :
case 'utf-8' :
case 'ascii' :
case 'latin1' :
case 'binary' :
case 'base64' :
case 'raw' :
case 'ucs2' :
case 'ucs-2' :
case 'utf16le' :
@ -535,9 +545,8 @@ function byteLength (string, encoding) {
for ( ; ; ) {
switch ( encoding ) {
case 'ascii' :
case 'latin1' :
case 'binary' :
case 'raw' :
case 'raws' :
return len
case 'utf8' :
case 'utf-8' :
@ -610,8 +619,9 @@ function slowToString (encoding, start, end) {
case 'ascii' :
return asciiSlice ( this , start , end )
case 'latin1' :
case 'binary' :
return binary Slice( this , start , end )
return latin1 Slice( this , start , end )
case 'base64' :
return base64Slice ( this , start , end )
@ -663,6 +673,20 @@ Buffer.prototype.swap32 = function swap32 () {
return this
}
Buffer . prototype . swap64 = function swap64 ( ) {
var len = this . length
if ( len % 8 !== 0 ) {
throw new RangeError ( 'Buffer size must be a multiple of 64-bits' )
}
for ( var i = 0 ; i < len ; i += 8 ) {
swap ( this , i , i + 7 )
swap ( this , i + 1 , i + 6 )
swap ( this , i + 2 , i + 5 )
swap ( this , i + 3 , i + 4 )
}
return this
}
Buffer . prototype . toString = function toString ( ) {
var length = this . length | 0
if ( length === 0 ) return ''
@ -745,7 +769,73 @@ Buffer.prototype.compare = function compare (target, start, end, thisStart, this
return 0
}
function arrayIndexOf ( arr , val , byteOffset , encoding ) {
// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
//
// Arguments:
// - buffer - a Buffer to search
// - val - a string, Buffer, or number
// - byteOffset - an index into `buffer`; will be clamped to an int32
// - encoding - an optional encoding, relevant is val is a string
// - dir - true for indexOf, false for lastIndexOf
function bidirectionalIndexOf ( buffer , val , byteOffset , encoding , dir ) {
// Empty buffer means no match
if ( buffer . length === 0 ) return - 1
// Normalize byteOffset
if ( typeof byteOffset === 'string' ) {
encoding = byteOffset
byteOffset = 0
} else if ( byteOffset > 0x7fffffff ) {
byteOffset = 0x7fffffff
} else if ( byteOffset < - 0x80000000 ) {
byteOffset = - 0x80000000
}
byteOffset = + byteOffset // Coerce to Number.
if ( isNaN ( byteOffset ) ) {
// byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
byteOffset = dir ? 0 : ( buffer . length - 1 )
}
// Normalize byteOffset: negative offsets start from the end of the buffer
if ( byteOffset < 0 ) byteOffset = buffer . length + byteOffset
if ( byteOffset >= buffer . length ) {
if ( dir ) return - 1
else byteOffset = buffer . length - 1
} else if ( byteOffset < 0 ) {
if ( dir ) byteOffset = 0
else return - 1
}
// Normalize val
if ( typeof val === 'string' ) {
val = Buffer . from ( val , encoding )
}
// Finally, search either indexOf (if dir is true) or lastIndexOf
if ( Buffer . isBuffer ( val ) ) {
// Special case: looking for empty string/buffer always fails
if ( val . length === 0 ) {
return - 1
}
return arrayIndexOf ( buffer , val , byteOffset , encoding , dir )
} else if ( typeof val === 'number' ) {
val = val & 0xFF // Search for a byte value [0-255]
if ( Buffer . TYPED _ARRAY _SUPPORT &&
typeof Uint8Array . prototype . indexOf === 'function' ) {
if ( dir ) {
return Uint8Array . prototype . indexOf . call ( buffer , val , byteOffset )
} else {
return Uint8Array . prototype . lastIndexOf . call ( buffer , val , byteOffset )
}
}
return arrayIndexOf ( buffer , [ val ] , byteOffset , encoding , dir )
}
throw new TypeError ( 'val must be string, number or Buffer' )
}
function arrayIndexOf ( arr , val , byteOffset , encoding , dir ) {
var indexSize = 1
var arrLength = arr . length
var valLength = val . length
@ -772,60 +862,45 @@ function arrayIndexOf (arr, val, byteOffset, encoding) {
}
}
var foundIndex = - 1
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 foundIndex * indexSize
} else {
if ( foundIndex !== - 1 ) i -= i - foundIndex
foundIndex = - 1
var i
if ( dir ) {
var foundIndex = - 1
for ( 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 foundIndex * indexSize
} else {
if ( foundIndex !== - 1 ) i -= i - foundIndex
foundIndex = - 1
}
}
} else {
if ( byteOffset + valLength > arrLength ) byteOffset = arrLength - valLength
for ( i = byteOffset ; i >= 0 ; i -- ) {
var found = true
for ( var j = 0 ; j < valLength ; j ++ ) {
if ( read ( arr , i + j ) !== read ( val , j ) ) {
found = false
break
}
}
if ( found ) return i
}
}
return - 1
}
Buffer . prototype . indexOf = function indexOf ( val , byteOffset , encoding ) {
if ( typeof byteOffset === 'string' ) {
encoding = byteOffset
byteOffset = 0
} else if ( byteOffset > 0x7fffffff ) {
byteOffset = 0x7fffffff
} else if ( byteOffset < - 0x80000000 ) {
byteOffset = - 0x80000000
}
byteOffset >>= 0
if ( this . length === 0 ) return - 1
if ( byteOffset >= this . length ) return - 1
// Negative offsets start from the end of the buffer
if ( byteOffset < 0 ) byteOffset = Math . max ( this . length + byteOffset , 0 )
if ( typeof val === 'string' ) {
val = Buffer . from ( val , encoding )
}
if ( Buffer . isBuffer ( val ) ) {
// special case: looking for empty string/buffer always fails
if ( val . length === 0 ) {
return - 1
}
return arrayIndexOf ( this , val , byteOffset , encoding )
}
if ( typeof val === 'number' ) {
if ( Buffer . TYPED _ARRAY _SUPPORT && Uint8Array . prototype . indexOf === 'function' ) {
return Uint8Array . prototype . indexOf . call ( this , val , byteOffset )
}
return arrayIndexOf ( this , [ val ] , byteOffset , encoding )
}
Buffer . prototype . includes = function includes ( val , byteOffset , encoding ) {
return this . indexOf ( val , byteOffset , encoding ) !== - 1
}
throw new TypeError ( 'val must be string, number or Buffer' )
Buffer . prototype . indexOf = function indexOf ( val , byteOffset , encoding ) {
return bidirectionalIndexOf ( this , val , byteOffset , encoding , true )
}
Buffer . prototype . includes = function includes ( val , byteOffset , encoding ) {
return this . indexOf ( val , byteOffset , encoding ) !== - 1
Buffer . prototype . lastIndexOf = function lastIndexOf ( val , byteOffset , encoding ) {
return bidirectionalIndexOf ( this , val , byteOffset , encoding , false )
}
function hexWrite ( buf , string , offset , length ) {
@ -842,7 +917,7 @@ function hexWrite (buf, string, offset, length) {
// must be an even number of digits
var strLen = string . length
if ( strLen % 2 !== 0 ) throw new Error( 'Invalid hex string' )
if ( strLen % 2 !== 0 ) throw new Type Error( 'Invalid hex string' )
if ( length > strLen / 2 ) {
length = strLen / 2
@ -863,7 +938,7 @@ function asciiWrite (buf, string, offset, length) {
return blitBuffer ( asciiToBytes ( string ) , buf , offset , length )
}
function binary Write ( buf , string , offset , length ) {
function latin1 Write ( buf , string , offset , length ) {
return asciiWrite ( buf , string , offset , length )
}
@ -925,8 +1000,9 @@ Buffer.prototype.write = function write (string, offset, length, encoding) {
case 'ascii' :
return asciiWrite ( this , string , offset , length )
case 'latin1' :
case 'binary' :
return binary Write( this , string , offset , length )
return latin1 Write( this , string , offset , length )
case 'base64' :
// Warning: maxLength not taken into account in base64Write
@ -1067,7 +1143,7 @@ function asciiSlice (buf, start, end) {
return ret
}
function binary Slice ( buf , start , end ) {
function latin1 Slice ( buf , start , end ) {
var ret = ''
end = Math . min ( buf . length , end )
@ -2916,8 +2992,12 @@ CodeMirror.overlayMode = function(base, overlay, combine) {
var comp = compensateForHScroll ( display ) - display . scroller . scrollLeft + cm . doc . scrollLeft ;
var gutterW = display . gutters . offsetWidth , left = comp + "px" ;
for ( var i = 0 ; i < view . length ; i ++ ) if ( ! view [ i ] . hidden ) {
if ( cm . options . fixedGutter && view [ i ] . gutter )
view [ i ] . gutter . style . left = left ;
if ( cm . options . fixedGutter ) {
if ( view [ i ] . gutter )
view [ i ] . gutter . style . left = left ;
if ( view [ i ] . gutterBackground )
view [ i ] . gutterBackground . style . left = left ;
}
var align = view [ i ] . alignable ;
if ( align ) for ( var j = 0 ; j < align . length ; j ++ )
align [ j ] . style . left = left ;
@ -3473,7 +3553,7 @@ CodeMirror.overlayMode = function(base, overlay, combine) {
}
function handlePaste ( e , cm ) {
var pasted = e . clipboardData && e . clipboardData . getData ( " text/plain ") ;
var pasted = e . clipboardData && e . clipboardData . getData ( " Text ") ;
if ( pasted ) {
e . preventDefault ( ) ;
if ( ! cm . isReadOnly ( ) && ! cm . options . disableInput )
@ -3517,10 +3597,10 @@ CodeMirror.overlayMode = function(base, overlay, combine) {
return { text : text , ranges : ranges } ;
}
function disableBrowserMagic ( field ) {
function disableBrowserMagic ( field , spellcheck ) {
field . setAttribute ( "autocorrect" , "off" ) ;
field . setAttribute ( "autocapitalize" , "off" ) ;
field . setAttribute ( "spellcheck" , "false" ) ;
field . setAttribute ( "spellcheck" , ! ! spellcheck ) ;
}
// TEXTAREA INPUT STYLE
@ -3898,10 +3978,14 @@ CodeMirror.overlayMode = function(base, overlay, combine) {
init : function ( display ) {
var input = this , cm = input . cm ;
var div = input . div = display . lineDiv ;
disableBrowserMagic ( div );
disableBrowserMagic ( div , cm . options . spellcheck );
on ( div , "paste" , function ( e ) {
if ( ! signalDOMEvent ( cm , e ) ) handlePaste ( e , cm ) ;
if ( signalDOMEvent ( cm , e ) || handlePaste ( e , cm ) ) return
// IE doesn't fire input events, so we schedule a read for the pasted content in this way
if ( ie _version <= 11 ) setTimeout ( operation ( cm , function ( ) {
if ( ! input . pollContent ( ) ) regChange ( cm ) ;
} ) , 20 )
} )
on ( div , "compositionstart" , function ( e ) {
@ -3961,23 +4045,27 @@ CodeMirror.overlayMode = function(base, overlay, combine) {
} ) ;
}
}
// iOS exposes the clipboard API, but seems to discard content inserted into it
if ( e . clipboardData && ! ios ) {
e . preventDefault ( ) ;
if ( e . clipboardData ) {
e . clipboardData . clearData ( ) ;
e . clipboardData . setData ( "text/plain" , lastCopied . text . join ( "\n" ) ) ;
} else {
// Old-fashioned briefly-focus-a-textarea hack
var kludge = hiddenTextarea ( ) , te = kludge . firstChild ;
cm . display . lineSpace . insertBefore ( kludge , cm . display . lineSpace . firstChild ) ;
te . value = lastCopied . text . join ( "\n" ) ;
var hadFocus = document . activeElement ;
selectInput ( te ) ;
setTimeout ( function ( ) {
cm . display . lineSpace . removeChild ( kludge ) ;
hadFocus . focus ( ) ;
} , 50 ) ;
var content = lastCopied . text . join ( "\n" )
// iOS exposes the clipboard API, but seems to discard content inserted into it
e . clipboardData . setData ( "Text" , content ) ;
if ( e . clipboardData . getData ( "Text" ) == content ) {
e . preventDefault ( ) ;
return
}
}
// Old-fashioned briefly-focus-a-textarea hack
var kludge = hiddenTextarea ( ) , te = kludge . firstChild ;
cm . display . lineSpace . insertBefore ( kludge , cm . display . lineSpace . firstChild ) ;
te . value = lastCopied . text . join ( "\n" ) ;
var hadFocus = document . activeElement ;
selectInput ( te ) ;
setTimeout ( function ( ) {
cm . display . lineSpace . removeChild ( kludge ) ;
hadFocus . focus ( ) ;
if ( hadFocus == div ) input . showPrimarySelection ( )
} , 50 ) ;
}
on ( div , "copy" , onCopyCut ) ;
on ( div , "cut" , onCopyCut ) ;
@ -4285,7 +4373,7 @@ CodeMirror.overlayMode = function(base, overlay, combine) {
if ( found )
return badPos ( Pos ( found . line , found . ch + dist ) , bad ) ;
else
dist += after . textContent . length ;
dist += before . textContent . length ;
}
}
@ -7272,7 +7360,10 @@ CodeMirror.overlayMode = function(base, overlay, combine) {
addOverlay : methodOp ( function ( spec , options ) {
var mode = spec . token ? spec : CodeMirror . getMode ( this . options , spec ) ;
if ( mode . startState ) throw new Error ( "Overlays may not be stateful." ) ;
this . state . overlays . push ( { mode : mode , modeSpec : spec , opaque : options && options . opaque } ) ;
insertSorted ( this . state . overlays ,
{ mode : mode , modeSpec : spec , opaque : options && options . opaque ,
priority : ( options && options . priority ) || 0 } ,
function ( overlay ) { return overlay . priority } )
this . state . modeGen ++ ;
regChange ( this ) ;
} ) ,
@ -7744,6 +7835,9 @@ CodeMirror.overlayMode = function(base, overlay, combine) {
option ( "inputStyle" , mobile ? "contenteditable" : "textarea" , function ( ) {
throw new Error ( "inputStyle can not (yet) be changed in a running editor" ) ; // FIXME
} , true ) ;
option ( "spellcheck" , false , function ( cm , val ) {
cm . getInputField ( ) . spellcheck = val
} , true ) ;
option ( "rtlMoveVisually" , ! windows ) ;
option ( "wholeLineUpdateBefore" , true ) ;
@ -7853,6 +7947,8 @@ CodeMirror.overlayMode = function(base, overlay, combine) {
spec . name = found . name ;
} else if ( typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/ . test ( spec ) ) {
return CodeMirror . resolveMode ( "application/xml" ) ;
} else if ( typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+json$/ . test ( spec ) ) {
return CodeMirror . resolveMode ( "application/json" ) ;
}
if ( typeof spec == "string" ) return { name : spec } ;
else return spec || { name : "null" } ;
@ -10282,7 +10378,7 @@ CodeMirror.overlayMode = function(base, overlay, combine) {
}
// Register a change in the history. Merges changes that are within
// a single operation, or e are close together with an origin that
// a single operation, or are close together with an origin that
// allows merging (starting with "+") into a single event.
function addChangeToHistory ( doc , change , selAfter , opId ) {
var hist = doc . history ;
@ -10685,6 +10781,12 @@ CodeMirror.overlayMode = function(base, overlay, combine) {
return out ;
}
function insertSorted ( array , value , score ) {
var pos = 0 , priority = score ( value )
while ( pos < array . length && score ( array [ pos ] ) <= priority ) pos ++
array . splice ( pos , 0 , value )
}
function nothing ( ) { }
function createObj ( base , props ) {
@ -11253,7 +11355,7 @@ CodeMirror.overlayMode = function(base, overlay, combine) {
// THE END
CodeMirror . version = "5.1 7.0 ";
CodeMirror . version = "5.1 8.2 ";
return CodeMirror ;
} ) ;
@ -12280,7 +12382,7 @@ CodeMirror.defineMIME("text/x-markdown", "markdown");
{ name : "HTML" , mime : "text/html" , mode : "htmlmixed" , ext : [ "html" , "htm" ] , alias : [ "xhtml" ] } ,
{ name : "HTTP" , mime : "message/http" , mode : "http" } ,
{ name : "IDL" , mime : "text/x-idl" , mode : "idl" , ext : [ "pro" ] } ,
{ name : " Jade", mime : "text/x-jade" , mode : "jade" , ext : [ "jade" ] } ,
{ name : " Pug", mime : "text/x-pug" , mode : "pug" , ext : [ "jade" , "pug" ] , alias : [ "jade" ] } ,
{ name : "Java" , mime : "text/x-java" , mode : "clike" , ext : [ "java" ] } ,
{ name : "Java Server Pages" , mime : "application/x-jsp" , mode : "htmlembedded" , ext : [ "jsp" ] , alias : [ "jsp" ] } ,
{ name : "JavaScript" , mimes : [ "text/javascript" , "text/ecmascript" , "application/javascript" , "application/x-javascript" , "application/ecmascript" ] ,
@ -14008,7 +14110,8 @@ function escape(html, encode) {
}
function unescape ( html ) {
return html . replace ( /&([#\w]+);/g , function ( _ , n ) {
// explicitly match decimal, hex, and named HTML entities
return html . replace ( /&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/g , function ( _ , n ) {
n = n . toLowerCase ( ) ;
if ( n === 'colon' ) return ':' ;
if ( n . charAt ( 0 ) === '#' ) {
@ -15140,7 +15243,7 @@ function createIcon(options, enableTooltips, shortcuts) {
enableTooltips = ( enableTooltips == undefined ) ? true : enableTooltips ;
if ( options . title && enableTooltips ) {
el . title = createToo t lip( options . title , options . action , shortcuts ) ;
el . title = createToo lt ip( options . title , options . action , shortcuts ) ;
if ( isMac ) {
el . title = el . title . replace ( "Ctrl" , "⌘" ) ;
@ -15160,7 +15263,7 @@ function createSep() {
return el ;
}
function createToo t lip( title , action , shortcuts ) {
function createToo lt ip( title , action , shortcuts ) {
var actionName ;
var tooltip = title ;
@ -16571,6 +16674,10 @@ SimpleMDE.prototype.render = function(el) {
} ) ;
}
if ( options . onChange ) {
this . codemirror . on ( "change" , options . onChange ) ;
}
this . gui = { } ;
if ( options . toolbar !== false ) {
@ -16936,10 +17043,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 . c ode mirror . getValue ( ) ;
return c m. 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 ;
}
} ;