tools/incparser/ParseWriter.cs
author David Anderson <dvander@alliedmods.net>
Wed Dec 19 01:47:26 2007 +0000 (2007-12-19)
changeset 1806 b1ba61360272
parent 824 0e9a2c98c9aa
child 2019 9f473114a511
permissions -rw-r--r--
fixed build
dvander@824
     1
using System;
dvander@824
     2
using System.Collections.Generic;
dvander@824
     3
using System.Text;
dvander@824
     4
dvander@824
     5
namespace incparser
dvander@824
     6
{
dvander@824
     7
    class ParseWriter
dvander@824
     8
    {
dvander@824
     9
        private int level;
dvander@824
    10
        private StringBuilder data;
dvander@824
    11
dvander@824
    12
        public int Level
dvander@824
    13
        {
dvander@824
    14
            get
dvander@824
    15
            {
dvander@824
    16
                return level;
dvander@824
    17
            }
dvander@824
    18
        }
dvander@824
    19
dvander@824
    20
        public string Contents
dvander@824
    21
        {
dvander@824
    22
            get
dvander@824
    23
            {
dvander@824
    24
                return data.ToString();
dvander@824
    25
            }
dvander@824
    26
        }
dvander@824
    27
dvander@824
    28
        public ParseWriter()
dvander@824
    29
        {
dvander@824
    30
            level = 0;
dvander@824
    31
            data = new StringBuilder();
dvander@824
    32
        }
dvander@824
    33
dvander@824
    34
        public void BeginSection(string name)
dvander@824
    35
        {
dvander@824
    36
            WriteLine("\"" + PrepString(name) + "\"");
dvander@824
    37
            WriteLine("{");
dvander@824
    38
            level++;
dvander@824
    39
        }
dvander@824
    40
dvander@824
    41
        public void WritePair(string key, string value)
dvander@824
    42
        {
dvander@824
    43
            WriteLine("\"" + PrepString(key) + "\"\t\t\"" + PrepString(value) + "\"");
dvander@824
    44
        }
dvander@824
    45
dvander@824
    46
        public void EndSection()
dvander@824
    47
        {
dvander@824
    48
            if (--level < 0)
dvander@824
    49
            {
dvander@824
    50
                throw new System.Exception("Writer nesting level went out of bounds");
dvander@824
    51
            }
dvander@824
    52
            WriteLine("}");
dvander@824
    53
        }
dvander@824
    54
dvander@824
    55
        private void WriteLine(string line)
dvander@824
    56
        {
dvander@824
    57
            Tabinate();
dvander@824
    58
            data.Append(line + "\n");
dvander@824
    59
        }
dvander@824
    60
dvander@824
    61
        private void Tabinate()
dvander@824
    62
        {
dvander@824
    63
            for (int i = 0; i < level; i++)
dvander@824
    64
            {
dvander@824
    65
                data.Append("\t");
dvander@824
    66
            }
dvander@824
    67
        }
dvander@824
    68
dvander@824
    69
        private string PrepString(string text)
dvander@824
    70
        {
dvander@824
    71
            /* Escape all escaped newlines (so they can be unescaped later) */
dvander@824
    72
            text = text.Replace("\\n", "\\\\n");
dvander@824
    73
            /* Escape all literal newlines */
dvander@824
    74
            text = text.Replace("\n", "\\n");
dvander@824
    75
            text = text.Replace("\r", "");
dvander@824
    76
            /* Remove escaped quotations */
dvander@824
    77
            text = text.Replace("\\\"", "\"");
dvander@824
    78
            /* Replace all quotations with escaped ones now */
dvander@824
    79
            text = text.Replace("\"", "\\\"");
dvander@824
    80
            return text;
dvander@824
    81
        }
dvander@824
    82
    }
dvander@824
    83
}