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 ('#');
string odds = tokenizer.Odds;
tokenizer.Verbatim = true;
inside_tags = GetVerbatim (tokenizer.get_token (), "%>");
if (databinding && odds != null && odds.Length > 0) {
databinding = false;
// We encountered <% #something here %>, this should be passed
// verbatim to the compiler
inside_tags = '#' + inside_tags;
}
tokenizer.Verbatim = false;
id = inside_tags;
attributes = null;
tagtype = (databinding ? TagType.DataBinding :
(varname ? TagType.CodeRenderExpression : TagType.CodeRender));
}