/** * Recursively dumps a byte representation of a subtree onto a stream. Used by stringfor( InspTree * ). Publicly available in case you want to stringify a subtree and really think this way is less * work than doing it yourself. You'll want to make sure the "spaces" static variable is * initialized first :) * * @param subtreeRoot root of subtree to represent * @param pts way to stringify each position * @param ostream stream on which to represent the subtree * @param t tree, so children(.) can be called * @param indentation number of spaces to indent this level * @param indentation_increment amount by which indentation will be increased before writing * children */ public static void writeNodeAndChildren( Position subtreeRoot, PositionToString pts, DataOutputStream ostream, InspectableTree t, int indentation, int indentation_increment) { try { // indent, then write the subtreeRoot ostream.write(spaces, 0, indentation); ostream.writeBytes(pts.stringfor(subtreeRoot)); ostream.writeBytes("\n"); } catch (java.io.IOException e) { System.err.println("\nAn I/O error occurred: " + e); return; } PositionIterator pp = t.children(subtreeRoot); // recur on all children while (pp.hasNext()) writeNodeAndChildren( pp.nextPosition(), pts, ostream, t, indentation + indentation_increment, indentation_increment); }
/** * Gives string representation of a sequence, parameterized by how to represent each position * (i.e., constructs a string by iterating over all positions of the sequence, concatenating the * specified string representation of each position). Iteration is in the natural order for a * sequence. * * @param s sequence to stringify * @param pts how to stringify each position * @return the string representation of s */ public static String stringfor(InspectableSequence s, PositionToString pts) { String toReturn = "["; PositionIterator pp = s.positions(); // first element should have no comma if (pp.hasNext()) toReturn += " " + pts.stringfor(pp.nextPosition()); while (pp.hasNext()) { toReturn += ", " + pts.stringfor(pp.nextPosition()); } toReturn += " ]"; return toReturn; }