Browse Source

Add Underline attribute in syntax highlighting

pull/522/merge
julodnik 11 years ago committed by Daniel Grunwald
parent
commit
a81b6c2349
  1. 3
      data/resources/StringResources.resx
  2. 1
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CustomizedHighlightingColor.cs
  3. 17
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Options/CustomizedHighlightingItem.cs
  4. 2
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Options/HighlightingOptions.xaml
  5. 5
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Options/IHighlightingItem.cs
  6. 16
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Options/NamedColorHighlightingItem.cs
  7. 1
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Options/SimpleHighlightingItem.cs
  8. 3
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/SyntaxHighlighting/CustomizingHighlighter.cs
  9. 2
      src/AddIns/DisplayBindings/HexEditor/Project/Src/View/HexEditOptionsPanel.xaml.cs
  10. 2
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightedInlineBuilder.cs
  11. 15
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightingColor.cs
  12. 8
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightingColorizer.cs
  13. 1
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Xshd/V2Loader.cs
  14. 1
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Xshd/XmlHighlightingDefinition.cs
  15. 8
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Xshd/XshdColor.cs

3
data/resources/StringResources.resx

@ -1729,6 +1729,9 @@ Examples: "120", "MainClass", "Main.cs, 120".</value> @@ -1729,6 +1729,9 @@ Examples: "120", "MainClass", "Main.cs, 120".</value>
<data name="Dialog.HighlightingEditor.ColorDlg.Italic" xml:space="preserve">
<value>Italic</value>
</data>
<data name="Dialog.HighlightingEditor.ColorDlg.Underline" xml:space="preserve">
<value>Underlined</value>
</data>
<data name="Dialog.HighlightingEditor.Export" xml:space="preserve">
<value>Export highlighting colors</value>
</data>

1
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CustomizedHighlightingColor.cs

@ -43,6 +43,7 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -43,6 +43,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
public bool Bold { get; set; }
public bool Italic { get; set; }
public bool Underline { get; set; }
public Color? Foreground { get; set; }
public Color? Background { get; set; }

17
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Options/CustomizedHighlightingItem.cs

@ -66,6 +66,7 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options @@ -66,6 +66,7 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options
{
OnPropertyChanged("Bold");
OnPropertyChanged("Italic");
OnPropertyChanged("Underline");
OnPropertyChanged("Foreground");
OnPropertyChanged("UseDefaultForeground");
OnPropertyChanged("Background");
@ -73,7 +74,7 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options @@ -73,7 +74,7 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options
OnPropertyChanged("IsCustomized");
}
void SetCustomization(bool? bold = null, bool? italic = null,
void SetCustomization(bool? bold = null, bool? italic = null, bool? underline = null,
Color? foreground = null, bool? useDefaultForeground = null,
Color? background = null, bool? useDefaultBackground = null)
{
@ -82,6 +83,7 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options @@ -82,6 +83,7 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options
newColor.Name = this.Name;
newColor.Bold = bold ?? this.Bold;
newColor.Italic = italic ?? this.Italic;
newColor.Underline = underline ?? this.Underline;
if (useDefaultBackground ?? this.UseDefaultBackground)
newColor.Background = null;
@ -99,7 +101,7 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options @@ -99,7 +101,7 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options
else if (customization != null)
customizationList.Remove(customization);
if (newColor.Bold == original.Bold && newColor.Italic == original.Italic &&
if (newColor.Bold == original.Bold && newColor.Italic == original.Italic && newColor.Underline == original.Underline &&
(newColor.Background == null) == original.UseDefaultBackground &&
(newColor.Background == null || newColor.Background == original.Background) &&
(newColor.Foreground == null) == original.UseDefaultForeground &&
@ -140,6 +142,15 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options @@ -140,6 +142,15 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options
}
}
public bool Underline {
get {
return (customization != null) ? customization.Underline : original.Underline;
}
set {
SetCustomization(underline: value);
}
}
public Color Foreground {
get {
return (customization != null) ? (customization.Foreground ?? original.Foreground) : original.Foreground;
@ -191,7 +202,7 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options @@ -191,7 +202,7 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options
public void Reset()
{
original.Reset();
SetCustomization(original.Bold, original.Italic, original.Foreground, original.UseDefaultForeground, original.Background, original.UseDefaultBackground);
SetCustomization(original.Bold, original.Italic, original.Underline, original.Foreground, original.UseDefaultForeground, original.Background, original.UseDefaultBackground);
AllPropertiesChanged();
}

2
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Options/HighlightingOptions.xaml

@ -44,6 +44,8 @@ @@ -44,6 +44,8 @@
Content="{core:Localize Dialog.HighlightingEditor.ColorDlg.Bold}"/>
<CheckBox IsEnabled="{Binding CanSetFont}" IsChecked="{Binding Italic}"
Content="{core:Localize Dialog.HighlightingEditor.ColorDlg.Italic}"/>
<CheckBox IsEnabled="{Binding CanSetFont}" IsChecked="{Binding Underline}"
Content="{core:Localize Dialog.HighlightingEditor.ColorDlg.Underline}"/>
<Button Name="resetButton" IsEnabled="{Binding IsCustomized}" HorizontalAlignment="Left"
Click="ResetButtonClick" Style="{x:Static core:GlobalStyles.ButtonStyle}" Margin="0,4"
Content="Reset" />

5
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Options/IHighlightingItem.cs

@ -43,6 +43,11 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options @@ -43,6 +43,11 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options
/// </summary>
bool Italic { get; set; }
/// <summary>
/// Gets/Sets whether the element uses an underlined font.
/// </summary>
bool Underline { get; set; }
Color Foreground { get; set; }
bool UseDefaultForeground { get; set; }
Color Background { get; set; }

16
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Options/NamedColorHighlightingItem.cs

@ -68,6 +68,15 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options @@ -68,6 +68,15 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options
}
}
public bool Underline {
get {
return color.Underline;
}
set {
throw new NotSupportedException();
}
}
public Color Foreground {
get {
Color? c = color.Foreground != null ? color.Foreground.GetColor(null) : null;
@ -161,7 +170,12 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options @@ -161,7 +170,12 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options
marker.ForegroundColor = item.Foreground;
marker.FontStyle = item.Italic ? FontStyles.Italic : FontStyles.Normal;
marker.FontWeight = item.Bold ? FontWeights.Bold : FontWeights.Normal;
});
if(item.Underline)
{
marker.MarkerColor = item.Foreground;
marker.MarkerTypes = TextMarkerTypes.NormalUnderline;
}
});
}
} else {
exampleTextArea.Document.Text = exampleText;

1
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Options/SimpleHighlightingItem.cs

@ -40,6 +40,7 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options @@ -40,6 +40,7 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options
public string Name { get; private set; }
public bool Bold { get; set; }
public bool Italic { get; set; }
public bool Underline { get; set; }
public Color Foreground { get; set; }
public bool UseDefaultForeground { get; set; }

3
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/SyntaxHighlighting/CustomizingHighlighter.cs

@ -267,7 +267,8 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -267,7 +267,8 @@ namespace ICSharpCode.AvalonEdit.AddIn
Background = CreateBrush(customization.Background),
Foreground = CreateBrush(customization.Foreground),
FontWeight = customization.Bold ? FontWeights.Bold : FontWeights.Normal,
FontStyle = customization.Italic ? FontStyles.Italic : FontStyles.Normal
FontStyle = customization.Italic ? FontStyles.Italic : FontStyles.Normal,
Underline = customization.Underline
};
}
}

2
src/AddIns/DisplayBindings/HexEditor/Project/Src/View/HexEditOptionsPanel.xaml.cs

@ -103,6 +103,8 @@ namespace HexEditor.View @@ -103,6 +103,8 @@ namespace HexEditor.View
preview.FontWeight = FontWeights.Bold;
else
preview.FontWeight = FontWeights.Normal;
if (font.Underline)
preview.TextDecorations = TextDecorations.Underline;
}
}
}

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

@ -113,7 +113,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting @@ -113,7 +113,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting
{
if (color == null)
throw new ArgumentNullException("color");
if (color.Foreground == null && color.Background == null && color.FontStyle == null && color.FontWeight == null) {
if (color.Foreground == null && color.Background == null && color.FontStyle == null && color.FontWeight == null && color.Underline == null) {
// Optimization: don't split the HighlightingState when we're not changing
// any property. For example, the "Punctuation" color in C# is
// empty by default.

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

@ -38,6 +38,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting @@ -38,6 +38,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting
string name;
FontWeight? fontWeight;
FontStyle? fontStyle;
bool? underline;
HighlightingBrush foreground;
HighlightingBrush background;
bool frozen;
@ -84,6 +85,20 @@ namespace ICSharpCode.AvalonEdit.Highlighting @@ -84,6 +85,20 @@ namespace ICSharpCode.AvalonEdit.Highlighting
}
}
/// <summary>
/// Gets/sets the underline flag. Null if the underline status does not change the font style.
/// </summary>
public bool? Underline {
get {
return underline;
}
set {
if (frozen)
throw new InvalidOperationException();
underline = value;
}
}
/// <summary>
/// Gets/sets the foreground color applied by the highlighting.
/// </summary>

8
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightingColorizer.cs

@ -18,6 +18,7 @@ @@ -18,6 +18,7 @@
using System;
using System.Diagnostics;
using System.Windows;
using System.Windows.Media;
using ICSharpCode.AvalonEdit.Document;
using ICSharpCode.AvalonEdit.Rendering;
@ -231,7 +232,8 @@ namespace ICSharpCode.AvalonEdit.Highlighting @@ -231,7 +232,8 @@ namespace ICSharpCode.AvalonEdit.Highlighting
if (color == null)
return true;
return color.Background == null && color.Foreground == null
&& color.FontStyle == null && color.FontWeight == null;
&& color.FontStyle == null && color.FontWeight == null
&& color.Underline == null;
}
/// <summary>
@ -254,7 +256,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting @@ -254,7 +256,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting
if (b != null)
element.BackgroundBrush = b;
}
if (color.FontStyle != null || color.FontWeight != null) {
if (color.FontStyle != null || color.FontWeight != null || color.Underline != null) {
Typeface tf = element.TextRunProperties.Typeface;
element.TextRunProperties.SetTypeface(new Typeface(
tf.FontFamily,
@ -263,6 +265,8 @@ namespace ICSharpCode.AvalonEdit.Highlighting @@ -263,6 +265,8 @@ namespace ICSharpCode.AvalonEdit.Highlighting
tf.Stretch
));
}
if(color.Underline ?? false)
element.TextRunProperties.SetTextDecorations(TextDecorations.Underline);
}
/// <summary>

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

@ -297,6 +297,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting.Xshd @@ -297,6 +297,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting.Xshd
color.Background = ParseColor(position, reader.GetAttribute("background"));
color.FontWeight = ParseFontWeight(reader.GetAttribute("fontWeight"));
color.FontStyle = ParseFontStyle(reader.GetAttribute("fontStyle"));
color.Underline = reader.GetAttribute("underline") == "true";
return color;
}

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

@ -204,6 +204,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting.Xshd @@ -204,6 +204,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting.Xshd
c.Name = color.Name;
c.Foreground = color.Foreground;
c.Background = color.Background;
c.Underline = color.Underline;
c.FontStyle = color.FontStyle;
c.FontWeight = color.FontWeight;
return c;

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

@ -49,6 +49,11 @@ namespace ICSharpCode.AvalonEdit.Highlighting.Xshd @@ -49,6 +49,11 @@ namespace ICSharpCode.AvalonEdit.Highlighting.Xshd
/// </summary>
public FontWeight? FontWeight { get; set; }
/// <summary>
/// Gets/sets the underline flag
/// </summary>
public bool Underline { get; set; }
/// <summary>
/// Gets/sets the font style.
/// </summary>
@ -81,6 +86,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting.Xshd @@ -81,6 +86,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting.Xshd
if (info.GetBoolean("HasStyle"))
this.FontStyle = (FontStyle?)new FontStyleConverter().ConvertFromInvariantString(info.GetString("Style"));
this.ExampleText = info.GetString("ExampleText");
this.Underline = info.GetBoolean("Underline");
}
/// <summary>
@ -99,6 +105,8 @@ namespace ICSharpCode.AvalonEdit.Highlighting.Xshd @@ -99,6 +105,8 @@ namespace ICSharpCode.AvalonEdit.Highlighting.Xshd
info.AddValue("Foreground", this.Foreground);
info.AddValue("Background", this.Background);
info.AddValue("HasWeight", this.FontWeight.HasValue);
if (this.Underline)
info.AddValue("Underline", this.Underline);
if (this.FontWeight.HasValue)
info.AddValue("Weight", this.FontWeight.Value.ToOpenTypeWeight());
info.AddValue("HasStyle", this.FontStyle.HasValue);

Loading…
Cancel
Save