2 * Copyright (C) 2013 FooProject
3 * * This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by
4 * the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
6 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
7 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
9 You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.
13 using System.Collections.Generic;
14 using System.Globalization;
17 namespace FooEditEngine
22 public static Windows.Foundation.Point GetClientPoint(Windows.Foundation.Point screen, Windows.UI.Xaml.UIElement element)
24 var gt = element.TransformToVisual(element);
25 return gt.TransformPoint(screen);
27 public static Windows.Foundation.Point GetScreentPoint(Windows.Foundation.Point client, Windows.UI.Xaml.UIElement element)
29 var gt = element.TransformToVisual(Windows.UI.Xaml.Window.Current.Content);
30 return gt.TransformPoint(client);
32 public static Windows.Foundation.Rect GetClientRect(Windows.Foundation.Rect screen, Windows.UI.Xaml.UIElement element)
34 var gt = element.TransformToVisual(element);
35 return gt.TransformBounds(screen);
37 public static Windows.Foundation.Rect GetScreentRect(Windows.Foundation.Rect client, Windows.UI.Xaml.UIElement element)
39 var gt = element.TransformToVisual(Windows.UI.Xaml.Window.Current.Content);
40 return gt.TransformBounds(client);
42 public static IEnumerable<char> GetEnumrator(string s)
44 char[] chars = s.ToCharArray();
48 public static IEnumerable<char> GetEnumrator(string s)
54 public static T ConvertAbsIndexToRelIndex<T>(T n, int StartIndex, int Length) where T : IRange
56 n = Util.NormalizeIMaker<T>(n);
58 int markerEnd = n.start + n.length - 1;
60 int EndIndex = StartIndex + Length;
62 if (n.start >= StartIndex && markerEnd <= EndIndex)
63 n.start -= StartIndex;
64 else if (n.start >= StartIndex && n.start <= EndIndex)
66 n.start -= StartIndex;
67 n.length = EndIndex - StartIndex + 1;
69 else if (markerEnd >= StartIndex && markerEnd <= EndIndex)
72 n.length = markerEnd - StartIndex + 1;
74 else if (n.start >= StartIndex && markerEnd <= EndIndex)
75 n.start -= StartIndex;
76 else if (n.start <= StartIndex && markerEnd > EndIndex)
79 n.length = EndIndex - StartIndex + 1;
89 public static bool IsWordSeparator(char c)
91 if (c == Document.NewLine || char.IsSeparator(c) || char.IsPunctuation(c) || CharUnicodeInfo.GetUnicodeCategory(c) == UnicodeCategory.MathSymbol)
96 public static void Swap<T>(ref T a, ref T b)
103 public static string Generate(char c, int count)
105 StringBuilder tabstr = new StringBuilder();
106 for (int j = count; j > 0; j--)
108 return tabstr.ToString();
111 public static Rectangle OffsetAndDeflate(Rectangle r, Size s)
113 return new Rectangle(r.X + s.Width,r.Y + s.Height, r.Width - s.Width, r.Height - s.Height);
116 public static T NormalizeIMaker<T>(T m) where T : IRange
120 m.start = m.start + m.length;
121 m.length = Math.Abs(m.length);
125 public static int RoundUp(double x)
127 return (int)(x + 0.5);