@@ -11357,6 +11357,226 @@ CodeMirror.defineMIME("text/x-markdown", "markdown");
11357
11357
; // CodeMirror, copyright (c) by Marijn Haverbeke and others
11358
11358
// Distributed under an MIT license: https://codemirror.net/LICENSE
11359
11359
11360
+ // Utility function that allows modes to be combined. The mode given
11361
+ // as the base argument takes care of most of the normal mode
11362
+ // functionality, but a second (typically simple) mode is used, which
11363
+ // can override the style of text. Both modes get to parse all of the
11364
+ // text, but when both assign a non-null style to a piece of code, the
11365
+ // overlay wins, unless the combine argument was true and not overridden,
11366
+ // or state.overlay.combineTokens was true, in which case the styles are
11367
+ // combined.
11368
+
11369
+ ( function ( mod ) {
11370
+ if ( typeof exports == "object" && typeof module == "object" ) // CommonJS
11371
+ mod ( require ( "../../lib/codemirror" ) ) ;
11372
+ else if ( typeof define == "function" && define . amd ) // AMD
11373
+ define ( [ "../../lib/codemirror" ] , mod ) ;
11374
+ else // Plain browser env
11375
+ mod ( CodeMirror ) ;
11376
+ } ) ( function ( CodeMirror ) {
11377
+ "use strict" ;
11378
+
11379
+ CodeMirror . overlayMode = function ( base , overlay , combine ) {
11380
+ return {
11381
+ startState : function ( ) {
11382
+ return {
11383
+ base : CodeMirror . startState ( base ) ,
11384
+ overlay : CodeMirror . startState ( overlay ) ,
11385
+ basePos : 0 , baseCur : null ,
11386
+ overlayPos : 0 , overlayCur : null ,
11387
+ streamSeen : null
11388
+ } ;
11389
+ } ,
11390
+ copyState : function ( state ) {
11391
+ return {
11392
+ base : CodeMirror . copyState ( base , state . base ) ,
11393
+ overlay : CodeMirror . copyState ( overlay , state . overlay ) ,
11394
+ basePos : state . basePos , baseCur : null ,
11395
+ overlayPos : state . overlayPos , overlayCur : null
11396
+ } ;
11397
+ } ,
11398
+
11399
+ token : function ( stream , state ) {
11400
+ if ( stream != state . streamSeen ||
11401
+ Math . min ( state . basePos , state . overlayPos ) < stream . start ) {
11402
+ state . streamSeen = stream ;
11403
+ state . basePos = state . overlayPos = stream . start ;
11404
+ }
11405
+
11406
+ if ( stream . start == state . basePos ) {
11407
+ state . baseCur = base . token ( stream , state . base ) ;
11408
+ state . basePos = stream . pos ;
11409
+ }
11410
+ if ( stream . start == state . overlayPos ) {
11411
+ stream . pos = stream . start ;
11412
+ state . overlayCur = overlay . token ( stream , state . overlay ) ;
11413
+ state . overlayPos = stream . pos ;
11414
+ }
11415
+ stream . pos = Math . min ( state . basePos , state . overlayPos ) ;
11416
+
11417
+ // state.overlay.combineTokens always takes precedence over combine,
11418
+ // unless set to null
11419
+ if ( state . overlayCur == null ) return state . baseCur ;
11420
+ else if ( state . baseCur != null &&
11421
+ state . overlay . combineTokens ||
11422
+ combine && state . overlay . combineTokens == null )
11423
+ return state . baseCur + " " + state . overlayCur ;
11424
+ else return state . overlayCur ;
11425
+ } ,
11426
+
11427
+ indent : base . indent && function ( state , textAfter , line ) {
11428
+ return base . indent ( state . base , textAfter , line ) ;
11429
+ } ,
11430
+ electricChars : base . electricChars ,
11431
+
11432
+ innerMode : function ( state ) { return { state : state . base , mode : base } ; } ,
11433
+
11434
+ blankLine : function ( state ) {
11435
+ var baseToken , overlayToken ;
11436
+ if ( base . blankLine ) baseToken = base . blankLine ( state . base ) ;
11437
+ if ( overlay . blankLine ) overlayToken = overlay . blankLine ( state . overlay ) ;
11438
+
11439
+ return overlayToken == null ?
11440
+ baseToken :
11441
+ ( combine && baseToken != null ? baseToken + " " + overlayToken : overlayToken ) ;
11442
+ }
11443
+ } ;
11444
+ } ;
11445
+
11446
+ } ) ;
11447
+ ; // CodeMirror, copyright (c) by Marijn Haverbeke and others
11448
+ // Distributed under an MIT license: http://codemirror.net/LICENSE
11449
+
11450
+ ( function ( mod ) {
11451
+ if ( typeof exports == "object" && typeof module == "object" ) // CommonJS
11452
+ mod ( require ( "../../lib/codemirror" ) , require ( "../markdown/markdown" ) , require ( "../../addon/mode/overlay" ) ) ;
11453
+ else if ( typeof define == "function" && define . amd ) // AMD
11454
+ define ( [ "../../lib/codemirror" , "../markdown/markdown" , "../../addon/mode/overlay" ] , mod ) ;
11455
+ else // Plain browser env
11456
+ mod ( CodeMirror ) ;
11457
+ } ) ( function ( CodeMirror ) {
11458
+ "use strict" ;
11459
+
11460
+ var urlRE = / ^ ( (?: (?: a a a s ? | a b o u t | a c a p | a d i u m x t r a | a f [ p s ] | a i m | a p t | a t t a c h m e n t | a w | b e s h a r e | b i t c o i n | b o l o | c a l l t o | c a p | c h r o m e (?: - e x t e n s i o n ) ? | c i d | c o a p | c o m - e v e n t b r i t e - a t t e n d e e | c o n t e n t | c r i d | c v s | d a t a | d a v | d i c t | d l n a - (?: p l a y c o n t a i n e r | p l a y s i n g l e ) | d n s | d o i | d t n | d v b | e d 2 k | f a c e t i m e | f e e d | f i l e | f i n g e r | f i s h | f t p | g e o | g g | g i t | g i z m o p r o j e c t | g o | g o p h e r | g t a l k | h 3 2 3 | h c p | h t t p s ? | i a x | i c a p | i c o n | i m | i m a p | i n f o | i p n | i p p | i r c [ 6 s ] ? | i r i s (?: \. b e e p | \. l w z | \. x p c | \. x p c s ) ? | i t m s | j a r | j a v a s c r i p t | j m s | k e y p a r c | l a s t f m | l d a p s ? | m a g n e t | m a i l t o | m a p s | m a r k e t | m e s s a g e | m i d | m m s | m s - h e l p | m s n i m | m s r p s ? | m t q p | m u m b l e | m u p d a t e | m v n | n e w s | n f s | n i h ? | n n t p | n o t e s | o i d | o p a q u e l o c k t o k e n | p a l m | p a p a r a z z i | p l a t f o r m | p o p | p r e s | p r o x y | p s y c | q u e r y | r e s (?: o u r c e ) ? | r m i | r s y n c | r t m p | r t s p | s e c o n d l i f e | s e r v i c e | s e s s i o n | s f t p | s g n | s h t t p | s i e v e | s i p s ? | s k y p e | s m [ b s ] | s n m p | s o a p \. b e e p s ? | s o l d a t | s p o t i f y | s s h | s t e a m | s v n | t a g | t e a m s p e a k | t e l (?: n e t ) ? | t f t p | t h i n g s | t h i s m e s s a g e | t i p | t n 3 2 7 0 | t v | u d p | u n r e a l | u r n | u t 2 0 0 4 | v e m m i | v e n t r i l o | v i e w - s o u r c e | w e b c a l | w s s ? | w t a i | w y c i w y g | x c o n (?: - u s e r i d ) ? | x f i r e | x m l r p c \. b e e p s ? | x m p p | x r i | y m s g r | z 3 9 \. 5 0 [ r s ] ? ) : (?: \/ { 1 , 3 } | [ a - z 0 - 9 % ] ) | w w w \d { 0 , 3 } [ . ] | [ a - z 0 - 9 . \- ] + [ . ] [ a - z ] { 2 , 4 } \/ ) (?: [ ^ \s ( ) < > ] | \( [ ^ \s ( ) < > ] * \) ) + (?: \( [ ^ \s ( ) < > ] * \) | [ ^ \s ` * ! ( ) \[ \] { } ; : ' " . , < > ? « » “ ” ‘ ’ ] ) ) / i
11461
+
11462
+ CodeMirror . defineMode ( "gfm" , function ( config , modeConfig ) {
11463
+ var codeDepth = 0 ;
11464
+ function blankLine ( state ) {
11465
+ state . code = false ;
11466
+ return null ;
11467
+ }
11468
+ var gfmOverlay = {
11469
+ startState : function ( ) {
11470
+ return {
11471
+ code : false ,
11472
+ codeBlock : false ,
11473
+ ateSpace : false
11474
+ } ;
11475
+ } ,
11476
+ copyState : function ( s ) {
11477
+ return {
11478
+ code : s . code ,
11479
+ codeBlock : s . codeBlock ,
11480
+ ateSpace : s . ateSpace
11481
+ } ;
11482
+ } ,
11483
+ token : function ( stream , state ) {
11484
+ state . combineTokens = null ;
11485
+
11486
+ // Hack to prevent formatting override inside code blocks (block and inline)
11487
+ if ( state . codeBlock ) {
11488
+ if ( stream . match ( / ^ ` ` ` + / ) ) {
11489
+ state . codeBlock = false ;
11490
+ return null ;
11491
+ }
11492
+ stream . skipToEnd ( ) ;
11493
+ return null ;
11494
+ }
11495
+ if ( stream . sol ( ) ) {
11496
+ state . code = false ;
11497
+ }
11498
+ if ( stream . sol ( ) && stream . match ( / ^ ` ` ` + / ) ) {
11499
+ stream . skipToEnd ( ) ;
11500
+ state . codeBlock = true ;
11501
+ return null ;
11502
+ }
11503
+ // If this block is changed, it may need to be updated in Markdown mode
11504
+ if ( stream . peek ( ) === '`' ) {
11505
+ stream . next ( ) ;
11506
+ var before = stream . pos ;
11507
+ stream . eatWhile ( '`' ) ;
11508
+ var difference = 1 + stream . pos - before ;
11509
+ if ( ! state . code ) {
11510
+ codeDepth = difference ;
11511
+ state . code = true ;
11512
+ } else {
11513
+ if ( difference === codeDepth ) { // Must be exact
11514
+ state . code = false ;
11515
+ }
11516
+ }
11517
+ return null ;
11518
+ } else if ( state . code ) {
11519
+ stream . next ( ) ;
11520
+ return null ;
11521
+ }
11522
+ // Check if space. If so, links can be formatted later on
11523
+ if ( stream . eatSpace ( ) ) {
11524
+ state . ateSpace = true ;
11525
+ return null ;
11526
+ }
11527
+ if ( stream . sol ( ) || state . ateSpace ) {
11528
+ state . ateSpace = false ;
11529
+ if ( modeConfig . gitHubSpice !== false ) {
11530
+ if ( stream . match ( / ^ (?: [ a - z A - Z 0 - 9 \- _ ] + \/ ) ? (?: [ a - z A - Z 0 - 9 \- _ ] + @ ) ? (?: [ a - f 0 - 9 ] { 7 , 40 } \b ) / ) ) {
11531
+ // User/Project@SHA
11532
+ // User@SHA
11533
+ // SHA
11534
+ state . combineTokens = true ;
11535
+ return "link" ;
11536
+ } else if ( stream . match ( / ^ (?: [ a - z A - Z 0 - 9 \- _ ] + \/ ) ? (?: [ a - z A - Z 0 - 9 \- _ ] + ) ? # [ 0 - 9 ] + \b / ) ) {
11537
+ // User/Project#Num
11538
+ // User#Num
11539
+ // #Num
11540
+ state . combineTokens = true ;
11541
+ return "link" ;
11542
+ }
11543
+ }
11544
+ }
11545
+ if ( stream . match ( urlRE ) &&
11546
+ stream . string . slice ( stream . start - 2 , stream . start ) != "](" &&
11547
+ ( stream . start == 0 || / \W / . test ( stream . string . charAt ( stream . start - 1 ) ) ) ) {
11548
+ // URLs
11549
+ // Taken from http://daringfireball.net/2010/07/improved_regex_for_matching_urls
11550
+ // And then (issue #1160) simplified to make it not crash the Chrome Regexp engine
11551
+ // And then limited url schemes to the CommonMark list, so foo:bar isn't matched as a URL
11552
+ state . combineTokens = true ;
11553
+ return "link" ;
11554
+ }
11555
+ stream . next ( ) ;
11556
+ return null ;
11557
+ } ,
11558
+ blankLine : blankLine
11559
+ } ;
11560
+
11561
+ var markdownConfig = {
11562
+ underscoresBreakWords : false ,
11563
+ taskLists : true ,
11564
+ fencedCodeBlocks : '```' ,
11565
+ strikethrough : true
11566
+ } ;
11567
+ for ( var attr in modeConfig ) {
11568
+ markdownConfig [ attr ] = modeConfig [ attr ] ;
11569
+ }
11570
+ markdownConfig . name = "markdown" ;
11571
+ return CodeMirror . overlayMode ( CodeMirror . getMode ( config , markdownConfig ) , gfmOverlay ) ;
11572
+
11573
+ } , "markdown" ) ;
11574
+
11575
+ CodeMirror . defineMIME ( "text/x-gfm" , "gfm" ) ;
11576
+ } ) ;
11577
+ ; // CodeMirror, copyright (c) by Marijn Haverbeke and others
11578
+ // Distributed under an MIT license: https://codemirror.net/LICENSE
11579
+
11360
11580
// Because sometimes you need to mark the selected *text*.
11361
11581
//
11362
11582
// Adds an option 'styleSelectedText' which, when enabled, gives
@@ -11553,7 +11773,7 @@ document.addEventListener("DOMContentLoaded", function (event) {
11553
11773
11554
11774
function loadEditor ( ) {
11555
11775
editor = CodeMirror . fromTextArea ( document . getElementById ( "code" ) , {
11556
- mode : "markdown " ,
11776
+ mode : "gfm " ,
11557
11777
lineWrapping : true ,
11558
11778
extraKeys : {
11559
11779
"Alt-F" : "findPersistent"
0 commit comments