diff options
| author | Philipp A | 2020-10-25 17:46:51 +0100 | 
|---|---|---|
| committer | Philipp A | 2020-10-25 17:46:51 +0100 | 
| commit | 126dc6cfddf91c4cdac2b7d4cfb961019f3c6784 (patch) | |
| tree | de3e7c65c9c8e329a3b08342c4c2e2762aadffff | |
| parent | b0c55246570b9c04e732eee43e6c02d6f3a043a4 (diff) | |
| download | rust-rst-126dc6cfddf91c4cdac2b7d4cfb961019f3c6784.tar.bz2 | |
Initial options impl
| -rw-r--r-- | .vscode/tasks.json | 18 | ||||
| -rw-r--r-- | renderer/src/html.rs | 8 | ||||
| -rw-r--r-- | renderer/src/lib.rs | 1 | ||||
| -rw-r--r-- | renderer/src/opt.rs | 93 | 
4 files changed, 118 insertions, 2 deletions
| diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..c9419c7 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,18 @@ +{ +// Unter https://go.microsoft.com/fwlink/?LinkId=733558 +// finden Sie Informationen zum Format von "tasks.json" +    "version": "2.0.0", +    "tasks": [ +		{ +			"type": "cargo", +			"subcommand": "test", +			"problemMatcher": [ +				"$rustc" +			], +			"group": { +				"kind": "build", +				"isDefault": true +			} +		} +	] +} diff --git a/renderer/src/html.rs b/renderer/src/html.rs index bb7c42e..3dab74e 100644 --- a/renderer/src/html.rs +++ b/renderer/src/html.rs @@ -6,6 +6,7 @@ use std::io::Write;  use failure::Error;  // use crate::url::Url; +use crate::opt::{RenderOptionsStandalone, RenderOptionsStandaloneBuilder};  use document_tree::{  	Document,Element,HasChildren,ExtraAttributes,  	elements as e, @@ -17,9 +18,12 @@ use document_tree::{  // static FOOTNOTE_SYMBOLS: [char; 10] = ['*', '†', '‡', '§', '¶', '#', '♠', '♥', '♦', '♣']; -pub fn render_html<W>(document: &Document, stream: W, standalone: bool) -> Result<(), Error> where W: Write { +pub fn render_html<W, O>(document: &Document, stream: W, opts: O) -> Result<(), Error> +	where W: Write, O: Into<RenderOptionsStandalone> +{  	let mut renderer = HTMLRenderer { stream, level: 0 }; -	if standalone { +	let opts = opts.into(); +	if opts.standalone() {  		document.render_html(&mut renderer)  	} else {  		for c in document.children() { diff --git a/renderer/src/lib.rs b/renderer/src/lib.rs index 4d6bfdb..c9bc7dd 100644 --- a/renderer/src/lib.rs +++ b/renderer/src/lib.rs @@ -1,4 +1,5 @@  mod html; +mod opt;  use std::io::Write; diff --git a/renderer/src/opt.rs b/renderer/src/opt.rs new file mode 100644 index 0000000..2242624 --- /dev/null +++ b/renderer/src/opt.rs @@ -0,0 +1,93 @@ +pub struct RenderOptions { +	initial_header_level: u8, +} + +impl Default for RenderOptions { +	fn default() -> Self { +		RenderOptions { +			initial_header_level: 0, +		} +	} +} + +pub trait RenderOptionsBuilder { +	fn initial_header_level(&self) -> u8; +	fn with_initial_header_level(&mut self, lvl: u8) -> &mut Self; +} + +impl RenderOptionsBuilder for RenderOptions { +	fn initial_header_level(&self) -> u8 { +		self.initial_header_level +	} +	fn with_initial_header_level(&mut self, lvl: u8) -> &mut Self { +		self.initial_header_level = lvl; +		self +	} +} + +// standalone document formats + +pub struct RenderOptionsStandalone { +	render_options: RenderOptions, +	standalone: bool, +} + +impl Default for RenderOptionsStandalone { +	fn default() -> Self { +		RenderOptionsStandalone { +			render_options: Default::default(), +			standalone: true, +		} +	} +} + +pub trait RenderOptionsStandaloneBuilder { +	fn into_render_options(self) -> RenderOptions; +	fn render_options(&self) -> &RenderOptions; +	fn render_options_mut(&mut self) -> &mut RenderOptions; +	fn standalone(&self) -> bool; +	fn with_standalone(&mut self, standalone: bool) -> &mut Self; +} + +impl<T> RenderOptionsBuilder for T where T: RenderOptionsStandaloneBuilder { +	fn initial_header_level(&self) -> u8 { +		self.render_options().initial_header_level() +	} +	fn with_initial_header_level(&mut self, lvl: u8) -> &mut Self { +		self.render_options_mut().with_initial_header_level(lvl); +		self +	} +} + +impl RenderOptionsStandaloneBuilder for RenderOptionsStandalone { +	fn into_render_options(self) -> RenderOptions { +		self.render_options +	} +	fn render_options(&self) -> &RenderOptions { +		&self.render_options +	} +	fn render_options_mut(&mut self) -> &mut RenderOptions { +		&mut self.render_options +	} +	fn standalone(&self) -> bool { +		self.standalone +	} +	fn with_standalone(&mut self, standalone: bool) -> &mut Self { +		self.standalone = standalone; +		self +	} +} + +impl From<bool> for RenderOptionsStandalone { +	fn from(standalone: bool) -> Self { +		let mut r: RenderOptionsStandalone = Default::default(); +		r.with_standalone(standalone); +		r +	} +} + +impl<T> From<T> for RenderOptions where T: RenderOptionsStandaloneBuilder { +	fn from(opts: T) -> Self { +		opts.into_render_options() +	} +} | 
