private VersionDirective ProcessDirectives(TagDirectiveCollection tags)
{
VersionDirective version = null;
bool hasOwnDirectives = false;
while (true)
{
VersionDirective currentVersion;
TagDirective tag;
if ((currentVersion = GetCurrentToken() as VersionDirective) != null)
{
if (version != null)
{
throw new SemanticErrorException(currentVersion.Start, currentVersion.End, "Found duplicate %YAML directive.");
}
if (currentVersion.Version.Major != Constants.MajorVersion || currentVersion.Version.Minor != Constants.MinorVersion)
{
throw new SemanticErrorException(currentVersion.Start, currentVersion.End, "Found incompatible YAML document.");
}
version = currentVersion;
hasOwnDirectives = true;
}
else if ((tag = GetCurrentToken() as TagDirective) != null)
{
if (tags.Contains(tag.Handle))
{
throw new SemanticErrorException(tag.Start, tag.End, "Found duplicate %TAG directive.");
}
tags.Add(tag);
hasOwnDirectives = true;
}
else
{
break;
}
Skip();
}
AddTagDirectives(tags, Constants.DefaultTagDirectives);
if (hasOwnDirectives)
{
tagDirectives.Clear();
}
AddTagDirectives(tagDirectives, tags);
return version;
}