diff --git a/src/js/simplemde.js b/src/js/simplemde.js index d37604d..adb6660 100644 --- a/src/js/simplemde.js +++ b/src/js/simplemde.js @@ -263,6 +263,11 @@ function toggleCodeBlock(editor) { return line.styles && line.styles[2] && line.styles[2].indexOf("formatting-code-block") !== -1; } + function token_state(token) { + // base goes an extra level deep when mode backdrops are used, e.g. spellchecker on + return token.state.base.base || token.state.base; + } + function code_type(cm, line_num, line, firstTok, lastTok) { /* * Return "single", "indented", "fenced" or false @@ -280,13 +285,13 @@ function toggleCodeBlock(editor) { ch: line.text.length - 1 })); var types = firstTok.type ? firstTok.type.split(" ") : []; - if(lastTok && lastTok.state.base.indentedCode) { + if(lastTok && token_state(lastTok).indentedCode) { // have to check last char, since first chars of first line aren"t marked as indented return "indented"; } else if(types.indexOf("comment") === -1) { // has to be after "indented" check, since first chars of first indented line aren"t marked as such return false; - } else if(firstTok.state.base.fencedChars || lastTok.state.base.fencedChars || fencing_line(line)) { + } else if(token_state(firstTok).fencedChars || token_state(lastTok).fencedChars || fencing_line(line)) { return "fenced"; } else { return "single"; @@ -358,7 +363,7 @@ function toggleCodeBlock(editor) { line: block_start, ch: 1 }); - insertFencingAtSelection(cm, cur_start, cur_end, fencedTok.state.base.fencedChars); + insertFencingAtSelection(cm, cur_start, cur_end, token_state(fencedTok).fencedChars); } else { // no selection, search for ends of this fenced block var search_from = cur_start.line; @@ -449,7 +454,7 @@ function toggleCodeBlock(editor) { line: block_end + 1, ch: next_line.text.length - 1 }), - next_line_indented = next_line_last_tok && next_line_last_tok.state.base.indentedCode; + next_line_indented = next_line_last_tok && token_state(next_line_last_tok).indentedCode; if(next_line_indented) { cm.replaceRange("\n", { line: block_end + 1,