private Dict _tag; /* tag's dictionary definition */ #endregion Fields #region Constructors /* Mosaic handles inlines via a separate stack from other elements We duplicate this to recover from inline markup errors such as: <i>italic text <p>more italic text</b> normal text which for compatibility with Mosaic is mapped to: <i>italic text</i> <p><i>more italic text</i> normal text Note that any inline end tag pop's the effect of the current inline start tag, so that </b> pop's <i> in the above example. */ public InlineStack() { _next = null; _tag = null; _element = null; _attributes = null; }
/* push a copy of an inline node onto stack but don't push if implicit or OBJECT or APPLET (implicit tags are ones generated from the istack) One issue arises with pushing inlines when the tag is already pushed. For instance: <p><em>text <p><em>more text Shouldn't be mapped to <p><em>text</em></p> <p><em><em>more text</em></em> */ public virtual void PushInline(Node node) { InlineStack stack; if (node.Isimplicit) return; if (node.Tag == null) return; if ((node.Tag.Model & ContentModel.Inline) == 0) return; if ((node.Tag.Model & ContentModel.Object) != 0) return; if (node.Tag != Options.tt.TagFont && IsPushed(node)) return; // make sure there is enough space for the stack stack = new InlineStack(); stack.Tag = node.Tag; stack.Element = node.Element; if (node.Attributes != null) { stack.Attributes = CloneAttributes(node.Attributes); } istack.Push(stack); }