Author: mkrueger
Date: 2008-01-24 20:37:47 -0500 (Thu, 24 Jan 2008)
New Revision: 93872
Modified:
trunk/monodevelop/main/src/addins/Mono.Texteditor/ChangeLog
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor.Highlighting/Style.cs
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/DefaultEditActions.cs
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/TextEditor.cs
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/TextEditorData.cs
Log:
* 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.
Modified: trunk/monodevelop/main/src/addins/Mono.Texteditor/ChangeLog
===================================================================
--- trunk/monodevelop/main/src/addins/Mono.Texteditor/ChangeLog 2008-01-25
01:28:22 UTC (rev 93871)
+++ trunk/monodevelop/main/src/addins/Mono.Texteditor/ChangeLog 2008-01-25
01:37:47 UTC (rev 93872)
@@ -1,13 +1,17 @@
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,
- Mono.TextEditor.Highlighting/DefaultStyle.cs, C64Style.xml: Selected
- foreground colors are now part of the highlighting style.
+ * 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,
@@ -31,30 +35,15 @@
2008-01-22 Mike Krüger <[EMAIL PROTECTED]>
- * Mono.TextEditor.Highlighting/SyntaxModeService.cs: Worked on style
panel.
-
-2008-01-22 Mike Krüger <[EMAIL PROTECTED]>
-
* OblivionStyle.xml, Mono.TextEditor.Highlighting/Style.cs,
C64Style.xml:
Color styles now have descriptions. Name/Description is now
localizable.
2008-01-22 Mike Krüger <[EMAIL PROTECTED]>
- * OblivionStyle.xml, Mono.TextEditor.Highlighting/Style.cs,
C64Style.xml:
- Color styles now have descriptions. Name/Description is now
localizable.
-
-2008-01-22 Mike Krüger <[EMAIL PROTECTED]>
-
* Mono.TextEditor/TextEditor.cs, Mono.TextEditor/TextEditorOptions.cs,
Mono.TextEditor/GutterMargin.cs: Added some text editor options -
options are now virtual.
-2008-01-22 Mike Krüger <[EMAIL PROTECTED]>
-
- * Mono.TextEditor/TextEditor.cs, Mono.TextEditor/TextEditorOptions.cs,
- Mono.TextEditor/GutterMargin.cs: Added some text editor options -
- options are now virtual.
-
2008-01-21 Mike Krüger <[EMAIL PROTECTED]>
* Mono.TextEditor.mdp, Mono.TextEditor.mds: Added changelogs to the
project
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 01:28:22 UTC (rev 93871)
+++
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/DefaultEditActions.cs
2008-01-25 01:37:47 UTC (rev 93872)
@@ -666,11 +666,149 @@
public class CopyAction : EditAction
{
+ const int TextType = 1;
+ const int RichTextType = 2;
+
+ const int UTF8_FORMAT = 8;
+
+ public static readonly Gdk.Atom CLIPBOARD_ATOM =
Gdk.Atom.Intern ("CLIPBOARD", false);
+ static readonly Gdk.Atom RTF_ATOM = Gdk.Atom.Intern
("text/rtf", false);
+
+ void ClipboardGetFunc (Clipboard clipboard, SelectionData
selection_data, uint info)
+ {
+ switch (info) {
+ case TextType:
+ selection_data.Text = text;
+ break;
+ case RichTextType:
+ selection_data.Set (RTF_ATOM, UTF8_FORMAT,
System.Text.Encoding.UTF8.GetBytes (rtf.ToString ()));
+ break;
+ }
+ }
+ void ClipboardClearFunc (Clipboard clipboard)
+ {
+ // NOTHING ?
+ }
+
+ string text;
+ 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));
+ 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");
+
+ ISegment selection = data.SelectionRange;
+ LineSegment line =
data.Document.Splitter.GetByOffset (selection.Offset);
+ LineSegment endLine =
data.Document.Splitter.GetByOffset (selection.EndOffset);
+
+
RedBlackTree<LineSegmentTree.TreeNode>.RedBlackTreeIterator iter = line.Iter;
+ bool isItalic = false;
+ bool isBold = false;
+ int curColor = 0;
+ do {
+ line = iter.Current;
+ Chunk[] chunks =
data.Document.SyntaxMode.GetChunks (data.Document,
+
data.ColorStyle,
+
line,
+
line.Offset,
+
line.Offset + line.EditableLength);
+ foreach (Chunk chunk in chunks) {
+ int start = System.Math.Max
(selection.Offset, chunk.Offset);
+ int end = System.Math.Min
(chunk.EndOffset, selection.EndOffset);
+ if (start < end) {
+ bool appendSpace = false;
+ if (isBold != chunk.Style.Bold)
{
+ rtf.Append
(chunk.Style.Bold ? @"\b" : @"\b0");
+ isBold =
chunk.Style.Bold;
+ appendSpace = true;
+ }
+ if (isItalic !=
chunk.Style.Italic) {
+ rtf.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));
+ appendSpace = true;
+ }
+ if (appendSpace)
+ rtf.Append (' ');
+ for (int i = start; i < end;
i++) {
+ char ch =
data.Document.Buffer.GetCharAt (i);
+ switch (ch) {
+ case '\\':
+ rtf.Append
(@"\\");
+ break;
+ case '{':
+ rtf.Append
(@"\{");
+ break;
+ case '}':
+ rtf.Append
(@"\}");
+ break;
+ case '\t':
+ rtf.Append
(@"\tab");
+ break;
+ default:
+ rtf.Append (ch);
+ break;
+ }
+ }
+ }
+ }
+ if (line == endLine)
+ break;
+ rtf.Append (@"\par");
+ } while (iter.MoveNext ());
+ rtf.Append("}");
+ System.Console.WriteLine(rtf);
+ this.rtf = rtf.ToString ();
+ }
+
public override void Run (TextEditorData data)
{
if (data.IsSomethingSelected) {
- Clipboard clipboard = Clipboard.Get
(Gdk.Atom.Intern ("CLIPBOARD", false));
- clipboard.Text = data.Document.Buffer.GetTextAt
(data.SelectionRange);
+ Clipboard clipboard = Clipboard.Get
(CopyAction.CLIPBOARD_ATOM);
+
+ text = data.Document.Buffer.GetTextAt
(data.SelectionRange);
+ GenerateRtf (data);
+
+ Gtk.TargetList list = new Gtk.TargetList ();
+ list.Add (RTF_ATOM, /* FLAGS */ 0,
RichTextType);
+ list.AddTextTargets (TextType);
+ clipboard.SetWithData ((Gtk.TargetEntry[])list,
ClipboardGetFunc, ClipboardClearFunc);
}
}
}
@@ -679,7 +817,7 @@
{
public override void Run (TextEditorData data)
{
- Clipboard clipboard = Clipboard.Get (Gdk.Atom.Intern
("CLIPBOARD", false));
+ Clipboard clipboard = Clipboard.Get
(CopyAction.CLIPBOARD_ATOM);
if (clipboard.WaitIsTextAvailable ()) {
if (data.IsSomethingSelected) {
DeleteAction.DeleteSelection (data);
Modified:
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/TextEditor.cs
===================================================================
---
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/TextEditor.cs
2008-01-25 01:28:22 UTC (rev 93871)
+++
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/TextEditor.cs
2008-01-25 01:37:47 UTC (rev 93872)
@@ -451,10 +451,10 @@
public Mono.TextEditor.Highlighting.Style ColorStyle {
get {
- return style;
+ return this.textEditorData.ColorStyle;
}
set {
- style = value;
+ this.textEditorData.ColorStyle = value;
}
}
Modified:
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/TextEditorData.cs
===================================================================
---
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/TextEditorData.cs
2008-01-25 01:28:22 UTC (rev 93871)
+++
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/TextEditorData.cs
2008-01-25 01:37:47 UTC (rev 93872)
@@ -62,6 +62,16 @@
}
}
+ Mono.TextEditor.Highlighting.Style colorStyle;
+ public Mono.TextEditor.Highlighting.Style ColorStyle {
+ get {
+ return colorStyle;
+ }
+ set {
+ colorStyle = value;
+ }
+ }
+
public bool IsSomethingSelected {
get {
return SelectionStart != null && SelectionEnd
!= null;
Modified:
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor.Highlighting/Style.cs
===================================================================
---
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor.Highlighting/Style.cs
2008-01-25 01:28:22 UTC (rev 93871)
+++
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor.Highlighting/Style.cs
2008-01-25 01:37:47 UTC (rev 93872)
@@ -187,7 +187,35 @@
invalidLineMarker = new Gdk.Color (210, 0, 0);
}
+ static readonly string[] colorTable = new string[] { "Comment",
+ "String",
+ "Punctuation",
+ "Keyword1",
+ "Keyword2",
+ "Keyword3",
+ "Keyword4",
+ "PreProcessorDirective" };
+ public static int ColorTableCount {
+ get {
+ return colorTable.Length;
+ }
+ }
+
+ public static string GetColorName (int number)
+ {
+ return colorTable[number];
+ }
+
+ public static int GetColorNumber (string name)
+ {
+ for (int i = 0; i < colorTable.Length; i++) {
+ if (colorTable[i] == name)
+ return i;
+ }
+ return -1;
+ }
+
public Gdk.Color GetColor (string name)
{
switch (name) {
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches