public override string OnBreak(BreakElement element) { return("\n"); }
public Element Parse(string aoml) { ContainerElement container = new ContainerElement(); // Parse AOML NodeCollection nodes = this.Parser.Parse(aoml); this.Parser.Sanitize(nodes); this.Parser.Balance(nodes); // Transform AOML into a DOM tree Stack <Element> elements = new Stack <Element>(); elements.Push(container); foreach (Node node in nodes) { Element element = null; switch (node.Type) { case NodeType.Content: // Content doesn't introduce a new level // We'll simply add it as child at the current depth ContentNode content = (ContentNode)node; element = new TextElement(Web.UnescapeHtml(content.Value)); elements.Peek().Children.Add(element); break; case NodeType.Open: OpenNode open = (OpenNode)node; switch (open.Name) { case "br": // Singular linebreak element element = new BreakElement(); elements.Peek().Children.Add(element); break; case "img": // Singular image element element = this.CreateImageElement(open); if (element != null) { elements.Peek().Children.Add(element); } break; case "font": element = this.CreateFontElement(open); elements.Peek().Children.Add(element); if (!open.Closed) { elements.Push(element); } break; case "a": element = this.CreateLinkElement(open); elements.Peek().Children.Add(element); if (!open.Closed) { elements.Push(element); } break; case "u": element = new UnderlineElement(); elements.Peek().Children.Add(element); if (!open.Closed) { elements.Push(element); } break; case "i": element = new ItalicElement(); elements.Peek().Children.Add(element); if (!open.Closed) { elements.Push(element); } break; case "center": case "left": case "right": case "div": Alignment alignment = Alignment.Inherit; if (open.Name == "center" || open.GetAttribute("align") == "center") { alignment = Alignment.Center; } else if (open.Name == "left" || open.GetAttribute("align") == "left") { alignment = Alignment.Left; } else if (open.Name == "right" || open.GetAttribute("align") == "right") { alignment = Alignment.Right; } element = new AlignElement(alignment); elements.Peek().Children.Add(element); if (!open.Closed) { elements.Push(element); } break; default: throw new ArgumentException("Unexpected tag: " + open.Name); } break; case NodeType.Close: // Closing a node means consuming an element from the stack // But first check whether the node matches the element on the stack CloseNode close = (CloseNode)node; switch (close.Name) { case "br": throw new ArgumentException("Unexpected 'br' closing tag"); case "img": throw new ArgumentException("Unexpected 'img' closing tag"); case "font": if (elements.Peek().Type == ElementType.Color) { break; } if (elements.Peek().Type == ElementType.Container) { break; } throw new ArgumentException("Unexpected 'font' closing tag"); case "a": if (elements.Peek().Type == ElementType.Link) { break; } if (elements.Peek().Type == ElementType.Container) { break; } throw new ArgumentException("Unexpected 'a' closing tag"); case "u": if (elements.Peek().Type == ElementType.Underline) { break; } throw new ArgumentException("Unexpected 'u' closing tag"); case "i": if (elements.Peek().Type == ElementType.Italic) { break; } throw new ArgumentException("Unexpected 'i' closing tag"); case "div": case "center": case "left": case "right": if (elements.Peek().Type == ElementType.Align) { break; } throw new ArgumentException("Unexpected '" + close.Name + "' closing tag"); default: throw new ArgumentException("Unexpected tag: " + close.Name); } if (elements.Count <= 1) { throw new ArgumentException("Unexpected closing tag"); } // Go 1 step back down in the tree elements.Pop(); break; default: throw new InvalidOperationException("Unexpected node type"); } } // Let's report our progress if (container.Children.Count == 0) { return(null); } if (container.Children.Count == 1) { return(container.Children.ToArray()[0]); } return(container); }
private void button_StartDragDrop(object sender, MouseEventArgs e) { IElement el = null; string tagName = ((Label)sender).Tag.ToString(); DataObject d = new DataObject(); switch (tagName) { case "A": el = _editor.CreateElement("A"); goto case "INPUT"; case "IMG": el = new ImageElement(_editor); goto case "INPUT"; case "BR": el = new BreakElement(_editor); goto case "INPUT"; case "TEXTAREA": el = _editor.CreateElement("TEXTAREA"); ((TextAreaElement)el).cols = 10; ((TextAreaElement)el).rows = 3; d.SetData(typeof(IElement), el); break; case "LISTBOX": el = _editor.CreateElement("SELECT"); ((SelectElement)el).multiple = true; ((SelectElement)el).size = 3; d.SetData(typeof(IElement), el); break; case "HR": el = _editor.CreateElement("HR"); d.SetData(typeof(IElement), el); break; default: MessageBox.Show("This toolbox item has not been implemented.\n\nCheckout 'ToolWindow.cs' in demo code for implementation details.", "Not Implemented", MessageBoxButtons.OK, MessageBoxIcon.Information); break; case "BUTTON": case "INPUT button": el = new InputButtonElement(_editor); goto case "INPUT"; case "INPUT image": el = new InputImageElement(_editor); goto case "INPUT"; case "INPUT submit": el = new InputSubmitElement(_editor); goto case "INPUT"; case "INPUT checkbox": el = new InputCheckboxElement(_editor); goto case "INPUT"; case "INPUT radio": el = new InputRadioElement(_editor); goto case "INPUT"; case "INPUT text": el = new InputTextElement(_editor); goto case "INPUT"; case "INPUT password": el = new InputPasswordElement(_editor); goto case "INPUT"; case "INPUT hidden": el = new InputHiddenElement(_editor); goto case "INPUT"; case "INPUT": d.SetData(typeof(IElement), el); break; } ((Label)sender).DoDragDrop(d, DragDropEffects.Copy); }
public override Verb CreateVerb(string[] tokens) { Color(position, length, Operators); var type = tokens[1]; var text = tokens[2]; switch (text.ToLower().Substring(1)) { case "s": text = STRING_SPACES; break; case "w": text = STRING_WORDS; break; case "d": text = STRING_DIGITS; break; case "p": text = STRING_PUNCT; break; case "a": text = STRING_LETTERS; break; case "t": text = STRING_TAB; break; case "rn": text = STRING_CRLF; break; case "r": text = STRING_CR; break; case "n": text = STRING_LF; break; case "u": text = STRING_UPPER; break; case "l": text = STRING_LOWER; break; case "v": text = STRING_VOWELS; break; case "uv": text = STRING_UVOWELS; break; case "lv": text = STRING_LVOWELS; break; case "uc": text = STRING_UCONSONANTS; break; case "lc": text = STRING_LCONSONANTS; break; case "q": text = STRING_QUOTES; break; default: return(null); } switch (type) { case "+": Element = new SpanElement(text); break; case "-": Element = new BreakElement(text); break; case "++": Element = new MSpanElement(text); break; case "--": Element = new MBreakElement(text); break; case "": Element = new AnyElement(text, 1); break; default: if (text.IsNumeric()) { Element = new AnyElement(text, text.ToInt()); } else { return(null); } break; } return(new NullOp()); }
public void Format(ref StringBuilder result, Element element) { if (result == null || element == null) { throw new ArgumentNullException(); } // Open element result.Append(this.OnBeforeElement(element)); switch (element.Type) { case ElementType.Align: AlignElement align = (AlignElement)element; result.Append(this.OnAlignOpen(align)); break; case ElementType.Break: BreakElement linebreak = (BreakElement)element; result.Append(this.OnBreak(linebreak)); break; case ElementType.Color: ColorElement color = (ColorElement)element; result.Append(this.OnColorOpen(color)); break; case ElementType.Container: ContainerElement container = (ContainerElement)element; result.Append(this.OnContainerOpen(container)); break; case ElementType.Image: ImageElement image = (ImageElement)element; result.Append(this.OnImage(image)); break; case ElementType.Link: LinkElement link = (LinkElement)element; result.Append(this.OnLinkOpen(link)); break; case ElementType.Text: TextElement text = (TextElement)element; result.Append(this.OnText(text)); break; case ElementType.Underline: UnderlineElement underline = (UnderlineElement)element; result.Append(this.OnUnderlineOpen(underline)); break; case ElementType.Italic: ItalicElement italic = (ItalicElement)element; result.Append(this.OnItalicOpen(italic)); break; } // Process children if (element.Children != null) { foreach (Element child in element.Children) { this.Format(ref result, child); } } // Close element switch (element.Type) { case ElementType.Align: AlignElement align = (AlignElement)element; result.Append(this.OnAlignClose(align)); break; case ElementType.Color: ColorElement color = (ColorElement)element; result.Append(this.OnColorClose(color)); break; case ElementType.Container: ContainerElement container = (ContainerElement)element; result.Append(this.OnContainerClose(container)); break; case ElementType.Link: LinkElement link = (LinkElement)element; result.Append(this.OnLinkClose(link)); break; case ElementType.Underline: UnderlineElement underline = (UnderlineElement)element; result.Append(this.OnUnderlineClose(underline)); break; case ElementType.Italic: ItalicElement italic = (ItalicElement)element; result.Append(this.OnItalicClose(italic)); break; } result.Append(this.OnAfterElement(element)); }
public abstract string OnBreak(BreakElement element);