deadfire 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,136 @@
1
+ module Deadfire
2
+ class Spec # :nodoc:
3
+ # EBNF
4
+ # stylesheet = [ CDO | CDC | S | statement ]*;
5
+ # statement = ruleset | at-rule;
6
+ # at-rule = ATKEYWORD S* any-value* [ block | ';' S* ];
7
+ # block = '{' S* [ S* (declaration | at-rule) ]* '}' S*;
8
+ # ruleset = selector [ ',' S* selector ]* S* '{' S* declaration [ ';' S* declaration ]* '}' S*;
9
+ # selector = simple-selector [ combinator selector | S+ [ combinator? selector ]? ];
10
+ # simple-selector = element-name? [ '#' id-selector ]? [ '.' class-selector ]* [ '[' attrib-selector ']' ]*;
11
+ # id-selector = NAME;
12
+ # class-selector = '.' NAME;
13
+ # attrib-selector = NAME [ [ '=' | INCLUDES | DASHMATCH ] any-value ]?;
14
+ # combinator = '+' | '>' | '~' | S+;
15
+ # declaration = property ':' S* value;
16
+ # property = NAME;
17
+ # value = any-value [ ',' S* any-value ]*;
18
+ # any-value = IDENT | STRING | NUMBER | PERCENTAGE | DIMENSION | COLOR | URI | FUNCTION any-value* ')' | '(' any-value* ')' | '[' any-value* ']' | '{' any-value* '}' | ';';
19
+
20
+ # -- SASS features
21
+
22
+ # Example: @apply button;
23
+ # apply-rule = "@apply" S* mixin-name S* ";" S*
24
+ # mixin-name = IDENT
25
+
26
+ # Example: button { color: red; &.active { color: blue } }
27
+ # nested-selector = selector S* "{" S* declaration-list S* "}"
28
+ # selector = simple-selector [ "&" simple-selector ]
29
+ # simple-selector = element-name [ "#" id ] [ "." class ]*
30
+ # element-name = IDENT
31
+ # id = IDENT
32
+ # class = "." IDENT
33
+ # declaration-list = declaration [ ";" S* declaration ]*
34
+
35
+ CSS_AT_RULES = [
36
+ "@charset",
37
+ "@import",
38
+ "@media",
39
+ "@page",
40
+ "@font-face",
41
+ "@keyframes",
42
+ "@supports",
43
+ "@namespace",
44
+ "@counter-style",
45
+ "@viewport",
46
+ "@document",
47
+ "@apply",
48
+ "@layer"
49
+ ]
50
+
51
+ CSS_SELECTORS = [
52
+ ":root",
53
+ "::before",
54
+ "::after",
55
+ ":hover",
56
+ ":active",
57
+ ":focus",
58
+ ":first-child",
59
+ ":last-child",
60
+ ":nth-child(n)",
61
+ ":nth-last-child(n)",
62
+ ":only-child",
63
+ ":only-of-type",
64
+ ":first-of-type",
65
+ ":last-of-type",
66
+ ":nth-of-type(n)",
67
+ ":nth-last-of-type(n)",
68
+ ":checked",
69
+ ":disabled",
70
+ ":enabled",
71
+ ":empty",
72
+ "::first-line",
73
+ "::first-letter",
74
+ "::selection",
75
+ "~",
76
+ "+",
77
+ ">",
78
+ " ",
79
+ ".class",
80
+ "#id",
81
+ "[attribute]",
82
+ "[attribute=value]",
83
+ "[attribute~=value]",
84
+ "[attribute|=value]",
85
+ "[attribute^=value]",
86
+ "[attribute$=value]",
87
+ "[attribute*=value]",
88
+ ":not(selector)",
89
+ ":matches(selector)",
90
+ ":any(selector)",
91
+ ":has(selector)",
92
+ "::placeholder"
93
+ ]
94
+
95
+ CSS_POTENTIAL_VALUES_TYPES = [
96
+ :length_and_size, # e.g. 5px or 5em
97
+ :color, # e.g. hex codes, RGB and RGBA values, HSL and HSLA values, and named colors - #fff
98
+ :textual, # strings, keywords, and URLs - bold, url, etc.
99
+ :enumerated, # e.g. inline, block, list-item, etc.
100
+ :functional, # e.g. calc(), attr(), and var() - calc(100% - 10px)
101
+ :other # everything else like inherit, initial, unset
102
+ ]
103
+
104
+ COMMON_CSS_PROPERTIES = [
105
+ "color",
106
+ "background-color",
107
+ "background-image",
108
+ "border",
109
+ "border-radius",
110
+ "box-shadow",
111
+ "font-family",
112
+ "font-size",
113
+ "font-weight",
114
+ "letter-spacing",
115
+ "line-height",
116
+ "margin",
117
+ "padding",
118
+ "text-align",
119
+ "text-decoration",
120
+ "text-transform",
121
+ "width",
122
+ "height",
123
+ "display",
124
+ "flex",
125
+ "flex-direction",
126
+ "justify-content",
127
+ "align-items",
128
+ "position",
129
+ "top",
130
+ "right",
131
+ "bottom",
132
+ "left",
133
+ "z-index"
134
+ ]
135
+ end
136
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Deadfire
4
- VERSION = "0.2.0"
4
+ VERSION = "0.3.0"
5
5
  end
data/lib/deadfire.rb CHANGED
@@ -1,28 +1,50 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative "deadfire/ast_printer"
3
4
  require_relative "deadfire/css_buffer"
5
+ require_relative "deadfire/css_generator"
4
6
  require_relative "deadfire/configuration"
5
7
  require_relative "deadfire/errors"
8
+ require_relative "deadfire/error_reporter"
9
+ require_relative "deadfire/interpreter"
6
10
  require_relative "deadfire/parser"
7
- require_relative "deadfire/transformers/transformer"
11
+ require_relative "deadfire/parser_engine"
12
+ require_relative "deadfire/spec"
13
+ require_relative "deadfire/filename_helper"
8
14
  require_relative "deadfire/version"
15
+ require_relative "deadfire/front_end/scanner"
16
+ require_relative "deadfire/front_end/token"
17
+ require_relative "deadfire/front_end/parser"
18
+ require_relative "deadfire/front_end/base_node"
19
+ require_relative "deadfire/front_end/apply_node"
20
+ require_relative "deadfire/front_end/at_rule_node"
21
+ require_relative "deadfire/front_end/block_node"
22
+ require_relative "deadfire/front_end/comment_node"
23
+ require_relative "deadfire/front_end/newline_node"
24
+ require_relative "deadfire/front_end/ruleset_node"
25
+ require_relative "deadfire/front_end/selector_node"
26
+ require_relative "deadfire/front_end/stylesheet_node"
9
27
 
10
28
  module Deadfire
11
29
  class << self
30
+ attr_reader :config
31
+
12
32
  def configuration
13
- @configuration ||= Configuration.new
33
+ @config ||= Configuration.new
14
34
  end
15
35
 
16
36
  def reset
17
- @configuration = Configuration.new
37
+ @config = Configuration.new
18
38
  end
19
39
 
20
40
  def configure
21
- yield(@configuration)
41
+ yield(configuration)
22
42
  end
23
43
 
24
44
  def parse(content, options = {})
25
- Parser.parse(content, options)
45
+ parser = ParserEngine.new(content)
46
+ # TODO: hook into a logger and report the errors
47
+ parser.parse
26
48
  end
27
49
  end
28
50
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: deadfire
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Haroon Ahmed
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-10-25 00:00:00.000000000 Z
11
+ date: 2023-11-15 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email:
@@ -31,17 +31,36 @@ files:
31
31
  - benchmarks/output.css.map
32
32
  - benchmarks/profilng.rb
33
33
  - benchmarks/tailwind.css
34
+ - benchmarks/tailwind_parser.rb
34
35
  - bin/console
35
36
  - bin/setup
36
37
  - bin/test
37
38
  - changelog.md
38
39
  - deadfire.gemspec
39
40
  - lib/deadfire.rb
41
+ - lib/deadfire/ast_printer.rb
40
42
  - lib/deadfire/configuration.rb
41
43
  - lib/deadfire/css_buffer.rb
44
+ - lib/deadfire/css_generator.rb
45
+ - lib/deadfire/error_reporter.rb
42
46
  - lib/deadfire/errors.rb
47
+ - lib/deadfire/filename_helper.rb
48
+ - lib/deadfire/front_end/apply_node.rb
49
+ - lib/deadfire/front_end/at_rule_node.rb
50
+ - lib/deadfire/front_end/base_node.rb
51
+ - lib/deadfire/front_end/block_node.rb
52
+ - lib/deadfire/front_end/comment_node.rb
53
+ - lib/deadfire/front_end/newline_node.rb
54
+ - lib/deadfire/front_end/parser.rb
55
+ - lib/deadfire/front_end/ruleset_node.rb
56
+ - lib/deadfire/front_end/scanner.rb
57
+ - lib/deadfire/front_end/selector_node.rb
58
+ - lib/deadfire/front_end/stylesheet_node.rb
59
+ - lib/deadfire/front_end/token.rb
60
+ - lib/deadfire/interpreter.rb
43
61
  - lib/deadfire/parser.rb
44
- - lib/deadfire/transformers/transformer.rb
62
+ - lib/deadfire/parser_engine.rb
63
+ - lib/deadfire/spec.rb
45
64
  - lib/deadfire/version.rb
46
65
  homepage: https://github.com/hahmed/deadfire
47
66
  licenses:
@@ -65,7 +84,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
65
84
  - !ruby/object:Gem::Version
66
85
  version: '0'
67
86
  requirements: []
68
- rubygems_version: 3.3.7
87
+ rubygems_version: 3.4.10
69
88
  signing_key:
70
89
  specification_version: 4
71
90
  summary: Deadfire - lightweight css preprocessor
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Deadfire::Transformers
4
- class Transformer
5
- def name
6
- self.class.name
7
- end
8
-
9
- def matches?(line)
10
- false
11
- end
12
-
13
- def transform(line, buffer, output); end
14
-
15
- def reset; end
16
- end
17
- end