Changeset 211

Show
Ignore:
Timestamp:
04/06/07 20:38:18 (2 years ago)
Author:
ingy
Message:
 r3759@dhcp199:  ingy | 2007-04-05 12:33:07 +0900
 more parser refo
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/core/Spork/lib/Spork/Parser.pm

    r210 r211  
    11package Spork::Parser; 
    22use base 'Document::Parser'; 
     3use XXX; 
    34 
    45my $ALPHANUM = '\p{Letter}\p{Number}\pM'; 
     
    5253        b => { 
    5354            phrases => $all_phrases, 
    54             match => [ 
    55                 qr/( 
    56                     (?:^|(?<=[^${ALPHANUM}\*])) 
    57                     \*\S[^\*]*\* 
    58                     (?=[^{$ALPHANUM}\*]|\z) 
    59                    )/x, 
    60                 qr/(\{\*.*?\*\})/, 
    61             ], 
     55            match => [re_huggy('\*'), qr/(\{\*.*?\*\})/ ], 
    6256        }, 
    6357        i => { 
    64             match => [ 
    65                 qr/( 
    66                     (?:^|(?<=[^${ALPHANUM}\/])) 
    67                     \/\S[^\/]*\/ 
    68                     (?=[^{$ALPHANUM}\/]|\z) 
    69                    )/x, 
    70                 qr/(\{\/.*?\/\})/, 
    71             ], 
     58            match => [re_huggy('\/'), qr/(\{\/.*?\/\})/ ], 
    7259        }, 
    7360        tt => { 
    74             match => [ 
    75                 qr/( 
    76                     (?:^|(?<=[^${ALPHANUM}`])) 
    77                     `\S[^`]*` 
    78                     (?=[^{$ALPHANUM}`]|\z) 
    79                    )/x, 
    80                 qr/(\{`.*?`\})/, 
    81             ], 
     61            match => [re_huggy('`'), qr/(\{`.*?`\})/ ], 
    8262        }, 
    8363        hilite => { 
    84             match => [ 
    85                 qr/( 
    86                     (?:^|(?<=[^${ALPHANUM}\|])) 
    87                     \|\S[^\|]*\| 
    88                     (?=[^{$ALPHANUM}\|]|\z) 
    89                    )/x, 
    90                 qr/(\{\|.*?\|\})/, 
    91             ], 
     64            match => [re_huggy('\|'), qr/(\{\|.*?\|\})/ ], 
    9265        }, 
    9366    }; 
     67} 
     68 
     69sub re_huggy { 
     70    my $brace1 = shift; 
     71    my $brace2 = shift || $brace1; 
     72 
     73    return qr/ 
     74        (?:^|(?<=[^${ALPHANUM}${brace1}])) 
     75        ${brace2}(\S[^${brace2}]*)${brace2} 
     76        (?=[^{$ALPHANUM}${brace2}]|\z) 
     77    /x; 
    9478} 
    9579 
     
    9983} 
    10084 
    101 #------------------------------------------------------------------------------- 
    102 # Handler functions 
    103 # 
    104 # Each element type has a handler too. The handler writes out the begin and 
    105 # end events, and controls how the innards are subparsed. Many times the 
    106 # handler will mutate the matched text before it is reparsed. 
    107 #------------------------------------------------------------------------------- 
    10885sub handle_indent { 
    10986    my $self = shift; 
     
    153130sub handle_hilite { 
    154131    my $self = shift; 
    155     $self->subparse(hilite => parse_phrases => @_, sub { 
    156         s/^\{?\|(.*)\|\}?$/$1/s; 
    157     }); 
     132    $self->subparse(hilite => parse_phrases => @_); 
    158133} 
    159134 
    160135sub handle_b { 
    161136    my $self = shift; 
    162     $self->subparse(b => parse_phrases => @_, sub { 
    163         s/^\{?\*(.*)\*\}?$/$1/s; 
    164     }); 
     137    $self->subparse(b => parse_phrases => @_); 
    165138} 
    166139 
    167140sub handle_tt { 
    168141    my $self = shift; 
    169     $self->subparse(tt => parse_phrases => @_, sub { 
    170         s/^\{?`(.*)`\}?$/$1/s; 
    171     }); 
     142    $self->subparse(tt => parse_phrases => @_); 
    172143} 
    173144 
    174145sub handle_i { 
    175146    my $self = shift; 
    176     $self->subparse(i => parse_phrases => @_, sub { 
    177         s/^\{?\/(.*)\/\}?$/$1/s; 
    178     }); 
     147    $self->subparse(i => parse_phrases => @_); 
    179148} 
    180149 
  • trunk/src/plugins/ingy/Document-Parser/lib/Document/Parser.pm

    r210 r211  
    1616sub parse { 
    1717    my $self = shift; 
    18     $self->{input} = shift; 
     18    $self->{input} ||= shift; 
     19    $self->{grammar} or $self->set_grammar; 
     20    $self->{ast} or $self->set_grammar; 
    1921    $self->parse_blocks('top'); 
    2022    return $self->{ast}->content; 
     
    184186    my $self = shift; 
    185187    my $tag = shift; 
    186     $tag =~ s/-.*//; 
    187     $self->{output} .= "-$tag\n"; 
     188    die; 
     189    # $tag =~ s/-.*//; 
     190    # $self->{output} .= "-$tag\n"; 
    188191} 
    189192