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; } }