Free cookie consent management tool by TermsFeed Policy Generator

source: branches/CodeEditor/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/NRefactory.CSharp-5.5.0/Refactoring/WordParser.cs @ 11700

Last change on this file since 11700 was 11700, checked in by jkarder, 9 years ago

#2077: created branch and added first version

File size: 2.5 KB
Line 
1//
2// WordParser.cs
3// 
4// Author:
5//       Michael Hutchinson <mhutch@xamarin.com>
6//
7// Copyright (c) 2012 Xamarin Inc. (http://xamarin.com)
8//
9// Permission is hereby granted, free of charge, to any person obtaining a copy
10// of this software and associated documentation files (the "Software"), to deal
11// in the Software without restriction, including without limitation the rights
12// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13// copies of the Software, and to permit persons to whom the Software is
14// furnished to do so, subject to the following conditions:
15//
16// The above copyright notice and this permission notice shall be included in
17// all copies or substantial portions of the Software.
18//
19// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
25// THE SOFTWARE.
26using System;
27using System.Collections.Generic;
28
29namespace ICSharpCode.NRefactory.CSharp
30{
31  public static class WordParser
32  {
33    public static List<string> BreakWords (string identifier)
34    {
35      var words = new List<string> ();
36      int wordStart = 0;
37      bool lastWasLower = false, lastWasUpper = false;
38      for (int i = 0; i < identifier.Length; i++) {
39        char c = identifier[i];
40        var category = char.GetUnicodeCategory (c);
41        if (category == System.Globalization.UnicodeCategory.LowercaseLetter) {
42          if (lastWasUpper && (i - wordStart) > 2) {
43            words.Add (identifier.Substring (wordStart, i - wordStart - 1));
44            wordStart = i - 1;
45          }
46          lastWasLower = true;
47          lastWasUpper = false;
48        } else if (category == System.Globalization.UnicodeCategory.UppercaseLetter) {
49          if (lastWasLower) {
50            words.Add (identifier.Substring (wordStart, i - wordStart));
51            wordStart = i;
52          }
53          lastWasLower = false;
54          lastWasUpper = true;
55        } else {
56          if (c == '_') {
57            if ((i - wordStart) > 0)
58              words.Add(identifier.Substring(wordStart, i - wordStart));
59            wordStart = i + 1;
60            lastWasLower = lastWasUpper = false;
61          }
62        }
63      }
64      if (wordStart < identifier.Length)
65        words.Add (identifier.Substring (wordStart));
66      return words;
67    }
68  }
69}
70
Note: See TracBrowser for help on using the repository browser.