private Block NumberRest(char current)
        {
            while (true)
            {
                if (current.IsDigit())
                {
                    _buffer.Append(current);
                }
                else if (current.IsNameStart())
                {
                    var number = FlushBuffer();
                    _buffer.Append(current);
                    return(Dimension(_stylesheetReader.Next, number));
                }
                else if (IsValidEscape(current))
                {
                    current = _stylesheetReader.Next;
                    var number = FlushBuffer();
                    _buffer.Append(ConsumeEscape(current));
                    return(Dimension(_stylesheetReader.Next, number));
                }
                else
                {
                    break;
                }

                current = _stylesheetReader.Next;
            }

            switch (current)
            {
            case Specification.Period:
                current = _stylesheetReader.Next;

                if (current.IsDigit())
                {
                    _buffer.Append(Specification.Period).Append(current);
                    return(NumberFraction(_stylesheetReader.Next));
                }

                _stylesheetReader.Back();
                return(Block.Number(FlushBuffer()));

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

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

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

            default:
                _stylesheetReader.Back();
                return(Block.Number(FlushBuffer()));
            }
        }
        private Block Dimension(char current, string number)
        {
            while (true)
            {
                if (current.IsName())
                {
                    _buffer.Append(current);
                }
                else if (IsValidEscape(current))
                {
                    current = _stylesheetReader.Next;
                    _buffer.Append(ConsumeEscape(current));
                }
                else
                {
                    _stylesheetReader.Back();
                    return(UnitBlock.Dimension(number, FlushBuffer()));
                }

                current = _stylesheetReader.Next;
            }
        }