aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/Converters/EntityFieldNameToFriendlyStringConverter.cs
blob: 4c42281748081ae0fed9b3f704f34fdec1f0cd10 (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
// 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.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Documents;

using Tango.Scripting.Editors.Document;

namespace Tango.Scripting.Editors.Search
{
	class RegexSearchStrategy : ISearchStrategy
	{
		readonly Regex searchPattern;
		readonly bool matchWholeWords;
		
		public RegexSearchStrategy(Regex searchPattern, bool matchWholeWords)
		{
			if (searchPattern == null)
				throw new ArgumentNullException("searchPattern");
			this.searchPattern = searchPattern;
			this.matchWholeWords = matchWholeWords;
		}
		
		public IEnumerable<ISearchResult> FindAll(ITextSource document, int offset, int length)
		{
			int endOffset = offset + length;
			foreach (Match result in searchPattern.Matches(document.Text)) {
				int resultEndOffset = result.Length + result.Index;
				if (offset > result.Index |
if (matchWholeWords && (!IsWordBorder(document, result.Index) || !IsWordBorder(document, resultEndOffset))) continue; yield return new SearchResult { StartOffset = result.Index, Length = result.Length, Data = result }; } } static bool IsWordBorder(ITextSource document, int offset) { return TextUtilities.GetNextCaretPosition(document, offset - 1, LogicalDirection.Forward, CaretPositioningMode.WordBorder) == offset; } public ISearchResult FindNext(ITextSource document, int offset, int length) { return FindAll(document, offset, length).FirstOrDefault(); } public bool Equals(ISearchStrategy other) { var strategy = other as RegexSearchStrategy; return strategy != null && strategy.searchPattern.ToString() == searchPattern.ToString() && strategy.searchPattern.Options == searchPattern.Options && strategy.searchPattern.RightToLeft == searchPattern.RightToLeft; } } class SearchResult : TextSegment, ISearchResult { public Match Data { get; set; } public string ReplaceWith(string replacement) { return Data.Result(replacement); } } }