| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 | // Process escaped chars and hardbreaks'use strict';var isSpace = require('../common/utils').isSpace;var ESCAPED = [];for (var i = 0; i < 256; i++) { ESCAPED.push(0); }'\\!"#$%&\'()*+,./:;<=>?@[]^_`{|}~-'  .split('').forEach(function (ch) { ESCAPED[ch.charCodeAt(0)] = 1; });module.exports = function escape(state, silent) {  var ch1, ch2, origStr, escapedStr, token, pos = state.pos, max = state.posMax;  if (state.src.charCodeAt(pos) !== 0x5C/* \ */) return false;  pos++;  // '\' at the end of the inline block  if (pos >= max) return false;  ch1 = state.src.charCodeAt(pos);  if (ch1 === 0x0A) {    if (!silent) {      state.push('hardbreak', 'br', 0);    }    pos++;    // skip leading whitespaces from next line    while (pos < max) {      ch1 = state.src.charCodeAt(pos);      if (!isSpace(ch1)) break;      pos++;    }    state.pos = pos;    return true;  }  escapedStr = state.src[pos];  if (ch1 >= 0xD800 && ch1 <= 0xDBFF && pos + 1 < max) {    ch2 = state.src.charCodeAt(pos + 1);    if (ch2 >= 0xDC00 && ch2 <= 0xDFFF) {      escapedStr += state.src[pos + 1];      pos++;    }  }  origStr = '\\' + escapedStr;  if (!silent) {    token = state.push('text_special', '', 0);    if (ch1 < 256 && ESCAPED[ch1] !== 0) {      token.content = escapedStr;    } else {      token.content = origStr;    }    token.markup = origStr;    token.info   = 'escape';  }  state.pos = pos + 1;  return true;};
 |