1:- module(md_hr, [
    2    md_hr//0,
    3    md_lookahead_hr//0
    4]).

Parser for Markdown horizontal rulers

Recognizes horizontal rulers. */

   11:- use_module(library(dcg/basics)).   12:- use_module(md_line).
 md_hr// is semidet
Recognizes an horizontal ruler.
   18md_hr -->
   19    code_hr(0'*, 3, _), !.
   20
   21md_hr -->
   22    code_hr(0'-, 3, _).
 md_lookahead_hr// is semidet
Looks ahead an horizontal ruler.
   28md_lookahead_hr, Codes -->
   29    code_hr(0'*, 3, Codes), !.
   30
   31md_lookahead_hr, Codes -->
   32    code_hr(0'-, 3, Codes).
   33
   34% Recognizes given number of codes
   35% separated on a single line by 0
   36% or more spaces or tabs.
   37
   38code_hr(_, 0, []) -->
   39    eos, !.
   40
   41code_hr(_, 0, [0'\n]) -->
   42    "\n", !.
   43
   44code_hr(Code, 0, [Code|Codes]) -->
   45    [Code], !, code_hr(Code, 0, Codes).
   46
   47code_hr(Code, N, [0' |Codes]) -->
   48    " ", !, code_hr(Code, N, Codes).
   49
   50code_hr(Code, N, [0'\t|Codes]) -->
   51    "\t", !, code_hr(Code, N, Codes).
   52
   53code_hr(Code, N, [Code|Codes]) -->
   54    [Code], !, { N1 is N - 1 },
   55    code_hr(Code, N1, Codes)