The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use File::Spec;
use strict;
use warnings;
use Test::Base;
use Text::Hatena;

filters {
    text => ['text_hatena', 'omit_indent', 'chomp'],
    line => ['text_hatena_p', 'omit_indent', 'chomp'],
    html => ['omit_indent', 'chomp'],
};

sub text_hatena { Text::Hatena->parse(shift, 'body') }
sub text_hatena_p { Text::Hatena->parse(shift, 'p') }
sub omit_indent {
    (my $text = shift) =~ s/^[\t\s]+//gmo;
    return $text;
}

#use Carp;
#local $SIG{'__WARN__'} = \&Carp::confess;

run_is;

__END__
=== h3
--- text
*Hello, World!
--- html
<div class="section">
  <h3>Hello, World!</h3>
</div>

=== h3_2
--- text
*Hello, World!
This is Text::Hatena.
--- html
<div class="section">
  <h3>Hello, World!</h3>
  <p>This is Text::Hatena.</p>
</div>

=== h3_3
--- text
 *Hello, World!
This is Text::Hatena.
--- html
<div class="section">
  <p> *Hello, World!</p>
  <p>This is Text::Hatena.</p>
</div>

=== h3_4
--- text
*Good morning

It's morning.

*Good afternoon

Beautiful day!
--- html
<div class="section">
<h3>Good morning</h3>

<p>It's morning.</p>
</div>
<div class="section">
<h3>Good afternoon</h3>

<p>Beautiful day!</p>
</div>

=== h4
--- text
**Hello, Japan!

This is Text::Hatena.
--- html
<div class="section">
  <h4>Hello, Japan!</h4>

  <p>This is Text::Hatena.</p>
</div>

=== h5
--- text
***Hello, Tokyo!

This is Text::Hatena.
--- html
<div class="section">
  <h5>Hello, Tokyo!</h5>

  <p>This is Text::Hatena.</p>
</div>

=== blockquote
--- text
>>
quoted
<<
--- html
<div class="section">
  <blockquote>
    <p>quoted</p>
  </blockquote>
</div>

=== blockquote2
--- text
>>
quoted
>>
quoted quoted
<<
<<
--- html
<div class="section">
  <blockquote>
    <p>quoted</p>
    <blockquote>
	  <p>quoted quoted</p>
    </blockquote>
  </blockquote>
</div>

=== blockquote3
--- text
 >>
 unquoted
 <<
--- html
<div class="section">
  <p> >></p>
  <p> unquoted</p>
  <p> <<</p>
</div>

=== blockquote4
--- text
>http://www.hatena.ne.jp/>
Hatena
<<
--- html
<div class="section">
  <blockquote title="http://www.hatena.ne.jp/" cite="http://www.hatena.ne.jp/">
	<p>Hatena</p>
    <cite><a href="http://www.hatena.ne.jp/">http://www.hatena.ne.jp/</a></cite>
  </blockquote>
</div>

=== blockquote5
--- text
>http://www.hatena.ne.jp/:title=Hatena>
Hatena
<<
--- html
<div class="section">
  <blockquote title="Hatena" cite="http://www.hatena.ne.jp/">
	<p>Hatena</p>
    <cite><a href="http://www.hatena.ne.jp/">Hatena</a></cite>
  </blockquote>
</div>

=== dl
--- text
:cinnamon:dog
--- html
<div class="section">
  <dl>
    <dt>cinnamon</dt>
    <dd>dog</dd>
  </dl>
</div>

=== dl2
--- text
:cinnamon:dog
:tama:cat
--- html
<div class="section">
  <dl>
    <dt>cinnamon</dt>
    <dd>dog</dd>
    <dt>tama</dt>
    <dd>cat</dd>
  </dl>
</div>

=== ul
--- text
-komono
-kyoto
-shibuya
--- html
<div class="section">
  <ul>
	<li>komono</li>
	<li>kyoto</li>
	<li>shibuya</li>
  </ul>
</div>

=== ul2
--- text
-komono
--kyoto
---shibuya
--hachiyama
--- html
<div class="section">
  <ul>
	<li>komono
	<ul>
	  <li>kyoto
	  <ul>
		<li>shibuya</li>
	  </ul>
	  </li>
	  <li>hachiyama</li>
	</ul>
	</li>
  </ul>
</div>

=== ul3
--- text
-list
--ul
--ol
-pre
--- html
<div class="section">
  <ul>
	<li>list
	<ul>
	  <li>ul</li>
	  <li>ol</li>
	</ul>
	</li>
	<li>pre</li>
  </ul>
</div>

=== ul4
--- text 
 - wrong list
 - what's happen?
--- html
<div class="section">
<p> - wrong list</p>
<p> - what's happen?</p>
</div>

=== ul5
--- text 
- right list
 - wrong list
 - what's happen?
--- html
<div class="section">
<ul>
<li> right list</li>
</ul>
<p> - wrong list</p>
<p> - what's happen?</p>
</div>

=== ul6
--- text
-Japan
--Kyoto
--Tokyo
-USA
--Mountain View
--- html
<div class="section">
  <ul>
	<li>Japan
	<ul>
	  <li>Kyoto</li>
	  <li>Tokyo</li>
	</ul>
	</li>
	<li>USA
	<ul>
	  <li>Mountain View</li>
	</ul>
	</li>
  </ul>
</div>

=== ul7
--- text
-komono
--kyoto
---shibuya
--hachiyama
--- html
<div class="section">
  <ul>
	<li>komono
	  <ul>
		<li>kyoto
		  <ul>
			<li>shibuya</li>
		  </ul>
		</li>
		<li>hachiyama</li>
	  </ul>
	</li>
  </ul>
</div>

=== ol
--- text
+Register
+Login
+Write your blog
--- html
<div class="section">
  <ol>
	<li>Register</li>
    <li>Login</li>
	<li>Write your blog</li>
  </ol>
</div>

=== ol2
--- text
-Steps
++Register
++Login
++Write your blog
-Option
--180pt
--- html
<div class="section">
  <ul>
	<li>Steps
	  <ol>
		<li>Register</li>
		<li>Login</li>
		<li>Write your blog</li>
	  </ol>
	</li>
	<li>Option
	  <ul>
		<li>180pt</li>
	  </ul>
	</li>
  </ul>
</div>

=== super_pre
--- text
>||
#!/usr/bin/perl

my $url = 'http://d.hatena.ne.jp/';
||<
--- html
<div class="section">
	<pre>
#!/usr/bin/perl

my $url = 'http://d.hatena.ne.jp/';
</pre>
</div>

=== super_pre_fail
--- text
>||
#!/usr/bin/perl

my $name = 'jkondo'||<
--- html
<div class="section">
<p>>||</p>
<p>#!/usr/bin/perl</p>

<p>my $name = 'jkondo'||<</p>
</div>

=== super_pre2
--- text
>|perl|
#!/usr/bin/perl

my $url = 'http://d.hatena.ne.jp/';
||<
--- html
<div class="section">
	<pre>
#!/usr/bin/perl

my $url = 'http://d.hatena.ne.jp/';
</pre>
</div>

=== super_pre3
--- text
>||
>>
unquoted
<<
- unlisted
http://www.hatena.com/ unanchored.
||<
--- html
<div class="section">
	<pre>
>>
unquoted
<<
- unlisted
http://www.hatena.com/ unanchored.
</pre>
</div>

=== super_pre4
--- text
>||
>>
unquoted
<<
- unlisted
http://www.hatena.com/ unanchored.
<a href="http://www.hatena.com/">escaped tags</a>
||<
--- html
<div class="section">
	<pre>
>>
unquoted
<<
- unlisted
http://www.hatena.com/ unanchored.
<a href="http://www.hatena.com/">escaped tags</a>
</pre>
</div>

=== pre
--- text
>|
#!/usr/bin/perl
use strict;
use warnings;

say 'Hello, World!';
|<
--- html
<div class="section">
	<pre>
#!/usr/bin/perl
use strict;
use warnings;

say 'Hello, World!';
</pre>
</div>

=== pre2
--- text
>|
To: info@test.com
Subject: This is Test.

Hello, This is test from Text::Hatena.
 Don't reply to this email.

--
jkondo
|<
--- html
<div class="section">
	<pre>
To: info@test.com
Subject: This is Test.

Hello, This is test from Text::Hatena.
 Don't reply to this email.

--
jkondo
</pre>
</div>

=== table
--- text
|*Lang|*Module|
|Perl|Text::Hatena|
--- html
<div class="section">
  <table>
	<tr>
	  <th>Lang</th>
	  <th>Module</th>
	</tr>
	<tr>
	  <td>Perl</td>
	  <td>Text::Hatena</td>
	</tr>
  </table>
</div>

=== cdata
--- text
><div>no paragraph line</div><
paragraph line
--- html
<div class="section">
	<div>no paragraph line</div>
	<p>paragraph line</p>
</div>

=== cdata2
--- text
><blockquote>
<p>Hello I am writing HTML tags by myself</p>
</blockquote><
--- html
<div class="section">
  <blockquote>
	<p>Hello I am writing HTML tags by myself</p>
  </blockquote>
</div>

=== cdata3
--- text
><blockquote><
Please add p tags for me.
It's candy blockquote.
></blockquote><
--- html
<div class="section">
  <blockquote>
	<p>Please add p tags for me.</p>
	<p>It's candy blockquote.</p>
  </blockquote>
</div>

=== autolink
--- text
*Hello World!

Here is Text::Hatena.
CPAN site: http://search.cpan.org/dist/Text-Hatena/
Have fun!
--- html
<div class="section">
<h3>Hello World!</h3>

<p>Here is Text::Hatena.</p>
<p>CPAN site: <a href="http://search.cpan.org/dist/Text-Hatena/">http://search.cpan.org/dist/Text-Hatena/</a></p>
<p>Have fun!</p>
</div>