X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse.ui/src/net/sourceforge/phpeclipse/ui/text/rules/MultiViewPartitioner.java b/net.sourceforge.phpeclipse.ui/src/net/sourceforge/phpeclipse/ui/text/rules/MultiViewPartitioner.java index cc10e0d..ea7cdda 100644 --- a/net.sourceforge.phpeclipse.ui/src/net/sourceforge/phpeclipse/ui/text/rules/MultiViewPartitioner.java +++ b/net.sourceforge.phpeclipse.ui/src/net/sourceforge/phpeclipse/ui/text/rules/MultiViewPartitioner.java @@ -8,7 +8,7 @@ * Contributors: * Igor Malinin - initial contribution * - * $Id: MultiViewPartitioner.java,v 1.2 2004-09-22 18:51:51 jsurfer Exp $ + * $Id: MultiViewPartitioner.java,v 1.6 2004-11-12 20:15:58 axelcl Exp $ */ package net.sourceforge.phpeclipse.ui.text.rules; @@ -116,11 +116,21 @@ public abstract class MultiViewPartitioner extends AbstractPartitioner { 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); } @@ -144,15 +154,19 @@ public abstract class MultiViewPartitioner extends AbstractPartitioner { try { if (outerDocument != null) { DocumentEvent event = null; - if (position.offset >= 0) { - event = new DocumentEvent(outerDocument, outerDocument.getLocalOffset(position.offset), 0, document.get(position.offset, - position.length)); + 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)); - outerDocument.fireDocumentAboutToBeChanged(event); + outerDocument.fireDocumentAboutToBeChanged(event); + } } super.removeInnerRegion(position); if (position.offset >= 0) { - outerDocument.fireDocumentChanged(event); + if (event != null) { + outerDocument.fireDocumentChanged(event); + } } } else { super.removeInnerRegion(position); @@ -320,7 +334,7 @@ public abstract class MultiViewPartitioner extends AbstractPartitioner { if (p instanceof ViewNode) { // TODO: revisit condition InnerDocumentView innerDocument = ((ViewNode) p).view; - if (innerDocument != null) { + if (innerDocument != null) { int start = innerDocument.getLocalOffset(offset); innerDocument.fireDocumentChanged(new DocumentEvent(innerDocument, start, length, text)); } @@ -598,16 +612,25 @@ public abstract class MultiViewPartitioner extends AbstractPartitioner { 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) { @@ -626,6 +649,7 @@ public abstract class MultiViewPartitioner extends AbstractPartitioner { return new TypedRegion(start, end - start, type); } catch (BadLocationException x) { + x.printStackTrace(); throw new IllegalArgumentException(); } }