Changeset 213
- Timestamp:
- 04/06/07 20:38:39 (2 years ago)
- Files:
-
- trunk/src/core/Spork/lib/Spork/Parser.pm (modified) (4 diffs)
- trunk/src/plugins/ingy/Document-Parser/lib/Document/Parser.pm (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/src/core/Spork/lib/Spork/Parser.pm
r212 r213 1 1 package Spork::Parser; 2 use strict; 3 use warnings; 2 4 use base 'Document::Parser'; 3 4 my $ALPHANUM = '\p{Letter}\p{Number}\pM';5 6 #-------------------------------------------------------------------------------7 # Public - $parsed = $parser->parse($wikitext);8 #-------------------------------------------------------------------------------9 sub parse {10 my $self = shift;11 $self->set_grammar;12 $self->set_ast;13 return $self->SUPER::parse(@_);14 }15 5 16 6 sub set_grammar { … … 30 20 blocks => $all_blocks, 31 21 match => qr/^((?m:^>+.*\n)+\n?)/, 22 filter => sub { s/^> *//mg; s/\n+\z/\n/ }, 32 23 }, 33 24 pre => { 34 25 match => qr/^(( +.*\S.*\n)+)(?m:^ *\n)*/, 26 filter => sub { while (not /^\S/m) { s/^ //gm } }, 35 27 }, 36 28 p => { 37 29 phrases => $all_phrases, 38 30 match => qr/^(((?!>).*\S.*\n)+)(?m:^\s*\n)*/, 31 filter => sub { s/\n+\z// }, 39 32 }, 40 33 ul => { 41 34 blocks => [qw(ul li)], 42 35 match => qr/^((?m:^\*+ .*\n)+)\n*/, 36 filter => sub { s/^\* *//mg; s/\n+\z/\n/; }, 43 37 }, 44 38 li => { … … 66 60 } 67 61 62 my $ALPHANUM = '\p{Letter}\p{Number}\pM'; 63 68 64 sub re_huggy { 69 65 my $brace1 = shift; … … 80 76 my $self = shift; 81 77 $self->{ast} = Spork::AST->new; 82 }83 84 sub handle_indent {85 my $self = shift;86 $self->subparse(parse_blocks => @_, sub {87 s/^> *//mg;88 s/\n+\z/\n/;89 });90 }91 92 sub handle_center {93 my $self = shift;94 $self->subparse(parse_blocks => @_);95 }96 97 sub handle_h2 {98 my $self = shift;99 $self->subparse(parse_phrases => @_);100 }101 102 sub handle_p {103 my $self = shift;104 $self->subparse(parse_phrases => @_, sub { s/\n+\z// });105 }106 107 sub handle_pre {108 my $self = shift;109 $self->subparse(parse_phrases => @_, sub {110 while (not /^\S/m) {111 s/^ //gm;112 }113 });114 }115 116 sub handle_ul {117 my $self = shift;118 $self->subparse(parse_blocks => @_, sub {119 s/^\* *//mg;120 s/\n+\z/\n/;121 });122 }123 124 sub handle_li {125 my $self = shift;126 $self->subparse(parse_phrases => @_);127 }128 129 sub handle_hilite {130 my $self = shift;131 $self->subparse(parse_phrases => @_);132 }133 134 sub handle_b {135 my $self = shift;136 $self->subparse(parse_phrases => @_);137 }138 139 sub handle_tt {140 my $self = shift;141 $self->subparse(parse_phrases => @_);142 }143 144 sub handle_i {145 my $self = shift;146 $self->subparse(parse_phrases => @_);147 78 } 148 79 trunk/src/plugins/ingy/Document-Parser/lib/Document/Parser.pm
r212 r213 18 18 $self->{input} ||= shift; 19 19 $self->{grammar} or $self->set_grammar; 20 $self->{ast} or $self->set_ grammar;20 $self->{ast} or $self->set_ast; 21 21 $self->parse_blocks('top'); 22 22 return $self->{ast}->content; … … 109 109 my ($self, $type, $match) = @_; 110 110 my $func = "handle_$type"; 111 $self->$func($match, $type); 112 } 113 114 # sub handle_p { 115 # my $self = shift; 116 # $self->subparse(p => parse_phrases => @_, sub { s/\n+\z// }); 117 # } 118 111 if ($self->can($func)) { 112 $self->$func($match, $type); 113 } 114 else { 115 my $grammar = $self->{grammar}{$type}; 116 my $parse = $grammar->{blocks} 117 ? 'parse_blocks' 118 : 'parse_phrases'; 119 my @filter = $grammar->{filter} 120 ? ($grammar->{filter}) 121 : (); 122 $self->subparse($parse, $match, $type, @filter); 123 } 124 } 119 125 120 126 sub subparse {
