comparison Lib/IMPL/Text/Parser/Chunk.pm @ 26:c529d386d80e

Text services in progress
author Sergey
date Thu, 15 Oct 2009 17:52:09 +0400
parents
children 4f5a6a1bfb0e
comparison
equal deleted inserted replaced
25:9dd67fa91ee3 26:c529d386d80e
1 package IMPL::Text::Parser::Chunk;
2 use strict;
3 use warnings;
4
5 use base qw(IMPL::Object);
6
7 use IMPL::Class::Property;
8 use IMPL::Class::Property::Direct;
9
10 use constant {
11 OP_REGEXP => 1,
12 OP_STRING => 2,
13 OP_REFERENCE => 3,
14 OP_CHUNK => 4,
15 OP_THROW => 5,
16 OP_TRYCATCH => 6
17 };
18
19 BEGIN {
20 public _direct property chunkName => prop_get;
21 public _direct property opStream => prop_get;
22 }
23
24 sub Regexp {
25 my ($this,$rx) = @_;
26
27 if (ref $rx eq 'Regexp') {
28
29 } elsif (not ref $rx) {
30 $rx = q/$rx/;
31 } else {
32 die new IMPL::InvalidArgumentException('A regular expression required');
33 }
34
35 push @{$this->{$opStream}}, [OP_REGEXP, $rx];
36 }
37
38 sub String {
39 my ($this,$str) = @_;
40
41 die new IMPL::InvalidArgumentException("A simple value is required") if ref $str;
42
43 push @{$this->{$opStream}}, [OP_STRING, $str];
44 }
45
46 sub Reference {
47 my ($this,$ref) = @_;
48
49 die new IMPL::InvalidArgumentException("A simple value is reqiured") if ref $ref;
50
51 push @{$this->{$opStream}}, [OP_REFERENCE, $ref];
52 }
53
54 sub Chunk {
55 my ($this,$chunk) = @_;
56
57 die new IMPL::InvalidArgumentException unless UNIVERSAL::isa($chunk,'IMPL::Text::Parser::Chunk');
58
59 push @{$this->{$opStream}}, [OP_CHUNK, $chunk];
60 }
61
62 sub Throw {
63 my ($this, $msg) = @_;
64
65 push @{$this->{$opStream}}, [OP_THROW, $msg];
66 }
67
68 sub TryCatch {
69 my ($this,$chunkTry,$chunkCatch) = @_;
70
71 push @{$this->{$opStream}}, [OP_TRYCATCH, $chunkTry, $chunkCatch];
72 }
73
74 sub compile {
75 my ($this) = @_;
76
77 my $text = '';
78
79 if ($this->{$opStream}) {
80 foreach my $op (@{$this->{$opStream}}) {
81 my $code = shift @$op;
82
83 if ($code == OP_REGEXP) {
84
85 } elsif ($code == OP_STRING) {
86
87 } elsif ($code == OP_REFERENCE) {
88
89 } elsif ($code == OP_CHUNK) {
90
91 } elsif ($code == OP_THROW) {
92
93 } elsif ($code == OP_TRYCATCH) {
94
95 }
96 }
97 }
98 }
99
100 1;