Beispiel #1
0
        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);
        }
Beispiel #2
0
            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);
            }
Beispiel #3
0
        /// <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);
        }
Beispiel #4
0
		/// <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;
        }
Beispiel #5
0
        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;
		}
Beispiel #6
0
        /// <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());
        }