This commit is contained in:
parent
cb957dbe14
commit
3720c7b1cc
83
src/main.rs
83
src/main.rs
|
@ -2,50 +2,25 @@ use markdown::{to_html_with_options, CompileOptions, Options};
|
||||||
use regex::Regex;
|
use regex::Regex;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::{env, fs::read_to_string};
|
use std::{env, fs::read_to_string};
|
||||||
use tera::{Tera, Context};
|
use tera::{Context, Tera};
|
||||||
fn main() {
|
fn main() {
|
||||||
let args: Vec<String> = env::args().collect();
|
let args: Vec<String> = env::args().collect();
|
||||||
if args.len() < 2 {
|
if args.len() < 2 {
|
||||||
panic!("Please provide md file");
|
panic!("Please provide md file");
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut markdown = read_to_string(args.get(1).unwrap()).expect("File does not exist");
|
let markdown = read_to_string(args.get(1).unwrap()).expect("File does not exist");
|
||||||
|
|
||||||
|
println!("{}", generate_blog_entry(markdown));
|
||||||
|
}
|
||||||
|
|
||||||
|
fn generate_blog_entry(markdown: String) -> String {
|
||||||
|
let markdown = markdown.clone();
|
||||||
|
|
||||||
let mut tera = Tera::new("templates/*").unwrap();
|
let mut tera = Tera::new("templates/*").unwrap();
|
||||||
tera.autoescape_on(vec![]);
|
tera.autoescape_on(vec![]);
|
||||||
|
|
||||||
let re_key_value = Regex::new(r"(?ms)---(.*)---(?:\n)").unwrap();
|
let (mut key_value, markdown) = get_kv(markdown);
|
||||||
|
|
||||||
let binding_markdown = markdown.clone();
|
|
||||||
|
|
||||||
let key_value_string = re_key_value
|
|
||||||
.find(binding_markdown.as_str())
|
|
||||||
.expect("Can't find key value map in markdown");
|
|
||||||
|
|
||||||
markdown = re_key_value
|
|
||||||
.replace(markdown.clone().as_str(), "")
|
|
||||||
.to_string();
|
|
||||||
|
|
||||||
let mut key_value: HashMap<&str, &str> = HashMap::new();
|
|
||||||
|
|
||||||
for line in key_value_string.as_str().lines() {
|
|
||||||
if line == "---" {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
key_value.insert(
|
|
||||||
line.split(":")
|
|
||||||
.collect::<Vec<&str>>()
|
|
||||||
.get(0)
|
|
||||||
.unwrap()
|
|
||||||
.trim(),
|
|
||||||
line.split(":")
|
|
||||||
.collect::<Vec<&str>>()
|
|
||||||
.get(1)
|
|
||||||
.unwrap()
|
|
||||||
.trim(),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
let html_markdown = to_html_with_options(
|
let html_markdown = to_html_with_options(
|
||||||
&markdown,
|
&markdown,
|
||||||
|
@ -60,15 +35,45 @@ fn main() {
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
key_value.insert("blog_content", &html_markdown);
|
key_value.insert("blog_content".to_string(), html_markdown);
|
||||||
|
|
||||||
let context = Context::from_serialize(key_value).unwrap();
|
let context = Context::from_serialize(&key_value).unwrap();
|
||||||
|
|
||||||
let output = tera.render("blog.html", &context).unwrap();
|
tera.render(key_value.get("template").unwrap(), &context)
|
||||||
|
.unwrap()
|
||||||
println!("{output}");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn get_kv(markdown: String) -> (HashMap<String, String>, String) {
|
||||||
|
let re_key_value = Regex::new(r"(?ms)---(.*)---(?:\n)").unwrap();
|
||||||
|
|
||||||
|
let key_value_string = re_key_value
|
||||||
|
.find(markdown.as_str())
|
||||||
|
.expect("Can't find key value map in markdown");
|
||||||
|
|
||||||
|
let content_markdown = re_key_value
|
||||||
|
.replace(markdown.clone().as_str(), "")
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
let mut key_value: HashMap<String, String> = HashMap::new();
|
||||||
|
|
||||||
|
for line in key_value_string.as_str().lines() {
|
||||||
|
if line == "---" {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
key_value.insert(
|
||||||
|
line.split(':')
|
||||||
|
.collect::<Vec<&str>>().first()
|
||||||
|
.unwrap()
|
||||||
|
.trim()
|
||||||
|
.to_string(),
|
||||||
|
line.split(':')
|
||||||
|
.collect::<Vec<&str>>()
|
||||||
|
.get(1)
|
||||||
|
.unwrap()
|
||||||
|
.trim()
|
||||||
|
.to_string(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
(key_value, content_markdown)
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue