csspool 2.0.0 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gemtest +0 -0
- data/CHANGELOG.rdoc +6 -0
- data/Manifest.txt +10 -14
- data/README.rdoc +8 -21
- data/Rakefile +36 -2
- data/lib/csspool/collection.rb +2 -2
- data/lib/csspool/css/charset.rb +8 -2
- data/lib/csspool/css/declaration.rb +13 -2
- data/lib/csspool/css/document_handler.rb +3 -3
- data/lib/csspool/css/import_rule.rb +15 -3
- data/lib/csspool/css/media.rb +8 -2
- data/lib/csspool/css/parser.rb +1090 -0
- data/lib/csspool/css/parser.y +347 -0
- data/lib/csspool/css/rule_set.rb +8 -3
- data/lib/csspool/css/tokenizer.rb +228 -0
- data/lib/csspool/css/tokenizer.rex +96 -0
- data/lib/csspool/css.rb +1 -0
- data/lib/csspool/node.rb +29 -1
- data/lib/csspool/sac/document.rb +3 -3
- data/lib/csspool/sac/parser.rb +6 -112
- data/lib/csspool/terms/function.rb +1 -1
- data/lib/csspool/terms/ident.rb +1 -1
- data/lib/csspool/terms/number.rb +1 -1
- data/lib/csspool/terms/rgb.rb +1 -4
- data/lib/csspool/terms/string.rb +1 -1
- data/lib/csspool/visitors/children.rb +50 -0
- data/lib/csspool/visitors/comparable.rb +9 -3
- data/lib/csspool/visitors/iterator.rb +80 -0
- data/lib/csspool/visitors/to_css.rb +61 -45
- data/lib/csspool/visitors.rb +2 -0
- data/lib/csspool.rb +6 -3
- data/test/css/test_parser.rb +412 -0
- data/test/css/test_tokenizer.rb +320 -0
- data/test/helper.rb +2 -2
- data/test/sac/test_parser.rb +3 -8
- data/test/sac/test_terms.rb +128 -34
- data/test/test_collection.rb +1 -1
- data/test/test_parser.rb +1 -1
- data/test/visitors/test_children.rb +20 -0
- data/test/visitors/test_comparable.rb +31 -1
- data/test/visitors/test_each.rb +19 -0
- data/test/visitors/test_to_css.rb +125 -1
- metadata +90 -68
- data/lib/csspool/lib_croco/cr_additional_sel.rb +0 -46
- data/lib/csspool/lib_croco/cr_attr_sel.rb +0 -16
- data/lib/csspool/lib_croco/cr_doc_handler.rb +0 -24
- data/lib/csspool/lib_croco/cr_num.rb +0 -13
- data/lib/csspool/lib_croco/cr_parser.rb +0 -11
- data/lib/csspool/lib_croco/cr_parsing_location.rb +0 -17
- data/lib/csspool/lib_croco/cr_pseudo.rb +0 -14
- data/lib/csspool/lib_croco/cr_rgb.rb +0 -18
- data/lib/csspool/lib_croco/cr_selector.rb +0 -34
- data/lib/csspool/lib_croco/cr_simple_sel.rb +0 -54
- data/lib/csspool/lib_croco/cr_term.rb +0 -97
- data/lib/csspool/lib_croco/glist.rb +0 -21
- data/lib/csspool/lib_croco.rb +0 -78
- data/lib/csspool/visitable.rb +0 -18
@@ -1,97 +0,0 @@
|
|
1
|
-
module CSSPool
|
2
|
-
module LibCroco
|
3
|
-
class CRTerm < FFI::Struct
|
4
|
-
layout(
|
5
|
-
:type, :int,
|
6
|
-
:unary_op, :int,
|
7
|
-
:operator, :int,
|
8
|
-
:content, :pointer,
|
9
|
-
:ext_content, :pointer,
|
10
|
-
:app_data, :pointer,
|
11
|
-
:ref_count, :long,
|
12
|
-
:next, :pointer,
|
13
|
-
:pref, :pointer,
|
14
|
-
:line, :int,
|
15
|
-
:column, :int,
|
16
|
-
:byte_offset, :int
|
17
|
-
)
|
18
|
-
|
19
|
-
def to_term
|
20
|
-
operator = {
|
21
|
-
0 => nil,
|
22
|
-
1 => '/',
|
23
|
-
2 => ','
|
24
|
-
}[self[:operator]]
|
25
|
-
|
26
|
-
unary_op = {
|
27
|
-
0 => nil,
|
28
|
-
1 => :plus,
|
29
|
-
2 => :minus
|
30
|
-
}[self[:unary_op]]
|
31
|
-
|
32
|
-
case self[:type]
|
33
|
-
when 0 # TERM_NO_TYPE
|
34
|
-
when 1 # TERM_NUMBER
|
35
|
-
num = CRNum.new(self[:content])
|
36
|
-
CSSPool::Terms::Number.new(
|
37
|
-
num[:type],
|
38
|
-
unary_op,
|
39
|
-
num[:value],
|
40
|
-
operator,
|
41
|
-
LibCroco.location_to_h(self)
|
42
|
-
)
|
43
|
-
when 2 # TERM_FUNCTION
|
44
|
-
name = LibCroco.cr_string_peek_raw_str(self[:content]).read_string
|
45
|
-
params = []
|
46
|
-
term = self[:ext_content]
|
47
|
-
until term.null?
|
48
|
-
params << LibCroco::CRTerm.new(term)
|
49
|
-
term = params.last[:next]
|
50
|
-
end
|
51
|
-
CSSPool::Terms::Function.new(
|
52
|
-
name,
|
53
|
-
params.map { |param| param.to_term },
|
54
|
-
operator,
|
55
|
-
LibCroco.location_to_h(self)
|
56
|
-
)
|
57
|
-
when 3 # TERM_STRING
|
58
|
-
CSSPool::Terms::String.new(
|
59
|
-
LibCroco.cr_string_peek_raw_str(self[:content]).read_string,
|
60
|
-
operator,
|
61
|
-
LibCroco.location_to_h(self)
|
62
|
-
)
|
63
|
-
when 4 # TERM_IDENT
|
64
|
-
CSSPool::Terms::Ident.new(
|
65
|
-
LibCroco.cr_string_peek_raw_str(self[:content]).read_string,
|
66
|
-
operator,
|
67
|
-
LibCroco.location_to_h(self)
|
68
|
-
)
|
69
|
-
when 5 # TERM_URI
|
70
|
-
CSSPool::Terms::URI.new(
|
71
|
-
LibCroco.cr_string_peek_raw_str(self[:content]).read_string,
|
72
|
-
operator,
|
73
|
-
LibCroco.location_to_h(self)
|
74
|
-
)
|
75
|
-
when 6 # TERM_RGB
|
76
|
-
rgb = LibCroco::CRRgb.new(self[:content])
|
77
|
-
CSSPool::Terms::Rgb.new(
|
78
|
-
rgb[:red],
|
79
|
-
rgb[:green],
|
80
|
-
rgb[:blue],
|
81
|
-
rgb[:is_percentage] == 1,
|
82
|
-
operator,
|
83
|
-
LibCroco.location_to_h(rgb)
|
84
|
-
)
|
85
|
-
when 7 # TERM_UNICODERANGE
|
86
|
-
raise "libcroco doesn't seem to support this term"
|
87
|
-
when 8 # TERM_HASH
|
88
|
-
CSSPool::Terms::Hash.new(
|
89
|
-
LibCroco.cr_string_peek_raw_str(self[:content]).read_string,
|
90
|
-
operator,
|
91
|
-
LibCroco.location_to_h(self)
|
92
|
-
)
|
93
|
-
end
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
module CSSPool
|
2
|
-
module LibCroco
|
3
|
-
class GList < FFI::Struct
|
4
|
-
layout(
|
5
|
-
:data, :pointer,
|
6
|
-
:next, :pointer,
|
7
|
-
:prev, :pointer
|
8
|
-
)
|
9
|
-
|
10
|
-
def to_a
|
11
|
-
list = [self]
|
12
|
-
pointer = list.last[:next]
|
13
|
-
until pointer.null?
|
14
|
-
list << GList.new(pointer)
|
15
|
-
pointer = list.last[:next]
|
16
|
-
end
|
17
|
-
list.map { |x| x[:data] }
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
data/lib/csspool/lib_croco.rb
DELETED
@@ -1,78 +0,0 @@
|
|
1
|
-
require 'ffi'
|
2
|
-
|
3
|
-
ENV['LIBCROCO'] ||= 'libcroco-0.6'
|
4
|
-
|
5
|
-
module CSSPool
|
6
|
-
module LibCroco
|
7
|
-
extend FFI::Library
|
8
|
-
|
9
|
-
retry_times = 0
|
10
|
-
|
11
|
-
retry_places = {
|
12
|
-
0 => '/opt/local/lib/libcroco-0.6.dylib',
|
13
|
-
1 => '/opt/local/lib/libcroco-0.6.so',
|
14
|
-
2 => '/usr/local/lib/libcroco-0.6.dylib',
|
15
|
-
3 => '/usr/local/lib/libcroco-0.6.so',
|
16
|
-
4 => '/usr/lib/libcroco-0.6.dylib',
|
17
|
-
5 => '/usr/lib/libcroco-0.6.so',
|
18
|
-
}
|
19
|
-
|
20
|
-
begin
|
21
|
-
ffi_lib ENV['LIBCROCO']
|
22
|
-
rescue LoadError => ex
|
23
|
-
if retry_places.key?(retry_times)
|
24
|
-
ENV['LIBCROCO'] = retry_places[retry_times]
|
25
|
-
retry_times += 1
|
26
|
-
retry
|
27
|
-
end
|
28
|
-
warn "### Please install libcroco"
|
29
|
-
warn "### Set LD_LIBRARY_PATH *or* set LIBCROCO to point at libcroco-0.6.dylib"
|
30
|
-
raise ex
|
31
|
-
end
|
32
|
-
|
33
|
-
attach_function :cr_doc_handler_new, [], :pointer
|
34
|
-
attach_function :cr_parser_new_from_buf, [:string, :int, :int, :int], :pointer
|
35
|
-
attach_function :cr_parser_set_sac_handler, [:pointer, :pointer], :int
|
36
|
-
attach_function :cr_parser_parse, [:pointer], :int
|
37
|
-
attach_function :cr_parser_destroy, [:pointer], :void
|
38
|
-
attach_function :cr_doc_handler_destroy, [:pointer], :void
|
39
|
-
attach_function :cr_string_peek_raw_str, [:pointer], :pointer
|
40
|
-
attach_function :cr_simple_sel_compute_specificity, [:pointer], :int
|
41
|
-
|
42
|
-
callback :start_document, [:pointer], :void
|
43
|
-
callback :end_document, [:pointer], :void
|
44
|
-
callback :charset, [:pointer, :pointer, :pointer], :void
|
45
|
-
callback :import_style, [:pointer] * 5, :void
|
46
|
-
callback :import_style_result, [:pointer] * 5, :void
|
47
|
-
callback :namespace_declaration, [:pointer] * 4, :void
|
48
|
-
callback :comment, [:pointer, :pointer], :void
|
49
|
-
callback :start_selector, [:pointer, :pointer], :void
|
50
|
-
callback :end_selector, [:pointer, :pointer], :void
|
51
|
-
callback :property, [:pointer, :pointer, :pointer, :int], :void
|
52
|
-
callback :start_font_face, [:pointer] * 2, :void
|
53
|
-
callback :end_font_face, [:pointer], :void
|
54
|
-
callback :start_media, [:pointer] * 3, :void
|
55
|
-
callback :end_media, [:pointer] * 2, :void
|
56
|
-
|
57
|
-
def self.location_to_h thing
|
58
|
-
{
|
59
|
-
:line => thing[:line],
|
60
|
-
:column => thing[:column],
|
61
|
-
:byte_offset => thing[:byte_offset]
|
62
|
-
}
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
require 'csspool/lib_croco/cr_doc_handler'
|
68
|
-
require 'csspool/lib_croco/cr_pseudo'
|
69
|
-
require 'csspool/lib_croco/cr_parsing_location'
|
70
|
-
require 'csspool/lib_croco/glist'
|
71
|
-
require 'csspool/lib_croco/cr_simple_sel'
|
72
|
-
require 'csspool/lib_croco/cr_selector'
|
73
|
-
require 'csspool/lib_croco/cr_additional_sel'
|
74
|
-
require 'csspool/lib_croco/cr_attr_sel'
|
75
|
-
require 'csspool/lib_croco/cr_term'
|
76
|
-
require 'csspool/lib_croco/cr_parser'
|
77
|
-
require 'csspool/lib_croco/cr_num'
|
78
|
-
require 'csspool/lib_croco/cr_rgb'
|
data/lib/csspool/visitable.rb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
module CSSPool
|
2
|
-
module Visitable
|
3
|
-
def accept target
|
4
|
-
target.accept self
|
5
|
-
end
|
6
|
-
|
7
|
-
def to_css
|
8
|
-
accept Visitors::ToCSS.new
|
9
|
-
end
|
10
|
-
alias :to_s :to_css
|
11
|
-
|
12
|
-
def == other
|
13
|
-
return false unless self.class == other.class
|
14
|
-
|
15
|
-
accept Visitors::Comparable.new other
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|