internal void Save (string fileName)
{
using (var writer = new StreamWriter (fileName)) {
writer.WriteLine ("{");
writer.WriteLine ("\t\"name\":\"{0}\",", Name);
writer.WriteLine ("\t\"version\":\"1.0\",");
if (!string.IsNullOrEmpty (Description))
writer.WriteLine ("\t\"description\":\"{0}\",", Description);
if (!string.IsNullOrEmpty (Originator))
writer.WriteLine ("\t\"originator\":\"{0}\",", Originator);
if (!string.IsNullOrEmpty (BaseScheme))
writer.WriteLine ("\t\"baseScheme\":\"{0}\",", BaseScheme);
var baseStyle = SyntaxModeService.GetColorStyle (BaseScheme ?? SyntaxModeService.GetDefaultColorStyleName ());
writer.WriteLine ("\t\"colors\":[");
bool first = true;
foreach (var ambient in ambientColors) {
var thisValue = ambient.Value.Info.GetValue (this, null) as AmbientColor;
if (thisValue == null)
continue;
var baseValue = ambient.Value.Info.GetValue (baseStyle, null) as AmbientColor;
if (thisValue.Equals (baseValue)) {
continue;
}
var colorString = new StringBuilder ();
foreach (var color in thisValue.Colors) {
if (colorString.Length > 0)
colorString.Append (", ");
colorString.Append (string.Format ("\"{0}\":\"{1}\"", color.Item1, ColorToMarkup (color.Item2)));
}
if (colorString.Length == 0) {
Console.WriteLine ("Invalid ambient color :" + thisValue);
continue;
}
if (!first) {
writer.WriteLine (",");
} else {
first = false;
}
writer.Write ("\t\t{");
writer.Write ("\"name\": \"{0}\", {1}", ambient.Value.Attribute.Name, colorString);
writer.Write (" }");
}
writer.WriteLine ("\t],");
first = true;
writer.WriteLine ("\t\"text\":[");
foreach (var textColor in textColors) {
var thisValue = textColor.Value.Info.GetValue (this, null) as ChunkStyle;
if (thisValue == null)
continue;
var baseValue = textColor.Value.Info.GetValue (baseStyle, null) as ChunkStyle;
if (thisValue.Equals (baseValue)) {
continue;
}
var colorString = new StringBuilder ();
if (!thisValue.TransparentForeground)
colorString.Append (string.Format ("\"fore\":\"{0}\"", ColorToMarkup (thisValue.Foreground)));
if (!thisValue.TransparentBackground) {
if (colorString.Length > 0)
colorString.Append (", ");
colorString.Append (string.Format ("\"back\":\"{0}\"", ColorToMarkup (thisValue.Background)));
}
if (thisValue.FontWeight != Xwt.Drawing.FontWeight.Normal) {
if (colorString.Length > 0)
colorString.Append (", ");
colorString.Append (string.Format ("\"weight\":\"{0}\"", thisValue.FontWeight));
}
if (thisValue.FontStyle != Xwt.Drawing.FontStyle.Normal) {
if (colorString.Length > 0)
colorString.Append (", ");
colorString.Append (string.Format ("\"style\":\"{0}\"", thisValue.FontStyle));
}
if (!first) {
writer.WriteLine (",");
} else {
first = false;
}
writer.Write ("\t\t{");
if (colorString.Length == 0) {
writer.Write ("\"name\": \"{0}\"", textColor.Value.Attribute.Name);
} else {
writer.Write ("\"name\": \"{0}\", {1}", textColor.Value.Attribute.Name, colorString);
}
writer.Write (" }");
}
writer.WriteLine ();
writer.WriteLine ("\t]");
writer.WriteLine ("}");
}
}