Browse Source

added xml word count

Nicolas Cannasse 4 years ago
parent
commit
148ae3d3b1
1 changed files with 25 additions and 1 deletions
  1. 25 1
      hide/view/Script.hx

+ 25 - 1
hide/view/Script.hx

@@ -5,6 +5,7 @@ class Script extends FileView {
 	var editor : monaco.ScriptEditor;
 	var editor : monaco.ScriptEditor;
 	var script : hide.comp.ScriptEditor;
 	var script : hide.comp.ScriptEditor;
 	var originData : String;
 	var originData : String;
+	var lang : String;
 
 
 	function getScriptChecker() {
 	function getScriptChecker() {
 		if( extension != "hx" )
 		if( extension != "hx" )
@@ -12,9 +13,32 @@ class Script extends FileView {
 		return new hide.comp.ScriptEditor.ScriptChecker(config,"hx");
 		return new hide.comp.ScriptEditor.ScriptChecker(config,"hx");
 	}
 	}
 
 
+	override function buildTabMenu():Array<hide.comp.ContextMenu.ContextMenuItem> {
+		var arr = super.buildTabMenu();
+		if( lang == "xml" ) {
+			arr.push({ label : "Count Words", click : function() {
+				var x = try Xml.parse(editor.getValue()) catch( e : Dynamic ) { ide.error(e); return; };
+				var count = 0;
+				function countRec(x:Xml) {
+					switch( x.nodeType ) {
+					case CData, PCData:
+						count += StringTools.trim(~/[ \n\t\r]/g.replace(" ",x.nodeValue)).split(" ").length;
+					case Element, Document:
+						for( x in x )
+							countRec(x);
+					default:
+					}
+				}
+				countRec(x);
+				ide.message("Words : "+count);
+			}});
+		}
+		return arr;
+	}
+
 	override function onDisplay() {
 	override function onDisplay() {
 		element.addClass("script-editor");
 		element.addClass("script-editor");
-		var lang = switch( extension ) {
+		lang = switch( extension ) {
 		case "js", "hx": "javascript";
 		case "js", "hx": "javascript";
 		case "json": "json";
 		case "json": "json";
 		case "xml": "xml";
 		case "xml": "xml";