001: /*
002: * Sun Public License Notice
003: *
004: * The contents of this file are subject to the Sun Public License
005: * Version 1.0 (the "License"). You may not use this file except in
006: * compliance with the License. A copy of the License is available at
007: * http://www.sun.com/
008: *
009: * The Original Code is NetBeans. The Initial Developer of the Original
010: * Code is Sun Microsystems, Inc. Portions Copyright 1997-2000 Sun
011: * Microsystems, Inc. All Rights Reserved.
012: */
013:
014: package org.netbeans.editor;
015:
016: import javax.swing.text.AttributeSet;
017: import javax.swing.text.BadLocationException;
018: import javax.swing.text.Element;
019:
020: /**
021: * Leaf element is used on the leaf level of element tree.
022: *
023: * @author Miloslav Metelka
024: * @version 0.10
025: */
026:
027: public class LeafElement extends BaseElement {
028:
029: /** Mark giving start offset of this element */
030: protected Mark startMark;
031:
032: /** Mark giving end offset of this element */
033: protected Mark endMark;
034:
035: /** Does this view begin at line begining */
036: protected boolean bol;
037:
038: /** Does this view end at line end */
039: protected boolean eol;
040:
041: /** Create new document instance */
042: public LeafElement(BaseDocument doc, BaseElement parent,
043: AttributeSet attrs, int startOffset, int endOffset,
044: boolean bol, boolean eol) {
045: super (doc, parent, attrs);
046: this .bol = bol;
047: this .eol = eol;
048: // create marks for element start and end
049: try {
050: startMark = doc.op.insertMark(startOffset, true);
051: endMark = doc.op.insertMark(endOffset, false);
052: } catch (BadLocationException e) {
053: if (Boolean.getBoolean("netbeans.debug.exceptions")) { // NOI18N
054: e.printStackTrace();
055: }
056: }
057: }
058:
059: protected void finalize() throws Throwable {
060: try {
061: startMark.remove();
062: endMark.remove();
063: } catch (InvalidMarkException e) {
064: }
065: super .finalize();
066: }
067:
068: /** Get start mark of this element */
069: public final Mark getStartMark() {
070: return startMark;
071: }
072:
073: /** Get start offset of this element */
074: public final int getStartOffset() {
075: try {
076: return startMark.getOffset();
077: } catch (InvalidMarkException e) {
078: return 0;
079: }
080: }
081:
082: /** Get end mark of this element */
083: public final Mark getEndMark() {
084: return endMark;
085: }
086:
087: /** Get end offset of this element */
088: public final int getEndOffset() {
089: try {
090: return endMark.getOffset();
091: } catch (InvalidMarkException e) {
092: return 0;
093: }
094: }
095:
096: /** Is this view begining at begin of line */
097: public final boolean isBOL() {
098: return bol;
099: }
100:
101: /** Is this view ending at end of line ? */
102: public final boolean isEOL() {
103: return eol;
104: }
105:
106: /**
107: * Gets the child element index closest to the given offset. For leaf
108: * element this returns -1.
109: */
110: public int getElementIndex(int offset) {
111: return -1;
112: }
113:
114: /** Get number of children of this element */
115: public int getElementCount() {
116: return 0;
117: }
118:
119: /**
120: * Get child of this element at specified index or itself if the index is
121: * too big
122: */
123: public Element getElement(int index) {
124: return null;
125: }
126:
127: /** Does this element have any children? */
128: public boolean isLeaf() {
129: return true;
130: }
131:
132: public String toString() {
133: return "startOffset=" + getStartOffset() // NOI18N
134: + ", endOffset=" + getEndMark(); // NOI18N
135: }
136:
137: }
|