1: tree branch 1: (, W continue 3: C start tagname 4: #, . start node definition 6: [ start attribute definition 13: { start text content 2: end group 0: EOF 1: +, >, ^ start tree 2: ), W continue 3: tag name 0: EOF 1: +, >, ^ start tree 2: ) end group 3: C, W continue 4: #, . start node definition 6: [ start attribute definition 13: { start text content 4: node definition start 4: W continue 5: C at least one char 5: node definition 0: EOF 1: +, >, ^ start tree 2: ) end group 4: #, . start node definition 5: C, W continue 6: [ start attribute definition 13: { start text content 6: node attribute start 6: W continue 7: C at least one char 7: node attribute 5: ] end attributes 7: C continue 8: W new attribute or attribute value 9: = attribute value 8: strait betwixt two 5: ] end attribute 7: C new attribute 8: W continue 9: = attribute value 9: start attribute value 9: W continue 10: C set value 11: ', " quoted value 10: unquoted attribute value 5: ] end attribute 6: W new attribute 10: C continue 11: quoted attribute value 11: C continue (skip escaped quotes) 12: ', " end quote 12: end quoted attribute value 5: ] end attribute 6: W new attribute 13: text content start 13: W continue 14: C start unquoted text content 15: ', " start quoted text content 14: unquoted text content 5: } end text content 14: C continue 15: quoted text content 15: C continue (skip escaped quotes) 16: ', " end quoted text 16: end quoted text content 5: } end text content 16: W trailing whitespace