1 // $Id: PatternSet.java,v 1.3 2004/02/12 22:34:10 powerpete Exp $
2 // [JMP, 03.02.2004] Created this file.
3 package org.jface.stepmt.core.util;
4
5 import java.util.ArrayList;
6 import java.util.Collection;
7 import java.util.Iterator;
8 import java.util.List;
9
10 import org.jface.stepmt.core.Interval;
11 import org.jface.stepmt.core.Pattern;
12 import org.jface.stepmt.core.PatternMap;
13 import org.jface.stepmt.core.patterns.StringPattern;
14
15 /***
16 * @author <a href="mailto:powerpete@users.sf.net">M. Petersen</a>
17 * @version $Id: PatternSet.java,v 1.3 2004/02/12 22:34:10 powerpete Exp $
18 */
19 public class PatternSet
20 {
21 private List patterns = new ArrayList();
22 private Collection containerPatterns = new ArrayList();
23
24 public PatternSet()
25 {}
26
27 public PatternSet(String str)
28 {
29 int start = 0;
30 int end = 0;
31 while ((start = str.indexOf("${", end)) != -1)
32 {
33 int tmp = str.indexOf("}", start);
34 if (tmp == -1)
35 {
36 addStringPattern(str.substring(end));
37 return;
38 }
39 else
40 {
41 addStringPattern(str.substring(end, start));
42 addContainerPattern(str.substring(start + 2, tmp));
43 end = tmp + 1;
44 }
45 }
46 addStringPattern(str.substring(end));
47 }
48
49 private void addContainerPattern(String string)
50 {
51 Pattern pattern = new ContainerPattern(string);
52 patterns.add(pattern);
53 containerPatterns.add(pattern);
54 }
55
56 private void addStringPattern(String str)
57 {
58 if (str.length() != 0)
59 {
60 add(new StringPattern(str));
61 }
62 }
63
64 void add(Pattern pattern)
65 {
66 patterns.add(pattern);
67 }
68
69 public void resolve(PatternMap patternMap)
70 {
71 for (Iterator it = containerPatterns.iterator(); it.hasNext();)
72 {
73 ContainerPattern containerPattern = (ContainerPattern) it.next();
74 containerPattern.resolve(patternMap);
75 }
76 }
77
78 public Interval match(String text)
79 {
80 Interval interval = null;
81 int index = 0;
82 for (int i = 0; i < patterns.size(); i++)
83 //for (Iterator it = patterns.iterator(); it.hasNext();)
84 {
85 //Pattern pattern = (Pattern) it.next();
86 Pattern pattern = (Pattern) patterns.get(i);
87 if (interval == null)
88 {
89 interval = getInterval(text, pattern, index);
90 if (interval == null)
91 {
92 return null;
93 }
94 }
95 else
96 {
97 interval = interval.merge(pattern.match(text, index));
98 }
99 if (interval == null)
100 {
101 i = -1;
102 }
103 else
104 {
105 index = interval.indexAfter();
106 }
107 }
108 return interval;
109 }
110
111 private Interval getInterval(String text, Pattern pattern, int index)
112 {
113 for (int i = index; i < text.length(); i++)
114 {
115 Interval interval = pattern.match(text, i);
116 if (interval != null)
117 {
118 return interval;
119 }
120 }
121 return null;
122 }
123
124 public Interval matchesAtStart(String text)
125 {
126 int index = 0;
127 Interval interval = new Interval(0, 0);
128 for (Iterator it = patterns.iterator(); it.hasNext();)
129 {
130 Pattern pattern = (Pattern) it.next();
131 interval = interval.merge(pattern.match(text, index));
132 if (interval == null)
133 {
134 return null;
135 }
136 index = interval.indexAfter();
137 }
138 return interval;
139 }
140 }
This page was automatically generated by Maven