Helpers.cpp 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /*
  2. * Copyright (c) 2018-2022, Andreas Kling <kling@serenityos.org>
  3. * Copyright (c) 2020-2023, the SerenityOS developers.
  4. * Copyright (c) 2021-2023, 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. auto parser = CSS::Parser::Parser::create(context, css).release_value_but_fixme_should_propagate_errors();
  23. return parser.parse_as_css_stylesheet(location);
  24. }
  25. CSS::ElementInlineCSSStyleDeclaration* parse_css_style_attribute(CSS::Parser::ParsingContext const& context, StringView css, DOM::Element& element)
  26. {
  27. if (css.is_empty())
  28. return CSS::ElementInlineCSSStyleDeclaration::create(element, {}, {});
  29. auto parser = CSS::Parser::Parser::create(context, css).release_value_but_fixme_should_propagate_errors();
  30. return parser.parse_as_style_attribute(element);
  31. }
  32. RefPtr<CSS::StyleValue> parse_css_value(CSS::Parser::ParsingContext const& context, StringView string, CSS::PropertyID property_id)
  33. {
  34. if (string.is_empty())
  35. return nullptr;
  36. auto parser = MUST(CSS::Parser::Parser::create(context, string));
  37. return parser.parse_as_css_value(property_id);
  38. }
  39. CSS::CSSRule* parse_css_rule(CSS::Parser::ParsingContext const& context, StringView css_text)
  40. {
  41. auto parser = CSS::Parser::Parser::create(context, css_text).release_value_but_fixme_should_propagate_errors();
  42. return parser.parse_as_css_rule();
  43. }
  44. Optional<CSS::SelectorList> parse_selector(CSS::Parser::ParsingContext const& context, StringView selector_text)
  45. {
  46. auto parser = CSS::Parser::Parser::create(context, selector_text).release_value_but_fixme_should_propagate_errors();
  47. return parser.parse_as_selector();
  48. }
  49. RefPtr<CSS::MediaQuery> parse_media_query(CSS::Parser::ParsingContext const& context, StringView string)
  50. {
  51. auto parser = CSS::Parser::Parser::create(context, string).release_value_but_fixme_should_propagate_errors();
  52. return parser.parse_as_media_query();
  53. }
  54. Vector<NonnullRefPtr<CSS::MediaQuery>> parse_media_query_list(CSS::Parser::ParsingContext const& context, StringView string)
  55. {
  56. auto parser = CSS::Parser::Parser::create(context, string).release_value_but_fixme_should_propagate_errors();
  57. return parser.parse_as_media_query_list();
  58. }
  59. RefPtr<CSS::Supports> parse_css_supports(CSS::Parser::ParsingContext const& context, StringView string)
  60. {
  61. if (string.is_empty())
  62. return {};
  63. auto parser = CSS::Parser::Parser::create(context, string).release_value_but_fixme_should_propagate_errors();
  64. return parser.parse_as_supports();
  65. }
  66. Optional<CSS::StyleProperty> parse_css_supports_condition(CSS::Parser::ParsingContext const& context, StringView string)
  67. {
  68. if (string.is_empty())
  69. return {};
  70. auto parser = CSS::Parser::Parser::create(context, string).release_value_but_fixme_should_propagate_errors();
  71. return parser.parse_as_supports_condition();
  72. }
  73. }