1
2
3
4
5
6
7 package net.sf.tomp.pp;
8
9 /***
10 *
11 * @author tomp
12 */
13 public class CharReader {
14
15 private String src;
16
17 private int index;
18 private int len;
19 private boolean eof = false;
20
21 public CharReader(String s) { src = s; len = s.length(); }
22
23 public char next() {
24 if (index < len) {
25 eof = false;
26 return src.charAt(index++);
27 } else {
28 eof = true;
29 return 0;
30 }
31 }
32
33 public char at() {
34 return at(index);
35 }
36
37 public char at(int i) {
38 if (i < len) {
39 return src.charAt(i);
40 } else {
41 return 0;
42 }
43 }
44
45 public boolean eof() { return eof; }
46
47 public char nextNonspace(char c) {
48 while(!eof() && Character.isWhitespace(c)) {
49 c = next();
50 }
51 return c;
52 }
53
54 public int index() {
55 return index;
56 }
57
58 public char pushback() {
59 index--;
60 return at();
61 }
62
63 public String substring(int textBegin, int textEnd) {
64 return src.substring(textBegin, textEnd);
65 }
66 }