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 | package Torello.Java; class LOCAsStr { static String run (char[] code, int numLeadingSpaces, int fcPos, int spacesPerTab) { StringBuilder sb = new StringBuilder(); // Loop Control Variables int possibleEndingWhiteSpaceCount = 0; int relativePos = numLeadingSpaces % spacesPerTab; int i = fcPos; while ((i < code.length) && (code[i] != '\n')) { if (code[i] == '\t') while (relativePos < 4) { sb.append(' '); relativePos++; possibleEndingWhiteSpaceCount++; } else if ((code[i] == ' ') || (code[i] == '\r') || (code[i] == '\f')) { sb.append(' '); relativePos++; possibleEndingWhiteSpaceCount++; } else { sb.append(code[i]); relativePos++; possibleEndingWhiteSpaceCount=0; } i++; relativePos %= 4; } if (i < code.length) { if (possibleEndingWhiteSpaceCount > 0) { sb.setCharAt(sb.length() - possibleEndingWhiteSpaceCount, '\n'); return sb.substring(0, sb.length() - possibleEndingWhiteSpaceCount + 1); } else return sb.append('\n').toString(); } return (possibleEndingWhiteSpaceCount > 0) ? sb.substring(0, sb.length() - possibleEndingWhiteSpaceCount) : sb.toString(); } } |