public void RemoveLinkCache(int key) { if (_linkMap.ContainsKey(key)) { LinkCache linkCache = _linkMap[key] as LinkCache; linkCache.Dispose(); _linkMap.Remove(key); } }
public LinkCache AddLinkCache(int source) { if (!_linkMap.ContainsKey(source)) { _linkMap[source] = new LinkCache(); return((LinkCache)_linkMap[source]); } return(_linkMap[source]); }
private void ParseLinkTags(ref string strText) { if (string.IsNullOrEmpty(strText)) { _ResetLinkTags(0); return; } mUnderlineTagInfos.Clear(); LinkCache linkCache = null; if (m_SupportCache) { linkCache = CacheManager.Instance.GetLinkCache(strText.GetHashCode()); if (linkCache != null) { for (int i = 0; i < linkCache.GetParams().Count; ++i) { LinkCache.CacheLinkTag tag = linkCache.GetParams()[i]; LinkTag selftag = _GetLinkTag(i); selftag.SetStartIndex(tag.StartIndex); selftag.SetEndIndex(tag.EndIndex); mUnderlineTagInfos.Add(selftag); if (tag.paramDic != null) { var iter = tag.paramDic.GetEnumerator(); while (iter.MoveNext()) { selftag.CheckSetValue(iter.Current.Key, iter.Current.Value); } iter.Dispose(); } } strText = linkCache.GetResultString(); _ResetSpriteTags(linkCache.GetParams().Count); return; } } int linkCount = 0; mTextBuilder.Length = 0; XMLIterator.Begin(strText, false); string textBlock = string.Empty; mTagPos.Clear(); while (XMLIterator.NextTag()) { mParses.Clear(); if (XMLIterator.tagName == mLinkTag) { textBlock = XMLIterator.GetText(false); if (!mTagPos.ContainsKey(mLinkTag)) { XMLIterator.tagOffset += XMLIterator.tagOffset; mTagPos[mLinkTag] = (XMLIterator.parsePos - XMLIterator.tagOffset) * 4; LinkTag tag = _GetLinkTag(lineCount); mUnderlineTagInfos.Add(tag); tag.SetStartIndex(mTagPos[mLinkTag]); XMLIterator.GetAttributes(mParses); foreach (var val in mParses) { tag.CheckSetValue(val.Key, val.Value); } } else { LinkTag tag = _GetLinkTag(lineCount); XMLIterator.tagOffset += XMLIterator.tagLength; tag.SetEndIndex((XMLIterator.parsePos - XMLIterator.tagOffset) * 4); mTagPos.Remove(mLinkTag); if (m_SupportCache) { linkCache = CacheManager.Instance.AddLinkCache(strText.GetHashCode()); LinkCache.CacheLinkTag cacheTag = new LinkCache.CacheLinkTag(); cacheTag.StartIndex = tag.GetStartIndex(); cacheTag.EndIndex = tag.GetEndIndex(); if (cacheTag.paramDic == null) { cacheTag.paramDic = new Dictionary <string, string>(); } var iter = tag.GetParams().GetEnumerator(); while (iter.MoveNext()) { cacheTag.paramDic.Add(iter.Current.Key, iter.Current.Value); } linkCache.AddParams(cacheTag); } ++lineCount; } } else { textBlock = XMLIterator.GetText(false); mTextBuilder.Append(textBlock); mTextBuilder.Append(XMLIterator.GetTagSource()); } } textBlock = XMLIterator.GetText(false); mTextBuilder.Append(textBlock); string result = mTextBuilder.ToString(); if (m_SupportCache) { linkCache = CacheManager.Instance.GetLinkCache(strText.GetHashCode()); if (linkCache != null) { linkCache.SetResultString(result); } } strText = result; _ResetLinkTags(linkCount); }