packages feed

css-class-bindings 0.0.3 → 0.0.4

raw patch · 5 files changed

+84/−5 lines, 5 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

Files

changelog.md view
@@ -1,5 +1,8 @@ # css-class-bindings changelog +## Version 0.0.4 2026-04-07+  * generate identifiers used only in preducate args or selector sequences+ ## Version 0.0.3 2026-03-30   * generate unit types for CSS identifiers   * includeCss marks files with addDependentFile
css-class-bindings.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.0 name:          css-class-bindings-version:       0.0.3+version:       0.0.4  synopsis:      generates Haskell bindings for CSS classes description:
src/CssClassBindings/Qq.hs view
@@ -9,13 +9,33 @@  import CssClassBindings.Escape ( escapeValIden, escapeTypeIden ) import Data.CSS.Syntax.Tokens-    ( Token(Hash, Delim, Ident, Whitespace, LeftCurlyBracket), tokenize, HashFlag(HId) )+    ( Token(Comma, Ident, LeftCurlyBracket, Colon, Function,+            RightParen, Delim, Hash, Whitespace),+      HashFlag(HId),+      tokenize )+ import Data.Set ( insert, Set, toList ) import Data.String ( IsString ) import Data.Text ( Text, pack, unpack ) import Language.Haskell.TH.Quote ( QuasiQuoter(..) ) import Language.Haskell.TH.Syntax-+    ( mkName,+      Exp(LitE, AppE, ConE),+      Clause(Clause),+      Pat(WildP),+      Con(NormalC),+      Type(VarT, ForallT, AppT, ConT),+      Dec(PragmaD, DataD, InstanceD, SigD, FunD),+      Name,+      DerivClause(DerivClause),+      TyVarBndr(PlainTV),+      Body(NormalB),+      Lit(StringL),+      Pragma(InlineP),+      Inline(Inline),+      RuleMatch(FunLike),+      Phases(AllPhases),+      Specificity(InferredSpec) )  import Prelude @@ -75,10 +95,22 @@ -} collectReferedClasses :: Set CssName -> [Token] -> Set CssName collectReferedClasses s = \case+  -- class   Delim '.' : Ident cn : t ->     collectReferedClasses (insert (CssClassName cn) s) t-  Hash HId i : Whitespace : LeftCurlyBracket : t -> iden i t+  -- hash   Hash HId i : LeftCurlyBracket : t -> iden i t+  Hash HId i : Whitespace : LeftCurlyBracket : t -> iden i t++  Colon : Function _ : Hash HId i : RightParen : t -> iden i t+  Colon : Function _ : Hash HId i : Whitespace : RightParen : t -> iden i t++  Hash HId i : Delim '.' : t -> iden i t+  Hash HId i : Whitespace : Delim '.' : t -> iden i t++  Hash HId i : Comma : t -> iden i t+  Hash HId i : Whitespace : Comma : t -> iden i t+   _ : t -> collectReferedClasses s t   [] -> s   where
test/CssClassBindings/Test/QqAsserts.hs view
@@ -2,7 +2,7 @@ module CssClassBindings.Test.QqAsserts where  import CssClassBindings (class_, CssIdentifier(id_))-import CssClassBindings.Test.QqDefs (fooBar, FooBar(..), cssAsLiteralText)+import CssClassBindings.Test.QqDefs import Prelude import Test.Tasty.HUnit ( (@=?) ) @@ -12,6 +12,18 @@ unit_camelCaseLiteral_Id :: IO () unit_camelCaseLiteral_Id = ("foo-bar" :: String) @=? id_ FooBar +unit_fun_arg_id :: IO ()+unit_fun_arg_id = ("funargid" :: String) @=? id_ Funargid++unit_fun_arg_id_class :: IO ()+unit_fun_arg_id_class = ("funargidclass" :: String) @=? id_ Funargidclass++unit_id_seq :: IO ()+unit_id_seq = ("idseq" :: String) @=? id_ Idseq++unit_id_seq_space :: IO ()+unit_id_seq_space = ("idseqspace" :: String) @=? id_ Idseqspace+ unit_exportCssInputAsIs :: IO () unit_exportCssInputAsIs = css @=? cssAsLiteralText   where@@ -19,6 +31,22 @@     css = """       .foo-bar {         color: #1212ff;+      }++      *:not(#funargid) {+        color: #aaa;+      }++      *:not(#funargidclass.yyy) {+        color: #aaa;+      }++      #idseq, .xxx {+        color: #bbb;+      }++      #idseqspace , .xxx {+        color: #ccc;       }        #foo-bar {
test/CssClassBindings/Test/QqDefs.hs view
@@ -7,6 +7,22 @@   color: #1212ff; } +*:not(#funargid) {+  color: #aaa;+}++*:not(#funargidclass.yyy) {+  color: #aaa;+}++#idseq, .xxx {+  color: #bbb;+}++#idseqspace , .xxx {+  color: #ccc;+}+ #foo-bar {   color: #f212ff; }|]