@@ -48,6 +48,9 @@ CodeMirror.defineMode("markdown", function(cmCfg, modeCfg) {
4848 if ( modeCfg . fencedCodeBlockHighlighting === undefined )
4949 modeCfg . fencedCodeBlockHighlighting = true ;
5050
51+ if ( modeCfg . fencedCodeBlockDefaultMode === undefined )
52+ modeCfg . fencedCodeBlockDefaultMode = 'text/plain' ;
53+
5154 if ( modeCfg . xml === undefined )
5255 modeCfg . xml = true ;
5356
@@ -88,13 +91,13 @@ CodeMirror.defineMode("markdown", function(cmCfg, modeCfg) {
8891 , listRE = / ^ (?: [ * \- + ] | ^ [ 0 - 9 ] + ( [ . ) ] ) ) \s + /
8992 , taskListRE = / ^ \[ ( x | ) \] (? = \s ) / i // Must follow listRE
9093 , atxHeaderRE = modeCfg . allowAtxHeaderWithoutSpace ? / ^ ( # + ) / : / ^ ( # + ) (?: | $ ) /
91- , setextHeaderRE = / ^ * (?: \= { 1 , } | - { 1 , } ) \s * $ /
94+ , setextHeaderRE = / ^ { 0 , 3 } (?: \= { 1 , } | - { 2 , } ) \s * $ /
9295 , textRE = / ^ [ ^ # ! \[ \] * _ \\ < > \$ ` " ' ( ~ : ] + /
93- , fencedCodeRE = / ^ ( ~ ~ ~ + | ` ` ` + ) [ \t ] * ( [ \w + # - ] * ) [ ^ \n ` ] * $ /
96+ , fencedCodeRE = / ^ ( ~ ~ ~ + | ` ` ` + ) [ \t ] * ( [ \w \/ + # - ] * ) [ ^ \n ` ] * $ /
9497 , linkDefRE = / ^ \s * \[ [ ^ \] ] + ?\] : .* $ / // naive link-definition
9598 , punctuation = / [ ! " # $ % & ' ( ) * + , \- . \/ : ; < = > ? @ \[ \\ \] ^ _ ` { | } ~ \xA1 \xA7 \xAB \xB6 \xB7 \xBB \xBF \u037E \u0387 \u055A - \u055F \u0589 \u058A \u05BE \u05C0 \u05C3 \u05C6 \u05F3 \u05F4 \u0609 \u060A \u060C \u060D \u061B \u061E \u061F \u066A - \u066D \u06D4 \u0700 - \u070D \u07F7 - \u07F9 \u0830 - \u083E \u085E \u0964 \u0965 \u0970 \u0AF0 \u0DF4 \u0E4F \u0E5A \u0E5B \u0F04 - \u0F12 \u0F14 \u0F3A - \u0F3D \u0F85 \u0FD0 - \u0FD4 \u0FD9 \u0FDA \u104A - \u104F \u10FB \u1360 - \u1368 \u1400 \u166D \u166E \u169B \u169C \u16EB - \u16ED \u1735 \u1736 \u17D4 - \u17D6 \u17D8 - \u17DA \u1800 - \u180A \u1944 \u1945 \u1A1E \u1A1F \u1AA0 - \u1AA6 \u1AA8 - \u1AAD \u1B5A - \u1B60 \u1BFC - \u1BFF \u1C3B - \u1C3F \u1C7E \u1C7F \u1CC0 - \u1CC7 \u1CD3 \u2010 - \u2027 \u2030 - \u2043 \u2045 - \u2051 \u2053 - \u205E \u207D \u207E \u208D \u208E \u2308 - \u230B \u2329 \u232A \u2768 - \u2775 \u27C5 \u27C6 \u27E6 - \u27EF \u2983 - \u2998 \u29D8 - \u29DB \u29FC \u29FD \u2CF9 - \u2CFC \u2CFE \u2CFF \u2D70 \u2E00 - \u2E2E \u2E30 - \u2E42 \u3001 - \u3003 \u3008 - \u3011 \u3014 - \u301F \u3030 \u303D \u30A0 \u30FB \uA4FE \uA4FF \uA60D - \uA60F \uA673 \uA67E \uA6F2 - \uA6F7 \uA874 - \uA877 \uA8CE \uA8CF \uA8F8 - \uA8FA \uA8FC \uA92E \uA92F \uA95F \uA9C1 - \uA9CD \uA9DE \uA9DF \uAA5C - \uAA5F \uAADE \uAADF \uAAF0 \uAAF1 \uABEB \uFD3E \uFD3F \uFE10 - \uFE19 \uFE30 - \uFE52 \uFE54 - \uFE61 \uFE63 \uFE68 \uFE6A \uFE6B \uFF01 - \uFF03 \uFF05 - \uFF0A \uFF0C - \uFF0F \uFF1A \uFF1B \uFF1F \uFF20 \uFF3B - \uFF3D \uFF3F \uFF5B \uFF5D \uFF5F - \uFF65 ] | \uD800 [ \uDD00 - \uDD02 \uDF9F \uDFD0 ] | \uD801 \uDD6F | \uD802 [ \uDC57 \uDD1F \uDD3F \uDE50 - \uDE58 \uDE7F \uDEF0 - \uDEF6 \uDF39 - \uDF3F \uDF99 - \uDF9C ] | \uD804 [ \uDC47 - \uDC4D \uDCBB \uDCBC \uDCBE - \uDCC1 \uDD40 - \uDD43 \uDD74 \uDD75 \uDDC5 - \uDDC9 \uDDCD \uDDDB \uDDDD - \uDDDF \uDE38 - \uDE3D \uDEA9 ] | \uD805 [ \uDCC6 \uDDC1 - \uDDD7 \uDE41 - \uDE43 \uDF3C - \uDF3E ] | \uD809 [ \uDC70 - \uDC74 ] | \uD81A [ \uDE6E \uDE6F \uDEF5 \uDF37 - \uDF3B \uDF44 ] | \uD82F \uDC9F | \uD836 [ \uDE87 - \uDE8B ] /
9699 , expandedTab = " " // CommonMark specifies tab as 4 spaces
97- , fencedMathRE = / ^ ( \$ \$ ) [ \t ] * ( [ \w + # - ] * ) [ ^ \n ` ] * $ /
100+ , fencedMathRE = / ^ ( \$ \$ ) [ \t ] * ( [ \w \/ + # - ] * ) [ ^ \n ` ] * $ /
98101
99102 function switchInline ( stream , state , f ) {
100103 state . f = state . inline = f ;
@@ -238,7 +241,7 @@ CodeMirror.defineMode("markdown", function(cmCfg, modeCfg) {
238241 state . quote = 0 ;
239242 state . fencedEndRE = new RegExp ( match [ 1 ] + "+ *$" ) ;
240243 // try switching mode
241- state . localMode = modeCfg . fencedCodeBlockHighlighting && getMode ( match [ 2 ] ) ;
244+ state . localMode = modeCfg . fencedCodeBlockHighlighting && getMode ( match [ 2 ] || modeCfg . fencedCodeBlockDefaultMode ) ;
242245 if ( state . localMode ) state . localState = CodeMirror . startState ( state . localMode ) ;
243246 state . f = state . block = local ;
244247 if ( modeCfg . highlightFormatting ) state . formatting = "code-block" ;
@@ -247,7 +250,7 @@ CodeMirror.defineMode("markdown", function(cmCfg, modeCfg) {
247250 } else if ( firstTokenOnLine && state . indentation <= maxNonCodeIndentation && ( match = stream . match ( fencedMathRE , true ) ) ) {
248251 state . fencedEndRE = new RegExp ( match [ 1 ] . replace ( / \$ / g, '\\$' ) + "+ *$" ) ;
249252 // try switching mode
250- state . localMode = modeCfg . fencedCodeBlockHighlighting && getMode ( match [ 2 ] ) ;
253+ state . localMode = modeCfg . fencedCodeBlockHighlighting && getMode ( match [ 2 ] || modeCfg . fencedCodeBlockDefaultMode ) ;
251254 if ( state . localMode ) state . localState = CodeMirror . startState ( state . localMode ) ;
252255 state . f = state . block = local ;
253256 state . formatting = "math" ;
0 commit comments