Browse Source

Implement code gereration for char literal values through the UI

Lucas de Souza 4 years ago
parent
commit
09e19e314d
3 changed files with 1840 additions and 1152 deletions
  1. 17 10
      js/typeSystem/parsers.js
  2. 11 3
      js/visualUI/code_generator.js
  3. 1812 1139
      js/visualUI/commands/variable_value_menu.js

+ 17 - 10
js/typeSystem/parsers.js

@@ -8,21 +8,27 @@ export function toInt (str) {
 }
 
 export function toString (str) {
-  let value = str.replace(/^"/, '');
-  value = value.replace(/"$/, '');
+  let value = str.replace(/^"/, "");
+  value = value.replace(/"$/, "");
   value = value.replace(/\\b/g, "\b");
   value = value.replace(/\\t/g, "\t");
   value = value.replace(/\\n/g, "\n");
   value = value.replace(/\\r/g, "\r");
-  value = value.replace(/\\"/g, "\"");
-  value = value.replace(/\\'/g, '\'');
+  value = value.replace(/\\"/g, '"');
+  value = value.replace(/\\'/g, "'");
   value = value.replace(/\\\\/g, "\\");
   return value;
 }
 
 export function toChar (str) {
-  let value = str.replace(/^'/, '');
-  value = value.replace(/'$/, '');
+  let value = str.replace(/^'/, "");
+  value = value.replace(/'$/, "");
+  value = value.replace(/\\b/g, "\b");
+  value = value.replace(/\\t/g, "\t");
+  value = value.replace(/\\n/g, "\n");
+  value = value.replace(/\\r/g, "\r");
+  value = value.replace(/\\"/g, '"');
+  value = value.replace(/\\'/g, "'");
   return value;
 }
 
@@ -53,16 +59,16 @@ export function convertBoolToString (bool) {
   } else {
     result = instance.literalNames[lexer.RK_FALSE];
   }
-  return result.replace(/'/g,"");
+  return result.replace(/'/g, "");
 }
 
-export function convertToString(value, type) {
+export function convertToString (value, type) {
   switch (type.ord) {
     case Types.INTEGER.ord:
       return value.toString();
     case Types.REAL.ord: {
       if (value.dp() <= 0) {
-        return value.toFixed(1);  
+        return value.toFixed(1);
       } else {
         return value.toFixed(Config.decimalPlaces);
       }
@@ -72,4 +78,5 @@ export function convertToString(value, type) {
     default:
       return value;
   }
-}
+}
+

+ 11 - 3
js/visualUI/code_generator.js

@@ -69,7 +69,7 @@ function functionsCode (function_obj) {
     ret += "[][] ";
   }
   if (function_obj.is_main) {
-    ret += LocalizedStrings.getUI('start');
+    ret += LocalizedStrings.getUI("start");
   } else {
     ret += function_obj.name;
   }
@@ -720,8 +720,16 @@ function variableValueMenuCode (variable_obj, is_return = false) {
         ret += " [ " + variableValueMenuCode(variable_obj.column) + " ] ";
       }
     } else {
-      if (isNaN(variable_obj.content)) {
-        ret += '"' + variable_obj.content + '"';
+      const content = String(variable_obj.content);
+      if (isNaN(content)) {
+        // console.debug("Content length: ", content.length);
+        // console.debug("Char code at 0", content.charCodeAt(0));
+        const isBackslash = content.charCodeAt(0) === 92;
+        if (content.length === 1 || (content.length === 2 && isBackslash)) {
+          ret += `'${content}'`;
+        } else {
+          ret += '"' + variable_obj.content + '"';
+        }
       } else {
         ret += variable_obj.content;
       }

File diff suppressed because it is too large
+ 1812 - 1139
js/visualUI/commands/variable_value_menu.js