JAL-1807 still testing
[jalviewjs.git] / unused / com / stevesoft / pat / RegexWriter.java
index 7024d61..a111bd7 100644 (file)
-//
-// 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.Writer;
-
-import com.stevesoft.pat.wrap.WriterWrap;
-
-/**
- * A basic extension of FilterWriter that uses Transformer to make replacements
- * in data as it is written out. It attempts to transform a string whenever the
- * End-of-Line (EOL) character is written (which is, by default, the carriage
- * return '\n'). Only the transformed portion of the line is written out,
- * allowing the RegexWriter to wait until a complete pattern is present before
- * attempting to write out info. Until a pattern completes, data is stored in a
- * javajs.util.SB -- which can be accessed through the length() and charAt()
- * methods of this class.
- * <p>
- * Note a subtlety here -- while a Transformer normally matches at higher
- * priority against the pattern added to it first, this will not necessarily be
- * true when a multi-line match is in progress because one of the complete
- * multi-line patterns may not be completely loaded in RegexWriter's buffer. For
- * this reason, the Transformer class is equipped with a way to add a pattern
- * and replacement rule in three pieces -- a beginning (once this matches,
- * nothing else in the Transformer can match until the whole pattern matches),
- * an ending (the whole pattern is a String formed by adding the beginning and
- * ending), and a ReplaceRule.
- * <p>
- * An illustration of this is given in the this <a
- * href="../test/trans.java">example.</a>
- */
-public class RegexWriter extends Writer
-{
-  Replacer repr;
-
-  Writer w;
-
-  WriterWrap ww;
-
-  javajs.util.SB sb = new javajs.util.SB();
-
-  PartialBuffer wrap = new PartialBuffer(sb);
-
-  int pos, epos;
-
-  int interval = 128;
-
-  int bufferSize = 2 * 1024;
-
-  public RegexWriter(Transformer t, Writer w)
-  {
-    this.w = w;
-    ww = new WriterWrap(w);
-    repr = t.getReplacer();
-    repr.setBuffer(new StringBufferLike(ww));
-    repr.setSource(wrap);
-  }
-
-  public RegexWriter(Regex r, Writer w)
-  {
-    this.w = w;
-    ww = new WriterWrap(w);
-    repr = r.getReplacer();
-    repr.setBuffer(new StringBufferLike(ww));
-    repr.setSource(wrap);
-  }
-
-  char EOLchar = '\n';
-
-  /**
-   * This method no longer serves any purpose.
-   * 
-   * @deprecated
-   */
-  @Deprecated
-  public char getEOLchar()
-  {
-    return EOLchar;
-  }
-
-  /**
-   * This method no longer serves any purpose.
-   * 
-   * @deprecated
-   */
-  @Deprecated
-  public void setEOLchar(char c)
-  {
-    EOLchar = c;
-  }
-
-  int max_lines = 2;
-
-  /**
-   * This method no longer serves any purpose.
-   * 
-   * @deprecated
-   */
-  @Deprecated
-  public int getMaxLines()
-  {
-    return max_lines;
-  }
-
-  /**
-   * This method no longer serves any purpose.
-   * 
-   * @deprecated
-   */
-  @Deprecated
-  public void setMaxLines(int ml)
-  {
-    max_lines = ml;
-  }
-
-  void write() throws IOException
-  {
-    Regex rex = repr.getRegex();
-    int eposOld = epos;
-    if (rex.matchAt(wrap, epos) && !wrap.overRun)
-    {
-      while (pos < epos)
-      {
-        w.write(sb.charAt(pos++));
-      }
-      int to = rex.matchedTo();
-      repr.setPos(to);
-      repr.apply(rex, rex.getReplaceRule());
-      epos = pos = to;
-      if (epos == eposOld && epos < sb.length())
-      {
-        epos++;
-      }
-    }
-    else if (!wrap.overRun && epos < sb.length())
-    {
-      epos++;
-    }
-    while (pos < epos)
-    {
-      w.write(sb.charAt(pos++));
-    }
-    if (epos == sb.length())
-    {
-      sb.setLength(1);
-      pos = epos = 1;
-    }
-    else if (pos > bufferSize)
-    {
-       
-       String s = sb.substring(bufferSize);
-       sb.setLength(0);
-       sb.append(s);
-//      for (int i = bufferSize; i < sb.length(); i++)
-//      {
-//        sb.setCharAt(i - bufferSize, sb.charAt(i));
-//      }
-      pos -= bufferSize;
-      epos -= bufferSize;
-      sb.setLength(sb.length() - bufferSize);
-    }
-  }
-
-  public void write(char[] ca, int b, int n) throws IOException
-  {
-    int m = b + n;
-    for (int i = b; i < m; i++)
-    {
-      sb.appendC(ca[i]);
-      if (sb.length() % interval == interval - 1)
-      {
-        wrap.overRun = false;
-        while (epos + interval < sb.length() && !wrap.overRun)
-        {
-          write();
-        }
-      }
-    }
-  }
-
-  public void flush() throws IOException
-  {
-  }
-
-  public void close() throws IOException
-  {
-    wrap.allowOverRun = false;
-    wrap.overRun = false;
-    while (epos < sb.length())
-    {
-      write();
-    }
-    write();
-    w.close();
-  }
-
-  /** The current size of the javajs.util.SB in use by RegexWriter. */
-  public int length()
-  {
-    return sb.length();
-  }
-
-  /** The character at location i in the StringBuffer. */
-  public char charAt(int i)
-  {
-    return sb.charAt(i);
-  }
-
-  /** Set the interval at which regex patterns are checked. */
-  public void setInterval(int i)
-  {
-    interval = i;
-  }
-
-  /** Get the interval at which regex matches are checked. */
-  public int getInterval()
-  {
-    return interval;
-  }
-
-  /** Get the buffer size. */
-  public int getBufferSize()
-  {
-    return bufferSize;
-  }
-
-  /** Set the buffer size. */
-  public void setBufferSize(int i)
-  {
-    bufferSize = i;
-  }
-}
+//\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.IOException;\r
+import java.io.Writer;\r
+\r
+import com.stevesoft.pat.wrap.WriterWrap;\r
+\r
+/**\r
+ * A basic extension of FilterWriter that uses Transformer to make replacements\r
+ * in data as it is written out. It attempts to transform a string whenever the\r
+ * End-of-Line (EOL) character is written (which is, by default, the carriage\r
+ * return '\n'). Only the transformed portion of the line is written out,\r
+ * allowing the RegexWriter to wait until a complete pattern is present before\r
+ * attempting to write out info. Until a pattern completes, data is stored in a\r
+ * javajs.util.SB -- which can be accessed through the length() and charAt()\r
+ * methods of this class.\r
+ * <p>\r
+ * Note a subtlety here -- while a Transformer normally matches at higher\r
+ * priority against the pattern added to it first, this will not necessarily be\r
+ * true when a multi-line match is in progress because one of the complete\r
+ * multi-line patterns may not be completely loaded in RegexWriter's buffer. For\r
+ * this reason, the Transformer class is equipped with a way to add a pattern\r
+ * and replacement rule in three pieces -- a beginning (once this matches,\r
+ * nothing else in the Transformer can match until the whole pattern matches),\r
+ * an ending (the whole pattern is a String formed by adding the beginning and\r
+ * ending), and a ReplaceRule.\r
+ * <p>\r
+ * An illustration of this is given in the this <a\r
+ * href="../test/trans.java">example.</a>\r
+ */\r
+public class RegexWriter extends Writer\r
+{\r
+  Replacer repr;\r
+\r
+  Writer w;\r
+\r
+  WriterWrap ww;\r
+\r
+  javajs.util.SB sb = new javajs.util.SB();\r
+\r
+  PartialBuffer wrap = new PartialBuffer(sb);\r
+\r
+  int pos, epos;\r
+\r
+  int interval = 128;\r
+\r
+  int bufferSize = 2 * 1024;\r
+\r
+  public RegexWriter(Transformer t, Writer w)\r
+  {\r
+    this.w = w;\r
+    ww = new WriterWrap(w);\r
+    repr = t.getReplacer();\r
+    repr.setBuffer(new StringBufferLike(ww));\r
+    repr.setSource(wrap);\r
+  }\r
+\r
+  public RegexWriter(Regex r, Writer w)\r
+  {\r
+    this.w = w;\r
+    ww = new WriterWrap(w);\r
+    repr = r.getReplacer();\r
+    repr.setBuffer(new StringBufferLike(ww));\r
+    repr.setSource(wrap);\r
+  }\r
+\r
+  char EOLchar = '\n';\r
+\r
+  /**\r
+   * This method no longer serves any purpose.\r
+   * \r
+   * @deprecated\r
+   */\r
+  @Deprecated\r
+  public char getEOLchar()\r
+  {\r
+    return EOLchar;\r
+  }\r
+\r
+  /**\r
+   * This method no longer serves any purpose.\r
+   * \r
+   * @deprecated\r
+   */\r
+  @Deprecated\r
+  public void setEOLchar(char c)\r
+  {\r
+    EOLchar = c;\r
+  }\r
+\r
+  int max_lines = 2;\r
+\r
+  /**\r
+   * This method no longer serves any purpose.\r
+   * \r
+   * @deprecated\r
+   */\r
+  @Deprecated\r
+  public int getMaxLines()\r
+  {\r
+    return max_lines;\r
+  }\r
+\r
+  /**\r
+   * This method no longer serves any purpose.\r
+   * \r
+   * @deprecated\r
+   */\r
+  @Deprecated\r
+  public void setMaxLines(int ml)\r
+  {\r
+    max_lines = ml;\r
+  }\r
+\r
+  void write() throws IOException\r
+  {\r
+    Regex rex = repr.getRegex();\r
+    int eposOld = epos;\r
+    if (rex.matchAt(wrap, epos) && !wrap.overRun)\r
+    {\r
+      while (pos < epos)\r
+      {\r
+        w.write(sb.charAt(pos++));\r
+      }\r
+      int to = rex.matchedTo();\r
+      repr.setPos(to);\r
+      repr.apply(rex, rex.getReplaceRule());\r
+      epos = pos = to;\r
+      if (epos == eposOld && epos < sb.length())\r
+      {\r
+        epos++;\r
+      }\r
+    }\r
+    else if (!wrap.overRun && epos < sb.length())\r
+    {\r
+      epos++;\r
+    }\r
+    while (pos < epos)\r
+    {\r
+      w.write(sb.charAt(pos++));\r
+    }\r
+    if (epos == sb.length())\r
+    {\r
+      sb.setLength(1);\r
+      pos = epos = 1;\r
+    }\r
+    else if (pos > bufferSize)\r
+    {\r
+       \r
+       String s = sb.substring(bufferSize);\r
+       sb.setLength(0);\r
+       sb.append(s);\r
+//      for (int i = bufferSize; i < sb.length(); i++)\r
+//      {\r
+//        sb.setCharAt(i - bufferSize, sb.charAt(i));\r
+//      }\r
+      pos -= bufferSize;\r
+      epos -= bufferSize;\r
+      sb.setLength(sb.length() - bufferSize);\r
+    }\r
+  }\r
+\r
+  public void write(char[] ca, int b, int n) throws IOException\r
+  {\r
+    int m = b + n;\r
+    for (int i = b; i < m; i++)\r
+    {\r
+      sb.appendC(ca[i]);\r
+      if (sb.length() % interval == interval - 1)\r
+      {\r
+        wrap.overRun = false;\r
+        while (epos + interval < sb.length() && !wrap.overRun)\r
+        {\r
+          write();\r
+        }\r
+      }\r
+    }\r
+  }\r
+\r
+  public void flush() throws IOException\r
+  {\r
+  }\r
+\r
+  public void close() throws IOException\r
+  {\r
+    wrap.allowOverRun = false;\r
+    wrap.overRun = false;\r
+    while (epos < sb.length())\r
+    {\r
+      write();\r
+    }\r
+    write();\r
+    w.close();\r
+  }\r
+\r
+  /** The current size of the javajs.util.SB in use by RegexWriter. */\r
+  public int length()\r
+  {\r
+    return sb.length();\r
+  }\r
+\r
+  /** The character at location i in the StringBuffer. */\r
+  public char charAt(int i)\r
+  {\r
+    return sb.charAt(i);\r
+  }\r
+\r
+  /** Set the interval at which regex patterns are checked. */\r
+  public void setInterval(int i)\r
+  {\r
+    interval = i;\r
+  }\r
+\r
+  /** Get the interval at which regex matches are checked. */\r
+  public int getInterval()\r
+  {\r
+    return interval;\r
+  }\r
+\r
+  /** Get the buffer size. */\r
+  public int getBufferSize()\r
+  {\r
+    return bufferSize;\r
+  }\r
+\r
+  /** Set the buffer size. */\r
+  public void setBufferSize(int i)\r
+  {\r
+    bufferSize = i;\r
+  }\r
+}\r