private NodeData AddAttribute(int endNamePos, int colonPos)
{
// setup attribute name
if (colonPos == -1 || !_supportNamespaces)
{
string localName = _nameTable.Add(_ps.chars, _ps.charPos, endNamePos - _ps.charPos);
return AddAttribute(localName, string.Empty, localName);
}
else
{
_attrNeedNamespaceLookup = true;
int startPos = _ps.charPos;
int prefixLen = colonPos - startPos;
if (prefixLen == _lastPrefix.Length && XmlConvert.StrEqual(_ps.chars, startPos, prefixLen, _lastPrefix))
{
return AddAttribute(_nameTable.Add(_ps.chars, colonPos + 1, endNamePos - colonPos - 1),
_lastPrefix,
null);
}
else
{
string prefix = _nameTable.Add(_ps.chars, startPos, prefixLen);
_lastPrefix = prefix;
return AddAttribute(_nameTable.Add(_ps.chars, colonPos + 1, endNamePos - colonPos - 1),
prefix,
null);
}
}
}