--- /dev/null
+/*
+ * Copyright (c) 2003-2004 Christopher Lenz and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors:
+ * Christopher Lenz - initial API and implementation
+ *
+ * $Id: MutableRegion.java,v 1.1 2004-09-02 18:07:13 jsurfer Exp $
+ */
+
+package net.sourceforge.phpeclipse.css.core.internal.parser;
+
+import org.eclipse.jface.text.IRegion;
+
+/**
+ *
+ */
+public class MutableRegion implements IRegion {
+
+ // Instance Variables ------------------------------------------------------
+
+ /**
+ * The offset of the region.
+ */
+ private int offset = 0;
+
+ /**
+ * The length of the region.
+ */
+ private int length = 0;
+
+ // Constructors ------------------------------------------------------------
+
+ /**
+ * Default constructor.
+ */
+ public MutableRegion() {
+ this(0);
+ }
+
+ /**
+ * Constructor with partial initialization.
+ *
+ * @param offset the offset of the region
+ */
+ public MutableRegion(int offset) {
+ this.offset = offset;
+ }
+
+ /**
+ * Constructor with initialization.
+ *
+ * @param offset the offset of the region
+ * @param length the length of the region
+ */
+ public MutableRegion(int offset, int length) {
+ this.offset = offset;
+ this.length = length;
+ }
+
+ /**
+ * Constructor with initialization.
+ *
+ * @param region another region to initialize this region with
+ */
+ public MutableRegion(IRegion region) {
+ this.offset = region.getOffset();
+ this.length = region.getLength();
+ }
+
+ // IRegion Implementation --------------------------------------------------
+
+ /*
+ * @see org.eclipse.jface.text.IRegion#getLength()
+ */
+ public int getLength() {
+ return length;
+ }
+
+ /*
+ * @see org.eclipse.jface.text.IRegion#getOffset()
+ */
+ public int getOffset() {
+ return offset;
+ }
+
+ // Public Methods ----------------------------------------------------------
+
+ /**
+ * Adds another region to this region, which will be enlarged so that the
+ * added region completely fits into this region.
+ *
+ * @param region the region to add
+ */
+ public void add(IRegion region) {
+ int start1 = offset;
+ int end1 = offset + length;
+ int start2 = region.getOffset();
+ int end2 = start2 + region.getLength();
+ offset = (start1 < start2) ? start1 : start2;
+ length = (end1 > end2) ? (end1 - offset) : (end2 - offset);
+ }
+
+ /**
+ * Sets the length of the region.
+ *
+ * @param length the length to set
+ */
+ public void setLength(int length) {
+ this.length = length;
+ }
+
+ /**
+ * Sets the offset of the region.
+ *
+ * @param offset the offset to set
+ */
+ public void setOffset(int offset) {
+ this.offset = offset;
+ }
+
+}