Wydajny algorytm do porównywania specyficzności reguł CSS

Zastanawiałem się, jaki byłby skuteczny algorytm w następującym scenariuszu:

Biorąc pod uwagę przeanalizowany zestaw reguł css, np.

     p.pStyle{margin-bottom:20px;font-family:Arial;}
     p{font-family:Verdana;}
     p.anotherPStyle{margin-bottom:10px;}

z arkusza stylów css możliwe jest, że kilka zestawów reguł ma zastosowanie do danego elementu (powiedzmy a<p class="pStyle anotherPStyle">hello</p> w moim dokumencie).

Muszę najpierw określić, które reguły w arkuszu stylów mają zastosowanie do danego elementu (tak jest tutajp, pStyle and anotherPStyle), a następnie utwórz Komparator, który będzie w stanie sortować obowiązujące reguły według specyficzności (od najbardziej specyficznej do najbardziej ogólnej). UWAGA: Zaprojektowałem już algorytm do stosowania reguł po posortowaniu, więc nie musisz skutecznie rozwiązywać tego problemu.

Bawiłem się kilkoma pomysłami, a mianowicie takimi, które określają poziom w drzewie DOM, że dana reguła jest specyficzna dla ... Chociaż nie jestem pewien, czy jest to właściwy sposób?

Jak to robi silnik przeglądarki? Szukam replikacji w Javie, ale czuję się dobrze z wieloma innymi językami, więc każdy kod, który możesz zaoferować, jest najbardziej doceniany.

Dzięki

questionAnswers(1)

yourAnswerToTheQuestion