Mon Jan 4 06:32:27 UTC 2010 pix@kepibu.org * :empty selector diff -rN -u old-Oh, Ducks!/notes new-Oh, Ducks!/notes --- old-Oh, Ducks!/notes 2015-11-15 14:59:00.000000000 +0000 +++ new-Oh, Ducks!/notes 2015-11-15 14:59:00.000000000 +0000 @@ -134,7 +134,7 @@ * [ ] selectors involving descendants ** write documentation ** improve selector support -*** positional selectors [18/19] +*** positional selectors [19/19] * [X] :nth-child(an+b) * [X] :nth-child(b) * [X] :nth-child(odd|even) @@ -153,7 +153,7 @@ * [X] :last-of-type * [X] :only-child * [X] :only-of-type - * [ ] :empty + * [X] :empty *** attribute selectors [0/7] * [ ] attribute-present [att] * [ ] attribute-equal [att=val] diff -rN -u old-Oh, Ducks!/selectors.lisp new-Oh, Ducks!/selectors.lisp --- old-Oh, Ducks!/selectors.lisp 2015-11-15 14:59:00.000000000 +0000 +++ new-Oh, Ducks!/selectors.lisp 2015-11-15 14:59:00.000000000 +0000 @@ -40,6 +40,7 @@ (defclass nth-last-child-selector (nth-child-selector) ()) (defclass nth-of-type-selector (nth-child-selector) ()) (defclass nth-last-of-type-selector (nth-of-type-selector) ()) +(defclass empty-selector (simple-selector) ()) (defmethod initialize-instance :after ((selector nth-child-selector) &key (asign "+") a @@ -182,6 +183,8 @@ (list* (make-instance 'nth-of-type-selector :a 0 :b 1) (make-instance 'nth-last-of-type-selector :a 0 :b 1) (parse-selector &rest))) + (#T(regexp$ (":empty") ()) + (cons (make-instance 'empty-selector) (parse-selector &rest))) (#T(regexp$ (#\# $name) (?id)) (cons (make-instance 'id-selector :arg id) (parse-selector &rest))) (#T(regexp$ (#\. $name) (?class)) @@ -246,6 +249,9 @@ (remove-if-not (rcurry #'element-type-equal (element-type element)) (element-children parent)))))) +(defmethod subject-p ((selector empty-selector) element) + (= 0 (length (element-children element)))) + (defmethod subject-p ((selector class-selector) element) (member (selector-arg selector) (element-classes element) diff -rN -u old-Oh, Ducks!/tests.lisp new-Oh, Ducks!/tests.lisp --- old-Oh, Ducks!/tests.lisp 2015-11-15 14:59:00.000000000 +0000 +++ new-Oh, Ducks!/tests.lisp 2015-11-15 14:59:00.000000000 +0000 @@ -87,6 +87,11 @@ "
I really like cheese. Do you not dislike cheese?
") (values i)) +(match (#T(html (:model pt) + ("body :empty" . ?empty)) + "


testingitesting

") + (values empty)) + ;; Sometimes, you want to match a thing inside a thing, in which case ;; combinators should implicitly assume an unspecified right side means ;; "whatever element I gave you".