Helpers.cpp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /*
  2. * Copyright (c) 2018-2022, Andreas Kling <kling@serenityos.org>
  3. * Copyright (c) 2020-2023, the SerenityOS developers.
  4. * Copyright (c) 2021-2024, Sam Atkins <atkinssj@serenityos.org>
  5. * Copyright (c) 2021, Tobias Christiansen <tobyase@serenityos.org>
  6. * Copyright (c) 2022, MacDue <macdue@dueutil.tech>
  7. *
  8. * SPDX-License-Identifier: BSD-2-Clause
  9. */
  10. #include <LibWeb/CSS/CSSMediaRule.h>
  11. #include <LibWeb/CSS/CSSRuleList.h>
  12. #include <LibWeb/CSS/CSSStyleSheet.h>
  13. #include <LibWeb/CSS/Parser/Parser.h>
  14. namespace Web {
  15. CSS::CSSStyleSheet* parse_css_stylesheet(CSS::Parser::ParsingContext const& context, StringView css, Optional<URL::URL> location)
  16. {
  17. if (css.is_empty()) {
  18. auto rule_list = CSS::CSSRuleList::create_empty(context.realm());
  19. auto media_list = CSS::MediaList::create(context.realm(), {});
  20. return CSS::CSSStyleSheet::create(context.realm(), rule_list, media_list, location);
  21. }
  22. return CSS::Parser::Parser::create(context, css).parse_as_css_stylesheet(location);
  23. }
  24. CSS::ElementInlineCSSStyleDeclaration* parse_css_style_attribute(CSS::Parser::ParsingContext const& context, StringView css, DOM::Element& element)
  25. {
  26. if (css.is_empty())
  27. return CSS::ElementInlineCSSStyleDeclaration::create(element, {}, {});
  28. return CSS::Parser::Parser::create(context, css).parse_as_style_attribute(element);
  29. }
  30. RefPtr<CSS::CSSStyleValue> parse_css_value(CSS::Parser::ParsingContext const& context, StringView string, CSS::PropertyID property_id)
  31. {
  32. if (string.is_empty())
  33. return nullptr;
  34. return CSS::Parser::Parser::create(context, string).parse_as_css_value(property_id);
  35. }
  36. CSS::CSSRule* parse_css_rule(CSS::Parser::ParsingContext const& context, StringView css_text)
  37. {
  38. return CSS::Parser::Parser::create(context, css_text).parse_as_css_rule();
  39. }
  40. Optional<CSS::SelectorList> parse_selector(CSS::Parser::ParsingContext const& context, StringView selector_text)
  41. {
  42. return CSS::Parser::Parser::create(context, selector_text).parse_as_selector();
  43. }
  44. Optional<CSS::Selector::PseudoElement> parse_pseudo_element_selector(CSS::Parser::ParsingContext const& context, StringView selector_text)
  45. {
  46. return CSS::Parser::Parser::create(context, selector_text).parse_as_pseudo_element_selector();
  47. }
  48. RefPtr<CSS::MediaQuery> parse_media_query(CSS::Parser::ParsingContext const& context, StringView string)
  49. {
  50. return CSS::Parser::Parser::create(context, string).parse_as_media_query();
  51. }
  52. Vector<NonnullRefPtr<CSS::MediaQuery>> parse_media_query_list(CSS::Parser::ParsingContext const& context, StringView string)
  53. {
  54. return CSS::Parser::Parser::create(context, string).parse_as_media_query_list();
  55. }
  56. RefPtr<CSS::Supports> parse_css_supports(CSS::Parser::ParsingContext const& context, StringView string)
  57. {
  58. if (string.is_empty())
  59. return {};
  60. return CSS::Parser::Parser::create(context, string).parse_as_supports();
  61. }
  62. Optional<CSS::StyleProperty> parse_css_supports_condition(CSS::Parser::ParsingContext const& context, StringView string)
  63. {
  64. if (string.is_empty())
  65. return {};
  66. return CSS::Parser::Parser::create(context, string).parse_as_supports_condition();
  67. }
  68. }