From 524ca9ccb53650f86854618ae35bcddba0546fab Mon Sep 17 00:00:00 2001 From: Adrian Cochrane Date: Mon, 17 Jun 2019 14:56:55 +1200 Subject: [PATCH] Compute selector specificity. --- src/Stylish/Style/Selector/Specificity.hs | 21 +++++++++++++++++++++ test/Test.hs | 1 + 2 files changed, 22 insertions(+) create mode 100644 src/Stylish/Style/Selector/Specificity.hs diff --git a/src/Stylish/Style/Selector/Specificity.hs b/src/Stylish/Style/Selector/Specificity.hs new file mode 100644 index 0000000..48da647 --- /dev/null +++ b/src/Stylish/Style/Selector/Specificity.hs @@ -0,0 +1,21 @@ +module Stylish.Style.Selector.Specificity( + computeSpecificity + ) where + +import Stylish.Parse.Selector + +computeSpecificity :: Selector -> (Int, Int, Int) +computeSpecificity (Element selector) = computeSpecificity' selector +computeSpecificity (Child upSel sel) = computeSpecificity upSel `add` computeSpecificity' sel +computeSpecificity (Descendant upSel sel) = computeSpecificity upSel `add` computeSpecificity' sel +computeSpecificity (Adjacent upSel sel) = computeSpecificity upSel `add` computeSpecificity' sel +computeSpecificity (Sibling upSel sel) = computeSpecificity upSel `add` computeSpecificity' sel + +computeSpecificity' (Tag _:sel) = computeSpecificity' sel `add` (0, 0, 1) +computeSpecificity' (Class _:sel) = computeSpecificity' sel `add` (0, 1, 0) +computeSpecificity' (Property _ _:sel) = computeSpecificity' sel `add` (0, 1, 0) +computeSpecificity' (Id _:sel) = computeSpecificity' sel `add` (1, 0, 0) +computeSpecificity' [] = (0, 0, 0) + +add :: (Int, Int, Int) -> (Int, Int, Int) -> (Int, Int, Int) +add (a, b, c) (x, y, z) = (a + x, b + y, c + z) diff --git a/test/Test.hs b/test/Test.hs index 3a5b2cd..2fbf122 100644 --- a/test/Test.hs +++ b/test/Test.hs @@ -9,6 +9,7 @@ import Stylish.Parse import Stylish.Style.Selector.Index import Stylish.Element import Stylish.Style.Selector.Interpret +import Stylish.Style.Selector.Specificity main = hspec spec -- 2.30.2