Servon tyylisysteemin yleiskatsaus
Tämä dokumentti tarjoaa yleiskatsauksen Servon tyylisysteemistä. Laajempia yksityiskohtia varten katso style doc comments tai wikin Styling Overview, joka sisältää keskustelun Boris Zbarskyn ja Patrick Waltonin välillä siitä, miten tyylien jakaminen toimii.
Selektoritoteutus
Stylo-yhteensopivuuden varmistamiseksi (projekti, joka integroi Servon tyylisysteemin Geckoon) selektorien täytyy olla yhdenmukaisia.
Yhdenmukaisuus on toteutettu selectors’ SelectorImpl -kohdassa, joka sisältää logiikan pseudo-elementtien ja muiden pseudo-luokkien jäsentämiseen puurakenteellisten pseudo-luokkien lisäksi.
Servo laajentaa selektoritoteutuksen trait:ia salliakseen muutamien asioiden jakamisen Stylon ja Servon välillä.
Servon pääasiallinen toteutus (jota käytetään tavallisissa käännöksissä) on SelectorImpl.
DOM-liima
DOM:n, layoutin ja tyylin pitäminen eri moduuleissa vaatii muutamia trait:eja.
Stylen dom-trait:t (TDocument, TElement, TNode, TRestyleDamage) ovat pääasiallinen “muuri” layoutin ja tyylin välillä.
Layoutin wrapper-moduuli varmistaa, että layout-trait:eilla on vaaditut trait:t toteutettuina.
Stylist
stylist-rakenne sisältää kaikki selektorit ja laitteen ominaisuudet tietylle dokumentille.
Tyylitiedostojen CSS-säännöt muunnetaan Rule-objekteiksi.
Ne sijoitetaan sitten SelectorMap -rakenteeseen pseudo-elementin (katso PerPseudoElementSelectorMap), tyylitiedoston originin (katso PerOriginSelectorMap) ja prioriteetin (katso normal- ja important-kentät PerOriginSelectorMap -rakenteessa) mukaan.
Tämä rakenne luodaan käytännössä kerran per pipeline, vastaavassa LayoutThread:ssä.
properties-moduuli
properties module on mako-malli.
Sen monimutkaisuus johtuu koodista, joka tallentaa ominaisuuksia, cascade-funktiosta ja palautetun arvon laskentalogiikasta, joka on altistettu pääfunktiossa.