home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &n…he Search for Life DVD 2 / DVD-ROM.iso / install / jre1_3 / lib / rt.jar / javax / swing / text / StringContent.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  3.5 KB  |  181 lines

  1. package javax.swing.text;
  2.  
  3. import java.io.Serializable;
  4. import java.util.Vector;
  5. import javax.swing.undo.UndoableEdit;
  6.  
  7. public final class StringContent implements AbstractDocument.Content, Serializable {
  8.    private static final char[] empty = new char[0];
  9.    private char[] data;
  10.    private int count;
  11.    transient Vector marks;
  12.  
  13.    public StringContent() {
  14.       this(10);
  15.    }
  16.  
  17.    public StringContent(int var1) {
  18.       if (var1 < 1) {
  19.          var1 = 1;
  20.       }
  21.  
  22.       this.data = new char[var1];
  23.       this.data[0] = '\n';
  24.       this.count = 1;
  25.    }
  26.  
  27.    public int length() {
  28.       return this.count;
  29.    }
  30.  
  31.    public UndoableEdit insertString(int var1, String var2) throws BadLocationException {
  32.       if (var1 >= this.count) {
  33.          throw new BadLocationException("Invalid location", this.count);
  34.       } else {
  35.          char[] var3 = var2.toCharArray();
  36.          this.replace(var1, 0, var3, 0, var3.length);
  37.          if (this.marks != null) {
  38.             this.updateMarksForInsert(var1, var2.length());
  39.          }
  40.  
  41.          return new InsertUndo(this, var1, var2.length());
  42.       }
  43.    }
  44.  
  45.    public UndoableEdit remove(int var1, int var2) throws BadLocationException {
  46.       if (var1 + var2 >= this.count) {
  47.          throw new BadLocationException("Invalid range", this.count);
  48.       } else {
  49.          String var3 = this.getString(var1, var2);
  50.          RemoveUndo var4 = new RemoveUndo(this, var1, var3);
  51.          this.replace(var1, var2, empty, 0, 0);
  52.          if (this.marks != null) {
  53.             this.updateMarksForRemove(var1, var2);
  54.          }
  55.  
  56.          return var4;
  57.       }
  58.    }
  59.  
  60.    public String getString(int var1, int var2) throws BadLocationException {
  61.       if (var1 + var2 > this.count) {
  62.          throw new BadLocationException("Invalid range", this.count);
  63.       } else {
  64.          return new String(this.data, var1, var2);
  65.       }
  66.    }
  67.  
  68.    public void getChars(int var1, int var2, Segment var3) throws BadLocationException {
  69.       if (var1 + var2 > this.count) {
  70.          throw new BadLocationException("Invalid location", this.count);
  71.       } else {
  72.          var3.array = this.data;
  73.          var3.offset = var1;
  74.          var3.count = var2;
  75.       }
  76.    }
  77.  
  78.    public Position createPosition(int var1) throws BadLocationException {
  79.       if (this.marks == null) {
  80.          this.marks = new Vector();
  81.       }
  82.  
  83.       return new StickyPosition(this, var1);
  84.    }
  85.  
  86.    void replace(int var1, int var2, char[] var3, int var4, int var5) {
  87.       int var6 = var5 - var2;
  88.       int var7 = var1 + var2;
  89.       int var8 = this.count - var7;
  90.       int var9 = var7 + var6;
  91.       if (this.count + var6 >= this.data.length) {
  92.          int var10 = Math.max(2 * this.data.length, this.count + var6);
  93.          char[] var11 = new char[var10];
  94.          System.arraycopy(this.data, 0, var11, 0, var1);
  95.          System.arraycopy(var3, var4, var11, var1, var5);
  96.          System.arraycopy(this.data, var7, var11, var9, var8);
  97.          this.data = var11;
  98.       } else {
  99.          System.arraycopy(this.data, var7, this.data, var9, var8);
  100.          System.arraycopy(var3, var4, this.data, var1, var5);
  101.       }
  102.  
  103.       this.count += var6;
  104.    }
  105.  
  106.    void resize(int var1) {
  107.       char[] var2 = new char[var1];
  108.       System.arraycopy(this.data, 0, var2, 0, Math.min(var1, this.count));
  109.       this.data = var2;
  110.    }
  111.  
  112.    synchronized void updateMarksForInsert(int var1, int var2) {
  113.       if (var1 == 0) {
  114.          var1 = 1;
  115.       }
  116.  
  117.       int var3 = this.marks.size();
  118.  
  119.       for(int var4 = 0; var4 < var3; ++var4) {
  120.          PosRec var5 = (PosRec)this.marks.elementAt(var4);
  121.          if (var5.unused) {
  122.             this.marks.removeElementAt(var4);
  123.             --var4;
  124.             --var3;
  125.          } else if (var5.offset >= var1) {
  126.             var5.offset += var2;
  127.          }
  128.       }
  129.  
  130.    }
  131.  
  132.    synchronized void updateMarksForRemove(int var1, int var2) {
  133.       int var3 = this.marks.size();
  134.  
  135.       for(int var4 = 0; var4 < var3; ++var4) {
  136.          PosRec var5 = (PosRec)this.marks.elementAt(var4);
  137.          if (var5.unused) {
  138.             this.marks.removeElementAt(var4);
  139.             --var4;
  140.             --var3;
  141.          } else if (var5.offset >= var1 + var2) {
  142.             var5.offset -= var2;
  143.          } else if (var5.offset >= var1) {
  144.             var5.offset = var1;
  145.          }
  146.       }
  147.  
  148.    }
  149.  
  150.    protected Vector getPositionsInRange(Vector var1, int var2, int var3) {
  151.       int var4 = this.marks.size();
  152.       int var5 = var2 + var3;
  153.       Vector var6 = var1 == null ? new Vector() : var1;
  154.  
  155.       for(int var7 = 0; var7 < var4; ++var7) {
  156.          PosRec var8 = (PosRec)this.marks.elementAt(var7);
  157.          if (var8.unused) {
  158.             this.marks.removeElementAt(var7);
  159.             --var7;
  160.             --var4;
  161.          } else if (var8.offset >= var2 && var8.offset <= var5) {
  162.             var6.addElement(new UndoPosRef(this, var8));
  163.          }
  164.       }
  165.  
  166.       return var6;
  167.    }
  168.  
  169.    protected void updateUndoPositions(Vector var1) {
  170.       for(int var2 = var1.size() - 1; var2 >= 0; --var2) {
  171.          UndoPosRef var3 = (UndoPosRef)var1.elementAt(var2);
  172.          if (var3.rec.unused) {
  173.             var1.removeElementAt(var2);
  174.          } else {
  175.             var3.resetLocation();
  176.          }
  177.       }
  178.  
  179.    }
  180. }
  181.