CharacterExtensions.cs 2.11 KB
Newer Older
Eric Domke's avatar
Eric Domke committed
1
2
using System.Collections.Generic;

Matt Schneeberger's avatar
Matt Schneeberger committed
3
namespace Svg.ExCSS.Model.Extensions
Eric Domke's avatar
Eric Domke committed
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
{
    static class CharacterExtensions
    {
        public static int FromHex(this char character)
        {
            return character.IsDigit() ? character - 0x30 : character - (character.IsLowercaseAscii() ? 0x57 : 0x37);
        }

        public static string TrimArray(this char[] array)
        {
            var start = 0;
            var end = array.Length - 1;

            while (start < array.Length && array[start].IsSpaceCharacter())
            {
                start++;
            }

            while (end > start && array[end].IsSpaceCharacter())
            {
                end--;
            }

            return new string(array, start, 1 + end - start);
        }

        public static string[] SplitOnCommas(this string value)
        {
            var list = new List<string>();
            var buffer = new List<char>();
            var chars = value.ToCharArray();

            for (var i = 0; i <= chars.Length; i++)
            {
                if (i == chars.Length || chars[i] == ',')
                {
                    if (buffer.Count <= 0)
                    {
                        continue;
                    }
                    var token = buffer.ToArray().TrimArray();

                    if (token.Length != 0)
                    {
                        list.Add(token);
                    }

                    buffer.Clear();
                }
                else
                {
                    buffer.Add(chars[i]);
                }
            }

            return list.ToArray();
        }

        public static string ToHex(this byte num)
        {
            var characters = new char[2];
            var rem = num >> 4;

            characters[0] = (char)(rem + (rem < 10 ? 48 : 55));
            rem = num - 16 * rem;
            characters[1] = (char)(rem + (rem < 10 ? 48 : 55));

            return new string(characters);
        }

        public static char ToHexChar(this byte num)
        {
            var rem = num & 0x0F;
            return (char)(rem + (rem < 10 ? 48 : 55));
        }
    }
}