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