~ubuntu-branches/ubuntu/feisty/monodevelop/feisty

1.1.3 by Sebastian Dröge
Import upstream version 0.11+svn20060818
1
// <file>
2
//     <copyright see="prj:///doc/copyright.txt"/>
3
//     <license see="prj:///doc/license.txt"/>
4
//     <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
5
//     <version value="$version"/>
6
// </file>
7
8
using System;
9
using System.Drawing;
10
using System.Diagnostics;
11
12
namespace MonoDevelop.TextEditor.Document
13
{
14
	
15
	public enum TextWordType {
16
		Word,
17
		Space,
18
		Tab
19
	}
20
	
21
	/// <summary>
22
	/// This class represents single words with color information, two special versions of a word are 
23
	/// spaces and tabs.
24
	/// </summary>
25
	public class TextWord
26
	{
27
		HighlightColor  color;
28
		LineSegment     word;
29
		IDocument       document;
30
		
31
		int          offset;
32
		int          length;
33
		TextWordType type;
34
		
35
		static TextWord spaceWord = new TextWord(TextWordType.Space);
36
		static TextWord tabWord   = new TextWord(TextWordType.Tab);
37
		
38
		public bool hasDefaultColor;
39
		
40
		static public TextWord Space {
41
			get {
42
				return spaceWord;
43
			}
44
		}
45
		
46
		static public TextWord Tab {
47
			get {
48
				return tabWord;
49
			}
50
		}
51
		
52
		public int  Length {
53
			get {
54
				if (type == TextWordType.Word) {
55
					return length;
56
				} 
57
				return 1;
58
			}
59
		}
60
		
61
		public bool HasDefaultColor {
62
			get {
63
				return hasDefaultColor;
64
			}
65
		}
66
		
67
		public TextWordType Type {
68
			get {
69
				return type;
70
			}
71
		}
72
		
73
//		string       myword = null;
74
		public string Word {
75
			get {
76
				return document.GetText(word.Offset + offset, length);
77
//				if (myword == null) {
78
//					myword = document.GetText(word.Offset + offset, length);
79
//				}
80
//				return myword;
81
			}
82
		}
83
		
84
		public Pango.FontDescription Font {
85
			get {
86
				return color.Font;
87
			}
88
		}
89
		
90
		public Color Color {
91
			get {
92
				return color.Color;
93
			}
94
		}
95
		
96
		public HighlightColor SyntaxColor {
97
			get {
98
				return color;
99
			}
100
			set {
101
				color = value;
102
			}
103
		}
104
		
105
		public bool IsWhiteSpace {
106
			get {
107
				return type == TextWordType.Space || type == TextWordType.Tab;
108
			}
109
		}
110
		
111
		// TAB
112
		private TextWord(TextWordType type)
113
		{
114
			this.type = type;
115
		}
116
		
117
		public TextWord(IDocument document, LineSegment word, int offset, int length, HighlightColor color, bool hasDefaultColor)
118
		{
119
			Debug.Assert(document != null);
120
			Debug.Assert(word != null);
121
			Debug.Assert(color != null);
122
			
123
			this.document = document;
124
			this.word  = word;
125
			this.offset = offset;
126
			this.length = length;
127
			this.color = color;
128
			this.hasDefaultColor = hasDefaultColor;
129
			this.type  = TextWordType.Word;
130
		}
131
		
132
		/// <summary>
133
		/// Converts a <see cref="TextWord"/> instance to string (for debug purposes)
134
		/// </summary>
135
		public override string ToString()
136
		{
137
			return "[TextWord: Word = " + Word + ", Font = " + Font.Family + ", Color = " + Color + "]";
138
		}
139
	}
140
}