Esempio n. 1
0
        private HtmlReaderStringValue ReadStringValue()
        {
            bool quote = false;
            //_propertyQuote = "";
            HtmlReaderStringValue value = new HtmlReaderStringValue();
            //value.Quote = "";
            char quoteChar = (char)PeekChar();

            if (quoteChar == '"' || quoteChar == '\'')
            {
                quote = true;
                //_propertyQuote = quoteChar.ToString();
                value.Quote = quoteChar;
                GetChar();
            }

            _stringBuilder.Remove(0, _stringBuilder.Length);
            while (true)
            {
                GetChar();
                if (_charInt == -1 ||
                    (quote && (_char == quoteChar || ((_char == '"' || _char == '\'') && PeekChar() == '>'))) ||
                    (!quote && (_char == ' ' || _char == '\t' || _char == '\r' || _char == '\n')) ||
                    _char == '>' || (_char == '/' && PeekChar() == '>')
                    )
                {
                    break;
                }
                _stringBuilder.Append(_char);
            }
            //_propertyValue = _stringBuilder.ToString();
            //_propertyValue = HtmlCharCodes.TranslateCode(_propertyValue);
            value.Value = HtmlCharCodes.TranslateCode(_stringBuilder.ToString());
            return(value);
        }
Esempio n. 2
0
        public static string TranslateCode(string value)
        {
            if (value == null)
            {
                return(null);
            }
            // >  &aaa;
            int i = 0;

            while (true)
            {
                Match match = _translate1.Match(value, i);
                if (!match.Success)
                {
                    break;
                }
                string       name     = match.Groups[1].Value;
                HtmlCharCode htmlChar = HtmlCharCodes.GetHtmlChar(name);
                if (htmlChar != null)
                {
                    char c = htmlChar.Char;
                    value = value.Substring(0, match.Index) + c.ToString() + value.Substring(match.Index + match.Length, value.Length - match.Index - match.Length);
                }
                i = match.Index + 1;
            }

            // > &#nnn;
            i = 0;
            while (true)
            {
                Match match = _translate2.Match(value, i);
                if (!match.Success)
                {
                    break;
                }
                string codeString = match.Groups[1].Value;
                int    code       = int.Parse(codeString);
                char   c          = (char)code;
                value = value.Substring(0, match.Index) + c.ToString() + value.Substring(match.Index + match.Length, value.Length - match.Index - match.Length);
                i     = match.Index + 1;
            }

            // · &#xnn;
            i = 0;
            while (true)
            {
                Match match = _translate3.Match(value, i);
                if (!match.Success)
                {
                    break;
                }
                string codeString = match.Groups[1].Value;
                int    code       = int.Parse(codeString, System.Globalization.NumberStyles.AllowHexSpecifier);
                char   c          = (char)code;
                value = value.Substring(0, match.Index) + c.ToString() + value.Substring(match.Index + match.Length, value.Length - match.Index - match.Length);
                i     = match.Index + 1;
            }

            return(value);
        }
Esempio n. 3
0
        //private void ReadText()
        private HtmlReaderText ReadText()
        {
            int line   = _line;
            int column = _column;

            bool isTextSeparator = true;
            bool comment         = false;

            _stringBuilder.Remove(0, _stringBuilder.Length);
            while (true)
            {
                int charInt = PeekChar();
                if (!comment && (char)charInt == '<' && (char.IsLetter((char)PeekChar(1)) || (PeekChar(1) == '/' && char.IsLetter((char)PeekChar(2)))))
                {
                    break;
                }
                if (!comment && (char)charInt == '<' && PeekChar(1) == '!' && PeekChar(2) == '-' && PeekChar(3) == '-')
                {
                    if (!_readCommentInText)
                    {
                        break;
                    }
                    comment = true;
                    GetChar(); _stringBuilder.Append(_char);
                    GetChar(); _stringBuilder.Append(_char);
                    GetChar(); _stringBuilder.Append(_char);
                    GetChar(); _stringBuilder.Append(_char);
                    charInt         = PeekChar();
                    isTextSeparator = false;
                }

                if (charInt == -1)
                {
                    break;
                }
                GetChar();
                // modif le 24/07/2016 pour éliminer les 0x00
                if (_char != '\x00')
                {
                    _stringBuilder.Append(_char);
                }
                if (_char != ' ' && _char != '\t' && _char != '\r' && _char != '\n')
                {
                    isTextSeparator = false;
                }
                int l = _stringBuilder.Length;
                if (comment && l >= 3 && _stringBuilder[l - 3] == '-' && _stringBuilder[l - 2] == '-' && _stringBuilder[l - 1] == '>')
                {
                    comment = false;
                }
            }
            //_text = _stringBuilder.ToString();
            //_text = HtmlCharCodes.TranslateCode(_text);
            //_isTextSeparator = isTextSeparator;
            return(new HtmlReaderText {
                Line = line, Column = column, Text = HtmlCharCodes.TranslateCode(_stringBuilder.ToString()), IsTextSeparator = isTextSeparator
            });
        }
Esempio n. 4
0
        private void ReadText()
        {
            int l;

            bool isTextSeparator = true;
            bool comment         = false;

            _stringBuilder.Remove(0, _stringBuilder.Length);
            while (true)
            {
                int charInt = PeekChar();
                if (!comment && (char)charInt == '<' && (char.IsLetter((char)PeekChar(1)) || (PeekChar(1) == '/' && char.IsLetter((char)PeekChar(2)))))
                {
                    break;
                }
                if (!comment && (char)charInt == '<' && PeekChar(1) == '!' && PeekChar(2) == '-' && PeekChar(3) == '-')
                {
                    if (!_readCommentInText)
                    {
                        break;
                    }
                    comment = true;
                    GetChar(); _stringBuilder.Append(_char);
                    GetChar(); _stringBuilder.Append(_char);
                    GetChar(); _stringBuilder.Append(_char);
                    GetChar(); _stringBuilder.Append(_char);
                    charInt         = PeekChar();
                    isTextSeparator = false;
                }

                if (charInt == -1)
                {
                    break;
                }
                GetChar();
                _stringBuilder.Append(_char);
                if (_char != ' ' && _char != '\t' && _char != '\r' && _char != '\n')
                {
                    isTextSeparator = false;
                }
                l = _stringBuilder.Length;
                if (comment && l >= 3 && _stringBuilder[l - 3] == '-' && _stringBuilder[l - 2] == '-' && _stringBuilder[l - 1] == '>')
                {
                    comment = false;
                }
            }
            _text            = _stringBuilder.ToString();
            _text            = HtmlCharCodes.TranslateCode(_text);
            _isTextSeparator = isTextSeparator;
        }
Esempio n. 5
0
        private HtmlNodeText ReadText()
        {
            bool isTextSeparator = true;

            _stringBuilder.Remove(0, _stringBuilder.Length);
            //_stringBuilder.Append((char)_charStreamReader.ReadChar());
            int line   = 0;
            int column = 0;

            while (true)
            {
                if (IsEndText())
                {
                    break;
                }
                char car = (char)_charStreamReader.ReadChar();
                if (line == 0)
                {
                    line   = _charStreamReader.Line;
                    column = _charStreamReader.Column;
                }
                if (car != ' ' && car != '\t' && car != '\r' && car != '\n')
                {
                    isTextSeparator = false;
                }
                // modif le 24/07/2016 pour éliminer les 0x00
                if (car != '\x00')
                {
                    _stringBuilder.Append(car);
                }
            }
            //
            string text = _stringBuilder.ToString();

            text = HtmlCharCodes.TranslateCode(text);
            if (_textReplaceControl)
            {
                text = text.zReplaceControl();
            }
            return(new HtmlNodeText
            {
                Index = _htmlNodeIndex++,
                Line = _disableLineColumn ? 0 : line,
                Column = _disableLineColumn ? 0 : column,
                Text = text,
                IsTextSeparator = isTextSeparator
            });
        }
Esempio n. 6
0
        private HtmlNodeScript ReadScript()
        {
            HtmlNodeScript script = new HtmlNodeScript
            {
                Index  = _htmlNodeIndex++,
                Line   = _disableLineColumn ? 0 : _charStreamReader.Line,
                Column = _disableLineColumn ? 0 : _charStreamReader.Column
            };

            _stringBuilder.Remove(0, _stringBuilder.Length);
            while (true)
            {
                int code = _charStreamReader.PeekChar();
                if (code == -1)
                {
                    break;
                }
                char car = (char)code;
                if (car == '<' && _charStreamReader.PeekChar(1) == '/' && char.ToLower((char)_charStreamReader.PeekChar(2)) == 's' &&
                    char.ToLower((char)_charStreamReader.PeekChar(3)) == 'c' && char.ToLower((char)_charStreamReader.PeekChar(4)) == 'r' &&
                    char.ToLower((char)_charStreamReader.PeekChar(5)) == 'i' && char.ToLower((char)_charStreamReader.PeekChar(6)) == 'p' &&
                    char.ToLower((char)_charStreamReader.PeekChar(7)) == 't' && char.ToLower((char)_charStreamReader.PeekChar(8)) == '>')
                {
                    break;
                }
                _stringBuilder.Append(car);
                _charStreamReader.ReadChar();
            }
            //_text = _stringBuilder.ToString();
            //_text = HtmlCharCodes.TranslateCode(_text);
            //script.Script = HtmlCharCodes.TranslateCode(_stringBuilder.ToString()).zReplaceControl();
            string text = _stringBuilder.ToString();

            text = HtmlCharCodes.TranslateCode(text);
            if (_textReplaceControl)
            {
                text = text.zReplaceControl();
            }
            script.Script = text;
            return(script);
        }
Esempio n. 7
0
 private void ReadScript()
 {
     _stringBuilder.Remove(0, _stringBuilder.Length);
     while (true)
     {
         int iChar = PeekChar();
         if (iChar == -1)
         {
             break;
         }
         if ((char)iChar == '<' && PeekChar(1) == '/' && char.ToLower((char)PeekChar(2)) == 's' && char.ToLower((char)PeekChar(3)) == 'c' &&
             char.ToLower((char)PeekChar(4)) == 'r' && char.ToLower((char)PeekChar(5)) == 'i' && char.ToLower((char)PeekChar(6)) == 'p' &&
             char.ToLower((char)PeekChar(7)) == 't' && char.ToLower((char)PeekChar(8)) == '>')
         {
             break;
         }
         GetChar();
         _stringBuilder.Append(_char);
     }
     _text = _stringBuilder.ToString();
     _text = HtmlCharCodes.TranslateCode(_text);
 }
Esempio n. 8
0
        //private void ReadScript()
        private HtmlReaderScript ReadScript()
        {
            int line   = _line;
            int column = _column;

            _stringBuilder.Remove(0, _stringBuilder.Length);
            while (true)
            {
                int intChar = PeekChar();
                if (intChar == -1)
                {
                    break;
                }
                if ((char)intChar == '<' && PeekChar(1) == '/' && char.ToLower((char)PeekChar(2)) == 's' && char.ToLower((char)PeekChar(3)) == 'c' &&
                    char.ToLower((char)PeekChar(4)) == 'r' && char.ToLower((char)PeekChar(5)) == 'i' && char.ToLower((char)PeekChar(6)) == 'p' &&
                    char.ToLower((char)PeekChar(7)) == 't' && char.ToLower((char)PeekChar(8)) == '>')
                {
                    break;
                }
                GetChar();
                _stringBuilder.Append(_char);
            }
            //_text = _stringBuilder.ToString();
            //_text = HtmlCharCodes.TranslateCode(_text);
            if (_stringBuilder.Length > 0)
            {
                return new HtmlReaderScript {
                           Line = line, Column = column, Script = HtmlCharCodes.TranslateCode(_stringBuilder.ToString())
                }
            }
            ;
            else
            {
                return(null);
            }
        }
Esempio n. 9
0
        private void ReadStringValue2()
        {
            bool quote = false;

            _propertyQuote = "";
            char quoteChar = (char)PeekChar();

            if (quoteChar == '"' || quoteChar == '\'')
            {
                quote          = true;
                _propertyQuote = quoteChar.ToString();
                GetChar();
            }

            _stringBuilder.Remove(0, _stringBuilder.Length);

            bool quote2 = quote;
            int  charInt;
            int  i = 0, endQuotePos = -1;

            while ((charInt = PeekChar(i)) != -1)
            {
                char c = (char)charInt;
                if (quote2)
                {
                    if (c == quoteChar)
                    {
                        endQuotePos = i;
                        quote2      = false;
                    }
                }
                else
                {
                    if (c == '=')
                    {
                        for (; i >= 0; i--)
                        {
                            c = (char)PeekChar(i);
                            if (c != ' ' && c != '\t' && c != '\r' && c != '\n')
                            {
                                break;
                            }
                        }
                        for (; i >= 0 && (endQuotePos == -1 || i > endQuotePos); i--)
                        {
                            char cChar = (char)PeekChar(i);
                            if (cChar == ' ' || cChar == '\t' || cChar == '\r' || cChar == '\n')
                            {
                                break;
                            }
                        }
                        break;
                    }
                    else if (c == '>')
                    {
                        if (i > 0 && (char)PeekChar(i - 1) == '/')
                        {
                            i--;
                        }
                        i--;
                        break;
                    }
                    else if (c == '<')
                    {
                        i--;
                        break;
                    }
                }
                i++;
            }

            for (; i >= 0; i--)
            {
                char c = (char)PeekChar(i);
                if (c != ' ' && c != '\t' && c != '\r' && c != '\n')
                {
                    break;
                }
            }

            if (quote && i >= 0 && (char)PeekChar(i) == quoteChar)
            {
                i--;
            }

            for (; i >= 0; i--)
            {
                GetChar();
                _stringBuilder.Append(_char);
            }

            _propertyValue = _stringBuilder.ToString();
            _propertyValue = HtmlCharCodes.TranslateCode(_propertyValue);
        }
Esempio n. 10
0
        private HtmlReaderStringValue ReadStringValue()
        {
            HtmlReaderStringValue value = new HtmlReaderStringValue();

            bool quote     = false;
            char quoteChar = (char)_charStreamReader.PeekChar();

            if (quoteChar == '"' || quoteChar == '\'')
            {
                quote       = true;
                value.Quote = quoteChar;
                _charStreamReader.ReadChar();
            }

            char car = '\0';

            Func <bool> isString_v1 = () =>
            {
                if (quote)
                {
                    if (car == quoteChar)
                    {
                        _charStreamReader.ReadChar();
                        return(false);
                    }
                    if ((car == '"' || car == '\'') && _charStreamReader.PeekChar(1) == '>')
                    {
                        _charStreamReader.ReadChar();
                        return(false);
                    }
                }
                else
                {
                    if (car == ' ' || car == '\t' || car == '\r' || car == '\n')
                    {
                        return(false);
                    }
                    if (car == '>' || (car == '/' && _charStreamReader.PeekChar(1) == '>'))
                    {
                        return(false);
                    }
                }
                // bad test see _useReadAttributeValue_v2
                if (car == '>' || (car == '/' && _charStreamReader.PeekChar(1) == '>'))
                {
                    return(false);
                }
                return(true);
            };

            Func <bool> isString_v2 = () =>
            {
                if (quote)
                {
                    if (car == quoteChar)
                    {
                        _charStreamReader.ReadChar();
                        return(false);
                    }
                    if ((car == '"' || car == '\'') && _charStreamReader.PeekChar(1) == '>')
                    {
                        _charStreamReader.ReadChar();
                        return(false);
                    }
                }
                else
                {
                    if (car == ' ' || car == '\t' || car == '\r' || car == '\n')
                    {
                        return(false);
                    }
                    if (car == '>' || (car == '/' && _charStreamReader.PeekChar(1) == '>'))
                    {
                        return(false);
                    }
                }
                return(true);
            };

            Func <bool> isString;

            if (!_useReadAttributeValue_v2)
            {
                isString = isString_v1;
            }
            else
            {
                isString = isString_v2;
            }

            _stringBuilder.Remove(0, _stringBuilder.Length);
            while (true)
            {
                int code = _charStreamReader.PeekChar();
                if (code == -1)
                {
                    break;
                }
                car = (char)code;
                //if ((quote && (car == quoteChar || ((car == '"' || car == '\'') && _charStreamReader.PeekChar(1) == '>')))
                //    || (!quote && (car == ' ' || car == '\t' || car == '\r' || car == '\n'))
                //    || car == '>' || (car == '/' && _charStreamReader.PeekChar(1) == '>'))
                //    break;
                //if (quote)
                //{
                //    if (car == quoteChar)
                //    {
                //        _charStreamReader.ReadChar();
                //        break;
                //    }
                //    if ((car == '"' || car == '\'') && _charStreamReader.PeekChar(1) == '>')
                //    {
                //        _charStreamReader.ReadChar();
                //        break;
                //    }
                //}
                //else
                //{
                //    if (car == ' ' || car == '\t' || car == '\r' || car == '\n')
                //        break;
                //    if (car == '>' || (car == '/' && _charStreamReader.PeekChar(1) == '>'))
                //        break;
                //}
                if (!isString())
                {
                    break;
                }
                _stringBuilder.Append(car);
                _charStreamReader.ReadChar();
            }
            value.Value = HtmlCharCodes.TranslateCode(_stringBuilder.ToString());
            return(value);
        }