X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fchr%2FCharInput.java;h=65b2b3ed5c5a3acc5fa55e7ea6c7348dfbbaeb31;hp=795341800e312f42529b065bf255651dcb0acb8f;hb=2c05c84a714f54b3bc026f51416492ddb13f33b1;hpb=e12a3098c6ed3cbfa6493870af3688f833c4f8ac diff --git a/src/edu/berkeley/sbp/chr/CharInput.java b/src/edu/berkeley/sbp/chr/CharInput.java index 7953418..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.*; @@ -13,18 +15,46 @@ public class CharInput extends Cartesian.Input { public CharInput(String s) { this(new StringReader(s)); } public CharInput(Reader r) { this(r, null); } - public CharInput(Reader r, String s) { this.r = r; } + public CharInput(Reader r, String s) { this.r = new BufferedReader(r); } public CharInput(InputStream i) { this(i, null); } public CharInput(InputStream i, String s) { this(new InputStreamReader(i), s); } 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) 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"); + } + }