Bug 489096 - HTML5 support
diff --git a/plugins/org.eclipse.actf.visualization.engines.blind.html/src/messages.properties b/plugins/org.eclipse.actf.visualization.engines.blind.html/src/messages.properties
index 9987206..2334f1d 100644
--- a/plugins/org.eclipse.actf.visualization.engines.blind.html/src/messages.properties
+++ b/plugins/org.eclipse.actf.visualization.engines.blind.html/src/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2006, 2008 IBM Corporation and others.
+# Copyright (c) 2006, 2016 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -14,3 +14,4 @@
 CSSViewer_1=&Open
 ElementViewerJFace_0=Select
 ElementViewerJFace_1=View Help...
+ProgressBar_1=indeterminate
diff --git a/plugins/org.eclipse.actf.visualization.engines.blind.html/src/messages_ja.properties b/plugins/org.eclipse.actf.visualization.engines.blind.html/src/messages_ja.properties
index 396486d..8c20e0c 100644
--- a/plugins/org.eclipse.actf.visualization.engines.blind.html/src/messages_ja.properties
+++ b/plugins/org.eclipse.actf.visualization.engines.blind.html/src/messages_ja.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2006, 2008 IBM Corporation and others.
+# Copyright (c) 2006, 2016 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -14,4 +14,5 @@
 CSSViewer_1=\u958b\u304f(&O)
 ElementViewerJFace_0=\u9078\u629e\u3059\u308b
 ElementViewerJFace_1=\u30d8\u30eb\u30d7\u3092\u53c2\u7167\u3059\u308b...
+ProgressBar_1=\u672a\u78ba\u5b9a
 
diff --git a/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/engines/blind/html/VisualizeEngine.java b/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/engines/blind/html/VisualizeEngine.java
index 0b5116d..bf10152 100644
--- a/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/engines/blind/html/VisualizeEngine.java
+++ b/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/engines/blind/html/VisualizeEngine.java
@@ -38,6 +38,7 @@
 import org.eclipse.actf.visualization.eval.html.statistics.PageData;
 import org.eclipse.actf.visualization.eval.problem.IProblemItem;
 import org.eclipse.actf.visualization.internal.engines.blind.html.BlindProblem;
+import org.eclipse.actf.visualization.internal.engines.blind.html.Messages;
 import org.eclipse.actf.visualization.internal.engines.blind.html.util.DocumentCleaner;
 import org.eclipse.actf.visualization.internal.engines.blind.html.util.ImgChecker;
 import org.eclipse.actf.visualization.internal.engines.blind.html.util.LinkAnalyzer;
@@ -266,7 +267,7 @@
 			calMaxTime();
 
 			problems.addAll(linkAnalyzer.skipLinkCheck(iMaxTime, iMaxTimeLeaf));
-			
+
 			// remove embedded elements (original/results)
 			for (String s : new String[] { "svg", "math" }) {
 				NodeList tmpNL = orig.getElementsByTagName(s);
@@ -280,12 +281,20 @@
 			}
 			replaceElement(result, "math", new String[0], "MathML");
 			replaceElement(result, "svg", new String[] { "title", "desc" }, "SVG");
-			replaceElement(result, "video", new String[0], "video"); //src or source?
-			replaceElement(result, "audio", new String[0], "audio"); //src or source?
+			replaceElement(result, "canvas", new String[0], "canvas");
+
+			// TBD src/source
+			replaceElement(result, "video", new String[0], "video");
+			replaceElement(result, "audio", new String[0], "audio");
 
 			// template (temp code (remove after IE supports template tag)
 			replaceElement(result, "template", new String[0], null);
-			
+
+			// progress
+			visualizeProgress(result); // TODO move to jwatc
+
+			// meter (JAWS 15/NVDA 2016) do not support
+			replaceElement(result, "meter", new String[0], "meter");
 
 			replaceImgAndCheck(result, mapData, curParamBlind.oReplaceImage);
 
@@ -359,6 +368,29 @@
 			}
 			// merge
 
+			// datalist
+			NodeList tmpNL = result.getElementsByTagName("input");
+			NodeList tmpNL2 = orig.getElementsByTagName("datalist");
+			if (tmpNL2.getLength() > 0) {
+				for (int i = 0; i < tmpNL.getLength(); i++) {
+					Element e = (Element) tmpNL.item(i);
+					String listS = e.getAttribute("list");
+					for(int j = 0; j < tmpNL2.getLength(); j++){
+						Element e2 = (Element) tmpNL2.item(j);
+						String id = e2.getAttribute("id");
+						System.out.println(listS+" : "+id);
+						if(id!=null && id.equals(listS)){
+							Node tmpN = mapData.getResultNode(e2);
+							if(tmpN!=null && tmpN instanceof Element){
+								String targetId = ((Element)tmpN).getAttribute("id");
+								e.setAttribute("list", targetId);
+							}
+						}
+					}
+				}
+				
+			}
+
 			VisualizeStyleInfoManager.getInstance().fireVisualizeStyleInfoUpdate(styleInfo);
 
 			if (curParamBlind.visualizeMode.equals(ParamBlind.BLIND_BROWSER_MODE)) {
@@ -419,6 +451,59 @@
 	}
 
 	@SuppressWarnings("nls")
+	private void visualizeProgress(Document doc) {
+		NodeList nl = doc.getElementsByTagName("progress");
+		int size = nl.getLength();
+		for (int i = size - 1; i >= 0; i--) {
+			Element target = (Element) nl.item(i);
+			Element div = doc.createElement("div");
+			div.setAttribute("comment", target.getAttribute("comment"));
+			div.setAttribute("id", target.getAttribute("id"));
+
+			StringBuffer tmpSB = new StringBuffer();
+			tmpSB.append("(progress bar: ");
+			double max = 1.0; // default
+			double value = 0; // default
+
+			if (target.hasAttribute("value")) {
+				try {
+					double tmpValue = Double.parseDouble(target.getAttribute("value"));
+					if (tmpValue > value) {
+						value = tmpValue;
+					}
+				} catch (NumberFormatException e) {
+				}
+				if (target.hasAttribute("max")) {
+					double tmpValue = Double.parseDouble(target.getAttribute("max"));
+					if (tmpValue > 0) {
+						max = tmpValue;
+					}
+				}
+				if (value > max) {
+					tmpSB.append("100%");
+				} else {
+					tmpSB.append(value / max * 100);
+					tmpSB.append("%");
+				}
+			} else {
+				tmpSB.append(Messages.ProgressBar_1); // –¢Šm’è
+			}
+
+			tmpSB.append(")");
+
+			// remove other tags and attributes
+
+			div.appendChild(doc.createTextNode(tmpSB.toString()));
+
+			Node parent = target.getParentNode();
+			parent.insertBefore(div, target);
+			mapData.addReplacedNodeMapping(target, div);
+			parent.removeChild(target);
+		}
+
+	}
+
+	@SuppressWarnings("nls")
 	private void replaceImgAndCheck(Document doc, VisualizeMapDataImpl mapData, boolean remove) {
 
 		NodeList mapList = doc.getElementsByTagName("map");
diff --git a/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/internal/engines/blind/html/Messages.java b/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/internal/engines/blind/html/Messages.java
index 3b76ee4..bed9f85 100644
--- a/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/internal/engines/blind/html/Messages.java
+++ b/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/internal/engines/blind/html/Messages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and Others
+ * Copyright (c) 2006, 2016 IBM Corporation and Others
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,7 +25,8 @@
 	public static String CSSViewer_1;
 	public static String ElementViewerJFace_0;
 	public static String ElementViewerJFace_1;
-
+	public static String ProgressBar_1;
+	
 	static {
 		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
 	}
diff --git a/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/internal/engines/blind/html/util/NodeInfoCreator.java b/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/internal/engines/blind/html/util/NodeInfoCreator.java
index 87a166a..96e1dbe 100644
--- a/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/internal/engines/blind/html/util/NodeInfoCreator.java
+++ b/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/internal/engines/blind/html/util/NodeInfoCreator.java
@@ -230,6 +230,8 @@
 					} else if (nodeName.contains("caption")){
 						info.setCaption(true);
 						info.appendComment(curNode.getNodeName());
+					} else if (nodeName.equals("mark")){
+						info.appendComment("mark");
 					}
 
 					if (nodeName.equals("body")) {
diff --git a/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/internal/engines/blind/html/util/VisualizeColorUtil.java b/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/internal/engines/blind/html/util/VisualizeColorUtil.java
index 13b8d3e..dcc9928 100644
--- a/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/internal/engines/blind/html/util/VisualizeColorUtil.java
+++ b/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/internal/engines/blind/html/util/VisualizeColorUtil.java
@@ -18,6 +18,7 @@
 
 import org.eclipse.actf.util.logging.DebugPrintUtil;
 import org.eclipse.actf.visualization.engines.blind.ParamBlind;
+import org.eclipse.actf.visualization.eval.html.HtmlTagUtil;
 import org.eclipse.swt.graphics.RGB;
 import org.w3c.dom.Comment;
 import org.w3c.dom.Document;
@@ -142,8 +143,8 @@
 			String inputRGB = getRGBString(param.inputTagsColor, "#FF9900");
 			String captionRGB = getRGBString(param.captionColor, "#FFFF80");
 
-			if (param.bColorizeTags
-					&& (info.isHeading() | info.isTableHeader() | info.isLabel() | info.isIdRequiredInput() | info.isCaption())) {
+			if (param.bColorizeTags && (info.isHeading() | info.isTableHeader() | info.isLabel()
+					| info.isIdRequiredInput() | info.isCaption())) {
 				if (info.isHeading()) {
 					strRGB = headingRGB;
 				} else if (info.isTableHeader()) {
@@ -152,12 +153,12 @@
 					strRGB = labelRGB;
 				} else if (info.isIdRequiredInput()) {
 					strRGB = inputRGB;
-				} else if (info.isCaption()){
+				} else if (info.isCaption()) {
 					strRGB = captionRGB;
 				}
-				
-				//TBD caption
-				
+
+				// TBD caption
+
 				el.setAttribute("style", "color: black; background-image: none; background-color:" + strRGB);// +
 				// "}");
 				// } else if (info.getWords() > 0) {
@@ -176,8 +177,12 @@
 				}
 
 				if (param.bVisualizeTime == true) {
-					el.setAttribute("style", "color: black; background-image: none; background-color: #"
-							+ calcColor(time, param.maxTimeColor, param.iMaxTime));
+					if ("mark".equals(el.getTagName())||HtmlTagUtil.hasAncestor(el, "mark")) {
+						el.setAttribute("style", "color: black; background-image: none;");
+					} else {
+						el.setAttribute("style", "color: black; background-image: none; background-color: #"
+								+ calcColor(time, param.maxTimeColor, param.iMaxTime));
+					}
 
 				} else {
 					el.setAttribute("style", "color: black; background-image: none; background-color: transparent");