GetService() 공개 메소드

Gets the requested service.
public GetService ( Type serviceType ) : object
serviceType System.Type
리턴 object
예제 #1
0
        const string LineSelectedType = "MSDEVLineSelect";  // This is the type VS 2003 and 2005 use for flagging a whole line copy

        static void CopyWholeLine(TextArea textArea, DocumentLine line)
        {
            ISegment wholeLine = new SimpleSegment(line.Offset, line.TotalLength);
            string   text      = textArea.Document.GetText(wholeLine);

            // Ensure we use the appropriate newline sequence for the OS
            text = TextUtilities.NormalizeNewLines(text, Environment.NewLine);
            DataObject data = new DataObject(text);

            // Also copy text in HTML format to clipboard - good for pasting text into Word
            // or to the SharpDevelop forums.
            IHighlighter highlighter = textArea.GetService(typeof(IHighlighter)) as IHighlighter;

            HtmlClipboard.SetHtml(data, HtmlClipboard.CreateHtmlFragment(textArea.Document, highlighter, wholeLine, new HtmlOptions(textArea.Options)));

            MemoryStream lineSelected = new MemoryStream(1);

            lineSelected.WriteByte(1);
            data.SetData(LineSelectedType, lineSelected, false);

            try
            {
                Clipboard.SetDataObject(data, true);
            }
            catch (ExternalException)
            {
                // Apparently this exception sometimes happens randomly.
                // The MS controls just ignore it, so we'll do the same.
                return;
            }
            textArea.OnTextCopied(new TextEventArgs(text));
        }
예제 #2
0
파일: Selection.cs 프로젝트: tris2481/ILSpy
        /// <summary>
        /// Creates a HTML fragment for the selected text.
        /// </summary>
        public string CreateHtmlFragment(TextArea textArea, HtmlOptions options)
        {
            if (textArea == null)
            {
                throw new ArgumentNullException("textArea");
            }
            if (options == null)
            {
                throw new ArgumentNullException("options");
            }
            IHighlighter  highlighter = textArea.GetService(typeof(IHighlighter)) as IHighlighter;
            StringBuilder html        = new StringBuilder();
            bool          first       = true;

            foreach (ISegment selectedSegment in this.Segments)
            {
                if (first)
                {
                    first = false;
                }
                else
                {
                    html.AppendLine("<br>");
                }
                html.Append(HtmlClipboard.CreateHtmlFragment(textArea.Document, highlighter, selectedSegment, options));
            }
            return(html.ToString());
        }
예제 #3
0
 public override object GetPattern(PatternInterface patternInterface)
 {
     if (patternInterface == PatternInterface.Text)
     {
         return(this);
     }
     if (patternInterface == PatternInterface.Value)
     {
         return(this);
     }
     if (patternInterface == PatternInterface.Scroll)
     {
         TextEditor editor = TextArea.GetService(typeof(TextEditor)) as TextEditor;
         if (editor != null)
         {
             return(FromElement(editor).GetPattern(patternInterface));
         }
     }
     return(base.GetPattern(patternInterface));
 }
예제 #4
0
        const string LineSelectedType = "MSDEVLineSelect";          // This is the type VS 2003 and 2005 use for flagging a whole line copy

        static void CopyWholeLine(TextArea textArea, DocumentLine line)
        {
            ISegment wholeLine = new SimpleSegment(line.Offset, line.TotalLength);
            string   text      = textArea.Document.GetText(wholeLine);
            // Ensure we use the appropriate newline sequence for the OS
            DataObject data = new DataObject(NewLineFinder.NormalizeNewLines(text, Environment.NewLine));

            // Also copy text in HTML format to clipboard - good for pasting text into Word
            // or to the SharpDevelop forums.
            DocumentHighlighter highlighter = textArea.GetService(typeof(DocumentHighlighter)) as DocumentHighlighter;

            HtmlClipboard.SetHtml(data, HtmlClipboard.CreateHtmlFragment(textArea.Document, highlighter, wholeLine, new HtmlOptions(textArea.Options)));

            MemoryStream lineSelected = new MemoryStream(1);

            lineSelected.WriteByte(1);
            data.SetData(LineSelectedType, lineSelected, false);

            Clipboard.SetDataObject(data, true);
        }
예제 #5
0
 public virtual void Complete(TextArea textArea, ISegment completionSegment, EventArgs insertionRequestEventArgs)
 {
     var textEditor = textArea.GetService(typeof(Editor)) as Editor;
     if (textEditor == null)
     {
         return;
     }
     var kukaTextEditor = textEditor as Editor;
     var text = (kukaTextEditor == null) ? textEditor.GetWordBeforeCaret() : kukaTextEditor.GetWordBeforeCaret(kukaTextEditor.GetWordParts());
     if (Text.StartsWith(text, StringComparison.InvariantCultureIgnoreCase) || Text.ToLowerInvariant().Contains(text.ToLowerInvariant()))
     {
         textEditor.Document.Replace(textEditor.CaretOffset - text.Length, text.Length, Text);
     }
     else
     {
         textEditor.Document.Insert(textEditor.CaretOffset, Text);
     }
     if (UsageName != null)
     {
         CodeCompletionDataUsageCache.IncrementUsage(UsageName);
     }
 }
예제 #6
0
		/// <summary>
		/// Creates a new SearchPanel and attaches it to a text area.
		/// </summary>
		public SearchPanel(TextArea textArea)
		{
			if (textArea == null)
				throw new ArgumentNullException("textArea");
			this.textArea = textArea;
			DataContext = this;
			InitializeComponent();
			
			textArea.TextView.Layers.Add(this);
			foldingManager = textArea.GetService(typeof(FoldingManager)) as FoldingManager;
			
			renderer = new SearchResultBackgroundRenderer();
			textArea.TextView.BackgroundRenderers.Add(renderer);
			textArea.Document.TextChanged += delegate { DoSearch(false); };
			this.Loaded += delegate { searchTextBox.Focus(); };
			
			useRegex.Checked     += ValidateSearchText;
			matchCase.Checked    += ValidateSearchText;
			wholeWords.Checked   += ValidateSearchText;
			
			useRegex.Unchecked   += ValidateSearchText;
			matchCase.Unchecked  += ValidateSearchText;
			wholeWords.Unchecked += ValidateSearchText;
		}
        internal static void CopyWholeLine(TextArea textArea, DocumentLine line)
        {
            ISegment wholeLine = new VerySimpleSegment(line.Offset, line.TotalLength);
            string text = textArea.Document.GetText(wholeLine);
            // Ensure we use the appropriate newline sequence for the OS
            text = TextUtilities.NormalizeNewLines(text, Environment.NewLine);
            DataObject data = new DataObject(text);

            // Also copy text in HTML format to clipboard - good for pasting text into Word
            // or to the SharpDevelop forums.
            IHighlighter highlighter = textArea.GetService(typeof(IHighlighter)) as IHighlighter;
            HtmlClipboard.SetHtml(data, HtmlClipboard.CreateHtmlFragment(textArea.Document, highlighter, wholeLine, new HtmlOptions(textArea.Options)));

            MemoryStream lineSelected = new MemoryStream(1);
            lineSelected.WriteByte(1);
            data.SetData(LineSelectedType, lineSelected, false);

            try
            {
                Clipboard.SetDataObject(data, true);
            }
            catch (ExternalException)
            {
                // Apparently this exception sometimes happens randomly.
                // The MS controls just ignore it, so we'll do the same.
                return;
            }
            //textArea.OnTextCopied(new TextEventArgs(text));
        }
		const string LineSelectedType = "MSDEVLineSelect";  // This is the type VS 2003 and 2005 use for flagging a whole line copy
		
		static void CopyWholeLine(TextArea textArea, DocumentLine line)
		{
			ISegment wholeLine = new SimpleSegment(line.Offset, line.TotalLength);
			string text = textArea.Document.GetText(wholeLine);
			// Ensure we use the appropriate newline sequence for the OS
			DataObject data = new DataObject(NewLineFinder.NormalizeNewLines(text, Environment.NewLine));
			
			// Also copy text in HTML format to clipboard - good for pasting text into Word
			// or to the SharpDevelop forums.
			DocumentHighlighter highlighter = textArea.GetService(typeof(DocumentHighlighter)) as DocumentHighlighter;
			HtmlClipboard.SetHtml(data, HtmlClipboard.CreateHtmlFragment(textArea.Document, highlighter, wholeLine, new HtmlOptions(textArea.Options)));
			
			MemoryStream lineSelected = new MemoryStream(1);
			lineSelected.WriteByte(1);
			data.SetData(LineSelectedType, lineSelected, false);
			
			Clipboard.SetDataObject(data, true);
		}
		public void ShowExample(TextArea exampleTextArea)
		{
			string exampleText = StringParser.Parse(color.ExampleText, GetXshdProperties().ToArray());
			int semanticHighlightStart = exampleText.IndexOf("#{#", StringComparison.OrdinalIgnoreCase);
			int semanticHighlightEnd = exampleText.IndexOf("#}#", StringComparison.OrdinalIgnoreCase);
			if (semanticHighlightStart > -1 && semanticHighlightEnd >= semanticHighlightStart + 3) {
				semanticHighlightEnd -= 3;
				exampleText = exampleText.Remove(semanticHighlightStart, 3).Remove(semanticHighlightEnd, 3);
				ITextMarkerService svc = exampleTextArea.GetService(typeof(ITextMarkerService)) as ITextMarkerService;
				exampleTextArea.Document.Text = exampleText;
				if (svc != null) {
					ITextMarker m = svc.Create(semanticHighlightStart, semanticHighlightEnd - semanticHighlightStart);
					m.Tag = (Action<IHighlightingItem, ITextMarker>)(
						(IHighlightingItem item, ITextMarker marker) => {
							marker.BackgroundColor = item.Background;
							marker.ForegroundColor = item.Foreground;
							marker.FontStyle = item.Italic ? FontStyles.Italic : FontStyles.Normal;
							marker.FontWeight = item.Bold ? FontWeights.Bold : FontWeights.Normal;
						});
				}
			} else {
				exampleTextArea.Document.Text = exampleText;
			}
		}
예제 #10
0
		/// <summary>
		/// Creates a HTML fragment for the selected text.
		/// </summary>
		public string CreateHtmlFragment(TextArea textArea, HtmlOptions options)
		{
			if (textArea == null)
				throw new ArgumentNullException("textArea");
			if (options == null)
				throw new ArgumentNullException("options");
			IHighlighter highlighter = textArea.GetService(typeof(IHighlighter)) as IHighlighter;
			StringBuilder html = new StringBuilder();
			bool first = true;
			foreach (ISegment selectedSegment in this.Segments) {
				if (first)
					first = false;
				else
					html.AppendLine("<br>");
				html.Append(HtmlClipboard.CreateHtmlFragment(textArea.Document, highlighter, selectedSegment, options));
			}
			return html.ToString();
		}
예제 #11
0
        private void FormatLineInternal(TextArea textArea, int lineNr, int cursorOffset, char ch)
        {
            DocumentLine curLine = textArea.Document.GetLineByNumber(lineNr);
            DocumentLine lineAbove = lineNr > 1 ? textArea.Document.GetLineByNumber(lineNr - 1) : null;
            string terminator = TextUtilities.GetLineTerminator(textArea.Document, lineNr);

            string curLineText;

            if (ch != '\n' && ch != '>')
            {
                if (IsInsideStringOrComment(textArea, curLine, cursorOffset))
                    return;
            }
            switch (ch)
            {
                case '>':
                    if (IsInsideDocumentationComment(textArea, curLine, cursorOffset))
                    {
                        curLineText = textArea.Document.GetText(curLine);
                        int column = cursorOffset - curLine.Offset;
                        int index = Math.Min(column - 1, curLineText.Length - 1);

                        while (index >= 0 && curLineText[index] != '<')
                        {
                            --index;
                            if (curLineText[index] == '/')
                                return; // the tag was an end tag or already
                        }

                        if (index > 0)
                        {
                            StringBuilder commentBuilder = new StringBuilder("");
                            for (int i = index; i < curLineText.Length && i < column && !Char.IsWhiteSpace(curLineText[i]); ++i)
                            {
                                commentBuilder.Append(curLineText[i]);
                            }
                            string tag = commentBuilder.ToString().Trim();
                            if (!tag.EndsWith(">"))
                            {
                                tag += ">";
                            }
                            if (!tag.StartsWith("/"))
                            {
                                textArea.Document.Insert(cursorOffset, "</" + tag.Substring(1));
                            }
                        }
                    }
                    break;
                case ':':
                case ')':
                case ']':
                case '}':
                case '{':
                    if (textArea.IndentationStrategy != null)
                        textArea.IndentationStrategy.IndentLine(textArea, curLine);
                    break;
                case '\n':
                    string lineAboveText = lineAbove == null ? "" : textArea.Document.GetText(lineAbove);
                    //// curLine might have some text which should be added to indentation
                    curLineText = textArea.Document.GetText(curLine);

                    IHighlighter highlighter = textArea.GetService(typeof(IHighlighter)) as IHighlighter;
                    bool isInMultilineComment = false;
                    bool isInMultilineString = false;
                    if (highlighter != null && lineAbove != null)
                    {
                        var spanStack = highlighter.GetSpanColorNamesFromLineStart(lineNr);
                        isInMultilineComment = spanStack.Contains(HighlightingKnownNames.Comment);
                        isInMultilineString = spanStack.Contains(HighlightingKnownNames.String);
                    }
                    bool isInNormalCode = !(isInMultilineComment || isInMultilineString);

                    if (lineAbove != null && isInMultilineComment)
                    {
                        string lineAboveTextTrimmed = lineAboveText.TrimStart();
                        if (lineAboveTextTrimmed.StartsWith("/*", StringComparison.Ordinal))
                        {
                            textArea.Document.Insert(cursorOffset, " * ");
                            return;
                        }

                        if (lineAboveTextTrimmed.StartsWith("*", StringComparison.Ordinal))
                        {
                            textArea.Document.Insert(cursorOffset, "* ");
                            return;
                        }
                    }

                    if (lineAbove != null && isInNormalCode)
                    {
                        DocumentLine nextLine = lineNr + 1 <= textArea.Document.LineCount ? textArea.Document.GetLineByNumber(lineNr + 1) : null;
                        string nextLineText = (nextLine != null) ? textArea.Document.GetText(nextLine) : "";

                        int indexAbove = lineAboveText.IndexOf("///");
                        int indexNext = nextLineText.IndexOf("///");
                        if (indexAbove > 0 && (indexNext != -1 || indexAbove + 4 < lineAbove.Length))
                        {
                            textArea.Document.Insert(cursorOffset, "/// ");
                            return;
                        }

                        if (IsInNonVerbatimString(lineAboveText, curLineText))
                        {
                            textArea.Document.Insert(cursorOffset, "\"");
                            textArea.Document.Insert(lineAbove.Offset + lineAbove.Length,
                                                     "\" +");
                        }
                    }
                    if (/*textArea.Options.AutoInsertBlockEnd &&*/ lineAbove != null && isInNormalCode)
                    {
                        string oldLineText = textArea.Document.GetText(lineAbove);
                        if (oldLineText.EndsWith("{"))
                        {
                            if (NeedCurlyBracket(textArea.Document.Text))
                            {
                                int insertionPoint = curLine.Offset + curLine.Length;
                                textArea.Document.Insert(insertionPoint, terminator + "}");
                                if (textArea.IndentationStrategy != null)
                                    textArea.IndentationStrategy.IndentLine(textArea, textArea.Document.GetLineByNumber(lineNr + 1));
                                textArea.Caret.Offset = insertionPoint;
                            }
                        }
                    }
                    return;
            }
        }
예제 #12
0
        private void FormatLineInternal(TextArea textArea, int lineNr, int cursorOffset, char ch)
        {
            DocumentLine curLine = textArea.Document.GetLineByNumber(lineNr);
            DocumentLine lineAbove = lineNr > 1 ? textArea.Document.GetLineByNumber(lineNr - 1) : null;
            string terminator = TextUtilities.GetLineTerminator(textArea.Document, lineNr);

            string curLineText;
            // /// local string for curLine segment
            //if (ch == '/')
            //{
            //  curLineText = curLine.Text;
            //  string lineAboveText = lineAbove == null ? "" : lineAbove.Text;
            //  if (curLineText != null && curLineText.EndsWith("///") && (lineAboveText == null || !lineAboveText.Trim().StartsWith("///")))
            //  {
            //    string indentation = DocumentUtilitites.GetWhitespaceAfter(textArea.Document, curLine.Offset);
            //    object member = GetMemberAfter(textArea, lineNr);
            //    if (member != null)
            //    {
            //      StringBuilder sb = new StringBuilder();
            //      sb.Append(" <summary>");
            //      sb.Append(terminator);
            //      sb.Append(indentation);
            //      sb.Append("/// ");
            //      sb.Append(terminator);
            //      sb.Append(indentation);
            //      sb.Append("/// </summary>");

            //      if (member is IMethod)
            //      {
            //        IMethod method = (IMethod)member;
            //        if (method.Parameters != null && method.Parameters.Count > 0)
            //        {
            //          for (int i = 0; i < method.Parameters.Count; ++i)
            //          {
            //            sb.Append(terminator);
            //            sb.Append(indentation);
            //            sb.Append("/// <param name=\"");
            //            sb.Append(method.Parameters[i].Name);
            //            sb.Append("\"></param>");
            //          }
            //        }
            //        if (method.ReturnType != null && !method.IsConstructor && method.ReturnType.FullyQualifiedName != "System.Void")
            //        {
            //          sb.Append(terminator);
            //          sb.Append(indentation);
            //          sb.Append("/// <returns></returns>");
            //        }
            //      }
            //      textArea.Document.Insert(cursorOffset, sb.ToString());

            //      textArea.Caret.Offset = cursorOffset + indentation.Length + "/// ".Length + " <summary>".Length + terminator.Length;
            //    }
            //  }
            //  return;
            //}

            if (ch != '\n' && ch != '>')
            {
                if (IsInsideStringOrComment(textArea, curLine, cursorOffset))
                {
                    return;
                }
            }

            switch (ch)
            {
                case '>':
                    if (IsInsideDocumentationComment(textArea, curLine, cursorOffset))
                    {
                        curLineText = textArea.Document.GetText(curLine);
                        int column = cursorOffset - curLine.Offset;
                        int index = Math.Min(column - 1, curLineText.Length - 1);

                        while (index >= 0 && curLineText[index] != '<')
                        {
                            --index;
                            if (curLineText[index] == '/')
                                return; // the tag was an end tag or already
                        }

                        if (index > 0)
                        {
                            StringBuilder commentBuilder = new StringBuilder("");
                            for (int i = index; i < curLineText.Length && i < column && !Char.IsWhiteSpace(curLineText[i]); ++i)
                            {
                                commentBuilder.Append(curLineText[i]);
                            }
                            string tag = commentBuilder.ToString().Trim();
                            if (!tag.EndsWith(">"))
                            {
                                tag += ">";
                            }
                            if (!tag.StartsWith("/"))
                            {
                                textArea.Document.Insert(cursorOffset, "</" + tag.Substring(1));
                            }
                        }
                    }
                    break;
                case ':':
                case ')':
                case ']':
                case '}':
                case '{':
                    if (textArea.IndentationStrategy != null)
                        textArea.IndentationStrategy.IndentLine(textArea, curLine);
                    break;
                case '\n':
                    string lineAboveText = lineAbove == null ? "" : textArea.Document.GetText(lineAbove);
                    //// curLine might have some text which should be added to indentation
                    curLineText = textArea.Document.GetText(curLine);

                    if (lineAbove != null && textArea.Document.GetText(lineAbove).Trim().StartsWith("#region")
                        && NeedEndregion(textArea.Document))
                    {
                        textArea.Document.Insert(cursorOffset, "#endregion");
                        return;
                    }
                    IHighlighter highlighter = textArea.GetService(typeof(IHighlighter)) as IHighlighter;
                    bool isInMultilineComment = false;
                    bool isInMultilineString = false;
                    if (highlighter != null && lineAbove != null)
                    {
                        var spanStack = highlighter.GetSpanColorNamesFromLineStart(lineNr);
                        isInMultilineComment = spanStack.Contains(HighlightingKnownNames.Comment);
                        isInMultilineString = spanStack.Contains(HighlightingKnownNames.String);
                    }
                    bool isInNormalCode = !(isInMultilineComment || isInMultilineString);

                    if (lineAbove != null && isInMultilineComment)
                    {
                        string lineAboveTextTrimmed = lineAboveText.TrimStart();
                        if (lineAboveTextTrimmed.StartsWith("/*", StringComparison.Ordinal))
                        {
                            textArea.Document.Insert(cursorOffset, " * ");
                            return;
                        }

                        if (lineAboveTextTrimmed.StartsWith("*", StringComparison.Ordinal))
                        {
                            textArea.Document.Insert(cursorOffset, "* ");
                            return;
                        }
                    }

                    if (lineAbove != null && isInNormalCode)
                    {
                        DocumentLine nextLine = lineNr + 1 <= textArea.Document.LineCount ? textArea.Document.GetLineByNumber(lineNr + 1) : null;
                        string nextLineText = (nextLine != null) ? textArea.Document.GetText(nextLine) : "";

                        int indexAbove = lineAboveText.IndexOf("///");
                        int indexNext = nextLineText.IndexOf("///");
                        if (indexAbove > 0 && (indexNext != -1 || indexAbove + 4 < lineAbove.Length))
                        {
                            textArea.Document.Insert(cursorOffset, "/// ");
                            return;
                        }

                        if (IsInNonVerbatimString(lineAboveText, curLineText))
                        {
                            textArea.Document.Insert(cursorOffset, "\"");
                            textArea.Document.Insert(lineAbove.Offset + lineAbove.Length,
                                                     "\" +");
                        }
                    }
                    if (/*textArea.Options.AutoInsertBlockEnd &&*/ lineAbove != null && isInNormalCode)
                    {
                        string oldLineText = textArea.Document.GetText(lineAbove);
                        if (oldLineText.EndsWith("{"))
                        {
                            if (NeedCurlyBracket(textArea.Document.Text))
                            {
                                int insertionPoint = curLine.Offset + curLine.Length;
                                textArea.Document.Insert(insertionPoint, terminator + "}");
                                if (textArea.IndentationStrategy != null)
                                    textArea.IndentationStrategy.IndentLine(textArea, textArea.Document.GetLineByNumber(lineNr + 1));
                                textArea.Caret.Offset = insertionPoint;
                            }
                        }
                    }
                    return;
            }
        }