private Dictionary <string, int> m_UbbTagHanlderRefCount = null; // = new Dictionary<string, int>(StringComparer.InvariantCultureIgnoreCase); /// <summary> /// 添加UBB标签处理器 /// </summary> /// <param name="handler"></param> /// <returns></returns> public UbbTagHandler AddTagHandler(UbbTagHandler handler) { if (m_UbbTagHandlers == null) { m_UbbTagHandlers = new Dictionary <string, UbbTagHandler>(StringComparer.OrdinalIgnoreCase); } ; if (m_UbbTagHandlers.ContainsKey(handler.UbbTagName)) { if (m_UbbTagHanlderRefCount == null) { m_UbbTagHanlderRefCount = new Dictionary <string, int>(StringComparer.InvariantCultureIgnoreCase); } if (m_UbbTagHanlderRefCount.ContainsKey(handler.UbbTagName) == false) { m_UbbTagHanlderRefCount.Add(handler.UbbTagName, 1); } else { m_UbbTagHanlderRefCount[handler.UbbTagName] = m_UbbTagHanlderRefCount[handler.UbbTagName] + 1; } return(handler); } m_UbbTagHandlers.Add(handler.UbbTagName, handler); return(handler); }
public override string BuildHtml(UbbParser parser, string param, string content) { UbbTagHandler handler = parser.AddTagHandler(new TD()); string result = base.BuildHtml(parser, param, content); parser.RemoveTagHandler(handler); return(result); }
/// <summary> /// 移除UBB标签处理器 /// </summary> /// <param name="handler"></param> /// <returns></returns> public bool RemoveTagHandler(UbbTagHandler handler) { if (m_UbbTagHanlderRefCount != null && m_UbbTagHanlderRefCount.ContainsKey(handler.UbbTagName)) { int count = m_UbbTagHanlderRefCount[handler.UbbTagName]; if (count == 1) { m_UbbTagHanlderRefCount.Remove(handler.UbbTagName); } else { m_UbbTagHanlderRefCount[handler.UbbTagName] = count - 1; } return(false); } else if (m_UbbTagHandlers != null) { return(m_UbbTagHandlers.Remove(handler.UbbTagName)); } return(false); }
/// <summary> /// 移除UBB标签处理器 /// </summary> /// <param name="handler"></param> /// <returns></returns> public bool RemoveTagHandler(UbbTagHandler handler) { if (m_UbbTagHanlderRefCount != null && m_UbbTagHanlderRefCount.ContainsKey(handler.UbbTagName)) { int count = m_UbbTagHanlderRefCount[handler.UbbTagName]; if (count == 1) { m_UbbTagHanlderRefCount.Remove(handler.UbbTagName); } else { m_UbbTagHanlderRefCount[handler.UbbTagName] = count - 1; } return false; } else if (m_UbbTagHandlers != null) { return m_UbbTagHandlers.Remove(handler.UbbTagName); } return false; }
private Dictionary<string, int> m_UbbTagHanlderRefCount = null;// = new Dictionary<string, int>(StringComparer.InvariantCultureIgnoreCase); /// <summary> /// 添加UBB标签处理器 /// </summary> /// <param name="handler"></param> /// <returns></returns> public UbbTagHandler AddTagHandler(UbbTagHandler handler) { if (m_UbbTagHandlers == null) m_UbbTagHandlers = new Dictionary<string, UbbTagHandler>(StringComparer.OrdinalIgnoreCase); ; if (m_UbbTagHandlers.ContainsKey(handler.UbbTagName)) { if (m_UbbTagHanlderRefCount == null) m_UbbTagHanlderRefCount = new Dictionary<string, int>(StringComparer.InvariantCultureIgnoreCase); if (m_UbbTagHanlderRefCount.ContainsKey(handler.UbbTagName) == false) m_UbbTagHanlderRefCount.Add(handler.UbbTagName, 1); else m_UbbTagHanlderRefCount[handler.UbbTagName] = m_UbbTagHanlderRefCount[handler.UbbTagName] + 1; return handler; } m_UbbTagHandlers.Add(handler.UbbTagName, handler); return handler; }
/// <summary> /// 将UBB转换为HTML(处理器使用) /// </summary> /// <param name="ubb">UBB文本</param> /// <param name="cleanFooter">是否清除尾部的多余文本</param> /// <returns>HTML文本</returns> public string DoUbbToHtml(string ubb, bool cleanFooter) { StringBuilder result = new StringBuilder(ubb.Length); int currentIndex = 0; foreach (Match match in s_RegexParseUbb.Matches(ubb)) { string tagName = match.Groups[GN_TAG].Value; string tagParam = match.Groups[GN_PARAM].Value; string tagContent = match.Groups[GN_CONTENT].Value; UbbTagHandler handler = LookupUbbTagHandler(tagName); #region 头部文本 if (handler == null || (handler.CleanHeader == false && match.Index > currentIndex)) { string header = ubb.Substring(currentIndex, match.Index - currentIndex); if (m_EncodeHtml) { result.Append(FixHtml(header)); } else { result.Append(header); } } currentIndex = match.Index + match.Length; #endregion #region UBB文本 if (handler != null && handler.IsSingleUbbTag == match.Groups[GN_TAG_SINGLE].Success && handler.ParseTimes < handler.ParseTimesLimit) { handler.ParseTimes++; if (handler.SaveUbbText) { if (tagParam == null || string.IsNullOrEmpty(tagParam.Trim())) { result.AppendFormat( "<!--ubb-begin--><!--[{0}]{1}[/{0}]-->{2}<!--ubb-end-->" , tagName , tagContent , handler.BuildHtml(this, tagParam, tagContent) ); } else { result.AppendFormat( "<!--ubb-begin--><!--[{0}={1}]{2}[/{0}]-->{3}<!--ubb-end-->" , tagName , tagParam , tagContent , handler.BuildHtml(this, tagParam, tagContent) ); } } else { string body = handler.BuildHtml(this, tagParam, tagContent); result.Append(body); } } else if (match.Groups[GN_TAG_BEGIN].Success) //没有相应的标签处理器时 { result.Append(match.Groups[GN_TAG_BEGIN].Value); //原样输出起始标签 result.Append(DoUbbToHtml(tagContent, false)); //继续解析内容 result.Append(match.Groups[GN_TAG_END].Value); //原样输出结束标签 } else { if (m_EncodeHtml) { result.Append(FixHtml(match.Value)); //单标签,原样输出 } else { result.Append(match.Value); } } #endregion } if (cleanFooter == false && currentIndex < ubb.Length) { string footer = ubb.Substring(currentIndex); if (m_EncodeHtml) { result.Append(FixHtml(footer)); } else { result.Append(footer); } } return(result.ToString()); }