मैं ट्रिटॉप के लिए नया हूं और एक सीएसएस/एचएसएस पार्सर लिखने का प्रयास कर रहा हूं। एचएसएस ने नेस्टेड शैलियों, चर और एक प्रकार की मिश्रित कार्यक्षमता के साथ सीएसएस की मूल कार्यक्षमता को बढ़ाया है।ट्रिटॉप और नेस्टेड स्टाइलशीट नियमों में सीएसएस/एचएसएस पार्सर
मैं बहुत करीब हूं - पार्सर सीएसएस को संभाल सकता है - लेकिन जब मैं शैली को शैली में लागू करने की बात आती हूं तो मैं गिर जाता हूं। उदाहरण:
#rule #one {
#two {
color: red;
}
color: blue;
}
मैंने इसमें दो शॉट्स ले लिए हैं, जो व्हाइटस्पेस को नियंत्रित करता है और जो नहीं करता है। मैं काम करने के लिए काफी नहीं मिल सकता है। ट्रीटॉप दस्तावेज थोड़ा सा स्पैस है और मुझे सच में लगता है कि मुझे कुछ मौलिक याद आ रहा है। उम्मीद है कि कोई मुझे सीधे सेट कर सकता है।
एक:
grammar Stylesheet
rule stylesheet
space* style*
end
rule style
selectors space* '{' space* properties? space* '}' space*
end
rule properties
property space* (';' space* property)* ';'?
end
rule property
property_name space* [:] space* property_value
end
rule property_name
[^:;}]+
end
rule property_value
[^:;}]+
end
rule space
[\t ]
end
rule selectors
selector space* ([,] space* selector)*
end
rule selector
element (space+ ![{] element)*
end
rule element
class/id
end
rule id
[#] [a-zA-Z-]+
end
rule class
[.] [a-zA-Z-]+
end
end
बी:
grammar Stylesheet
rule stylesheet
style*
end
rule style
selectors closure
end
rule closure
'{' (style/property)* '}'
end
rule property
property_name ':' property_value ';'
end
rule property_name
[^:}]+
<PropertyNode>
end
rule property_value
[^;]+
<PropertyNode>
end
rule selectors
selector (!closure ',' selector)*
<SelectorNode>
end
rule selector
element (space+ !closure element)*
<SelectorNode>
end
rule element
class/id
end
rule id
('#' [a-zA-Z]+)
end
rule class
('.' [a-zA-Z]+)
end
rule space
[\t ]
end
end
हार्नेस कोड:
require 'rubygems'
require 'treetop'
class PropertyNode < Treetop::Runtime::SyntaxNode
def value
"property:(#{text_value})"
end
end
class SelectorNode < Treetop::Runtime::SyntaxNode
def value
"--> #{text_value}"
end
end
Treetop.load('css')
parser = StylesheetParser.new
parser.consume_all_input = false
string = <<EOS
#hello-there .my-friend {
font-family:Verdana;
font-size:12px;
}
.my-friend, #is-cool {
font: 12px Verdana;
#he .likes-jam, #very-much {asaads:there;}
hello: there;
}
EOS
root_node = parser.parse(string)
def print_node(node, output = [])
output << node.value if node.respond_to?(:value)
node.elements.each {|element| print_node(element, output)} if node.elements
output
end
puts print_node(root_node).join("\n") if root_node
#puts parser.methods.sort.join(',')
puts parser.input
puts string[0...parser.failure_index] + '<--'
puts parser.failure_reason
puts parser.terminal_failures
क्या आप जो त्रुटि/आउटपुट प्राप्त कर रहे हैं उसे पोस्ट कर सकते हैं? –