Skip to content

premailer/css_parser

Repository files navigation

Ruby CSS Parser Build Status Gem Version

Load, parse and cascade CSS rule sets in Ruby.

Setup

gem install css_parser

Usage

require 'css_parser' include CssParser parser = CssParser::Parser.new parser.load_uri!('http://example.com/styles/style.css') parser = CssParser::Parser.new parser.load_uri!('file://home/user/styles/style.css') # load a remote file, setting the base_uri and media_types parser.load_uri!('../style.css', {base_uri: 'http://example.com/styles/inc/', media_types: [:screen, :handheld]}) # load a local file, setting the base_dir and media_types parser.load_file!('print.css', '~/styles/', :print) # load a string parser = CssParser::Parser.new parser.load_string! 'a { color: hotpink; }' # lookup a rule by a selector parser.find_by_selector('#content') #=> 'font-size: 13px; line-height: 1.2;' # lookup a rule by a selector and media type parser.find_by_selector('#content', [:screen, :handheld]) # iterate through selectors by media type parser.each_selector(:screen) do |selector, declarations, specificity| ... end # add a block of CSS css = <<-EOT  body { margin: 0 1em; } EOT parser.add_block!(css) # output all CSS rules in a single stylesheet parser.to_s => #content { font-size: 13px; line-height: 1.2; } body { margin: 0 1em; } # capturing byte offsets within a file parser.load_uri!('../style.css', {base_uri: 'http://example.com/styles/inc/', capture_offsets: true) content_rule = parser.find_rule_sets(['#content']).first content_rule.filename #=> 'http://example.com/styles/styles.css' content_rule.offset #=> 10703..10752 # capturing byte offsets within a string parser.load_string!('a { color: hotpink; }', {filename: 'index.html', capture_offsets: true) content_rule = parser.find_rule_sets(['a']).first content_rule.filename #=> 'index.html' content_rule.offset #=> 0..21

Testing

bundle bundle exec rake

Runs on Ruby 3.0/JRuby 9.4 or above.

Credits

By Alex Dunae (dunae.ca, e-mail 'code' at the same domain), 2007-11.

License: MIT

Thanks to all the wonderful contributors for their updates.

Made on Vancouver Island.

About

Ruby CSS Parser

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 62

Languages