Mercurial > pub > Impl
diff Lib/IMPL/Text/Parser/Player.pm @ 39:4f5a6a1bfb0e
Text parser
author | Sergey |
---|---|
date | Tue, 08 Dec 2009 17:28:06 +0300 |
parents | |
children | ac21a032e7a9 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Lib/IMPL/Text/Parser/Player.pm Tue Dec 08 17:28:06 2009 +0300 @@ -0,0 +1,50 @@ +package IMPL::Text::Parser::Player; +use strict; +use warnings; + +use base qw(IMPL::Object); +use IMPL::Class::Property; +use IMPL::Class::Property::Direct; + +use IMPL::Text::Parser::Chunk; + +my %opCodesMap = ( + IMPL::Text::Parser::Chunk::OP_REGEXP , &MatchRegexp , + IMPL::Text::Parser::Chunk::OP_STRING , &MatchString , + IMPL::Text::Parser::Chunk::OP_REFERENCE , &MatchReference , + IMPL::Text::Parser::Chunk::OP_CHUNK , &PlayChunk , + IMPL::Text::Parser::Chunk::OP_SWITCH , &MatchSwitch , + IMPL::Text::Parser::Chunk::OP_REPEAT , &MatchRepeat +); + +BEGIN { + private _direct property _data => prop_all; + private _direct property _position => prop_all; + public _direct property Punctuation => prop_all; + public _direct property Delimier => prop_all; +} + +sub LoadString { + my ($this,$string) = @_; + + while ($string =~ /($rxDelim)|($rxPunct)|(.*?)/g) { + + + } +} + +sub PlayChunk { + my ($this,$chunk) = @_; + + $opCodesMap{shift @$_}->(@$_) foreach @{$chunk->opStream}; +} + +sub MatchRegexp { + my ($this,$rx) = @_; + + if ($this->{$_data} =~ $rx) { + + } +} + +1;