internal ElementState(ElementState copy)
 {
     alignment = copy.alignment;
     verticalAlignment = copy.verticalAlignment;
     pointSize = copy.pointSize;
     // not part of the ongoing state
     //heightPercent = copy.heightPercent;
 }
Example #2
0
		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);
        }