Index: tika-parsers/src/test/java/org/apache/tika/parser/html/HtmlParserTest.java
===================================================================
--- tika-parsers/src/test/java/org/apache/tika/parser/html/HtmlParserTest.java	(revision 1221134)
+++ tika-parsers/src/test/java/org/apache/tika/parser/html/HtmlParserTest.java	(working copy)
@@ -41,6 +41,7 @@
 import org.apache.tika.sax.TeeContentHandler;
 import org.xml.sax.Attributes;
 import org.xml.sax.ContentHandler;
+import org.xml.sax.Locator;
 import org.xml.sax.SAXException;
 import org.xml.sax.helpers.DefaultHandler;
 
@@ -721,4 +722,76 @@
         assertNotNull(content);
     }
 
+    /**
+     * Test locations.
+     * @throws SAXException 
+     * @throws TikaException 
+     * @throws IOException 
+     */
+    public void testLocator() throws SAXException, IOException, TikaException {
+	// Store the reported locations
+	final int line = 0;
+	final int col = 1;
+	final int[] textPosition = new int[2];
+	
+        new HtmlParser().parse(HtmlParserTest.class.getResourceAsStream("/test-documents/testHTML.html"),
+        	new ContentHandler(){
+            	    
+            	    Locator locator;
+            	    
+		    public void setDocumentLocator(Locator locator) {
+			this.locator = locator;
+		    }
+
+		    public void startDocument() throws SAXException {
+		    }
+
+		    public void endDocument() throws SAXException {
+		    }
+
+		    public void startPrefixMapping(String prefix, String uri)
+			    throws SAXException {
+		    }
+
+		    public void endPrefixMapping(String prefix)
+			    throws SAXException {
+		    }
+
+		    public void startElement(String uri, String localName,
+			    String qName, Attributes atts) throws SAXException {
+		    }
+
+		    public void endElement(String uri, String localName,
+			    String qName) throws SAXException {
+		    }
+
+		    public void characters(char[] ch, int start, int length)
+			    throws SAXException {
+			String text = new String(ch, start, length);
+			if (text.equals("Test Indexation Html") && locator != null) {
+			    textPosition[line] = locator.getLineNumber();
+			    textPosition[col] = locator.getColumnNumber();
+			}
+		    }
+
+		    public void ignorableWhitespace(char[] ch, int start,
+			    int length) throws SAXException {
+		    }
+
+		    public void processingInstruction(String target, String data)
+			    throws SAXException {
+		    }
+
+		    public void skippedEntity(String name) throws SAXException {
+		    }},
+        	new Metadata(),
+        	new ParseContext());
+
+        // The text occurs at line 24 (if lines start at 0) or 25 (if lines start at 1).
+        assertEquals(24, textPosition[line]);
+
+        // The column reported seems fuzzy, just test it is close enough.
+        assertTrue(Math.abs(textPosition[col]-47) < 10);
+    }
+    
 }
Index: tika-core/src/main/java/org/apache/tika/sax/TextContentHandler.java
===================================================================
--- tika-core/src/main/java/org/apache/tika/sax/TextContentHandler.java	(revision 1221134)
+++ tika-core/src/main/java/org/apache/tika/sax/TextContentHandler.java	(working copy)
@@ -36,6 +36,11 @@
     }
 
     @Override
+    public void setDocumentLocator(org.xml.sax.Locator locator) {
+	delegate.setDocumentLocator(locator);
+    }
+    
+    @Override
     public void characters(char[] ch, int start, int length)
             throws SAXException {
         delegate.characters(ch, start, length);
