1 17 18 package com.finalist.jag.template.parser; 19 20 27 public abstract class InputBuffer { 28 29 31 32 protected int nMarkers = 0; 33 34 36 37 protected int markerOffset = 0; 38 39 41 42 protected int numToConsume = 0; 43 44 46 47 protected CharQueue queue; 48 49 50 51 public InputBuffer() { 52 queue = new CharQueue(1); 53 } 54 55 56 63 public void commit() { 64 nMarkers = (nMarkers > 0) ? nMarkers - 1 : 0; 65 } 66 67 68 69 public void consume() { 70 numToConsume++; 71 } 72 73 74 81 public abstract void fill(int amount) throws CharStreamException; 82 83 84 91 public String getLAChars() { 92 StringBuffer la = new StringBuffer (); 93 for (int i = markerOffset; i < queue.nbrEntries; i++) { 94 la.append(queue.elementAt(i)); 95 } 96 97 return la.toString(); 98 } 99 100 101 110 public String getCharsFromMark(int mark) { 111 StringBuffer la = new StringBuffer (); 112 int i = mark; 113 114 mark(); 115 for (; i < markerOffset; i++) { 116 la.append(queue.elementAt(i)); 117 } 118 commit(); 119 120 return la.toString(); 121 } 122 123 124 135 public String LAChars(int n) throws CharStreamException { 136 StringBuffer la = new StringBuffer (); 137 138 for (int i = 0; i < n; i++) { 139 la.append(LA(i + 1)); 140 } 141 142 return la.toString(); 143 } 144 145 146 153 public String getMarkedChars() { 154 StringBuffer marked = new StringBuffer (); 155 156 for (int i = 0; i < markerOffset; i++) { 157 marked.append(queue.elementAt(i)); 158 } 159 160 return marked.toString(); 161 } 162 163 164 171 public boolean isMarked() { 172 return (nMarkers != 0); 173 } 174 175 176 185 public char LA(int i) throws CharStreamException { 186 fill(i); 187 return queue.elementAt(markerOffset + i - 1); 188 } 189 190 191 197 public int mark() { 198 syncConsume(); 199 nMarkers++; 200 return markerOffset; 201 } 202 203 204 208 public void rewind(int mark) { 209 syncConsume(); 210 markerOffset = mark; 211 nMarkers--; 212 } 213 214 215 216 protected void syncConsume() { 217 while (numToConsume > 0) { 218 if (nMarkers > 0) { 219 markerOffset++; 221 } 222 else { 223 queue.removeFirst(); 225 } 226 numToConsume--; 227 } 228 } 229 } | Popular Tags |