summaryrefslogtreecommitdiff
path: root/src/library/scala/util/parsing/SimpleTokenizer.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/library/scala/util/parsing/SimpleTokenizer.scala')
-rw-r--r--src/library/scala/util/parsing/SimpleTokenizer.scala46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/library/scala/util/parsing/SimpleTokenizer.scala b/src/library/scala/util/parsing/SimpleTokenizer.scala
new file mode 100644
index 0000000000..20a23a8492
--- /dev/null
+++ b/src/library/scala/util/parsing/SimpleTokenizer.scala
@@ -0,0 +1,46 @@
+package scala.util.parsing;
+
+class SimpleTokenizer(in: Iterator[char], delimiters: String) extends Iterator[String] {
+
+ val tracing = false;
+
+ private def max(x: int, y: char): int = if (x < y) y else x;
+
+ private def delimArray: Array[boolean] = {
+ val ds = List.fromString(delimiters);
+ val da = new Array[boolean]((0 /: ds)(max) + 1);
+ for (val ch <- ds) { da(ch) = true }
+ da
+ }
+
+ private val isdelim = delimArray;
+ private def isDelimiter(ch: int) = ch >= 0 && ch < isdelim.length && isdelim(ch);
+
+ private val EOI = -1;
+
+ private def nextChar: int = if (in.hasNext) in.next else EOI;
+
+ private var ch: int = nextChar;
+
+ private val buf = new StringBuffer();
+
+ def hasNext: boolean = ch != EOI;
+
+ def next: String = {
+ while (ch <= ' ' && ch != EOI) ch = nextChar;
+ if (ch == EOI) ""
+ else {
+ buf.setLength(0);
+ if (isDelimiter(ch)) {
+ buf append ch.asInstanceOf[char]; ch = nextChar
+ } else {
+ while (ch > ' ' && ch != EOI && !isDelimiter(ch)) {
+ buf append ch.asInstanceOf[char]; ch = nextChar;
+ }
+ }
+ if (tracing) System.out.println("<" + buf.toString() + ">");
+ buf.toString()
+ }
+ }
+}
+