my fork of dmp
Diffstat (limited to 'src/html.rs')
| -rw-r--r-- | src/html.rs | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/src/html.rs b/src/html.rs new file mode 100644 index 0000000..b312991 --- /dev/null +++ b/src/html.rs @@ -0,0 +1,149 @@ +/// A struct representing some properties to control the [`pretty_html`] generation. +/// The `insert_tag`, `delete_tag` and `equality_tag` represents the `html` tag to wrap the part of the text being inserted, deleted or equality. +/// +/// E.g. if `insert_tag` is set to `span`, the text to be inserted will be wrapped around with `<span>some text to insert</span>`. +/// `insert_tag` defaults to the `ins` tag, `delete_tag` defaults to the `del` tag and `equality_tag` defaults to `span`. +/// +/// `nltobr` switch enables or disables replacing of `\n` in the text with a `<br>` element. Defaults to `true` +/// +/// `insert_class`, `delete_class` or `equality_class` if set will be added as a `class="your css class"`. Defaults to `None` +/// +/// `insert_style`, `delete_style` and `equality_style` would add css style property to the output. +/// E.g. if `insert_style: Some("background: yellow; color: purple")` is set the +/// `insert` part of the pretty html would look like `<ins style="background: yellow; color: purple">insert text</ins>` +pub struct HtmlConfig<'a> { + insert_tag: &'a str, + delete_tag: &'a str, + equality_tag: &'a str, + nltobr: bool, + insert_class: Option<&'a str>, + delete_class: Option<&'a str>, + equality_class: Option<&'a str>, + insert_style: Option<&'a str>, + delete_style: Option<&'a str>, + equality_style: Option<&'a str> +} + +impl <'a>Default for HtmlConfig<'a> { + fn default() -> Self { + Self { + insert_tag: "ins", + delete_tag: "del", + equality_tag: "span", + nltobr: true, + insert_class: None, + delete_class: None, + equality_class: None, + insert_style: None, + delete_style: None, + equality_style: None + } + } +} + +impl <'a>HtmlConfig<'a> { + /// Creates a new instance of the struct with some defaults. + /// + /// `insert_tag` defaults to "ins". + /// + /// `delete_tag` defaults to "del" + /// + /// `equality_tag` defaults to "span" + /// + /// `nltobr` defaults to `true` + /// + /// Other fields defaults to `None` + pub fn new() -> Self { + Self::default() + } + + pub(crate) fn insert_tag(&self) -> &str { + self.insert_tag + } + + /// Set the HTML tag to be used for text inserted + pub fn set_insert_tag(&mut self, tag: &'a str) { + self.insert_tag = tag; + } + + pub(crate) fn delete_tag(&self) -> &str { + self.delete_tag + } + + /// Set the HTML tag to be used for text deleted + pub fn set_delete_tag(&mut self, tag: &'a str) { + self.delete_tag = tag; + } + + pub(crate) fn equality_tag(&self) -> &str { + self.equality_tag + } + + /// Set the HTML tag to be used for text that has not changed + pub fn set_equality_tag(&mut self, tag: &'a str) { + self.equality_tag = tag; + } + + pub(crate) fn nltobr(&self) -> bool { + self.nltobr + } + + /// Switch to control if `\nl` should be replaced with `<br>` + pub fn set_nl_to_br(&mut self, nltobr: bool) { + self.nltobr = nltobr + } + + pub(crate) fn insert_class(&self) -> Option<&'a str> { + self.insert_class + } + + /// Set the css class for the text inserted + pub fn set_insert_class(&mut self, class: Option<&'a str>) { + self.insert_class = class; + } + + pub(crate) fn delete_class(&self) -> Option<&'a str> { + self.delete_class + } + + /// Set the delete class for text deleted + pub fn set_delete_class(&mut self, class: Option<&'a str>) { + self.delete_class = class; + } + + pub(crate) fn equality_class(&self) -> Option<&'a str> { + self.equality_class + } + + /// Set the css class for text that has not changed + pub fn set_equality_class(&mut self, class: Option<&'a str>) { + self.equality_class = class; + } + + pub(crate) fn insert_style(&self) -> Option<&'a str> { + self.insert_style + } + + /// Set the css style property for text inserted + pub fn set_insert_style(&mut self, style: Option<&'a str>) { + self.insert_style = style; + } + + pub(crate) fn delete_style(&self) -> Option<&'a str> { + self.delete_style + } + + /// Set the css style property for text deleted + pub fn set_delete_style(&mut self, style: Option<&'a str>) { + self.delete_style = style; + } + + pub(crate) fn equality_style(&self) -> Option<&'a str> { + self.equality_style + } + + /// Set the css style for text that has not changed + pub fn set_equality_style(&mut self, style: Option<&'a str>) { + self.equality_style = style; + } +}
\ No newline at end of file |