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 +3/−0
- css-class-bindings.cabal +1/−1
- src/CssClassBindings/Qq.hs +35/−3
- test/CssClassBindings/Test/QqAsserts.hs +29/−1
- test/CssClassBindings/Test/QqDefs.hs +16/−0
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; }|]