home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 2000 March / pcp161a.iso / handson / files / copyjava.exe / com / sun / java / swing / text / DefaultStyledDocument.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-02-26  |  9.4 KB  |  291 lines

  1. package com.sun.java.swing.text;
  2.  
  3. import com.sun.java.swing.event.UndoableEditEvent;
  4. import com.sun.java.swing.event.DocumentEvent.EventType;
  5. import com.sun.java.swing.undo.CompoundEdit;
  6. import java.awt.Color;
  7. import java.awt.Font;
  8. import java.util.Vector;
  9.  
  10. public class DefaultStyledDocument extends AbstractDocument implements StyledDocument {
  11.    public static final int BUFFER_SIZE_DEFAULT = 4096;
  12.    private ElementBuffer buffer;
  13.  
  14.    public DefaultStyledDocument(AbstractDocument.Content var1, StyleContext var2) {
  15.       super(var1, var2);
  16.       this.buffer = new ElementBuffer(this, this.createDefaultRoot());
  17.       Style var3 = var2.getStyle("default");
  18.       this.setLogicalStyle(0, var3);
  19.    }
  20.  
  21.    public DefaultStyledDocument(StyleContext var1) {
  22.       this(new StringContent(4096), var1);
  23.    }
  24.  
  25.    public DefaultStyledDocument() {
  26.       this(new StringContent(4096), new StyleContext());
  27.    }
  28.  
  29.    public Element getDefaultRootElement() {
  30.       return this.buffer.getRootElement();
  31.    }
  32.  
  33.    protected void insert(int var1, ElementSpec[] var2) throws BadLocationException {
  34.       try {
  35.          ((AbstractDocument)this).writeLock();
  36.          AbstractDocument.Content var5 = ((AbstractDocument)this).getContent();
  37.          int var6 = var2.length;
  38.          int var7 = var1;
  39.  
  40.          for(int var8 = 0; var8 < var6; ++var8) {
  41.             ElementSpec var9 = var2[var8];
  42.             if (var9.getLength() > 0) {
  43.                var5.insertString(var7, new String(var9.getArray(), var9.getOffset(), var9.getLength()));
  44.                var7 += var9.getLength();
  45.             }
  46.          }
  47.  
  48.          int var13 = var7 - var1;
  49.          this.getClass();
  50.          AbstractDocument.DefaultDocumentEvent var10 = new AbstractDocument.DefaultDocumentEvent(this, var1, var13, EventType.CHANGE);
  51.          this.buffer.insert(var1, var13, var2, var10);
  52.          ((CompoundEdit)var10).end();
  53.          ((AbstractDocument)this).fireInsertUpdate(var10);
  54.          ((AbstractDocument)this).fireUndoableEditUpdate(new UndoableEditEvent(this, var10));
  55.       } finally {
  56.          ((AbstractDocument)this).writeUnlock();
  57.       }
  58.  
  59.    }
  60.  
  61.    public Style addStyle(String var1, Style var2) {
  62.       StyleContext var3 = (StyleContext)((AbstractDocument)this).getAttributeContext();
  63.       return var3.addStyle(var1, var2);
  64.    }
  65.  
  66.    public void removeStyle(String var1) {
  67.       StyleContext var2 = (StyleContext)((AbstractDocument)this).getAttributeContext();
  68.       var2.removeStyle(var1);
  69.    }
  70.  
  71.    public Style getStyle(String var1) {
  72.       StyleContext var2 = (StyleContext)((AbstractDocument)this).getAttributeContext();
  73.       return var2.getStyle(var1);
  74.    }
  75.  
  76.    public void setLogicalStyle(int var1, Style var2) {
  77.       Element var3 = this.getParagraphElement(var1);
  78.       if (var3 != null && var3 instanceof AbstractDocument.AbstractElement) {
  79.          try {
  80.             ((AbstractDocument)this).writeLock();
  81.             StyleChangeUndoableEdit var6 = new StyleChangeUndoableEdit((AbstractDocument.AbstractElement)var3, var2);
  82.             ((AbstractDocument.AbstractElement)var3).setResolveParent(var2);
  83.             int var7 = var3.getStartOffset();
  84.             int var8 = var3.getEndOffset();
  85.             this.getClass();
  86.             AbstractDocument.DefaultDocumentEvent var9 = new AbstractDocument.DefaultDocumentEvent(this, var7, var8 - var7, EventType.CHANGE);
  87.             var9.addEdit(var6);
  88.             ((CompoundEdit)var9).end();
  89.             ((AbstractDocument)this).fireChangedUpdate(var9);
  90.             ((AbstractDocument)this).fireUndoableEditUpdate(new UndoableEditEvent(this, var9));
  91.          } finally {
  92.             ((AbstractDocument)this).writeUnlock();
  93.          }
  94.  
  95.       }
  96.    }
  97.  
  98.    public Style getLogicalStyle(int var1) {
  99.       Style var2 = null;
  100.       Element var3 = this.getParagraphElement(var1);
  101.       if (var3 != null) {
  102.          AttributeSet var4 = var3.getAttributes();
  103.          var2 = (Style)var4.getResolveParent();
  104.       }
  105.  
  106.       return var2;
  107.    }
  108.  
  109.    public void setCharacterAttributes(int var1, int var2, AttributeSet var3, boolean var4) {
  110.       try {
  111.          ((AbstractDocument)this).writeLock();
  112.          this.getClass();
  113.          AbstractDocument.DefaultDocumentEvent var7 = new AbstractDocument.DefaultDocumentEvent(this, var1, var2, EventType.CHANGE);
  114.          this.buffer.change(var1, var2, var7);
  115.          AttributeSet var8 = var3.copyAttributes();
  116.          int var9 = Integer.MAX_VALUE;
  117.  
  118.          for(int var10 = var1; var10 < var1 + var2; var10 = var9) {
  119.             Element var11 = this.getCharacterElement(var10);
  120.             var9 = var11.getEndOffset();
  121.             MutableAttributeSet var12 = (MutableAttributeSet)var11.getAttributes();
  122.             var7.addEdit(new AttributeUndoableEdit(var11, var8, var4));
  123.             if (var4) {
  124.                var12.removeAttributes(var12);
  125.             }
  126.  
  127.             var12.addAttributes(var3);
  128.          }
  129.  
  130.          ((CompoundEdit)var7).end();
  131.          ((AbstractDocument)this).fireChangedUpdate(var7);
  132.          ((AbstractDocument)this).fireUndoableEditUpdate(new UndoableEditEvent(this, var7));
  133.       } finally {
  134.          ((AbstractDocument)this).writeUnlock();
  135.       }
  136.  
  137.    }
  138.  
  139.    public void setParagraphAttributes(int var1, int var2, AttributeSet var3, boolean var4) {
  140.       try {
  141.          ((AbstractDocument)this).writeLock();
  142.          this.getClass();
  143.          AbstractDocument.DefaultDocumentEvent var7 = new AbstractDocument.DefaultDocumentEvent(this, var1, var2, EventType.CHANGE);
  144.          AttributeSet var8 = var3.copyAttributes();
  145.          Element var9 = this.getDefaultRootElement();
  146.          int var10 = var9.getElementIndex(var1);
  147.          int var11 = var9.getElementIndex(var1 + (var2 > 0 ? var2 - 1 : 0));
  148.  
  149.          for(int var12 = var10; var12 <= var11; ++var12) {
  150.             Element var13 = var9.getElement(var12);
  151.             MutableAttributeSet var14 = (MutableAttributeSet)var13.getAttributes();
  152.             var7.addEdit(new AttributeUndoableEdit(var13, var8, var4));
  153.             if (var4) {
  154.                var14.removeAttributes(var14);
  155.             }
  156.  
  157.             var14.addAttributes(var3);
  158.          }
  159.  
  160.          ((CompoundEdit)var7).end();
  161.          ((AbstractDocument)this).fireChangedUpdate(var7);
  162.          ((AbstractDocument)this).fireUndoableEditUpdate(new UndoableEditEvent(this, var7));
  163.       } finally {
  164.          ((AbstractDocument)this).writeUnlock();
  165.       }
  166.  
  167.    }
  168.  
  169.    public Element getParagraphElement(int var1) {
  170.       Element var2 = this.getDefaultRootElement();
  171.       int var3 = var2.getElementIndex(var1);
  172.       Element var4 = var2.getElement(var3);
  173.       return var4;
  174.    }
  175.  
  176.    public Element getCharacterElement(int var1) {
  177.       Object var2 = null;
  178.  
  179.       int var3;
  180.       for(var4 = this.getDefaultRootElement(); !var4.isLeaf(); var4 = var4.getElement(var3)) {
  181.          var3 = var4.getElementIndex(var1);
  182.       }
  183.  
  184.       return var4;
  185.    }
  186.  
  187.    protected void insertUpdate(AbstractDocument.DefaultDocumentEvent var1, AttributeSet var2) {
  188.       int var3 = var1.getOffset();
  189.       int var4 = var1.getLength();
  190.       if (var2 == null) {
  191.          var2 = SimpleAttributeSet.EMPTY;
  192.       }
  193.  
  194.       Element var5 = this.getParagraphElement(var3);
  195.       Element var6 = var5.getElement(var5.getElementIndex(var3));
  196.       AttributeSet var7 = var5.getAttributes();
  197.       AttributeSet var8 = var6.getAttributes();
  198.  
  199.       try {
  200.          boolean var9 = false;
  201.          boolean var10 = false;
  202.          Segment var11 = new Segment();
  203.          Vector var12 = new Vector();
  204.          ((AbstractDocument)this).getText(var3, var4, var11);
  205.          char[] var13 = var11.array;
  206.          int var14 = var11.offset + var11.count;
  207.          int var15 = var11.offset;
  208.  
  209.          for(int var16 = var11.offset; var16 < var14; ++var16) {
  210.             if (var13[var16] == '\n') {
  211.                int var17 = var16 + 1;
  212.                var12.addElement(new ElementSpec(var2, (short)3, var17 - var15));
  213.                var12.addElement(new ElementSpec((AttributeSet)null, (short)2));
  214.                var12.addElement(new ElementSpec(var7, (short)1));
  215.                var15 = var17;
  216.             }
  217.          }
  218.  
  219.          if (var15 < var14) {
  220.             var12.addElement(new ElementSpec(var2, (short)3, var14 - var15));
  221.          } else {
  222.             var10 = true;
  223.          }
  224.  
  225.          if (var3 > 0) {
  226.             ((AbstractDocument)this).getText(var3 - 1, 1, var11);
  227.             if (var11.array[var11.offset] == '\n') {
  228.                var9 = true;
  229.                ElementSpec var20 = new ElementSpec(var7, (short)1);
  230.                var12.insertElementAt(var20, 0);
  231.                var20 = new ElementSpec(var7, (short)2);
  232.                var12.insertElementAt(var20, 0);
  233.             }
  234.          }
  235.  
  236.          ElementSpec var22 = (ElementSpec)var12.firstElement();
  237.          if (!var9 && var8.isEqual(var2) && var3 > 0) {
  238.             var22.setDirection((short)4);
  239.          }
  240.  
  241.          if ((var12.size() > 1 || var22.getDirection() != 4) && !var10) {
  242.             ElementSpec var18 = (ElementSpec)var12.lastElement();
  243.             if (var6.getEndOffset() <= var3 + var4) {
  244.                var8 = this.getCharacterElement(var3 + var4).getAttributes();
  245.             }
  246.  
  247.             if (var8.isEqual(var2)) {
  248.                var18.setDirection((short)5);
  249.             }
  250.          }
  251.  
  252.          ElementSpec[] var23 = new ElementSpec[var12.size()];
  253.          var12.copyInto(var23);
  254.          this.buffer.insert(var3, var4, var23, var1);
  255.       } catch (BadLocationException var19) {
  256.       }
  257.    }
  258.  
  259.    protected void removeUpdate(AbstractDocument.DefaultDocumentEvent var1) {
  260.       this.buffer.remove(var1.getOffset(), var1.getLength(), var1);
  261.    }
  262.  
  263.    protected AbstractDocument.AbstractElement createDefaultRoot() {
  264.       ((AbstractDocument)this).writeLock();
  265.       SectionElement var1 = new SectionElement(this);
  266.       this.getClass();
  267.       AbstractDocument.BranchElement var2 = new AbstractDocument.BranchElement(this, var1, (AttributeSet)null);
  268.       this.getClass();
  269.       AbstractDocument.LeafElement var3 = new AbstractDocument.LeafElement(this, var2, (AttributeSet)null, 0, 1);
  270.       Element[] var4 = new Element[]{var3};
  271.       var2.replace(0, 0, var4);
  272.       var4[0] = var2;
  273.       ((AbstractDocument.BranchElement)var1).replace(0, 0, var4);
  274.       ((AbstractDocument)this).writeUnlock();
  275.       return var1;
  276.    }
  277.  
  278.    public Color getForeground(AttributeSet var1) {
  279.       return StyleConstants.getForeground(var1);
  280.    }
  281.  
  282.    public Color getBackground(AttributeSet var1) {
  283.       throw new Error("not implemented");
  284.    }
  285.  
  286.    public Font getFont(AttributeSet var1) {
  287.       StyleContext var2 = (StyleContext)((AbstractDocument)this).getAttributeContext();
  288.       return var2.getFont(var1);
  289.    }
  290. }
  291.