internal ElementState(ElementState copy) { alignment = copy.alignment; verticalAlignment = copy.verticalAlignment; pointSize = copy.pointSize; // not part of the ongoing state //heightPercent = copy.heightPercent; }
private void ParseTypeContent(int openPosition, int closePosition, string htmlContent) { string text = htmlContent.Substring(openPosition, closePosition - openPosition); ElementState currentElementState = new ElementState(elementQueue.Peek()); int afterTypeName = typeNameEndRegex.Match(htmlContent, openPosition).Index; if (afterTypeName < closePosition) { string content = htmlContent.Substring(afterTypeName, closePosition - afterTypeName).Trim(); string[] splitOnSpace = SplitOnSpacesNotInQuotes(content); for (int i = 0; i < splitOnSpace.Length; i++) { string[] splitOnEquals = new Regex("=").Split(splitOnSpace[i]); string elementString = splitOnEquals[0]; string elementValue = ""; if (splitOnEquals.Length > 1) { elementValue = RemoveOuterQuotes(splitOnEquals[1]); } switch (elementString) { case "title": case "alt": case "html": break; case "style": currentElementState.ParseStyleContent(elementValue); break; case "align": break; case "class": { string[] classes = elementValue.Split(' '); foreach (string className in classes) { currentElementState.classes.Add(className); } } break; case "href": currentElementState.href = elementValue; break; case "src": currentElementState.src = elementValue; break; case "id": currentElementState.id = elementValue; break; default: break; //throw new NotImplementedException(); } } } elementQueue.Push(currentElementState); }
private void ParseStyleContent(string styleContent, ElementState style) { string[] splitOnSemi = styleContent.Split(';'); for (int i = 0; i < splitOnSemi.Length; i++) { if (splitOnSemi[i].Length > 0) { string[] splitOnColon = splitOnSemi[i].Split(':'); switch (splitOnColon[0]) { case "height": style.heightPercent = int.Parse(splitOnColon[1].Substring(0, splitOnColon[1].Length - 1)); break; case "text-align": style.alignment = (ElementState.AlignType)Enum.Parse(typeof(ElementState.AlignType), splitOnColon[1]); break; case "font-size": style.pointSize = int.Parse(splitOnColon[1].Substring(0, splitOnColon[1].Length - 2)); break; case "vertical-align": style.verticalAlignment = (ElementState.VerticalAlignType)Enum.Parse(typeof(ElementState.VerticalAlignType), splitOnColon[1]); break; default: throw new NotImplementedException(); } } } }
private void ParesTypeContent(int openPosition, int closePosition, string htmlContent) { string text = htmlContent.Substring(openPosition, closePosition - openPosition); ElementState style = new ElementState(elementQueue.Peek()); int afterTypeName = typeNameEndRegex.Match(htmlContent, openPosition).Index; if (afterTypeName < closePosition) { string content = htmlContent.Substring(afterTypeName, closePosition - afterTypeName).Trim(); string[] splitOnSpace = new Regex("' ").Split(content); for (int i = 0; i < splitOnSpace.Length; i++) { string[] splitOnEquals = new Regex("='").Split(splitOnSpace[i]); switch (splitOnEquals[0]) { case "style": ParseStyleContent(splitOnEquals[1].Substring(0, splitOnEquals[1].Length - 1), style); break; case "align": break; case "class": { string[] classes = splitOnEquals[1].Split(' '); foreach (string className in classes) { style.classes.Add(new Regex("[^']*").Match(className).Value); } } break; case "href": style.href = splitOnEquals[1].Substring(0, splitOnEquals[1].Length - 1); break; case "id": style.id = splitOnEquals[1]; break; default: throw new NotImplementedException(); } } } elementQueue.Push(style); }