NAME

Text::Markdown::Parser -- parse Markdown

SYNOPSIS

 use strict;
 use warnings;
 use Text::Markdown::Parser;

 my $parse=Text::Markdown::Parser->new(grep_exessive=>0);
 my $end=0;
 my $deep=0;
 $parse->add_handler('start',sub{
     print "\n"," "x$deep,'>>>',shift(),"\n";
     $deep+=2;
     $end=1;
     return 1;
   },
 'type');

 $parse->add_handler('text',sub{
     my $txt=shift;
     $txt=~s/\n/"\n".(" "x$deep).'|'/gse;
     if($end)
     {
       $txt=(" "x$deep).'|'.$txt;
       $end=0;
     }
     print $txt;
     return 1;
   },
 'text');

 $parse->add_handler('end',sub{
     my $type=shift;
     my $text=shift;
     if($text && ref($text))
     {
       $text="(".join('|',@$text).")";
       $text=~s/\n/\\n/gs;
     }
     else
     { $text='' }
     $deep-=2;
     $end=1;
     print "\n"," "x$deep,"<<<$type $text\n";
     return 1;
   },'type,text');

 $parse->parse(<<'EOT');
 AT&T has an ampersand in their name.
 =====================================

 AT&amp;T is another way to write it.
 ------------------------------------
 EOT

DESCRIPTION

Parser for markdown formated Documents

AUTHOR

ToPeG

METHODS

new(%options)

create a new Parser Object

returns a Text::Markdown::Parser Object

 tabwidth => <int> (default 4)

set the amount of spaces for one tab

 grep_exessive => 1/0 (default 0)

if this option is true, linlinehtml will gab as mutch as possible text

parse_file(file|filehandle)

parse data from a File or Filehandle

parse($text)

parse text

add_link_def($id,$url,$title)

add a link definition.

add_handler($type,$code_ref,$param)

Add an handler.

returnes the name of the handler in the Stack

whenever an formating-tag will be started, or text added, or finished, the specified handler will be executed

Allowed types: start, text, end

$param is an string of comma separated valued, who specifed witch values will be pased to the codereference.

Allowed:

 self  - the parser object
 text  - the text inside the tag (empty in "start", a String in "text" and an array in "end")
 url   - an URL set by links or images
 alt   - alternatibe text for images
 title - title of an link or image
 id    - id of a link definition
 type  - type of the Tag
         The following strings of types will be pasted to the coderefence:
          list_plain - a dotted list
          list_count - a counted list
          list_entry - list entry
          h[1..6]    - heads 1 .. 6 (param: self text)
          hr         - line         (possible params: self)
          link       - link         (possible params: self text url title)
          linkref    - link         (possible params: self text url title id)
          link_def   - link         (possible params: self url title id)
          image      - image        (possible params: self url title alt)
          imageref   - image        (possible params: self url title alt id)
          page       - page         (possible params: self text)
          code       - codeblock    (possible params: self text)
          inlinecode - inlinecode   (possible params: self text)
          html       - htmlblock    (possible params: self text)
          inlinehtml - inlinehtml   (possible params: self text)
          quote      - quoted text  (possible params: self text)
          strong     - strog        (possible params: self text)
          em         - em           (possible params: self text)
          break      - linebreak    (possible params: self)
          comment    - html-comment (possible params: self text)

the code refence has to return true '1'. If false (0) returned the handler will be ermoved from the handlerstack

the last added handler will be executed first.

del_handler($id)

delete handler by id.

BUGS

To prevent doubleparsing the text the linkdefinitions are captured by an regexp when the parsing beginns. but there is no easy way to find _all_ linkdefinitions without doubleparsing, so it's possible not all link-refences will be found.

TODO

- optional doubeparsing to find all linkdefinitions

- optional warnings

- implement an easy way to extend the parser

See also

Text::Markdown::TreeBuilder

AUTHOR

Tobias Grönhagen <markdown@topeg.de>

VERSION

Version 0.1 1 January 2011

COPYRIGHT

Copyright (c) Tobias Grönhagen. All rights reserved.

LICENSE

This program is free software; you can redistribute it and/or modify it under the same terms and conditions as Perl itself.

This means that you can, at your option, redistribute it and/or modify it under either the terms the GNU Public License (GPL) version 2 or later, or under the Perl Artistic License.

See http://dev.perl.org/licenses/

DISCLAIMER

THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.

Use of this software in any way or in any form, source or binary, is not allowed in any country which prohibits disclaimers of any implied warranties of merchantability or fitness for a particular purpose or any disclaimers of a similar nature.

IN NO EVENT SHALL I BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION (INCLUDING, BUT NOT LIMITED TO, LOST PROFITS) EVEN IF I HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE