9 个版本

使用旧的 Rust 2015

0.2.2 2018 年 3 月 21 日
0.2.1 2018 年 3 月 21 日
0.1.5 2018 年 3 月 12 日

#1807Rust 模式

Download history 1/week @ 2024-03-10 9/week @ 2024-03-31 228/week @ 2024-06-09 9/week @ 2024-06-16

每月 237 次下载

MIT/Apache

17KB
337

svgmacro

Cargo Documentation
一个用于编写 SVG 的 Rust 库。可以编写任何 SVG 元素。在 Rust 中定义的函数调用和变量可以在 SVG 中无障碍使用。

将以下内容添加到您的 Cargo.toml 文件中

svgmacro = "0.2.2"

要在您的模块中使用该软件包,只需添加

#[macro_use]
extern crate svgmacro;

示例

要使用宏,创建一个新的 String 来存储结果,并添加 "use std::fmt:Write" 以能够成功写入它。

use std::fmt::Write;
let mut out = String::new();

以下是一个使用宏的快速示例。SVG 元素和属性由其 SVG 参考中找到的常规名称定义。

use std::fmt::Write;
let mut out = String::new();

SVG!(&mut out,
    svg (width="100" height="100") [
        circle (cx="50" cy="50" r="30")
    ]
);

结果写入 out

<svg width="100" height="100">
    <circle cx="50" cy="50" r="30"/>
</svg>

元素、括号和方括号

通过元素标签以纯文本形式定义元素,其属性在括号 () 中,其子元素在方括号 [] 中。这些都是有效语法(注意您不必同时使用方括号和括号)。

g (fill="red") [circle (cx="10" cy="10" r="10")]
g () [circle (cx="10" cy="10" r="10")]
g (fill="red") []
circle (cx="10" cy="10" r="10")
text ["Test"]

嵌套元素和多个属性

通过将新元素放入其父元素的 []-方括号内来嵌套元素。通过空格分隔它们来添加多个属性。

SVG!(&mut out,
    svg [
        g(size="12" color="red") [
            circle(cx="10" cy="10" r="10")
            circle(cx="20" cy="20" r="10")
        ]
        g(color="red") [
            circle(cx="20" cy="20" r="10")
        ]
    ]
);

Rust 表达式、函数和变量在 SVG 中的使用

通过将它们包裹在 {} 封闭式中处理变量和返回函数调用,用 @-符号表示表达式(如 void 函数、for 循环和 if 表达式(任何 Rust 代码都行)),并用分号终止。

use std::fmt::Write;
let mut out = String::new()

// Define your variables
let width = "200";
let height = "100";

SVG!(&mut out,
    svg (width={width} height={height}) [
        g(fill={get_color()}) [
            @ create_cool_shape(&mut out); 
        ]
        g [
            @ for i in 1..3 {
                let radius = 15*i;
                // It is important to call the macro again, when using it from inside and expression.
                SVG!(&mut out, circle(cx={10*i} cy="10" r={radius}));
            }; 
        ]
    ]
);

无运行时依赖