Преглед изворни кода

LibWeb: Add CSS::UnicodeRange class

This corresponds to `<urange>` in CSS grammar.
Sam Atkins пре 3 година
родитељ
комит
1f7bf46061
2 измењених фајлова са 44 додато и 0 уклоњено
  1. 43 0
      Userland/Libraries/LibWeb/CSS/UnicodeRange.h
  2. 1 0
      Userland/Libraries/LibWeb/Forward.h

+ 43 - 0
Userland/Libraries/LibWeb/CSS/UnicodeRange.h

@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2022, Sam Atkins <atkinssj@serenityos.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#pragma once
+
+#include <AK/Assertions.h>
+
+namespace Web::CSS {
+
+// https://www.w3.org/TR/css-syntax-3/#urange-syntax
+class UnicodeRange {
+public:
+    UnicodeRange(u32 min_code_point, u32 max_code_point)
+        : m_min_code_point(min_code_point)
+        , m_max_code_point(max_code_point)
+    {
+        VERIFY(min_code_point <= max_code_point);
+    }
+
+    u32 min_code_point() const { return m_min_code_point; }
+    u32 max_code_point() const { return m_max_code_point; }
+
+    bool contains(u32 code_point) const
+    {
+        return m_min_code_point <= code_point && code_point <= m_max_code_point;
+    }
+
+    String to_string() const
+    {
+        if (m_min_code_point == m_max_code_point)
+            return String::formatted("U+{:x}", m_min_code_point);
+        return String::formatted("U+{:x}-{:x}", m_min_code_point, m_max_code_point);
+    }
+
+private:
+    u32 m_min_code_point;
+    u32 m_max_code_point;
+};
+
+}

+ 1 - 0
Userland/Libraries/LibWeb/Forward.h

@@ -89,6 +89,7 @@ class Time;
 class TimePercentage;
 class TimeStyleValue;
 class TransformationStyleValue;
+class UnicodeRange;
 class UnresolvedStyleValue;
 class UnsetStyleValue;
 }