diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
commit | 36d22d82aa202bb199967e9512281e9a53db42c9 (patch) | |
tree | 105e8c98ddea1c1e4784a60a5a6410fa416be2de /servo/components/style/properties_and_values/syntax/data_type.rs | |
parent | Initial commit. (diff) | |
download | firefox-esr-upstream.tar.xz firefox-esr-upstream.zip |
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'servo/components/style/properties_and_values/syntax/data_type.rs')
-rw-r--r-- | servo/components/style/properties_and_values/syntax/data_type.rs | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/servo/components/style/properties_and_values/syntax/data_type.rs b/servo/components/style/properties_and_values/syntax/data_type.rs new file mode 100644 index 0000000000..db5c1478db --- /dev/null +++ b/servo/components/style/properties_and_values/syntax/data_type.rs @@ -0,0 +1,91 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +use super::{Component, ComponentName, Multiplier}; + +/// <https://drafts.css-houdini.org/css-properties-values-api-1/#supported-names> +#[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq)] +pub enum DataType { + /// Any valid `<length>` value + Length, + /// `<number>` values + Number, + /// Any valid <percentage> value + Percentage, + /// Any valid `<length>` or `<percentage>` value, any valid `<calc()>` expression combining + /// `<length>` and `<percentage>` components. + LengthPercentage, + /// Any valid `<color>` value + Color, + /// Any valid `<image>` value + Image, + /// Any valid `<url>` value + Url, + /// Any valid `<integer>` value + Integer, + /// Any valid `<angle>` value + Angle, + /// Any valid `<time>` value + Time, + /// Any valid `<resolution>` value + Resolution, + /// Any valid `<transform-function>` value + TransformFunction, + /// A list of valid `<transform-function>` values. Note that "<transform-list>" is a pre-multiplied + /// data type name equivalent to "<transform-function>+" + TransformList, + /// Any valid `<custom-ident>` value + CustomIdent, +} + +impl DataType { + pub fn unpremultiply(&self) -> Option<Component> { + match *self { + DataType::TransformList => Some(Component { + name: ComponentName::DataType(DataType::TransformFunction), + multiplier: Some(Multiplier::Space), + }), + _ => None, + } + } + + pub fn from_str(ty: &str) -> Option<Self> { + Some(match ty.as_bytes() { + b"length" => DataType::Length, + b"number" => DataType::Number, + b"percentage" => DataType::Percentage, + b"length-percentage" => DataType::LengthPercentage, + b"color" => DataType::Color, + b"image" => DataType::Image, + b"url" => DataType::Url, + b"integer" => DataType::Integer, + b"angle" => DataType::Angle, + b"time" => DataType::Time, + b"resolution" => DataType::Resolution, + b"transform-function" => DataType::TransformFunction, + b"custom-ident" => DataType::CustomIdent, + b"transform-list" => DataType::TransformList, + _ => return None, + }) + } + + pub fn to_str(&self) -> &str { + match self { + DataType::Length => "length", + DataType::Number => "number", + DataType::Percentage => "percentage", + DataType::LengthPercentage => "length-percentage", + DataType::Color => "color", + DataType::Image => "image", + DataType::Url => "url", + DataType::Integer => "integer", + DataType::Angle => "angle", + DataType::Time => "time", + DataType::Resolution => "resolution", + DataType::TransformFunction => "transform-function", + DataType::CustomIdent => "custom-ident", + DataType::TransformList => "transform-list", + } + } +} |