af05dbbcdf
--HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%402088
175 lines
4.7 KiB
C#
175 lines
4.7 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using System.IO;
|
|
|
|
namespace incparser
|
|
{
|
|
class ParseWriter
|
|
{
|
|
private int level;
|
|
private StringBuilder data;
|
|
|
|
public ArrayList enumList = new ArrayList();
|
|
public ArrayList defineList = new ArrayList();
|
|
public ArrayList enumTypeList = new ArrayList();
|
|
public ArrayList forwardList = new ArrayList();
|
|
public ArrayList nativeList = new ArrayList();
|
|
public ArrayList stockList = new ArrayList();
|
|
public ArrayList funcenumList = new ArrayList();
|
|
public ArrayList functagList = new ArrayList();
|
|
public ArrayList structList = new ArrayList();
|
|
|
|
public int Level
|
|
{
|
|
get
|
|
{
|
|
return level;
|
|
}
|
|
}
|
|
|
|
public string Contents
|
|
{
|
|
get
|
|
{
|
|
return data.ToString();
|
|
}
|
|
}
|
|
|
|
public void Reset()
|
|
{
|
|
level = 0;
|
|
data = new StringBuilder();
|
|
}
|
|
|
|
public ParseWriter()
|
|
{
|
|
level = 0;
|
|
data = new StringBuilder();
|
|
}
|
|
|
|
public void BeginSection(string name)
|
|
{
|
|
WriteLine("\"" + PrepString(name) + "\"");
|
|
WriteLine("{");
|
|
level++;
|
|
}
|
|
|
|
public void WritePair(string key, string value)
|
|
{
|
|
WriteLine("\"" + PrepString(key) + "\"\t\t\"" + PrepString(value) + "\"");
|
|
}
|
|
|
|
public void EndSection()
|
|
{
|
|
if (--level < 0)
|
|
{
|
|
throw new System.Exception("Writer nesting level went out of bounds");
|
|
}
|
|
WriteLine("}");
|
|
}
|
|
|
|
public void WriteFiles(string template, string outputfile)
|
|
{
|
|
StreamReader sr = null;
|
|
|
|
try
|
|
{
|
|
sr = File.OpenText(template);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Console.WriteLine("Failed to open template file: " + e.Message);
|
|
return;
|
|
}
|
|
|
|
string contents = sr.ReadToEnd();
|
|
|
|
string replace = ToOutputString(defineList);
|
|
contents = contents.Replace("$defines", replace);
|
|
|
|
replace = ToOutputString(enumList);
|
|
contents = contents.Replace("$enums", replace);
|
|
|
|
replace = ToOutputString(enumTypeList);
|
|
contents = contents.Replace("$enumtypes", replace);
|
|
|
|
replace = ToOutputString(forwardList);
|
|
contents = contents.Replace("$forwards", replace);
|
|
|
|
replace = ToOutputString(nativeList);
|
|
contents = contents.Replace("$natives", replace);
|
|
|
|
replace = ToOutputString(stockList);
|
|
contents = contents.Replace("$stocks", replace);
|
|
|
|
replace = ToOutputString(funcenumList);
|
|
contents = contents.Replace("$funcenums", replace);
|
|
|
|
replace = ToOutputString(functagList);
|
|
contents = contents.Replace("$functags", replace);
|
|
|
|
replace = ToOutputString(structList);
|
|
contents = contents.Replace("$structs", replace);
|
|
|
|
StreamWriter sw;
|
|
sw = File.CreateText(outputfile);
|
|
|
|
sw.Write(contents);
|
|
|
|
sr.Close();
|
|
sw.Close();
|
|
}
|
|
|
|
private string ToOutputString(ArrayList a)
|
|
{
|
|
string defines = "";
|
|
int count = 0;
|
|
|
|
foreach (object o in a)
|
|
{
|
|
defines += o;
|
|
defines += " ";
|
|
count += o.ToString().Length;
|
|
|
|
if (count > 180)
|
|
{
|
|
defines += "\r\n";
|
|
count = 0;
|
|
}
|
|
}
|
|
|
|
return defines;
|
|
}
|
|
|
|
private void WriteLine(string line)
|
|
{
|
|
Tabinate();
|
|
data.Append(line + "\n");
|
|
}
|
|
|
|
private void Tabinate()
|
|
{
|
|
for (int i = 0; i < level; i++)
|
|
{
|
|
data.Append("\t");
|
|
}
|
|
}
|
|
|
|
private string PrepString(string text)
|
|
{
|
|
/* Escape all escaped newlines (so they can be unescaped later) */
|
|
text = text.Replace("\\n", "\\\\n");
|
|
/* Escape all literal newlines */
|
|
text = text.Replace("\n", "\\n");
|
|
text = text.Replace("\r", "");
|
|
/* Remove escaped quotations */
|
|
text = text.Replace("\\\"", "\"");
|
|
/* Replace all quotations with escaped ones now */
|
|
text = text.Replace("\"", "\\\"");
|
|
return text;
|
|
}
|
|
}
|
|
}
|