| 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-- |
| 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 |
} |