JAL-3130 mark some deprecated methods in Regex as @Deprecated to stop warnings
[jalview.git] / src / com / stevesoft / pat / RegexReader.java
index 0ff33e3..a0b42ce 100755 (executable)
-//\r
-// This software is now distributed according to\r
-// the Lesser Gnu Public License.  Please see\r
-// http://www.gnu.org/copyleft/lesser.txt for\r
-// the details.\r
-//    -- Happy Computing!\r
-//\r
-package com.stevesoft.pat;\r
-\r
-import java.io.*;\r
-import com.stevesoft.pat.wrap.*;\r
-\r
-/** This class allows you to replace the text in strings\r
-    as you read them in.  Be careful what you do with\r
-    this freedom... using Regex.perlCode("s{.*}{x}s")\r
-    as your pattern will result in loading the entire\r
-    contents of the Reader into memory.\r
-    */\r
-public class RegexReader extends Reader {\r
-  RBuffer rb = new RBuffer(new StringBuffer());\r
-  PartialBuffer wrap = new PartialBuffer(rb.sb);\r
-  boolean moreToRead = true;\r
-  Reader r;\r
-  Replacer rp;\r
-\r
-  // the buffer size\r
-  int nmax = 2*1024;\r
-\r
-  public RegexReader(Regex rex,Reader r) {\r
-    this.r = r;\r
-    rp = rex.getReplacer();\r
-  }\r
-  public RegexReader(Transformer tex,Reader r) {\r
-    this.r = r;\r
-    rp = tex.getReplacer();\r
-  }\r
-  public void reset() throws IOException {\r
-    r.reset();\r
-    rb = new RBuffer(new StringBuffer());\r
-    wrap = new PartialBuffer(rb.sb);\r
-    moreToRead = true;\r
-  }\r
-  void readData() throws IOException {\r
-    int c;\r
-    int n = 0;\r
-    while( (c = r.read()) != -1) {\r
-      rb.sb.append((char)c);\r
-      if(n++ > nmax)\r
-        break;\r
-    }\r
-    if(c == -1 && n == 0) {\r
-      moreToRead = false;\r
-      wrap.allowOverRun = false;\r
-    }\r
-  }\r
-  void getMoreData() throws IOException {\r
-    while(rb.pos >= rb.epos) {\r
-      wrap.overRun = false;\r
-      if(rb.next != null) {\r
-       rb = rb.next;\r
-      } else if(rb.done) {\r
-        break;\r
-      } else if(rb.epos >= rb.sb.length()\r
-            && rb.epos > nmax) {\r
-       rb.pos = 1;\r
-       rb.epos = 1;\r
-       rb.sb.setLength(1);\r
-       readData();\r
-      } else if(rb.epos >= rb.sb.length()\r
-            && moreToRead) {\r
-        readData();\r
-      } else if(rp.getRegex().matchAt(wrap,rb.epos)) {\r
-       if(wrap.overRun) {\r
-         readData();\r
-       } else {\r
-         StringBufferWrap sbw = new StringBufferWrap();\r
-         StringBufferLike sbl = new StringBufferLike(sbw);\r
-         /*\r
-          ReplaceRule rr = rex.getReplaceRule();\r
-         while(rr != null) {\r
-           rr.apply(sbl,rex);\r
-           rr = rr.next;\r
-         }\r
-         */\r
-         Regex rex = rp.getRegex();\r
-         int npos = rex.matchedTo();\r
-         rp.setBuffer(sbl);\r
-         rp.setSource(wrap);\r
-         rp.setPos(npos);\r
-         rp.apply(rex,rex.getReplaceRule());\r
-         int opos = rb.epos;\r
-         RBuffer rb2 = new RBuffer((StringBuffer)sbw.unwrap());\r
-         rb2.epos = rb2.sb.length();\r
-         RBuffer rb3 = new RBuffer(rb.sb);\r
-\r
-         rb.next = rb2;\r
-         rb2.next = rb3;\r
-\r
-         if(npos == opos) {\r
-           rb3.epos = npos+1;\r
-           if(rb3.epos > rb3.sb.length()) {\r
-             if(rb.pos >= rb.epos)\r
-               rb = rb.next;\r
-             rb3.pos = rb3.epos = 0;\r
-             rb3.done = true;\r
-             //break;\r
-           }\r
-            rb3.pos = npos;\r
-         } else {\r
-           rb3.pos = rb3.epos = npos;\r
-         }\r
-\r
-        }\r
-      } else {\r
-       if(wrap.overRun) {\r
-         readData();\r
-        } else if(rb.epos<rb.sb.length()) {\r
-         rb.epos++;\r
-        } else {\r
-         break;\r
-       }\r
-      }\r
-    }\r
-  }\r
-  public int read() throws IOException {\r
-    if(rb.pos >= rb.epos) {\r
-      getMoreData();\r
-      if(rb.pos >= rb.epos)\r
-        return -1;\r
-    }\r
-    //System.out.println(rb);\r
-    return rb.sb.charAt(rb.pos++);\r
-  }\r
-  public int read(char[] buf,int off,int len)\r
-    throws IOException\r
-  {\r
-    int c = -1;\r
-    int end = off+len;\r
-    for(int i=off;i<end;i++) {\r
-      c = read();\r
-      if(c < 0) {\r
-       if(i == off)\r
-         return -1;\r
-        return i-off;\r
-      }\r
-      buf[i] = (char)c;\r
-    }\r
-    return len;\r
-  }\r
-  public void close()\r
-    throws IOException\r
-  {\r
-    r.close();\r
-  }\r
-\r
-  public boolean markSupported() { return false; }\r
-\r
-  /** Get the size of the working buffer.\r
-      The current buffer may be larger if\r
-      the pattern demands it. */\r
-  public int getBufferSize() {\r
-    return nmax;\r
-  }\r
-  /** Set the size of the working buffer.\r
-      The current buffer may be larger if\r
-      the pattern demands it. */\r
-  public void setBufferSize(int n) {\r
-    nmax = n;\r
-  }\r
-\r
-  int max_lines = 2;\r
-  /** This function no longer serves any purpose.\r
-      @deprecated\r
-      */\r
-  public int getMaxLines() { return max_lines; }\r
-  /** This function no longer serves any purpose.\r
-      @deprecated\r
-      */\r
-  public void setMaxLines(int ml) { max_lines = ml; }\r
-\r
-  char EOLchar = '\n';\r
-  /** This function no longer serves any purpose.\r
-      @deprecated\r
-      */\r
-  public char getEOLchar() {\r
-    return EOLchar;\r
-  }\r
-  /** This function no longer serves any purpose.\r
-      @deprecated\r
-      */\r
-  public void setEOLchar(char c) {\r
-    EOLchar = c;\r
-  }\r
-\r
-  public long skip(long d) throws IOException {\r
-    // This is probably inefficient, I just did it\r
-    // this way to avoid possible bugs.\r
-    long n = 0;\r
-    while(n<d && read() != -1)\r
-      n++;\r
-    return n;\r
-  }\r
-\r
-  /*\r
-  static void test(String re,String inp,int n) throws Exception {\r
-    Reader r = new StringReader(inp);\r
-    r = new BufferedReader(r);\r
-    Regex rex = Regex.perlCode(re);\r
-    String res1 = rex.replaceAll(inp);\r
-    int c = -1;\r
-    StringBuffer sb = new StringBuffer();\r
-    RegexReader rr = new RegexReader(rex,r);\r
-    rr.setBufferSize(n);\r
-    while( (c = rr.read()) != -1)\r
-      sb.append((char)c);\r
-    String res2 = sb.toString();\r
-    if(!res1.equals(res2)) {\r
-      System.out.println("nmax="+n);\r
-      System.out.println("re="+re);\r
-      System.out.println("inp="+inp);\r
-      System.out.println("res1="+res1);\r
-      System.out.println("res2="+res2);\r
-      System.exit(255);\r
-    }\r
-  }\r
-  public static void main(String[] args) throws Exception {\r
-    for(int n=6;n<15;n++) {\r
-      test("s/x/y/","-----x123456789",n);\r
-      test("s/x/y/","x123456789",n);\r
-      test("s/x/y/","-----x",n);\r
-      test("s/x.*?x/y/",".xx..x..x...x...x....x....x",n);\r
-      test("s/x.*x/[$&]/","--x........x--xx",n);\r
-      test("s/x.*x/[$&]/","--x........x------",n);\r
-      test("s/.$/a/m","bb\nbbb\nbbbb\nbbbbb\nbbbbbb\nbbbbbbbbbbbb",n);\r
-      test("s/.$/a/","123",n);\r
-      test("s/.$/a/","bb\nbbb\nbbbb\nbbbbb\nbbbbbb\nbb",n);\r
-      test("s/^./a/","bb\nbbb\nbbbb\nbbbbb\nbbbbbb\nbb",n);\r
-      test("s/$/a/","bbb",n);\r
-      test("s/^/a/","bbb",n);\r
-      test("s/^/a/","",n);\r
-      test("s{.*}{N}","xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",n);\r
-      test("s/.{0,7}/y/","AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",n);\r
-      test("s/x/$&/","xxx",n);\r
-    }\r
-    System.out.println("Success!!!");\r
-  }\r
-  */\r
-}\r
+//
+// This software is now distributed according to
+// the Lesser Gnu Public License.  Please see
+// http://www.gnu.org/copyleft/lesser.txt for
+// the details.
+//    -- Happy Computing!
+//
+package com.stevesoft.pat;
+
+import java.io.IOException;
+import java.io.Reader;
+
+import com.stevesoft.pat.wrap.StringBufferWrap;
+
+/**
+ * This class allows you to replace the text in strings as you read them in. Be
+ * careful what you do with this freedom... using Regex.perlCode("s{.*}{x}s") as
+ * your pattern will result in loading the entire contents of the Reader into
+ * memory.
+ */
+public class RegexReader extends Reader
+{
+  RBuffer rb = new RBuffer(new StringBuffer());
+
+  PartialBuffer wrap = new PartialBuffer(rb.sb);
+
+  boolean moreToRead = true;
+
+  Reader r;
+
+  Replacer rp;
+
+  // the buffer size
+  int nmax = 2 * 1024;
+
+  public RegexReader(Regex rex, Reader r)
+  {
+    this.r = r;
+    rp = rex.getReplacer();
+  }
+
+  public RegexReader(Transformer tex, Reader r)
+  {
+    this.r = r;
+    rp = tex.getReplacer();
+  }
+
+  public void reset() throws IOException
+  {
+    r.reset();
+    rb = new RBuffer(new StringBuffer());
+    wrap = new PartialBuffer(rb.sb);
+    moreToRead = true;
+  }
+
+  void readData() throws IOException
+  {
+    int c;
+    int n = 0;
+    while ((c = r.read()) != -1)
+    {
+      rb.sb.append((char) c);
+      if (n++ > nmax)
+      {
+        break;
+      }
+    }
+    if (c == -1 && n == 0)
+    {
+      moreToRead = false;
+      wrap.allowOverRun = false;
+    }
+  }
+
+  void getMoreData() throws IOException
+  {
+    while (rb.pos >= rb.epos)
+    {
+      wrap.overRun = false;
+      if (rb.next != null)
+      {
+        rb = rb.next;
+      }
+      else if (rb.done)
+      {
+        break;
+      }
+      else if (rb.epos >= rb.sb.length() && rb.epos > nmax)
+      {
+        rb.pos = 1;
+        rb.epos = 1;
+        rb.sb.setLength(1);
+        readData();
+      }
+      else if (rb.epos >= rb.sb.length() && moreToRead)
+      {
+        readData();
+      }
+      else if (rp.getRegex().matchAt(wrap, rb.epos))
+      {
+        if (wrap.overRun)
+        {
+          readData();
+        }
+        else
+        {
+          StringBufferWrap sbw = new StringBufferWrap();
+          StringBufferLike sbl = new StringBufferLike(sbw);
+          /*
+           * ReplaceRule rr = rex.getReplaceRule(); while(rr != null) {
+           * rr.apply(sbl,rex); rr = rr.next; }
+           */
+          Regex rex = rp.getRegex();
+          int npos = rex.matchedTo();
+          rp.setBuffer(sbl);
+          rp.setSource(wrap);
+          rp.setPos(npos);
+          rp.apply(rex, rex.getReplaceRule());
+          int opos = rb.epos;
+          RBuffer rb2 = new RBuffer((StringBuffer) sbw.unwrap());
+          rb2.epos = rb2.sb.length();
+          RBuffer rb3 = new RBuffer(rb.sb);
+
+          rb.next = rb2;
+          rb2.next = rb3;
+
+          if (npos == opos)
+          {
+            rb3.epos = npos + 1;
+            if (rb3.epos > rb3.sb.length())
+            {
+              if (rb.pos >= rb.epos)
+              {
+                rb = rb.next;
+              }
+              rb3.pos = rb3.epos = 0;
+              rb3.done = true;
+              // break;
+            }
+            rb3.pos = npos;
+          }
+          else
+          {
+            rb3.pos = rb3.epos = npos;
+          }
+
+        }
+      }
+      else
+      {
+        if (wrap.overRun)
+        {
+          readData();
+        }
+        else if (rb.epos < rb.sb.length())
+        {
+          rb.epos++;
+        }
+        else
+        {
+          break;
+        }
+      }
+    }
+  }
+
+  public int read() throws IOException
+  {
+    if (rb.pos >= rb.epos)
+    {
+      getMoreData();
+      if (rb.pos >= rb.epos)
+      {
+        return -1;
+      }
+    }
+    // System.out.println(rb);
+    return rb.sb.charAt(rb.pos++);
+  }
+
+  public int read(char[] buf, int off, int len) throws IOException
+  {
+    int c = -1;
+    int end = off + len;
+    for (int i = off; i < end; i++)
+    {
+      c = read();
+      if (c < 0)
+      {
+        if (i == off)
+        {
+          return -1;
+        }
+        return i - off;
+      }
+      buf[i] = (char) c;
+    }
+    return len;
+  }
+
+  public void close() throws IOException
+  {
+    r.close();
+  }
+
+  public boolean markSupported()
+  {
+    return false;
+  }
+
+  /**
+   * Get the size of the working buffer. The current buffer may be larger if the
+   * pattern demands it.
+   */
+  public int getBufferSize()
+  {
+    return nmax;
+  }
+
+  /**
+   * Set the size of the working buffer. The current buffer may be larger if the
+   * pattern demands it.
+   */
+  public void setBufferSize(int n)
+  {
+    nmax = n;
+  }
+
+  int max_lines = 2;
+
+  /**
+   * This function no longer serves any purpose.
+   * 
+   * @deprecated
+   */
+  @Deprecated
+  public int getMaxLines()
+  {
+    return max_lines;
+  }
+
+  /**
+   * This function no longer serves any purpose.
+   * 
+   * @deprecated
+   */
+  @Deprecated
+  public void setMaxLines(int ml)
+  {
+    max_lines = ml;
+  }
+
+  char EOLchar = '\n';
+
+  /**
+   * This function no longer serves any purpose.
+   * 
+   * @deprecated
+   */
+  @Deprecated
+  public char getEOLchar()
+  {
+    return EOLchar;
+  }
+
+  /**
+   * This function no longer serves any purpose.
+   * 
+   * @deprecated
+   */
+  @Deprecated
+  public void setEOLchar(char c)
+  {
+    EOLchar = c;
+  }
+
+  public long skip(long d) throws IOException
+  {
+    // This is probably inefficient, I just did it
+    // this way to avoid possible bugs.
+    long n = 0;
+    while (n < d && read() != -1)
+    {
+      n++;
+    }
+    return n;
+  }
+
+  /*
+   * static void test(String re,String inp,int n) throws Exception { Reader r =
+   * new StringReader(inp); r = new BufferedReader(r); Regex rex =
+   * Regex.perlCode(re); String res1 = rex.replaceAll(inp); int c = -1;
+   * StringBuffer sb = new StringBuffer(); RegexReader rr = new
+   * RegexReader(rex,r); rr.setBufferSize(n); while( (c = rr.read()) != -1)
+   * sb.append((char)c); String res2 = sb.toString(); if(!res1.equals(res2)) {
+   * System.out.println("nmax="+n); System.out.println("re="+re);
+   * System.out.println("inp="+inp); System.out.println("res1="+res1);
+   * System.out.println("res2="+res2); System.exit(255); } } public static void
+   * main(String[] args) throws Exception { for(int n=6;n<15;n++) {
+   * test("s/x/y/","-----x123456789",n); test("s/x/y/","x123456789",n);
+   * test("s/x/y/","-----x",n);
+   * test("s/x.*?x/y/",".xx..x..x...x...x....x....x",n);
+   * test("s/x.*x/[$&]/","--x........x--xx",n);
+   * test("s/x.*x/[$&]/","--x........x------",n);
+   * test("s/.$/a/m","bb\nbbb\nbbbb\nbbbbb\nbbbbbb\nbbbbbbbbbbbb",n);
+   * test("s/.$/a/","123",n);
+   * test("s/.$/a/","bb\nbbb\nbbbb\nbbbbb\nbbbbbb\nbb",n);
+   * test("s/^./a/","bb\nbbb\nbbbb\nbbbbb\nbbbbbb\nbb",n);
+   * test("s/$/a/","bbb",n); test("s/^/a/","bbb",n); test("s/^/a/","",n);
+   * test("s{.*}{N}","xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",n);
+   * test("s/.{0,7}/y/","AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",n);
+   * test("s/x/$&/","xxx",n); } System.out.println("Success!!!"); }
+   */
+}