/ * *
* simplemde v1 . 6.0
* Copyright Next Step Webs , Inc .
* @ link https : //github.com/NextStepWebs/simplemde-markdown-editor
* @ license MIT
* /
function fixShortcut ( e ) { return e = isMac ? e . replace ( "Ctrl" , "Cmd" ) : e . replace ( "Cmd" , "Ctrl" ) } function createIcon ( e , t ) { e = e || { } ; var n = document . createElement ( "a" ) ; return t = void 0 == t ? ! 0 : t , e . title && t && ( n . title = e . title , isMac && ( n . title = n . title . replace ( "Ctrl" , "⌘" ) , n . title = n . title . replace ( "Alt" , "⌥" ) ) ) , n . className = e . className , n } function createSep ( ) { return el = document . createElement ( "i" ) , el . className = "separator" , el . innerHTML = "|" , el } function getState ( e , t ) { t = t || e . getCursor ( "start" ) ; var n = e . getTokenAt ( t ) ; if ( ! n . type ) return { } ; for ( var r , i , o = n . type . split ( " " ) , l = { } , a = 0 ; a < o . length ; a ++ ) r = o [ a ] , "strong" === r ? l . bold = ! 0 : "variable-2" === r ? ( i = e . getLine ( t . line ) , /^\s*\d+\.\s/ . test ( i ) ? l [ "ordered-list" ] = ! 0 : l [ "unordered-list" ] = ! 0 ) : "atom" === r ? l . quote = ! 0 : "em" === r ? l . italic = ! 0 : "quote" === r && ( l . quote = ! 0 ) ; return l } function toggleFullScreen ( e ) { var t = e . codemirror ; t . setOption ( "fullScreen" , ! t . getOption ( "fullScreen" ) ) ; var n = t . getWrapperElement ( ) ; /fullscreen/ . test ( n . previousSibling . className ) ? n . previousSibling . className = n . previousSibling . className . replace ( /\s*fullscreen\b/ , "" ) : n . previousSibling . className += " fullscreen" ; var r = e . toolbarElements . fullscreen ; /active/ . test ( r . className ) ? r . className = r . className . replace ( /\s*active\s*/g , "" ) : r . className += " active" } function toggleBold ( e ) { _toggleBlock ( e , "bold" , "**" ) } function toggleItalic ( e ) { _toggleBlock ( e , "italic" , "*" ) } function toggleCodeBlock ( e ) { _toggleBlock ( e , "code" , "```\r\n" , "\r\n```" ) } function toggleBlockquote ( e ) { var t = e . codemirror ; _toggleLine ( t , "quote" ) } function toggleHeadingSmaller ( e ) { var t = e . codemirror ; _toggleHeading ( t , "smaller" ) } function toggleHeadingBigger ( e ) { var t = e . codemirror ; _toggleHeading ( t , "bigger" ) } function toggleUnorderedList ( e ) { var t = e . codemirror ; _toggleLine ( t , "unordered-list" ) } function toggleOrderedList ( e ) { var t = e . codemirror ; _toggleLine ( t , "ordered-list" ) } function drawLink ( e ) { var t = e . codemirror , n = getState ( t ) ; _replaceSelection ( t , n . link , "[" , "](http://)" ) } function drawImage ( e ) { var t = e . codemirror , n = getState ( t ) ; _replaceSelection ( t , n . image , "![](http://" , ")" ) } function drawHorizontalRule ( e ) { var t = e . codemirror , n = getState ( t ) ; _replaceSelection ( t , n . image , "" , "\n\n-----\n\n" ) } function undo ( e ) { var t = e . codemirror ; t . undo ( ) , t . focus ( ) } function redo ( e ) { var t = e . codemirror ; t . redo ( ) , t . focus ( ) } function togglePreview ( e ) { var t = e . codemirror , n = t . getWrapperElement ( ) , r = n . previousSibling , i = e . toolbarElements . preview , o = e . constructor . markdown , l = n . lastChild ; /editor-preview/ . test ( l . className ) || ( l = document . createElement ( "div" ) , l . className = "editor-preview" , n . appendChild ( l ) ) , /editor-preview-active/ . test ( l . className ) ? ( l . className = l . className . replace ( /\s*editor-preview-active\s*/g , "" ) , i . className = i . className . replace ( /\s*active\s*/g , "" ) , r . className = r . className . replace ( /\s*disabled-for-preview*/g , "" ) ) : ( setTimeout ( function ( ) { l . className += " editor-preview-active" } , 1 ) , i . className += " active" , r . className += " disabled-for-preview" ) ; var a = t . getValue ( ) ; l . innerHTML = o ( a ) } function _replaceSelection ( e , t , n , r ) { if ( ! /editor-preview-active/ . test ( e . getWrapperElement ( ) . lastChild . className ) ) { var i , o = e . getCursor ( "start" ) , l = e . getCursor ( "end" ) ; t ? ( i = e . getLine ( o . line ) , n = i . slice ( 0 , o . ch ) , r = i . slice ( o . ch ) , e . replaceRange ( n + r , { line : o . line , ch : 0 } ) ) : ( i = e . getSelection ( ) , e . replaceSelection ( n + i + r ) , o . ch += n . length , l . ch += n . length ) , e . setSelection ( o , l ) , e . focus ( ) } } function _toggleHeading ( e , t ) { if ( ! /editor-preview-active/ . test ( e . getWrapperElement ( ) . lastChild . className ) ) { for ( var n = e . getCursor ( "start" ) , r = e . getCursor ( "end" ) , i = n . line ; i <= r . line ; i ++ ) ! function ( n ) { var r = e . getLine ( n ) , i = r . search ( /[^#]/ ) ; r = 0 >= i ? "bigger" == t ? "###### " + r : "# " + r : 6 == i && "smaller" == t || 1 == i && "bigger" == t ? r . substr ( 7 ) : "bigger" == t ? r . substr ( 1 ) : "#" + r , e . replaceRange ( r , { line : n , ch : 0 } , { line : n , ch : 99999999999999 } ) } ( i ) ; e . focus ( ) } } function _toggleLine ( e , t ) { if ( ! /editor-preview-active/ . test ( e . getWrapperElement ( ) . lastChild . className ) ) { for ( var n = getState ( e ) , r = e . getCursor ( "start" ) , i = e . getCursor ( "end" ) , o = { quote : /^(\s*)\>\s+/ , "unordered-list" : /^(\s*)(\*|\-|\+)\s+/ , "ordered-list" : /^(\s*)\d+\.\s+/ } , l = { quote : "> " , "unordered-list" : "* " , "ordered-list" : "1. " } , a = r . line ; a <= i . line ; a ++ ) ! function ( r ) { var i = e . getLine ( r ) ; i = n [ t ] ? i . replace ( o [ t ] , "$1" ) : l [ t ] + i , e . replaceRange ( i
( ! s || h . bottom > s . bottom || h . bottom == s . bottom && h . right > s . right ) && ( s = h ) , u + 1 > d && ( d = u ) , r ( d , h . top , p - d , h . bottom ) } ) , { start : a , end : s } } var o = e . display , l = e . doc , a = document . createDocumentFragment ( ) , s = Ge ( e . display ) , u = s . left , c = Math . max ( o . sizerWidth , je ( e ) - o . sizer . offsetLeft ) - s . right , h = t . from ( ) , f = t . to ( ) ; if ( h . line == f . line ) i ( h . line , h . ch , f . ch ) ; else { var d = Yr ( l , h . line ) , p = Yr ( l , f . line ) , g = vr ( d ) == vr ( p ) , m = i ( h . line , h . ch , g ? d . text . length + 1 : null ) . end , v = i ( f . line , g ? 0 : null , f . ch ) . start ; g && ( m . top < v . top - 2 ? ( r ( m . right , m . top , null , m . bottom ) , r ( u , v . top , v . left , v . bottom ) ) : r ( m . right , m . top , v . left - m . right , m . bottom ) ) , m . bottom < v . top && r ( u , m . bottom , null , v . top ) } n . appendChild ( a ) } function Fe ( e ) { if ( e . state . focused ) { var t = e . display ; clearInterval ( t . blinker ) ; var n = ! 0 ; t . cursorDiv . style . visibility = "" , e . options . cursorBlinkRate > 0 ? t . blinker = setInterval ( function ( ) { t . cursorDiv . style . visibility = ( n = ! n ) ? "" : "hidden" } , e . options . cursorBlinkRate ) : e . options . cursorBlinkRate < 0 && ( t . cursorDiv . style . visibility = "hidden" ) } } function _e ( e , t ) { e . doc . mode . startState && e . doc . frontier < e . display . viewTo && e . state . highlight . set ( t , Pi ( ze , e ) ) } function ze ( e ) { var t = e . doc ; if ( t . frontier < t . first && ( t . frontier = t . first ) , ! ( t . frontier >= e . display . viewTo ) ) { var n = + new Date + e . options . workTime , r = rl ( t . mode , Re ( e , t . frontier ) ) , i = [ ] ; t . iter ( t . frontier , Math . min ( t . first + t . size , e . display . viewTo + 500 ) , function ( o ) { if ( t . frontier >= e . display . viewFrom ) { var l = o . styles , a = o . text . length > e . options . maxHighlightLength , s = Er ( e , o , a ? rl ( t . mode , r ) : r , ! 0 ) ; o . styles = s . styles ; var u = o . styleClasses , c = s . classes ; c ? o . styleClasses = c : u && ( o . styleClasses = null ) ; for ( var h = ! l || l . length != o . styles . length || u != c && ( ! u || ! c || u . bgClass != c . bgClass || u . textClass != c . textClass ) , f = 0 ; ! h && f < l . length ; ++ f ) h = l [ f ] != o . styles [ f ] ; h && i . push ( t . frontier ) , o . stateAfter = a ? r : rl ( t . mode , r ) } else o . text . length <= e . options . maxHighlightLength && Ir ( e , o . text , r ) , o . stateAfter = t . frontier % 5 == 0 ? rl ( t . mode , r ) : null ; return ++ t . frontier , + new Date > n ? ( _e ( e , e . options . workDelay ) , ! 0 ) : void 0 } ) , i . length && Nt ( e , function ( ) { for ( var t = 0 ; t < i . length ; t ++ ) It ( e , i [ t ] , "text" ) } ) } } function Be ( e , t , n ) { for ( var r , i , o = e . doc , l = n ? - 1 : t - ( e . doc . mode . innerMode ? 1e3 : 100 ) , a = t ; a > l ; -- a ) { if ( a <= o . first ) return o . first ; var s = Yr ( o , a - 1 ) ; if ( s . stateAfter && ( ! n || a <= o . frontier ) ) return a ; var u = Wl ( s . text , null , e . options . tabSize ) ; ( null == i || r > u ) && ( i = a - 1 , r = u ) } return i } function Re ( e , t , n ) { var r = e . doc , i = e . display ; if ( ! r . mode . startState ) return ! 0 ; var o = Be ( e , t , n ) , l = o > r . first && Yr ( r , o - 1 ) . stateAfter ; return l = l ? rl ( r . mode , l ) : il ( r . mode ) , r . iter ( o , t , function ( n ) { Ir ( e , n . text , l ) ; var a = o == t - 1 || o % 5 == 0 || o >= i . viewFrom && o < i . viewTo ; n . stateAfter = a ? rl ( r . mode , l ) : null , ++ o } ) , n && ( r . frontier = o ) , l } function qe ( e ) { return e . lineSpace . offsetTop } function Ue ( e ) { return e . mover . offsetHeight - e . lineSpace . offsetHeight } function Ge ( e ) { if ( e . cachedPaddingH ) return e . cachedPaddingH ; var t = qi ( e . measure , Bi ( "pre" , "x" ) ) , n = window . getComputedStyle ? window . getComputedStyle ( t ) : t . currentStyle , r = { left : parseInt ( n . paddingLeft ) , right : parseInt ( n . paddingRight ) } ; return isNaN ( r . left ) || isNaN ( r . right ) || ( e . cachedPaddingH = r ) , r } function $e ( e ) { return Al - e . display . nativeBarWidth } function je ( e ) { return e . display . scroller . clientWidth - $e ( e ) - e . display . barWidth } function Ve ( e ) { return e . display . scroller . clientHeight - $e ( e ) - e . display . barHeight } function Ke ( e , t , n ) { var r = e . options . lineWrapping , i = r && je ( e ) ; if ( ! t . measure . heights || r && t . measure . width != i ) { var o = t . measure . heights = [ ] ; if ( r ) { t . measure . width = i ; for ( var l = t . text . firstChild . getClientRects ( ) , a = 0 ; a < l . length - 1 ; a ++ ) { var s = l [ a ] , u = l [ a + 1 ] ; Math . abs ( s . bottom - u . bottom ) > 2 && o . push ( ( s . bottom + u . top ) / 2 - n . top ) } } o . push ( n . bottom - n . top ) } } function Xe ( e , t , n ) { if ( e . line == t ) return { map : e . measure . map , cache : e . measure . cache } ; for ( var r = 0 ; r < e . rest . length ; r ++ ) if ( e . rest [ r ] == t ) return { map : e . measure . maps [ r ] , cache : e . measure . caches [ r ] } ; for ( var r = 0 ; r < e . rest . length ; r ++ ) if ( ei ( e . rest [ r ] ) > n ) return { map : e . measure . maps [ r ] , cache : e . measure . caches [ r ] , before : ! 0 } } function Ye ( e , t ) { t = vr ( t ) ; var n = ei ( t ) , r = e . display . externalMeasured = new Ht ( e . doc , t , n ) ; r . lineN = n ; var i = r . built = Fr ( e , r ) ; return r . text = i . pre , qi ( e . display . lineMeasure , i . pre ) , r } function Ze ( e , t , n , r ) { return et ( e , Je ( e , t ) , n , r ) } function Qe ( e , t ) { if ( t >= e . display . viewFrom && t < e . display . viewTo ) return e . display . view [ Ft (
An ( e , t , null , ir ( e , t ) ) } ) } } function Tn ( e , t , n ) { if ( ! e . cm || ! e . cm . state . suppressEdits ) { for ( var r , i = e . history , o = e . sel , l = "undo" == t ? i . done : i . undone , a = "undo" == t ? i . undone : i . done , s = 0 ; s < l . length && ( r = l [ s ] , n ? ! r . ranges || r . equals ( e . sel ) : r . ranges ) ; s ++ ) ; if ( s != l . length ) { for ( i . lastOrigin = i . lastSelOrigin = null ; r = l . pop ( ) , r . ranges ; ) { if ( hi ( r , a ) , n && ! r . equals ( e . sel ) ) return void Te ( e , r , { clearRedo : ! 1 } ) ; o = r } var u = [ ] ; hi ( o , a ) , a . push ( { changes : u , generation : i . generation } ) , i . generation = r . generation || ++ i . maxGeneration ; for ( var c = Mi ( e , "beforeChange" ) || e . cm && Mi ( e . cm , "beforeChange" ) , s = r . changes . length - 1 ; s >= 0 ; -- s ) { var h = r . changes [ s ] ; if ( h . origin = t , c && ! Sn ( e , h , ! 1 ) ) return void ( l . length = 0 ) ; u . push ( oi ( e , h ) ) ; var f = s ? wn ( e , h ) : Oi ( l ) ; An ( e , h , f , lr ( e , h ) ) , ! s && e . cm && e . cm . scrollIntoView ( { from : h . from , to : Ko ( h ) } ) ; var d = [ ] ; Kr ( e , function ( e , t ) { t || - 1 != Di ( d , e . history ) || ( yi ( e . history , h ) , d . push ( e . history ) ) , An ( e , h , null , lr ( e , h ) ) } ) } } } } function Nn ( e , t ) { if ( 0 != t && ( e . first += t , e . sel = new he ( Hi ( e . sel . ranges , function ( e ) { return new fe ( Eo ( e . anchor . line + t , e . anchor . ch ) , Eo ( e . head . line + t , e . head . ch ) ) } ) , e . sel . primIndex ) , e . cm ) ) { Wt ( e . cm , e . first , e . first - t , t ) ; for ( var n = e . cm . display , r = n . viewFrom ; r < n . viewTo ; r ++ ) It ( e . cm , r , "gutter" ) } } function An ( e , t , n , r ) { if ( e . cm && ! e . cm . curOp ) return At ( e . cm , An ) ( e , t , n , r ) ; if ( t . to . line < e . first ) return void Nn ( e , t . text . length - 1 - ( t . to . line - t . from . line ) ) ; if ( ! ( t . from . line > e . lastLine ( ) ) ) { if ( t . from . line < e . first ) { var i = t . text . length - 1 - ( e . first - t . from . line ) ; Nn ( e , i ) , t = { from : Eo ( e . first , 0 ) , to : Eo ( t . to . line + i , t . to . ch ) , text : [ Oi ( t . text ) ] , origin : t . origin } } var o = e . lastLine ( ) ; t . to . line > o && ( t = { from : t . from , to : Eo ( o , Yr ( e , o ) . text . length ) , text : [ t . text [ 0 ] ] , origin : t . origin } ) , t . removed = Zr ( e , t . from , t . to ) , n || ( n = wn ( e , t ) ) , e . cm ? On ( e . cm , t , r ) : $r ( e , t , r ) , Ne ( e , n , Dl ) } } function On ( e , t , n ) { var r = e . doc , i = e . display , l = t . from , a = t . to , s = ! 1 , u = l . line ; e . options . lineWrapping || ( u = ei ( vr ( Yr ( r , l . line ) ) ) , r . iter ( u , a . line + 1 , function ( e ) { return e == i . maxLine ? ( s = ! 0 , ! 0 ) : void 0 } ) ) , r . sel . contains ( t . from , t . to ) > - 1 && Li ( e ) , $r ( r , t , n , o ( e ) ) , e . options . lineWrapping || ( r . iter ( u , l . line + t . text . length , function ( e ) { var t = h ( e ) ; t > i . maxLineLength && ( i . maxLine = e , i . maxLineLength = t , i . maxLineChanged = ! 0 , s = ! 1 ) } ) , s && ( e . curOp . updateMaxLine = ! 0 ) ) , r . frontier = Math . min ( r . frontier , l . line ) , _e ( e , 400 ) ; var c = t . text . length - ( a . line - l . line ) - 1 ; t . full ? Wt ( e ) : l . line != a . line || 1 != t . text . length || Gr ( e . doc , t ) ? Wt ( e , l . line , a . line + 1 , c ) : It ( e , l . line , "text" ) ; var f = Mi ( e , "changes" ) , d = Mi ( e , "change" ) ; if ( d || f ) { var p = { from : l , to : a , text : t . text , removed : t . removed , origin : t . origin } ; d && Ci ( e , "change" , e , p ) , f && ( e . curOp . changeObjs || ( e . curOp . changeObjs = [ ] ) ) . push ( p ) } e . display . selForContextMenu = null } function Dn ( e , t , n , r , i ) { if ( r || ( r = n ) , Wo ( r , n ) < 0 ) { var o = r ; r = n , n = o } "string" == typeof t && ( t = e . splitLines ( t ) ) , Ln ( e , { from : n , to : r , text : t , origin : i } ) } function Hn ( e , t ) { if ( ! Si ( e , "scrollCursorIntoView" ) ) { var n = e . display , r = n . sizer . getBoundingClientRect ( ) , i = null ; if ( t . top + r . top < 0 ? i = ! 0 : t . bottom + r . top > ( window . innerHeight || document . documentElement . clientHeight ) && ( i = ! 1 ) , null != i && ! ko ) { var o = Bi ( "div" , " " , null , "position: absolute; top: " + ( t . top - n . viewOffset - qe ( e . display ) ) + "px; height: " + ( t . bottom - t . top + $e ( e ) + n . barHeight ) + "px; left: " + t . left + "px; width: 2px;" ) ; e . display . lineSpace . appendChild ( o ) , o . scrollIntoView ( i ) , e . display . lineSpace . removeChild ( o ) } } } function En ( e , t , n , r ) { null == r && ( r = 0 ) ; for ( var i = 0 ; 5 > i ; i ++ ) { var o = ! 1 , l = ft ( e , t ) , a = n && n != t ? ft ( e , n ) : l , s = In ( e , Math . min ( l . left , a . left ) , Math . min ( l . top , a . top ) - r , Math . max ( l . left , a . left ) , Math . max ( l . bottom , a . bottom ) + r ) , u = e . doc . scrollTop , c = e . doc . scrollLeft ; if ( null != s . scrollTop && ( nn ( e , s . scrollTop ) , Math . abs ( e . doc . scrollTop - u ) > 1 && ( o = ! 0 ) ) , null != s . scrollLeft && ( rn ( e , s . scrollLeft ) , Math . abs ( e . doc . scrollLeft - c ) > 1 && ( o = ! 0 ) ) , ! o ) break } return l } function Wn ( e , t , n , r , i ) { var o = In ( e , t , n , r , i ) ; null != o . scrollTop && nn ( e , o . scrollTop ) , null != o . scrollLeft && rn ( e , o . scrollLeft ) } function In ( e , t , n , r , i ) { var o = e . display , l = vt ( e . display ) ; 0 > n && ( n = 0 ) ; var a = e . curOp && null != e . curOp . scrollTop ? e . curOp . scrollTop : o . scroller . scrollTop , s = Ve ( e ) , u = { } ; i - n > s && ( i = n + s ) ; var c = e . doc . height + Ue ( o ) , h = l > n , f = i > c - l ; if ( a > n ) u . scrollTop = h ? 0 : n ; else if ( i > a + s ) { var d = Math . min ( n , ( f ? c : i ) - s ) ; d != a && ( u . scrollTop = d ) } var p = e . curOp && null != e . curOp . scrollLeft ? e . curOp . scrollLeft : o . scroller . scrollLeft ,
if ( null != Ql ) return Ql ; var t = qi ( e , Bi ( "span" , "x" ) ) , n = t . getBoundingClientRect ( ) , r = _l ( t , 0 , 1 ) . getBoundingClientRect ( ) ; return Ql = Math . abs ( n . left - r . left ) > 1 } function Qi ( e , t , n , r ) { if ( ! e ) return r ( t , n , "ltr" ) ; for ( var i = ! 1 , o = 0 ; o < e . length ; ++ o ) { var l = e [ o ] ; ( l . from < n && l . to > t || t == n && l . to == t ) && ( r ( Math . max ( l . from , t ) , Math . min ( l . to , n ) , 1 == l . level ? "rtl" : "ltr" ) , i = ! 0 ) } i || r ( t , n , "ltr" ) } function Ji ( e ) { return e . level % 2 ? e . to : e . from } function eo ( e ) { return e . level % 2 ? e . from : e . to } function to ( e ) { var t = ri ( e ) ; return t ? Ji ( t [ 0 ] ) : 0 } function no ( e ) { var t = ri ( e ) ; return t ? eo ( Oi ( t ) ) : e . text . length } function ro ( e , t ) { var n = Yr ( e . doc , t ) , r = vr ( n ) ; r != n && ( t = ei ( r ) ) ; var i = ri ( r ) , o = i ? i [ 0 ] . level % 2 ? no ( r ) : to ( r ) : 0 ; return Eo ( t , o ) } function io ( e , t ) { for ( var n , r = Yr ( e . doc , t ) ; n = gr ( r ) ; ) r = n . find ( 1 , ! 0 ) . line , t = null ; var i = ri ( r ) , o = i ? i [ 0 ] . level % 2 ? to ( r ) : no ( r ) : r . text . length ; return Eo ( null == t ? ei ( r ) : t , o ) } function oo ( e , t ) { var n = ro ( e , t . line ) , r = Yr ( e . doc , n . line ) , i = ri ( r ) ; if ( ! i || 0 == i [ 0 ] . level ) { var o = Math . max ( 0 , r . text . search ( /\S/ ) ) , l = t . line == n . line && t . ch <= o && t . ch ; return Eo ( n . line , l ? 0 : o ) } return n } function lo ( e , t , n ) { var r = e [ 0 ] . level ; return t == r ? ! 0 : n == r ? ! 1 : n > t } function ao ( e , t ) { ea = null ; for ( var n , r = 0 ; r < e . length ; ++ r ) { var i = e [ r ] ; if ( i . from < t && i . to > t ) return r ; if ( i . from == t || i . to == t ) { if ( null != n ) return lo ( e , i . level , e [ n ] . level ) ? ( i . from != i . to && ( ea = n ) , r ) : ( i . from != i . to && ( ea = r ) , n ) ; n = r } } return n } function so ( e , t , n , r ) { if ( ! r ) return t + n ; do t += n ; while ( t > 0 && zi ( e . text . charAt ( t ) ) ) ; return t } function uo ( e , t , n , r ) { var i = ri ( e ) ; if ( ! i ) return co ( e , t , n , r ) ; for ( var o = ao ( i , t ) , l = i [ o ] , a = so ( e , t , l . level % 2 ? - n : n , r ) ; ; ) { if ( a > l . from && a < l . to ) return a ; if ( a == l . from || a == l . to ) return ao ( i , a ) == o ? a : ( l = i [ o += n ] , n > 0 == l . level % 2 ? l . to : l . from ) ; if ( l = i [ o += n ] , ! l ) return null ; a = n > 0 == l . level % 2 ? so ( e , l . to , - 1 , r ) : so ( e , l . from , 1 , r ) } } function co ( e , t , n , r ) { var i = t + n ; if ( r ) for ( ; i > 0 && zi ( e . text . charAt ( i ) ) ; ) i += n ; return 0 > i || i > e . text . length ? null : i } var ho = /gecko\/\d/i . test ( navigator . userAgent ) , fo = /MSIE \d/ . test ( navigator . userAgent ) , po = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/ . exec ( navigator . userAgent ) , go = fo || po , mo = go && ( fo ? document . documentMode || 6 : po [ 1 ] ) , vo = /WebKit\// . test ( navigator . userAgent ) , yo = vo && /Qt\/\d+\.\d+/ . test ( navigator . userAgent ) , bo = /Chrome\// . test ( navigator . userAgent ) , xo = /Opera\// . test ( navigator . userAgent ) , wo = /Apple Computer/ . test ( navigator . vendor ) , Co = /Mac OS X 1\d\D([8-9]|\d\d)\D/ . test ( navigator . userAgent ) , ko = /PhantomJS/ . test ( navigator . userAgent ) , So = /AppleWebKit/ . test ( navigator . userAgent ) && /Mobile\/\w+/ . test ( navigator . userAgent ) , Lo = So || /Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i . test ( navigator . userAgent ) , Mo = So || /Mac/ . test ( navigator . platform ) , To = /win/i . test ( navigator . platform ) , No = xo && navigator . userAgent . match ( /Version\/(\d*\.\d*)/ ) ; No && ( No = Number ( No [ 1 ] ) ) , No && No >= 15 && ( xo = ! 1 , vo = ! 0 ) ; var Ao = Mo && ( yo || xo && ( null == No || 12.11 > No ) ) , Oo = ho || go && mo >= 9 , Do = ! 1 , Ho = ! 1 ; g . prototype = Ii ( { update : function ( e ) { var t = e . scrollWidth > e . clientWidth + 1 , n = e . scrollHeight > e . clientHeight + 1 , r = e . nativeBarWidth ; if ( n ) { this . vert . style . display = "block" , this . vert . style . bottom = t ? r + "px" : "0" ; var i = e . viewHeight - ( t ? r : 0 ) ; this . vert . firstChild . style . height = Math . max ( 0 , e . scrollHeight - e . clientHeight + i ) + "px" } else this . vert . style . display = "" , this . vert . firstChild . style . height = "0" ; if ( t ) { this . horiz . style . display = "block" , this . horiz . style . right = n ? r + "px" : "0" , this . horiz . style . left = e . barLeft + "px" ; var o = e . viewWidth - e . barLeft - ( n ? r : 0 ) ; this . horiz . firstChild . style . width = e . scrollWidth - e . clientWidth + o + "px" } else this . horiz . style . display = "" , this . horiz . firstChild . style . width = "0" ; return ! this . checkedOverlay && e . clientHeight > 0 && ( 0 == r && this . overlayHack ( ) , this . checkedOverlay = ! 0 ) , { right : n ? r : 0 , bottom : t ? r : 0 } } , setScrollLeft : function ( e ) { this . horiz . scrollLeft != e && ( this . horiz . scrollLeft = e ) } , setScrollTop : function ( e ) { this . vert . scrollTop != e && ( this . vert . scrollTop = e ) } , overlayHack : function ( ) { var e = Mo && ! Co ? "12px" : "18px" ; this . horiz . style . minHeight = this . vert . style . minWidth = e ; var t = this , n = function ( e ) { xi ( e ) != t . vert && xi ( e ) != t . horiz && At ( t . cm , jt ) ( e ) } ; Ll ( this . vert , "mousedown" , n ) , Ll ( this . horiz , "mousedown" , n ) } , clear : function ( ) { var e = this . horiz . parentNode ; e . removeChild ( this . horiz ) , e . removeChild ( this . vert ) } } , g . prototype ) , m . prototype = Ii ( { update : function ( ) { return { bottom : 0 , right :
} } ) } , delWrappedLineRight : function ( e ) { Rn ( e , function ( t ) { var n = e . charCoords ( t . head , "div" ) . top + 5 , r = e . coordsChar ( { left : e . display . lineDiv . offsetWidth + 100 , top : n } , "div" ) ; return { from : t . from ( ) , to : r } } ) } , undo : function ( e ) { e . undo ( ) } , redo : function ( e ) { e . redo ( ) } , undoSelection : function ( e ) { e . undoSelection ( ) } , redoSelection : function ( e ) { e . redoSelection ( ) } , goDocStart : function ( e ) { e . extendSelection ( Eo ( e . firstLine ( ) , 0 ) ) } , goDocEnd : function ( e ) { e . extendSelection ( Eo ( e . lastLine ( ) ) ) } , goLineStart : function ( e ) { e . extendSelectionsBy ( function ( t ) { return ro ( e , t . head . line ) } , { origin : "+move" , bias : 1 } ) } , goLineStartSmart : function ( e ) { e . extendSelectionsBy ( function ( t ) { return oo ( e , t . head ) } , { origin : "+move" , bias : 1 } ) } , goLineEnd : function ( e ) { e . extendSelectionsBy ( function ( t ) { return io ( e , t . head . line ) } , { origin : "+move" , bias : - 1 } ) } , goLineRight : function ( e ) { e . extendSelectionsBy ( function ( t ) { var n = e . charCoords ( t . head , "div" ) . top + 5 ; return e . coordsChar ( { left : e . display . lineDiv . offsetWidth + 100 , top : n } , "div" ) } , El ) } , goLineLeft : function ( e ) { e . extendSelectionsBy ( function ( t ) { var n = e . charCoords ( t . head , "div" ) . top + 5 ; return e . coordsChar ( { left : 0 , top : n } , "div" ) } , El ) } , goLineLeftSmart : function ( e ) { e . extendSelectionsBy ( function ( t ) { var n = e . charCoords ( t . head , "div" ) . top + 5 , r = e . coordsChar ( { left : 0 , top : n } , "div" ) ; return r . ch < e . getLine ( r . line ) . search ( /\S/ ) ? oo ( e , t . head ) : r } , El ) } , goLineUp : function ( e ) { e . moveV ( - 1 , "line" ) } , goLineDown : function ( e ) { e . moveV ( 1 , "line" ) } , goPageUp : function ( e ) { e . moveV ( - 1 , "page" ) } , goPageDown : function ( e ) { e . moveV ( 1 , "page" ) } , goCharLeft : function ( e ) { e . moveH ( - 1 , "char" ) } , goCharRight : function ( e ) { e . moveH ( 1 , "char" ) } , goColumnLeft : function ( e ) { e . moveH ( - 1 , "column" ) } , goColumnRight : function ( e ) { e . moveH ( 1 , "column" ) } , goWordLeft : function ( e ) { e . moveH ( - 1 , "word" ) } , goGroupRight : function ( e ) { e . moveH ( 1 , "group" ) } , goGroupLeft : function ( e ) { e . moveH ( - 1 , "group" ) } , goWordRight : function ( e ) { e . moveH ( 1 , "word" ) } , delCharBefore : function ( e ) { e . deleteH ( - 1 , "char" ) } , delCharAfter : function ( e ) { e . deleteH ( 1 , "char" ) } , delWordBefore : function ( e ) { e . deleteH ( - 1 , "word" ) } , delWordAfter : function ( e ) { e . deleteH ( 1 , "word" ) } , delGroupBefore : function ( e ) { e . deleteH ( - 1 , "group" ) } , delGroupAfter : function ( e ) { e . deleteH ( 1 , "group" ) } , indentAuto : function ( e ) { e . indentSelection ( "smart" ) } , indentMore : function ( e ) { e . indentSelection ( "add" ) } , indentLess : function ( e ) { e . indentSelection ( "subtract" ) } , insertTab : function ( e ) { e . replaceSelection ( " " ) } , insertSoftTab : function ( e ) { for ( var t = [ ] , n = e . listSelections ( ) , r = e . options . tabSize , i = 0 ; i < n . length ; i ++ ) { var o = n [ i ] . from ( ) , l = Wl ( e . getLine ( o . line ) , o . ch , r ) ; t . push ( new Array ( r - l % r + 1 ) . join ( " " ) ) } e . replaceSelections ( t ) } , defaultTab : function ( e ) { e . somethingSelected ( ) ? e . indentSelection ( "add" ) : e . execCommand ( "insertTab" ) } , transposeChars : function ( e ) { Nt ( e , function ( ) { for ( var t = e . listSelections ( ) , n = [ ] , r = 0 ; r < t . length ; r ++ ) { var i = t [ r ] . head , o = Yr ( e . doc , i . line ) . text ; if ( o ) if ( i . ch == o . length && ( i = new Eo ( i . line , i . ch - 1 ) ) , i . ch > 0 ) i = new Eo ( i . line , i . ch + 1 ) , e . replaceRange ( o . charAt ( i . ch - 1 ) + o . charAt ( i . ch - 2 ) , Eo ( i . line , i . ch - 2 ) , i , "+transpose" ) ; else if ( i . line > e . doc . first ) { var l = Yr ( e . doc , i . line - 1 ) . text ; l && e . replaceRange ( o . charAt ( 0 ) + e . doc . lineSeparator ( ) + l . charAt ( l . length - 1 ) , Eo ( i . line - 1 , l . length - 1 ) , Eo ( i . line , 1 ) , "+transpose" ) } n . push ( new fe ( i , i ) ) } e . setSelections ( n ) } ) } , newlineAndIndent : function ( e ) { Nt ( e , function ( ) { for ( var t = e . listSelections ( ) . length , n = 0 ; t > n ; n ++ ) { var r = e . listSelections ( ) [ n ] ; e . replaceRange ( e . doc . lineSeparator ( ) , r . anchor , r . head , "+input" ) , e . indentLine ( r . from ( ) . line + 1 , null , ! 0 ) , Fn ( e ) } } ) } , toggleOverwrite : function ( e ) { e . toggleOverwrite ( ) } } , ll = e . keyMap = { } ; ll . basic = { Left : "goCharLeft" , Right : "goCharRight" , Up : "goLineUp" , Down : "goLineDown" , End : "goLineEnd" , Home : "goLineStartSmart" , PageUp : "goPageUp" , PageDown : "goPageDown" , Delete : "delCharAfter" , Backspace : "delCharBefore" , "Shift-Backspace" : "delCharBefore" , Tab : "defaultTab" , "Shift-Tab" : "indentAuto" , Enter : "newlineAndIndent" , Insert : "toggleOverwrite" , Esc : "singleSelection" } , ll . pcDefault = { "Ctrl-A" : "selectAll" , "Ctrl-D" : "deleteLine" , "Ctrl-Z" : "undo" , "Shift-Ctrl-Z" : "redo" , "Ctrl-Y" : "redo" , "Ctrl-Home" : "goDocStart" , "Ctrl-End" : "goDocEnd" , "Ctrl-Up" : "goLineUp" , "Ctrl-Down" : "goLineDown" , "Ctrl-Left" : "goGroupLeft" , "Ctrl-Right" : "goGroupRight" , "Alt-Left" : "goLineStart" , "Alt-Right" :
if ( i ) return void e . execCommand ( "indentLess" ) ; if ( e . options . indentWithTabs ) e . execCommand ( "insertTab" ) ; else { var o = Array ( e . options . tabSize + 1 ) . join ( " " ) ; e . replaceSelection ( o ) } } , e . commands . tabAndIndentContinueMarkdownList = function ( e ) { var t = e . listSelections ( ) , n = t [ 0 ] . head , r = e . getStateAfter ( n . line ) , i = r . list !== ! 1 ; if ( i ) return void e . execCommand ( "indentMore" ) ; if ( e . options . indentWithTabs ) e . execCommand ( "insertTab" ) ; else { var o = Array ( e . options . tabSize + 1 ) . join ( " " ) ; e . replaceSelection ( o ) } } } ) , function ( e ) { "object" == typeof exports && "object" == typeof module ? e ( require ( "../../lib/codemirror" ) ) : "function" == typeof define && define . amd ? define ( [ "../../lib/codemirror" ] , e ) : e ( CodeMirror ) } ( function ( e ) { "use strict" ; function t ( e ) { var t = e . getWrapperElement ( ) ; e . state . fullScreenRestore = { scrollTop : window . pageYOffset , scrollLeft : window . pageXOffset , width : t . style . width , height : t . style . height } , t . style . width = "" , t . style . height = "auto" , t . className += " CodeMirror-fullscreen" , document . documentElement . style . overflow = "hidden" , e . refresh ( ) } function n ( e ) { var t = e . getWrapperElement ( ) ; t . className = t . className . replace ( /\s*CodeMirror-fullscreen\b/ , "" ) , document . documentElement . style . overflow = "" ; var n = e . state . fullScreenRestore ; t . style . width = n . width , t . style . height = n . height , window . scrollTo ( n . scrollLeft , n . scrollTop ) , e . refresh ( ) } e . defineOption ( "fullScreen" , ! 1 , function ( r , i , o ) { o == e . Init && ( o = ! 1 ) , ! o != ! i && ( i ? t ( r ) : n ( r ) ) } ) } ) , function ( e ) { "object" == typeof exports && "object" == typeof module ? e ( require ( "../../lib/codemirror" ) , require ( "../xml/xml" ) , require ( "../meta" ) ) : "function" == typeof define && define . amd ? define ( [ "../../lib/codemirror" , "../xml/xml" , "../meta" ] , e ) : e ( CodeMirror ) } ( function ( e ) { "use strict" ; e . defineMode ( "markdown" , function ( t , n ) { function r ( n ) { if ( e . findModeByName ) { var r = e . findModeByName ( n ) ; r && ( n = r . mime || r . mimes [ 0 ] ) } var i = e . getMode ( t , n ) ; return "null" == i . name ? null : i } function i ( e , t , n ) { return t . f = t . inline = n , n ( e , t ) } function o ( e , t , n ) { return t . f = t . block = n , n ( e , t ) } function l ( e ) { return e . linkTitle = ! 1 , e . em = ! 1 , e . strong = ! 1 , e . strikethrough = ! 1 , e . quote = 0 , e . indentedCode = ! 1 , w || e . f != s || ( e . f = d , e . block = a ) , e . trailingSpace = 0 , e . trailingSpaceNewLine = ! 1 , e . thisLineHasContent = ! 1 , null } function a ( e , t ) { var o = e . sol ( ) , l = t . list !== ! 1 , a = t . indentedCode ; t . indentedCode = ! 1 , l && ( t . indentationDiff >= 0 ? ( t . indentationDiff < 4 && ( t . indentation -= t . indentationDiff ) , t . list = null ) : t . indentation > 0 ? ( t . list = null , t . listDepth = Math . floor ( t . indentation / 4 ) ) : ( t . list = ! 1 , t . listDepth = 0 ) ) ; var s = null ; if ( t . indentationDiff >= 4 ) return e . skipToEnd ( ) , a || ! t . prevLineHasContent ? ( t . indentation -= 4 , t . indentedCode = ! 0 , L ) : null ; if ( e . eatSpace ( ) ) return null ; if ( ( s = e . match ( G ) ) && s [ 1 ] . length <= 6 ) return t . header = s [ 1 ] . length , n . highlightFormatting && ( t . formatting = "header" ) , t . f = t . inline , h ( t ) ; if ( t . prevLineHasContent && ! t . quote && ! l && ! a && ( s = e . match ( $ ) ) ) return t . header = "=" == s [ 0 ] . charAt ( 0 ) ? 1 : 2 , n . highlightFormatting && ( t . formatting = "header" ) , t . f = t . inline , h ( t ) ; if ( e . eat ( ">" ) ) return t . quote = o ? 1 : t . quote + 1 , n . highlightFormatting && ( t . formatting = "quote" ) , e . eatSpace ( ) , h ( t ) ; if ( "[" === e . peek ( ) ) return i ( e , t , v ) ; if ( e . match ( B , ! 0 ) ) return t . hr = ! 0 , O ; if ( ( ! t . prevLineHasContent || l ) && ( e . match ( R , ! 1 ) || e . match ( q , ! 1 ) ) ) { var c = null ; return e . match ( R , ! 0 ) ? c = "ul" : ( e . match ( q , ! 0 ) , c = "ol" ) , t . indentation += 4 , t . list = ! 0 , t . listDepth ++ , n . taskLists && e . match ( U , ! 1 ) && ( t . taskList = ! 0 ) , t . f = t . inline , n . highlightFormatting && ( t . formatting = [ "list" , "list-" + c ] ) , h ( t ) } return n . fencedCodeBlocks && e . match ( /^```[ \t]*([\w+#]*)/ , ! 0 ) ? ( t . localMode = r ( RegExp . $1 ) , t . localMode && ( t . localState = t . localMode . startState ( ) ) , t . f = t . block = u , n . highlightFormatting && ( t . formatting = "code-block" ) , t . code = ! 0 , h ( t ) ) : i ( e , t , t . inline ) } function s ( e , t ) { var n = C . token ( e , t . htmlState ) ; return ( w && null === t . htmlState . tagStart && ! t . htmlState . context && t . htmlState . tokenize . isInText || t . md _inside && e . current ( ) . indexOf ( ">" ) > - 1 ) && ( t . f = d , t . block = a , t . htmlState = null ) , n } function u ( e , t ) { return e . sol ( ) && e . match ( "```" , ! 1 ) ? ( t . localMode = t . localState = null , t . f = t . block = c , null ) : t . localMode ? t . localMode . token ( e , t . localState ) : ( e . skipToEnd ( ) , L ) } function c ( e , t ) { e . match ( "```" ) , t . block = a , t . f = d , n . highlightFormatting && ( t . formatting = "code-block" ) , t . code = ! 0 ; var r = h ( t ) ; return t . code = ! 1 , r } function h ( e ) { var t = [ ] ; if ( e . formatting ) { t . push (
} ) ; else if ( o = this . rules . fences . exec ( e ) ) e = e . substring ( o [ 0 ] . length ) , this . tokens . push ( { type : "code" , lang : o [ 2 ] , text : o [ 3 ] || "" } ) ; else if ( o = this . rules . heading . exec ( e ) ) e = e . substring ( o [ 0 ] . length ) , this . tokens . push ( { type : "heading" , depth : o [ 1 ] . length , text : o [ 2 ] } ) ; else if ( t && ( o = this . rules . nptable . exec ( e ) ) ) { for ( e = e . substring ( o [ 0 ] . length ) , s = { type : "table" , header : o [ 1 ] . replace ( /^ *| *\| *$/g , "" ) . split ( / *\| */ ) , align : o [ 2 ] . replace ( /^ *|\| *$/g , "" ) . split ( / *\| */ ) , cells : o [ 3 ] . replace ( /\n$/ , "" ) . split ( "\n" ) } , h = 0 ; h < s . align . length ; h ++ ) s . align [ h ] = /^ *-+: *$/ . test ( s . align [ h ] ) ? "right" : /^ *:-+: *$/ . test ( s . align [ h ] ) ? "center" : /^ *:-+ *$/ . test ( s . align [ h ] ) ? "left" : null ; for ( h = 0 ; h < s . cells . length ; h ++ ) s . cells [ h ] = s . cells [ h ] . split ( / *\| */ ) ; this . tokens . push ( s ) } else if ( o = this . rules . lheading . exec ( e ) ) e = e . substring ( o [ 0 ] . length ) , this . tokens . push ( { type : "heading" , depth : "=" === o [ 2 ] ? 1 : 2 , text : o [ 1 ] } ) ; else if ( o = this . rules . hr . exec ( e ) ) e = e . substring ( o [ 0 ] . length ) , this . tokens . push ( { type : "hr" } ) ; else if ( o = this . rules . blockquote . exec ( e ) ) e = e . substring ( o [ 0 ] . length ) , this . tokens . push ( { type : "blockquote_start" } ) , o = o [ 0 ] . replace ( /^ *> ?/gm , "" ) , this . token ( o , t , ! 0 ) , this . tokens . push ( { type : "blockquote_end" } ) ; else if ( o = this . rules . list . exec ( e ) ) { for ( e = e . substring ( o [ 0 ] . length ) , l = o [ 2 ] , this . tokens . push ( { type : "list_start" , ordered : l . length > 1 } ) , o = o [ 0 ] . match ( this . rules . item ) , r = ! 1 , f = o . length , h = 0 ; f > h ; h ++ ) s = o [ h ] , u = s . length , s = s . replace ( /^ *([*+-]|\d+\.) +/ , "" ) , ~ s . indexOf ( "\n " ) && ( u -= s . length , s = this . options . pedantic ? s . replace ( /^ {1,4}/gm , "" ) : s . replace ( new RegExp ( "^ {1," + u + "}" , "gm" ) , "" ) ) , this . options . smartLists && h !== f - 1 && ( a = c . bullet . exec ( o [ h + 1 ] ) [ 0 ] , l === a || l . length > 1 && a . length > 1 || ( e = o . slice ( h + 1 ) . join ( "\n" ) + e , h = f - 1 ) ) , i = r || /\n\n(?!\s*$)/ . test ( s ) , h !== f - 1 && ( r = "\n" === s . charAt ( s . length - 1 ) , i || ( i = r ) ) , this . tokens . push ( { type : i ? "loose_item_start" : "list_item_start" } ) , this . token ( s , ! 1 , n ) , this . tokens . push ( { type : "list_item_end" } ) ; this . tokens . push ( { type : "list_end" } ) } else if ( o = this . rules . html . exec ( e ) ) e = e . substring ( o [ 0 ] . length ) , this . tokens . push ( { type : this . options . sanitize ? "paragraph" : "html" , pre : ! this . options . sanitizer && ( "pre" === o [ 1 ] || "script" === o [ 1 ] || "style" === o [ 1 ] ) , text : o [ 0 ] } ) ; else if ( ! n && t && ( o = this . rules . def . exec ( e ) ) ) e = e . substring ( o [ 0 ] . length ) , this . tokens . links [ o [ 1 ] . toLowerCase ( ) ] = { href : o [ 2 ] , title : o [ 3 ] } ; else if ( t && ( o = this . rules . table . exec ( e ) ) ) { for ( e = e . substring ( o [ 0 ] . length ) , s = { type : "table" , header : o [ 1 ] . replace ( /^ *| *\| *$/g , "" ) . split ( / *\| */ ) , align : o [ 2 ] . replace ( /^ *|\| *$/g , "" ) . split ( / *\| */ ) , cells : o [ 3 ] . replace ( /(?: *\| *)?\n$/ , "" ) . split ( "\n" ) } , h = 0 ; h < s . align . length ; h ++ ) s . align [ h ] = /^ *-+: *$/ . test ( s . align [ h ] ) ? "right" : /^ *:-+: *$/ . test ( s . align [ h ] ) ? "center" : /^ *:-+ *$/ . test ( s . align [ h ] ) ? "left" : null ; for ( h = 0 ; h < s . cells . length ; h ++ ) s . cells [ h ] = s . cells [ h ] . replace ( /^ *\| *| *\| *$/g , "" ) . split ( / *\| */ ) ; this . tokens . push ( s ) } else if ( t && ( o = this . rules . paragraph . exec ( e ) ) ) e = e . substring ( o [ 0 ] . length ) , this . tokens . push ( { type : "paragraph" , text : "\n" === o [ 1 ] . charAt ( o [ 1 ] . length - 1 ) ? o [ 1 ] . slice ( 0 , - 1 ) : o [ 1 ] } ) ; else if ( o = this . rules . text . exec ( e ) ) e = e . substring ( o [ 0 ] . length ) , this . tokens . push ( { type : "text" , text : o [ 0 ] } ) ; else if ( e ) throw new Error ( "Infinite loop on byte: " + e . charCodeAt ( 0 ) ) ; return this . tokens } ; var h = { escape : /^\\([\\`*{}\[\]()#+\-.!_>])/ , autolink : /^<([^ >]+(@|:\/)[^ >]+)>/ , url : a , tag : /^<!--[\s\S]*?-->|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/ , link : /^!?\[(inside)\]\(href\)/ , reflink : /^!?\[(inside)\]\s*\[([^\]]*)\]/ , nolink : /^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/ , strong : /^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/ , em : /^\b_((?:[^_]|__)+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/ , code : /^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/ , br : /^ {2,}\n(?!\s*$)/ , del : a , text : /^[\s\S]+?(?=[\\<!\[_*`]| {2,}\n|$)/ } ; h . _inside = /(?:\[[^\]]*\]|[^\[\]]|\](?=[^\[]*\]))*/ , h . _href = /\s*<?([\s\S]*?)>?(?:\s+['"]([\s\S]*?)['"])?\s*/ , h . link = l ( h . link ) ( "inside" , h . _inside ) ( "href" , h . _href ) ( ) , h . reflink = l ( h . reflink ) ( "inside" , h . _inside ) ( ) , h . normal = s ( { } , h ) , h . pedantic = s ( { } , h . normal , { strong : /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/ , em : /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/ } ) , h . gfm = s ( { } , h . normal , { escape : l ( h . escape ) ( "])" , "~|])" ) ( ) , url : /^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/ , del : / ^ ~ ~ ( ?