Thursday, September 19, 2024 9:05:38 PM
> settings

Customize


Authenticate

> Util.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

namespace ArcasDevTools
{
    public static class Util
    {
        public static string PrepareCode(string code)
        {
            code = TrimMultiline(code);
            code = RemoveCodeComments(code);
            code = code.Replace("\"", "\"\"");
            code = MinifyCode(code);

            return code;
        }

        public static string TrimMultiline(string code)
        {
            code = Regex.Replace(code, @"^\s*", "", RegexOptions.Multiline);
            code = Regex.Replace(code, @"\s*$", "", RegexOptions.Multiline);

            return code;
        }

        public static string RemoveCodeComments(string code)
        {
            string blockComments = @"/\*(.*?)\*/";
            string lineComments = @"//(.*?)\r?\n";
            string strings = @"""((\\[^\n]|[^""\n])*)""";
            string verbatimStrings = @"@(""[^""]*"")+";
            string noComments = Regex.Replace
            (
                code,
                blockComments + "|" + lineComments + "|" + strings + "|" + verbatimStrings,
                me =>
                {
                    if (me.Value.StartsWith("/*") || me.Value.StartsWith("//"))
                    {
                        return me.Value.StartsWith("//") ? Environment.NewLine : "";
                    }

                    // Keep the literal strings
                    return me.Value;
                },
                RegexOptions.Singleline
            );

            return noComments;
        }

        public static string MinifyCode(string code)
        {
            // Remove whitespace before and after these needles
            code = Regex.Replace(code, @"\s*\;\s*", ";");
            code = Regex.Replace(code, @"\s*\:\s*", ":");
            code = Regex.Replace(code, @"\s*\,\s*", ",");
            code = Regex.Replace(code, @"\s*\[\s*", "[");
            code = Regex.Replace(code, @"\s*\]\s*", "]");
            code = Regex.Replace(code, @"\s*\(\s*", "(");
            code = Regex.Replace(code, @"\s*\)\s*", ")");
            code = Regex.Replace(code, @"\s*\-\s*", "-");
            code = Regex.Replace(code, @"\s*\+\s*", "+");
            code = Regex.Replace(code, @"\s*\/\s*", "/");
            code = Regex.Replace(code, @"\s*\*\s*", "*");
            code = Regex.Replace(code, @"\s*\%\s*", "%");
            code = Regex.Replace(code, @"\s*\=\s*", "=");
            code = Regex.Replace(code, @"\s*\!\s*", "!");
            code = Regex.Replace(code, @"\s*\>\s*", ">");
            code = Regex.Replace(code, @"\s*\<\s*", "<");
            code = Regex.Replace(code, @"\s*\>\>\s*", ">>");
            code = Regex.Replace(code, @"\s*\&\&\s*", "&&");
            code = Regex.Replace(code, @"\s*\|\|\s*", "||");
            code = Regex.Replace(code, @"\s*\}\s*", "}");
            code = Regex.Replace(code, @"\s*\{\s*", "{");

            // Maybe  ;}   ->  }   ?

            // No whitespace at all, please!
            code = Regex.Replace(code, @"\s+", " ");
            code = code.Replace("\n", "");
            code = code.Replace("\r", "");
            code = code.Replace("\t", "");

            return code;
        }
    }
}
All opinions represented herein are my own
- © 2024 itsthedevman
- build 3c15a1b