Mercurial > pub > Impl
comparison Lib/IMPL/Text/Parser/Player.pm @ 39:4f5a6a1bfb0e
Text parser
author | Sergey |
---|---|
date | Tue, 08 Dec 2009 17:28:06 +0300 |
parents | |
children | ac21a032e7a9 |
comparison
equal
deleted
inserted
replaced
38:d660fb38b7cc | 39:4f5a6a1bfb0e |
---|---|
1 package IMPL::Text::Parser::Player; | |
2 use strict; | |
3 use warnings; | |
4 | |
5 use base qw(IMPL::Object); | |
6 use IMPL::Class::Property; | |
7 use IMPL::Class::Property::Direct; | |
8 | |
9 use IMPL::Text::Parser::Chunk; | |
10 | |
11 my %opCodesMap = ( | |
12 IMPL::Text::Parser::Chunk::OP_REGEXP , &MatchRegexp , | |
13 IMPL::Text::Parser::Chunk::OP_STRING , &MatchString , | |
14 IMPL::Text::Parser::Chunk::OP_REFERENCE , &MatchReference , | |
15 IMPL::Text::Parser::Chunk::OP_CHUNK , &PlayChunk , | |
16 IMPL::Text::Parser::Chunk::OP_SWITCH , &MatchSwitch , | |
17 IMPL::Text::Parser::Chunk::OP_REPEAT , &MatchRepeat | |
18 ); | |
19 | |
20 BEGIN { | |
21 private _direct property _data => prop_all; | |
22 private _direct property _position => prop_all; | |
23 public _direct property Punctuation => prop_all; | |
24 public _direct property Delimier => prop_all; | |
25 } | |
26 | |
27 sub LoadString { | |
28 my ($this,$string) = @_; | |
29 | |
30 while ($string =~ /($rxDelim)|($rxPunct)|(.*?)/g) { | |
31 | |
32 | |
33 } | |
34 } | |
35 | |
36 sub PlayChunk { | |
37 my ($this,$chunk) = @_; | |
38 | |
39 $opCodesMap{shift @$_}->(@$_) foreach @{$chunk->opStream}; | |
40 } | |
41 | |
42 sub MatchRegexp { | |
43 my ($this,$rx) = @_; | |
44 | |
45 if ($this->{$_data} =~ $rx) { | |
46 | |
47 } | |
48 } | |
49 | |
50 1; |