aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/CodeCompletion/ICompletionData.cs
blob: 9f16876b39627e9bbb8c3862d4f07b945a0a37b7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)

using System;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using Tango.Scripting.Editors.Document;
using Tango.Scripting.Editors.Editing;

namespace Tango.Scripting.Editors.CodeCompletion
{
	/// <summary>
	/// Describes an entry in the <see cref="CompletionList"/>.
	/// </summary>
	public interface ICompletionData
	{
        /// <summary>
        /// Gets the image.
        /// </summary>
        BitmapSource Image { get; }

        /// <summary>
        /// Gets the text. This property is used to filter the list of visible elements.
        /// </summary>
        string Text { get; }
		
		/// <summary>
		/// Gets the description.
		/// </summary>
		object Description { get; set; }
		
		/// <summary>
		/// Gets the priority. This property is used in the selection logic. You can use it to prefer selecting those items
		/// which the user is accessing most frequently.
		/// </summary>
		double Priority { get; set; }
		
		/// <summary>
		/// Perform the completion.
		/// </summary>
		/// <param name="textArea">The text area on which completion is performed.</param>
		/// <param name="completionSegment">The text segment that was used by the completion window if
		/// the user types (segment between CompletionWindow.StartOffset and CompletionWindow.EndOffset).</param>
		/// <param name="insertionRequestEventArgs">The EventArgs used for the insertion request.
		/// These can be TextCompositionEventArgs, KeyEventArgs, MouseEventArgs, depending on how
		/// the insertion was triggered.</param>
		void Complete(ScriptEditor editor);
	}
}
class="w"> /// Gets or sets the attributes associated with this code object. /// </summary> public List<String> Attributes { get; set; } /// <summary> /// Gets or sets a value indicating whether to indent the resulting code. /// </summary> public bool IndentResult { get; set; } /// <summary> /// Generates the code represented by this code object. /// </summary> /// <returns></returns> public virtual string GenerateCode() { var code = Helper.ParseTemplate(GetTemplate(), this); if (IndentResult) { code = Helper.IndentCSharpCode(code); code = RemoveDoubleLines(code); } code = code.Replace("&amp;amp;quot;", "\""); code = HttpUtility.HtmlDecode(code); return code; } /// <summary> /// Removes the double lines. /// </summary> /// <param name="str">The string.</param> /// <returns></returns> private String RemoveDoubleLines(string str) { String result = String.Empty; using (var streamReader = new StringReader(str)) { string line = null; bool previousLineWasBlank = false; while ((line = streamReader.ReadLine()) != null) { if (!string.IsNullOrEmpty(line) || !previousLineWasBlank) { result += line +Environment.NewLine; } previousLineWasBlank = string.IsNullOrEmpty(line); } } return result; } /// <summary> /// Gets the template associated with this code object. /// </summary> /// <returns></returns> public virtual string GetTemplate() { return Helper.GetTemplate(this.GetType()); } /// <summary> /// Returns a <see cref="System.String" /> that represents this instance. /// </summary> /// <returns> /// A <see cref="System.String" /> that represents this instance. /// </returns> public override string ToString() { return GenerateCode(); } /// <summary> /// Gets the modifier string. /// </summary> /// <returns></returns> public String GetModifierString() { return Modifier.ToString().ToLower(); } /// <summary> /// Gets the attributes string. /// </summary> /// <returns></returns> public String GetAttributesString() { if (Attributes != null && Attributes.Count > 0) { return String.Join(Environment.NewLine, Attributes); } else { return null; } } } }