4356fafafd19b762ab575c67aca0813aeaa59857
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI / src / internal / XamlBinding / StyleSheets / TextReaderExtensions.cs
1 using System;
2 using System.IO;
3 using System.Linq;
4 using System.Text;
5
6 namespace Tizen.NUI.StyleSheets
7 {
8         static class TextReaderExtensions
9         {
10                 //ident         [-]?{nmstart}{nmchar}*
11                 public static string ReadIdent(this TextReader reader)
12                 {
13                         var sb = new StringBuilder();
14                         bool first = true;
15                         bool hasLeadingDash = false;
16                         int p;
17                         while ((p = reader.Peek()) > 0) {
18                                 var c = unchecked((char)p);
19                                 if (first && !hasLeadingDash && c == '-') {
20                                         sb.Append((char)reader.Read());
21                                         hasLeadingDash = true;
22                                 } else if (first && c.IsNmStart()) {
23                                         sb.Append((char)reader.Read());
24                                         first = false;
25                                 } else if (first) { //a nmstart is expected
26                                         throw new Exception();
27                                 } else if (c.IsNmChar())
28                                         sb.Append((char)reader.Read());
29                                 else
30                                         break;
31                         }
32                         return sb.ToString();
33                 }
34
35                 //name          {nmchar}+
36                 public static string ReadName(this TextReader reader)
37                 {
38                         var sb = new StringBuilder();
39                         int p;
40                         while ((p = reader.Peek()) > 0) {
41                                 var c = unchecked((char)p);
42                                 if (c.IsNmChar())
43                                         sb.Append((char)reader.Read());
44                                 else
45                                         break;
46                         }
47                         return sb.ToString();
48                 }
49
50                 public static string ReadUntil(this TextReader reader, params char[] limit)
51                 {
52                         var sb = new StringBuilder();
53                         int p;
54                         while ((p = reader.Peek()) > 0) {
55                                 var c = unchecked((char)p);
56                                 if (limit != null && limit.Contains(c))
57                                         break;
58                                 reader.Read();
59                                 sb.Append(c);
60                         }
61                         return sb.ToString();
62                 }
63
64                 //w                     [ \t\r\n\f]*
65                 public static void SkipWhiteSpaces(this TextReader reader)
66                 {
67                         int p;
68                         while ((p = reader.Peek()) > 0) {
69                                 var c = unchecked((char)p);
70                                 if (!c.IsW())
71                                         break;
72                                 reader.Read();
73                         }
74                 }
75         }
76 }