Selector.cpp 1002 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. /*
  2. * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <LibWeb/CSS/Selector.h>
  7. namespace Web::CSS {
  8. Selector::Selector(Vector<ComplexSelector>&& component_lists)
  9. : m_complex_selectors(move(component_lists))
  10. {
  11. }
  12. Selector::~Selector()
  13. {
  14. }
  15. u32 Selector::specificity() const
  16. {
  17. unsigned ids = 0;
  18. unsigned tag_names = 0;
  19. unsigned classes = 0;
  20. for (auto& list : m_complex_selectors) {
  21. for (auto& simple_selector : list.compound_selector) {
  22. switch (simple_selector.type) {
  23. case SimpleSelector::Type::Id:
  24. ++ids;
  25. break;
  26. case SimpleSelector::Type::Class:
  27. ++classes;
  28. break;
  29. case SimpleSelector::Type::TagName:
  30. ++tag_names;
  31. break;
  32. default:
  33. break;
  34. }
  35. }
  36. }
  37. return ids * 0x10000 + classes * 0x100 + tag_names;
  38. }
  39. }