diff --git a/jcommons/org.eclipse.statet.jcommons.text.core-tests/src/org/eclipse/statet/jcommons/text/core/input/HtmlStripParserInputTest.java b/jcommons/org.eclipse.statet.jcommons.text.core-tests/src/org/eclipse/statet/jcommons/text/core/input/HtmlStripParserInputTest.java
index 955ad84..56080e8 100644
--- a/jcommons/org.eclipse.statet.jcommons.text.core-tests/src/org/eclipse/statet/jcommons/text/core/input/HtmlStripParserInputTest.java
+++ b/jcommons/org.eclipse.statet.jcommons.text.core-tests/src/org/eclipse/statet/jcommons/text/core/input/HtmlStripParserInputTest.java
@@ -22,6 +22,7 @@
 import org.junit.jupiter.api.Test;
 
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.text.core.BasicTextRegion;
 import org.eclipse.statet.jcommons.text.core.util.HtmlStripParserInput;
 import org.eclipse.statet.jcommons.text.core.util.HtmlUtils;
 import org.eclipse.statet.jcommons.text.core.util.HtmlUtils.Entity;
@@ -52,6 +53,8 @@
 		assertEquals(106, this.input.getIndex());
 		assertChars(s, 100, s.length());
 		assertEquals(sb.length() - 106, this.input.getLengthInSource(s.length() - 100));
+		assertEquals(new BasicTextRegion(106 + 50, 106 + 150 + 7),
+				this.input.getRegionInSource(50, 150) );
 		this.input.consume(s.length() - 100);
 		
 		assertEquals(TextParserInput.EOF, this.input.get(0));
@@ -69,6 +72,8 @@
 		
 		assertEquals(13, this.input.getIndex());
 		assertChars(s);
+		assertEquals(new BasicTextRegion(50 + 13, 150 + 13),
+				this.input.getRegionInSource(50, 150) );
 		
 		assertEquals(TextParserInput.EOF, this.input.get(s.length()));
 	}
@@ -77,13 +82,16 @@
 	public void skipTagWithAttr() {
 		final String s= Utils.COUNTER_STRING;
 		final StringBuilder sb= new StringBuilder(s);
-		sb.insert(100, "<html attr=\"abc\">");
+		final String tag1;
+		sb.insert(100, tag1= "<html attr=\"abc\">");
 		sb.insert(200, "<html attr=\'abc\'>");
 		
 		this.input= new HtmlStripParserInput(sb.toString());
 		this.input.init();
 		
 		assertChars(s);
+		assertEquals(new BasicTextRegion(50, 150 + tag1.length()),
+				this.input.getRegionInSource(50, 150) );
 		
 		assertEquals(TextParserInput.EOF, this.input.get(s.length()));
 	}
@@ -92,14 +100,19 @@
 	public void skipTagWithAttrSpecial() {
 		final String s= Utils.COUNTER_STRING;
 		final StringBuilder sb= new StringBuilder(s);
-		sb.insert(100, "<html attr=\"ab'c\">");
-		sb.insert(200, "<html attr=\'ab\"c\'>");
-		sb.insert(300, "<html attr=\"<ignore\">");
+		final String tag1, tag2, tag3;
+		sb.insert(100, tag1= "<html attr=\"ab'c\">");
+		sb.insert(200, tag2= "<html attr=\'ab\"c\'>");
+		sb.insert(300, tag3= "<html attr=\"<ignore\">");
 		
 		this.input= new HtmlStripParserInput(sb.toString());
 		this.input.init();
 		
 		assertChars(s);
+		assertEquals(new BasicTextRegion(50, 150 + tag1.length()),
+				this.input.getRegionInSource(50, 150) );
+		assertEquals(new BasicTextRegion(150 + tag1.length(), 500 + tag1.length() + tag2.length() + tag3.length()),
+				this.input.getRegionInSource(150, 500) );
 		
 		assertEquals(TextParserInput.EOF, this.input.get(s.length()));
 	}
diff --git a/jcommons/org.eclipse.statet.jcommons.text.core-tests/src/org/eclipse/statet/jcommons/text/core/input/TextParserInputMatchTest.java b/jcommons/org.eclipse.statet.jcommons.text.core-tests/src/org/eclipse/statet/jcommons/text/core/input/TextParserInputMatchTest.java
index 26a2194..eb72720 100644
--- a/jcommons/org.eclipse.statet.jcommons.text.core-tests/src/org/eclipse/statet/jcommons/text/core/input/TextParserInputMatchTest.java
+++ b/jcommons/org.eclipse.statet.jcommons.text.core-tests/src/org/eclipse/statet/jcommons/text/core/input/TextParserInputMatchTest.java
@@ -14,7 +14,8 @@
 
 package org.eclipse.statet.jcommons.text.core.input;
 
-import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.junit.jupiter.api.Test;
 
@@ -28,6 +29,7 @@
 	private StringParserInput input;
 	
 	
+	@SuppressWarnings("null")
 	public TextParserInputMatchTest() {
 	}
 	
@@ -39,7 +41,7 @@
 		this.input.init();
 		
 		this.input.consume('a');
-		assertEquals(true, this.input.get(0) == 'a');
+		assertTrue(this.input.get(0) == 'a');
 	}
 	
 	@Test
@@ -49,11 +51,11 @@
 		this.input.init();
 		
 		this.input.consume('a');
-		assertEquals(true, this.input.matches(0, 'a'));
-		assertEquals(true, this.input.matches(1, 'b'));
-		assertEquals(true, this.input.matches(2, 'c'));
-		assertEquals(false, this.input.matches(0, 'x'));
-		assertEquals(false, this.input.matches(3, 'c'));
+		assertTrue(this.input.matches(0, 'a'));
+		assertTrue(this.input.matches(1, 'b'));
+		assertTrue(this.input.matches(2, 'c'));
+		assertFalse(this.input.matches(0, 'x'));
+		assertFalse(this.input.matches(3, 'c'));
 	}
 	
 	@Test
@@ -63,12 +65,12 @@
 		this.input.init();
 		
 		this.input.consume('a');
-		assertEquals(true, this.input.matches(0, 'a', 'b'));
-		assertEquals(true, this.input.matches(1, 'b', 'c'));
-		assertEquals(true, this.input.matches(2, 'c', 'd'));
-		assertEquals(false, this.input.matches(0, 'x', 'b'));
-		assertEquals(false, this.input.matches(3, 'c', 'e'));
-		assertEquals(false, this.input.matches(3, 'd', 'd'));
+		assertTrue(this.input.matches(0, 'a', 'b'));
+		assertTrue(this.input.matches(1, 'b', 'c'));
+		assertTrue(this.input.matches(2, 'c', 'd'));
+		assertFalse(this.input.matches(0, 'x', 'b'));
+		assertFalse(this.input.matches(3, 'c', 'e'));
+		assertFalse(this.input.matches(3, 'd', 'd'));
 	}
 	
 	@Test
@@ -78,12 +80,12 @@
 		this.input.init();
 		
 		this.input.consume('a');
-		assertEquals(true, this.input.matches(0, 'a', 'b', 'c'));
-		assertEquals(true, this.input.matches(1, 'b', 'c', 'd'));
-		assertEquals(true, this.input.matches(2, 'c', 'd', 'e'));
-		assertEquals(false, this.input.matches(0, 'x', 'b', 'c'));
-		assertEquals(false, this.input.matches(3, 'c', 'e', 'f'));
-		assertEquals(false, this.input.matches(3, 'd', 'e', 'e'));
+		assertTrue(this.input.matches(0, 'a', 'b', 'c'));
+		assertTrue(this.input.matches(1, 'b', 'c', 'd'));
+		assertTrue(this.input.matches(2, 'c', 'd', 'e'));
+		assertFalse(this.input.matches(0, 'x', 'b', 'c'));
+		assertFalse(this.input.matches(3, 'c', 'e', 'f'));
+		assertFalse(this.input.matches(3, 'd', 'e', 'e'));
 	}
 	
 	@Test
@@ -93,15 +95,15 @@
 		this.input.init();
 		
 		this.input.consume('a');
-		assertEquals(true, this.input.matches(0, new char[] { }));
-		assertEquals(true, this.input.matches(0, new char[] { 'a' }));
-		assertEquals(true, this.input.matches(0, new char[] { 'a', 'b', 'c', 'd' }));
-		assertEquals(true, this.input.matches(1, new char[] { 'b' }));
-		assertEquals(true, this.input.matches(1, new char[] { 'b', 'c', 'd', 'e' }));
-		assertEquals(true, this.input.matches(2, new char[] { 'c', 'd', 'e', 'f' }));
-		assertEquals(false, this.input.matches(0, new char[] { 'x', 'b', 'c', 'd' }));
-		assertEquals(false, this.input.matches(3, new char[] { 'c', 'e', 'f', 'g' }));
-		assertEquals(false, this.input.matches(3, new char[] { 'd', 'e', 'f', 'f' }));
+		assertTrue(this.input.matches(0, new char[] { }));
+		assertTrue(this.input.matches(0, new char[] { 'a' }));
+		assertTrue(this.input.matches(0, new char[] { 'a', 'b', 'c', 'd' }));
+		assertTrue(this.input.matches(1, new char[] { 'b' }));
+		assertTrue(this.input.matches(1, new char[] { 'b', 'c', 'd', 'e' }));
+		assertTrue(this.input.matches(2, new char[] { 'c', 'd', 'e', 'f' }));
+		assertFalse(this.input.matches(0, new char[] { 'x', 'b', 'c', 'd' }));
+		assertFalse(this.input.matches(3, new char[] { 'c', 'e', 'f', 'g' }));
+		assertFalse(this.input.matches(3, new char[] { 'd', 'e', 'f', 'f' }));
 	}
 	
 	
diff --git a/jcommons/org.eclipse.statet.jcommons.text.core/src/org/eclipse/statet/jcommons/text/core/input/TextParserInput.java b/jcommons/org.eclipse.statet.jcommons.text.core/src/org/eclipse/statet/jcommons/text/core/input/TextParserInput.java
index 020e79e..ed72f00 100644
--- a/jcommons/org.eclipse.statet.jcommons.text.core/src/org/eclipse/statet/jcommons/text/core/input/TextParserInput.java
+++ b/jcommons/org.eclipse.statet.jcommons.text.core/src/org/eclipse/statet/jcommons/text/core/input/TextParserInput.java
@@ -18,6 +18,8 @@
 import org.eclipse.statet.jcommons.lang.Nullable;
 import org.eclipse.statet.jcommons.string.CharArrayString;
 import org.eclipse.statet.jcommons.string.StringFactory;
+import org.eclipse.statet.jcommons.text.core.BasicTextRegion;
+import org.eclipse.statet.jcommons.text.core.TextRegion;
 
 
 /**
@@ -194,6 +196,17 @@
 		return offset;
 	}
 	
+	/**
+	 * Returns the region in the source text of the context within the specified offsets.
+	 * @param startOffset the start offset in the content (inclusive)
+	 * @param endOffset the end offset in the content (exclusive)
+	 * @return the region
+	 */
+	public TextRegion getRegionInSource(final int startOffset, final int endOffset) {
+		final int startIndex= getIndex(startOffset);
+		return new BasicTextRegion(startIndex, getIndex() + getLengthInSource(endOffset));
+	}
+	
 	
 	/**
 	 * Returns the character at the specified offset in the content.
@@ -272,6 +285,24 @@
 		return true;
 	}
 	
+	public final boolean matchesN(int offset, final char c, final int n) {
+		int idx= this.currentIdx + offset;
+		if (idx + n > this.endIdx) {
+			if (updateBuffer(offset + n)) {
+				idx= this.currentIdx + offset;
+			}
+			else {
+				return false;
+			}
+		}
+		for (offset= 0; offset < n; offset++) {
+			if (this.buffer[idx++] != c) {
+				return false;
+			}
+		}
+		return true;
+	}
+	
 	
 	/**
 	 * Forwards the current index to the specified offset.
@@ -368,42 +399,73 @@
 	}
 	
 	
-	protected final CharArrayString getTmpString(final int offset, final int length) {
-		this.tmpCharString.set(this.buffer, this.currentIdx + offset, length);
+	protected final CharArrayString getTmpString(final int startOffset, final int endOffset) {
+		this.tmpCharString.set(this.buffer, this.currentIdx + startOffset, endOffset - startOffset);
 		return this.tmpCharString;
 	}
 	
-	public final String getString(final int offset, final int length) {
-		return new String(this.buffer, this.currentIdx + offset, length);
+	/**
+	 * Return the text as string.
+	 * 
+	 * @param startOffset the start offset in the content (inclusive)
+	 * @param endOffset the end offset in the content (exclusive)
+	 * @return the text
+	 */
+	public final String getString(final int startOffset, final int endOffset) {
+		return new String(this.buffer, this.currentIdx + startOffset, endOffset - startOffset);
 	}
 	
-	public final @Nullable String getString(final int offset, final int length, final StringFactory factory) {
-		this.tmpCharString.set(this.buffer, this.currentIdx + offset, length);
+	/**
+	 * Return the text as string created by using the specified factory.
+	 * 
+	 * @param startOffset the start offset in the content (inclusive)
+	 * @param endOffset the end offset in the content (exclusive)
+	 * @return the text
+	 */
+	public final @Nullable String getString(final int startOffset, final int endOffset,
+			final StringFactory factory) {
+		this.tmpCharString.set(this.buffer, this.currentIdx + startOffset, endOffset - startOffset);
 		return factory.get(this.tmpCharString);
 	}
 	
-	public final void appendTo(final int offset, final int length, final StringBuilder dst) {
+	/**
+	 * Appends the text to the specified StringBuilder.
+	 * 
+	 * @param startOffset the start offset in the content (inclusive)
+	 * @param endOffset the end offset in the content (exclusive)
+	 */
+	public final void appendTo(final int startOffset, final int endOffset,
+			final StringBuilder dst) {
+		final int length= endOffset - startOffset;
 		switch (length) {
 		case 0:
 			return;
 		case 1:
-			dst.append(this.buffer[this.currentIdx + offset]);
+			dst.append(this.buffer[this.currentIdx + startOffset]);
 			return;
 		default:
-			dst.append(this.buffer, this.currentIdx + offset, length);
+			dst.append(this.buffer, this.currentIdx + startOffset, length);
 			return;
 		}
 	}
 	
-	public final void insertInto(final int offset, final int length, final StringBuilder dst, final int dstOffset) {
-		switch (length) {
+	/**
+	 * Inserts the text in the specified StringBuilder.
+	 * 
+	 * @param startOffset the start offset in the content (inclusive)
+	 * @param endOffset the end offset in the content (exclusive)
+	 */
+	public final void insertInto(final int startOffset, final int endOffset,
+			final StringBuilder dst, final int dstOffset) {
+		final int length= endOffset - startOffset;
+		switch (endOffset - startOffset) {
 		case 0:
 			return;
 		case 1:
-			dst.insert(dstOffset, this.buffer[this.currentIdx + offset]);
+			dst.insert(dstOffset, this.buffer[this.currentIdx + startOffset]);
 			return;
 		default:
-			dst.insert(dstOffset, this.buffer, this.currentIdx + offset, length);
+			dst.insert(dstOffset, this.buffer, this.currentIdx + startOffset, length);
 			return;
 		}
 	}
diff --git a/jcommons/org.eclipse.statet.jcommons.text.core/src/org/eclipse/statet/jcommons/text/core/util/HtmlStripParserInput.java b/jcommons/org.eclipse.statet.jcommons.text.core/src/org/eclipse/statet/jcommons/text/core/util/HtmlStripParserInput.java
index 9f95794..6e1dd45 100644
--- a/jcommons/org.eclipse.statet.jcommons.text.core/src/org/eclipse/statet/jcommons/text/core/util/HtmlStripParserInput.java
+++ b/jcommons/org.eclipse.statet.jcommons.text.core/src/org/eclipse/statet/jcommons/text/core/util/HtmlStripParserInput.java
@@ -320,7 +320,7 @@
 					case '9':
 						continue ITER_CN;
 					case ';':
-						return resolveEntity(in, Integer.parseInt(in.getString(2, n - 3), 10), n);
+						return resolveEntity(in, Integer.parseInt(in.getString(2, n - 1), 10), n);
 					default:
 						break ITER_CN;
 					}
@@ -358,7 +358,7 @@
 						continue ITER_CN;
 					case ';':
 						if (n > 4) {
-							return resolveEntity(in, Integer.parseInt(in.getString(3, n - 4), 16), n);
+							return resolveEntity(in, Integer.parseInt(in.getString(3, n - 1), 16), n);
 						}
 						break ITER_CN;
 					default:
@@ -481,7 +481,7 @@
 				case 'z':
 					continue ITER_CN;
 				case ';':
-					return resolveEntity(in, in.getString(1, n - 2), n);
+					return resolveEntity(in, in.getString(1, n - 1), n);
 				default:
 					break ITER_CN;
 				}
