1
16
17 import org.as2lib.regexp.node.Node;
18 import org.as2lib.regexp.node.Range;
19 import org.as2lib.regexp.node.TreeInfo;
20
21
27
28 class org.as2lib.regexp.node.NotRange extends Node {
29
30 private var lower, upper:Number;
31
32 public function NotRange(n:Number) {
33 if (n != null) {
34 lower = n >>> 16;
35 upper = n & 0xFFFF;
36 }
37 }
38
39 public function dup(flag:Boolean):Node {
40 if (flag) {
41 return new Range((lower << 16) + upper);
42 } else {
43 return new NotRange((lower << 16) + upper);
44 }
45 }
46
47 public function match(matcher:Object, i:Number, seq:String):Boolean {
48 if (i < matcher.to) {
49 var ch:Number = seq.charCodeAt(i);
50 return ((ch-lower)|(upper-ch)) < 0
51 && next.match(matcher, i+1, seq);
52 }
53 return false;
54 }
55
56 public function study(info:TreeInfo):Boolean {
57 info.minLength++;
58 info.maxLength++;
59 return next.study(info);
60 }
61 }
62
63