@SuppressWarnings("AssignmentToForLoopParameter")
  @Override
  protected List<Pair<TextRange, String>> getDecodeReplacements(@NotNull CharSequence input) {
    List<Pair<TextRange, String>> result = new ArrayList<>();

    for (int i = 0; i + 1 < input.length(); ++i) {

      if (isSingleQuote() && input.charAt(i) == '\'' && input.charAt(i + 1) == '\'') {
        result.add(Pair.create(TextRange.from(i, 2), "'"));
        i++;
      }
      else if (!isSingleQuote() && input.charAt(i) == '\\') {
        if (input.charAt(i + 1) == '\n') {
          result.add(Pair.create(TextRange.from(i, 2), i > 0 || input.length() > i + 2 ? "" : "\n"));
          i++;
          continue;
        }
        final int length = Escaper.findEscapementLength(input, i);
        final int charCode = Escaper.toUnicodeChar(input, i, length);
        final TextRange range = TextRange.create(i, Math.min(i + length + 1, input.length()));
        result.add(Pair.create(range, Character.toString((char)charCode)));
        i += range.getLength() - 1;
      }
    }
    return result;
  }
@SuppressWarnings("AssignmentToForLoopParameter")
  @Override
  protected List<Pair<TextRange, String>> getDecodeReplacements(@NotNull CharSequence input)