protected override void OnText(Text text)
 {
     if (preserveLinebreaksDepth == 0)
     {
         string cleanText = newLine.Replace(text.ToString(), " ");
         if (cleanText.Length != text.Length)
             text = new Text(cleanText, 0, cleanText.Length);
     }
     base.OnText(text);
 }
        /// <summary>
        /// Truncate text.  maxCost is the cost available for the
        /// string you need to return.
        ///
        /// The default implementation uses CharCount() to calculate
        /// where to split, then attempts to split at a space if
        /// possible.
        /// </summary>
        public virtual string TruncateText(Text el, int maxCost)
        {
            if (maxCost == 0)
                return string.Empty;

            string str = el.ToString();

            // normalizes maxCost to a max char length
            int cost = 0;
            int max = -1;
            for (int i = 0; i < str.Length; i++)
            {
                if (cost >= maxCost)
                {
                    max = i;
                    break;
                }
                cost += CharCost(str[i]);
            }
            if (max == -1)
                return str;  // never hit the max

            // avoid splitting up HTML entities

            string trimmedAtWords = StringHelper.RestrictLengthAtWords(str, max);
            if (ElementCost(new Text(trimmedAtWords, 0, trimmedAtWords.Length)) <= maxCost)
            {
                // It is possible for RestrictLengthAtWords to return
                // strings that are longer than desired (if there are
                // no spaces).  Only if that is not the case, use the
                // result.
                return trimmedAtWords;
            }

            // find last '&' before max
            string result = null;
            int lastAmp = str.LastIndexOf('&', max - 1, max);
            if (lastAmp >= 0)
            {
                Regex regex = new Regex(@"&[^\s&;]{1,20};");
                Match match = regex.Match(str, lastAmp);
                if (match.Success && match.Index + match.Length > max)
                    result = str.Substring(0, match.Index);
            }
            if (result == null)
                result = str.Substring(0, max);

            return result;
        }
 protected override void OnText(Text text)
 {
     if (_nextTextIsTitleText)
     {
         _title = HttpUtility.HtmlDecode(text.ToString());
         _nextTextIsTitleText = false;
     }
     if (_collectingForTag != null)
         _collectingForTag.Name = _collectingForTag.Name + text.RawText;
     base.OnText(text);
 }
 protected override void OnText(Text text)
 {
     Emit(text.ToString());
 }
        protected override void OnText(Text text)
        {
            if (text == null || _scriptDepth > 0)
                return;

            Emit(text.ToString());
            base.OnText(text);
        }