-
Notifications
You must be signed in to change notification settings - Fork 18
/
Copy pathEditorExtensions.cs
80 lines (74 loc) · 2.05 KB
/
EditorExtensions.cs
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
using System;
using System.Collections.Generic;
using NStack;
namespace psedit
{
public static class EditorExtensions
{
public static List<Rune> GetLine(List<List<Rune>> lines, int line)
{
if (lines.Count > 0)
{
if (line < lines.Count)
{
return lines[line];
}
else
{
return lines[lines.Count - 1];
}
}
else
{
lines.Add(new List<Rune>());
return lines[0];
}
}
public static bool SetCol(ref int col, int width, int cols)
{
if (col + cols <= width)
{
col += cols;
return true;
}
return false;
}
public static List<List<Rune>> StringToRunes(ustring content)
{
var lines = new List<List<Rune>>();
int start = 0, i = 0;
var hasCR = false;
// ASCII code 13 = Carriage Return.
// ASCII code 10 = Line Feed.
for (; i < content.Length; i++)
{
if (content[i] == 13)
{
hasCR = true;
continue;
}
if (content[i] == 10)
{
if (i - start > 0)
lines.Add(ToRunes(content[start, hasCR ? i - 1 : i]));
else
lines.Add(ToRunes(ustring.Empty));
start = i + 1;
hasCR = false;
}
}
if (i - start >= 0)
lines.Add(ToRunes(content[start, null]));
return lines;
}
public static List<Rune> ToRunes(ustring str)
{
List<Rune> runes = new List<Rune>();
foreach (var x in str.ToRunes())
{
runes.Add(x);
}
return runes;
}
}
}