home *** CD-ROM | disk | FTP | other *** search
/ Computer Shopper 144 / DPCS0200.iso / Internet / Supanet / system / swing.jar / javax / swing / text / html / HTMLDocument.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-11-05  |  13.6 KB  |  514 lines

  1. package javax.swing.text.html;
  2.  
  3. import java.net.URL;
  4. import java.net.URLEncoder;
  5. import java.util.BitSet;
  6. import java.util.Enumeration;
  7. import javax.swing.ButtonGroup;
  8. import javax.swing.ButtonModel;
  9. import javax.swing.ComboBoxModel;
  10. import javax.swing.DefaultComboBoxModel;
  11. import javax.swing.DefaultListModel;
  12. import javax.swing.JToggleButton;
  13. import javax.swing.event.HyperlinkEvent;
  14. import javax.swing.event.UndoableEditEvent;
  15. import javax.swing.event.DocumentEvent.EventType;
  16. import javax.swing.text.AbstractDocument;
  17. import javax.swing.text.AttributeSet;
  18. import javax.swing.text.BadLocationException;
  19. import javax.swing.text.DefaultStyledDocument;
  20. import javax.swing.text.Document;
  21. import javax.swing.text.Element;
  22. import javax.swing.text.ElementIterator;
  23. import javax.swing.text.GapContent;
  24. import javax.swing.text.MutableAttributeSet;
  25. import javax.swing.text.PlainDocument;
  26. import javax.swing.text.SimpleAttributeSet;
  27. import javax.swing.text.StyleConstants;
  28. import javax.swing.text.html.HTML.Attribute;
  29. import javax.swing.text.html.HTML.Tag;
  30. import javax.swing.undo.CompoundEdit;
  31.  
  32. public class HTMLDocument extends DefaultStyledDocument {
  33.    private boolean frameDocument;
  34.    private boolean preservesUnknownTags;
  35.    private ButtonGroup radioButtonGroup;
  36.    static final String TokenThreshold = "token threshold";
  37.    public static final String AdditionalComments = "AdditionalComments";
  38.    URL base;
  39.    private static AttributeSet contentAttributeSet = new SimpleAttributeSet();
  40.    private static char[] NEWLINE;
  41.  
  42.    static {
  43.       ((MutableAttributeSet)contentAttributeSet).addAttribute(StyleConstants.NameAttribute, Tag.CONTENT);
  44.       NEWLINE = new char[1];
  45.       NEWLINE[0] = '\n';
  46.    }
  47.  
  48.    public HTMLDocument() {
  49.       this(new GapContent(4096), new StyleSheet());
  50.    }
  51.  
  52.    public HTMLDocument(AbstractDocument.Content var1, StyleSheet var2) {
  53.       super(var1, var2);
  54.       this.frameDocument = false;
  55.       this.preservesUnknownTags = true;
  56.    }
  57.  
  58.    public HTMLDocument(StyleSheet var1) {
  59.       this(new GapContent(4096), var1);
  60.    }
  61.  
  62.    // $FF: synthetic method
  63.    static char[] access$0() {
  64.       return NEWLINE;
  65.    }
  66.  
  67.    // $FF: synthetic method
  68.    static ButtonGroup access$1(HTMLDocument var0) {
  69.       return var0.radioButtonGroup;
  70.    }
  71.  
  72.    // $FF: synthetic method
  73.    static void access$2(HTMLDocument var0, ButtonGroup var1) {
  74.       var0.radioButtonGroup = var1;
  75.    }
  76.  
  77.    private void ampersand(StringBuffer var1) {
  78.       if (var1.length() > 0) {
  79.          var1.append('&');
  80.       }
  81.  
  82.    }
  83.  
  84.    private void appendBuffer(StringBuffer var1, String var2, String var3) {
  85.       this.ampersand(var1);
  86.       String var4 = URLEncoder.encode(var2);
  87.       var1.append(var4);
  88.       var1.append('=');
  89.       String var5 = URLEncoder.encode(var3);
  90.       var1.append(var5);
  91.    }
  92.  
  93.    protected void create(DefaultStyledDocument.ElementSpec[] var1) {
  94.       super.create(var1);
  95.    }
  96.  
  97.    protected Element createBranchElement(Element var1, AttributeSet var2) {
  98.       return new BlockElement(this, var1, var2);
  99.    }
  100.  
  101.    protected AbstractDocument.AbstractElement createDefaultRoot() {
  102.       ((AbstractDocument)this).writeLock();
  103.       SimpleAttributeSet var1 = new SimpleAttributeSet();
  104.       var1.addAttribute(StyleConstants.NameAttribute, Tag.HTML);
  105.       BlockElement var2 = new BlockElement(this, (Element)null, var1.copyAttributes());
  106.       var1.removeAttributes(var1);
  107.       var1.addAttribute(StyleConstants.NameAttribute, Tag.BODY);
  108.       BlockElement var3 = new BlockElement(this, var2, var1.copyAttributes());
  109.       var1.removeAttributes(var1);
  110.       var1.addAttribute(StyleConstants.NameAttribute, Tag.P);
  111.       BlockElement var4 = new BlockElement(this, var3, var1.copyAttributes());
  112.       var1.removeAttributes(var1);
  113.       var1.addAttribute(StyleConstants.NameAttribute, Tag.CONTENT);
  114.       RunElement var5 = new RunElement(this, var4, var1, 0, 1);
  115.       Element[] var6 = new Element[]{var5};
  116.       ((AbstractDocument.BranchElement)var4).replace(0, 0, var6);
  117.       var6[0] = var4;
  118.       ((AbstractDocument.BranchElement)var3).replace(0, 0, var6);
  119.       var6[0] = var3;
  120.       ((AbstractDocument.BranchElement)var2).replace(0, 0, var6);
  121.       ((AbstractDocument)this).writeUnlock();
  122.       return var2;
  123.    }
  124.  
  125.    protected Element createLeafElement(Element var1, AttributeSet var2, int var3, int var4) {
  126.       return new RunElement(this, var1, var2, var3, var4);
  127.    }
  128.  
  129.    private Element findFrame(String var1) {
  130.       ElementIterator var2 = new ElementIterator(this);
  131.       Object var3 = null;
  132.  
  133.       while((var6 = var2.next()) != null) {
  134.          AttributeSet var4 = var6.getAttributes();
  135.          if (this.matchNameAttribute(var4, Tag.FRAME)) {
  136.             String var5 = (String)var4.getAttribute(Attribute.NAME);
  137.             if (var5.equals(var1)) {
  138.                break;
  139.             }
  140.          }
  141.       }
  142.  
  143.       return var6;
  144.    }
  145.  
  146.    private boolean formMatchesSubmissionRequest(AttributeSet var1, AttributeSet var2) {
  147.       AttributeSet var3 = this.getFormAttributes(var1);
  148.       return var3 != null ? var2.isEqual(var3) : false;
  149.    }
  150.  
  151.    public URL getBase() {
  152.       return this.base;
  153.    }
  154.  
  155.    AttributeSet getFormAttributes(AttributeSet var1) {
  156.       Enumeration var2 = var1.getAttributeNames();
  157.  
  158.       while(var2.hasMoreElements()) {
  159.          Object var3 = var2.nextElement();
  160.          if (var3 instanceof HTML.Tag) {
  161.             HTML.Tag var4 = (HTML.Tag)var3;
  162.             if (var4 == Tag.FORM) {
  163.                Object var5 = var1.getAttribute(var4);
  164.                if (var5 != null && var5 instanceof AttributeSet) {
  165.                   return (AttributeSet)var5;
  166.                }
  167.             }
  168.          }
  169.       }
  170.  
  171.       return null;
  172.    }
  173.  
  174.    void getFormData(StringBuffer var1, Element var2) {
  175.       AttributeSet var3 = var2.getAttributes();
  176.       AttributeSet var4 = this.getFormAttributes(var3);
  177.       ElementIterator var5 = new ElementIterator(((DefaultStyledDocument)this).getDefaultRootElement());
  178.       if (var4 != null) {
  179.          boolean var7 = false;
  180.  
  181.          Element var6;
  182.          while((var6 = var5.next()) != null) {
  183.             AttributeSet var8 = var6.getAttributes();
  184.             if (this.formMatchesSubmissionRequest(var8, var4)) {
  185.                var7 = true;
  186.                String var9 = (String)var8.getAttribute(Attribute.TYPE);
  187.                if ((var9 == null || !var9.equals("submit") || var6 == var2) && (var9 == null || !var9.equals("image"))) {
  188.                   this.loadElementDataIntoBuffer(var6, var1);
  189.                }
  190.             } else if (var7 && var6.isLeaf()) {
  191.                break;
  192.             }
  193.          }
  194.  
  195.       }
  196.    }
  197.  
  198.    private String getInputElementData(AttributeSet var1) {
  199.       Object var2 = var1.getAttribute(StyleConstants.ModelAttribute);
  200.       String var3 = (String)var1.getAttribute(Attribute.TYPE);
  201.       String var4 = null;
  202.       if (!var3.equals("text") && !var3.equals("password")) {
  203.          if (!var3.equals("submit") && !var3.equals("hidden")) {
  204.             if (var3.equals("radio") || var3.equals("checkbox")) {
  205.                ButtonModel var7 = (ButtonModel)var2;
  206.                if (var7.isSelected()) {
  207.                   var4 = (String)var1.getAttribute(Attribute.VALUE);
  208.                   if (var4 == null) {
  209.                      var4 = "on";
  210.                   }
  211.                }
  212.             }
  213.          } else {
  214.             var4 = (String)var1.getAttribute(Attribute.VALUE);
  215.             if (var4 == null) {
  216.                var4 = "";
  217.             }
  218.          }
  219.       } else {
  220.          Document var5 = (Document)var2;
  221.  
  222.          try {
  223.             var4 = var5.getText(0, var5.getLength());
  224.          } catch (BadLocationException var6) {
  225.             var4 = null;
  226.          }
  227.       }
  228.  
  229.       return var4;
  230.    }
  231.  
  232.    public Iterator getIterator(HTML.Tag var1) {
  233.       return var1.isBlock() ? null : new LeafIterator(var1, this);
  234.    }
  235.  
  236.    public boolean getPreservesUnknownTags() {
  237.       return this.preservesUnknownTags;
  238.    }
  239.  
  240.    public HTMLEditorKit.ParserCallback getReader(int var1) {
  241.       Object var2 = ((AbstractDocument)this).getProperty("stream");
  242.       if (var2 instanceof URL) {
  243.          this.base = (URL)var2;
  244.       }
  245.  
  246.       HTMLReader var3 = new HTMLReader(this, var1);
  247.       return var3;
  248.    }
  249.  
  250.    public HTMLEditorKit.ParserCallback getReader(int var1, int var2, int var3, HTML.Tag var4) {
  251.       Object var5 = ((AbstractDocument)this).getProperty("stream");
  252.       if (var5 instanceof URL) {
  253.          this.base = (URL)var5;
  254.       }
  255.  
  256.       HTMLReader var6 = new HTMLReader(this, var1, var2, var3, var4);
  257.       return var6;
  258.    }
  259.  
  260.    public StyleSheet getStyleSheet() {
  261.       return (StyleSheet)((AbstractDocument)this).getAttributeContext();
  262.    }
  263.  
  264.    private String getTextAreaData(AttributeSet var1) {
  265.       Document var2 = (Document)var1.getAttribute(StyleConstants.ModelAttribute);
  266.  
  267.       try {
  268.          return var2.getText(0, var2.getLength());
  269.       } catch (BadLocationException var3) {
  270.          return null;
  271.       }
  272.    }
  273.  
  274.    public int getTokenThreshold() {
  275.       Integer var1 = (Integer)((AbstractDocument)this).getProperty("token threshold");
  276.       return var1 != null ? var1 : Integer.MAX_VALUE;
  277.    }
  278.  
  279.    protected void insert(int var1, DefaultStyledDocument.ElementSpec[] var2) throws BadLocationException {
  280.       super.insert(var1, var2);
  281.    }
  282.  
  283.    protected void insertUpdate(AbstractDocument.DefaultDocumentEvent var1, AttributeSet var2) {
  284.       if (var2 == null) {
  285.          var2 = contentAttributeSet;
  286.       } else if (var2.isDefined(StyleConstants.ComposedTextAttribute)) {
  287.          ((MutableAttributeSet)var2).addAttributes(contentAttributeSet);
  288.       }
  289.  
  290.       super.insertUpdate(var1, var2);
  291.    }
  292.  
  293.    boolean isFrameDocument() {
  294.       return this.frameDocument;
  295.    }
  296.  
  297.    boolean isLastTextOrPasswordField(Element var1) {
  298.       ElementIterator var2 = new ElementIterator(((DefaultStyledDocument)this).getDefaultRootElement());
  299.       boolean var4 = false;
  300.       AttributeSet var5 = this.getFormAttributes(var1.getAttributes());
  301.  
  302.       while(true) {
  303.          Element var3;
  304.          if ((var3 = var2.next()) != null) {
  305.             AttributeSet var6 = var3.getAttributes();
  306.             if (this.formMatchesSubmissionRequest(var6, var5)) {
  307.                if (var4 && this.matchNameAttribute(var6, Tag.INPUT)) {
  308.                   String var7 = (String)var6.getAttribute(Attribute.TYPE);
  309.                   if (var7.equals("text") || var7.equals("password")) {
  310.                      return false;
  311.                   }
  312.                }
  313.  
  314.                if (var3 == var1) {
  315.                   var4 = true;
  316.                }
  317.                continue;
  318.             }
  319.  
  320.             if (!var4 || !var3.isLeaf()) {
  321.                continue;
  322.             }
  323.          }
  324.  
  325.          return true;
  326.       }
  327.    }
  328.  
  329.    private void loadElementDataIntoBuffer(Element var1, StringBuffer var2) {
  330.       AttributeSet var3 = var1.getAttributes();
  331.       String var4 = (String)var3.getAttribute(Attribute.NAME);
  332.       if (var4 != null) {
  333.          String var5 = null;
  334.          HTML.Tag var6 = (HTML.Tag)var1.getAttributes().getAttribute(StyleConstants.NameAttribute);
  335.          if (var6 == Tag.INPUT) {
  336.             var5 = this.getInputElementData(var3);
  337.          } else if (var6 == Tag.TEXTAREA) {
  338.             var5 = this.getTextAreaData(var3);
  339.          } else if (var6 == Tag.SELECT) {
  340.             this.loadSelectData(var3, var2);
  341.          }
  342.  
  343.          if (var4 != null && var5 != null) {
  344.             this.appendBuffer(var2, var4, var5);
  345.          }
  346.  
  347.       }
  348.    }
  349.  
  350.    private void loadSelectData(AttributeSet var1, StringBuffer var2) {
  351.       String var3 = (String)var1.getAttribute(Attribute.NAME);
  352.       if (var3 != null) {
  353.          Object var4 = var1.getAttribute(StyleConstants.ModelAttribute);
  354.          if (var4 instanceof OptionListModel) {
  355.             OptionListModel var5 = (OptionListModel)var4;
  356.  
  357.             for(int var6 = 0; var6 < ((DefaultListModel)var5).getSize(); ++var6) {
  358.                if (var5.isSelectedIndex(var6)) {
  359.                   Option var7 = (Option)((DefaultListModel)var5).getElementAt(var6);
  360.                   this.appendBuffer(var2, var3, var7.getValue());
  361.                }
  362.             }
  363.          } else if (var4 instanceof ComboBoxModel) {
  364.             ComboBoxModel var8 = (ComboBoxModel)var4;
  365.             Option var9 = (Option)var8.getSelectedItem();
  366.             if (var9 != null) {
  367.                this.appendBuffer(var2, var3, var9.getValue());
  368.             }
  369.          }
  370.  
  371.       }
  372.    }
  373.  
  374.    boolean matchNameAttribute(AttributeSet var1, HTML.Tag var2) {
  375.       Object var3 = var1.getAttribute(StyleConstants.NameAttribute);
  376.       if (var3 instanceof HTML.Tag) {
  377.          HTML.Tag var4 = (HTML.Tag)var3;
  378.          if (var4 == var2) {
  379.             return true;
  380.          }
  381.       }
  382.  
  383.       return false;
  384.    }
  385.  
  386.    public void processHTMLFrameHyperlinkEvent(HTMLFrameHyperlinkEvent var1) {
  387.       String var2 = var1.getTarget();
  388.       Element var3 = var1.getSourceElement();
  389.       String var4 = ((HyperlinkEvent)var1).getURL().toString();
  390.       if (var2.equals("_self")) {
  391.          this.updateFrame(var3, var4);
  392.       } else if (var2.equals("_parent")) {
  393.          this.updateFrameSet(var3.getParentElement(), var4);
  394.       } else {
  395.          Element var5 = this.findFrame(var2);
  396.          if (var5 != null) {
  397.             this.updateFrame(var5, var4);
  398.          }
  399.       }
  400.  
  401.    }
  402.  
  403.    void resetForm(Element var1) {
  404.       ElementIterator var2 = new ElementIterator(((DefaultStyledDocument)this).getDefaultRootElement());
  405.       boolean var4 = false;
  406.       AttributeSet var5 = this.getFormAttributes(var1.getAttributes());
  407.  
  408.       Element var3;
  409.       while((var3 = var2.next()) != null) {
  410.          AttributeSet var6 = var3.getAttributes();
  411.          if (!this.formMatchesSubmissionRequest(var6, var5)) {
  412.             if (var4 && var3.isLeaf()) {
  413.                break;
  414.             }
  415.          } else {
  416.             Object var7 = var6.getAttribute(StyleConstants.ModelAttribute);
  417.             if (var7 instanceof TextAreaDocument) {
  418.                TextAreaDocument var8 = (TextAreaDocument)var7;
  419.                var8.reset();
  420.             } else if (var7 instanceof PlainDocument) {
  421.                try {
  422.                   PlainDocument var14 = (PlainDocument)var7;
  423.                   ((AbstractDocument)var14).remove(0, ((AbstractDocument)var14).getLength());
  424.                   if (this.matchNameAttribute(var6, Tag.INPUT)) {
  425.                      String var9 = (String)var6.getAttribute(Attribute.VALUE);
  426.                      if (var9 != null) {
  427.                         ((AbstractDocument)var14).insertString(0, var9, (AttributeSet)null);
  428.                      }
  429.                   }
  430.                } catch (BadLocationException var13) {
  431.                }
  432.             } else if (var7 instanceof OptionListModel) {
  433.                OptionListModel var15 = (OptionListModel)var7;
  434.                int var18 = ((DefaultListModel)var15).getSize();
  435.  
  436.                for(int var10 = 0; var10 < var18; ++var10) {
  437.                   var15.removeIndexInterval(var10, var10);
  438.                }
  439.  
  440.                BitSet var11 = var15.getInitialSelection();
  441.  
  442.                for(int var12 = 0; var12 < var11.size(); ++var12) {
  443.                   if (var11.get(var12)) {
  444.                      var15.addSelectionInterval(var12, var12);
  445.                   }
  446.                }
  447.             } else if (var7 instanceof OptionComboBoxModel) {
  448.                OptionComboBoxModel var16 = (OptionComboBoxModel)var7;
  449.                Option var19 = var16.getInitialSelection();
  450.                if (var19 != null) {
  451.                   ((DefaultComboBoxModel)var16).setSelectedItem(var19);
  452.                }
  453.             } else if (var7 instanceof JToggleButton.ToggleButtonModel) {
  454.                boolean var17 = (String)var6.getAttribute(Attribute.CHECKED) != null;
  455.                JToggleButton.ToggleButtonModel var20 = (JToggleButton.ToggleButtonModel)var7;
  456.                var20.setSelected(var17);
  457.             }
  458.  
  459.             var4 = true;
  460.          }
  461.       }
  462.  
  463.    }
  464.  
  465.    public void setBase(URL var1) {
  466.       this.base = var1;
  467.    }
  468.  
  469.    void setFrameDocumentState(boolean var1) {
  470.       this.frameDocument = var1;
  471.    }
  472.  
  473.    public void setPreservesUnknownTags(boolean var1) {
  474.       this.preservesUnknownTags = var1;
  475.    }
  476.  
  477.    public void setTokenThreshold(int var1) {
  478.       ((AbstractDocument)this).putProperty("token threshold", new Integer(var1));
  479.    }
  480.  
  481.    private void updateFrame(Element var1, String var2) {
  482.       try {
  483.          ((AbstractDocument)this).writeLock();
  484.          this.getClass();
  485.          AbstractDocument.DefaultDocumentEvent var5 = new AbstractDocument.DefaultDocumentEvent(this, var1.getStartOffset(), 1, EventType.CHANGE);
  486.          AttributeSet var6 = var1.getAttributes().copyAttributes();
  487.          MutableAttributeSet var7 = (MutableAttributeSet)var1.getAttributes();
  488.          var5.addEdit(new DefaultStyledDocument.AttributeUndoableEdit(var1, var6, false));
  489.          var7.removeAttribute(Attribute.SRC);
  490.          var7.addAttribute(Attribute.SRC, var2);
  491.          ((CompoundEdit)var5).end();
  492.          ((AbstractDocument)this).fireChangedUpdate(var5);
  493.          ((AbstractDocument)this).fireUndoableEditUpdate(new UndoableEditEvent(this, var5));
  494.       } finally {
  495.          ((AbstractDocument)this).writeUnlock();
  496.       }
  497.  
  498.    }
  499.  
  500.    private void updateFrameSet(Element var1, String var2) {
  501.       try {
  502.          int var3 = var1.getStartOffset();
  503.          int var4 = var1.getEndOffset();
  504.          ((AbstractDocument)this).remove(var3, var4 - var3);
  505.          SimpleAttributeSet var5 = new SimpleAttributeSet();
  506.          var5.addAttribute(Attribute.SRC, var2);
  507.          var5.addAttribute(StyleConstants.NameAttribute, Tag.FRAME);
  508.          ((AbstractDocument)this).insertString(var3, " ", var5);
  509.       } catch (BadLocationException var6) {
  510.       }
  511.  
  512.    }
  513. }
  514.