treetop_css 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/css/css.treetop +24 -0
- data/lib/css/css_color.treetop +39 -0
- data/lib/css/css_declaration.treetop +15 -0
- data/lib/css/css_expression.treetop +23 -0
- data/lib/css/css_pre_parser.rb +12 -0
- data/lib/css/css_primitives.treetop +104 -0
- data/lib/css/css_selector.treetop +47 -0
- data/lib/css/url.treetop +44 -0
- data/lib/treetop_css.rb +13 -0
- data/lib/treetop_css/version.rb +3 -0
- metadata +73 -0
data/lib/css/css.treetop
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
grammar CSS
|
2
|
+
include CSSSelector
|
3
|
+
include CSSDeclaration
|
4
|
+
|
5
|
+
rule stylesheet
|
6
|
+
(ruleset / media)*
|
7
|
+
end
|
8
|
+
|
9
|
+
rule media
|
10
|
+
s? '@media' media_list '{' ruleset* '}' s?
|
11
|
+
end
|
12
|
+
|
13
|
+
rule media_list
|
14
|
+
s? medium ( s? ',' s? medium )* s?
|
15
|
+
end
|
16
|
+
|
17
|
+
rule medium
|
18
|
+
(identifier / '(' s declaration s ')' ) s? (medium)* s
|
19
|
+
end
|
20
|
+
|
21
|
+
rule ruleset
|
22
|
+
s? selector ( s? ',' s? selector)* s? '{' s? ( declaration s? )* '}' s?
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
grammar CSSColor
|
2
|
+
rule color
|
3
|
+
color_keyword / hex_value / rgb
|
4
|
+
end
|
5
|
+
|
6
|
+
rule color_keyword
|
7
|
+
'aqua' / 'black' / 'blue' / 'fuchsia' / 'gray' / 'green' / 'lime' /
|
8
|
+
'maroon' / 'navy' / 'olive' / 'purple' / 'red' / 'silver' / 'teal' /
|
9
|
+
'white' / 'yellow'
|
10
|
+
end
|
11
|
+
|
12
|
+
rule rgb
|
13
|
+
'rgb' s '(' s rgb_value s ',' s rgb_value s ',' s rgb_value s ')'
|
14
|
+
end
|
15
|
+
|
16
|
+
rule rgb_value
|
17
|
+
percentage / two_fifty_six_color
|
18
|
+
end
|
19
|
+
|
20
|
+
rule two_fifty_six_color
|
21
|
+
number
|
22
|
+
end
|
23
|
+
|
24
|
+
rule hex_value
|
25
|
+
'#' (six_digit_hex / three_digit_hex)
|
26
|
+
end
|
27
|
+
|
28
|
+
rule six_digit_hex
|
29
|
+
three_digit_hex three_digit_hex
|
30
|
+
end
|
31
|
+
|
32
|
+
rule three_digit_hex
|
33
|
+
hex_char hex_char hex_char
|
34
|
+
end
|
35
|
+
|
36
|
+
rule hex_char
|
37
|
+
[0-9a-fA-F]
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
grammar CSSExpression
|
2
|
+
include CSSPrimitives
|
3
|
+
|
4
|
+
rule expression
|
5
|
+
term (operator? term)*
|
6
|
+
end
|
7
|
+
|
8
|
+
rule term
|
9
|
+
quoted_string / function / primitive_data / string / number / identifier
|
10
|
+
end
|
11
|
+
|
12
|
+
rule identifier
|
13
|
+
[-]? [_a-zA-Z]+ [_a-zA-Z0-9-]*
|
14
|
+
end
|
15
|
+
|
16
|
+
rule function
|
17
|
+
identifier ( [:.] identifier )* '(' [^)]* ')'
|
18
|
+
end
|
19
|
+
|
20
|
+
rule operator
|
21
|
+
s ('/' / ',' / '=') s
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,104 @@
|
|
1
|
+
grammar CSSPrimitives
|
2
|
+
include URL
|
3
|
+
include CSSColor
|
4
|
+
|
5
|
+
rule primitive_data
|
6
|
+
length / percentage / color / space / url_declaration / angle / time / frequency
|
7
|
+
end
|
8
|
+
|
9
|
+
rule length
|
10
|
+
sign? float length_unit
|
11
|
+
end
|
12
|
+
|
13
|
+
rule length_unit
|
14
|
+
'em' / 'ex' / 'px' / 'in' / 'cm' / 'mm' / 'pt' / 'pc'
|
15
|
+
end
|
16
|
+
|
17
|
+
rule percentage
|
18
|
+
sign? number '%'
|
19
|
+
end
|
20
|
+
|
21
|
+
rule url_declaration
|
22
|
+
'url(' q? url q? ')'
|
23
|
+
end
|
24
|
+
|
25
|
+
rule angle
|
26
|
+
sign? float angle_unit
|
27
|
+
end
|
28
|
+
|
29
|
+
rule angle_unit
|
30
|
+
'deg' / 'grad' / 'rad'
|
31
|
+
end
|
32
|
+
|
33
|
+
rule time
|
34
|
+
positive_float time_unit
|
35
|
+
end
|
36
|
+
|
37
|
+
rule time_unit
|
38
|
+
'ms' / 's'
|
39
|
+
end
|
40
|
+
|
41
|
+
rule frequency
|
42
|
+
positive_float frequency_unit
|
43
|
+
end
|
44
|
+
|
45
|
+
rule frequency_unit
|
46
|
+
'Hz' / 'kHz'
|
47
|
+
end
|
48
|
+
|
49
|
+
rule number
|
50
|
+
sign? positive_number
|
51
|
+
end
|
52
|
+
|
53
|
+
rule positive_number
|
54
|
+
[0-9]+
|
55
|
+
end
|
56
|
+
|
57
|
+
rule float
|
58
|
+
number ('.' number)?
|
59
|
+
end
|
60
|
+
|
61
|
+
rule positive_float
|
62
|
+
'+'? positive_number ('.' positive_number)?
|
63
|
+
end
|
64
|
+
|
65
|
+
rule quoted_string
|
66
|
+
q [^"']* q
|
67
|
+
end
|
68
|
+
|
69
|
+
rule string
|
70
|
+
[a-zA-Z\.\/]+
|
71
|
+
end
|
72
|
+
|
73
|
+
rule symbol
|
74
|
+
semicolon / colon / sign / space
|
75
|
+
end
|
76
|
+
|
77
|
+
rule semicolon
|
78
|
+
';'
|
79
|
+
end
|
80
|
+
|
81
|
+
rule colon
|
82
|
+
':'
|
83
|
+
end
|
84
|
+
|
85
|
+
rule sign
|
86
|
+
'+' / '-'
|
87
|
+
end
|
88
|
+
|
89
|
+
rule space
|
90
|
+
' '
|
91
|
+
end
|
92
|
+
|
93
|
+
rule q
|
94
|
+
'"' / "'"
|
95
|
+
end
|
96
|
+
|
97
|
+
rule s
|
98
|
+
[ \r\n\t]*
|
99
|
+
end
|
100
|
+
|
101
|
+
rule comment
|
102
|
+
'/*' [.]* '*/'
|
103
|
+
end
|
104
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
grammar CSSSelector
|
2
|
+
include CSSExpression
|
3
|
+
|
4
|
+
rule selector
|
5
|
+
simple_selector s? combinator? s? selector?
|
6
|
+
end
|
7
|
+
|
8
|
+
rule simple_selector
|
9
|
+
tag_selector / property_selector+
|
10
|
+
end
|
11
|
+
|
12
|
+
rule tag_selector
|
13
|
+
tag_name property_selector*
|
14
|
+
end
|
15
|
+
|
16
|
+
rule property_selector
|
17
|
+
hash / class / attrib / pseudo
|
18
|
+
end
|
19
|
+
|
20
|
+
rule hash
|
21
|
+
'#'
|
22
|
+
end
|
23
|
+
|
24
|
+
rule class
|
25
|
+
'.' identifier
|
26
|
+
end
|
27
|
+
|
28
|
+
rule attrib
|
29
|
+
'[' s identifier s ( match_operator s ( identifier / string ) s)? ']'
|
30
|
+
end
|
31
|
+
|
32
|
+
rule match_operator
|
33
|
+
'=' / '~=' / '|='
|
34
|
+
end
|
35
|
+
|
36
|
+
rule pseudo
|
37
|
+
':' ( function / identifier)
|
38
|
+
end
|
39
|
+
|
40
|
+
rule tag_name
|
41
|
+
identifier / '*'
|
42
|
+
end
|
43
|
+
|
44
|
+
rule combinator
|
45
|
+
'+' / '>' / '*' / '~'
|
46
|
+
end
|
47
|
+
end
|
data/lib/css/url.treetop
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
# TODO replace with http://labs.apache.org/webarch/uri/rev-2002/rfc2396bis.html#collected-abnf
|
2
|
+
|
3
|
+
grammar URL
|
4
|
+
rule url
|
5
|
+
protocol_with_suffix? domain_with_optional_port path?
|
6
|
+
end
|
7
|
+
|
8
|
+
rule protocol_with_suffix
|
9
|
+
protocol '://'
|
10
|
+
end
|
11
|
+
|
12
|
+
rule domain_with_optional_port
|
13
|
+
domain (':' port_number)?
|
14
|
+
end
|
15
|
+
|
16
|
+
rule port_number
|
17
|
+
positive_number
|
18
|
+
end
|
19
|
+
|
20
|
+
rule domain
|
21
|
+
[a-zA-Z0-9\-\._\/]+
|
22
|
+
end
|
23
|
+
|
24
|
+
rule path
|
25
|
+
'/' path_character* query_string?
|
26
|
+
end
|
27
|
+
|
28
|
+
rule path_character
|
29
|
+
[a-zA-Z0-9\-\._~]
|
30
|
+
end
|
31
|
+
|
32
|
+
rule query_string
|
33
|
+
'?' url_key_value_pair (('&' url_key_value_pair)+)?
|
34
|
+
end
|
35
|
+
|
36
|
+
rule url_key_value_pair
|
37
|
+
string '=' string
|
38
|
+
end
|
39
|
+
|
40
|
+
rule protocol
|
41
|
+
'https' / 'http' / 'ftp' / 'gopher' / 'mailto' / 'news' / 'nntp' /
|
42
|
+
'telnet' / 'wais' / 'file' / 'prospero'
|
43
|
+
end
|
44
|
+
end
|
data/lib/treetop_css.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
require "treetop"
|
3
|
+
require File.dirname(__FILE__) + "/css/css_pre_parser"
|
4
|
+
|
5
|
+
Treetop.load File.dirname(__FILE__) + "/css/url"
|
6
|
+
Treetop.load File.dirname(__FILE__) + "/css/css_color"
|
7
|
+
Treetop.load File.dirname(__FILE__) + "/css/css_primitives"
|
8
|
+
Treetop.load File.dirname(__FILE__) + "/css/css_expression"
|
9
|
+
Treetop.load File.dirname(__FILE__) + "/css/css_declaration"
|
10
|
+
Treetop.load File.dirname(__FILE__) + "/css/css_selector"
|
11
|
+
Treetop.load File.dirname(__FILE__) + "/css/css"
|
12
|
+
|
13
|
+
CSSParser.send(:include, CSSPreparser)
|
metadata
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: treetop_css
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
version: 0.0.1
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Sven Fuchs
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-05-20 00:00:00 +02:00
|
18
|
+
default_executable:
|
19
|
+
dependencies: []
|
20
|
+
|
21
|
+
description: Treetop CSS grammar/parser.
|
22
|
+
email: svenfuchs@artweb-design.de
|
23
|
+
executables: []
|
24
|
+
|
25
|
+
extensions: []
|
26
|
+
|
27
|
+
extra_rdoc_files: []
|
28
|
+
|
29
|
+
files:
|
30
|
+
- lib/css/css.treetop
|
31
|
+
- lib/css/css_color.treetop
|
32
|
+
- lib/css/css_declaration.treetop
|
33
|
+
- lib/css/css_expression.treetop
|
34
|
+
- lib/css/css_pre_parser.rb
|
35
|
+
- lib/css/css_primitives.treetop
|
36
|
+
- lib/css/css_selector.treetop
|
37
|
+
- lib/css/url.treetop
|
38
|
+
- lib/treetop_css.rb
|
39
|
+
- lib/treetop_css/version.rb
|
40
|
+
has_rdoc: true
|
41
|
+
homepage: http://github.com/svenfuchs/treetop_css
|
42
|
+
licenses: []
|
43
|
+
|
44
|
+
post_install_message:
|
45
|
+
rdoc_options: []
|
46
|
+
|
47
|
+
require_paths:
|
48
|
+
- lib
|
49
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
segments:
|
54
|
+
- 0
|
55
|
+
version: "0"
|
56
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
segments:
|
61
|
+
- 1
|
62
|
+
- 3
|
63
|
+
- 6
|
64
|
+
version: 1.3.6
|
65
|
+
requirements: []
|
66
|
+
|
67
|
+
rubyforge_project: "[none]"
|
68
|
+
rubygems_version: 1.3.6
|
69
|
+
signing_key:
|
70
|
+
specification_version: 3
|
71
|
+
summary: Treetop CSS grammar/parser
|
72
|
+
test_files: []
|
73
|
+
|