code: function needsSpace(a, b) {
    var aa = a.slice(-1);
    var bb = b.charAt(0);
  
    if (bb === '.' && /\w/.test(b.charAt(1)) && aa !== '\n') {
      return true;
    }
  
    if (utils.isEndingChar(bb)) {
      return false;
    }
  
    if (aa === '`' && !/\s/.test(a.charAt(a.length - 2))) {
      return true;
    }
  
    if (/[*_]/.test(aa) && /\w/.test(bb)) {
      return true;
    }
  
    if (utils.isOpeningChar(aa)) {
      return false;
    }
  
    if (utils.isTightSeparator(aa) || utils.isTightSeparator(bb)) {
      return false;
    }
  
    if ((utils.isLooseSeparator(aa) || utils.isLooseSeparator(bb)) && !/\s/.test(aa)) {
      return true;
    }
  
    if (/\s/.test(aa) && utils.isStartingChar(bb)) {
      return false;
    }
  
    if (utils.isWrappingChar(aa) && utils.isStartingChar(bb)) {
      return true;
    }
  
    if (utils.isEndingChar(aa) && !/<br>$/.test(a) && !/\s/.test(bb) && !utils.isEndingChar(bb)) {
      return true;
    }
  
    if ((utils.isStartingChar(bb) || utils.isWrappingChar(bb) || utils.isWrappingChar(aa)) && !utils.isStartingChar(aa)) {
      return true;
    }
  
    if (utils.isWordChar(aa) && utils.isWordChar(bb)) {
      return true;
    }
  
    if (/\W/.test(bb) && !utils.isStartingChar(bb) && !utils.isOpeningChar(bb) && !utils.isEndingChar(bb) && !utils.isSpecialChar(bb) && !utils.isSeparator(bb) && !utils.isStartingChar(aa)) {
      return true;
    }
  
    return false;
  }
docs: a => ending character
  b => starting character