You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by ay...@apache.org on 2007/02/13 15:02:58 UTC

svn commit: r507006 [5/5] - in /harmony/enhanced/classlib/trunk/modules/swing: ./ src/main/java/common/javax/swing/text/html/parser/

Added: harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/ParserCup.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/ParserCup.java?view=auto&rev=507006
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/ParserCup.java (added)
+++ harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/ParserCup.java Tue Feb 13 06:02:55 2007
@@ -0,0 +1,1137 @@
+
+//----------------------------------------------------
+// The following code was generated by CUP v0.11a beta 20060102
+// Wed Dec 20 21:02:26 ART 2006
+//----------------------------------------------------
+
+package javax.swing.text.html.parser;
+
+import java_cup.runtime.*;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.List;
+import java.math.BigInteger;
+
+/** CUP v0.11a beta 20060102 generated parser.
+  * @version Wed Dec 20 21:02:26 ART 2006
+  */
+class ParserCup extends java_cup.runtime.lr_parser {
+
+  /** Default constructor. */
+  public ParserCup() {super();}
+
+  /** Constructor which sets the default scanner. */
+  public ParserCup(java_cup.runtime.Scanner s) {super(s);}
+
+  /** Production table. */
+  protected static final short _production_table[][] = 
+    unpackFromStrings(new String[] {
+    "\000\070\000\002\002\004\000\002\002\004\000\002\002" +
+    "\003\000\002\003\003\000\002\003\003\000\002\003\003" +
+    "\000\002\003\003\000\002\003\003\000\002\003\003\000" +
+    "\002\003\003\000\002\003\003\000\002\003\003\000\002" +
+    "\004\003\000\002\004\003\000\002\004\003\000\002\005" +
+    "\004\000\002\032\004\000\002\006\004\000\002\013\003" +
+    "\000\002\013\004\000\002\031\004\000\002\007\005\000" +
+    "\002\007\004\000\002\011\005\000\002\012\004\000\002" +
+    "\012\003\000\002\012\002\000\002\010\006\000\002\014" +
+    "\003\000\002\014\004\000\002\021\004\000\002\021\004" +
+    "\000\002\021\004\000\002\022\003\000\002\022\003\000" +
+    "\002\015\003\000\002\015\005\000\002\015\010\000\002" +
+    "\026\004\000\002\020\003\000\002\020\004\000\002\016" +
+    "\003\000\002\016\005\000\002\024\003\000\002\024\005" +
+    "\000\002\017\004\000\002\017\002\000\002\023\004\000" +
+    "\002\030\003\000\002\030\003\000\002\030\002\000\002" +
+    "\027\003\000\002\034\002\000\002\027\005\000\002\025" +
+    "\003\000\002\025\003" });
+
+  /** Access to production table. */
+  public short[][] production_table() {return _production_table;}
+
+  /** Parse-action table. */
+  protected static final short[][] _action_table = 
+    unpackFromStrings(new String[] {
+    "\000\104\000\024\003\015\004\016\016\025\017\013\020" +
+    "\014\022\022\033\005\034\024\035\011\001\002\000\026" +
+    "\002\ufffa\003\ufffa\004\ufffa\016\ufffa\017\ufffa\020\ufffa\022" +
+    "\ufffa\033\ufffa\034\ufffa\035\ufffa\001\002\000\026\002\ufff6" +
+    "\003\ufff6\004\ufff6\016\ufff6\017\ufff6\020\ufff6\022\ufff6\033" +
+    "\ufff6\034\ufff6\035\ufff6\001\002\000\026\002\ufff3\003\ufff3" +
+    "\004\ufff3\016\ufff3\017\ufff3\020\ufff3\022\ufff3\033\ufff3\034" +
+    "\ufff3\035\ufff3\001\002\000\026\002\ufff5\003\ufff5\004\ufff5" +
+    "\016\ufff5\017\ufff5\020\ufff5\022\ufff5\033\ufff5\034\ufff5\035" +
+    "\ufff5\001\002\000\026\002\ufffd\003\ufffd\004\ufffd\016\ufffd" +
+    "\017\ufffd\020\ufffd\022\ufffd\033\ufffd\034\ufffd\035\ufffd\001" +
+    "\002\000\026\002\ufff7\003\ufff7\004\ufff7\016\ufff7\017\ufff7" +
+    "\020\ufff7\022\ufff7\033\ufff7\034\ufff7\035\ufff7\001\002\000" +
+    "\026\002\ufff4\003\ufff4\004\ufff4\016\ufff4\017\ufff4\020\ufff4" +
+    "\022\ufff4\033\ufff4\034\ufff4\035\ufff4\001\002\000\010\006" +
+    "\uffcf\032\050\033\046\001\002\000\014\006\uffcf\013\uffcf" +
+    "\023\uffcf\032\050\033\046\001\002\000\004\006\103\001" +
+    "\002\000\026\002\ufff8\003\ufff8\004\ufff8\016\ufff8\017\ufff8" +
+    "\020\ufff8\022\ufff8\033\ufff8\034\ufff8\035\ufff8\001\002\000" +
+    "\006\006\101\013\102\001\002\000\026\002\ufffe\003\ufffe" +
+    "\004\ufffe\016\ufffe\017\ufffe\020\ufffe\022\ufffe\033\ufffe\034" +
+    "\ufffe\035\ufffe\001\002\000\026\002\ufffb\003\ufffb\004\ufffb" +
+    "\016\ufffb\017\ufffb\020\ufffb\022\ufffb\033\ufffb\034\ufffb\035" +
+    "\ufffb\001\002\000\026\002\ufffc\003\ufffc\004\ufffc\016\ufffc" +
+    "\017\ufffc\020\ufffc\022\ufffc\033\ufffc\034\ufffc\035\ufffc\001" +
+    "\002\000\010\006\uffef\013\uffef\023\044\001\002\000\026" +
+    "\002\ufff9\003\ufff9\004\ufff9\016\ufff9\017\ufff9\020\ufff9\022" +
+    "\ufff9\033\ufff9\034\ufff9\035\ufff9\001\002\000\010\006\uffe7" +
+    "\012\034\030\032\001\002\000\026\002\uffff\003\uffff\004" +
+    "\uffff\016\uffff\017\uffff\020\uffff\022\uffff\033\uffff\034\uffff" +
+    "\035\uffff\001\002\000\026\002\030\003\015\004\016\016" +
+    "\025\017\013\020\014\022\022\033\005\034\024\035\011" +
+    "\001\002\000\004\002\001\001\002\000\026\002\000\003" +
+    "\000\004\000\016\000\017\000\020\000\022\000\033\000" +
+    "\034\000\035\000\001\002\000\006\006\uffe8\031\040\001" +
+    "\002\000\004\006\037\001\002\000\004\021\035\001\002" +
+    "\000\004\014\036\001\002\000\026\002\uffe6\003\uffe6\004" +
+    "\uffe6\016\uffe6\017\uffe6\020\uffe6\022\uffe6\033\uffe6\034\uffe6" +
+    "\035\uffe6\001\002\000\026\002\uffea\003\uffea\004\uffea\016" +
+    "\uffea\017\uffea\020\uffea\022\uffea\033\uffea\034\uffea\035\uffea" +
+    "\001\002\000\004\006\uffe9\001\002\000\012\006\uffde\007" +
+    "\055\013\uffde\023\uffd8\001\002\000\004\023\044\001\002" +
+    "\000\006\006\uffe5\013\uffe5\001\002\000\016\006\uffcf\007" +
+    "\uffcf\013\uffcf\023\uffcf\032\050\033\046\001\002\000\006" +
+    "\006\uffee\013\uffee\001\002\000\024\006\uffd0\007\uffd0\010" +
+    "\uffd0\011\uffd0\013\uffd0\023\uffd0\025\uffd0\026\uffd0\027\uffd0" +
+    "\001\002\000\024\006\uffd1\007\uffd1\010\uffd1\011\uffd1\013" +
+    "\uffd1\023\uffd1\025\uffd1\026\uffd1\027\uffd1\001\002\000\026" +
+    "\006\uffce\007\uffce\010\uffce\011\uffce\013\uffce\023\uffce\025" +
+    "\uffce\026\uffce\027\uffce\032\uffcd\001\002\000\012\006\uffdb" +
+    "\007\uffdb\013\uffdb\023\uffdb\001\002\000\004\032\050\001" +
+    "\002\000\024\006\uffcc\007\uffcc\010\uffcc\011\uffcc\013\uffcc" +
+    "\023\uffcc\025\uffcc\026\uffcc\027\uffcc\001\002\000\006\006" +
+    "\uffe4\013\uffe4\001\002\000\014\010\060\011\064\025\061" +
+    "\026\056\027\062\001\002\000\026\006\uffcf\010\uffcf\011" +
+    "\uffcf\013\uffcf\023\uffcf\025\uffcf\026\uffcf\027\uffcf\032\050" +
+    "\033\046\001\002\000\022\006\uffdd\010\060\011\064\013" +
+    "\uffdd\023\uffd6\025\061\026\056\027\062\001\002\000\030" +
+    "\006\uffcb\010\uffcb\011\uffcb\013\uffcb\023\uffcb\024\uffcb\025" +
+    "\uffcb\026\uffcb\027\uffcb\032\uffcb\033\uffcb\001\002\000\026" +
+    "\006\uffcf\010\uffcf\011\uffcf\013\uffcf\023\uffcf\025\uffcf\026" +
+    "\uffcf\027\uffcf\032\050\033\046\001\002\000\026\006\uffcf" +
+    "\010\uffcf\011\uffcf\013\uffcf\023\uffcf\025\uffcf\026\uffcf\027" +
+    "\uffcf\032\050\033\046\001\002\000\022\006\uffda\010\uffda" +
+    "\011\uffda\013\uffda\023\uffda\025\uffda\026\uffda\027\uffda\001" +
+    "\002\000\030\006\uffca\010\uffca\011\uffca\013\uffca\023\uffca" +
+    "\024\uffca\025\uffca\026\uffca\027\uffca\032\uffca\033\uffca\001" +
+    "\002\000\004\023\uffd7\001\002\000\010\010\uffd3\011\uffd3" +
+    "\024\uffd3\001\002\000\010\010\060\011\064\024\071\001" +
+    "\002\000\014\006\uffcf\013\uffcf\023\uffd5\032\050\033\046" +
+    "\001\002\000\010\010\uffd4\011\uffd4\024\uffd4\001\002\000" +
+    "\006\006\uffdc\013\uffdc\001\002\000\022\006\uffe1\010\uffe1" +
+    "\011\uffe1\013\uffe1\023\uffe1\025\uffe1\026\uffe1\027\uffe1\001" +
+    "\002\000\022\006\uffe2\010\uffe2\011\uffe2\013\uffe2\023\uffe2" +
+    "\025\uffe2\026\uffe2\027\uffe2\001\002\000\022\006\uffd9\010" +
+    "\uffd9\011\uffd9\013\uffd9\023\uffd9\025\uffd9\026\uffd9\027\uffd9" +
+    "\001\002\000\022\006\uffdf\010\uffdf\011\uffdf\013\uffdf\023" +
+    "\uffdf\025\uffdf\026\uffdf\027\uffdf\001\002\000\022\006\uffe0" +
+    "\010\uffe0\011\uffe0\013\uffe0\023\uffe0\025\uffe0\026\uffe0\027" +
+    "\uffe0\001\002\000\022\006\uffe3\010\uffe3\011\uffe3\013\uffe3" +
+    "\023\uffe3\025\uffe3\026\uffe3\027\uffe3\001\002\000\026\002" +
+    "\ufff2\003\ufff2\004\ufff2\016\ufff2\017\ufff2\020\ufff2\022\ufff2" +
+    "\033\ufff2\034\ufff2\035\ufff2\001\002\000\026\002\ufff0\003" +
+    "\ufff0\004\ufff0\016\ufff0\017\ufff0\020\ufff0\022\ufff0\033\ufff0" +
+    "\034\ufff0\035\ufff0\001\002\000\026\002\uffeb\003\uffeb\004" +
+    "\uffeb\016\uffeb\017\uffeb\020\uffeb\022\uffeb\033\uffeb\034\uffeb" +
+    "\035\uffeb\001\002\000\010\006\uffed\013\uffed\023\uffed\001" +
+    "\002\000\004\006\106\001\002\000\026\002\uffec\003\uffec" +
+    "\004\uffec\016\uffec\017\uffec\020\uffec\022\uffec\033\uffec\034" +
+    "\uffec\035\uffec\001\002" });
+
+  /** Access to parse-action table. */
+  public short[][] action_table() {return _action_table;}
+
+  /** <code>reduce_goto</code> table. */
+  protected static final short[][] _reduce_table = 
+    unpackFromStrings(new String[] {
+    "\000\104\000\030\002\026\003\025\004\017\005\006\006" +
+    "\011\007\007\010\003\011\020\013\016\031\022\033\005" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\006\027\046\030\104\001\001\000" +
+    "\006\027\046\030\103\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\012\014\044\015\042\016\041" +
+    "\026\040\001\001\000\002\001\001\000\004\012\032\001" +
+    "\001\000\002\001\001\000\026\003\030\004\017\005\006" +
+    "\006\011\007\007\010\003\011\020\013\016\031\022\033" +
+    "\005\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\012\014\053\015\042\016\041\026" +
+    "\040\001\001\000\002\001\001\000\006\027\046\030\050" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\004\034\051\001\001\000\002\001\001\000\004" +
+    "\027\052\001\001\000\002\001\001\000\002\001\001\000" +
+    "\012\020\056\021\062\024\064\025\065\001\001\000\006" +
+    "\027\046\030\077\001\001\000\010\021\076\022\074\025" +
+    "\075\001\001\000\002\001\001\000\006\027\046\030\073" +
+    "\001\001\000\006\027\046\030\072\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\004\017\066" +
+    "\001\001\000\004\025\067\001\001\000\006\027\046\030" +
+    "\071\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001" });
+
+  /** Access to <code>reduce_goto</code> table. */
+  public short[][] reduce_table() {return _reduce_table;}
+
+  /** Instance of action encapsulation class. */
+  protected CUP$ParserCup$actions action_obj;
+
+  /** Action encapsulation object initializer. */
+  protected void init_actions()
+    {
+      action_obj = new CUP$ParserCup$actions(this);
+    }
+
+  /** Invoke a user supplied parse action. */
+  public java_cup.runtime.Symbol do_action(
+    int                        act_num,
+    java_cup.runtime.lr_parser parser,
+    java.util.Stack            stack,
+    int                        top)
+    throws java.lang.Exception
+  {
+    /* call code in generated class */
+    return action_obj.CUP$ParserCup$do_action(act_num, parser, stack, top);
+  }
+
+  /** Indicates start state. */
+  public int start_state() {return 0;}
+  /** Indicates start production. */
+  public int start_production() {return 0;}
+
+  /** <code>EOF</code> Symbol index. */
+  public int EOF_sym() {return 0;}
+
+  /** <code>error</code> Symbol index. */
+  public int error_sym() {return 1;}
+
+
+
+
+	/**
+	 * A local reference to the ParserHandler.
+	 */
+	private ParserHandler ph;
+	
+	/**
+	 * Receives the ParserHandler were the callback methods will be invoked.
+	 */
+	public void setCallBack (ParserHandler ph) {
+		this.ph = ph;
+	}
+
+	/**
+	 * Sets the ParserHandler of the action manager before processing any symbol.
+	 */
+	public void user_init() {
+		action_obj.setHandler(ph);	
+	}
+	
+	
+	public void	report_fatal_error(final String message, final Object info){
+		ph.reportRemainingElements();		
+	}
+	
+	public void	report_error(final String message, final Object info){
+
+	}
+	
+
+
+}
+
+/** Cup generated class to encapsulate user supplied action code.*/
+class CUP$ParserCup$actions {
+
+    
+
+	/**
+	 * A local reference of the ParserHandler in the action manager.
+	 */
+	private ParserHandler ph; 
+	
+	/**
+	 * It sets the ParserHandler for this action manager.
+	 */
+	public void setHandler (final ParserHandler ph) {
+		this.ph = ph;
+	}
+	
+	/**
+	 * This idicates whether the las tag was successfully created or not
+	 */	
+	private static boolean lastStartTagCreatedOk;
+	
+	public boolean isLastStartTagCreatedOk(){
+		return lastStartTagCreatedOk;
+	}
+
+  private final ParserCup parser;
+
+  /** Constructor */
+  CUP$ParserCup$actions(ParserCup parser) {
+    this.parser = parser;
+  }
+
+  /** Method with the actual generated action code. */
+  public final java_cup.runtime.Symbol CUP$ParserCup$do_action(
+    int                        CUP$ParserCup$act_num,
+    java_cup.runtime.lr_parser CUP$ParserCup$parser,
+    java.util.Stack            CUP$ParserCup$stack,
+    int                        CUP$ParserCup$top)
+    throws java.lang.Exception
+    {
+      /* Symbol object for return from actions */
+      java_cup.runtime.Symbol CUP$ParserCup$result;
+
+      /* select the action based on the action number */
+      switch (CUP$ParserCup$act_num)
+        {
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 55: // qm ::= SQM 
+            {
+              Character RESULT = null;
+		int quotemarkleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
+		int quotemarkright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
+		Character quotemark = (Character)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
+		
+					RESULT = quotemark;
+				
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(19/*qm*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 54: // qm ::= DQM 
+            {
+              Character RESULT = null;
+		int quotemarkleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
+		int quotemarkright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
+		Character quotemark = (Character)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
+		
+					RESULT = quotemark;
+
+				
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(19/*qm*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 53: // lexicalerrors ::= LEXERR NT$0 lexicalerrors 
+            {
+              List<String> RESULT = null;
+              // propagate RESULT from NT$0
+              if ( ((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).value != null )
+                RESULT = (List<String>) ((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).value;
+		int error1left = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).left;
+		int error1right = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).right;
+		String error1 = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).value;
+		int error2left = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
+		int error2right = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
+		List<String> error2 = (List<String>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
+		
+			  			RESULT.addAll(error2);
+			  		
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(21/*lexicalerrors*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 52: // NT$0 ::= 
+            {
+              Object RESULT = null;
+		int error1left = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
+		int error1right = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
+		String error1 = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
+
+				  		List<String> list = new ArrayList<String>();
+						list.add(error1);
+						RESULT = list;
+					
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(26/*NT$0*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 51: // lexicalerrors ::= LEXERR 
+            {
+              List<String> RESULT = null;
+		int error1left = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
+		int error1right = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
+		String error1 = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
+							
+						List<String> list = new ArrayList<String>();
+						list.add(error1);
+						RESULT = list;
+					
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(21/*lexicalerrors*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 50: // optional_lexicalerrors ::= 
+            {
+              List<String> RESULT = null;
+
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(22/*optional_lexicalerrors*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 49: // optional_lexicalerrors ::= EOFTK 
+            {
+              List<String> RESULT = null;
+		int tokenleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
+		int tokenright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
+		String token = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
+
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(22/*optional_lexicalerrors*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 48: // optional_lexicalerrors ::= lexicalerrors 
+            {
+              List<String> RESULT = null;
+		int error2left = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
+		int error2right = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
+		List<String> error2 = (List<String>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
+														
+								RESULT = error2;
+							
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(22/*optional_lexicalerrors*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 47: // attrval_lit ::= ATTRVAL_LIT optional_lexicalerrors 
+            {
+              Pair<Object,List<String>> RESULT = null;
+		int nextLitleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left;
+		int nextLitright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).right;
+		String nextLit = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).value;
+		int error1left = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
+		int error1right = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
+		List<String> error1 = (List<String>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
+
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(17/*attrval_lit*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 46: // literal ::= 
+            {
+              String RESULT = null;
+		 RESULT = new String (""); 
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(13/*literal*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 45: // literal ::= literal ATTRVAL_LIT 
+            {
+              String RESULT = null;
+		int prevLitleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left;
+		int prevLitright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).right;
+		String prevLit = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).value;
+		int nextLitleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
+		int nextLitright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
+		String nextLit = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
+		 RESULT = prevLit + nextLit; 
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(13/*literal*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 44: // mult_attr_value ::= qm literal qm 
+            {
+              Pair<Object,List<String>> RESULT = null;
+		int attrValueleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left;
+		int attrValueright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).right;
+		String attrValue = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).value;
+		 
+					  	
+					  	RESULT = new Pair(attrValue, new ArrayList());
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(18/*mult_attr_value*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 43: // mult_attr_value ::= single_attr_value 
+            {
+              Pair<Object,List<String>> RESULT = null;
+		int attrValueleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
+		int attrValueright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
+		Pair<Object,List<String>> attrValue = (Pair<Object,List<String>>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
+		 RESULT = attrValue; 
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(18/*mult_attr_value*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 42: // mult_attr ::= attribute_name EQUALS mult_attr_value 
+            {
+              HTMLAttributeList RESULT = null;
+		int attrNameleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).left;
+		int attrNameright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).right;
+		Pair<String,List<String>> attrName = (Pair<String,List<String>>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).value;
+		int attrValueleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
+		int attrValueright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
+		Pair<Object,List<String>> attrValue = (Pair<Object,List<String>>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
+			
+					List<String> array= new ArrayList<String>();
+					
+						if(attrName.getSecond()!=null)
+							array.addAll(attrName.getSecond());
+						if(attrValue.getSecond()!=null)
+							array.addAll(attrValue.getSecond());					 	
+					 RESULT = new HTMLAttributeList (attrName.getFirst(), attrValue.getFirst(), attrNameright, attrValueright, null,attrName.getSecond()); 
+
+					
+					
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(12/*mult_attr*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 41: // mult_attr ::= attribute_name 
+            {
+              HTMLAttributeList RESULT = null;
+		int attrNameleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
+		int attrNameright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
+		Pair<String,List<String>> attrName = (Pair<String,List<String>>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
+		 RESULT = new HTMLAttributeList (attrName.getFirst(), null, attrNameleft, attrNameright, null,attrName.getSecond()); 
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(12/*mult_attr*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 40: // single_attr_value ::= single_attr_value any_value 
+            {
+              Pair<Object,List<String>> RESULT = null;
+		int prevAttrValueleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left;
+		int prevAttrValueright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).right;
+		Pair<Object,List<String>> prevAttrValue = (Pair<Object,List<String>>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).value;
+		int newAttrValueleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
+		int newAttrValueright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
+		Pair<Object,List<String>> newAttrValue = (Pair<Object,List<String>>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
+		 
+					  	List<String> array= new ArrayList<String>();					
+						if(prevAttrValue!=null && prevAttrValue.getSecond()!=null) {
+							array.addAll(prevAttrValue.getSecond());
+						}
+						if(newAttrValue!=null && newAttrValue.getSecond()!=null) {
+							array.addAll(newAttrValue.getSecond());					
+						}	  	
+					  	Pair<Object,List<String>> pair = new Pair<Object,List<String>>((prevAttrValue !=null ?prevAttrValue.getFirst().toString() : "") + (newAttrValue!=null ? newAttrValue.getFirst().toString() : ""),array);
+					  	RESULT = pair;
+					  	
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(14/*single_attr_value*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 39: // single_attr_value ::= any_no_lit 
+            {
+              Pair<Object,List<String>> RESULT = null;
+		int attrValueleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
+		int attrValueright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
+		Pair<Object,List<String>> attrValue = (Pair<Object,List<String>>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
+		 RESULT = attrValue; 
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(14/*single_attr_value*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 38: // attribute_name ::= ATTR_NAME optional_lexicalerrors 
+            {
+              Pair<String,List<String>> RESULT = null;
+		int attrNameTkleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left;
+		int attrNameTkright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).right;
+		String attrNameTk = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).value;
+		int error1left = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
+		int error1right = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
+		List<String> error1 = (List<String>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
+		 					
+						RESULT = new Pair(attrNameTk,error1 );
+					
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(20/*attribute_name*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 37: // single_attr ::= attribute_name EQUALS qm literal qm optional_lexicalerrors 
+            {
+              HTMLAttributeList RESULT = null;
+		int attrNameleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-5)).left;
+		int attrNameright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-5)).right;
+		Pair<String,List<String>> attrName = (Pair<String,List<String>>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-5)).value;
+		int attrValueleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).left;
+		int attrValueright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).right;
+		String attrValue = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).value;
+		int error1left = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
+		int error1right = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
+		List<String> error1 = (List<String>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
+		 
+				  		List<String> array= new ArrayList<String>();
+						
+						if(attrName.getSecond()!=null) {
+							array.addAll(attrName.getSecond()); 
+						}
+						if(error1!=null) {
+							array.addAll(error1);				  		
+						}
+				  		RESULT = new HTMLAttributeList (attrName.getFirst(), attrValue, attrNameleft, attrValueright, null,array);
+				  		 
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(11/*single_attr*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-5)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 36: // single_attr ::= attribute_name EQUALS single_attr_value 
+            {
+              HTMLAttributeList RESULT = null;
+		int attrNameleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).left;
+		int attrNameright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).right;
+		Pair<String,List<String>> attrName = (Pair<String,List<String>>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).value;
+		int attrValueleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
+		int attrValueright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
+		Pair<Object,List<String>> attrValue = (Pair<Object,List<String>>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
+		  			  		  				  		
+						List<String> array= new ArrayList<String>();
+						
+						if(attrName.getSecond()!=null) {
+							array.addAll(attrName.getSecond());
+						}
+						if(attrValue.getSecond()!=null) {
+							array.addAll(attrValue.getSecond());
+						}
+  				  		RESULT = new HTMLAttributeList (attrName.getFirst(), attrValue.getFirst(), attrNameleft, attrValueright, null,array);
+  				  		
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(11/*single_attr*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 35: // single_attr ::= attribute_name 
+            {
+              HTMLAttributeList RESULT = null;
+		int attrNameleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
+		int attrNameright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
+		Pair<String,List<String>> attrName = (Pair<String,List<String>>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
+		 RESULT = new HTMLAttributeList (attrName.getFirst(), null, attrNameleft, attrNameright, null,attrName.getSecond()); 
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(11/*single_attr*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 34: // any_value ::= qm 
+            {
+              Pair<Object,List<String>> RESULT = null;
+
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(16/*any_value*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 33: // any_value ::= any_no_lit 
+            {
+              Pair<Object,List<String>> RESULT = null;
+		int anyValueleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
+		int anyValueright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
+		Pair<Object,List<String>> anyValue = (Pair<Object,List<String>>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
+		 RESULT = anyValue; 
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(16/*any_value*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 32: // any_no_lit ::= ATTRVAL_NUM optional_lexicalerrors 
+            {
+              Pair<Object,List<String>> RESULT = null;
+		int attrValueTokenleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left;
+		int attrValueTokenright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).right;
+		String attrValueToken = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).value;
+		int error1left = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
+		int error1right = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
+		List<String> error1 = (List<String>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
+			
+						RESULT = new Pair(attrValueToken,error1); 
+					 
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(15/*any_no_lit*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 31: // any_no_lit ::= ATTRVAL_NMTK optional_lexicalerrors 
+            {
+              Pair<Object,List<String>> RESULT = null;
+		int attrValueTokenleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left;
+		int attrValueTokenright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).right;
+		String attrValueToken = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).value;
+		int error1left = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
+		int error1right = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
+		List<String> error1 = (List<String>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
+		  						
+ 						RESULT = new Pair(attrValueToken,error1);
+ 					
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(15/*any_no_lit*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 30: // any_no_lit ::= ATTRVAL_NUMTK optional_lexicalerrors 
+            {
+              Pair<Object,List<String>> RESULT = null;
+		int attrValueTokenleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left;
+		int attrValueTokenright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).right;
+		String attrValueToken = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).value;
+		int error1left = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
+		int error1right = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
+		List<String> error1 = (List<String>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
+		 
+						RESULT = new Pair(attrValueToken,error1);
+					
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(15/*any_no_lit*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 29: // atts ::= mult_attr atts 
+            {
+              HTMLAttributeList RESULT = null;
+		int attrleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left;
+		int attrright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).right;
+		HTMLAttributeList attr = (HTMLAttributeList)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).value;
+		int attrListleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
+		int attrListright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
+		HTMLAttributeList attrList = (HTMLAttributeList)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
+		 attr.setNext (attrList);
+					   RESULT =  attr;
+				 	
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(10/*atts*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 28: // atts ::= single_attr 
+            {
+              HTMLAttributeList RESULT = null;
+		int attrleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
+		int attrright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
+		HTMLAttributeList attr = (HTMLAttributeList)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
+		 RESULT = attr; 
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(10/*atts*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 27: // comment ::= TAG_OPEN_EXM COMM COMM_CONTENT TAG_COMM_CLOSE 
+            {
+              Object RESULT = null;
+		int initTagleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-3)).left;
+		int initTagright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-3)).right;
+		String initTag = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-3)).value;
+		int commleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).left;
+		int commright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).right;
+		String comm = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).value;
+		int commTextleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left;
+		int commTextright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).right;
+		String commText = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).value;
+		int closeTokenleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
+		int closeTokenright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
+		String closeToken = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
+		 ph.iHaveNewComment(new HTMLComment(
+											commText, 
+											initTagleft,
+											initTagright));	
+					
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(6/*comment*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-3)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 26: // markup_content ::= 
+            {
+              Pair<String,String> RESULT = null;
+		 RESULT = new Pair<String, String> (null, null); 
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(8/*markup_content*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 25: // markup_content ::= MUDECL 
+            {
+              Pair<String,String> RESULT = null;
+		int mkDeclleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
+		int mkDeclright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
+		String mkDecl = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
+		 RESULT = new Pair<String, String> (mkDecl, null); 
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(8/*markup_content*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 24: // markup_content ::= MUDECL MUDECL_CONTENT 
+            {
+              Pair<String,String> RESULT = null;
+		int mkDeclleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left;
+		int mkDeclright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).right;
+		String mkDecl = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).value;
+		int mkContleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
+		int mkContright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
+		String mkCont = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
+		 RESULT = new Pair<String, String> (mkDecl, mkCont); 
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(8/*markup_content*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 23: // markup ::= TAG_OPEN_EXM markup_content TAG_CLOSE 
+            {
+              Object RESULT = null;
+		int initTokenleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).left;
+		int initTokenright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).right;
+		String initToken = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).value;
+		int mkContentleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left;
+		int mkContentright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).right;
+		Pair<String,String> mkContent = (Pair<String,String>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).value;
+		int closeTokenleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
+		int closeTokenright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
+		Character closeToken = (Character)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
+		 ph.iHaveNewMarkup (new HTMLMarkup(
+											mkContent.getFirst(),
+											mkContent.getSecond(),
+											initTokenleft));
+					
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(7/*markup*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 22: // eelem ::= error TAG_CLOSE 
+            {
+              Object RESULT = null;
+
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(5/*eelem*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 21: // eelem ::= END_TAG_NAME optional_lexicalerrors TAG_CLOSE 
+            {
+              Object RESULT = null;
+		int initTokenleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).left;
+		int initTokenright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).right;
+		String initToken = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).value;
+		int error1left = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left;
+		int error1right = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).right;
+		List<String> error1 = (List<String>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).value;
+		int closeTokenleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
+		int closeTokenright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
+		Character closeToken = (Character)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
+		 
+					if(error1!=null){
+						ph.iHaveNewError(HTMLErrorType.ERR_EXPECTED,"\'>\'",null,null);					
+					} 
+					ph.iHaveNewEndTag(new HTMLTag(HTMLTagType.END, initToken, null, initTokenleft, closeTokenleft,  initTokenleft));
+				   
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(5/*eelem*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 20: // tag_name ::= TAG_NAME optional_lexicalerrors 
+            {
+              String RESULT = null;
+		int startElemTokenleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left;
+		int startElemTokenright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).right;
+		String startElemToken = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).value;
+		int error1left = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
+		int error1right = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
+		List<String> error1 = (List<String>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
+		 
+					if(error1!=null){
+					for(String s:error1){
+						ph.iHaveNewError(HTMLErrorType.ERR_INVALID_TAG_CHAR,s,startElemToken,null);				
+					}							
+				}
+				RESULT = startElemToken;
+				
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(23/*tag_name*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 19: // tag_info ::= tag_name atts 
+            {
+              Pair<String,HTMLAttributeList> RESULT = null;
+		int startElemTokenleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left;
+		int startElemTokenright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).right;
+		String startElemToken = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).value;
+		int attributesleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
+		int attributesright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
+		HTMLAttributeList attributes = (HTMLAttributeList)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
+		
+					if(attributes.getError() != null){
+						for(String s:attributes.getError()){
+							ph.iHaveNewError(HTMLErrorType.ERR_INVALID_TAG_CHAR,s,startElemToken,null);							
+						}
+						/*if(attributes.getAttributeValue()!=null)
+								ph.iHaveNewError(HTMLErrorType.ERR_ATTVALERR,null,null,null);*/
+					}
+
+					RESULT = new Pair<String, HTMLAttributeList> (startElemToken, attributes); 
+					
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(9/*tag_info*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 18: // tag_info ::= tag_name 
+            {
+              Pair<String,HTMLAttributeList> RESULT = null;
+		int startElemTokenleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
+		int startElemTokenright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
+		String startElemToken = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
+		 	RESULT = new Pair<String, HTMLAttributeList> (startElemToken, null); 
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(9/*tag_info*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 17: // simple_tag ::= tag_info TAG_SLASH_CLOSE 
+            {
+              Object RESULT = null;
+		int tagInfoleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left;
+		int tagInforight = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).right;
+		Pair<String,HTMLAttributeList> tagInfo = (Pair<String,HTMLAttributeList>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).value;
+		int closeTokenleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
+		int closeTokenright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
+		String closeToken = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
+		 ph.iHaveNewStartTag(new HTMLTag(HTMLTagType.SIMPLE, tagInfo.getFirst(), tagInfo.getSecond(), tagInfoleft, closeTokenleft, tagInforight)); 
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(4/*simple_tag*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 16: // tag_open ::= TAG_OPEN optional_lexicalerrors 
+            {
+              Character RESULT = null;
+		int initTokenleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left;
+		int initTokenright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).right;
+		Character initToken = (Character)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).value;
+		int error1left = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
+		int error1right = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
+		List<String> error1 = (List<String>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
+		
+					if(error1 != null){
+						for(String s:error1){
+							ph.iHaveNewError(HTMLErrorType.ERR_EXPECTED_TAGNAME,null,null,null);
+						}
+					}
+					
+					RESULT = initToken;
+				
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(24/*tag_open*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 15: // start_tag ::= tag_info TAG_CLOSE 
+            {
+              Object RESULT = null;
+		int tagInfoleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left;
+		int tagInforight = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).right;
+		Pair<String,HTMLAttributeList> tagInfo = (Pair<String,HTMLAttributeList>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).value;
+		int closeTokenleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
+		int closeTokenright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
+		Character closeToken = (Character)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
+		 					
+					lastStartTagCreatedOk=true;								// So that the lexer can ask if this was true. Curently, it will always be so, we should write															
+					lastStartTagCreatedOk=true;								// So that the lexer can ask if this was true. Curently, it will always be so, we should write
+					ph.iHaveNewStartTag(new HTMLTag(HTMLTagType.START, tagInfo.getFirst(), tagInfo.getSecond(), tagInfoleft, closeTokenleft, tagInforight)); 
+					
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(3/*start_tag*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 14: // selem ::= bad_tag_open 
+            {
+              Object RESULT = null;
+
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(2/*selem*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 13: // selem ::= simple_tag 
+            {
+              Object RESULT = null;
+
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(2/*selem*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 12: // selem ::= start_tag 
+            {
+              Object RESULT = null;
+
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(2/*selem*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 11: // data ::= EOFTK 
+            {
+              Object RESULT = null;
+		int eofTokenleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
+		int eofTokenright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
+		String eofToken = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
+		  
+					/* finalize the parsing "by hand" */
+					try {
+						parser.done_parsing();
+					} catch (Throwable e) {			
+						ph.iHaveNewError(HTMLErrorType.ERR_THROWABLE, eofToken,null,null);
+					} 
+				  
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(1/*data*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 10: // data ::= LEXERR_EXPECTED_TAG_NAME 
+            {
+              Object RESULT = null;
+		int error1left = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
+		int error1right = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
+		String error1 = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
+		
+				  	ph.iHaveNewError(HTMLErrorType.ERR_EXPECTED_TAGNAME,null,null,null);
+				  
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(1/*data*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 9: // data ::= SYNC 
+            {
+              Object RESULT = null;
+
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(1/*data*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 8: // data ::= EOF_LITERAL 
+            {
+              Object RESULT = null;
+		int textoleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
+		int textoright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
+		String texto = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
+		ph.iHaveNewError(HTMLErrorType.ERR_EOF_LITERAL,texto,null,null);
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(1/*data*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 7: // data ::= comment 
+            {
+              Object RESULT = null;
+
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(1/*data*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 6: // data ::= markup 
+            {
+              Object RESULT = null;
+
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(1/*data*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 5: // data ::= TEXT 
+            {
+              Object RESULT = null;
+		int textTokenleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
+		int textTokenright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
+		HTMLText textToken = (HTMLText)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
+		 ph.iHaveNewText(textToken); 
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(1/*data*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 4: // data ::= eelem 
+            {
+              Object RESULT = null;
+
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(1/*data*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 3: // data ::= selem 
+            {
+              Object RESULT = null;
+
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(1/*data*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 2: // doc ::= data 
+            {
+              Object RESULT = null;
+
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(0/*doc*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 1: // doc ::= doc data 
+            {
+              Object RESULT = null;
+
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(0/*doc*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          return CUP$ParserCup$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 0: // $START ::= doc EOF 
+            {
+              Object RESULT = null;
+		int start_valleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left;
+		int start_valright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).right;
+		Object start_val = (Object)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).value;
+		RESULT = start_val;
+              CUP$ParserCup$result = new java_cup.runtime.Symbol(0/*$START*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
+            }
+          /* ACCEPT */
+          CUP$ParserCup$parser.done_parsing();
+          return CUP$ParserCup$result;
+
+          /* . . . . . .*/
+          default:
+            throw new Exception(
+               "Invalid action number found in internal parse table");
+
+        }
+    }
+}
+

Propchange: harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/ParserCup.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/ParserDelegator.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/ParserDelegator.java?view=diff&rev=507006&r1=507005&r2=507006
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/ParserDelegator.java (original)
+++ harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/ParserDelegator.java Tue Feb 13 06:02:55 2007
@@ -14,43 +14,131 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-/**
- * @author Evgeniya G. Maenkova
- * @version $Revision$
- */
 package javax.swing.text.html.parser;
 
+import java.io.DataInputStream;
+import java.io.File;
+import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.Reader;
 import java.io.Serializable;
+import java.net.URL;
 
 import javax.swing.text.html.HTMLEditorKit;
 
-public class ParserDelegator extends HTMLEditorKit.Parser implements Serializable {
-
-
+/**
+ * This class is a wrapper of {@link DocumentParser}. <br>
+ * <br>
+ * Internally stores a reference to a DTD ({@link ParserDelegator#defaultDTD})
+ * which is filled with <code>html32.bdtd</code>, a file located at the classpath
+ * with the default DTD content (HTML 3.2) in ASN1 format. Then, instances
+ * a {@link DocumentParser} with this dtd. <br>
+ * <br>
+ * So, when the method
+ * {@link ParserDelegator#parse(Reader, javax.swing.text.html.HTMLEditorKit.ParserCallback, boolean) parse(Reader, HTMLEditorKit.ParserCallback, boolean)}
+ * is invoked, its <em>"delegates"</em> to a {@link DocumentParser}.
+ * 
+ * @author Diego Raúl Mercado
+ * @author Alejandro Sánchez
+ * @author Alejandro Barturen
+ * @version $Revision: 1.12 $
+ */
+public class ParserDelegator extends HTMLEditorKit.Parser implements
+        Serializable {
 
+    /**
+     * The name of the default dtd.
+     */
+    private static final String DEFAULT_DTD_NAME = "html32";
+
+    /**
+     * Stores the default DTD (the content of the file <code>html32.bdtd</code>).
+     */
+    private static DTD defaultDTD;
+
+    /**
+     * Sets {@link ParserDelegator#defaultDTD} with the <code>html32.bdtd</code>
+     * file by calling the method {@link ParserDelegator#setDefaultDTD()}.
+     */
     public ParserDelegator() {
-        throw new UnsupportedOperationException("Not implemented");
+        setDefaultDTD();
     }
 
-
-    public void parse(final Reader a0, final HTMLEditorKit.ParserCallback a1, final boolean a2) throws IOException {
-        throw new UnsupportedOperationException("Not implemented");
-
+    /**
+     * Simply calls the method
+     * {@link javax.swing.text.html.parser.DocumentParser#parse(Reader, javax.swing.text.html.HTMLEditorKit.ParserCallback, boolean) parse(Reader, HTMLEditorKit.ParserCallback, boolean)}
+     * of the wrapped {@link javax.swing.text.html.parser.DocumentParser} with
+     * the same arguments
+     * 
+     * @param r
+     *            the reader
+     * @param cb
+     *            the callback
+     * @param ignoreCharSet
+     *            the ignoreCharSet
+     * @throws IOException
+     *             if the {@link DocumentParser} propagates it
+     */
+    public void parse(final Reader r, final HTMLEditorKit.ParserCallback cb,
+            final boolean ignoreCharSet) throws IOException {
+        DocumentParser dp = new DocumentParser(defaultDTD); 
+        dp.parse(r, cb, ignoreCharSet);
     }
 
-
-    protected static DTD createDTD(final DTD a0, final String a1) {
-        throw new UnsupportedOperationException("Not implemented");
-
+    /**
+     * Reads the DTD content from the file called <code>name</code> + "bdtd"
+     * located in the classpath (if there is any) and fills the <code>dtd</code>
+     * with it. Then, returns <code>dtd</code>. <br>
+     * <br>
+     * The complete behavior is the following:
+     * <ol>
+     * <li> Finds the resource (the ASN1 binary file) in the classpath by
+     * appending ".bdtd" to <code>name</code>.
+     * <li> Creates an stream from this file and adds the information contained
+     * into <code>dtd</code> by calling its {@link DTD#read(DataInputStream)}
+     * method
+     * <li> Returns the <code>dtd</code>
+     * </ol>
+     * <br>
+     * Notice that this method catches any {@link Exception} and ignores it.
+     * It's the same behavior as the reference implementation.
+     * 
+     * @param dtd
+     *            the dtd to be filled
+     * @param name
+     *            the name of the file located in the classpath (without .bdtd)
+     * @return the <code>dtd</code>
+     */
+    protected static DTD createDTD(final DTD dtd, final String name) {
+        try {
+            String oldName = dtd.name;
+            // gets the location of the harcoded file that is located in the
+            // classpath ...
+            URL bdtdURL = ParserDelegator.class.getResource(name + ".bdtd");
+            // fills the DTD ...
+            dtd.read(new DataInputStream(
+                    new FileInputStream(new File(bdtdURL.toURI()))));
+            dtd.name = oldName;
+            DTD.putDTDHash(name, dtd);
+        } catch (Exception e) {
+            // ignores any exception (same as Reference Implementation)
+        }
+        return dtd;
     }
 
-
+    /**
+     * Sets the content of {@link ParserDelegator#defaultDTD}. Internally,
+     * calls {@link ParserDelegator#createDTD(DTD, String)} with
+     * {@link ParserDelegator#defaultDTD} and
+     * {@link ParserDelegator#DEFAULT_DTD_NAME} as arguments.
+     * 
+     * Notice that {@link ParserDelegator#defaultDTD} is cached. It means that
+     * it's filled only once.
+     */
     protected static synchronized void setDefaultDTD() {
-        throw new UnsupportedOperationException("Not implemented");
-
+        if (defaultDTD == null) {
+            defaultDTD = new DTD(DEFAULT_DTD_NAME);
+            createDTD(defaultDTD, DEFAULT_DTD_NAME);
+        }
     }
-
-}
-
+}
\ No newline at end of file

Added: harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/ParserHandler.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/ParserHandler.java?view=auto&rev=507006
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/ParserHandler.java (added)
+++ harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/ParserHandler.java Tue Feb 13 06:02:55 2007
@@ -0,0 +1,50 @@
+/*
+ *  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.
+ */
+
+package javax.swing.text.html.parser;
+
+import java.io.IOException;
+import java.io.Reader;
+
+import javax.swing.text.ChangedCharSetException;
+
+/**
+ * @author Diego Raúl Mercado
+ * @author Alejandro Sánchez
+ * @author Alejandro Barturen
+ * @version $Revision: 1.23 $
+ */
+interface ParserHandler {
+    void parse(Reader in) throws IOException;
+    
+    // called by DocumentParser at the end
+    String getEOLString();
+    
+    void iHaveNewStartTag(final HTMLTag htmlTag) throws ChangedCharSetException;
+        
+    void iHaveNewMarkup(final HTMLMarkup htmlMarkup) throws IOException;
+    
+    void iHaveNewEndTag(final HTMLTag htmlTag);
+    
+    void iHaveNewText(final HTMLText htmlText);
+    
+    void iHaveNewComment(final HTMLComment htmlComment); 
+    
+    void iHaveNewError(final HTMLErrorType errMsgType, final String attr1,final String attr2,final String attr3);
+    
+    void reportRemainingElements();
+}
\ No newline at end of file

Propchange: harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/ParserHandler.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/ParserSym.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/ParserSym.java?view=auto&rev=507006
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/ParserSym.java (added)
+++ harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/ParserSym.java Tue Feb 13 06:02:55 2007
@@ -0,0 +1,41 @@
+
+//----------------------------------------------------
+// The following code was generated by CUP v0.11a beta 20060102
+// Wed Dec 20 21:02:26 ART 2006
+//----------------------------------------------------
+
+package javax.swing.text.html.parser;
+
+/** CUP generated interface containing symbol constants. */
+interface ParserSym {
+  /* terminals */
+  public static final int TAG_CLOSE = 4;
+  public static final int TAG_COMM_CLOSE = 10;
+  public static final int EOFTK = 25;
+  public static final int TAG_SLASH_CLOSE = 9;
+  public static final int ATTR_NAME = 17;
+  public static final int LEXERR = 24;
+  public static final int MUDECL = 22;
+  public static final int TAG_OPEN = 3;
+  public static final int COMM = 8;
+  public static final int ATTRVAL_NMTK = 19;
+  public static final int ATTRVAL_NUM = 21;
+  public static final int EMPTY_TAG = 11;
+  public static final int MUDECL_CONTENT = 23;
+  public static final int LEXERR_EXPECTED_TAG_NAME = 27;
+  public static final int EQUALS = 5;
+  public static final int END_TAG_NAME = 13;
+  public static final int DQM = 6;
+  public static final int EOF = 0;
+  public static final int TAG_NAME = 14;
+  public static final int error = 1;
+  public static final int SYNC = 2;
+  public static final int ATTRVAL_NUMTK = 20;
+  public static final int TEXT = 16;
+  public static final int SQM = 7;
+  public static final int EOF_LITERAL = 26;
+  public static final int COMM_CONTENT = 15;
+  public static final int ATTRVAL_LIT = 18;
+  public static final int TAG_OPEN_EXM = 12;
+}
+

Propchange: harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/ParserSym.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/TagElement.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/TagElement.java?view=diff&rev=507006&r1=507005&r2=507006
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/TagElement.java (original)
+++ harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/TagElement.java Tue Feb 13 06:02:55 2007
@@ -16,12 +16,19 @@
  */
 /**
  * @author Evgeniya G. Maenkova
- * @version $Revision$
+ * @version $Revision: 1.6 $
  */
 package javax.swing.text.html.parser;
 
 import javax.swing.text.html.HTML;
+import javax.swing.text.html.HTML.Tag;
 
+/**
+ * @author Diego Raúl Mercado
+ * @author Alejandro Sánchez
+ * @author Alejandro Barturen
+ * @version $Revision: 1.6 $
+ */
 public class TagElement {
     private HTML.Tag tag;
     private Element element;
@@ -31,9 +38,19 @@
                       final boolean fictional) {
         this.element = element;
         isFictional = fictional;
-        tag = HTML.getTag(element.name.toLowerCase());
-        if (tag == null) {
-            tag = new HTML.UnknownTag(element.name.toLowerCase());
+        
+        // HTML.getTag() creates an element if it is not defined in 
+        // HTML.getAllTags(). Because of this we have to look up at Tag[] array 
+        Tag[] tags = HTML.getAllTags();
+        boolean found = false;
+        for (int i = 0; i < tags.length; i++) {
+            if (tags[i].toString().equals(element.name)) {
+                tag = HTML.getTag(element.name);
+                found = true;
+            }
+        }
+        if (!found) {
+            tag = new HTML.UnknownTag(element.name);
         }
     }
 

Added: harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/html32.bdtd
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/html32.bdtd?view=auto&rev=507006
==============================================================================
Binary file - no diff available.

Propchange: harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/html32.bdtd
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/transitional401.bdtd
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/transitional401.bdtd?view=diff&rev=507006&r1=507005&r2=507006
==============================================================================
Binary files - no diff available.



Re: svn commit: r507006 [5/5] - in /harmony/enhanced/classlib/trunk/modules/swing: ./ src/main/java/common/javax/swing/text/html/parser/

Posted by Alexei Zakharov <al...@gmail.com>.
Yeah, thnx. BTW some other files also need updating. Fixed in 507035.

Regards,

2007/2/13, Alexey Petrenko <al...@gmail.com>:
> Alexei,
>
> it look like you need to add Apache header to
> trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/ParserCup.java
> file.
>
> SY, Alexey
>
> 2007/2/13, ayza@apache.org <ay...@apache.org>:
> > Added: harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/ParserCup.java
> > URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/ParserCup.java?view=auto&rev=507006
> >

-- 
Alexei Zakharov,
Intel ESSD

Re: svn commit: r507006 [5/5] - in /harmony/enhanced/classlib/trunk/modules/swing: ./ src/main/java/common/javax/swing/text/html/parser/

Posted by Alexey Petrenko <al...@gmail.com>.
Alexei,

it look like you need to add Apache header to
trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/ParserCup.java
file.

SY, Alexey

2007/2/13, ayza@apache.org <ay...@apache.org>:
> Added: harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/ParserCup.java
> URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/ParserCup.java?view=auto&rev=507006
> ==============================================================================
> --- harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/ParserCup.java (added)
> +++ harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/ParserCup.java Tue Feb 13 06:02:55 2007
> @@ -0,0 +1,1137 @@
> +
> +//----------------------------------------------------
> +// The following code was generated by CUP v0.11a beta 20060102
> +// Wed Dec 20 21:02:26 ART 2006
> +//----------------------------------------------------
> +
> +package javax.swing.text.html.parser;
> +
> +import java_cup.runtime.*;
> +import java.lang.reflect.Field;
> +import java.util.ArrayList;
> +import java.util.List;
> +import java.math.BigInteger;
> +
> +/** CUP v0.11a beta 20060102 generated parser.
> +  * @version Wed Dec 20 21:02:26 ART 2006
> +  */
> +class ParserCup extends java_cup.runtime.lr_parser {
> +
> +  /** Default constructor. */
> +  public ParserCup() {super();}
> +
> +  /** Constructor which sets the default scanner. */
> +  public ParserCup(java_cup.runtime.Scanner s) {super(s);}
> +
> +  /** Production table. */
> +  protected static final short _production_table[][] =
> +    unpackFromStrings(new String[] {
> +    "\000\070\000\002\002\004\000\002\002\004\000\002\002" +
> +    "\003\000\002\003\003\000\002\003\003\000\002\003\003" +
> +    "\000\002\003\003\000\002\003\003\000\002\003\003\000" +
> +    "\002\003\003\000\002\003\003\000\002\003\003\000\002" +
> +    "\004\003\000\002\004\003\000\002\004\003\000\002\005" +
> +    "\004\000\002\032\004\000\002\006\004\000\002\013\003" +
> +    "\000\002\013\004\000\002\031\004\000\002\007\005\000" +
> +    "\002\007\004\000\002\011\005\000\002\012\004\000\002" +
> +    "\012\003\000\002\012\002\000\002\010\006\000\002\014" +
> +    "\003\000\002\014\004\000\002\021\004\000\002\021\004" +
> +    "\000\002\021\004\000\002\022\003\000\002\022\003\000" +
> +    "\002\015\003\000\002\015\005\000\002\015\010\000\002" +
> +    "\026\004\000\002\020\003\000\002\020\004\000\002\016" +
> +    "\003\000\002\016\005\000\002\024\003\000\002\024\005" +
> +    "\000\002\017\004\000\002\017\002\000\002\023\004\000" +
> +    "\002\030\003\000\002\030\003\000\002\030\002\000\002" +
> +    "\027\003\000\002\034\002\000\002\027\005\000\002\025" +
> +    "\003\000\002\025\003" });
> +
> +  /** Access to production table. */
> +  public short[][] production_table() {return _production_table;}
> +
> +  /** Parse-action table. */
> +  protected static final short[][] _action_table =
> +    unpackFromStrings(new String[] {
> +    "\000\104\000\024\003\015\004\016\016\025\017\013\020" +
> +    "\014\022\022\033\005\034\024\035\011\001\002\000\026" +
> +    "\002\ufffa\003\ufffa\004\ufffa\016\ufffa\017\ufffa\020\ufffa\022" +
> +    "\ufffa\033\ufffa\034\ufffa\035\ufffa\001\002\000\026\002\ufff6" +
> +    "\003\ufff6\004\ufff6\016\ufff6\017\ufff6\020\ufff6\022\ufff6\033" +
> +    "\ufff6\034\ufff6\035\ufff6\001\002\000\026\002\ufff3\003\ufff3" +
> +    "\004\ufff3\016\ufff3\017\ufff3\020\ufff3\022\ufff3\033\ufff3\034" +
> +    "\ufff3\035\ufff3\001\002\000\026\002\ufff5\003\ufff5\004\ufff5" +
> +    "\016\ufff5\017\ufff5\020\ufff5\022\ufff5\033\ufff5\034\ufff5\035" +
> +    "\ufff5\001\002\000\026\002\ufffd\003\ufffd\004\ufffd\016\ufffd" +
> +    "\017\ufffd\020\ufffd\022\ufffd\033\ufffd\034\ufffd\035\ufffd\001" +
> +    "\002\000\026\002\ufff7\003\ufff7\004\ufff7\016\ufff7\017\ufff7" +
> +    "\020\ufff7\022\ufff7\033\ufff7\034\ufff7\035\ufff7\001\002\000" +
> +    "\026\002\ufff4\003\ufff4\004\ufff4\016\ufff4\017\ufff4\020\ufff4" +
> +    "\022\ufff4\033\ufff4\034\ufff4\035\ufff4\001\002\000\010\006" +
> +    "\uffcf\032\050\033\046\001\002\000\014\006\uffcf\013\uffcf" +
> +    "\023\uffcf\032\050\033\046\001\002\000\004\006\103\001" +
> +    "\002\000\026\002\ufff8\003\ufff8\004\ufff8\016\ufff8\017\ufff8" +
> +    "\020\ufff8\022\ufff8\033\ufff8\034\ufff8\035\ufff8\001\002\000" +
> +    "\006\006\101\013\102\001\002\000\026\002\ufffe\003\ufffe" +
> +    "\004\ufffe\016\ufffe\017\ufffe\020\ufffe\022\ufffe\033\ufffe\034" +
> +    "\ufffe\035\ufffe\001\002\000\026\002\ufffb\003\ufffb\004\ufffb" +
> +    "\016\ufffb\017\ufffb\020\ufffb\022\ufffb\033\ufffb\034\ufffb\035" +
> +    "\ufffb\001\002\000\026\002\ufffc\003\ufffc\004\ufffc\016\ufffc" +
> +    "\017\ufffc\020\ufffc\022\ufffc\033\ufffc\034\ufffc\035\ufffc\001" +
> +    "\002\000\010\006\uffef\013\uffef\023\044\001\002\000\026" +
> +    "\002\ufff9\003\ufff9\004\ufff9\016\ufff9\017\ufff9\020\ufff9\022" +
> +    "\ufff9\033\ufff9\034\ufff9\035\ufff9\001\002\000\010\006\uffe7" +
> +    "\012\034\030\032\001\002\000\026\002\uffff\003\uffff\004" +
> +    "\uffff\016\uffff\017\uffff\020\uffff\022\uffff\033\uffff\034\uffff" +
> +    "\035\uffff\001\002\000\026\002\030\003\015\004\016\016" +
> +    "\025\017\013\020\014\022\022\033\005\034\024\035\011" +
> +    "\001\002\000\004\002\001\001\002\000\026\002\000\003" +
> +    "\000\004\000\016\000\017\000\020\000\022\000\033\000" +
> +    "\034\000\035\000\001\002\000\006\006\uffe8\031\040\001" +
> +    "\002\000\004\006\037\001\002\000\004\021\035\001\002" +
> +    "\000\004\014\036\001\002\000\026\002\uffe6\003\uffe6\004" +
> +    "\uffe6\016\uffe6\017\uffe6\020\uffe6\022\uffe6\033\uffe6\034\uffe6" +
> +    "\035\uffe6\001\002\000\026\002\uffea\003\uffea\004\uffea\016" +
> +    "\uffea\017\uffea\020\uffea\022\uffea\033\uffea\034\uffea\035\uffea" +
> +    "\001\002\000\004\006\uffe9\001\002\000\012\006\uffde\007" +
> +    "\055\013\uffde\023\uffd8\001\002\000\004\023\044\001\002" +
> +    "\000\006\006\uffe5\013\uffe5\001\002\000\016\006\uffcf\007" +
> +    "\uffcf\013\uffcf\023\uffcf\032\050\033\046\001\002\000\006" +
> +    "\006\uffee\013\uffee\001\002\000\024\006\uffd0\007\uffd0\010" +
> +    "\uffd0\011\uffd0\013\uffd0\023\uffd0\025\uffd0\026\uffd0\027\uffd0" +
> +    "\001\002\000\024\006\uffd1\007\uffd1\010\uffd1\011\uffd1\013" +
> +    "\uffd1\023\uffd1\025\uffd1\026\uffd1\027\uffd1\001\002\000\026" +
> +    "\006\uffce\007\uffce\010\uffce\011\uffce\013\uffce\023\uffce\025" +
> +    "\uffce\026\uffce\027\uffce\032\uffcd\001\002\000\012\006\uffdb" +
> +    "\007\uffdb\013\uffdb\023\uffdb\001\002\000\004\032\050\001" +
> +    "\002\000\024\006\uffcc\007\uffcc\010\uffcc\011\uffcc\013\uffcc" +
> +    "\023\uffcc\025\uffcc\026\uffcc\027\uffcc\001\002\000\006\006" +
> +    "\uffe4\013\uffe4\001\002\000\014\010\060\011\064\025\061" +
> +    "\026\056\027\062\001\002\000\026\006\uffcf\010\uffcf\011" +
> +    "\uffcf\013\uffcf\023\uffcf\025\uffcf\026\uffcf\027\uffcf\032\050" +
> +    "\033\046\001\002\000\022\006\uffdd\010\060\011\064\013" +
> +    "\uffdd\023\uffd6\025\061\026\056\027\062\001\002\000\030" +
> +    "\006\uffcb\010\uffcb\011\uffcb\013\uffcb\023\uffcb\024\uffcb\025" +
> +    "\uffcb\026\uffcb\027\uffcb\032\uffcb\033\uffcb\001\002\000\026" +
> +    "\006\uffcf\010\uffcf\011\uffcf\013\uffcf\023\uffcf\025\uffcf\026" +
> +    "\uffcf\027\uffcf\032\050\033\046\001\002\000\026\006\uffcf" +
> +    "\010\uffcf\011\uffcf\013\uffcf\023\uffcf\025\uffcf\026\uffcf\027" +
> +    "\uffcf\032\050\033\046\001\002\000\022\006\uffda\010\uffda" +
> +    "\011\uffda\013\uffda\023\uffda\025\uffda\026\uffda\027\uffda\001" +
> +    "\002\000\030\006\uffca\010\uffca\011\uffca\013\uffca\023\uffca" +
> +    "\024\uffca\025\uffca\026\uffca\027\uffca\032\uffca\033\uffca\001" +
> +    "\002\000\004\023\uffd7\001\002\000\010\010\uffd3\011\uffd3" +
> +    "\024\uffd3\001\002\000\010\010\060\011\064\024\071\001" +
> +    "\002\000\014\006\uffcf\013\uffcf\023\uffd5\032\050\033\046" +
> +    "\001\002\000\010\010\uffd4\011\uffd4\024\uffd4\001\002\000" +
> +    "\006\006\uffdc\013\uffdc\001\002\000\022\006\uffe1\010\uffe1" +
> +    "\011\uffe1\013\uffe1\023\uffe1\025\uffe1\026\uffe1\027\uffe1\001" +
> +    "\002\000\022\006\uffe2\010\uffe2\011\uffe2\013\uffe2\023\uffe2" +
> +    "\025\uffe2\026\uffe2\027\uffe2\001\002\000\022\006\uffd9\010" +
> +    "\uffd9\011\uffd9\013\uffd9\023\uffd9\025\uffd9\026\uffd9\027\uffd9" +
> +    "\001\002\000\022\006\uffdf\010\uffdf\011\uffdf\013\uffdf\023" +
> +    "\uffdf\025\uffdf\026\uffdf\027\uffdf\001\002\000\022\006\uffe0" +
> +    "\010\uffe0\011\uffe0\013\uffe0\023\uffe0\025\uffe0\026\uffe0\027" +
> +    "\uffe0\001\002\000\022\006\uffe3\010\uffe3\011\uffe3\013\uffe3" +
> +    "\023\uffe3\025\uffe3\026\uffe3\027\uffe3\001\002\000\026\002" +
> +    "\ufff2\003\ufff2\004\ufff2\016\ufff2\017\ufff2\020\ufff2\022\ufff2" +
> +    "\033\ufff2\034\ufff2\035\ufff2\001\002\000\026\002\ufff0\003" +
> +    "\ufff0\004\ufff0\016\ufff0\017\ufff0\020\ufff0\022\ufff0\033\ufff0" +
> +    "\034\ufff0\035\ufff0\001\002\000\026\002\uffeb\003\uffeb\004" +
> +    "\uffeb\016\uffeb\017\uffeb\020\uffeb\022\uffeb\033\uffeb\034\uffeb" +
> +    "\035\uffeb\001\002\000\010\006\uffed\013\uffed\023\uffed\001" +
> +    "\002\000\004\006\106\001\002\000\026\002\uffec\003\uffec" +
> +    "\004\uffec\016\uffec\017\uffec\020\uffec\022\uffec\033\uffec\034" +
> +    "\uffec\035\uffec\001\002" });
> +
> +  /** Access to parse-action table. */
> +  public short[][] action_table() {return _action_table;}
> +
> +  /** <code>reduce_goto</code> table. */
> +  protected static final short[][] _reduce_table =
> +    unpackFromStrings(new String[] {
> +    "\000\104\000\030\002\026\003\025\004\017\005\006\006" +
> +    "\011\007\007\010\003\011\020\013\016\031\022\033\005" +
> +    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
> +    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
> +    "\000\002\001\001\000\006\027\046\030\104\001\001\000" +
> +    "\006\027\046\030\103\001\001\000\002\001\001\000\002" +
> +    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
> +    "\001\000\002\001\001\000\012\014\044\015\042\016\041" +
> +    "\026\040\001\001\000\002\001\001\000\004\012\032\001" +
> +    "\001\000\002\001\001\000\026\003\030\004\017\005\006" +
> +    "\006\011\007\007\010\003\011\020\013\016\031\022\033" +
> +    "\005\001\001\000\002\001\001\000\002\001\001\000\002" +
> +    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
> +    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
> +    "\000\002\001\001\000\012\014\053\015\042\016\041\026" +
> +    "\040\001\001\000\002\001\001\000\006\027\046\030\050" +
> +    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
> +    "\001\000\004\034\051\001\001\000\002\001\001\000\004" +
> +    "\027\052\001\001\000\002\001\001\000\002\001\001\000" +
> +    "\012\020\056\021\062\024\064\025\065\001\001\000\006" +
> +    "\027\046\030\077\001\001\000\010\021\076\022\074\025" +
> +    "\075\001\001\000\002\001\001\000\006\027\046\030\073" +
> +    "\001\001\000\006\027\046\030\072\001\001\000\002\001" +
> +    "\001\000\002\001\001\000\002\001\001\000\004\017\066" +
> +    "\001\001\000\004\025\067\001\001\000\006\027\046\030" +
> +    "\071\001\001\000\002\001\001\000\002\001\001\000\002" +
> +    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
> +    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
> +    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
> +    "\002\001\001\000\002\001\001" });
> +
> +  /** Access to <code>reduce_goto</code> table. */
> +  public short[][] reduce_table() {return _reduce_table;}
> +
> +  /** Instance of action encapsulation class. */
> +  protected CUP$ParserCup$actions action_obj;
> +
> +  /** Action encapsulation object initializer. */
> +  protected void init_actions()
> +    {
> +      action_obj = new CUP$ParserCup$actions(this);
> +    }
> +
> +  /** Invoke a user supplied parse action. */
> +  public java_cup.runtime.Symbol do_action(
> +    int                        act_num,
> +    java_cup.runtime.lr_parser parser,
> +    java.util.Stack            stack,
> +    int                        top)
> +    throws java.lang.Exception
> +  {
> +    /* call code in generated class */
> +    return action_obj.CUP$ParserCup$do_action(act_num, parser, stack, top);
> +  }
> +
> +  /** Indicates start state. */
> +  public int start_state() {return 0;}
> +  /** Indicates start production. */
> +  public int start_production() {return 0;}
> +
> +  /** <code>EOF</code> Symbol index. */
> +  public int EOF_sym() {return 0;}
> +
> +  /** <code>error</code> Symbol index. */
> +  public int error_sym() {return 1;}
> +
> +
> +
> +
> +       /**
> +        * A local reference to the ParserHandler.
> +        */
> +       private ParserHandler ph;
> +
> +       /**
> +        * Receives the ParserHandler were the callback methods will be invoked.
> +        */
> +       public void setCallBack (ParserHandler ph) {
> +               this.ph = ph;
> +       }
> +
> +       /**
> +        * Sets the ParserHandler of the action manager before processing any symbol.
> +        */
> +       public void user_init() {
> +               action_obj.setHandler(ph);
> +       }
> +
> +
> +       public void     report_fatal_error(final String message, final Object info){
> +               ph.reportRemainingElements();
> +       }
> +
> +       public void     report_error(final String message, final Object info){
> +
> +       }
> +
> +
> +
> +}
> +
> +/** Cup generated class to encapsulate user supplied action code.*/
> +class CUP$ParserCup$actions {
> +
> +
> +
> +       /**
> +        * A local reference of the ParserHandler in the action manager.
> +        */
> +       private ParserHandler ph;
> +
> +       /**
> +        * It sets the ParserHandler for this action manager.
> +        */
> +       public void setHandler (final ParserHandler ph) {
> +               this.ph = ph;
> +       }
> +
> +       /**
> +        * This idicates whether the las tag was successfully created or not
> +        */
> +       private static boolean lastStartTagCreatedOk;
> +
> +       public boolean isLastStartTagCreatedOk(){
> +               return lastStartTagCreatedOk;
> +       }
> +
> +  private final ParserCup parser;
> +
> +  /** Constructor */
> +  CUP$ParserCup$actions(ParserCup parser) {
> +    this.parser = parser;
> +  }
> +
> +  /** Method with the actual generated action code. */
> +  public final java_cup.runtime.Symbol CUP$ParserCup$do_action(
> +    int                        CUP$ParserCup$act_num,
> +    java_cup.runtime.lr_parser CUP$ParserCup$parser,
> +    java.util.Stack            CUP$ParserCup$stack,
> +    int                        CUP$ParserCup$top)
> +    throws java.lang.Exception
> +    {
> +      /* Symbol object for return from actions */
> +      java_cup.runtime.Symbol CUP$ParserCup$result;
> +
> +      /* select the action based on the action number */
> +      switch (CUP$ParserCup$act_num)
> +        {
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 55: // qm ::= SQM
> +            {
> +              Character RESULT = null;
> +               int quotemarkleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
> +               int quotemarkright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
> +               Character quotemark = (Character)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
> +
> +                                       RESULT = quotemark;
> +
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(19/*qm*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 54: // qm ::= DQM
> +            {
> +              Character RESULT = null;
> +               int quotemarkleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
> +               int quotemarkright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
> +               Character quotemark = (Character)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
> +
> +                                       RESULT = quotemark;
> +
> +
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(19/*qm*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 53: // lexicalerrors ::= LEXERR NT$0 lexicalerrors
> +            {
> +              List<String> RESULT = null;
> +              // propagate RESULT from NT$0
> +              if ( ((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).value != null )
> +                RESULT = (List<String>) ((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).value;
> +               int error1left = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).left;
> +               int error1right = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).right;
> +               String error1 = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).value;
> +               int error2left = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
> +               int error2right = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
> +               List<String> error2 = (List<String>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
> +
> +                                               RESULT.addAll(error2);
> +
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(21/*lexicalerrors*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 52: // NT$0 ::=
> +            {
> +              Object RESULT = null;
> +               int error1left = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
> +               int error1right = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
> +               String error1 = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
> +
> +                                               List<String> list = new ArrayList<String>();
> +                                               list.add(error1);
> +                                               RESULT = list;
> +
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(26/*NT$0*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 51: // lexicalerrors ::= LEXERR
> +            {
> +              List<String> RESULT = null;
> +               int error1left = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
> +               int error1right = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
> +               String error1 = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
> +
> +                                               List<String> list = new ArrayList<String>();
> +                                               list.add(error1);
> +                                               RESULT = list;
> +
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(21/*lexicalerrors*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 50: // optional_lexicalerrors ::=
> +            {
> +              List<String> RESULT = null;
> +
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(22/*optional_lexicalerrors*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 49: // optional_lexicalerrors ::= EOFTK
> +            {
> +              List<String> RESULT = null;
> +               int tokenleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
> +               int tokenright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
> +               String token = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
> +
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(22/*optional_lexicalerrors*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 48: // optional_lexicalerrors ::= lexicalerrors
> +            {
> +              List<String> RESULT = null;
> +               int error2left = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
> +               int error2right = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
> +               List<String> error2 = (List<String>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
> +
> +                                                               RESULT = error2;
> +
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(22/*optional_lexicalerrors*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 47: // attrval_lit ::= ATTRVAL_LIT optional_lexicalerrors
> +            {
> +              Pair<Object,List<String>> RESULT = null;
> +               int nextLitleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left;
> +               int nextLitright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).right;
> +               String nextLit = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).value;
> +               int error1left = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
> +               int error1right = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
> +               List<String> error1 = (List<String>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
> +
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(17/*attrval_lit*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 46: // literal ::=
> +            {
> +              String RESULT = null;
> +                RESULT = new String ("");
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(13/*literal*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 45: // literal ::= literal ATTRVAL_LIT
> +            {
> +              String RESULT = null;
> +               int prevLitleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left;
> +               int prevLitright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).right;
> +               String prevLit = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).value;
> +               int nextLitleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
> +               int nextLitright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
> +               String nextLit = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
> +                RESULT = prevLit + nextLit;
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(13/*literal*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 44: // mult_attr_value ::= qm literal qm
> +            {
> +              Pair<Object,List<String>> RESULT = null;
> +               int attrValueleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left;
> +               int attrValueright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).right;
> +               String attrValue = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).value;
> +
> +
> +                                               RESULT = new Pair(attrValue, new ArrayList());
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(18/*mult_attr_value*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 43: // mult_attr_value ::= single_attr_value
> +            {
> +              Pair<Object,List<String>> RESULT = null;
> +               int attrValueleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
> +               int attrValueright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
> +               Pair<Object,List<String>> attrValue = (Pair<Object,List<String>>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
> +                RESULT = attrValue;
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(18/*mult_attr_value*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 42: // mult_attr ::= attribute_name EQUALS mult_attr_value
> +            {
> +              HTMLAttributeList RESULT = null;
> +               int attrNameleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).left;
> +               int attrNameright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).right;
> +               Pair<String,List<String>> attrName = (Pair<String,List<String>>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).value;
> +               int attrValueleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
> +               int attrValueright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
> +               Pair<Object,List<String>> attrValue = (Pair<Object,List<String>>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
> +
> +                                       List<String> array= new ArrayList<String>();
> +
> +                                               if(attrName.getSecond()!=null)
> +                                                       array.addAll(attrName.getSecond());
> +                                               if(attrValue.getSecond()!=null)
> +                                                       array.addAll(attrValue.getSecond());
> +                                        RESULT = new HTMLAttributeList (attrName.getFirst(), attrValue.getFirst(), attrNameright, attrValueright, null,attrName.getSecond());
> +
> +
> +
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(12/*mult_attr*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 41: // mult_attr ::= attribute_name
> +            {
> +              HTMLAttributeList RESULT = null;
> +               int attrNameleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
> +               int attrNameright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
> +               Pair<String,List<String>> attrName = (Pair<String,List<String>>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
> +                RESULT = new HTMLAttributeList (attrName.getFirst(), null, attrNameleft, attrNameright, null,attrName.getSecond());
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(12/*mult_attr*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 40: // single_attr_value ::= single_attr_value any_value
> +            {
> +              Pair<Object,List<String>> RESULT = null;
> +               int prevAttrValueleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left;
> +               int prevAttrValueright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).right;
> +               Pair<Object,List<String>> prevAttrValue = (Pair<Object,List<String>>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).value;
> +               int newAttrValueleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
> +               int newAttrValueright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
> +               Pair<Object,List<String>> newAttrValue = (Pair<Object,List<String>>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
> +
> +                                               List<String> array= new ArrayList<String>();
> +                                               if(prevAttrValue!=null && prevAttrValue.getSecond()!=null) {
> +                                                       array.addAll(prevAttrValue.getSecond());
> +                                               }
> +                                               if(newAttrValue!=null && newAttrValue.getSecond()!=null) {
> +                                                       array.addAll(newAttrValue.getSecond());
> +                                               }
> +                                               Pair<Object,List<String>> pair = new Pair<Object,List<String>>((prevAttrValue !=null ?prevAttrValue.getFirst().toString() : "") + (newAttrValue!=null ? newAttrValue.getFirst().toString() : ""),array);
> +                                               RESULT = pair;
> +
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(14/*single_attr_value*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 39: // single_attr_value ::= any_no_lit
> +            {
> +              Pair<Object,List<String>> RESULT = null;
> +               int attrValueleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
> +               int attrValueright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
> +               Pair<Object,List<String>> attrValue = (Pair<Object,List<String>>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
> +                RESULT = attrValue;
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(14/*single_attr_value*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 38: // attribute_name ::= ATTR_NAME optional_lexicalerrors
> +            {
> +              Pair<String,List<String>> RESULT = null;
> +               int attrNameTkleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left;
> +               int attrNameTkright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).right;
> +               String attrNameTk = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).value;
> +               int error1left = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
> +               int error1right = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
> +               List<String> error1 = (List<String>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
> +
> +                                               RESULT = new Pair(attrNameTk,error1 );
> +
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(20/*attribute_name*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 37: // single_attr ::= attribute_name EQUALS qm literal qm optional_lexicalerrors
> +            {
> +              HTMLAttributeList RESULT = null;
> +               int attrNameleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-5)).left;
> +               int attrNameright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-5)).right;
> +               Pair<String,List<String>> attrName = (Pair<String,List<String>>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-5)).value;
> +               int attrValueleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).left;
> +               int attrValueright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).right;
> +               String attrValue = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).value;
> +               int error1left = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
> +               int error1right = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
> +               List<String> error1 = (List<String>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
> +
> +                                               List<String> array= new ArrayList<String>();
> +
> +                                               if(attrName.getSecond()!=null) {
> +                                                       array.addAll(attrName.getSecond());
> +                                               }
> +                                               if(error1!=null) {
> +                                                       array.addAll(error1);
> +                                               }
> +                                               RESULT = new HTMLAttributeList (attrName.getFirst(), attrValue, attrNameleft, attrValueright, null,array);
> +
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(11/*single_attr*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-5)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 36: // single_attr ::= attribute_name EQUALS single_attr_value
> +            {
> +              HTMLAttributeList RESULT = null;
> +               int attrNameleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).left;
> +               int attrNameright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).right;
> +               Pair<String,List<String>> attrName = (Pair<String,List<String>>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).value;
> +               int attrValueleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
> +               int attrValueright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
> +               Pair<Object,List<String>> attrValue = (Pair<Object,List<String>>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
> +
> +                                               List<String> array= new ArrayList<String>();
> +
> +                                               if(attrName.getSecond()!=null) {
> +                                                       array.addAll(attrName.getSecond());
> +                                               }
> +                                               if(attrValue.getSecond()!=null) {
> +                                                       array.addAll(attrValue.getSecond());
> +                                               }
> +                                               RESULT = new HTMLAttributeList (attrName.getFirst(), attrValue.getFirst(), attrNameleft, attrValueright, null,array);
> +
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(11/*single_attr*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 35: // single_attr ::= attribute_name
> +            {
> +              HTMLAttributeList RESULT = null;
> +               int attrNameleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
> +               int attrNameright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
> +               Pair<String,List<String>> attrName = (Pair<String,List<String>>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
> +                RESULT = new HTMLAttributeList (attrName.getFirst(), null, attrNameleft, attrNameright, null,attrName.getSecond());
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(11/*single_attr*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 34: // any_value ::= qm
> +            {
> +              Pair<Object,List<String>> RESULT = null;
> +
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(16/*any_value*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 33: // any_value ::= any_no_lit
> +            {
> +              Pair<Object,List<String>> RESULT = null;
> +               int anyValueleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
> +               int anyValueright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
> +               Pair<Object,List<String>> anyValue = (Pair<Object,List<String>>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
> +                RESULT = anyValue;
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(16/*any_value*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 32: // any_no_lit ::= ATTRVAL_NUM optional_lexicalerrors
> +            {
> +              Pair<Object,List<String>> RESULT = null;
> +               int attrValueTokenleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left;
> +               int attrValueTokenright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).right;
> +               String attrValueToken = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).value;
> +               int error1left = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
> +               int error1right = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
> +               List<String> error1 = (List<String>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
> +
> +                                               RESULT = new Pair(attrValueToken,error1);
> +
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(15/*any_no_lit*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 31: // any_no_lit ::= ATTRVAL_NMTK optional_lexicalerrors
> +            {
> +              Pair<Object,List<String>> RESULT = null;
> +               int attrValueTokenleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left;
> +               int attrValueTokenright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).right;
> +               String attrValueToken = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).value;
> +               int error1left = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
> +               int error1right = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
> +               List<String> error1 = (List<String>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
> +
> +                                               RESULT = new Pair(attrValueToken,error1);
> +
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(15/*any_no_lit*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 30: // any_no_lit ::= ATTRVAL_NUMTK optional_lexicalerrors
> +            {
> +              Pair<Object,List<String>> RESULT = null;
> +               int attrValueTokenleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left;
> +               int attrValueTokenright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).right;
> +               String attrValueToken = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).value;
> +               int error1left = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
> +               int error1right = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
> +               List<String> error1 = (List<String>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
> +
> +                                               RESULT = new Pair(attrValueToken,error1);
> +
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(15/*any_no_lit*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 29: // atts ::= mult_attr atts
> +            {
> +              HTMLAttributeList RESULT = null;
> +               int attrleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left;
> +               int attrright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).right;
> +               HTMLAttributeList attr = (HTMLAttributeList)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).value;
> +               int attrListleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
> +               int attrListright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
> +               HTMLAttributeList attrList = (HTMLAttributeList)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
> +                attr.setNext (attrList);
> +                                          RESULT =  attr;
> +
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(10/*atts*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 28: // atts ::= single_attr
> +            {
> +              HTMLAttributeList RESULT = null;
> +               int attrleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
> +               int attrright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
> +               HTMLAttributeList attr = (HTMLAttributeList)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
> +                RESULT = attr;
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(10/*atts*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 27: // comment ::= TAG_OPEN_EXM COMM COMM_CONTENT TAG_COMM_CLOSE
> +            {
> +              Object RESULT = null;
> +               int initTagleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-3)).left;
> +               int initTagright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-3)).right;
> +               String initTag = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-3)).value;
> +               int commleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).left;
> +               int commright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).right;
> +               String comm = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).value;
> +               int commTextleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left;
> +               int commTextright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).right;
> +               String commText = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).value;
> +               int closeTokenleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
> +               int closeTokenright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
> +               String closeToken = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
> +                ph.iHaveNewComment(new HTMLComment(
> +                                                                                       commText,
> +                                                                                       initTagleft,
> +                                                                                       initTagright));
> +
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(6/*comment*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-3)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 26: // markup_content ::=
> +            {
> +              Pair<String,String> RESULT = null;
> +                RESULT = new Pair<String, String> (null, null);
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(8/*markup_content*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 25: // markup_content ::= MUDECL
> +            {
> +              Pair<String,String> RESULT = null;
> +               int mkDeclleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
> +               int mkDeclright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
> +               String mkDecl = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
> +                RESULT = new Pair<String, String> (mkDecl, null);
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(8/*markup_content*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 24: // markup_content ::= MUDECL MUDECL_CONTENT
> +            {
> +              Pair<String,String> RESULT = null;
> +               int mkDeclleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left;
> +               int mkDeclright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).right;
> +               String mkDecl = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).value;
> +               int mkContleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
> +               int mkContright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
> +               String mkCont = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
> +                RESULT = new Pair<String, String> (mkDecl, mkCont);
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(8/*markup_content*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 23: // markup ::= TAG_OPEN_EXM markup_content TAG_CLOSE
> +            {
> +              Object RESULT = null;
> +               int initTokenleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).left;
> +               int initTokenright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).right;
> +               String initToken = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).value;
> +               int mkContentleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left;
> +               int mkContentright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).right;
> +               Pair<String,String> mkContent = (Pair<String,String>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).value;
> +               int closeTokenleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
> +               int closeTokenright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
> +               Character closeToken = (Character)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
> +                ph.iHaveNewMarkup (new HTMLMarkup(
> +                                                                                       mkContent.getFirst(),
> +                                                                                       mkContent.getSecond(),
> +                                                                                       initTokenleft));
> +
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(7/*markup*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 22: // eelem ::= error TAG_CLOSE
> +            {
> +              Object RESULT = null;
> +
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(5/*eelem*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 21: // eelem ::= END_TAG_NAME optional_lexicalerrors TAG_CLOSE
> +            {
> +              Object RESULT = null;
> +               int initTokenleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).left;
> +               int initTokenright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).right;
> +               String initToken = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).value;
> +               int error1left = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left;
> +               int error1right = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).right;
> +               List<String> error1 = (List<String>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).value;
> +               int closeTokenleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
> +               int closeTokenright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
> +               Character closeToken = (Character)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
> +
> +                                       if(error1!=null){
> +                                               ph.iHaveNewError(HTMLErrorType.ERR_EXPECTED,"\'>\'",null,null);
> +                                       }
> +                                       ph.iHaveNewEndTag(new HTMLTag(HTMLTagType.END, initToken, null, initTokenleft, closeTokenleft,  initTokenleft));
> +
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(5/*eelem*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-2)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 20: // tag_name ::= TAG_NAME optional_lexicalerrors
> +            {
> +              String RESULT = null;
> +               int startElemTokenleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left;
> +               int startElemTokenright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).right;
> +               String startElemToken = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).value;
> +               int error1left = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
> +               int error1right = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
> +               List<String> error1 = (List<String>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
> +
> +                                       if(error1!=null){
> +                                       for(String s:error1){
> +                                               ph.iHaveNewError(HTMLErrorType.ERR_INVALID_TAG_CHAR,s,startElemToken,null);
> +                                       }
> +                               }
> +                               RESULT = startElemToken;
> +
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(23/*tag_name*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 19: // tag_info ::= tag_name atts
> +            {
> +              Pair<String,HTMLAttributeList> RESULT = null;
> +               int startElemTokenleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left;
> +               int startElemTokenright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).right;
> +               String startElemToken = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).value;
> +               int attributesleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
> +               int attributesright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
> +               HTMLAttributeList attributes = (HTMLAttributeList)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
> +
> +                                       if(attributes.getError() != null){
> +                                               for(String s:attributes.getError()){
> +                                                       ph.iHaveNewError(HTMLErrorType.ERR_INVALID_TAG_CHAR,s,startElemToken,null);
> +                                               }
> +                                               /*if(attributes.getAttributeValue()!=null)
> +                                                               ph.iHaveNewError(HTMLErrorType.ERR_ATTVALERR,null,null,null);*/
> +                                       }
> +
> +                                       RESULT = new Pair<String, HTMLAttributeList> (startElemToken, attributes);
> +
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(9/*tag_info*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 18: // tag_info ::= tag_name
> +            {
> +              Pair<String,HTMLAttributeList> RESULT = null;
> +               int startElemTokenleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
> +               int startElemTokenright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
> +               String startElemToken = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
> +                       RESULT = new Pair<String, HTMLAttributeList> (startElemToken, null);
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(9/*tag_info*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 17: // simple_tag ::= tag_info TAG_SLASH_CLOSE
> +            {
> +              Object RESULT = null;
> +               int tagInfoleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left;
> +               int tagInforight = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).right;
> +               Pair<String,HTMLAttributeList> tagInfo = (Pair<String,HTMLAttributeList>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).value;
> +               int closeTokenleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
> +               int closeTokenright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
> +               String closeToken = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
> +                ph.iHaveNewStartTag(new HTMLTag(HTMLTagType.SIMPLE, tagInfo.getFirst(), tagInfo.getSecond(), tagInfoleft, closeTokenleft, tagInforight));
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(4/*simple_tag*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 16: // tag_open ::= TAG_OPEN optional_lexicalerrors
> +            {
> +              Character RESULT = null;
> +               int initTokenleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left;
> +               int initTokenright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).right;
> +               Character initToken = (Character)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).value;
> +               int error1left = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
> +               int error1right = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
> +               List<String> error1 = (List<String>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
> +
> +                                       if(error1 != null){
> +                                               for(String s:error1){
> +                                                       ph.iHaveNewError(HTMLErrorType.ERR_EXPECTED_TAGNAME,null,null,null);
> +                                               }
> +                                       }
> +
> +                                       RESULT = initToken;
> +
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(24/*tag_open*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 15: // start_tag ::= tag_info TAG_CLOSE
> +            {
> +              Object RESULT = null;
> +               int tagInfoleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left;
> +               int tagInforight = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).right;
> +               Pair<String,HTMLAttributeList> tagInfo = (Pair<String,HTMLAttributeList>)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).value;
> +               int closeTokenleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
> +               int closeTokenright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
> +               Character closeToken = (Character)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
> +
> +                                       lastStartTagCreatedOk=true;                                                             // So that the lexer can ask if this was true. Curently, it will always be so, we should write
> +                                       lastStartTagCreatedOk=true;                                                             // So that the lexer can ask if this was true. Curently, it will always be so, we should write
> +                                       ph.iHaveNewStartTag(new HTMLTag(HTMLTagType.START, tagInfo.getFirst(), tagInfo.getSecond(), tagInfoleft, closeTokenleft, tagInforight));
> +
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(3/*start_tag*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 14: // selem ::= bad_tag_open
> +            {
> +              Object RESULT = null;
> +
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(2/*selem*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 13: // selem ::= simple_tag
> +            {
> +              Object RESULT = null;
> +
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(2/*selem*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 12: // selem ::= start_tag
> +            {
> +              Object RESULT = null;
> +
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(2/*selem*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 11: // data ::= EOFTK
> +            {
> +              Object RESULT = null;
> +               int eofTokenleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
> +               int eofTokenright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
> +               String eofToken = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
> +
> +                                       /* finalize the parsing "by hand" */
> +                                       try {
> +                                               parser.done_parsing();
> +                                       } catch (Throwable e) {
> +                                               ph.iHaveNewError(HTMLErrorType.ERR_THROWABLE, eofToken,null,null);
> +                                       }
> +
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(1/*data*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 10: // data ::= LEXERR_EXPECTED_TAG_NAME
> +            {
> +              Object RESULT = null;
> +               int error1left = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
> +               int error1right = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
> +               String error1 = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
> +
> +                                       ph.iHaveNewError(HTMLErrorType.ERR_EXPECTED_TAGNAME,null,null,null);
> +
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(1/*data*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 9: // data ::= SYNC
> +            {
> +              Object RESULT = null;
> +
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(1/*data*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 8: // data ::= EOF_LITERAL
> +            {
> +              Object RESULT = null;
> +               int textoleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
> +               int textoright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
> +               String texto = (String)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
> +               ph.iHaveNewError(HTMLErrorType.ERR_EOF_LITERAL,texto,null,null);
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(1/*data*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 7: // data ::= comment
> +            {
> +              Object RESULT = null;
> +
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(1/*data*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 6: // data ::= markup
> +            {
> +              Object RESULT = null;
> +
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(1/*data*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 5: // data ::= TEXT
> +            {
> +              Object RESULT = null;
> +               int textTokenleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left;
> +               int textTokenright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right;
> +               HTMLText textToken = (HTMLText)((java_cup.runtime.Symbol) CUP$ParserCup$stack.peek()).value;
> +                ph.iHaveNewText(textToken);
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(1/*data*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 4: // data ::= eelem
> +            {
> +              Object RESULT = null;
> +
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(1/*data*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 3: // data ::= selem
> +            {
> +              Object RESULT = null;
> +
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(1/*data*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 2: // doc ::= data
> +            {
> +              Object RESULT = null;
> +
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(0/*doc*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 1: // doc ::= doc data
> +            {
> +              Object RESULT = null;
> +
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(0/*doc*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          return CUP$ParserCup$result;
> +
> +          /*. . . . . . . . . . . . . . . . . . . .*/
> +          case 0: // $START ::= doc EOF
> +            {
> +              Object RESULT = null;
> +               int start_valleft = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left;
> +               int start_valright = ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).right;
> +               Object start_val = (Object)((java_cup.runtime.Symbol) CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).value;
> +               RESULT = start_val;
> +              CUP$ParserCup$result = new java_cup.runtime.Symbol(0/*$START*/, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.elementAt(CUP$ParserCup$top-1)).left, ((java_cup.runtime.Symbol)CUP$ParserCup$stack.peek()).right, RESULT);
> +            }
> +          /* ACCEPT */
> +          CUP$ParserCup$parser.done_parsing();
> +          return CUP$ParserCup$result;
> +
> +          /* . . . . . .*/
> +          default:
> +            throw new Exception(
> +               "Invalid action number found in internal parse table");
> +
> +        }
> +    }
> +}
> +
>
> Propchange: harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/ParserCup.java
> ------------------------------------------------------------------------------
>    svn:eol-style = native
>
> Modified: harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/ParserDelegator.java
> URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/ParserDelegator.java?view=diff&rev=507006&r1=507005&r2=507006
> ==============================================================================
> --- harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/ParserDelegator.java (original)
> +++ harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/ParserDelegator.java Tue Feb 13 06:02:55 2007
> @@ -14,43 +14,131 @@
>  *  See the License for the specific language governing permissions and
>  *  limitations under the License.
>  */
> -/**
> - * @author Evgeniya G. Maenkova
> - * @version $Revision$
> - */
>  package javax.swing.text.html.parser;
>
> +import java.io.DataInputStream;
> +import java.io.File;
> +import java.io.FileInputStream;
>  import java.io.IOException;
>  import java.io.Reader;
>  import java.io.Serializable;
> +import java.net.URL;
>
>  import javax.swing.text.html.HTMLEditorKit;
>
> -public class ParserDelegator extends HTMLEditorKit.Parser implements Serializable {
> -
> -
> +/**
> + * This class is a wrapper of {@link DocumentParser}. <br>
> + * <br>
> + * Internally stores a reference to a DTD ({@link ParserDelegator#defaultDTD})
> + * which is filled with <code>html32.bdtd</code>, a file located at the classpath
> + * with the default DTD content (HTML 3.2) in ASN1 format. Then, instances
> + * a {@link DocumentParser} with this dtd. <br>
> + * <br>
> + * So, when the method
> + * {@link ParserDelegator#parse(Reader, javax.swing.text.html.HTMLEditorKit.ParserCallback, boolean) parse(Reader, HTMLEditorKit.ParserCallback, boolean)}
> + * is invoked, its <em>"delegates"</em> to a {@link DocumentParser}.
> + *
> + * @author Diego Raúl Mercado
> + * @author Alejandro Sánchez
> + * @author Alejandro Barturen
> + * @version $Revision: 1.12 $
> + */
> +public class ParserDelegator extends HTMLEditorKit.Parser implements
> +        Serializable {
>
> +    /**
> +     * The name of the default dtd.
> +     */
> +    private static final String DEFAULT_DTD_NAME = "html32";
> +
> +    /**
> +     * Stores the default DTD (the content of the file <code>html32.bdtd</code>).
> +     */
> +    private static DTD defaultDTD;
> +
> +    /**
> +     * Sets {@link ParserDelegator#defaultDTD} with the <code>html32.bdtd</code>
> +     * file by calling the method {@link ParserDelegator#setDefaultDTD()}.
> +     */
>     public ParserDelegator() {
> -        throw new UnsupportedOperationException("Not implemented");
> +        setDefaultDTD();
>     }
>
> -
> -    public void parse(final Reader a0, final HTMLEditorKit.ParserCallback a1, final boolean a2) throws IOException {
> -        throw new UnsupportedOperationException("Not implemented");
> -
> +    /**
> +     * Simply calls the method
> +     * {@link javax.swing.text.html.parser.DocumentParser#parse(Reader, javax.swing.text.html.HTMLEditorKit.ParserCallback, boolean) parse(Reader, HTMLEditorKit.ParserCallback, boolean)}
> +     * of the wrapped {@link javax.swing.text.html.parser.DocumentParser} with
> +     * the same arguments
> +     *
> +     * @param r
> +     *            the reader
> +     * @param cb
> +     *            the callback
> +     * @param ignoreCharSet
> +     *            the ignoreCharSet
> +     * @throws IOException
> +     *             if the {@link DocumentParser} propagates it
> +     */
> +    public void parse(final Reader r, final HTMLEditorKit.ParserCallback cb,
> +            final boolean ignoreCharSet) throws IOException {
> +        DocumentParser dp = new DocumentParser(defaultDTD);
> +        dp.parse(r, cb, ignoreCharSet);
>     }
>
> -
> -    protected static DTD createDTD(final DTD a0, final String a1) {
> -        throw new UnsupportedOperationException("Not implemented");
> -
> +    /**
> +     * Reads the DTD content from the file called <code>name</code> + "bdtd"
> +     * located in the classpath (if there is any) and fills the <code>dtd</code>
> +     * with it. Then, returns <code>dtd</code>. <br>
> +     * <br>
> +     * The complete behavior is the following:
> +     * <ol>
> +     * <li> Finds the resource (the ASN1 binary file) in the classpath by
> +     * appending ".bdtd" to <code>name</code>.
> +     * <li> Creates an stream from this file and adds the information contained
> +     * into <code>dtd</code> by calling its {@link DTD#read(DataInputStream)}
> +     * method
> +     * <li> Returns the <code>dtd</code>
> +     * </ol>
> +     * <br>
> +     * Notice that this method catches any {@link Exception} and ignores it.
> +     * It's the same behavior as the reference implementation.
> +     *
> +     * @param dtd
> +     *            the dtd to be filled
> +     * @param name
> +     *            the name of the file located in the classpath (without .bdtd)
> +     * @return the <code>dtd</code>
> +     */
> +    protected static DTD createDTD(final DTD dtd, final String name) {
> +        try {
> +            String oldName = dtd.name;
> +            // gets the location of the harcoded file that is located in the
> +            // classpath ...
> +            URL bdtdURL = ParserDelegator.class.getResource(name + ".bdtd");
> +            // fills the DTD ...
> +            dtd.read(new DataInputStream(
> +                    new FileInputStream(new File(bdtdURL.toURI()))));
> +            dtd.name = oldName;
> +            DTD.putDTDHash(name, dtd);
> +        } catch (Exception e) {
> +            // ignores any exception (same as Reference Implementation)
> +        }
> +        return dtd;
>     }
>
> -
> +    /**
> +     * Sets the content of {@link ParserDelegator#defaultDTD}. Internally,
> +     * calls {@link ParserDelegator#createDTD(DTD, String)} with
> +     * {@link ParserDelegator#defaultDTD} and
> +     * {@link ParserDelegator#DEFAULT_DTD_NAME} as arguments.
> +     *
> +     * Notice that {@link ParserDelegator#defaultDTD} is cached. It means that
> +     * it's filled only once.
> +     */
>     protected static synchronized void setDefaultDTD() {
> -        throw new UnsupportedOperationException("Not implemented");
> -
> +        if (defaultDTD == null) {
> +            defaultDTD = new DTD(DEFAULT_DTD_NAME);
> +            createDTD(defaultDTD, DEFAULT_DTD_NAME);
> +        }
>     }
> -
> -}
> -
> +}
> \ No newline at end of file
>
> Added: harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/ParserHandler.java
> URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/ParserHandler.java?view=auto&rev=507006
> ==============================================================================
> --- harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/ParserHandler.java (added)
> +++ harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/ParserHandler.java Tue Feb 13 06:02:55 2007
> @@ -0,0 +1,50 @@
> +/*
> + *  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.
> + */
> +
> +package javax.swing.text.html.parser;
> +
> +import java.io.IOException;
> +import java.io.Reader;
> +
> +import javax.swing.text.ChangedCharSetException;
> +
> +/**
> + * @author Diego Raúl Mercado
> + * @author Alejandro Sánchez
> + * @author Alejandro Barturen
> + * @version $Revision: 1.23 $
> + */
> +interface ParserHandler {
> +    void parse(Reader in) throws IOException;
> +
> +    // called by DocumentParser at the end
> +    String getEOLString();
> +
> +    void iHaveNewStartTag(final HTMLTag htmlTag) throws ChangedCharSetException;
> +
> +    void iHaveNewMarkup(final HTMLMarkup htmlMarkup) throws IOException;
> +
> +    void iHaveNewEndTag(final HTMLTag htmlTag);
> +
> +    void iHaveNewText(final HTMLText htmlText);
> +
> +    void iHaveNewComment(final HTMLComment htmlComment);
> +
> +    void iHaveNewError(final HTMLErrorType errMsgType, final String attr1,final String attr2,final String attr3);
> +
> +    void reportRemainingElements();
> +}
> \ No newline at end of file
>
> Propchange: harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/ParserHandler.java
> ------------------------------------------------------------------------------
>    svn:eol-style = native
>
> Added: harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/ParserSym.java
> URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/ParserSym.java?view=auto&rev=507006
> ==============================================================================
> --- harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/ParserSym.java (added)
> +++ harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/ParserSym.java Tue Feb 13 06:02:55 2007
> @@ -0,0 +1,41 @@
> +
> +//----------------------------------------------------
> +// The following code was generated by CUP v0.11a beta 20060102
> +// Wed Dec 20 21:02:26 ART 2006
> +//----------------------------------------------------
> +
> +package javax.swing.text.html.parser;
> +
> +/** CUP generated interface containing symbol constants. */
> +interface ParserSym {
> +  /* terminals */
> +  public static final int TAG_CLOSE = 4;
> +  public static final int TAG_COMM_CLOSE = 10;
> +  public static final int EOFTK = 25;
> +  public static final int TAG_SLASH_CLOSE = 9;
> +  public static final int ATTR_NAME = 17;
> +  public static final int LEXERR = 24;
> +  public static final int MUDECL = 22;
> +  public static final int TAG_OPEN = 3;
> +  public static final int COMM = 8;
> +  public static final int ATTRVAL_NMTK = 19;
> +  public static final int ATTRVAL_NUM = 21;
> +  public static final int EMPTY_TAG = 11;
> +  public static final int MUDECL_CONTENT = 23;
> +  public static final int LEXERR_EXPECTED_TAG_NAME = 27;
> +  public static final int EQUALS = 5;
> +  public static final int END_TAG_NAME = 13;
> +  public static final int DQM = 6;
> +  public static final int EOF = 0;
> +  public static final int TAG_NAME = 14;
> +  public static final int error = 1;
> +  public static final int SYNC = 2;
> +  public static final int ATTRVAL_NUMTK = 20;
> +  public static final int TEXT = 16;
> +  public static final int SQM = 7;
> +  public static final int EOF_LITERAL = 26;
> +  public static final int COMM_CONTENT = 15;
> +  public static final int ATTRVAL_LIT = 18;
> +  public static final int TAG_OPEN_EXM = 12;
> +}
> +
>
> Propchange: harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/ParserSym.java
> ------------------------------------------------------------------------------
>    svn:eol-style = native
>
> Modified: harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/TagElement.java
> URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/TagElement.java?view=diff&rev=507006&r1=507005&r2=507006
> ==============================================================================
> --- harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/TagElement.java (original)
> +++ harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/TagElement.java Tue Feb 13 06:02:55 2007
> @@ -16,12 +16,19 @@
>  */
>  /**
>  * @author Evgeniya G. Maenkova
> - * @version $Revision$
> + * @version $Revision: 1.6 $
>  */
>  package javax.swing.text.html.parser;
>
>  import javax.swing.text.html.HTML;
> +import javax.swing.text.html.HTML.Tag;
>
> +/**
> + * @author Diego Raúl Mercado
> + * @author Alejandro Sánchez
> + * @author Alejandro Barturen
> + * @version $Revision: 1.6 $
> + */
>  public class TagElement {
>     private HTML.Tag tag;
>     private Element element;
> @@ -31,9 +38,19 @@
>                       final boolean fictional) {
>         this.element = element;
>         isFictional = fictional;
> -        tag = HTML.getTag(element.name.toLowerCase());
> -        if (tag == null) {
> -            tag = new HTML.UnknownTag(element.name.toLowerCase());
> +
> +        // HTML.getTag() creates an element if it is not defined in
> +        // HTML.getAllTags(). Because of this we have to look up at Tag[] array
> +        Tag[] tags = HTML.getAllTags();
> +        boolean found = false;
> +        for (int i = 0; i < tags.length; i++) {
> +            if (tags[i].toString().equals(element.name)) {
> +                tag = HTML.getTag(element.name);
> +                found = true;
> +            }
> +        }
> +        if (!found) {
> +            tag = new HTML.UnknownTag(element.name);
>         }
>     }
>
>
> Added: harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/html32.bdtd
> URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/html32.bdtd?view=auto&rev=507006
> ==============================================================================
> Binary file - no diff available.
>
> Propchange: harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/html32.bdtd
> ------------------------------------------------------------------------------
>    svn:mime-type = application/octet-stream
>
> Modified: harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/transitional401.bdtd
> URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/transitional401.bdtd?view=diff&rev=507006&r1=507005&r2=507006
> ==============================================================================
> Binary files - no diff available.
>
>
>