--HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%402088
		
			
				
	
	
		
			184 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			184 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.Text;
 | 
						|
using System.IO;
 | 
						|
 | 
						|
namespace incparser
 | 
						|
{
 | 
						|
    class Program
 | 
						|
    {
 | 
						|
        static void Main(string[] args)
 | 
						|
        {
 | 
						|
            Environment.Exit(SubMain(args));
 | 
						|
        }
 | 
						|
 | 
						|
        static int SubMain(string[] args)
 | 
						|
        {
 | 
						|
            string directory = ".";
 | 
						|
            string template = "template.txt";
 | 
						|
            string outputfile = "output.txt";
 | 
						|
            string file = null;
 | 
						|
 | 
						|
            if (args.Length == 0 || (args.Length == 1 && args[0] == "-h"))
 | 
						|
            {
 | 
						|
                PrintHelp();
 | 
						|
                return 0;
 | 
						|
            }
 | 
						|
 | 
						|
            for (int i=0; i<args.Length-1; i++)
 | 
						|
            {
 | 
						|
                if (args[i] == "-d")
 | 
						|
                {
 | 
						|
                    directory = args[i + 1];
 | 
						|
                }
 | 
						|
 | 
						|
                if (args[i] == "-t")
 | 
						|
                {
 | 
						|
                    template = args[i + 1];
 | 
						|
                }
 | 
						|
 | 
						|
                if (args[i] == "-o")
 | 
						|
                {
 | 
						|
                    outputfile = args[i + 1];
 | 
						|
                }
 | 
						|
 | 
						|
                if (args[i] == "-f")
 | 
						|
                {
 | 
						|
                    file = args[i + 1];
 | 
						|
                }
 | 
						|
 | 
						|
                if (args[i] == "-h")
 | 
						|
                {
 | 
						|
                    if (args[i + 1] == "template")
 | 
						|
                    {
 | 
						|
                        PrintTemplateHelp();
 | 
						|
                        return 0;
 | 
						|
                    }
 | 
						|
                    PrintHelp();
 | 
						|
                    return 0;
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            IncParser inc = null;
 | 
						|
 | 
						|
            if (file == null)
 | 
						|
            {
 | 
						|
                DirectoryInfo di = new DirectoryInfo(directory);
 | 
						|
                FileInfo[] rgFiles = di.GetFiles("*.inc");
 | 
						|
 | 
						|
                ParseWriter pwr = new ParseWriter();
 | 
						|
 | 
						|
                foreach (FileInfo fi in rgFiles)
 | 
						|
                {
 | 
						|
                    pwr.Reset();
 | 
						|
 | 
						|
                    Console.Write("Parsing file: " + fi.ToString() + "... ");
 | 
						|
                  
 | 
						|
                    try
 | 
						|
                    {
 | 
						|
                      inc = new IncParser(fi.FullName);
 | 
						|
                    }
 | 
						|
                    catch (ParseException e)
 | 
						|
                    {
 | 
						|
                        Console.WriteLine("Initial browsing failed: " + e.Message);
 | 
						|
                        continue;
 | 
						|
                    }
 | 
						|
                    catch (System.Exception e)
 | 
						|
                    {
 | 
						|
                        Console.WriteLine("Failed to read file: " + e.Message);
 | 
						|
                        continue;
 | 
						|
                    }
 | 
						|
 | 
						|
                    try
 | 
						|
                    {
 | 
						|
                        inc.Parse(pwr);
 | 
						|
                    }
 | 
						|
                    catch (System.Exception e)
 | 
						|
                    {
 | 
						|
                        Console.WriteLine("Error parsing file (line " + inc.GetLineNumber() + "): " + e.Message);
 | 
						|
                        continue;
 | 
						|
                    }
 | 
						|
 | 
						|
                    if (pwr.Level != 0)
 | 
						|
                    {
 | 
						|
                        Console.WriteLine("Fatal parse error detected; unable to complete output.");
 | 
						|
                        continue;
 | 
						|
                    }
 | 
						|
 | 
						|
                    Console.WriteLine("Complete!");
 | 
						|
                 }
 | 
						|
 | 
						|
                 pwr.WriteFiles(template, outputfile);
 | 
						|
 | 
						|
                 Console.WriteLine("Parsing Complete!");
 | 
						|
 | 
						|
                 return 0;
 | 
						|
            }
 | 
						|
      
 | 
						|
            try
 | 
						|
            {
 | 
						|
                inc = new IncParser(file);
 | 
						|
            }
 | 
						|
            catch (ParseException e)
 | 
						|
            {
 | 
						|
                Console.WriteLine("Initial browsing failed: " + e.Message);
 | 
						|
                return 1;
 | 
						|
            }
 | 
						|
            catch (System.Exception e)
 | 
						|
            {
 | 
						|
                Console.WriteLine("Failed to read file: " + e.Message);
 | 
						|
                return 1;
 | 
						|
            }
 | 
						|
 | 
						|
            ParseWriter pw = new ParseWriter();
 | 
						|
 | 
						|
            try
 | 
						|
            {
 | 
						|
                inc.Parse(pw);
 | 
						|
            }
 | 
						|
            catch (System.Exception e)
 | 
						|
            {
 | 
						|
                Console.WriteLine("Error parsing file (line " + inc.GetLineNumber() + "): " + e.Message);
 | 
						|
                return 1;
 | 
						|
            }
 | 
						|
 | 
						|
            if (pw.Level != 0)
 | 
						|
            {
 | 
						|
                Console.WriteLine("Fatal parse error detected; unable to complete output.");
 | 
						|
                return 1;
 | 
						|
            }
 | 
						|
 | 
						|
            Console.Write(pw.Contents);
 | 
						|
            Console.Write("\n");
 | 
						|
 | 
						|
            return 0;
 | 
						|
        }
 | 
						|
 | 
						|
        static void PrintHelp()
 | 
						|
        {
 | 
						|
            Console.WriteLine("SourcePawn include file parser by BAILOPAN (edited by pRED*)");
 | 
						|
            Console.Write("\n");
 | 
						|
            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)");
 | 
						|
            Console.Write("\n");
 | 
						|
            Console.WriteLine("Parameters:");
 | 
						|
            Console.Write("\n");
 | 
						|
            Console.WriteLine("-f <filename> - Specify an input file to be used");
 | 
						|
            Console.WriteLine("-d <path> - Specify a directory to parse (only *.inc files are used)");
 | 
						|
            Console.WriteLine("-t <filename> - Specify a template file to be used");
 | 
						|
            Console.WriteLine("-o <filename> - Specify an output file to be used");
 | 
						|
            Console.WriteLine("-h - Display this help");
 | 
						|
            Console.WriteLine("-h template - Displays help about templates");
 | 
						|
        }
 | 
						|
 | 
						|
        static void PrintTemplateHelp()
 | 
						|
        {
 | 
						|
            Console.WriteLine("Template File Help:");
 | 
						|
            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");
 | 
						|
            Console.Write("\n");
 | 
						|
            Console.WriteLine("Variables:");
 | 
						|
            Console.Write("\n");
 | 
						|
            Console.WriteLine("$defines $enums $enumtypes $forwards $natives $stocks $funcenums $functags $structs");
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |