private object GetTagAt(int tokenIndex, string tagName, bool createIfNotPresent) { if (tokenIndex < 0 || tokenIndex >= m_tokens.Length) { throw new ArgumentOutOfRangeException("tokenIndex"); } if (!TaggerFactory.IsTagRegistered(this.Locale, tagName)) { throw new ArgumentException("No Tagger is associated with this tag name!", "tagName"); } object[] tagValues; if (!m_tags.TryGetValue(tagName, out tagValues)) { if (createIfNotPresent) { Tag(tagName); } else { throw new Exception("Tag does not exist!"); } } Debug.Assert(tagValues.Length == m_tokens.Length, "The length of provided tags does not match the length of tokens!"); return(tagValues[tokenIndex]); }
public void SetTagAt(int tokenIndex, string tagName, object tagValue) { if (!TaggerFactory.IsTagRegistered(this.Locale, tagName)) { throw new InvalidOperationException(string.Format("{0} is not registered", tagName)); } if (tokenIndex >= Count) { throw new ArgumentOutOfRangeException("tokenIndex"); } tagName = tagName.ToLower(); if (!m_tags.ContainsKey(tagName)) { m_tags.Add(tagName, new object[Count]); } m_tags[tagName][tokenIndex] = tagValue; }
public bool Tag(string tagName) { if (!TaggerFactory.IsTagRegistered(this.Locale, tagName)) { throw new ArgumentException("No Tagger is associated with this tag name!", "tagName"); return(false); } tagName = tagName.ToLower(); object[] tagValues; if (!m_tags.TryGetValue(tagName, out tagValues)) { var tagsValues = TaggerFactory.Tag(tagName, this); if (tagsValues == null) { m_tags.Add(tagName, new object[m_tokens.Length]); } else { foreach (var tagAndValues in tagsValues) { if (!m_tags.ContainsKey(tagAndValues.Key.ToLower())) { m_tags.Add(tagAndValues.Key.ToLower(), tagAndValues.Value); } else { m_tags[tagAndValues.Key.ToLower()] = tagAndValues.Value; } } } } return(true); }