bool ProcessTagsInAttributes (ILocation location, string tagid, TagAttributes attributes, TagType type)
{
if (attributes == null || attributes.Count == 0)
return false;
Match match;
Group group;
string value;
bool retval = false;
int index, length;
StringBuilder sb = new StringBuilder ();
sb.AppendFormat ("\t<{0}", tagid);
foreach (string key in attributes.Keys) {
value = attributes [key] as string;
if (value == null || value.Length < 16) { // optimization
sb.AppendFormat (" {0}=\"{1}\"", key, value);
continue;
}
match = runatServer.Match (attributes [key] as string);
if (!match.Success) {
sb.AppendFormat (" {0}=\"{1}\"", key, value);
continue;
}
if (sb.Length > 0) {
TextParsed (location, sb.ToString ());
sb.Length = 0;
}
retval = true;
group = match.Groups [0];
index = group.Index;
length = group.Length;
TextParsed (location, String.Format (" {0}=\"{1}", key, index > 0 ? value.Substring (0, index) : String.Empty));;
FlushText ();
ParseAttributeTag (group.Value, location);
if (index + length < value.Length)
TextParsed (location, value.Substring (index + length) + "\"");
else
TextParsed (location, "\"");
}
if (type == TagType.SelfClosing)
sb.Append ("/>");
else
sb.Append (">");
if (retval && sb.Length > 0)
TextParsed (location, sb.ToString ());
return retval;
}