/// <summary> /// 4.4.13. Number-rest state /// </summary> CssToken NumberRest() { var current = GetNext(); while (true) { if (current.IsDigit()) { _stringBuffer.Append(current); } else if (current.IsNameStart()) { var number = FlushBuffer(); _stringBuffer.Append(current); return(Dimension(number)); } else if (IsValidEscape(current)) { current = GetNext(); var number = FlushBuffer(); _stringBuffer.Append(ConsumeEscape(current)); return(Dimension(number)); } else { break; } current = GetNext(); } switch (current) { case Symbols.Dot: current = GetNext(); if (current.IsDigit()) { _stringBuffer.Append(Symbols.Dot).Append(current); return(NumberFraction()); } Back(); return(new CssNumberToken(FlushBuffer())); case '%': return(CssUnitToken.Percentage(FlushBuffer())); case 'e': case 'E': return(NumberExponential()); case Symbols.Minus: return(NumberDash()); default: Back(); return(new CssNumberToken(FlushBuffer())); } }
/// <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.15. Dimension state /// </summary> CssToken Dimension(String number) { while (true) { var current = GetNext(); if (current.IsLetter()) { _stringBuffer.Append(current); } else if (IsValidEscape(current)) { current = GetNext(); _stringBuffer.Append(ConsumeEscape(current)); } else { Back(); return(CssUnitToken.Dimension(number, FlushBuffer())); } } }
/// <summary> /// 4.4.15. Dimension state /// </summary> CssToken Dimension(Char current, String number) { while (true) { if (current.IsName()) { _stringBuffer.Append(current); } else if (IsValidEscape(current)) { current = _src.Next; _stringBuffer.Append(ConsumeEscape(current)); } else { _src.Back(); return(CssUnitToken.Dimension(number, FlushBuffer())); } current = _src.Next; } }