use DevHelp::HTML;
use Carp 'confess';
-our $VERSION = "1.004";
+our $VERSION = "1.005";
use constant DEBUG => 0;
$$rpart =~ s#bdo\[(?:\r?\n)?([^|\]\[]+)\|([^\]\[]+?)(?:\r?\n)?\]#
$self->_fix_spanned(qq/<bdo dir="$1">/, "</bdo>", $2)#egi
and return 1;
- $$rpart =~ s#(strong|em|samp|code|var|sub|sup|kbd|q|b|i|tt|span|small|large)\[(?:\r?\n)?([^|\]\[]+)\|([^\]\[]+?)(?:\r?\n)?\]#
+ $$rpart =~ s#(strong|em|samp|code|var|sub|sup|kbd|q|b|i|tt|span|small|large|mark)\[(?:\r?\n)?([^|\]\[]+)\|([^\]\[]+?)(?:\r?\n)?\]#
$self->_fix_spanned(qq/<$1 class="$2">/, "</$1>", $3)#egi
and return 1;
- $$rpart =~ s#(strong|em|samp|code|var|sub|sup|kbd|q|b|i|tt|span|small|large)\[(?:\r?\n)?\|([^\]\[]+?)(?:\r?\n)?\]#
+ $$rpart =~ s#(strong|em|samp|code|var|sub|sup|kbd|q|b|i|tt|span|small|large|mark)\[(?:\r?\n)?\|([^\]\[]+?)(?:\r?\n)?\]#
$self->_fix_spanned("<$1>", "</$1>", $2)#egi
and return 1;
- $$rpart =~ s#(strong|em|samp|code|var|sub|sup|kbd|q|b|i|tt|span|small|large)\[(?:\r?\n)?([^\]\[]+?)(?:\r?\n)?\]#
+ $$rpart =~ s#(strong|em|samp|code|var|sub|sup|kbd|q|b|i|tt|span|small|large|mark)\[(?:\r?\n)?([^\]\[]+?)(?:\r?\n)?\]#
$self->_fix_spanned("<$1>", "</$1>", $2)#egi
and return 1;
$$rpart =~ s#poplink\[([^|\]\[]+)\|([^\]\[]+)\]#
$part =~ s#style\[([^\]\[\|]+)\|([^\]\[]+)\]#
$self->_fix_spanned(qq/<span style="$1">/, "</span>", $2)#eig
and next TRY;
- $part =~ s#(div|address|blockquote)\[\n*([^\[\]\|]+)\|\n*([^\[\]]+?)\n*\]#"\n\n" . $self->_tag_with_attrs($1, $2) . "$3</$1>\n\n"#eig
+ $part =~ s#(div|address|blockquote|article|section|header|footer|aside|nav|figure|figcaption)\[\n*([^\[\]\|]+)\|\n*([^\[\]]+?)\n*\]#"\n\n" . $self->_tag_with_attrs($1, $2) . "$3</$1>\n\n"#eig
and next TRY;
$part =~ s#comment\[[^\[\]]*\]##ig
and next TRY;
- $part =~ s#(div|address|blockquote)\[\n*\|([^\[\]]+?)\n*]#\n\n<$1>$2</$1>\n\n#ig
+ $part =~ s#(div|address|blockquote|article|section|header|footer|aside|nav|figure|figcaption)\[\n*\|([^\[\]]+?)\n*]#\n\n<$1>$2</$1>\n\n#ig
and next TRY;
- $part =~ s#(div|address|blockquote)\[\n*([^\[\]]+?)\n*]#\n\n<$1>$2</$1>\n\n#ig
+ $part =~ s#(div|address|blockquote|article|section|header|footer|aside|nav|figure|figcaption)\[\n*([^\[\]]+?)\n*]#\n\n<$1>$2</$1>\n\n#ig
and next TRY;
last;
}
$part = "<p>$part</p>";
1 while $part =~ s/<p>(<div(?: [^>]*)?>)/$1<p>/g;
1 while $part =~ s!</div></p>!</p></div>!g;
- 1 while $part =~ s/<p>(<blockquote(?: [^>]*)?>)/$1<p>/g;
- 1 while $part =~ s!</blockquote></p>!</p></blockquote>!g;
1 while $part =~ s/<p>(<address(?: [^>]*)?>)/$1<p>/g;
1 while $part =~ s!</address></p>!</p></address>!g;
+ 1 while $part =~ s/<p>(<blockquote(?: [^>]*)?>)/$1<p>/g;
+ 1 while $part =~ s!</blockquote></p>!</p></blockquote>!g;
+ 1 while $part =~ s/<p>(<article(?: [^>]*)?>)/$1<p>/g;
+ 1 while $part =~ s!</article></p>!</p></article>!g;
+ 1 while $part =~ s/<p>(<section(?: [^>]*)?>)/$1<p>/g;
+ 1 while $part =~ s!</section></p>!</p></section>!g;
+ 1 while $part =~ s/<p>(<header(?: [^>]*)?>)/$1<p>/g;
+ 1 while $part =~ s!</header></p>!</p></header>!g;
+ 1 while $part =~ s/<p>(<footer(?: [^>]*)?>)/$1<p>/g;
+ 1 while $part =~ s!</footer></p>!</p></footer>!g;
+ 1 while $part =~ s/<p>(<aside(?: [^>]*)?>)/$1<p>/g;
+ 1 while $part =~ s!</aside></p>!</p></aside>!g;
+ 1 while $part =~ s/<p>(<nav(?: [^>]*)?>)/$1<p>/g;
+ 1 while $part =~ s!</nav></p>!</p></nav>!g;
+ 1 while $part =~ s/<p>(<figure(?: [^>]*)?>)/$1<p>/g;
+ 1 while $part =~ s!</figure></p>!</p></figure>!g;
+ 1 while $part =~ s/<p>(<figcaption(?: [^>]*)?>)/$1<p>/g;
+ 1 while $part =~ s!</figcaption></p>!</p></figcaption>!g;
$part =~ s!<p>(<hr[^>]*>)</p>!$1!g;
$part =~ s!<p>(<(?:table|ol|ul|center|h[1-6])[^>]*>)!$1!g;
$part =~ s!(</(?:table|ol|ul|center|h[1-6])>)</p>!$1!g;
and next TRY;
$part =~ s#(?:acronym|abbr|dfn|cite)\[([^|\]\[]*)\]#$1#ig
and next TRY;
- $part =~ s#(?:strong|em|samp|code|var|sub|sup|kbd|q|address|blockquote|b|i|tt|span|small|large)\[([^|\]\[]+)\|([^\]\[]*)\]#$2#ig
+ $part =~ s#(?:strong|em|samp|code|var|sub|sup|kbd|q|b|i|tt|span|small|large|mark)\[([^|\]\[]+)\|([^\]\[]*)\]#$2#ig
+ and next TRY;
+ $part =~ s#(?:strong|em|samp|code|var|sub|sup|kbd|q|b|i|tt|span|small|large|mark)\[\|([^\]\[]*)\]#$1#ig
+ and next TRY;
+ $part =~ s#(?:strong|em|samp|code|var|sub|sup|kbd|q|b|i|tt|span|small|large|mark)\[([^\]\[]*)\]#$1#ig
and next TRY;
- $part =~ s#(?:strong|em|samp|code|var|sub|sup|kbd|q|address|blockquote|b|i|tt|span|small|large)\[\|([^\]\[]*)\]#$1#ig
+ $part =~ s#(?:div|address|blockquote|article|section|header|footer|aside|nav|figure|figcaption)\[([^\[\]\|]*)\|([^\[\]]*)\](?:\r?\n)?#$2#ig
and next TRY;
- $part =~ s#(?:strong|em|samp|code|var|sub|sup|kbd|q|address|blockquote|b|i|tt|span|small|large)\[([^\]\[]*)\]#$1#ig
+ $part =~ s#(?:div|address|blockquote|article|section|header|footer|aside|nav|figure|figcaption)\[\|([^\[\]]*)\](?:\r?\n)?#$1#ig
and next TRY;
- $part =~ s#div\[([^\[\]\|]+)\|([^\[\]]*)\](?:\r?\n)?#$2#ig
+ $part =~ s#(?:div|address|blockquote|article|section|header|footer|aside|nav|figure|figcaption)\[([^\[\]]*)\](?:\r?\n)?#$1#ig
and next TRY;
$part =~ s#comment\[([^\[\]]*)\](?:\r?\n)?##ig
and next TRY;
#!perl -w
use strict;
-use Test::More tests => 107;
+use Test::More tests => 134;
sub format_test($$$;$);
sub noformat_test($$$;$);
format_test 'blockquote[hello]', '<blockquote><p>hello</p></blockquote>', 'blockquote';
format_test 'blockquote[|hello]', '<blockquote><p>hello</p></blockquote>', 'blockquote with empty class';
format_test 'blockquote[foo|hello]', '<blockquote class="foo"><p>hello</p></blockquote>', 'blockquote with class';
+ format_test 'article[hello]', '<article><p>hello</p></article>', 'article';
+ format_test 'article[|hello]', '<article><p>hello</p></article>', 'article with empty class';
+ format_test 'article[#id foo|hello]', '<article id="id" class="foo"><p>hello</p></article>', 'article with id and class';
+ format_test 'section[hello]', '<section><p>hello</p></section>', 'section';
+ format_test 'section[|hello]', '<section><p>hello</p></section>', 'section with empty class';
+ format_test 'section[#id foo|hello]', '<section id="id" class="foo"><p>hello</p></section>', 'section with id and class';
+ format_test 'header[hello]', '<header><p>hello</p></header>', 'header';
+ format_test 'header[|hello]', '<header><p>hello</p></header>', 'header with empty class';
+ format_test 'header[#id foo|hello]', '<header id="id" class="foo"><p>hello</p></header>', 'header with id and class';
+ format_test 'footer[hello]', '<footer><p>hello</p></footer>', 'footer';
+ format_test 'footer[|hello]', '<footer><p>hello</p></footer>', 'footer with empty class';
+ format_test 'footer[#id foo|hello]', '<footer id="id" class="foo"><p>hello</p></footer>', 'footer with id and class';
+ format_test 'aside[hello]', '<aside><p>hello</p></aside>', 'aside';
+ format_test 'aside[|hello]', '<aside><p>hello</p></aside>', 'aside with empty class';
+ format_test 'aside[#id foo|hello]', '<aside id="id" class="foo"><p>hello</p></aside>', 'aside with id and class';
+ format_test 'nav[hello]', '<nav><p>hello</p></nav>', 'nav';
+ format_test 'nav[|hello]', '<nav><p>hello</p></nav>', 'nav with empty class';
+ format_test 'nav[#id foo|hello]', '<nav id="id" class="foo"><p>hello</p></nav>', 'nav with id and class';
+ format_test 'figure[hello]', '<figure><p>hello</p></figure>', 'figure';
+ format_test 'figure[|hello]', '<figure><p>hello</p></figure>', 'figure with empty class';
+ format_test 'figure[#id foo|hello]', '<figure id="id" class="foo"><p>hello</p></figure>', 'figure with id and class';
+ format_test 'figcaption[hello]', '<figcaption><p>hello</p></figcaption>', 'figcaption';
+ format_test 'figcaption[|hello]', '<figcaption><p>hello</p></figcaption>', 'figcaption with empty class';
+ format_test 'figcaption[#id foo|hello]', '<figcaption id="id" class="foo"><p>hello</p></figcaption>', 'figcaption with id and class';
format_test 'cite[hello]', '<p><cite>hello</cite></p>', 'cite';
format_test 'cite[|hello]', '<p><cite>hello</cite></p>', 'cite with empty title';
format_test 'cite[foo|hello]', '<p><cite title="foo">hello</cite></p>', 'cite with title';
format_test 'large[hello]', '<p><large>hello</large></p>', 'large';
format_test 'large[|hello]', '<p><large>hello</large></p>', 'large empty class';
format_test 'large[foo|hello]', '<p><large class="foo">hello</large></p>', 'large with class';
+ format_test 'mark[hello]', '<p><mark>hello</mark></p>', 'mark';
+ format_test 'mark[|hello]', '<p><mark>hello</mark></p>', 'mark empty class';
+ format_test 'mark[foo|hello]', '<p><mark class="foo">hello</mark></p>', 'mark with class';
format_test <<IN, <<OUT, 'strong over paras', 'both';
strong[foo|hello