Skip to content

Commit 6d97c85

Browse files
committed
1 parent 53cfd51 commit 6d97c85

File tree

4 files changed

+73
-0
lines changed

4 files changed

+73
-0
lines changed

lib/csscss.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,5 @@
2626
require "csscss/parser/border_style"
2727
require "csscss/parser/border_side"
2828
require "csscss/parser/border"
29+
require "csscss/parser/outline"
2930

lib/csscss/parser/outline.rb

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
module Csscss
2+
module Parser
3+
module Outline
4+
extend Parser::Base
5+
6+
class Parser < Parslet::Parser
7+
include Color
8+
9+
rule(:outline_width) { BorderWidth::Parser.new.border_width_side }
10+
rule(:outline_style) { BorderStyle::Parser.new.border_style_side }
11+
rule(:outline_color) { BorderColor::Parser.new.border_color_side }
12+
13+
rule(:outline) {
14+
(
15+
symbol("inherit") >> eof | (
16+
outline_width.maybe.as(:outline_width) >>
17+
outline_style.maybe.as(:outline_style) >>
18+
outline_color.maybe.as(:outline_color)
19+
)
20+
).as(:outline)
21+
}
22+
root(:outline)
23+
end
24+
25+
class Transformer < Parslet::Transform
26+
extend Color::Transformer
27+
extend Color::PlainColorValue
28+
29+
rule(outline: simple(:inherit)) {[]}
30+
31+
rule(outline: {
32+
outline_width:simple(:width),
33+
outline_style:simple(:style),
34+
outline_color:simple(:color)
35+
}) {
36+
[].tap do |declarations|
37+
declarations << Declaration.from_parser("outline-width", width) if width
38+
declarations << Declaration.from_parser("outline-style", style) if style
39+
declarations << Declaration.from_parser("outline-color", color) if color
40+
end
41+
}
42+
end
43+
end
44+
end
45+
end

lib/csscss/redundancy_analyzer.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ def shorthand_parser(property)
118118
when "border-width" then Parser::BorderWidth
119119
when "border-style" then Parser::BorderStyle
120120
when "border-color" then Parser::BorderColor
121+
when "outline" then Parser::Outline
121122
when "border-top", "border-right", "border-bottom", "border-left"
122123
Parser::BorderSide
123124
end

test/csscss/parser/outline_test.rb

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
require "test_helper"
2+
3+
module Csscss::Parser
4+
module Outline
5+
describe self do
6+
include CommonParserTests
7+
8+
before do
9+
@parser = Parser.new
10+
@trans = Transformer.new
11+
end
12+
13+
it "converts shorthand rules to longhand" do
14+
trans("1px solid blue").must_equal([
15+
dec("outline-width", "1px"),
16+
dec("outline-style", "solid"),
17+
dec("outline-color", "blue")
18+
])
19+
20+
trans("solid").must_equal([
21+
dec("outline-style", "solid")
22+
])
23+
end
24+
end
25+
end
26+
end

0 commit comments

Comments
 (0)