html: don't set im if <template> doesn't have HTML namespace

If there are nested <template> elements and the <template> node isn't in HTML namespace,
couldn't continue to parse documents correctly.
By this patch, it makes the <template> which is in math namespace be skipped on
resetting insertion mode.

Fixes golang/go#27702

Change-Id: I6eacdb98fe29eb3c61781afca5bc4d83e72ba4ed
Reviewed-on: https://go-review.googlesource.com/136875
Reviewed-by: Nigel Tao <nigeltao@golang.org>
diff --git a/html/parse.go b/html/parse.go
index 63ac179..9889c09 100644
--- a/html/parse.go
+++ b/html/parse.go
@@ -470,6 +470,10 @@
 		case a.Table:
 			p.im = inTableIM
 		case a.Template:
+			// TODO: remove this divergence from the HTML5 spec.
+			if n.Namespace != "" {
+				continue
+			}
 			p.im = p.templateStack.top()
 		case a.Head:
 			// TODO: remove this divergence from the HTML5 spec.
diff --git a/html/testdata/go/template.dat b/html/testdata/go/template.dat
index b6f2a8d..98481b9 100644
--- a/html/testdata/go/template.dat
+++ b/html/testdata/go/template.dat
@@ -22,3 +22,16 @@
 |       content
 |         <tbody>
 |   <body>
+
+#data
+<math><template><mo><template>
+#errors
+#document
+| <html>
+|   <head>
+|   <body>
+|     <math math>
+|       <math template>
+|         <math mo>
+|           <template>
+|             content