Changeset 243
- Timestamp:
- 04/13/07 08:15:39 (1 year ago)
- Files:
-
- trunk/lib/Document/AST.pm (modified) (1 diff)
- trunk/lib/Document/AST/Tree.pm (modified) (1 diff)
- trunk/lib/Document/Parser.pm (modified) (1 diff)
- trunk/lib/Document/Tools.pm (modified) (1 diff)
- trunk/lib/Module/Install/Perldoc.pm (added)
- trunk/lib/Perl (added)
- trunk/lib/Perl/Folder.pm (added)
- trunk/lib/Perldoc/Document.pm (added)
- trunk/lib/Perldoc/Make.pm (added)
- trunk/lib/Perldoc/Parser/Perldoc.pm (added)
- trunk/src/core/Spiffy/META.yml (deleted)
- trunk/src/core/Spork/lib/Spork/Parser.pm (modified) (1 diff)
- trunk/src/ingy/Document-Tools/lib/Document/Parser.pm (modified) (6 diffs)
- trunk/src/ingy/modules.mk (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/lib/Document/AST.pm
r225 r243 1 link ../../src/ingy/Document- Formatter/lib/Document/AST.pm1 link ../../src/ingy/Document-Tools/lib/Document/AST.pm trunk/lib/Document/AST/Tree.pm
r225 r243 1 link ../../../src/ingy/Document- Formatter/lib/Document/AST/Tree.pm1 link ../../../src/ingy/Document-Tools/lib/Document/AST/Tree.pm trunk/lib/Document/Parser.pm
r225 r243 1 link ../../src/ingy/Document- Formatter/lib/Document/Parser.pm1 link ../../src/ingy/Document-Tools/lib/Document/Parser.pm trunk/lib/Document/Tools.pm
r225 r243 1 link ../../src/ingy/Document- Formatter/lib/Document/Tools.pm1 link ../../src/ingy/Document-Tools/lib/Document/Tools.pm trunk/src/core/Spork/lib/Spork/Parser.pm
r221 r243 4 4 use base 'Document::Parser'; 5 5 6 sub create_ ast{6 sub create_receiver { 7 7 require Document::AST::Tree; 8 8 return Document::AST::Tree->new; trunk/src/ingy/Document-Tools/lib/Document/Parser.pm
r231 r243 1 ## Base Class for Creating Text Format Parsers 2 # 3 # Document::Parser is a base class that you can use to easily generate a 4 # parser for text document markups (like Wiki or POD markups). 5 # 6 # See this parser as an example: 7 # 8 # http://svn.kwiki.org/kwiki/trunk/src/core/Spork/lib/Spork/Parser.pm 9 # 10 # And this module for usage of the parser: 11 # 12 # http://svn.kwiki.org/kwiki/trunk/src/core/Spork/lib/Spork/Formatter2.pm 13 # 14 # Copyright (c) 2007. Ingy döt Net. All rights reserved. 15 # 16 # Licensed under the same terms as Perl itself. 17 ## 1 18 package Document::Parser; 2 19 use strict; 3 20 use warnings; 4 21 5 #------------------------------------------------------------------------------- 22 ## Synopsis: 23 # 24 # package MyParser; 25 # use base 'Document::Parser'; 26 # 27 # sub create_grammar { 28 # return { 29 # # ... define a grammar hash here ... 30 # }; 31 # } 32 ## 33 34 ##------------------------------------------------------------------------------ 6 35 # Parser object constructor/initializer 7 # -------------------------------------------------------------------------------36 ##------------------------------------------------------------------------------ 8 37 sub new { 9 38 my $class = shift; … … 11 40 } 12 41 13 # -------------------------------------------------------------------------------14 # Public -$parsed = $parser->parse($wikitext);15 # -------------------------------------------------------------------------------42 ##------------------------------------------------------------------------------ 43 # $parsed = $parser->parse($wikitext); 44 ##------------------------------------------------------------------------------ 16 45 sub parse { 17 46 my $self = shift; 18 47 $self->{input} ||= shift; 19 48 $self->{grammar} ||= $self->set_grammar; 20 $self->{ ast} ||= $self->set_ast;21 $self->{ ast}->init;49 $self->{receiver} ||= $self->set_receiver; 50 $self->{receiver}->init; 22 51 $self->parse_blocks('top'); 23 return $self->{ast}->content; 24 } 25 26 sub set_ast { 27 my $self = shift; 28 $self->{ast} = shift || $self->create_ast; 52 return $self->{receiver}->content; 53 } 54 55 ## 56 # Call `set_receiver` to reset the receiver for a new parse. 57 sub set_receiver { 58 my $self = shift; 59 $self->{receiver} = shift || $self->create_receiver; 29 60 } 30 61 … … 78 109 } 79 110 if (! $match) { 80 $self->{ ast}->text_node($self->{input});111 $self->{receiver}->text_node($self->{input}); 81 112 last; 82 113 } 83 114 my ($begin, $end, $type) = @{$match}{qw(begin end type)}; 84 $self->{ ast}->text_node(substr($self->{input}, 0, $begin))115 $self->{receiver}->text_node(substr($self->{input}, 0, $begin)) 85 116 unless $begin == 0; 86 117 substr($self->{input}, 0, $end, ''); … … 136 167 sub subparse { 137 168 my ($self, $func, $match, $type, $filter) = @_; 138 $self->{ ast}->begin_node($type);169 $self->{receiver}->begin_node($type); 139 170 my $parser = $self->new( 140 171 grammar => $self->{grammar}, 141 ast => $self->{ast}->new,172 receiver => $self->{receiver}->new, 142 173 input => $filter 143 174 ? do { $_ = $match->{text}; &$filter(); $_ } … … 145 176 ); 146 177 $parser->$func($type); 147 $self->{ ast}->insert($parser->{ast});148 $self->{ ast}->end_node($type);178 $self->{receiver}->insert($parser->{receiver}); 179 $self->{receiver}->end_node($type); 149 180 } 150 181 … … 195 226 }; 196 227 } 228 197 229 =head1 DESCRIPTION 198 230 trunk/src/ingy/modules.mk
r227 r243 10 10 Module/Install/Admin \ 11 11 Module/Make \ 12 Perl \ 12 13 Perldoc \ 13 14 Perldoc/Emitter \ … … 37 38 Perldoc/Base.pm \ 38 39 Perldoc/Convert.pm \ 40 Perldoc/Document.pm \ 39 41 Perldoc/Dom.pm \ 42 Perldoc/Make.pm \ 43 Perl/Folder.pm \ 40 44 Script/Hater.pm \ 41 45 Test/Base.pm \ … … 69 73 Module/Make/Config.pm \ 70 74 Module/Make/Maker.pm \ 75 Module/Install/Perldoc.pm \ 71 76 Perldoc/Emitter/HTML.pm \ 72 77 Perldoc/Emitter/Pod.pm \ 73 78 Perldoc/Parser/Kwid.pm \ 79 Perldoc/Parser/Perldoc.pm \ 74 80 Module/Install/TestBase.pm \ 75 81 Test/Base/Filter.pm \
