Changeset 243

Show
Ignore:
Timestamp:
04/13/07 08:15:39 (1 year ago)
Author:
ingy
Message:
 r4311@skinny-2:  ingy | 2007-04-13 23:12:20 +0800
 odds and sods
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/lib/Document/AST.pm

    r225 r243  
    1 link ../../src/ingy/Document-Formatter/lib/Document/AST.pm 
     1link ../../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.pm 
     1link ../../../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.pm 
     1link ../../src/ingy/Document-Tools/lib/Document/Parser.pm 
  • trunk/lib/Document/Tools.pm

    r225 r243  
    1 link ../../src/ingy/Document-Formatter/lib/Document/Tools.pm 
     1link ../../src/ingy/Document-Tools/lib/Document/Tools.pm 
  • trunk/src/core/Spork/lib/Spork/Parser.pm

    r221 r243  
    44use base 'Document::Parser'; 
    55 
    6 sub create_ast
     6sub create_receiver
    77    require Document::AST::Tree; 
    88    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## 
    118package Document::Parser; 
    219use strict; 
    320use warnings; 
    421 
    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##------------------------------------------------------------------------------ 
    635# Parser object constructor/initializer 
    7 #------------------------------------------------------------------------------- 
     36##------------------------------------------------------------------------------ 
    837sub new { 
    938    my $class = shift; 
     
    1140} 
    1241 
    13 #------------------------------------------------------------------------------- 
    14 # Public - $parsed = $parser->parse($wikitext); 
    15 #------------------------------------------------------------------------------- 
     42##------------------------------------------------------------------------------ 
     43# $parsed = $parser->parse($wikitext); 
     44##------------------------------------------------------------------------------ 
    1645sub parse { 
    1746    my $self = shift; 
    1847    $self->{input} ||= shift; 
    1948    $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; 
    2251    $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. 
     57sub set_receiver { 
     58    my $self = shift; 
     59    $self->{receiver} = shift || $self->create_receiver; 
    2960} 
    3061 
     
    78109        } 
    79110        if (! $match) { 
    80             $self->{ast}->text_node($self->{input}); 
     111            $self->{receiver}->text_node($self->{input}); 
    81112            last; 
    82113        } 
    83114        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)) 
    85116          unless $begin == 0; 
    86117        substr($self->{input}, 0, $end, ''); 
     
    136167sub subparse { 
    137168    my ($self, $func, $match, $type, $filter) = @_; 
    138     $self->{ast}->begin_node($type); 
     169    $self->{receiver}->begin_node($type); 
    139170    my $parser = $self->new( 
    140171        grammar => $self->{grammar}, 
    141         ast => $self->{ast}->new, 
     172        receiver => $self->{receiver}->new, 
    142173        input => $filter 
    143174        ? do { $_ = $match->{text}; &$filter(); $_ } 
     
    145176    ); 
    146177    $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); 
    149180} 
    150181 
     
    195226        }; 
    196227    } 
     228 
    197229=head1 DESCRIPTION 
    198230 
  • trunk/src/ingy/modules.mk

    r227 r243  
    1010        Module/Install/Admin \ 
    1111        Module/Make \ 
     12        Perl \ 
    1213        Perldoc \ 
    1314        Perldoc/Emitter \ 
     
    3738        Perldoc/Base.pm \ 
    3839        Perldoc/Convert.pm \ 
     40        Perldoc/Document.pm \ 
    3941        Perldoc/Dom.pm \ 
     42        Perldoc/Make.pm \ 
     43        Perl/Folder.pm \ 
    4044        Script/Hater.pm \ 
    4145        Test/Base.pm \ 
     
    6973        Module/Make/Config.pm \ 
    7074        Module/Make/Maker.pm \ 
     75        Module/Install/Perldoc.pm \ 
    7176        Perldoc/Emitter/HTML.pm \ 
    7277        Perldoc/Emitter/Pod.pm \ 
    7378        Perldoc/Parser/Kwid.pm \ 
     79        Perldoc/Parser/Perldoc.pm \ 
    7480        Module/Install/TestBase.pm \ 
    7581        Test/Base/Filter.pm \