aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhilipp A2020-10-25 17:46:51 +0100
committerPhilipp A2020-10-25 17:46:51 +0100
commit126dc6cfddf91c4cdac2b7d4cfb961019f3c6784 (patch)
treede3e7c65c9c8e329a3b08342c4c2e2762aadffff
parentb0c55246570b9c04e732eee43e6c02d6f3a043a4 (diff)
downloadrust-rst-126dc6cfddf91c4cdac2b7d4cfb961019f3c6784.tar.bz2
Initial options impl
-rw-r--r--.vscode/tasks.json18
-rw-r--r--renderer/src/html.rs8
-rw-r--r--renderer/src/lib.rs1
-rw-r--r--renderer/src/opt.rs93
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()
+ }
+}