deadfire 0.1.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.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +3 -3
- data/Gemfile.lock +1 -1
- data/README.md +33 -35
- data/benchmarks/basic_benchmark.rb +8 -5
- data/benchmarks/tailwind_parser.rb +23 -0
- data/bin/console +16 -3
- data/changelog.md +21 -1
- data/lib/deadfire/ast_printer.rb +58 -0
- data/lib/deadfire/configuration.rb +7 -2
- data/lib/deadfire/css_buffer.rb +30 -3
- data/lib/deadfire/css_generator.rb +66 -0
- data/lib/deadfire/error_reporter.rb +24 -0
- data/lib/deadfire/errors.rb +28 -0
- data/lib/deadfire/filename_helper.rb +29 -0
- data/lib/deadfire/front_end/apply_node.rb +44 -0
- data/lib/deadfire/front_end/at_rule_node.rb +19 -0
- data/lib/deadfire/front_end/base_node.rb +11 -0
- data/lib/deadfire/front_end/block_node.rb +21 -0
- data/lib/deadfire/front_end/comment_node.rb +17 -0
- data/lib/deadfire/front_end/newline_node.rb +17 -0
- data/lib/deadfire/front_end/parser.rb +156 -0
- data/lib/deadfire/front_end/ruleset_node.rb +18 -0
- data/lib/deadfire/front_end/scanner.rb +266 -0
- data/lib/deadfire/front_end/selector_node.rb +52 -0
- data/lib/deadfire/front_end/stylesheet_node.rb +21 -0
- data/lib/deadfire/front_end/token.rb +20 -0
- data/lib/deadfire/interpreter.rb +88 -0
- data/lib/deadfire/parser.rb +160 -282
- data/lib/deadfire/parser_engine.rb +41 -0
- data/lib/deadfire/spec.rb +136 -0
- data/lib/deadfire/version.rb +1 -1
- data/lib/deadfire.rb +27 -5
- metadata +23 -4
- data/lib/deadfire/transformers/transformer.rb +0 -17
@@ -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
|
data/lib/deadfire/version.rb
CHANGED
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/
|
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
|
-
@
|
33
|
+
@config ||= Configuration.new
|
14
34
|
end
|
15
35
|
|
16
36
|
def reset
|
17
|
-
@
|
37
|
+
@config = Configuration.new
|
18
38
|
end
|
19
39
|
|
20
40
|
def configure
|
21
|
-
yield(
|
41
|
+
yield(configuration)
|
22
42
|
end
|
23
43
|
|
24
44
|
def parse(content, options = {})
|
25
|
-
|
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.
|
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:
|
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/
|
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.
|
87
|
+
rubygems_version: 3.4.10
|
69
88
|
signing_key:
|
70
89
|
specification_version: 4
|
71
90
|
summary: Deadfire - lightweight css preprocessor
|