Join GitHub today
GitHub is home to over 50 million developers working together to host and review code, manage projects, and build software together.
Sign upImplement `:lang` CSS pseudo-class #8219
Comments
|
Can I take this? |
|
Sure. Feel free to ask if you need help. |
|
To avoid walking up the tree during selector matching we’ll want to cache the element’s language on every element’s DOM node, and update it on DOM tree changes. |
|
Now that servo/rust-selectors#75 has landed, the parsing support for |
|
The algorithm described in https://html.spec.whatwg.org/multipage/dom.html#language to determine the language of an element involves traversing the tree to look at ancestors. Since that can be expensive and might be used repeatedly during selector matching, we likely want to cache the result of that algorithm on each element nodes. (And take care to update it when e.g. a |
|
Looks like Gecko does do any such caching. I’m slightly surprised, but then the above was based only on guessing. http://searchfox.org/mozilla-central/rev/f5077ad52f8b90183e73038869f6140f0afbf427/layout/style/nsCSSRuleProcessor.cpp#1803 |
Support lang pseudo class Fixes #8219. <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/15464) <!-- Reviewable:end -->
Support lang pseudo class Fixes #8219. <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/15464) <!-- Reviewable:end -->
Support lang pseudo class Fixes #8219. <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/15464) <!-- Reviewable:end -->
Support lang pseudo class Fixes #8219. <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/15464) <!-- Reviewable:end -->
Support lang pseudo class Fixes #8219. <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/15464) <!-- Reviewable:end -->
Support lang pseudo class Fixes #8219. <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/15464) <!-- Reviewable:end -->
Support lang pseudo class Fixes #8219. <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/15464) <!-- Reviewable:end -->
Support lang pseudo class Fixes #8219. <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/15464) <!-- Reviewable:end -->
|
This doesn't seem to handle inheritance of the lang attr? Gecko implements some of the lang stuff as if it were a pres attr setting a secret internal inherit property. |
That’s what what I understand is going on…
http://searchfox.org/mozilla-central/rev/cac6cb6a10afb8ebb2ecfbeeedaff7c66f57dd75/layout/style/nsCSSRuleProcessor.cpp#1803 |
Support lang pseudo class Fixes #8219. <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/15464) <!-- Reviewable:end -->
Support lang pseudo class Fixes #8219. <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/15464) <!-- Reviewable:end -->
Support lang pseudo class Fixes #8219. <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/15464) <!-- Reviewable:end -->
Support lang pseudo class Fixes #8219. <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/15464) <!-- Reviewable:end -->
Support lang pseudo class Fixes #8219. <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/15464) <!-- Reviewable:end -->
Support lang pseudo class Fixes #8219. <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/15464) <!-- Reviewable:end -->
Support lang pseudo class Fixes #8219. <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/15464) <!-- Reviewable:end -->
Support lang pseudo class Fixes #8219. <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/15464) <!-- Reviewable:end -->
Support lang pseudo class Fixes #8219. <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/15464) <!-- Reviewable:end -->
Support lang pseudo class Fixes #8219. <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/15464) <!-- Reviewable:end -->
Spec: http://www.w3.org/TR/selectors/#lang-pseudo . Information about how to actually determine the language of an element in HTML: https://html.spec.whatwg.org/multipage/dom.html#language . The XML specification has similar language: http://www.w3.org/TR/2008/PER-xml-20080205/#sec-lang-tag .
Requires some changes to https://github.com/servo/rust-selectors so it can parse
:lang.Should be straightforward to implement.