123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- using System;
- using System.Collections.Generic;
- #pragma warning disable
- namespace ExCSS.Model
- {
- internal class FunctionBuffer
- {
- private readonly string _function;
- private readonly List<Term> _termList;
- private Term _term;
- internal FunctionBuffer(string function)
- {
- _termList = new List<Term>();
- _function = function;
- }
- public List<Term> TermList
- {
- get { return _termList; }
- }
- public Term Term
- {
- get { return _term; }
- set { _term = value; }
- }
- public void Include()
- {
- if (_term != null)
- {
- _termList.Add(_term);
- }
- _term = null;
- }
- public Term Done()
- {
- Include();
- return BuildFunctionTerm(_function, _termList);
- }
- private Term BuildFunctionTerm(string name, List<Term> terms)
- {
- switch (name)
- {
- case "rgb":
- {
- if (terms.Count == 3)
- {
- if (CheckNumber(terms[0]) &&
- CheckNumber(terms[1]) &&
- CheckNumber(terms[2]))
- {
- return HtmlColor.FromRgb(
- ToByte(terms[0]),
- ToByte(terms[1]),
- ToByte(terms[2]));
- }
- }
- break;
- }
- case "rgba":
- {
- if (terms.Count == 4)
- {
- if (CheckNumber(terms[0]) &&
- CheckNumber(terms[1]) &&
- CheckNumber(terms[2]) &&
- CheckNumber(terms[3]))
- {
- return HtmlColor.FromRgba(
- ToByte(terms[0]),
- ToByte(terms[1]),
- ToByte(terms[2]),
- ToSingle(terms[3]));
- }
- }
- break;
- }
- case "hsl":
- {
- if (_termList.Count == 3)
- {
- if (CheckNumber(terms[0]) &&
- CheckNumber(terms[1]) &&
- CheckNumber(terms[2]))
- {
- return HtmlColor.FromHsl(
- ToSingle(terms[0]),
- ToSingle(terms[1]),
- ToSingle(terms[2]));
- }
- }
- break;
- }
- }
- return new GenericFunction(name, terms);
- }
- private static bool CheckNumber(Term cssValue)
- {
- return (cssValue is PrimitiveTerm &&
- ((PrimitiveTerm)cssValue).PrimitiveType == UnitType.Number);
- }
- private static Single ToSingle(Term cssValue)
- {
- var value = ((PrimitiveTerm)cssValue).GetFloatValue(UnitType.Number);
- return value.HasValue
- ? value.Value
- : 0f;
- }
- private static byte ToByte(Single? value)
- {
- if (value.HasValue)
- {
- return (byte)Math.Min(Math.Max(value.Value, 0), 255);
- }
- return 0;
- }
- private static byte ToByte(Term cssValue)
- {
- return ToByte(((PrimitiveTerm)cssValue).GetFloatValue(UnitType.Number));
- }
- }
- }
- #pragma warning restore
|