tools/incparser/Program.cs
author Scott Ehlert <ds@alliedmods.net>
Sat Apr 23 21:53:53 2011 -0500 (2011-04-23)
changeset 3261 e4359292e59a
parent 2019 9f473114a511
permissions -rw-r--r--
Added detection for clang compiler and fixed various warnings triggered by it (bug 4878, r=dvander).
dvander@824
     1
using System;
dvander@824
     2
using System.Collections.Generic;
dvander@824
     3
using System.Text;
pred@2019
     4
using System.IO;
dvander@824
     5
dvander@824
     6
namespace incparser
dvander@824
     7
{
dvander@824
     8
    class Program
dvander@824
     9
    {
dvander@824
    10
        static void Main(string[] args)
dvander@824
    11
        {
dvander@824
    12
            Environment.Exit(SubMain(args));
dvander@824
    13
        }
dvander@824
    14
dvander@824
    15
        static int SubMain(string[] args)
dvander@824
    16
        {
pred@2019
    17
            string directory = ".";
pred@2019
    18
            string template = "template.txt";
pred@2019
    19
            string outputfile = "output.txt";
pred@2019
    20
            string file = null;
pred@2019
    21
pred@2019
    22
            if (args.Length == 0 || (args.Length == 1 && args[0] == "-h"))
pred@2019
    23
            {
pred@2019
    24
                PrintHelp();
pred@2019
    25
                return 0;
pred@2019
    26
            }
pred@2019
    27
pred@2019
    28
            for (int i=0; i<args.Length-1; i++)
dvander@824
    29
            {
pred@2019
    30
                if (args[i] == "-d")
pred@2019
    31
                {
pred@2019
    32
                    directory = args[i + 1];
pred@2019
    33
                }
pred@2019
    34
pred@2019
    35
                if (args[i] == "-t")
pred@2019
    36
                {
pred@2019
    37
                    template = args[i + 1];
pred@2019
    38
                }
pred@2019
    39
pred@2019
    40
                if (args[i] == "-o")
pred@2019
    41
                {
pred@2019
    42
                    outputfile = args[i + 1];
pred@2019
    43
                }
pred@2019
    44
pred@2019
    45
                if (args[i] == "-f")
pred@2019
    46
                {
pred@2019
    47
                    file = args[i + 1];
pred@2019
    48
                }
pred@2019
    49
pred@2019
    50
                if (args[i] == "-h")
pred@2019
    51
                {
pred@2019
    52
                    if (args[i + 1] == "template")
pred@2019
    53
                    {
pred@2019
    54
                        PrintTemplateHelp();
pred@2019
    55
                        return 0;
pred@2019
    56
                    }
pred@2019
    57
                    PrintHelp();
pred@2019
    58
                    return 0;
pred@2019
    59
                }
dvander@824
    60
            }
dvander@824
    61
dvander@824
    62
            IncParser inc = null;
pred@2019
    63
pred@2019
    64
            if (file == null)
pred@2019
    65
            {
pred@2019
    66
                DirectoryInfo di = new DirectoryInfo(directory);
pred@2019
    67
                FileInfo[] rgFiles = di.GetFiles("*.inc");
pred@2019
    68
pred@2019
    69
                ParseWriter pwr = new ParseWriter();
pred@2019
    70
pred@2019
    71
                foreach (FileInfo fi in rgFiles)
pred@2019
    72
                {
pred@2019
    73
                    pwr.Reset();
pred@2019
    74
pred@2019
    75
                    Console.Write("Parsing file: " + fi.ToString() + "... ");
pred@2019
    76
                  
pred@2019
    77
                    try
pred@2019
    78
                    {
pred@2019
    79
                      inc = new IncParser(fi.FullName);
pred@2019
    80
                    }
pred@2019
    81
                    catch (ParseException e)
pred@2019
    82
                    {
pred@2019
    83
                        Console.WriteLine("Initial browsing failed: " + e.Message);
pred@2019
    84
                        continue;
pred@2019
    85
                    }
pred@2019
    86
                    catch (System.Exception e)
pred@2019
    87
                    {
pred@2019
    88
                        Console.WriteLine("Failed to read file: " + e.Message);
pred@2019
    89
                        continue;
pred@2019
    90
                    }
pred@2019
    91
pred@2019
    92
                    try
pred@2019
    93
                    {
pred@2019
    94
                        inc.Parse(pwr);
pred@2019
    95
                    }
pred@2019
    96
                    catch (System.Exception e)
pred@2019
    97
                    {
pred@2019
    98
                        Console.WriteLine("Error parsing file (line " + inc.GetLineNumber() + "): " + e.Message);
pred@2019
    99
                        continue;
pred@2019
   100
                    }
pred@2019
   101
pred@2019
   102
                    if (pwr.Level != 0)
pred@2019
   103
                    {
pred@2019
   104
                        Console.WriteLine("Fatal parse error detected; unable to complete output.");
pred@2019
   105
                        continue;
pred@2019
   106
                    }
pred@2019
   107
pred@2019
   108
                    Console.WriteLine("Complete!");
pred@2019
   109
                 }
pred@2019
   110
pred@2019
   111
                 pwr.WriteFiles(template, outputfile);
pred@2019
   112
pred@2019
   113
                 Console.WriteLine("Parsing Complete!");
pred@2019
   114
pred@2019
   115
                 return 0;
pred@2019
   116
            }
pred@2019
   117
      
dvander@824
   118
            try
dvander@824
   119
            {
pred@2019
   120
                inc = new IncParser(file);
dvander@824
   121
            }
dvander@824
   122
            catch (ParseException e)
dvander@824
   123
            {
dvander@824
   124
                Console.WriteLine("Initial browsing failed: " + e.Message);
dvander@824
   125
                return 1;
dvander@824
   126
            }
dvander@824
   127
            catch (System.Exception e)
dvander@824
   128
            {
dvander@824
   129
                Console.WriteLine("Failed to read file: " + e.Message);
dvander@824
   130
                return 1;
dvander@824
   131
            }
dvander@824
   132
dvander@824
   133
            ParseWriter pw = new ParseWriter();
dvander@824
   134
dvander@824
   135
            try
dvander@824
   136
            {
dvander@824
   137
                inc.Parse(pw);
dvander@824
   138
            }
dvander@824
   139
            catch (System.Exception e)
dvander@824
   140
            {
dvander@824
   141
                Console.WriteLine("Error parsing file (line " + inc.GetLineNumber() + "): " + e.Message);
dvander@824
   142
                return 1;
dvander@824
   143
            }
dvander@824
   144
dvander@824
   145
            if (pw.Level != 0)
dvander@824
   146
            {
dvander@824
   147
                Console.WriteLine("Fatal parse error detected; unable to complete output.");
dvander@824
   148
                return 1;
dvander@824
   149
            }
dvander@824
   150
dvander@824
   151
            Console.Write(pw.Contents);
dvander@824
   152
            Console.Write("\n");
dvander@824
   153
dvander@824
   154
            return 0;
dvander@824
   155
        }
pred@2019
   156
pred@2019
   157
        static void PrintHelp()
pred@2019
   158
        {
pred@2019
   159
            Console.WriteLine("SourcePawn include file parser by BAILOPAN (edited by pRED*)");
pred@2019
   160
            Console.Write("\n");
pred@2019
   161
            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)");
pred@2019
   162
            Console.Write("\n");
pred@2019
   163
            Console.WriteLine("Parameters:");
pred@2019
   164
            Console.Write("\n");
pred@2019
   165
            Console.WriteLine("-f <filename> - Specify an input file to be used");
pred@2019
   166
            Console.WriteLine("-d <path> - Specify a directory to parse (only *.inc files are used)");
pred@2019
   167
            Console.WriteLine("-t <filename> - Specify a template file to be used");
pred@2019
   168
            Console.WriteLine("-o <filename> - Specify an output file to be used");
pred@2019
   169
            Console.WriteLine("-h - Display this help");
pred@2019
   170
            Console.WriteLine("-h template - Displays help about templates");
pred@2019
   171
        }
pred@2019
   172
pred@2019
   173
        static void PrintTemplateHelp()
pred@2019
   174
        {
pred@2019
   175
            Console.WriteLine("Template File Help:");
pred@2019
   176
            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");
pred@2019
   177
            Console.Write("\n");
pred@2019
   178
            Console.WriteLine("Variables:");
pred@2019
   179
            Console.Write("\n");
pred@2019
   180
            Console.WriteLine("$defines $enums $enumtypes $forwards $natives $stocks $funcenums $functags $structs");
pred@2019
   181
        }
dvander@824
   182
    }
dvander@824
   183
}