1:- module(md_escape, [
    2    md_escaped_string//1, % -Codes,
    3    md_escaped_code//1,   % ?Code
    4    md_escaped_code/1     % ?Code
    5]).

Markdown slash-escaped sequences

Recognizes Markdown slash-escaped sequences. More info: http://daringfireball.net/projects/markdown/syntax#backslash */

 md_escaped_string(-Codes)// is det
Recognizes string with escapes inside it. Consumes new code/escape sequence on backtracking.
   18md_escaped_string([]) --> "".
   19
   20md_escaped_string([Code|Codes]) -->
   21    "\\", md_escaped_code(Code), !,
   22    md_escaped_string(Codes).
   23
   24md_escaped_string([Code|Codes]) -->
   25    [Code], md_escaped_string(Codes).
 md_escaped_code(-Codes)// is det
Recognizes single code that could have been escaped.
   32md_escaped_code(Code) -->
   33    [Code], { md_escaped_code(Code) }.
 md_escaped_code(?Code) is nondet
List of possibly escaped symbols. More info: http://daringfireball.net/projects/markdown/syntax#backslash
   41md_escaped_code(0'\\).
   42md_escaped_code(0'`).
   43md_escaped_code(0'*).
   44md_escaped_code(0'_).
   45md_escaped_code(0'{).
   46md_escaped_code(0'}).
   47md_escaped_code(0'[).
   48md_escaped_code(0']).
   49md_escaped_code(0'().
   50md_escaped_code(0')).
   51md_escaped_code(0'#).
   52md_escaped_code(0'+).
   53md_escaped_code(0'-).
   54md_escaped_code(0'.).
   55md_escaped_code(0'!).
   56md_escaped_code(0'~)