private string PrepareTag(string tag) {
string handle = null;
string suffix = tag;
foreach (string prefix in _tagPrefixes.Keys) {
if (prefix.Length < tag.Length && tag.StartsWith(prefix, StringComparison.Ordinal)) {
handle = _tagPrefixes[prefix];
suffix = tag.Substring(prefix.Length);
}
}
// use short form if applicable ("tag:ruby.yaml.org,2002:foobar" -> "ruby/foobar")
if (handle == null) {
int colonIdx;
if (tag.StartsWith("tag:", StringComparison.Ordinal) && (colonIdx = tag.IndexOf(':', 4)) != -1) {
string first = tag.Substring(4, tag.IndexOf('.', 4) - 4);
string rest = tag.Substring(colonIdx + 1);
handle = "!" + first + "/";
suffix = rest;
}
}
// e.g. "!ruby/exception:IOError"
if (tag.Length == 0 || tag[0] == '!' && _isVersion10) {
return tag;
}
if (handle != null) {
return handle + suffix;
} else {
return "!<" + suffix + ">";
}
}