/* create style element using rules from dictionary */ private void CreateStyleElement(Lexer lexer, Node doc) { Style style; if (lexer.Styles == null && NiceBody(lexer, doc)) { return; } Node node = lexer.NewNode(Node.START_TAG, null, 0, 0, "style"); node.Isimplicit = true; /* insert type attribute */ var av = new AttVal(null, null, '"', "type", "text/css"); av.Dict = AttributeTable.DefaultAttributeTable.FindAttribute(av); node.Attributes = av; Node body = doc.FindBody(lexer.Options.TagTable); lexer.Txtstart = lexer.Lexsize; if (body != null) { CleanBodyAttrs(lexer, body); } for (style = lexer.Styles; style != null; style = style.Next) { lexer.AddCharToLexer(' '); lexer.AddStringLiteral(style.Tag); lexer.AddCharToLexer('.'); lexer.AddStringLiteral(style.TagClass); lexer.AddCharToLexer(' '); lexer.AddCharToLexer('{'); lexer.AddStringLiteral(style.Properties); lexer.AddCharToLexer('}'); lexer.AddCharToLexer('\n'); } lexer.Txtend = lexer.Lexsize; Node.InsertNodeAtEnd(node, lexer.NewNode(Node.TEXT_NODE, lexer.Lexbuf, lexer.Txtstart, lexer.Txtend)); /* now insert style element into document head doc is root node. search its children for html node the head node should be first child of html node */ Node head = doc.FindHead(lexer.Options.TagTable); if (head != null) { Node.InsertNodeAtEnd(head, node); } }
/* Add meta element for page transition effect, this works on IE but not NS */ public virtual void AddTransitionEffect(Lexer lexer, Node root, short effect, double duration) { Node head = root.FindHead(lexer.Options.TagTable); string transition; if (0 <= effect && effect <= 23) { transition = "revealTrans(Duration=" + (duration).ToString() + ",Transition=" + effect + ")"; } else { transition = "blendTrans(Duration=" + (duration).ToString() + ")"; } if (head != null) { Node meta = lexer.InferredTag("meta"); meta.AddAttribute("http-equiv", "Page-Enter"); meta.AddAttribute("content", transition); Node.InsertNodeAtStart(head, meta); } }
/* add meta element for Tidy */ public virtual bool AddGenerator(Node root) { Node head = root.FindHead(Options.TagTable); if (head != null) { Node node; for (node = head.Content; node != null; node = node.Next) { if (node.Tag == Options.TagTable.TagMeta) { AttVal attval = node.GetAttrByName("name"); if (attval != null && attval.Val != null && String.CompareOrdinal(attval.Val, "generator") == 0) { attval = node.GetAttrByName("content"); if (attval != null && attval.Val != null && attval.Val.Length >= 9 && String.CompareOrdinal(attval.Val.Substring(0, 9), "HTML Tidy") == 0) { return false; } } } } node = InferredTag("meta"); node.AddAttribute("content", "HTML Tidy, see www.w3.org"); node.AddAttribute("name", "generator"); Node.InsertNodeAtStart(head, node); return true; } return false; }