private string OutputStructure(IDictionary cs, int level, string newline, bool whitespace)
{
string leveltabs = "";
string spacing = "";
StringBuilder db = new StringBuilder("");
// Check if this ConfigStruct is not empty
if(cs.Count > 0)
{
// Create whitespace
if(whitespace)
{
for(int i = 0; i < level; i++) leveltabs += "\t";
spacing = " ";
}
// Get enumerator
IDictionaryEnumerator de = cs.GetEnumerator();
// Go for each item
for(int i = 0; i < cs.Count; i++)
{
// Go to next item
de.MoveNext();
// Check if the value is null
if(de.Value == null)
{
// Output the keyword "null"
//db.Append(leveltabs); db.Append(de.Key.ToString()); db.Append(spacing);
//db.Append("="); db.Append(spacing); db.Append("null;"); db.Append(newline);
// Output key only
db.Append(leveltabs); db.Append(de.Key.ToString()); db.Append(";"); db.Append(newline);
}
// Check if the value if of ConfigStruct type
else if(de.Value is IDictionary)
{
// Output recursive structure
if(whitespace) { db.Append(leveltabs); db.Append(newline); }
db.Append(leveltabs); db.Append(de.Key); db.Append(newline);
db.Append(leveltabs); db.Append("{"); db.Append(newline);
db.Append(OutputStructure((IDictionary)de.Value, level + 1, newline, whitespace));
db.Append(leveltabs); db.Append("}"); db.Append(newline);
if(whitespace) { db.Append(leveltabs); db.Append(newline); }
}
// Check if the value is of boolean type
else if(de.Value is bool)
{
// Check value
if((bool)de.Value == true)
{
// Output the keyword "true"
db.Append(leveltabs); db.Append(de.Key.ToString()); db.Append(spacing);
db.Append("="); db.Append(spacing); db.Append("true;"); db.Append(newline);
}
else
{
// Output the keyword "false"
db.Append(leveltabs); db.Append(de.Key.ToString()); db.Append(spacing);
db.Append("="); db.Append(spacing); db.Append("false;"); db.Append(newline);
}
}
// Check if value is of float type
else if(de.Value is float)
{
// Output the value with a postfixed f
db.Append(leveltabs); db.Append(de.Key); db.Append(spacing); db.Append("=");
db.Append(spacing); db.Append(String.Format(CultureInfo.InvariantCulture, "{0}", de.Value)); db.Append("f;"); db.Append(newline);
}
// Check if value is of other numeric type
else if(de.Value.GetType().IsPrimitive)
{
// Output the value unquoted
db.Append(leveltabs); db.Append(de.Key); db.Append(spacing); db.Append("=");
db.Append(spacing); db.Append(String.Format(CultureInfo.InvariantCulture, "{0}", de.Value)); db.Append(";"); db.Append(newline);
}
else
{
// Output the value with quotes and escape characters
db.Append(leveltabs); db.Append(de.Key); db.Append(spacing); db.Append("=");
db.Append(spacing); db.Append("\""); db.Append(EscapedString(de.Value.ToString())); db.Append("\";"); db.Append(newline);
}
}
}
// Return the structure
return db.ToString();
}