Skip to content

Commit 447292a

Browse files
committed
1 parent 5269130 commit 447292a

File tree

3 files changed

+72
-0
lines changed

3 files changed

+72
-0
lines changed

lib/csscss.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,5 @@
2323
require "csscss/parser/padding"
2424
require "csscss/parser/border_width"
2525
require "csscss/parser/border_color"
26+
require "csscss/parser/border_style"
2627

lib/csscss/parser/border_style.rb

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
module Csscss
2+
module Parser
3+
module BorderStyle
4+
extend Parser::Base
5+
6+
class Parser < Parslet::Parser
7+
include Common
8+
9+
rule(:border_style_side) {
10+
symbol_list(%w(none hidden dotted dashed solid
11+
double groove ridge inset outset
12+
))
13+
}
14+
15+
rule(:border_style) {
16+
(
17+
symbol("inherit") >> eof | (
18+
border_style_side.maybe.as(:top) >>
19+
border_style_side.maybe.as(:right) >>
20+
border_style_side.maybe.as(:bottom) >>
21+
border_style_side.maybe.as(:left)
22+
)
23+
).as(:border_style)
24+
}
25+
26+
root(:border_style)
27+
end
28+
29+
class Transformer < Parslet::Transform
30+
@property = :border_style
31+
extend MultiSideTransformer
32+
33+
class << self
34+
def side_declaration(side, value)
35+
Declaration.from_parser("border-#{side}-style", value)
36+
end
37+
end
38+
end
39+
end
40+
end
41+
end
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
require "test_helper"
2+
3+
module Csscss::Parser
4+
module BorderStyle
5+
describe BorderStyle 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("none dashed solid ridge").must_equal([
15+
dec("border-top-style", "none"),
16+
dec("border-right-style", "dashed"),
17+
dec("border-bottom-style", "solid"),
18+
dec("border-left-style", "ridge")
19+
])
20+
21+
trans("none dashed").must_equal([
22+
dec("border-top-style", "none"),
23+
dec("border-right-style", "dashed"),
24+
dec("border-bottom-style", "none"),
25+
dec("border-left-style", "dashed")
26+
])
27+
end
28+
end
29+
end
30+
end

0 commit comments

Comments
 (0)