3m9 compatible;
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / compiler / ast / PHPDocument.java
1 package net.sourceforge.phpdt.internal.compiler.ast;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import net.sourceforge.phpdt.internal.compiler.parser.Outlineable;
7 import net.sourceforge.phpdt.internal.compiler.parser.OutlineableWithChildren;
8 import net.sourceforge.phpdt.internal.ui.PHPUiImages;
9
10 import org.eclipse.jface.resource.ImageDescriptor;
11 import org.eclipse.jface.text.Position;
12
13 /**
14  * It's a php document.
15  * This class is an outlineable object
16  * It will contains html and php
17  * @author Matthieu Casanova
18  */
19 public final class PHPDocument implements OutlineableWithChildren {
20
21   /**
22    * The nodes.
23    * It will include html nodes or php nodes
24    */
25   public AstNode[] nodes;
26
27   private final char[] name;
28
29   /** The parent of the object. */
30   private final Object parent;
31
32   /** The outlineable children (those will be in the node array too. */
33   private final ArrayList children = new ArrayList();
34
35   private final Position position;
36   /**
37    * Create the PHPDocument.
38    * @param parent the parent object (it should be null isn't it ?)
39    */
40   public PHPDocument(final Object parent,
41                      final char[] name) {
42     this.parent = parent;
43     this.name = name;
44     position = new Position(1,name.length);
45   }
46
47   /**
48    * Return the php document as String.
49    * @return  a string representation of the object.
50    */
51   public String toString() {
52     final StringBuffer buff = new StringBuffer();
53     AstNode node;
54     if (nodes != null) {
55       int i;
56       for (i = 0; i < nodes.length; i++) {
57         node = nodes[i];
58         if (node == null) {
59           break;
60         }
61         buff.append(node.toString(0));
62         if (node instanceof HTMLCode) {
63           buff.append("\n");//$NON-NLS-1$
64         } else {
65           buff.append(";\n");//$NON-NLS-1$
66         }
67       }
68     }
69     return buff.toString();
70   }
71
72   /**
73    * Add an outlineable object.
74    * @param o the new outlineable
75    * @return does the addition worked ?
76    */
77   public boolean add(final Outlineable o) {
78     return children.add(o);
79   }
80
81   /**
82    * Return the outlineable at the index.
83    * @param index the index
84    * @return an outlineable object
85    */
86   public Outlineable get(final int index) {
87     return (Outlineable) children.get(index);
88   }
89
90   /**
91    * The number of outlineable children.
92    * @return the number of children that are outlineable
93    */
94   public int size() {
95     return children.size();
96   }
97
98   /**
99    * This will return the image for the outline of the object.
100    * @return an image
101    */
102   public ImageDescriptor getImage() {
103     return PHPUiImages.DESC_CLASS;
104   }
105
106   /**
107    * Get the parent of the object.
108    * @return the parent of the object
109    */
110   public Object getParent() {
111     return parent;
112   }
113
114   public Position getPosition() {
115     return position;
116   }
117
118   public List getList() {
119     return children;
120   }
121 }