string DetermineAttributePrefix (
string prefix, string local, string ns)
{
bool mockup = false;
if (prefix.Length == 0) {
prefix = LookupPrefix (ns);
if (prefix != null && prefix.Length > 0)
return prefix;
mockup = true;
} else {
prefix = nsmanager.NameTable.Add (prefix);
string existing = nsmanager.LookupNamespace (prefix, true);
if (existing == ns)
return prefix;
if (existing != null) {
// See code comment on the head of
// this source file.
nsmanager.RemoveNamespace (prefix, existing);
if (nsmanager.LookupNamespace (prefix, true) != existing) {
mockup = true;
nsmanager.AddNamespace (prefix, existing);
}
}
}
if (mockup)
prefix = MockupPrefix (ns, true);
new_local_namespaces.Push (prefix);
nsmanager.AddNamespace (prefix, ns);
return prefix;
}