diff --git a/lib/Text/Dokuwiki/Regexps.pm b/lib/Text/Dokuwiki/Regexps.pm index f28ce1c..4ae3464 100644 --- a/lib/Text/Dokuwiki/Regexps.pm +++ b/lib/Text/Dokuwiki/Regexps.pm @@ -9,11 +9,19 @@ my $EOL = '\r?\n'; my $TAIL = '(?:^\s*$)*'; our $regexps = {}; -$regexps->{header} = qr{ -^ (?
.+ ) $EOL -^ (? [=-]+ ) (?: $EOL | $) +$regexps->{header} = qr/ +(?: + ^ # line start + $SP? # maybe one leading space + (? ={2,6} ) # header marks + \s* # leading spaces + (?
.+? ) # header text + \s* # trailing spaces + (?: \g{line}) # header mark (exactly same as above) + (?: $EOL | $) # newline or file end +) $TAIL -}mx; +/mx; $regexps->{codeblock} = qr% ^ # first line diff --git a/t/regexps-misc.t b/t/regexps-misc.t index ccf7eaa..f044fc8 100644 --- a/t/regexps-misc.t +++ b/t/regexps-misc.t @@ -11,36 +11,34 @@ my $rx = $Text::Dokuwiki::Regexps::regexps; use re 'debugcolor'; my $text = <<'TEXT'; -Header 1st level -================= +====== Header 1st level ====== TEXT my $matched = 'Header 1st level'; my @matches = $text =~ m/$rx->{header}/; is(scalar @matches, 2); +is($+{line}, '======'); is($+{header}, $matched); -is($+{line}, '================='); -is($matches[0], $matched); -is($matches[1], '================='); +is($matches[0], '======'); +is($matches[1], $matched); $text = <<'TEXT'; -Header 2nd level ------------------ +===== Header 2nd level ===== TEXT $matched = 'Header 2nd level'; @matches = $text =~ m/$rx->{header}/; is(scalar @matches, 2); -is($matches[0], $matched); -is($matches[1], '-----------------'); +is($matches[0], '====='); +is($matches[1], $matched); -$text = "Header only\n-------------"; +$text = "==== Header only ===="; $matched = 'Header only'; @matches = $text =~ m/$rx->{header}/; -is($matches[0], $matched); -is($matches[1], '-------------'); +is($matches[0], '===='); +is($matches[1], $matched); $text = <<'TEXT';