void OnTagParsed(TagType tagtype, string id, TagAttributes attributes) { if (TagParsed != null) { TagParsed(this, tagtype, id, attributes); } }
void parser_TagParsed(ILocation location, TagType tagtype, string id, TagAttributes attributes) { string tmp = ""; if (String.Compare(id, "script", true) == 0) { if (tagtype == TagType.Tag) { parser.VerbatimID = "script"; } } switch (tagtype) { case TagType.Tag: case TagType.Text: case TagType.ServerComment: case TagType.SelfClosing: case TagType.Include: case TagType.DataBinding: case TagType.Close: case TagType.CodeRenderExpression: // AppendText(location.PlainText, true); AppendText(location.PlainText); break; case TagType.Directive: if (id.CompareTo("Import") == 0) { eb.AppendNameSpace(attributes["Namespace"].ToString()); } else if (id.CompareTo("Assembly") == 0) { eb.AppendAssembly(attributes["Name"].ToString()); } else if (id.CompareTo("SessionRequest") == 0) { if (attributes["Check"] != null) { eb.AppendCodeIfAndReturn(m, "!CheckSession(false)"); } else if (attributes["CheckAndCreate"] != null) { eb.AppendCodeIfAndReturn(m, "!CheckSession(true)"); } else if (attributes["CheckManual"] != null) { break; } } break; case TagType.CodeRender: AppendText(id, false); break; } }
void GetServerTag(out TagType tagtype, out string id, out TagAttributes attributes) { string inside_tags; bool old = tokenizer.ExpectAttrValue; tokenizer.ExpectAttrValue = false; if (Eat('@')) { tokenizer.ExpectAttrValue = old; tagtype = TagType.Directive; id = ""; if (Eat(Token.DIRECTIVE)) { id = tokenizer.Value; } attributes = GetAttributes(); if (!Eat('%') || !Eat('>')) { OnError("expecting '%>'"); } return; } if (Eat(Token.DOUBLEDASH)) { tokenizer.ExpectAttrValue = old; tokenizer.Verbatim = true; inside_tags = GetVerbatim(tokenizer.get_token(), "--%>"); tokenizer.Verbatim = false; id = null; attributes = null; tagtype = TagType.ServerComment; return; } tokenizer.ExpectAttrValue = old; bool varname; bool databinding; varname = Eat('='); databinding = !varname && Eat('#'); tokenizer.Verbatim = true; inside_tags = GetVerbatim(tokenizer.get_token(), "%>"); tokenizer.Verbatim = false; id = inside_tags; attributes = null; tagtype = (databinding ? TagType.DataBinding : (varname ? TagType.CodeRenderExpression : TagType.CodeRender)); }
void parser_TagParsed(ILocation location, TagType tagtype, string id, TagAttributes attributes) { switch (tagtype) { case TagType.CodeRender: parent.AppendText(id, false); break; default: parent.AppendText(location.PlainText); break; } }
TagAttributes GetAttributes() { int token; TagAttributes attributes; string id; bool wellFormedForServer = true; attributes = new TagAttributes(); while ((token = tokenizer.get_token()) != Token.EOF) { if (token == '<' && Eat('%')) { tokenizer.Verbatim = true; attributes.Add("", "<%" + GetVerbatim(tokenizer.get_token(), "%>") + "%>"); tokenizer.Verbatim = false; tokenizer.InTag = true; continue; } if (token != Token.IDENTIFIER) { break; } id = tokenizer.Value; if (Eat('=')) { if (Eat(Token.ATTVALUE)) { attributes.Add(id, tokenizer.Value); wellFormedForServer &= tokenizer.AlternatingQuotes; } else if (Eat('<') && Eat('%')) { tokenizer.Verbatim = true; attributes.Add(id, "<%" + GetVerbatim(tokenizer.get_token(), "%>") + "%>"); tokenizer.Verbatim = false; tokenizer.InTag = true; } else { OnError("expected ATTVALUE"); return(null); } } else { attributes.Add(id, null); } } tokenizer.put_back(); if (attributes.IsRunAtServer() && !wellFormedForServer) { OnError("The server tag is not well formed."); return(null); } return(attributes); }
void GetTag(out TagType tagtype, out string id, out TagAttributes attributes) { int token = tokenizer.get_token(); tagtype = TagType.ServerComment; id = null; attributes = null; switch (token) { case '%': GetServerTag(out tagtype, out id, out attributes); break; case '/': if (!Eat(Token.IDENTIFIER)) { OnError("expecting TAGNAME"); } id = tokenizer.Value; if (!Eat('>')) { OnError("expecting '>'. Got '" + id + "'"); } tagtype = TagType.Close; break; case '!': bool double_dash = Eat(Token.DOUBLEDASH); if (double_dash) { tokenizer.put_back(); } tokenizer.Verbatim = true; string end = double_dash ? "-->" : ">"; string comment = GetVerbatim(tokenizer.get_token(), end); tokenizer.Verbatim = false; if (comment == null) { OnError("Unfinished HTML comment/DTD"); } string pathType, filename; if (double_dash && GetInclude(comment, out pathType, out filename)) { tagtype = TagType.Include; attributes = new TagAttributes(); attributes.Add(pathType, filename); } else { tagtype = TagType.Text; id = "<!" + comment + end; } break; case Token.IDENTIFIER: if (this.filename == "@@inner_string@@") { // Actually not tag but "xxx < yyy" stuff in inner_string! tagtype = TagType.Text; tokenizer.InTag = false; id = "<" + tokenizer.Odds + tokenizer.Value; } else { id = tokenizer.Value; try { attributes = GetAttributes(); } catch (Exception e) { OnError(e.Message); break; } tagtype = TagType.Tag; if (Eat('/') && Eat('>')) { tagtype = TagType.SelfClosing; } else if (!Eat('>')) { if (attributes.IsRunAtServer()) { OnError("The server tag is not well formed."); break; } tokenizer.Verbatim = true; attributes.Add("", GetVerbatim(tokenizer.get_token(), ">") + ">"); tokenizer.Verbatim = false; } } break; default: tagtype = TagType.Text; tokenizer.InTag = false; id = "<" + tokenizer.Value; break; } }