tools/incparser/Program.cs
branchrefac-jit
changeset 2168 c24a6fa957db
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/tools/incparser/Program.cs	Sun Jul 06 04:49:55 2008 +0000
     1.3 @@ -0,0 +1,183 @@
     1.4 +using System;
     1.5 +using System.Collections.Generic;
     1.6 +using System.Text;
     1.7 +using System.IO;
     1.8 +
     1.9 +namespace incparser
    1.10 +{
    1.11 +    class Program
    1.12 +    {
    1.13 +        static void Main(string[] args)
    1.14 +        {
    1.15 +            Environment.Exit(SubMain(args));
    1.16 +        }
    1.17 +
    1.18 +        static int SubMain(string[] args)
    1.19 +        {
    1.20 +            string directory = ".";
    1.21 +            string template = "template.txt";
    1.22 +            string outputfile = "output.txt";
    1.23 +            string file = null;
    1.24 +
    1.25 +            if (args.Length == 0 || (args.Length == 1 && args[0] == "-h"))
    1.26 +            {
    1.27 +                PrintHelp();
    1.28 +                return 0;
    1.29 +            }
    1.30 +
    1.31 +            for (int i=0; i<args.Length-1; i++)
    1.32 +            {
    1.33 +                if (args[i] == "-d")
    1.34 +                {
    1.35 +                    directory = args[i + 1];
    1.36 +                }
    1.37 +
    1.38 +                if (args[i] == "-t")
    1.39 +                {
    1.40 +                    template = args[i + 1];
    1.41 +                }
    1.42 +
    1.43 +                if (args[i] == "-o")
    1.44 +                {
    1.45 +                    outputfile = args[i + 1];
    1.46 +                }
    1.47 +
    1.48 +                if (args[i] == "-f")
    1.49 +                {
    1.50 +                    file = args[i + 1];
    1.51 +                }
    1.52 +
    1.53 +                if (args[i] == "-h")
    1.54 +                {
    1.55 +                    if (args[i + 1] == "template")
    1.56 +                    {
    1.57 +                        PrintTemplateHelp();
    1.58 +                        return 0;
    1.59 +                    }
    1.60 +                    PrintHelp();
    1.61 +                    return 0;
    1.62 +                }
    1.63 +            }
    1.64 +
    1.65 +            IncParser inc = null;
    1.66 +
    1.67 +            if (file == null)
    1.68 +            {
    1.69 +                DirectoryInfo di = new DirectoryInfo(directory);
    1.70 +                FileInfo[] rgFiles = di.GetFiles("*.inc");
    1.71 +
    1.72 +                ParseWriter pwr = new ParseWriter();
    1.73 +
    1.74 +                foreach (FileInfo fi in rgFiles)
    1.75 +                {
    1.76 +                    pwr.Reset();
    1.77 +
    1.78 +                    Console.Write("Parsing file: " + fi.ToString() + "... ");
    1.79 +                  
    1.80 +                    try
    1.81 +                    {
    1.82 +                      inc = new IncParser(fi.FullName);
    1.83 +                    }
    1.84 +                    catch (ParseException e)
    1.85 +                    {
    1.86 +                        Console.WriteLine("Initial browsing failed: " + e.Message);
    1.87 +                        continue;
    1.88 +                    }
    1.89 +                    catch (System.Exception e)
    1.90 +                    {
    1.91 +                        Console.WriteLine("Failed to read file: " + e.Message);
    1.92 +                        continue;
    1.93 +                    }
    1.94 +
    1.95 +                    try
    1.96 +                    {
    1.97 +                        inc.Parse(pwr);
    1.98 +                    }
    1.99 +                    catch (System.Exception e)
   1.100 +                    {
   1.101 +                        Console.WriteLine("Error parsing file (line " + inc.GetLineNumber() + "): " + e.Message);
   1.102 +                        continue;
   1.103 +                    }
   1.104 +
   1.105 +                    if (pwr.Level != 0)
   1.106 +                    {
   1.107 +                        Console.WriteLine("Fatal parse error detected; unable to complete output.");
   1.108 +                        continue;
   1.109 +                    }
   1.110 +
   1.111 +                    Console.WriteLine("Complete!");
   1.112 +                 }
   1.113 +
   1.114 +                 pwr.WriteFiles(template, outputfile);
   1.115 +
   1.116 +                 Console.WriteLine("Parsing Complete!");
   1.117 +
   1.118 +                 return 0;
   1.119 +            }
   1.120 +      
   1.121 +            try
   1.122 +            {
   1.123 +                inc = new IncParser(file);
   1.124 +            }
   1.125 +            catch (ParseException e)
   1.126 +            {
   1.127 +                Console.WriteLine("Initial browsing failed: " + e.Message);
   1.128 +                return 1;
   1.129 +            }
   1.130 +            catch (System.Exception e)
   1.131 +            {
   1.132 +                Console.WriteLine("Failed to read file: " + e.Message);
   1.133 +                return 1;
   1.134 +            }
   1.135 +
   1.136 +            ParseWriter pw = new ParseWriter();
   1.137 +
   1.138 +            try
   1.139 +            {
   1.140 +                inc.Parse(pw);
   1.141 +            }
   1.142 +            catch (System.Exception e)
   1.143 +            {
   1.144 +                Console.WriteLine("Error parsing file (line " + inc.GetLineNumber() + "): " + e.Message);
   1.145 +                return 1;
   1.146 +            }
   1.147 +
   1.148 +            if (pw.Level != 0)
   1.149 +            {
   1.150 +                Console.WriteLine("Fatal parse error detected; unable to complete output.");
   1.151 +                return 1;
   1.152 +            }
   1.153 +
   1.154 +            Console.Write(pw.Contents);
   1.155 +            Console.Write("\n");
   1.156 +
   1.157 +            return 0;
   1.158 +        }
   1.159 +
   1.160 +        static void PrintHelp()
   1.161 +        {
   1.162 +            Console.WriteLine("SourcePawn include file parser by BAILOPAN (edited by pRED*)");
   1.163 +            Console.Write("\n");
   1.164 +            Console.WriteLine("This can parse a single file into SMC configuration format or an entire directory into a template file if -f is not specified (current directory is used if -d is not specified)");
   1.165 +            Console.Write("\n");
   1.166 +            Console.WriteLine("Parameters:");
   1.167 +            Console.Write("\n");
   1.168 +            Console.WriteLine("-f <filename> - Specify an input file to be used");
   1.169 +            Console.WriteLine("-d <path> - Specify a directory to parse (only *.inc files are used)");
   1.170 +            Console.WriteLine("-t <filename> - Specify a template file to be used");
   1.171 +            Console.WriteLine("-o <filename> - Specify an output file to be used");
   1.172 +            Console.WriteLine("-h - Display this help");
   1.173 +            Console.WriteLine("-h template - Displays help about templates");
   1.174 +        }
   1.175 +
   1.176 +        static void PrintTemplateHelp()
   1.177 +        {
   1.178 +            Console.WriteLine("Template File Help:");
   1.179 +            Console.WriteLine("The inc parser can read a template file and replace variables with the outputs of it's parse and write into the output file");
   1.180 +            Console.Write("\n");
   1.181 +            Console.WriteLine("Variables:");
   1.182 +            Console.Write("\n");
   1.183 +            Console.WriteLine("$defines $enums $enumtypes $forwards $natives $stocks $funcenums $functags $structs");
   1.184 +        }
   1.185 +    }
   1.186 +}