| 
					
				 | 
			
			
				@@ -1,24 +1,23 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import * as ObjectClass from "./../enums/elements-class-enum"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const TYPE    =  0; // identifica se Ponto, Texto, Reta... 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const ID      =  1; // identificador unico do objeto 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const DEFINITION =  2; // parametros dos quais o objeto depende (exemplo Reta depende de Ponto e Ponto => "2:IDPONTO1 IDPONTO2") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const LIST     =  3; // lista de identificadores de objetos dependentes do atual 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const LABEL    =  4; // definicao do rotulo (valor/nome e se escondido ou nao) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const DEFINED  =  6; // 0 ou 1 (???) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const COLOR       =  5; // cor usando valor inteiro 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const HIDDEN =  7; // 0 (visivel) ou 1 (escondido) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const PIXEL     =  8; // LeScript usa (coordenada X e Y - inteiros) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const FONT     =  9; // 'Arial' T Tam: T = FONT.PLAIN, FONT.BOLD, FONT.ITALIC; Tam = 8, 9,... 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    // PROIBIDO: "Arial" T Tam, pois em caso contrario nao sera lido como parametro 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    //           usa  MARCAFNT = "\'" nao pode ser "\"" <[28/09/2006] agora vazio ""> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const TYPE = 0; // identifica se Ponto, Texto, Reta... 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const ID = 1; // identificador unico do objeto 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const DEFINITION = 2; // parametros dos quais o objeto depende (exemplo Reta depende de Ponto e Ponto => "2:IDPONTO1 IDPONTO2") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const LIST = 3; // lista de identificadores de objetos dependentes do atual 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const LABEL = 4; // definicao do rotulo (valor/nome e se escondido ou nao) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const DEFINED = 6; // 0 ou 1 (???) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const COLOR = 5; // cor usando valor inteiro 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const HIDDEN = 7; // 0 (visivel) ou 1 (escondido) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const PIXEL = 8; // LeScript usa (coordenada X e Y - inteiros) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const FONT = 9; // 'Arial' T Tam: T = FONT.PLAIN, FONT.BOLD, FONT.ITALIC; Tam = 8, 9,... 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// PROIBIDO: "Arial" T Tam, pois em caso contrario nao sera lido como parametro 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//           usa  MARCAFNT = "\'" nao pode ser "\"" <[28/09/2006] agora vazio ""> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const LABEL_COLOR = 10; // cor de rotulo (tambem um inteiro) - inserido apos iGeom versao >= 2.9.9.31 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const OBJECT_LINE_REGEX = /^\{\w*(?:(?:\d+:@\|[^@]+@\|)|(?:\d+:[^,@|]+))\w(?:,\w*(?:(?:\d+:@\|[^@]+@\|)|(?:\d+:[^,@\|]+)))+\w*\}!?$/.compile(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const ALPHA_MASK = 255 << 24; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 export class FileParser { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    * @param {string} content 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -27,12 +26,13 @@ export class FileParser { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     this.content = content; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  parse () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return this.content.split('\n') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  parse() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return this.content 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      .split("\n") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       .filter(str => !str.match(/^[#\[]/)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       .map(str => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(!OBJECT_LINE_REGEX.test(str.trim())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          console.error("Malformed object string in igeom file: ",str); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!OBJECT_LINE_REGEX.test(str.trim())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          console.error("Malformed object string in igeom file: ", str); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           return undefined; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return this.parseObjectLine(str.trim()); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -43,31 +43,31 @@ export class FileParser { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    * @param {string} object_line 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  parseObjectLine (object_line) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  parseObjectLine(object_line) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     const map = new Map(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     object_line = object_line.substring(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if(object_line.endsWith('}!')) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (object_line.endsWith("}!")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       object_line = object_line.substring(0, object_line.length - 2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       object_line = object_line.substring(0, object_line.length - 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const properties = object_line.split(','); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    for(const prop in properties) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const prop_info = prop.trim().split(':'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const properties = object_line.split(","); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for (const prop in properties) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const prop_info = prop.trim().split(":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       const key = parseInt(prop_info[0]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      if(key == TYPE) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (key == TYPE) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         const type = prop_info[1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         map.set("type", ObjectClass.fromCodeToClass(parseInt(type))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } else if(key == ID) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } else if (key == ID) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         const id = prop_info[1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         map.set("id", parseInt(id)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } else if(key == DEFINITION) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } else if (key == DEFINITION) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         const param_list = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const list = prop_info[1].trim().split(' '); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        for(const param in list) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const list = prop_info[1].trim().split(" "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (const param in list) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           const maybe_number = Number(param); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          if(Number.isNaN((maybe_number))) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          if (Number.isNaN(maybe_number)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             param_list.push(param); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             param_list.push(maybe_number); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -76,17 +76,17 @@ export class FileParser { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         map.set("param", param_list); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } else if (key == LIST) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         const id_list = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const list = prop_info[1].trim().split(' '); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        for(const id in list) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-           id_list.push(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const list = prop_info[1].trim().split(" "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (const id in list) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          id_list.push(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         map.set("deps", id_list); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } else if (key == LABEL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         const param_list = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const list = prop_info[1].trim().split(' '); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        for(const param in list) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const list = prop_info[1].trim().split(" "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (const param in list) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           const maybe_number = Number(param); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          if(Number.isNaN((maybe_number))) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          if (Number.isNaN(maybe_number)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             param_list.push(param); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             param_list.push(maybe_number); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -101,36 +101,35 @@ export class FileParser { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let number = Number(value); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         const alpha = ((number & ALPHA_MASK) >>> 24) / 255; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         number = number ^ ALPHA_MASK; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const r = (number >> 16) & 0xFF; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const g = (number >> 8) & 0xFF; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const b = number & 0xFF; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        map.set("color", {alpha:alpha, r:r, g:g, b:b}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } else if(key == HIDDEN) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const r = (number >> 16) & 0xff; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const g = (number >> 8) & 0xff; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const b = number & 0xff; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        map.set("color", { alpha: alpha, r: r, g: g, b: b }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } else if (key == HIDDEN) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         const value = prop_info[1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         map.set("hidden", parseInt(value)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } else if(key == PIXEL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } else if (key == PIXEL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         const position = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const list = prop_info[1].trim().split(' '); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        for(const i in list) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const list = prop_info[1].trim().split(" "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (const i in list) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           position.push(parseInt(i)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         map.set("position", position); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } else if (key == FONT) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const param_list = prop_info[1].trim().split(' '); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const param_list = prop_info[1].trim().split(" "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         map.set("font", param_list); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } else if(key == LABEL_COLOR) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } else if (key == LABEL_COLOR) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         const value = prop_info[1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let number = Number(value); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         const alpha = ((number & ALPHA_MASK) >>> 24) / 255; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         number = number ^ ALPHA_MASK; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const r = (number >> 16) & 0xFF; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const g = (number >> 8) & 0xFF; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const b = number & 0xFF; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        map.set("label_color", {alpha: alpha, r: r, g: g, b: b}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const r = (number >> 16) & 0xff; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const g = (number >> 8) & 0xff; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const b = number & 0xff; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        map.set("label_color", { alpha: alpha, r: r, g: g, b: b }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |