Csspool 0.2.0 Released

Gossip Girl says:

csspool version 0.2.0 has been released!

CSSpool (pronounced “cesspool”) is a validating SAC parser for CSS. The
parser
calls methods on a document handler depending on what it has found.
CSSPool
currently only supports CSS 2.1. CSSPool will not yield invalid
properties or
selectors.

Changes:

0.2.0

  • Added CSS::SAC::Parser#parse_rule to parse a single rule.

  • Added CSS::StyleSheet#find_rule for finding a particular rule.

  • Added CSS::StyleSheet#rules_matching for finding all rules matching a
    node.

  • Added CSS::StyleSheet#create_rule for creating a new rule.

  • Added CSS::StyleSheet#find_all_rules_matching for finding all rules
    that match
    any node in the passed in document.

  • Added .eql? to selector AST

  • Added .hash to selector AST

  • Added .eql? to LexicalUnits

  • Added .hash to LexicalUnits

  • Added CSS::StyleSheet#to_css

  • Added CSS::StyleSheet#reduce!

  • CSS::StyleSheet is now the default document handler

  • http://csspool.rubyforge.org/

This is a tenderlovemaking dot com joint.

On 11/29/07, Aaron P. [email protected] wrote:

[Snip]
Hi Aaron,

Long time listener, first time caller… Love the show, btw.

I’ve been toying around with the lib and I noticed some issues:

  • the Manifest tends to contain a .DS_Store entry which crashes rake
    package so rake install_gem (the way i usually install csspool) fails
    with: “Don’t know how to build task ‘.DS_Store’”.

  • the example on the homepage doesn’t work for me. I get
    “uninitialized constant CSS::SAC::Parse (NameError)” when I try to run
    it. However, the earlier examples, which show inheriting from
    CSS::SAC::DocumentHandler work for me, if i also add a “require
    ‘rubygems’” first

  • the following css breaks css breaks the parser and makes it ignore
    all rules and declarations after the error. In css, with browsrs at
    least, an error should just ignore the respective property or
    properties, so I was expecting similar behaviour. I’ll try to get my
    hands into the ragel stuff, but this might take a while since I
    haven’t done any before, saw a presentation at euruko, tho :).

So, the bad css that’s preventing me from getting a pink background
and a blue p:
a { color: red; }
body { border: solid 1px; #000; color: pink; }
p { color: blue; }

This is a tenderlovemaking dot com joint.


Aaron P.
http://tenderlovemaking.com/

Again, thanks a lot for this project, it’s looking really cool and
useful :).

Cheers,
Cristi

On Nov 29, 2007, at 1:27 AM, Cristi BALAN wrote:

found. CSSPool

  • the following css breaks css breaks the parser and makes it ignore
    p { color: blue; }

Problem here is bad CSS.
you have:

body { border: solid 1px; #000; color: pink; }
which could also be this with more space:
body {
border: solid 1px; /* this border will default to black, but perhaps
you intended the #000 to be in this line notice your extra
semicolon … /
#000; /
no property listed! /
color: pink; /
this gives you pink text */
}

When you don’t make it so tightly compact, you can see the mistake, I
hope. Nothing there is going to give you a pink background.
you need to put:
background-color: pink;
Inside of either declaration body or p.

On 11/29/07, John J. [email protected] wrote:

CSSpool (pronounced “cesspool”) is a validating SAC parser for
Long time listener, first time caller… Love the show, btw.
haven’t done any before, saw a presentation at euruko, tho :).
you have:
When you don’t make it so tightly compact, you can see the mistake, I
hope. Nothing there is going to give you a pink background.
you need to put:
background-color: pink;
Inside of either declaration body or p.

Hi John,

Yes, and the error is there on purpose.

I was reporting a bug in the way such errors are handled by the
csspool parser. Instead of just skipping the declarations you
correctly noticed in the css, it stops parsing the rest of the css
file.

I would have expected the color: pink for body and p { color: blue; }
to get parsed in spite of the error.

Cristi

On Nov 29, 2007, at 12:49 PM, Cristi BALAN wrote:

hands into the ragel stuff, but this might take a while since I
Problem here is bad CSS.
}
Yes, and the error is there on purpose.


Cristi BALAN
http://evil.che.lu/

Oops, sorry for the noise then!!
I’m always amazed at browsers parsing css so quickly anyway.
Even more amazed that they usually get it right. (well not all of them)

On Thu, Nov 29, 2007 at 04:27:39PM +0900, Cristi BALAN wrote:

selectors.
with: “Don’t know how to build task ‘.DS_Store’”.
Doh. I don’t know why that is there. I’ll remove it and release again.

  • the example on the homepage doesn’t work for me. I get
    “uninitialized constant CSS::SAC::Parse (NameError)” when I try to run
    it. However, the earlier examples, which show inheriting from
    CSS::SAC::DocumentHandler work for me, if i also add a “require
    ‘rubygems’” first

Yes, because I made a typo. Try CSS::SAC::Parser.

a { color: red; }
body { border: solid 1px; #000; color: pink; }
p { color: blue; }

Great! Thanks for the test case. I’ll add that to my test suite and
get it working.

Again, thanks a lot for this project, it’s looking really cool and useful :).
Thanks. Keep the bugs coming, I need them to make it mo betta.