Exemplo n.º 1
0
 public JassRenderer(TextWriter writer)
 {
     _writer  = writer;
     _options = JassRendererOptions.Default;
 }
Exemplo n.º 2
0
 public JassRenderer(TextWriter writer, JassRendererOptions options)
 {
     _writer  = writer;
     _options = options;
 }
Exemplo n.º 3
0
        public static void Obfuscate(string inputFile, string outputFile, params string[] referenceFiles)
        {
            var fileSyntax = JassParser.ParseFile(inputFile);

            if (!Directory.Exists(new FileInfo(outputFile).DirectoryName))
            {
                Directory.CreateDirectory(new FileInfo(outputFile).DirectoryName);
            }

            var renderOptions = new JassRendererOptions();

            renderOptions.SetNewlineString(true, false);
            renderOptions.Comments           = false;
            renderOptions.Indentation        = 0;
            renderOptions.OptionalWhitespace = false;
            renderOptions.OmitEmptyLines     = true;
            renderOptions.InlineConstants    = true;

            var renameDictionary = new Dictionary <string, string>();
            var exceptions       = new HashSet <string>();

            exceptions.Add("main");
            exceptions.Add("config");

            foreach (var referenceFile in referenceFiles)
            {
                foreach (var identifier in IdentifiersProvider.GetIdentifiers(referenceFile))
                {
                    exceptions.Add(identifier);
                }
            }

            renderOptions.SetIdentifierOptimizerMethod(
                (s) =>
            {
                // Make exceptions for init stuff, since these are called using ExecuteFunc
                if (exceptions.Contains(s) || s.StartsWith("jasshelper__initstructs") || s.EndsWith("__onInit"))
                {
                    return(s);
                }

                if (!renameDictionary.ContainsKey(s))
                {
                    var renamed = $"j_{renameDictionary.Count}";
                    renameDictionary.Add(s, renamed);
                    return(renamed);
                }

                return(renameDictionary[s]);
            });

            using (var fileStream = File.Create(outputFile))
            {
                using (var streamWriter = new StreamWriter(fileStream, new UTF8Encoding(false, true)))
                {
                    var renderer = new JassRenderer(streamWriter);
                    renderer.Options = renderOptions;
                    renderer.Render(fileSyntax);
                }
            }
        }