diff options
Diffstat (limited to 'rst')
| -rw-r--r-- | rst/Cargo.toml | 6 | ||||
| -rw-r--r-- | rst/src/main.rs | 82 |
2 files changed, 44 insertions, 44 deletions
diff --git a/rst/Cargo.toml b/rst/Cargo.toml index a0a288e..310fab6 100644 --- a/rst/Cargo.toml +++ b/rst/Cargo.toml @@ -1,6 +1,6 @@ [package] name = 'rst' -version = '0.3.0' +version = '0.4.0' authors = ['Philipp A. <flying-sheep@web.de>'] edition = '2018' description = 'a reStructuredText parser and renderer for the command line' @@ -12,8 +12,8 @@ homepage = 'https://github.com/flying-sheep/rust-rst' repository = 'https://github.com/flying-sheep/rust-rst' [dependencies] -rst_renderer = { path = '../renderer', version = '0.3.0' } -rst_parser = { path = '../parser', version = '0.3.0' } +rst_renderer = { path = '../renderer', version = '0.4.0' } +rst_parser = { path = '../parser', version = '0.4.0' } quicli = '0.4.0' structopt = '0.2.15' diff --git a/rst/src/main.rs b/rst/src/main.rs index 1418a5e..6a7ed44 100644 --- a/rst/src/main.rs +++ b/rst/src/main.rs @@ -1,59 +1,59 @@ -use structopt::StructOpt; use clap::arg_enum; use quicli::{ - fs::read_file, - prelude::{CliResult,Verbosity}, + fs::read_file, + prelude::{CliResult, Verbosity}, }; +use structopt::StructOpt; use rst_parser::parse; -use rst_renderer::{ - render_json, - render_xml, - render_html, -}; +use rst_renderer::{render_html, render_json, render_xml}; use std::io::{self, Read}; arg_enum! { - #[derive(Debug)] - #[allow(non_camel_case_types)] - enum Format { json, xml, html } + #[derive(Debug)] + #[allow(non_camel_case_types)] + enum Format { json, xml, html } } #[derive(Debug, StructOpt)] #[structopt(raw(setting = "structopt::clap::AppSettings::ColoredHelp"))] struct Cli { - #[structopt( - long = "format", short = "f", default_value = "html", // xml is pretty defunct… - raw(possible_values = "&Format::variants()", case_insensitive = "true"), - )] - format: Format, - file: Option<String>, - #[structopt(flatten)] - verbosity: Verbosity, + #[structopt( + long = "format", short = "f", default_value = "html", // xml is pretty defunct… + raw(possible_values = "&Format::variants()", case_insensitive = "true"), + )] + format: Format, + file: Option<String>, + #[structopt(flatten)] + verbosity: Verbosity, } fn main() -> CliResult { - let args = Cli::from_args(); - args.verbosity.setup_env_logger("rst")?; - - let content = if let Some(file) = args.file { - read_file(file)? - } else { - let mut stdin = String::new(); - io::stdin().read_to_string(&mut stdin)?; - - stdin - }; - - // TODO: somehow make it work without replacing tabs - let content = content.replace('\t', " ".repeat(8).as_ref()); - let document = parse(&content)?; - let stdout = std::io::stdout(); - match args.format { - Format::json => render_json(&document, stdout)?, - Format::xml => render_xml (&document, stdout)?, - Format::html => render_html(&document, stdout, true)?, - } - Ok(()) + let args = Cli::from_args(); + args.verbosity.setup_env_logger("rst")?; + + let content = if let Some(file) = args.file { + read_file(file)? + } else { + let mut stdin = String::new(); + io::stdin().read_to_string(&mut stdin)?; + + stdin + }; + + // TODO: somehow make it work without replacing tabs + let mut content = read_file(args.file)?.replace('\t', " ".repeat(8).as_ref()); + // Allows for less complex grammar + if !content.ends_with('\n') { + content.push('\n'); + } + let document = parse(&content)?; + let stdout = std::io::stdout(); + match args.format { + Format::json => render_json(&document, stdout)?, + Format::xml => render_xml (&document, stdout)?, + Format::html => render_html(&document, stdout, true)?, + } + Ok(()) } |
