/// <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())); } }
/// <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; } }
/// <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())); } }