Expand description
A simple CSS parsing and transformation framework. Procss can be used to quickly bundle a collection of CSS+ files, or write your own custom transforms.
§Usage
Procss’s parser understands a nested superset of CSS (which we refer to as
CSS+), similar to the CSS nesting proposal,
or languages like Sass. Start with source CSS+
as a str, use crate::parse or crate::parse_unchecked to generate
an ast::Tree.
use procss::{ast, parse};
let ast = procss::parse("div{.open{color:red;}}").unwrap();The resulting ast::Tree can be converted to a de-nested ast::Css
with the ast::Tree::flatten_tree method, which itself can then be
rendered as a plain browser-readable CSS string via the
RenderCss::as_css_string trait method.
use procss::RenderCss;
let flat: ast::Css = ast.flatten_tree();
let css: String = flat.as_css_string();
assert_eq!(css, "div .open{color:red;}");Intermediate structs ast::Css::transform amd ast::Tree::transform
can be used to recursively mutate a tree for a variety of node structs in
the ast module. Some useful Example of such transforms can be
found in the transformers module.
use procss::transformers;
let test = "
@mixin test {color: red;}
div {@include test;}
";
let mut ast = procss::parse(test).unwrap();
transformers::apply_mixin(&mut ast);
let mut flat = ast.flatten_tree();
transformers::remove_mixin(&mut flat);
let css = flat.as_css_string();
assert_eq!(css, "div{color:red;}");For coordinating large builds on a tree of CSS files, the BuildCss
struct can parse and minify, applying all transforms (including
transformers::apply_import) as the compilation is left-folded over the
inputs.
let mut build = procss::BuildCss::new("./src");
build.add_file("controls/menu.scss");
build.add_file("logout.scss"); // imports "controls/menu.scss"
build.add_file("my_app.scss"); // imports "controls/menu.scss" and "logout.scss"
build.compile().unwrap().write("./dist").unwrap();Modules§
- ast
- The complete AST structs for
CssandTree. These top-level structs are part of thecrate::parseAPI, and their various components structs are necessary for writing any transformations on these between parsing and rendering. - transformers
- A collection of transformer functions, utilizing the
crate::ast::Css::transformandcrate::ast::Tree::transformmethods to apply various useful transformations on their respective structs. The exports fromcrate::transformersare functions which take a&mutto eithercrate::ast::Cssorcrate::ast::Tree. - utils
Structs§
- Build
Css - A CSS+ project build, comprising a collection of CSS+ files which may
reference eachother (via
@import).
Traits§
Functions§
- parse
- Parse CSS text to a
Tree(where it can be further manipulated), capturing detailed error reporting for a moderate performance impact (usingnom::error::VerboseError). - parse_
unchecked - Parse CSS text to a
Tree, without capturing error details, for maximum performance without any error details when parsing fails.