[ClassInterface (ClassInterfaceType.AutoDispatch)]
[Docking (DockingBehavior.Ask)]
[ComVisible (true)]
+ [Designer ("System.Windows.Forms.Design.RichTextBoxDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
#endif
public class RichTextBox : TextBoxBase {
#region Local Variables
internal bool detect_urls;
internal int margin_right;
internal float zoom;
-
- private RTF.TextMap rtf_text_map;
- private int rtf_skip_width;
- private int rtf_skip_count;
private StringBuilder rtf_line;
- private SolidBrush rtf_color;
- private RTF.Font rtf_rtffont;
- private int rtf_rtffont_size;
- private FontStyle rtf_rtfstyle;
- private HorizontalAlignment rtf_rtfalign;
+
+ private RtfSectionStyle rtf_style; // Replaces individual style
+ // properties so we can revert
+ private Stack rtf_section_stack;
+
+ private RTF.TextMap rtf_text_map;
+ private int rtf_skip_width;
+ private int rtf_skip_count;
private int rtf_cursor_x;
private int rtf_cursor_y;
private int rtf_chars;
- private int rtf_par_line_left_indent;
+
+#if NET_2_0
+ private bool enable_auto_drag_drop;
+ private RichTextBoxLanguageOptions language_option;
+ private bool rich_text_shortcuts_enabled;
+ private Color selection_back_color;
+#endif
#endregion // Local Variables
#region Public Constructors
accepts_return = true;
auto_word_select = false;
bullet_indent = 0;
- detect_urls = true;
max_length = Int32.MaxValue;
margin_right = 0;
zoom = 1;
base.Multiline = true;
document.CRLFSize = 1;
shortcuts_enabled = true;
+ base.EnableLinks = true;
+
+ rtf_style = new RtfSectionStyle ();
+ rtf_section_stack = null;
scrollbars = RichTextBoxScrollBars.Both;
alignment = HorizontalAlignment.Left;
BackColor = ThemeEngine.Current.ColorWindow;
#if NET_2_0
backcolor_set = false;
+ language_option = RichTextBoxLanguageOptions.AutoFontSizeAdjust;
+ rich_text_shortcuts_enabled = true;
+ selection_back_color = DefaultBackColor;
#endif
ForeColor = ThemeEngine.Current.ColorWindowText;
#endregion // Public Constructors
#region Private & Internal Methods
+
+ internal override void HandleLinkClicked (LinkRectangle link)
+ {
+ OnLinkClicked (new LinkClickedEventArgs (link.LinkTag.LinkText));
+ }
+
internal override Color ChangeBackColor (Color backColor)
{
if (backColor == Color.Empty) {
}
}
+ [MonoTODO ("Value not respected, always true")]
[DefaultValue(false)]
public bool AutoWordSelection {
- get {
- return auto_word_select;
- }
-
- set {
- auto_word_select = true;
- }
+ get { return auto_word_select; }
+ set { auto_word_select = value; }
}
[Browsable(false)]
set { base.BackgroundImage = value; }
}
+#if NET_2_0
+ [Browsable (false)]
+ [EditorBrowsable (EditorBrowsableState.Never)]
+ public override ImageLayout BackgroundImageLayout {
+ get { return base.BackgroundImageLayout; }
+ set { base.BackgroundImageLayout = value; }
+ }
+#endif
+
[DefaultValue(0)]
[Localizable(true)]
public int BulletIndent {
[DefaultValue(true)]
public bool DetectUrls {
- get {
- return detect_urls;
- }
+ get { return base.EnableLinks; }
+ set { base.EnableLinks = value; }
+ }
- set {
- detect_urls = true;
- }
+#if NET_2_0
+ [MonoTODO ("Stub")]
+ [DefaultValue (false)]
+ public bool EnableAutoDragDrop {
+ get { return enable_auto_drag_drop; }
+ set { enable_auto_drag_drop = value; }
}
+#endif
public override Font Font {
get {
// Font changes always set the whole doc to that font
start = document.GetLine(1);
end = document.GetLine(document.Lines);
- document.FormatText(start, 1, end, end.text.Length + 1, base.Font, null, null, FormatSpecified.Font);
+ document.FormatText(start, 1, end, end.text.Length + 1, base.Font, Color.Empty, Color.Empty, FormatSpecified.Font);
}
}
}
}
}
+#if NET_2_0
+ [MonoTODO ("Stub")]
+ [Browsable (false)]
+ [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
+ public RichTextBoxLanguageOptions LanguageOption {
+ get { return language_option; }
+ set { language_option = value; }
+ }
+#endif
+
[DefaultValue(Int32.MaxValue)]
public override int MaxLength {
get {
}
}
+#if NET_2_0
+ [MonoTODO ("Stub")]
+ [Browsable (false)]
+ [DefaultValue (true)]
+ [EditorBrowsable (EditorBrowsableState.Never)]
+ public bool RichTextShortcutsEnabled {
+ get { return rich_text_shortcuts_enabled; }
+ set { rich_text_shortcuts_enabled = value; }
+ }
+#endif
+
[DefaultValue(0)]
[Localizable(true)]
[MonoTODO("Teach TextControl.RecalculateLine to consider the right margin as well")]
}
}
+#if NET_2_0
+ [MonoTODO ("Stub")]
+ [Browsable (false)]
+ [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
+ public Color SelectionBackColor {
+ get { return selection_back_color; }
+ set { selection_back_color = value; }
+ }
+#endif
+
[Browsable(false)]
[DefaultValue(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
LineTag end;
LineTag tag;
- start = document.selection_start.line.FindTag (document.selection_start.pos);
- end = document.selection_start.line.FindTag (document.selection_end.pos);
- color = start.color.Color;
+ if (selection_length > 0) {
+ start = document.selection_start.line.FindTag (document.selection_start.pos + 1);
+ end = document.selection_start.line.FindTag (document.selection_end.pos);
+ } else {
+ start = document.selection_start.line.FindTag (document.selection_start.pos);
+ end = start;
+ }
+
+ color = start.Color;
tag = start;
- while (tag != null && tag != end) {
+ while (tag != null) {
- if (!color.Equals (tag.color.Color))
+ if (!color.Equals (tag.Color))
return Color.Empty;
+ if (tag == end)
+ break;
+
tag = document.NextTag (tag);
}
}
set {
+ if (value == Color.Empty)
+ value = DefaultForeColor;
+
int sel_start;
int sel_end;
document.FormatText (document.selection_start.line, document.selection_start.pos + 1,
document.selection_end.line, document.selection_end.pos + 1, null,
- new SolidBrush (value), null, FormatSpecified.Color);
+ value, Color.Empty, FormatSpecified.Color);
document.CharIndexToLineTag(sel_start, out document.selection_start.line, out document.selection_start.tag, out document.selection_start.pos);
document.CharIndexToLineTag(sel_end, out document.selection_end.line, out document.selection_end.tag, out document.selection_end.pos);
document.UpdateView(document.selection_start.line, 0);
- document.AlignCaret();
+
+ //Re-Align the caret in case its changed size or position
+ //probably not necessary here
+ document.AlignCaret(false);
}
}
LineTag end;
LineTag tag;
- start = document.selection_start.line.FindTag (document.selection_start.pos);
- end = document.selection_start.line.FindTag (document.selection_end.pos);
- font = start.font;
+ if (selection_length > 0) {
+ start = document.selection_start.line.FindTag (document.selection_start.pos + 1);
+ end = document.selection_start.line.FindTag (document.selection_end.pos);
+ } else {
+ start = document.selection_start.line.FindTag (document.selection_start.pos);
+ end = start;
+ }
+
+ font = start.Font;
if (selection_length > 1) {
tag = start;
- while (tag != null && tag != end) {
+ while (tag != null) {
- if (!font.Equals(tag.font))
+ if (!font.Equals(tag.Font))
return null;
+ if (tag == end)
+ break;
+
tag = document.NextTag (tag);
}
}
document.FormatText (document.selection_start.line, document.selection_start.pos + 1,
document.selection_end.line, document.selection_end.pos + 1, value,
- null, null, FormatSpecified.Font);
+ Color.Empty, Color.Empty, FormatSpecified.Font);
document.CharIndexToLineTag(sel_start, out document.selection_start.line, out document.selection_start.tag, out document.selection_start.pos);
document.CharIndexToLineTag(sel_end, out document.selection_end.line, out document.selection_end.tag, out document.selection_end.pos);
document.UpdateView(document.selection_start.line, 0);
- document.AlignCaret();
+ //Re-Align the caret in case its changed size or position
+ Document.AlignCaret (false);
}
}
return Find(str, -1, -1, options);
}
- public
-#if NET_2_0
- override
-#endif
- char GetCharFromPosition(Point pt) {
+
+#if !NET_2_0
+ public char GetCharFromPosition(Point pt) {
LineTag tag;
int pos;
PointToTagPos(pt, out tag, out pos);
- if (pos >= tag.line.text.Length) {
+ if (pos >= tag.Line.text.Length) {
return '\n';
}
- return tag.line.text[pos];
-
+ return tag.Line.text[pos];
}
+#else
+ internal override char GetCharFromPositionInternal (Point p)
+ {
+ LineTag tag;
+ int pos;
+
+ PointToTagPos (p, out tag, out pos);
+
+ if (pos >= tag.Line.text.Length)
+ return '\n';
+
+ return tag.Line.text[pos];
+ }
+#endif
public
#if NET_2_0
PointToTagPos(pt, out tag, out pos);
- return document.LineTagToCharIndex(tag.line, pos);
+ return document.LineTagToCharIndex(tag.Line, pos);
}
public
}
#if NET_2_0
- public void DrawToBitmap (Bitmap bitmap, Rectangle clip)
+ [EditorBrowsable (EditorBrowsableState.Never)]
+ public new void DrawToBitmap (Bitmap bitmap, Rectangle clip)
{
Graphics dc = Graphics.FromImage (bitmap);
eh (this, e);
}
+#if !NET_2_0
protected override void OnSystemColorsChanged(EventArgs e) {
base.OnSystemColorsChanged (e);
}
protected override void OnTextChanged(EventArgs e) {
base.OnTextChanged (e);
}
+#endif
protected virtual void OnVScroll(EventArgs e) {
EventHandler eh = (EventHandler)(Events [VScrollEvent]);
remove { base.BackgroundImageChanged -= value; }
}
+#if NET_2_0
+ [Browsable (false)]
+ [EditorBrowsable (EditorBrowsableState.Never)]
+ public new event EventHandler BackgroundImageLayoutChanged {
+ add { base.BackgroundImageLayoutChanged += value; }
+ remove { base.BackgroundImageLayoutChanged -= value; }
+ }
+#endif
+
public event ContentsResizedEventHandler ContentsResized {
add { Events.AddHandler (ContentsResizedEvent, value); }
remove { Events.RemoveHandler (ContentsResizedEvent, value); }
}
+#if !NET_2_0
[Browsable(false)]
[EditorBrowsable(EditorBrowsableState.Never)]
public new event EventHandler DoubleClick {
add { base.DoubleClick += value; }
remove { base.DoubleClick -= value; }
}
+#endif
[Browsable(false)]
#if !NET_2_0
remove { base.QueryContinueDrag -= value; }
}
+ [MonoTODO("Currently does not ever fire")]
public event EventHandler SelectionChanged {
add { Events.AddHandler (SelectionChangedEvent, value); }
remove { Events.RemoveHandler (SelectionChangedEvent, value); }
document.ExpandSelection(CaretSelection.Word, false);
}
+ private class RtfSectionStyle : ICloneable {
+ internal Color rtf_color;
+ internal RTF.Font rtf_rtffont;
+ internal int rtf_rtffont_size;
+ internal FontStyle rtf_rtfstyle;
+ internal HorizontalAlignment rtf_rtfalign;
+ internal int rtf_par_line_left_indent;
+
+ public object Clone ()
+ {
+ RtfSectionStyle new_style = new RtfSectionStyle ();
+
+ new_style.rtf_color = rtf_color;
+ new_style.rtf_par_line_left_indent = rtf_par_line_left_indent;
+ new_style.rtf_rtfalign = rtf_rtfalign;
+ new_style.rtf_rtffont = rtf_rtffont;
+ new_style.rtf_rtffont_size = rtf_rtffont_size;
+ new_style.rtf_rtfstyle = rtf_rtfstyle;
+
+ return new_style;
+ }
+ }
+
+ // To allow us to keep track of the sections and revert formatting
+ // as we go in and out of sections of the document.
+ private void HandleGroup (RTF.RTF rtf)
+ {
+ //start group - save the current formatting on to a stack
+ //end group - go back to the formatting at the current group
+ if (rtf_section_stack == null) {
+ rtf_section_stack = new Stack ();
+ }
+
+ if (rtf.Major == RTF.Major.BeginGroup) {
+ rtf_section_stack.Push (rtf_style.Clone ());
+ } else if (rtf.Major == RTF.Major.EndGroup) {
+ if (rtf_section_stack.Count > 0) {
+ FlushText (rtf, false);
+
+ rtf_style = (RtfSectionStyle) rtf_section_stack.Pop ();
+ }
+ }
+ }
+
+ [MonoTODO("Add QuadJust support for justified alignment")]
private void HandleControl(RTF.RTF rtf) {
switch(rtf.Major) {
case RTF.Major.Unicode: {
if (color != null) {
FlushText(rtf, false);
if (color.Red == -1 && color.Green == -1 && color.Blue == -1) {
- this.rtf_color = new SolidBrush(ForeColor);
+ this.rtf_style.rtf_color = ForeColor;
} else {
- this.rtf_color = new SolidBrush(Color.FromArgb(color.Red, color.Green, color.Blue));
+ this.rtf_style.rtf_color = Color.FromArgb(color.Red, color.Green, color.Blue);
}
FlushText (rtf, false);
}
case RTF.Minor.FontSize: {
FlushText(rtf, false);
- this.rtf_rtffont_size = rtf.Param / 2;
+ this.rtf_style.rtf_rtffont_size = rtf.Param / 2;
break;
}
font = System.Windows.Forms.RTF.Font.GetFont(rtf, rtf.Param);
if (font != null) {
FlushText(rtf, false);
- this.rtf_rtffont = font;
+ this.rtf_style.rtf_rtffont = font;
}
break;
}
case RTF.Minor.Plain: {
FlushText(rtf, false);
- rtf_rtfstyle = FontStyle.Regular;
+ rtf_style.rtf_rtfstyle = FontStyle.Regular;
break;
}
case RTF.Minor.Bold: {
FlushText(rtf, false);
if (rtf.Param == RTF.RTF.NoParam) {
- rtf_rtfstyle |= FontStyle.Bold;
+ rtf_style.rtf_rtfstyle |= FontStyle.Bold;
} else {
- rtf_rtfstyle &= ~FontStyle.Bold;
+ rtf_style.rtf_rtfstyle &= ~FontStyle.Bold;
}
break;
}
case RTF.Minor.Italic: {
FlushText(rtf, false);
if (rtf.Param == RTF.RTF.NoParam) {
- rtf_rtfstyle |= FontStyle.Italic;
+ rtf_style.rtf_rtfstyle |= FontStyle.Italic;
} else {
- rtf_rtfstyle &= ~FontStyle.Italic;
+ rtf_style.rtf_rtfstyle &= ~FontStyle.Italic;
}
break;
}
case RTF.Minor.StrikeThru: {
FlushText(rtf, false);
if (rtf.Param == RTF.RTF.NoParam) {
- rtf_rtfstyle |= FontStyle.Strikeout;
+ rtf_style.rtf_rtfstyle |= FontStyle.Strikeout;
} else {
- rtf_rtfstyle &= ~FontStyle.Strikeout;
+ rtf_style.rtf_rtfstyle &= ~FontStyle.Strikeout;
}
break;
}
case RTF.Minor.Underline: {
FlushText(rtf, false);
if (rtf.Param == RTF.RTF.NoParam) {
- rtf_rtfstyle |= FontStyle.Underline;
+ rtf_style.rtf_rtfstyle |= FontStyle.Underline;
} else {
- rtf_rtfstyle = rtf_rtfstyle & ~FontStyle.Underline;
+ rtf_style.rtf_rtfstyle = rtf_style.rtf_rtfstyle & ~FontStyle.Underline;
}
break;
}
case RTF.Minor.NoUnderline: {
FlushText(rtf, false);
- rtf_rtfstyle &= ~FontStyle.Underline;
+ rtf_style.rtf_rtfstyle &= ~FontStyle.Underline;
break;
}
}
case RTF.Major.ParAttr: {
switch (rtf.Minor) {
+
+ case RTF.Minor.ParDef:
+ FlushText (rtf, false);
+ rtf_style.rtf_par_line_left_indent = 0;
+ rtf_style.rtf_rtfalign = HorizontalAlignment.Left;
+ break;
+
case RTF.Minor.LeftIndent:
- rtf_par_line_left_indent = (int) (((float) rtf.Param / 1440.0F) * CreateGraphics ().DpiX + 0.5F);
+ rtf_style.rtf_par_line_left_indent = (int) (((float) rtf.Param / 1440.0F) * CreateGraphics ().DpiX + 0.5F);
+ break;
+
+ case RTF.Minor.QuadCenter:
+ FlushText (rtf, false);
+ rtf_style.rtf_rtfalign = HorizontalAlignment.Center;
+ break;
+
+ case RTF.Minor.QuadJust:
+ FlushText (rtf, false);
+ rtf_style.rtf_rtfalign = HorizontalAlignment.Center;
+ break;
+
+ case RTF.Minor.QuadLeft:
+ FlushText (rtf, false);
+ rtf_style.rtf_rtfalign = HorizontalAlignment.Left;
+ break;
+
+ case RTF.Minor.QuadRight:
+ FlushText (rtf, false);
+ rtf_style.rtf_rtfalign = HorizontalAlignment.Right;
break;
}
break;
}
-
- case RTF.Major.SpecialChar: {
+
+ case RTF.Major.SpecialChar: {
//Console.Write("[Got SpecialChar control {0}]", rtf.Minor);
- SpecialChar(rtf);
+ SpecialChar (rtf);
break;
}
}
return;
}
- if (rtf_rtffont == null) {
+ if (rtf_style.rtf_rtffont == null) {
// First font in table is default
- rtf_rtffont = System.Windows.Forms.RTF.Font.GetFont(rtf, 0);
+ rtf_style.rtf_rtffont = System.Windows.Forms.RTF.Font.GetFont (rtf, 0);
}
- font = new Font(rtf_rtffont.Name, rtf_rtffont_size, rtf_rtfstyle);
+ font = new Font (rtf_style.rtf_rtffont.Name, rtf_style.rtf_rtffont_size, rtf_style.rtf_rtfstyle);
- if (rtf_color == null) {
+ if (rtf_style.rtf_color == Color.Empty) {
System.Windows.Forms.RTF.Color color;
// First color in table is default
- color = System.Windows.Forms.RTF.Color.GetColor(rtf, 0);
+ color = System.Windows.Forms.RTF.Color.GetColor (rtf, 0);
if ((color == null) || (color.Red == -1 && color.Green == -1 && color.Blue == -1)) {
- rtf_color = new SolidBrush(ForeColor);
+ rtf_style.rtf_color = ForeColor;
} else {
- rtf_color = new SolidBrush(Color.FromArgb(color.Red, color.Green, color.Blue));
+ rtf_style.rtf_color = Color.FromArgb (color.Red, color.Green, color.Blue);
}
-
+
}
rtf_chars += rtf_line.Length;
-
+
if (rtf_cursor_x == 0) {
- document.Add(rtf_cursor_y, rtf_line.ToString(), rtf_rtfalign, font, rtf_color,
- newline ? LineEnding.Rich : LineEnding.Wrap);
- if (rtf_par_line_left_indent != 0) {
+ if (newline && rtf_line.ToString ().EndsWith ("\n") == false)
+ rtf_line.Append ("\n");
+
+ document.Add (rtf_cursor_y, rtf_line.ToString (), rtf_style.rtf_rtfalign, font, rtf_style.rtf_color,
+ newline ? LineEnding.Rich : LineEnding.Wrap);
+ if (rtf_style.rtf_par_line_left_indent != 0) {
Line line = document.GetLine (rtf_cursor_y);
- line.indent = rtf_par_line_left_indent;
+ line.indent = rtf_style.rtf_par_line_left_indent;
}
} else {
- Line line;
+ Line line;
- line = document.GetLine(rtf_cursor_y);
- line.indent = rtf_par_line_left_indent;
+ line = document.GetLine (rtf_cursor_y);
+ line.indent = rtf_style.rtf_par_line_left_indent;
if (rtf_line.Length > 0) {
- document.InsertString(line, rtf_cursor_x, rtf_line.ToString());
+ document.InsertString (line, rtf_cursor_x, rtf_line.ToString ());
document.FormatText (line, rtf_cursor_x + 1, line, rtf_cursor_x + 1 + length,
- font, rtf_color, null,
+ font, rtf_style.rtf_color, Color.Empty,
FormatSpecified.Font | FormatSpecified.Color);
}
if (newline) {
- document.Split(line, rtf_cursor_x + length);
+ document.Split (line, rtf_cursor_x + length);
line = document.GetLine (rtf_cursor_y);
line.ending = LineEnding.Rich;
+
+ if (line.Text.EndsWith ("\n") == false)
+ line.Text += "\n";
}
}
// Prepare
rtf.ClassCallback[RTF.TokenClass.Text] = new RTF.ClassDelegate(HandleText);
rtf.ClassCallback[RTF.TokenClass.Control] = new RTF.ClassDelegate(HandleControl);
+ rtf.ClassCallback[RTF.TokenClass.Group] = new RTF.ClassDelegate(HandleGroup);
rtf_skip_width = 0;
rtf_skip_count = 0;
rtf_line = new StringBuilder();
- rtf_color = null;
- rtf_rtffont_size = (int)this.Font.Size;
- rtf_rtfalign = HorizontalAlignment.Left;
- rtf_rtfstyle = FontStyle.Regular;
- rtf_rtffont = null;
+ rtf_style.rtf_color = Color.Empty;
+ rtf_style.rtf_rtffont_size = (int)this.Font.Size;
+ rtf_style.rtf_rtfalign = HorizontalAlignment.Left;
+ rtf_style.rtf_rtfstyle = FontStyle.Regular;
+ rtf_style.rtf_rtffont = null;
rtf_cursor_x = cursor_x;
rtf_cursor_y = cursor_y;
rtf_chars = 0;
to_y = rtf_cursor_y;
chars = rtf_chars;
+ // clear the section stack if it was used
+ if (rtf_section_stack != null)
+ rtf_section_stack.Clear();
+
document.RecalculateDocument(CreateGraphicsInternal(), cursor_y, document.Lines, false);
document.ResumeRecalc (true);
// Add default font and color; to optimize document content we don't
// use this.Font and this.ForeColor but the font/color from the first tag
tag = LineTag.FindTag(start_line, pos);
- font = tag.font;
- color = ((SolidBrush)tag.color).Color;
+ font = tag.Font;
+ color = tag.Color;
fonts.Add(font.Name);
colors.Add(color);
}
while (pos < line_len) {
- if (tag.font.Name != font.Name) {
- font = tag.font;
+ if (tag.Font.Name != font.Name) {
+ font = tag.Font;
if (!fonts.Contains(font.Name)) {
fonts.Add(font.Name);
}
}
- if (((SolidBrush)tag.color).Color != color) {
- color = ((SolidBrush)tag.color).Color;
+ if (tag.Color != color) {
+ color = tag.Color;
if (!colors.Contains(color)) {
colors.Add(color);
}
}
- pos = tag.start + tag.length - 1;
- tag = tag.next;
+ pos = tag.Start + tag.Length - 1;
+ tag = tag.Next;
}
pos = 0;
line_no++;
// Emit initial paragraph settings
tag = LineTag.FindTag(start_line, start_pos);
sb.Append("\\pard"); // Reset to default paragraph properties
- EmitRTFFontProperties(sb, -1, fonts.IndexOf(tag.font.Name), null, tag.font); // Font properties
+ EmitRTFFontProperties(sb, -1, fonts.IndexOf(tag.Font.Name), null, tag.Font); // Font properties
sb.Append(" "); // Space separator
- font = tag.font;
+ font = tag.Font;
color = (Color)colors[0];
line = start_line;
line_no = start_line.line_no;
while (pos < line_len) {
length = sb.Length;
- if (tag.font != font) {
- EmitRTFFontProperties(sb, fonts.IndexOf(font.Name), fonts.IndexOf(tag.font.Name), font, tag.font);
- font = tag.font;
+ if (tag.Font != font) {
+ EmitRTFFontProperties(sb, fonts.IndexOf(font.Name), fonts.IndexOf(tag.Font.Name), font, tag.Font);
+ font = tag.Font;
}
- if (((SolidBrush)tag.color).Color != color) {
- color = ((SolidBrush)tag.color).Color;
+ if (tag.Color != color) {
+ color = tag.Color;
sb.Append(String.Format("\\cf{0}", colors.IndexOf(color)));
}
if (length != sb.Length) {
// Emit the string itself
if (line_no != end_line.line_no) {
- EmitRTFText(sb, tag.line.text.ToString(pos, tag.start + tag.length - pos - 1));
+ EmitRTFText(sb, tag.Line.text.ToString(pos, tag.Start + tag.Length - pos - 1));
} else {
- if (end_pos < (tag.start + tag.length - 1)) {
+ if (end_pos < (tag.Start + tag.Length - 1)) {
// Emit partial tag only, end_pos is inside this tag
- EmitRTFText(sb, tag.line.text.ToString(pos, end_pos - pos));
+ EmitRTFText(sb, tag.Line.text.ToString(pos, end_pos - pos));
} else {
- EmitRTFText(sb, tag.line.text.ToString(pos, tag.start + tag.length - pos - 1));
+ EmitRTFText(sb, tag.Line.text.ToString(pos, tag.Start + tag.Length - pos - 1));
}
}
- pos = tag.start + tag.length - 1;
- tag = tag.next;
+ pos = tag.Start + tag.Length - 1;
+ tag = tag.Next;
}
if (pos >= line.text.Length) {
if (line.ending != LineEnding.Wrap) {