3 个版本
0.1.2 | 2024年2月1日 |
---|---|
0.1.1 | 2024年2月1日 |
0.1.0 | 2024年2月1日 |
#1778 在 解析实现
36KB
644 行
Bevy-UI 字符串解析器工具
此Rust crate提供了一组解析函数,可用于将字符串转换为各种bevy-ui类型,如Color
、Val
或UiRect
。语法与CSS匹配,但并不试图完美复制。
它依赖于nom库进行解析。
解析器
颜色
解析颜色值,例如#f0f
或yellow
。
use bevy::render::color::Color;
use bevy_ui_string_parser::color_string_parser;
let color: Option<Color> = color_string_parser("#f00");
assert_eq!(color, Some(Color::RED));
支持的语法
red
、blue
-> css颜色名称(见https://drafts.csswg.org/css-color/#named-colors)#f0f
、#ff00ff
-> 16进制颜色(3或6位数字)#ff00ff00
-> 带alpha的16进制颜色(8位数字)rgb(1.0, 0.0, 0.0)
-> rgb颜色(0.0-1.0)rgba(1.0, 0.0, 0.0, 1.0)
-> 带alpha的rgb颜色(0.0-1.0)hsl(0.0, 1.0, 0.5)
-> hsl颜色(0.0-1.0)hsla(0.0, 1.0, 0.5, 1.0)
-> 具有透明度的hsl颜色(0.0-1.0)
Val
解析Val值,例如 1px
或 50%
。
use bevy::ui::Val;
use bevy_ui_string_parser::val_string_parser;
let value: Option<Val> = val_string_parser("45%");
assert_eq!(value, Some(Val::Percent(45.0)));
支持的语法
auto
->Val::Auto
12px
->Val::Px(12.0)
12%
->Val::Percent(12.0)
12vw
->Val::Vw(12.0)
12vh
->Val::Vh(12.0)
12vmin
->Val::VMin(12.0)
12vmax
->Val::VMax(12.0)
Rect
解析UiRect值,例如 25px 50px
。
此顺序与CSS属性如 padding
或 margin
相同,更多信息请参阅 mdn。
use bevy::ui::{UiRect, Val};
use bevy_ui_string_parser::rect_string_parser;
let rect: Option<UiRect> = rect_string_parser("50px 100px");
assert_eq!(rect, Some(UiRect::new(
Val::Px(100.0), Val::Px(100.0), Val::Px(50.0), Val::Px(50.0))));
支持的语法
10px 20px 30px 40px
->top | right | bottom | left
10px 20px 10px
->top | left and right | bottom
10px 20px
->top and bottom | left and right
10px
->top, right, bottom and left
Angle
解析角度为浮点值,例如 180deg
,返回弧度。
use bevy_ui_string_parser::angle_string_parser;
let angle: Option<f32> = angle_string_parser("180deg");
assert_eq!(angle, Some(180.0_f32.to_radians()));
支持的语法
180deg
->3.14159265359
1.3rad
->1.3
1.3
->1.3
Serde
每个解析器还提供 serde 解序列化器 *_serde_parser
,例如
use serde::Deserialize;
use std::f32::consts::PI;
#[derive(Deserialize)]
pub struct Foo {
#[serde(deserialize_with = "bevy_ui_string_parser::angle_serde_parser")]
pub angle: f32,
}
let foo: Foo = serde_json::from_str(r#"{"angle": "180deg"}"#).unwrap();
assert_eq!(foo.angle, PI);
它需要可选的 serde
功能。
变更日志
v0.1.2
将 serde 功能设为可选v0.1.1
添加了READMEv0.1.0
首次发布
依赖项
约23MB
约419K SLoC