private static CssMarkupNode?GetNextNode(String css, ref Int32 i, StringBuilder sb) { for (; i < css.Length; i++) { var currentChar = css[i]; switch (currentChar) { case '/': if (css[i + 1] == '*') { // comment i++; while (i < css.Length) { currentChar = css[++i]; if (currentChar == '*' && css[i + 1] == '/') { i++; break; } } } break; case '{': var currentNode = new CssMarkupNode(sb.ToString().Trim(), null); sb.Clear(); i++; AddAttributes(css, ref i, sb, currentNode); return(currentNode); case '}': break; default: sb.Append(currentChar); break; } } return(null); }
private static void AddAttributes(String css, ref Int32 i, StringBuilder sb, CssMarkupNode currentNode) { for (; i < css.Length; i++) { var currentChar = css[i]; switch (currentChar) { case ':': var key = sb.ToString(); sb.Clear(); i++; var value = GetAttributeValue(css, ref i, sb); if (value != null) { currentNode.AddAttribute(key, value); } break; case '}': return; case ';': throw new NotImplementedException(); case '\r': case '\n': case '\t': case ' ': break; default: sb.Append(currentChar); break; } } }