use std::env::args;
use std::time::{SystemTime, UNIX_EPOCH};
+use preview::Preview;
use utils::{buffer_to_string, configure_sourceview, open_file, set_title};
const NAME: &str = env!("CARGO_PKG_NAME");
about_dialog.set_authors(&[AUTHORS]);
about_dialog.set_comments(DESCRIPTION);
- text_buffer.connect_changed(clone!(web_view => move |buffer| {
+ let preview = Preview::new();
+ text_buffer.connect_changed(clone!(web_view, preview => move |buffer| {
let markdown = buffer_to_string(buffer).unwrap();
- web_view.load_html(&preview::render(&markdown), None);
+ web_view.load_html(&preview.render(&markdown), None);
}));
web_view.connect_decide_policy(clone!(window => move |view, decision, _| {
// https://github.com/kivikakk/comrak
use comrak::{markdown_to_html, ComrakOptions};
-pub fn string_to_html(markdown: &str) -> String {
- let options = ComrakOptions {
- hardbreaks: true,
- ext_table: true,
- ext_strikethrough: true,
- ..ComrakOptions::default()
- };
-
- markdown_to_html(markdown, &options)
+#[derive(Clone, Debug)]
+pub struct Preview {
+ comrak_options: ComrakOptions,
}
-pub fn render(markdown: &str) -> String {
- format!(
- "{}",
- html!(
- : doctype::HTML;
- html {
- head {
- link(rel="stylesheet", href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/github.min.css") {}
- script(src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min.js") {}
- script(src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/rust.min.js") {}
- script {
- : Raw("hljs.initHighlightingOnLoad()")
+impl Preview {
+ pub fn new() -> Preview {
+ let comrak_options = ComrakOptions {
+ hardbreaks: true,
+ ext_table: true,
+ ext_strikethrough: true,
+ ..ComrakOptions::default()
+ };
+
+ Preview { comrak_options }
+ }
+
+ pub fn render(&self, markdown: &str) -> String {
+ format!(
+ "{}",
+ html!(
+ : doctype::HTML;
+ html {
+ head {
+ script(src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min.js") {}
+ script(src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/rust.min.js") {}
+ script {
+ : Raw("hljs.initHighlightingOnLoad()")
+ }
+ style {
+ : ".hljs{display:block;overflow-x:auto;padding:0.5em;color:#333;background:#f8f8f8}.hljs-comment,.hljs-quote{color:#998;font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-subst{color:#333;font-weight:bold}.hljs-number,.hljs-literal,.hljs-variable,.hljs-template-variable,.hljs-tag .hljs-attr{color:#008080}.hljs-string,.hljs-doctag{color:#d14}.hljs-title,.hljs-section,.hljs-selector-id{color:#900;font-weight:bold}.hljs-subst{font-weight:normal}.hljs-type,.hljs-class .hljs-title{color:#458;font-weight:bold}.hljs-tag,.hljs-name,.hljs-attribute{color:#000080;font-weight:normal}.hljs-regexp,.hljs-link{color:#009926}.hljs-symbol,.hljs-bullet{color:#990073}.hljs-built_in,.hljs-builtin-name{color:#0086b3}.hljs-meta{color:#999;font-weight:bold}.hljs-deletion{background:#fdd}.hljs-addition{background:#dfd}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:bold}";
+ : "body { width: 90%; margin: 0 auto; }";
+ : "img { max-width: 90% }"
+ }
}
- style {
- : "body { width: 90%; margin: 0 auto; }";
- : "img { max-width: 90% }"
+ body {
+ : Raw(markdown_to_html(markdown, &self.comrak_options));
}
}
- body {
- : Raw(&string_to_html(markdown));
- }
- }
+ )
)
- )
+ }
}