Exemplo n.º 1
0
        /// <summary>
        /// 4.4.13. Number-rest state
        /// </summary>
        CssToken NumberRest(Char current)
        {
            while (true)
            {
                if (current.IsDigit())
                {
                    stringBuffer.Append(current);
                }
                else if (current.IsNameStart())
                {
                    var number = FlushBuffer();
                    stringBuffer.Append(current);
                    return(Dimension(src.Next, number));
                }
                else if (IsValidEscape(current))
                {
                    current = src.Next;
                    var number = FlushBuffer();
                    stringBuffer.Append(ConsumeEscape(current));
                    return(Dimension(src.Next, number));
                }
                else
                {
                    break;
                }

                current = src.Next;
            }

            switch (current)
            {
            case Specification.DOT:
                current = src.Next;

                if (current.IsDigit())
                {
                    stringBuffer.Append(Specification.DOT).Append(current);
                    return(NumberFraction(src.Next));
                }

                src.Back();
                return(CssToken.Number(FlushBuffer()));

            case '%':
                return(CssUnitToken.Percentage(FlushBuffer()));

            case 'e':
            case 'E':
                return(NumberExponential(current));

            case Specification.MINUS:
                return(NumberDash(current));

            default:
                src.Back();
                return(CssToken.Number(FlushBuffer()));
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// 4.4.16. SciNotation state
        /// </summary>
        CssToken SciNotation(Char current)
        {
            while (true)
            {
                if (current.IsDigit())
                {
                    stringBuffer.Append(current);
                }
                else
                {
                    src.Back();
                    return(CssToken.Number(FlushBuffer()));
                }

                current = src.Next;
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Substate of several Number states.
        /// </summary>
        CssToken NumberDash(Char current)
        {
            current = src.Next;

            if (current.IsNameStart())
            {
                var number = FlushBuffer();
                stringBuffer.Append(Specification.MINUS).Append(current);
                return(Dimension(src.Next, number));
            }
            else if (IsValidEscape(current))
            {
                current = src.Next;
                var number = FlushBuffer();
                stringBuffer.Append(Specification.MINUS).Append(ConsumeEscape(current));
                return(Dimension(src.Next, number));
            }
            else
            {
                src.Back(2);
                return(CssToken.Number(FlushBuffer()));
            }
        }