* Contributors:
* Igor Malinin - initial contribution
*
- * $Id: MultiViewPartitioner.java,v 1.3 2004-10-21 16:21:11 jsurfer Exp $
+ * $Id: MultiViewPartitioner.java,v 1.7 2004-11-13 12:36:32 axelcl Exp $
*/
package net.sourceforge.phpeclipse.ui.text.rules;
if (DEBUG) {
Assert.isTrue(position.offset >= 0, Integer.toString(position.offset));
}
- DocumentEvent event = new DocumentEvent(outerDocument, outerDocument.getLocalOffset(position.offset), position.length, null);
-
- outerDocument.fireDocumentAboutToBeChanged(event);
+ int outerOffset = outerDocument.getLocalOffset(position.offset);
+ // axelcl start
+ DocumentEvent event = null;
+ if (outerOffset>=0) {
+ // axelcl end
+ event = new DocumentEvent(outerDocument, outerOffset, position.length, null);
+
+ outerDocument.fireDocumentAboutToBeChanged(event);
+ }
super.addInnerRegion(position);
- outerDocument.fireDocumentChanged(event);
+// axelcl start
+ if (event != null) {
+ // axelcl end
+ outerDocument.fireDocumentChanged(event);
+ }
} else {
super.addInnerRegion(position);
}
if (position.offset >= 0 && position.length >= 0) {
int outerOffset = outerDocument.getLocalOffset(position.offset);
if (outerOffset > 0) {
- event = new DocumentEvent(outerDocument, outerOffset, 0, document.get(
- position.offset, position.length));
+ event = new DocumentEvent(outerDocument, outerOffset, 0, document.get(position.offset, position.length));
outerDocument.fireDocumentAboutToBeChanged(event);
}
}
super.removeInnerRegion(position);
if (position.offset >= 0) {
- outerDocument.fireDocumentChanged(event);
+ if (event != null) {
+ outerDocument.fireDocumentChanged(event);
+ }
}
} else {
super.removeInnerRegion(position);
*/
public ITypedRegion[] computePartitioning(int offset, int length) {
List list = new ArrayList();
-
+// if (DEBUG) {
+// System.out.print("MultiViewPartitioner::computePartitioning - Offset: ");
+// System.out.print(offset);
+// System.out.print(", Length: ");
+// System.out.print(length);
+// System.out.println("");
+// }
int end = offset + length;
int index = computeFlatNodeIndex(offset);
++index;
}
-
+// if (DEBUG) {
+// showList(list);
+// }
+
return (TypedRegion[]) list.toArray(new TypedRegion[list.size()]);
}
+ private void showList(List list) {
+ try {
+ throw new NullPointerException();
+ } catch (Exception e){
+ e.printStackTrace();
+ }
+ System.out.println(">>>>>List start");
+ TypedRegion temp;
+ for (int i = 0; i < list.size(); i++) {
+ temp = (TypedRegion)list.get(i);
+ System.out.print("Offset: ");
+ System.out.print(temp.getOffset());
+ System.out.print(", Length: ");
+ System.out.print(temp.getLength());
+ System.out.print(", Type: ");
+ System.out.print(temp.getType());
+ System.out.println("");
+ }
+ System.out.println("<<<<<List end");
+ }
private void addOuterPartitions(List list, int offset, int length, FlatNode prev, FlatNode next) {
// limit region
int start = offset;
}
if (outerDocument == null) {
+// if (DEBUG) {
+// if (end - start<0) {
+// throw new IndexOutOfBoundsException();
+// }
+// }
list.add(new TypedRegion(start, end - start, getContentType(null, IDocument.DEFAULT_CONTENT_TYPE)));
return;
}
end = offset;
}
}
-
+// if (DEBUG) {
+// if (end - start<0) {
+// showList(list);
+// System.out.print("MultiViewPartitioner::addOuterPartitions - Offset: ");
+// System.out.print(offset);
+// System.out.print(", Start: ");
+// System.out.print(start);
+// System.out.print(", End: ");
+// System.out.print(end);
+// System.out.print(", Type: ");
+// System.out.print(region.getType());
+// System.out.println("");
+// throw new IndexOutOfBoundsException();
+// }
+// }
list.add(new TypedRegion(start, end - start, getContentType(null, region.getType())));
}
}
private void addInnerPartitions(List list, int offset, int length, FlatNode position) {
InnerDocumentView innerDocument = null;
if (position instanceof ViewNode) {
- // TODO: revisit condition
+ // TODO: revisit condition
innerDocument = ((ViewNode) position).view;
}
if (innerDocument == null) {
// simple partition
+// if (DEBUG) {
+// if (position.length<0) {
+// throw new IndexOutOfBoundsException();
+// }
+// }
list.add(new TypedRegion(position.offset, position.length, getContentType(position.type, null)));
return;
}
// convert back to parent offsets
offset = innerDocument.getParentOffset(region.getOffset());
length = region.getLength();
-
+// if (DEBUG) {
+// if (length<0) {
+// throw new IndexOutOfBoundsException();
+// }
+// }
list.add(new TypedRegion(offset, length, getContentType(position.type, region.getType())));
}
} catch (BadLocationException x) {
end = document.getLength();
type = getContentType(null, IDocument.DEFAULT_CONTENT_TYPE);
} else {
- ITypedRegion region = outerDocument.getPartition(outerDocument.getLocalOffset(offset));
+ int outerOffset = outerDocument.getLocalOffset(offset);
+ //axelcl start
+ if (outerOffset < 0) {
+ start = 0;
+ end = document.getLength();
+ type = getContentType(null, IDocument.DEFAULT_CONTENT_TYPE);
+ } else {
+// axelcl end
+ ITypedRegion region = outerDocument.getPartition(outerOffset);
- start = region.getOffset();
- end = start + region.getLength();
+ start = region.getOffset();
+ end = start + region.getLength();
- // convert to parent offset
- start = outerDocument.getParentOffset(start);
- end = outerDocument.getParentOffset(end);
+ // convert to parent offset
+ start = outerDocument.getParentOffset(start);
+ end = outerDocument.getParentOffset(end);
- type = getContentType(null, region.getType());
+ type = getContentType(null, region.getType());
+ }
}
if (prev != null) {
return new TypedRegion(start, end - start, type);
} catch (BadLocationException x) {
+ x.printStackTrace();
throw new IllegalArgumentException();
}
}