X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fchr%2FCharInput.java;h=15f128953d149f99617ac13d7c96efec390478b1;hb=6ff6d681e214e91ca3fa5afdff60a0fb88227404;hp=530f25c9b439f09f8ea97e05153c1610b84b056a;hpb=acfe58223b9a0f78e64a14a1ca5d5998626ee3fe;p=sbp.git diff --git a/src/edu/berkeley/sbp/chr/CharInput.java b/src/edu/berkeley/sbp/chr/CharInput.java index 530f25c..15f1289 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,50 @@ 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 { + 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 (start < 0) start = 0; + if (end < start) end = start; + if (end > cache.length()) end = cache.length(); + String ret; + if (end-start < 60) ret = cachesubstring(start, end); + else ret = cachesubstring(start, start+25) + + "..." + + cachesubstring(end-25, end); + return StringUtil.escapify(ret, "\n\r"); + } + + private String cachesubstring(int start, int end) { + if (start < 0) start = 0; + if (end < 0) end = 0; + if (start >= cache.length()) start = cache.length(); + if (end >= cache.length()) end = cache.length(); + return cache.substring(start, end); + } + }