-
Notifications
You must be signed in to change notification settings - Fork 483
/
MatchContext.java
109 lines (96 loc) · 1.84 KB
/
MatchContext.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
/**
* Aptana Studio
* Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved.
* Licensed under the terms of the GNU Public License (GPL) v3 (with exceptions).
* Please see the license.html included with this distribution for details.
* Any modifications to this file must keep this entire header intact.
*/
package com.aptana.scope;
import java.util.Stack;
import java.util.regex.Pattern;
public class MatchContext
{
private static final Pattern spaces = Pattern.compile("\\s+"); //$NON-NLS-1$
private String[] _steps;
private int _currentIndex;
private Stack<Integer> _savedPositions;
/**
* MatchContext
*
* @param scope
*/
MatchContext(String scope)
{
this._steps = (scope != null) ? spaces.split(scope) : new String[0];
this._currentIndex = 0;
this._savedPositions = new Stack<Integer>();
}
/**
* advance
*/
public void advance()
{
this._currentIndex++;
}
/**
* getCurrentStep
*
* @return
*/
public String getCurrentStep()
{
String result = null;
if (0 <= this._currentIndex && this._currentIndex < this._steps.length)
{
result = this._steps[this._currentIndex];
}
return result;
}
/**
* getLength
*
* @return
*/
public int getLength()
{
return this._steps.length;
}
/**
* popCurrentStep
*/
public void popCurrentStep()
{
this.popCurrentStep(true);
}
/**
* popCurrentStep
*
* @param restore
*/
public void popCurrentStep(boolean restore)
{
if (this._savedPositions.size() > 0)
{
int value = this._savedPositions.pop();
if (restore)
{
this._currentIndex = value;
}
}
}
/**
* pushCurrentStep
*/
public void pushCurrentStep()
{
this._savedPositions.push(this._currentIndex);
}
/*
* (non-Javadoc)
* @see java.lang.Object#toString()
*/
public String toString()
{
return this.getCurrentStep();
}
}