X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fchr%2FCharInput.java;h=65b2b3ed5c5a3acc5fa55e7ea6c7348dfbbaeb31;hp=1a08f225fb9994fc9fd4d359728006f7fa0f192b;hb=2c05c84a714f54b3bc026f51416492ddb13f33b1;hpb=2cca97362e80d5a3cd3e02d791a10cd7c6f6b29c diff --git a/src/edu/berkeley/sbp/chr/CharInput.java b/src/edu/berkeley/sbp/chr/CharInput.java index 1a08f22..65b2b3e 100644 --- a/src/edu/berkeley/sbp/chr/CharInput.java +++ b/src/edu/berkeley/sbp/chr/CharInput.java @@ -1,3 +1,5 @@ +// Copyright 2006 all rights reserved; see LICENSE file for BSD-style license + package edu.berkeley.sbp.chr; import java.io.*; import java.util.*; @@ -19,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"); + } + }