X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fchr%2FCharInput.java;h=65b2b3ed5c5a3acc5fa55e7ea6c7348dfbbaeb31;hp=6dd9d7b0a2a2d23b8b9956ecdb83900ae386b65e;hb=2c05c84a714f54b3bc026f51416492ddb13f33b1;hpb=3ee451bce342d4bb61ad6235ba57bdf817bfdd1a diff --git a/src/edu/berkeley/sbp/chr/CharInput.java b/src/edu/berkeley/sbp/chr/CharInput.java index 6dd9d7b..65b2b3e 100644 --- a/src/edu/berkeley/sbp/chr/CharInput.java +++ b/src/edu/berkeley/sbp/chr/CharInput.java @@ -21,15 +21,40 @@ public class CharInput extends Cartesian.Input { boolean cr = false; private int count = 0; + private StringBuilder cache = new StringBuilder(); + + public void setCacheEnabled(boolean enabled) { + if (!enabled) cache = null; + else if (cache == null) cache = new StringBuilder(); + } + public boolean isCR() { return cr; } public Character _next() throws IOException { cr = false; int i = r.read(); - if (i==-1) { System.err.print("\r...done \r"); return null; } + if (i==-1) { /*System.err.print("\r...done \r"); */return null; } char c = (char)i; + if (cache != null) cache.append(c); cr = c=='\n'; + /* if ((count++) % 100 == 0) System.err.print(" " + count + "\r"); + */ return c; } + + public String showRegion(Region rc) { + if (cache == null) return null; + Cartesian.Region r = (Cartesian.Region)rc; + int start = r.getStart().getScalar()+1; + int end = r.getEnd().getScalar()+1; + if (end > cache.length()) end = cache.length(); + String ret; + if (end-start < 60) ret = cache.substring(start, end); + else ret = cache.substring(start, start+25) + + "..." + + cache.substring(end-25, end); + return StringUtil.escapify(ret, "\n\r"); + } + }