int indentation = -1;
int lastIndentation = 0;
- int queuedIndentation = 0;
- char queuedCharacter = ' ';
int delta = 0;
public boolean isCR() { return cr; }
cr = false;
- if (queuedIndentation < 0) {
- queuedIndentation++;
- return CharAtom.right;
- }
- if (queuedSpaces > 0) {
- queuedSpaces--;
- return ' ';
- }
- if (queuedIndentation > 0) {
- queuedIndentation--;
- return CharAtom.left;
- }
-
- if (queuedCharacter != ' ') {
- char ret = queuedCharacter;
- queuedCharacter = ' ';
- return ret;
- }
-
int i = r.read();
if (i==-1) {
/*System.err.print("\r...done \r"); */
cr = c=='\n';
if (indent)
- if (cr) {
- indentation = 0;
- } else if (c==' ' && indentation >= 0) {
- indentation++;
- } else if (indentation >= 0) {
- //System.err.println("\r \rindent: " + (indentation - lastIndentation));
- redent(indentation - lastIndentation);
- r.unread(c);
+ if (cr && ignore) {
+ ignore = false;
+ } else if (cr) {
+ while(true) {
+ indentation = 0;
+ do { i = r.read(); if (i==' ') indentation++; } while (i==' ');
+ if (i=='\n') { /* FIXME */ continue; }
+ if (i==-1) { /* FIXME */ }
+ if (indentation - lastIndentation > 0) {
+ r.unread('\n');
+ for(int j=0; j<indentation; j++) r.unread(' ');
+ redent(indentation - lastIndentation);
+ } else {
+ redent(indentation - lastIndentation);
+ r.unread('\n');
+ for(int j=0; j<indentation; j++) r.unread(' ');
+ }
+ if (i != -1) r.unread((char)i);
+ ignore = true;
+ break;
+ }
lastIndentation = indentation;
indentation = -1;
return __next();
return c;
}
+ private boolean ignore = false;
+
private void redent(int i) {
if (i<0) { r.unread(CharAtom.right); redent(i+1); return; }
if (i>0) { r.unread(CharAtom.left); redent(i-1); return; }
}
- int queuedSpaces = 0;
-
public String showRegion(Region<Character> rc) {
if (cache == null) return null;
Cartesian.Region r = (Cartesian.Region)rc;