Start to perform Tex export
This commit is contained in:
parent
ed0d8e05f1
commit
4f07dc2d73
51
src/main.rs
51
src/main.rs
@ -29,6 +29,9 @@ enum Action {
|
||||
|
||||
/// Dump as Graphviz graph
|
||||
Graph,
|
||||
|
||||
/// Dump as Tex list
|
||||
Tex,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
@ -47,6 +50,8 @@ fn main() {
|
||||
match args.action {
|
||||
Action::Json => println!("{}", serde_json::to_string(&tree).unwrap()),
|
||||
Action::Graph => println!("{}", graphviz_export(&tree)),
|
||||
|
||||
Action::Tex => println!("{}", tex_export(&tree)),
|
||||
}
|
||||
}
|
||||
|
||||
@ -79,3 +84,49 @@ fn graphviz_export(tree: &TreeNode) -> String {
|
||||
out.push_str("}\n");
|
||||
out
|
||||
}
|
||||
|
||||
fn tex_export_inner(tree: &TreeNode, out: &mut String, required: bool) {
|
||||
let type_str = match &tree.r#type {
|
||||
NodeType::Null => "NULL".to_string(),
|
||||
NodeType::Boolean => "Boolean".to_string(),
|
||||
NodeType::Array { item } => format!("{}[]", item.name),
|
||||
NodeType::Object { .. } => "Objet".to_string(),
|
||||
NodeType::String => "String".to_string(),
|
||||
NodeType::Number => "Nombre".to_string(),
|
||||
NodeType::Integer => "Integer".to_string(),
|
||||
};
|
||||
|
||||
write!(out, "\\textbf{{{}}}", tree.name).unwrap();
|
||||
if required {
|
||||
out.push_str("\\textcolor{red}{*}");
|
||||
}
|
||||
out.push_str("\n\\newline");
|
||||
|
||||
write!(out, "\\textbf{{gray}}{{{type_str}}}").unwrap();
|
||||
}
|
||||
|
||||
fn tex_export(tree: &TreeNode) -> String {
|
||||
let mut out = String::new();
|
||||
writeln!(out, "% START OF EXPORT OF STRUCTURE {}", tree.name).unwrap();
|
||||
|
||||
match &tree.r#type {
|
||||
NodeType::Object { children, required } => {
|
||||
for child in children {
|
||||
tex_export_inner(
|
||||
child,
|
||||
&mut out,
|
||||
required
|
||||
.as_ref()
|
||||
.map(|r| r.contains(&child.name))
|
||||
.unwrap_or(false),
|
||||
);
|
||||
|
||||
out.push_str("\n\n");
|
||||
}
|
||||
}
|
||||
_ => tex_export_inner(tree, &mut out, false),
|
||||
}
|
||||
|
||||
writeln!(out, "% END OF EXPORT OF STRUCTURE {}", tree.name).unwrap();
|
||||
out
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user