A library for generating indented scoped text documents consisting of reusable parts.
There are three major steps involved in using idoc:
- Creating document(s)
- Adding document(s) to a render context
- Render output
Simple example
use std::sync::Arc;
use sidoc::{Builder, RenderContext};
fn create_doc() {
// Use a builder to generate document
let mut bldr = Builder::new();
bldr.line(" ");
bldr.scope(" ", Some(" ")).exit();
let doc = bldr.build().unwrap();
// Create a render context, add document to it
let mut r = RenderContext::new();
r.doc("root", Arc::new(doc));
// Render the output
let buf = r.render("root").unwrap();
assert_eq!(buf, " \n \n \n");
}
Reference example
use std::sync::Arc;
use sidoc::{Builder, RenderContext};
fn create_doc() {
// Use a builder to generate root document
let mut bldr = Builder::new();
bldr.scope(" ", Some(" ")).exit();
let doc = bldr.build().unwrap();
// Use a builder to generate sub document
let mut bldr = Builder::new();
bldr.scope(" ", Some(" ")).exit();
let subdoc = bldr.build().unwrap();
// Create a render context, add documents to it
let mut r = RenderContext::new();
r.doc("root", Arc::new(doc));
r.doc("head", Arc::new(subdoc));
// Render the output
let buf = r.render("root").unwrap();
assert_eq!(buf, " \n \n \n \n");
}