Browse Source

Make Highlighting definitions and Xshd model serializable.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@4626 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 17 years ago
parent
commit
ef670156b8
  1. 1
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/ITextSource.cs
  2. 2
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightedLine.cs
  3. 54
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightingBrush.cs
  4. 45
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightingColor.cs
  5. 16
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightingManager.cs
  6. 1
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightingRule.cs
  7. 1
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightingRuleSet.cs
  8. 1
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightingSpan.cs
  9. 5
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Xshd/V2Loader.cs
  10. 1
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Xshd/XmlHighlightingDefinition.cs
  11. 45
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Xshd/XshdColor.cs
  12. 1
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Xshd/XshdElement.cs
  13. 1
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Xshd/XshdImport.cs
  14. 1
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Xshd/XshdKeywords.cs
  15. 1
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Xshd/XshdReference.cs
  16. 1
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Xshd/XshdRule.cs
  17. 1
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Xshd/XshdRuleSet.cs
  18. 1
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Xshd/XshdSpan.cs
  19. 1
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Xshd/XshdSyntaxDefinition.cs

1
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/ITextSource.cs

@ -235,6 +235,7 @@ namespace ICSharpCode.AvalonEdit.Document @@ -235,6 +235,7 @@ namespace ICSharpCode.AvalonEdit.Document
/// RopeTextSource only publishes a copy of the contained rope to ensure that the underlying rope cannot be modified.
/// Unless the creator of the RopeTextSource still has a reference on the rope, RopeTextSource is immutable.
/// </remarks>
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate", Justification="Not a property because it creates a clone")]
public Rope<char> GetRope()
{
return rope.Clone();

2
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightedLine.cs

@ -27,7 +27,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting @@ -27,7 +27,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting
if (documentLine == null)
throw new ArgumentNullException("documentLine");
this.DocumentLine = documentLine;
this.Sections = new List<HighlightedSection>();
this.Sections = new NullSafeCollection<HighlightedSection>();
}
/// <summary>

54
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightingBrush.cs

@ -6,6 +6,10 @@ @@ -6,6 +6,10 @@
// </file>
using System;
using System.Diagnostics;
using System.Globalization;
using System.Reflection;
using System.Runtime.Serialization;
using System.Windows;
using System.Windows.Media;
@ -16,6 +20,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting @@ -16,6 +20,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting
/// <summary>
/// A brush used for syntax highlighting. Can retrieve a real brush on-demand.
/// </summary>
[Serializable]
public abstract class HighlightingBrush
{
/// <summary>
@ -41,11 +46,12 @@ namespace ICSharpCode.AvalonEdit.Highlighting @@ -41,11 +46,12 @@ namespace ICSharpCode.AvalonEdit.Highlighting
/// <summary>
/// Highlighting brush implementation that takes a frozen brush.
/// </summary>
sealed class SimpleHighlightingBrush : HighlightingBrush
[Serializable]
sealed class SimpleHighlightingBrush : HighlightingBrush, ISerializable
{
readonly Brush brush;
readonly SolidColorBrush brush;
public SimpleHighlightingBrush(Brush brush)
public SimpleHighlightingBrush(SolidColorBrush brush)
{
brush.Freeze();
this.brush = brush;
@ -62,33 +68,53 @@ namespace ICSharpCode.AvalonEdit.Highlighting @@ -62,33 +68,53 @@ namespace ICSharpCode.AvalonEdit.Highlighting
{
return brush.ToString();
}
SimpleHighlightingBrush(SerializationInfo info, StreamingContext context)
{
this.brush = new SolidColorBrush((Color)ColorConverter.ConvertFromString(info.GetString("color")));
brush.Freeze();
}
void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("color", brush.Color.ToString(CultureInfo.InvariantCulture));
}
}
/// <summary>
/// HighlightingBrush implementation that finds a brush using a resource.
/// </summary>
sealed class ResourceKeyHighlightingBrush : HighlightingBrush
[Serializable]
sealed class SystemColorHighlightingBrush : HighlightingBrush, ISerializable
{
readonly ResourceKey resourceKey;
readonly string name;
readonly PropertyInfo property;
public ResourceKeyHighlightingBrush(ResourceKey resourceKey, string name)
public SystemColorHighlightingBrush(PropertyInfo property)
{
this.resourceKey = resourceKey;
this.name = name;
Debug.Assert(property.ReflectedType == typeof(SystemColors));
this.property = property;
}
public override Brush GetBrush(ITextRunConstructionContext context)
{
if (context != null && context.TextView != null)
return (Brush)context.TextView.FindResource(resourceKey);
else
return (Brush)Application.Current.FindResource(resourceKey);
return (Brush)property.GetValue(null, null);
}
public override string ToString()
{
return name;
return property.Name;
}
SystemColorHighlightingBrush(SerializationInfo info, StreamingContext context)
{
property = typeof(SystemColors).GetProperty(info.GetString("propertyName"));
if (property == null)
throw new ArgumentException("Error deserializing SystemColorHighlightingBrush");
}
void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("propertyName", property.Name);
}
}
}

45
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightingColor.cs

@ -7,6 +7,8 @@ @@ -7,6 +7,8 @@
using System;
using System.Globalization;
using System.Runtime.Serialization;
using System.Security.Permissions;
using System.Text;
using System.Windows;
using System.Windows.Media;
@ -16,7 +18,8 @@ namespace ICSharpCode.AvalonEdit.Highlighting @@ -16,7 +18,8 @@ namespace ICSharpCode.AvalonEdit.Highlighting
/// <summary>
/// A highlighting color is a set of font properties and foreground and background color.
/// </summary>
public class HighlightingColor
[Serializable]
public class HighlightingColor : ISerializable
{
/// <summary>
/// Gets/Sets the name of the color.
@ -38,6 +41,46 @@ namespace ICSharpCode.AvalonEdit.Highlighting @@ -38,6 +41,46 @@ namespace ICSharpCode.AvalonEdit.Highlighting
/// </summary>
public HighlightingBrush Foreground { get; set; }
/// <summary>
/// Creates a new HighlightingColor instance.
/// </summary>
public HighlightingColor()
{
}
/// <summary>
/// Deserializes a HighlightingColor.
/// </summary>
protected HighlightingColor(SerializationInfo info, StreamingContext context)
{
if (info == null)
throw new ArgumentNullException("info");
this.Name = info.GetString("Name");
if (info.GetBoolean("HasWeight"))
this.FontWeight = System.Windows.FontWeight.FromOpenTypeWeight(info.GetInt32("Weight"));
if (info.GetBoolean("HasStyle"))
this.FontStyle = (FontStyle?)new FontStyleConverter().ConvertFromInvariantString(info.GetString("Style"));
this.Foreground = (HighlightingBrush)info.GetValue("Foreground", typeof(HighlightingBrush));
}
/// <summary>
/// Serializes this HighlightingColor instance.
/// </summary>
[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)]
public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
{
if (info == null)
throw new ArgumentNullException("info");
info.AddValue("Name", this.Name);
info.AddValue("HasWeight", this.FontWeight.HasValue);
if (this.FontWeight.HasValue)
info.AddValue("Weight", this.FontWeight.Value.ToOpenTypeWeight());
info.AddValue("HasStyle", this.FontStyle.HasValue);
if (this.FontStyle.HasValue)
info.AddValue("Style", this.FontStyle.Value.ToString());
info.AddValue("Foreground", this.Foreground);
}
/// <summary>
/// Gets CSS code for the color.
/// </summary>

16
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightingManager.cs

@ -150,11 +150,17 @@ namespace ICSharpCode.AvalonEdit.Highlighting @@ -150,11 +150,17 @@ namespace ICSharpCode.AvalonEdit.Highlighting
else
Debug.Assert(xshd.Extensions.Count == 0);
// // round-trip xshd:
// using (XmlTextWriter writer = new XmlTextWriter("c:\\temp\\" + resourceName, System.Text.Encoding.UTF8)) {
// writer.Formatting = Formatting.Indented;
// new Xshd.SaveXshdVisitor(writer).WriteDefinition(xshd);
// }
// round-trip xshd:
using (XmlTextWriter writer = new XmlTextWriter("c:\\temp\\" + resourceName, System.Text.Encoding.UTF8)) {
writer.Formatting = Formatting.Indented;
new Xshd.SaveXshdVisitor(writer).WriteDefinition(xshd);
}
using (FileStream fs = File.Create("c:\\temp\\" + resourceName + ".bin")) {
new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter().Serialize(fs, xshd);
}
using (FileStream fs = File.Create("c:\\temp\\" + resourceName + ".compiled")) {
new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter().Serialize(fs, Xshd.HighlightingLoader.Load(xshd, this));
}
RegisterHighlighting(name, extensions, Xshd.HighlightingLoader.Load(xshd, this));
#else

1
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightingRule.cs

@ -13,6 +13,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting @@ -13,6 +13,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting
/// <summary>
/// A highlighting rule.
/// </summary>
[Serializable]
public class HighlightingRule
{
/// <summary>

1
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightingRuleSet.cs

@ -14,6 +14,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting @@ -14,6 +14,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting
/// <summary>
/// A highlighting rule set describes a set of spans that are valid at a given code location.
/// </summary>
[Serializable]
public class HighlightingRuleSet
{
/// <summary>

1
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightingSpan.cs

@ -14,6 +14,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting @@ -14,6 +14,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting
/// A highlighting span is a region with start+end expression that has a different RuleSet inside
/// and colors the region.
/// </summary>
[Serializable]
public class HighlightingSpan
{
/// <summary>

5
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Xshd/V2Loader.cs

@ -281,15 +281,14 @@ namespace ICSharpCode.AvalonEdit.Highlighting.Xshd @@ -281,15 +281,14 @@ namespace ICSharpCode.AvalonEdit.Highlighting.Xshd
return FixedColorHighlightingBrush((Color?)ColorConverter.ConvertFromInvariantString(foreground));
}
internal static ResourceKeyHighlightingBrush GetSystemColorBrush(IXmlLineInfo lineInfo, string name)
internal static SystemColorHighlightingBrush GetSystemColorBrush(IXmlLineInfo lineInfo, string name)
{
Debug.Assert(name.StartsWith("SystemColors.", StringComparison.Ordinal));
string shortName = name.Substring(13);
var property = typeof(SystemColors).GetProperty(shortName + "BrushKey");
if (property == null)
throw Error(lineInfo, "Cannot find '" + name + "'.");
ResourceKey key = (ResourceKey)property.GetValue(null, null);
return new ResourceKeyHighlightingBrush(key, name);
return new SystemColorHighlightingBrush(property);
}
static HighlightingBrush FixedColorHighlightingBrush(Color? color)

1
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Xshd/XmlHighlightingDefinition.cs

@ -16,6 +16,7 @@ using ICSharpCode.AvalonEdit.Utils; @@ -16,6 +16,7 @@ using ICSharpCode.AvalonEdit.Utils;
namespace ICSharpCode.AvalonEdit.Highlighting.Xshd
{
[Serializable]
sealed class XmlHighlightingDefinition : IHighlightingDefinition
{
public string Name { get; private set; }

45
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Xshd/XshdColor.cs

@ -6,6 +6,8 @@ @@ -6,6 +6,8 @@
// </file>
using System;
using System.Runtime.Serialization;
using System.Security.Permissions;
using System.Windows;
namespace ICSharpCode.AvalonEdit.Highlighting.Xshd
@ -13,7 +15,8 @@ namespace ICSharpCode.AvalonEdit.Highlighting.Xshd @@ -13,7 +15,8 @@ namespace ICSharpCode.AvalonEdit.Highlighting.Xshd
/// <summary>
/// A color in an Xshd file.
/// </summary>
public class XshdColor : XshdElement
[Serializable]
public class XshdColor : XshdElement, ISerializable
{
/// <summary>
/// Gets/sets the name.
@ -35,6 +38,46 @@ namespace ICSharpCode.AvalonEdit.Highlighting.Xshd @@ -35,6 +38,46 @@ namespace ICSharpCode.AvalonEdit.Highlighting.Xshd
/// </summary>
public FontStyle? FontStyle { get; set; }
/// <summary>
/// Creates a new XshdColor instance.
/// </summary>
public XshdColor()
{
}
/// <summary>
/// Deserializes an XshdColor.
/// </summary>
protected XshdColor(SerializationInfo info, StreamingContext context)
{
if (info == null)
throw new ArgumentNullException("info");
this.Name = info.GetString("Name");
this.Foreground = (HighlightingBrush)info.GetValue("Foreground", typeof(HighlightingBrush));
if (info.GetBoolean("HasWeight"))
this.FontWeight = System.Windows.FontWeight.FromOpenTypeWeight(info.GetInt32("Weight"));
if (info.GetBoolean("HasStyle"))
this.FontStyle = (FontStyle?)new FontStyleConverter().ConvertFromInvariantString(info.GetString("Style"));
}
/// <summary>
/// Serializes this XshdColor instance.
/// </summary>
[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)]
public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
{
if (info == null)
throw new ArgumentNullException("info");
info.AddValue("Name", this.Name);
info.AddValue("Foreground", this.Foreground);
info.AddValue("HasWeight", this.FontWeight.HasValue);
if (this.FontWeight.HasValue)
info.AddValue("Weight", this.FontWeight.Value.ToOpenTypeWeight());
info.AddValue("HasStyle", this.FontStyle.HasValue);
if (this.FontStyle.HasValue)
info.AddValue("Style", this.FontStyle.Value.ToString());
}
/// <inheritdoc/>
public override object AcceptVisitor(IXshdVisitor visitor)
{

1
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Xshd/XshdElement.cs

@ -12,6 +12,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting.Xshd @@ -12,6 +12,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting.Xshd
/// <summary>
/// An element in a XSHD rule set.
/// </summary>
[Serializable]
public abstract class XshdElement
{
/// <summary>

1
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Xshd/XshdImport.cs

@ -12,6 +12,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting.Xshd @@ -12,6 +12,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting.Xshd
/// <summary>
/// &lt;Import&gt; element.
/// </summary>
[Serializable]
public class XshdImport : XshdElement
{
/// <summary>

1
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Xshd/XshdKeywords.cs

@ -14,6 +14,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting.Xshd @@ -14,6 +14,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting.Xshd
/// <summary>
/// A list of keywords.
/// </summary>
[Serializable]
public class XshdKeywords : XshdElement
{
/// <summary>

1
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Xshd/XshdReference.cs

@ -12,6 +12,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting.Xshd @@ -12,6 +12,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting.Xshd
/// <summary>
/// A reference to an xshd color, or an inline xshd color.
/// </summary>
[Serializable]
public struct XshdReference<T> : IEquatable<XshdReference<T>> where T : XshdElement
{
string referencedDefinition;

1
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Xshd/XshdRule.cs

@ -12,6 +12,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting.Xshd @@ -12,6 +12,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting.Xshd
/// <summary>
/// &lt;Rule&gt; element.
/// </summary>
[Serializable]
public class XshdRule : XshdElement
{
/// <summary>

1
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Xshd/XshdRuleSet.cs

@ -14,6 +14,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting.Xshd @@ -14,6 +14,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting.Xshd
/// <summary>
/// A rule set in a XSHD file.
/// </summary>
[Serializable]
public class XshdRuleSet : XshdElement
{
/// <summary>

1
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Xshd/XshdSpan.cs

@ -29,6 +29,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting.Xshd @@ -29,6 +29,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting.Xshd
/// <summary>
/// &lt;Span&gt; element.
/// </summary>
[Serializable]
public class XshdSpan : XshdElement
{
/// <summary>

1
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Xshd/XshdSyntaxDefinition.cs

@ -14,6 +14,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting.Xshd @@ -14,6 +14,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting.Xshd
/// <summary>
/// A &lt;SyntaxDefinition&gt; element.
/// </summary>
[Serializable]
public class XshdSyntaxDefinition
{
/// <summary>

Loading…
Cancel
Save