IronRuby.StandardLibrary.Yaml.Emitter.PrepareTag C# (CSharp) Method

PrepareTag() private method

private PrepareTag ( string tag ) : string
tag string
return string
        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 + ">";
            }
        }