#   Licensed to the Apache Software Foundation (ASF) under one
#   or more contributor license agreements.  See the NOTICE file
#   distributed with this work for additional information
#   regarding copyright ownership.  The ASF licenses this file
#   to you under the Apache License, Version 2.0 (the
#   "License"); you may not use this file except in compliance
#   with the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
#   Unless required by applicable law or agreed to in writing,
#   software distributed under the License is distributed on an
#   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
#   KIND, either express or implied.  See the License for the
#   specific language governing permissions and limitations
#   under the License.
#
# HG changeset patch
# Parent  d4c267a15aa0ac57d2f00ccd68eb46eb463738a7
Minimal changes to integrate html parser with netbeans infrastructure
- create a unique version
- disable the HotSpot workaound, as we need the detailed transition informations
- track the global position of the parser
- make startTage and end Tag overrideable in TreeBuilder

diff --git a/pom.xml b/pom.xml
--- a/pom.xml
+++ b/pom.xml
@@ -20,17 +20,17 @@
  * DEALINGS IN THE SOFTWARE.
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>nu.validator.htmlparser</groupId>
   <artifactId>htmlparser</artifactId>
   <packaging>bundle</packaging>
-  <version>1.4</version>
+  <version>1.4.20190624</version>
   <name>htmlparser</name>
   <url>http://about.validator.nu/htmlparser/</url>
   <description>The Validator.nu HTML Parser is an implementation of the HTML5 parsing algorithm in Java for applications. The parser is designed to work as a drop-in replacement for the XML parser in applications that already support XHTML 1.x content with an XML parser and use SAX, DOM or XOM to interface with the parser.</description>
   <!--
     Usage notes for this POM:
 
     To build without signing, run:
     mvn clean source:jar javadoc:jar repository:bundle-create
@@ -68,16 +68,17 @@
       <distribution>repo</distribution>
     </license>
   </licenses>
   <scm>
     <connection>scm:hg:http://hg.mozilla.org/projects/htmlparser/</connection>
     <url>http://hg.mozilla.org/projects/htmlparser/</url>
   </scm>
   <build>
+    <!--<sourceDirectory>${basedir}/src</sourceDirectory>-->
     <sourceDirectory>${project.build.directory}/src</sourceDirectory>
     <testSourceDirectory>${basedir}/test-src</testSourceDirectory>
     <plugins>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-compiler-plugin</artifactId>
         <configuration>
           <source>1.5</source>
@@ -108,17 +109,17 @@
                 <delete dir="${project.build.sourceDirectory}"/>
                 <mkdir dir="${project.build.sourceDirectory}"/>
                 <copy todir="${project.build.sourceDirectory}">
                   <fileset dir="${basedir}/src"/>
                 </copy>
               </target>
             </configuration>
           </execution>
-          <execution>
+<!--          <execution>
             <id>tokenizer-hotspot-workaround</id>
             <phase>process-sources</phase>
             <goals>
               <goal>run</goal>
             </goals>
             <configuration>
               <target>
                 <property name="translator.sources" value="${basedir}/translator-src"/>
@@ -129,17 +130,17 @@
                   <classpath>
                     <pathelement location="${translator.classes}"/>
                   </classpath>
                   <arg value="${project.build.sourceDirectory}/nu/validator/htmlparser/impl/Tokenizer.java"/>
                   <arg value="${project.build.sourceDirectory}/nu/validator/htmlparser/impl/HotSpotWorkaround.txt"/>
                 </java>
               </target>
             </configuration>
-          </execution>
+          </execution>-->
         </executions>
       </plugin>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-surefire-plugin</artifactId>
         <configuration>
           <skip>true</skip>
         </configuration>
diff --git a/src/nu/validator/htmlparser/impl/Tokenizer.java b/src/nu/validator/htmlparser/impl/Tokenizer.java
--- a/src/nu/validator/htmlparser/impl/Tokenizer.java
+++ b/src/nu/validator/htmlparser/impl/Tokenizer.java
@@ -504,16 +504,19 @@ public class Tokenizer implements Locato
     private final boolean newAttributesEachTime;
 
     private boolean shouldSuspend;
 
     protected boolean confident;
 
     private int line;
 
+    //holds the offset of the current buffer relative to the beginning of the input source
+    protected int currentBufferGlobalOffset;
+
     /*
      * The line number of the current attribute. First set to the line of the
      * attribute name and if there is a value, set to the line the value
      * started on.
      */
     // CPPONLY: private int attributeLine;
 
     private Interner interner;
@@ -1371,16 +1374,18 @@ public class Tokenizer implements Locato
         initializeWithoutStarting();
         tokenHandler.startTokenization(this);
         // [NOCPP[
         startErrorReporting();
         // ]NOCPP]
     }
 
     public boolean tokenizeBuffer(UTF16Buffer buffer) throws SAXException {
+        setTransitionBaseOffset(currentBufferGlobalOffset);
+
         int state = stateSave;
         int returnState = returnStateSave;
         char c = '\u0000';
         shouldSuspend = false;
         lastCR = false;
 
         int start = buffer.getStart();
         int end = buffer.getEnd();
@@ -1443,16 +1448,21 @@ public class Tokenizer implements Locato
                 end);
         // ]NOCPP]
         if (pos == end) {
             // exiting due to end of buffer
             buffer.setStart(pos);
         } else {
             buffer.setStart(pos + 1);
         }
+
+        if(! buffer.hasMore()) {
+            currentBufferGlobalOffset += buffer.getEnd();
+        }
+
         return lastCR;
     }
 
     // [NOCPP[
     private void ensureBufferSpace(int inputLength) throws SAXException {
         // Add 2 to account for emissions of LT_GT, LT_SOLIDUS and RSQB_RSQB.
         // Adding to the general worst case instead of only the
         // TreeBuilder-exposed worst case to avoid re-introducing a bug when
@@ -6924,16 +6934,17 @@ public class Tokenizer implements Locato
         html4 = false;
         metaBoundaryPassed = false;
         wantsComments = tokenHandler.wantsComments();
         if (!newAttributesEachTime) {
             attributes = new HtmlAttributes(mappingLangToXmlLang);
         }
         // ]NOCPP]
         resetToDataState();
+        currentBufferGlobalOffset = 0;
     }
 
     protected void errGarbageAfterLtSlash() throws SAXException {
     }
 
     protected void errLtSlashGt() throws SAXException {
     }
 
diff --git a/src/nu/validator/htmlparser/impl/TreeBuilder.java b/src/nu/validator/htmlparser/impl/TreeBuilder.java
--- a/src/nu/validator/htmlparser/impl/TreeBuilder.java
+++ b/src/nu/validator/htmlparser/impl/TreeBuilder.java
@@ -1666,17 +1666,17 @@ public abstract class TreeBuilder<T> imp
         }
         // [NOCPP[
         idLocations.clear();
         // ]NOCPP]
         charBuffer = null;
         end();
     }
 
-    public final void startTag(ElementName elementName,
+    public void startTag(ElementName elementName,
             HtmlAttributes attributes, boolean selfClosing) throws SAXException {
         flushCharacters();
 
         // [NOCPP[
         if (errorHandler != null) {
             // ID uniqueness
             @IdType String id = attributes.getId();
             if (id != null) {
@@ -3330,17 +3330,17 @@ public abstract class TreeBuilder<T> imp
                 if (tokenizer.internalEncodingDeclaration(extract)) {
                     requestSuspension();
                 }
             }
             Portability.releaseString(extract);
         }
     }
 
-    public final void endTag(ElementName elementName) throws SAXException {
+    public void endTag(ElementName elementName) throws SAXException {
         flushCharacters();
         needToDropLF = false;
         int eltPos;
         int group = elementName.getGroup();
         @Local String name = elementName.getName();
         endtagloop: for (;;) {
             if (isInForeign()) {
                 if (stack[currentPtr].name != name) {
