Author: mkrueger
Date: 2008-01-25 08:27:25 -0500 (Fri, 25 Jan 2008)
New Revision: 93897
Modified:
trunk/monodevelop/main/src/addins/Mono.Texteditor/ChangeLog
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/DefaultEditActions.cs
Log:
* Mono.TextEditor/DefaultEditActions.cs: Optimized rtf color table
output.
Modified: trunk/monodevelop/main/src/addins/Mono.Texteditor/ChangeLog
===================================================================
--- trunk/monodevelop/main/src/addins/Mono.Texteditor/ChangeLog 2008-01-25
12:59:17 UTC (rev 93896)
+++ trunk/monodevelop/main/src/addins/Mono.Texteditor/ChangeLog 2008-01-25
13:27:25 UTC (rev 93897)
@@ -1,14 +1,13 @@
2008-01-25 Mike Krüger <[EMAIL PROTECTED]>
- * OblivionStyle.xml, Mono.TextEditor/DefaultEditActions.cs,
- Mono.TextEditor/TextEditorOptions.cs, Mono.TextEditor/GutterMargin.cs,
- Mono.TextEditor.Highlighting/SyntaxMode.cs,
- Mono.TextEditor.Highlighting/Style.cs,
- Mono.TextEditor.Highlighting/ChunkStyle.cs, CSharpSyntaxMode.xml,
- C64Style.xml: Worked on Syntax highlighting
+ * Mono.TextEditor/DefaultEditActions.cs: Optimized rtf color table
output.
2008-01-25 Mike Krüger <[EMAIL PROTECTED]>
+ * Mono.TextEditor/DefaultEditActions.cs: Optimized rtf color table
output.
+
+2008-01-25 Mike Krüger <[EMAIL PROTECTED]>
+
* OblivionStyle.xml, Mono.TextEditor/DefaultEditActions.cs,
Mono.TextEditor/TextEditorOptions.cs, Mono.TextEditor/GutterMargin.cs,
Mono.TextEditor.Highlighting/SyntaxMode.cs,
@@ -24,34 +23,17 @@
2008-01-25 Mike Krüger <[EMAIL PROTECTED]>
- * Mono.TextEditor/DefaultEditActions.cs, Mono.TextEditor/TextEditor.cs,
- Mono.TextEditor/TextEditorOptions.cs: Optimized drawing a bit, added
- syntax mode enabled option.
-
-2008-01-25 Mike Krüger <[EMAIL PROTECTED]>
-
* Mono.TextEditor/TextEditor.cs, Mono.TextEditor/TextEditorOptions.cs:
Added
property change event.
2008-01-25 Mike Krüger <[EMAIL PROTECTED]>
- * Mono.TextEditor/TextEditor.cs, Mono.TextEditor/TextEditorOptions.cs:
Added
- property change event.
-
-2008-01-25 Mike Krüger <[EMAIL PROTECTED]>
-
* Mono.TextEditor/DefaultEditActions.cs,
Mono.TextEditor/TextEditorData.cs,
Mono.TextEditor/TextEditor.cs, Mono.TextEditor.Highlighting/Style.cs:
Editor is now capable of outputting rtf to clipboard.
2008-01-25 Mike Krüger <[EMAIL PROTECTED]>
- * Mono.TextEditor/DefaultEditActions.cs,
Mono.TextEditor/TextEditorData.cs,
- Mono.TextEditor/TextEditor.cs, Mono.TextEditor.Highlighting/Style.cs:
- Editor is now capable of outputting rtf to clipboard.
-
-2008-01-25 Mike Krüger <[EMAIL PROTECTED]>
-
* OblivionStyle.xml, Mono.TextEditor/RedBlackTree.cs,
Mono.TextEditor/LineSegmentTree.cs, Mono.TextEditor/TextEditor.cs,
Mono.TextEditor.Highlighting/Style.cs,
Modified:
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/DefaultEditActions.cs
===================================================================
---
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/DefaultEditActions.cs
2008-01-25 12:59:17 UTC (rev 93896)
+++
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/DefaultEditActions.cs
2008-01-25 13:27:25 UTC (rev 93897)
@@ -694,40 +694,9 @@
string rtf;
void GenerateRtf (TextEditorData data)
{
- StringBuilder rtf = new StringBuilder();
-
- rtf.Append (@"{\rtf1\ansi\deff0\adeflang1025");
-
- // font table
- rtf.Append(@"{\fonttbl");
- rtf.Append(@"{\f0\fnil\fprq1\fcharset128 " +
TextEditorOptions.Options.Font.Family + ";}");
- rtf.Append("}");
-
- // color table
- rtf.Append (@"{\colortbl ;");
- Dictionary<Gdk.Color, int> colorTable = new
Dictionary<Gdk.Color,int> ();
- for (int i = 0; i <
Mono.TextEditor.Highlighting.Style.ColorTableCount; i++) {
- Gdk.Color color = data.ColorStyle.GetColor
(Mono.TextEditor.Highlighting.Style.GetColorName (i)).Color;
- rtf.Append (@"\red");
- rtf.Append (color.Red);
- rtf.Append (@"\green");
- rtf.Append (color.Green);
- rtf.Append (@"\blue");
- rtf.Append (color.Blue);
- rtf.Append (";");
- colorTable[color] = i;
- }
- rtf.Append ("}");
- rtf.Append (@"\viewkind4\uc1\pard");
- rtf.Append (@"\f0");
- try {
- string fontName =
TextEditorOptions.Options.Font.ToString ();
- double fontSize = Double.Parse
(fontName.Substring (fontName.LastIndexOf (' ') + 1)) * 2;
- rtf.Append (@"\fs");
- rtf.Append (fontSize);
- } catch (Exception) {};
-
- rtf.Append (@"\cf1");
+ StringBuilder colorTable = new StringBuilder ();
+ StringBuilder rtfText = new StringBuilder ();
+ List<Gdk.Color> colorList = new List<Gdk.Color> ();
ISegment selection = data.SelectionRange;
LineSegment line =
data.Document.Splitter.GetByOffset (selection.Offset);
@@ -736,7 +705,7 @@
RedBlackTree<LineSegmentTree.TreeNode>.RedBlackTreeIterator iter = line.Iter;
bool isItalic = false;
bool isBold = false;
- int curColor = 0;
+ int curColor = -1;
do {
line = iter.Current;
Chunk[] chunks =
data.Document.SyntaxMode.GetChunks (data.Document,
@@ -750,39 +719,42 @@
if (start < end) {
bool appendSpace = false;
if (isBold != chunk.Style.Bold)
{
- rtf.Append
(chunk.Style.Bold ? @"\b" : @"\b0");
+ rtfText.Append
(chunk.Style.Bold ? @"\b" : @"\b0");
isBold =
chunk.Style.Bold;
appendSpace = true;
}
if (isItalic !=
chunk.Style.Italic) {
- rtf.Append
(chunk.Style.Italic ? @"\b" : @"\b0");
+ rtfText.Append
(chunk.Style.Italic ? @"\b" : @"\b0");
isItalic =
chunk.Style.Italic;
appendSpace = true;
}
- if (curColor !=
colorTable[chunk.Style.Color]) {
- curColor =
colorTable[chunk.Style.Color];
- rtf.Append (@"\cf" +
(curColor + 1));
+ if (!colorList.Contains
(chunk.Style.Color))
+ colorList.Add
(chunk.Style.Color);
+ int color = colorList.IndexOf
(chunk.Style.Color);
+ if (curColor != color) {
+ curColor = color;
+ rtfText.Append (@"\cf"
+ (curColor + 1));
appendSpace = true;
}
if (appendSpace)
- rtf.Append (' ');
+ rtfText.Append (' ');
for (int i = start; i < end;
i++) {
char ch =
data.Document.Buffer.GetCharAt (i);
switch (ch) {
case '\\':
- rtf.Append
(@"\\");
+ rtfText.Append
(@"\\");
break;
case '{':
- rtf.Append
(@"\{");
+ rtfText.Append
(@"\{");
break;
case '}':
- rtf.Append
(@"\}");
+ rtfText.Append
(@"\}");
break;
case '\t':
- rtf.Append
(@"\tab");
+ rtfText.Append
(@"\tab");
break;
default:
- rtf.Append (ch);
+ rtfText.Append
(ch);
break;
}
}
@@ -790,9 +762,46 @@
}
if (line == endLine)
break;
- rtf.Append (@"\par");
+ rtfText.Append (@"\par");
} while (iter.MoveNext ());
+
+ // color table
+ colorTable.Append (@"{\colortbl ;");
+ for (int i = 0; i < colorList.Count; i++) {
+ Gdk.Color color = colorList[i];
+ colorTable.Append (@"\red");
+ colorTable.Append (color.Red / 256);
+ colorTable.Append (@"\green");
+ colorTable.Append (color.Green / 256);
+ colorTable.Append (@"\blue");
+ colorTable.Append (color.Blue / 256);
+ colorTable.Append (";");
+ }
+ colorTable.Append ("}");
+
+
+ StringBuilder rtf = new StringBuilder();
+ rtf.Append (@"{\rtf1\ansi\deff0\adeflang1025");
+
+ // font table
+ rtf.Append (@"{\fonttbl");
+ rtf.Append (@"{\f0\fnil\fprq1\fcharset128 " +
TextEditorOptions.Options.Font.Family + ";}");
+ rtf.Append ("}");
+
+ rtf.Append (colorTable.ToString ());
+
+ rtf.Append (@"\viewkind4\uc1\pard");
+ rtf.Append (@"\f0");
+ try {
+ string fontName =
TextEditorOptions.Options.Font.ToString ();
+ double fontSize = Double.Parse
(fontName.Substring (fontName.LastIndexOf (' ') + 1)) * 2;
+ rtf.Append (@"\fs");
+ rtf.Append (fontSize);
+ } catch (Exception) {};
+ rtf.Append (@"\cf1");
+ rtf.Append (rtfText.ToString ());
rtf.Append("}");
+ System.Console.WriteLine(rtf);
this.rtf = rtf.ToString ();
}
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches