Basic cours support #44

Merged
Anri merged 67 commits from cours into main 2024-04-01 18:11:49 +02:00
2 changed files with 22 additions and 7 deletions
Showing only changes of commit faab49a385 - Show all commits

View file

@ -2,7 +2,7 @@ use crate::misc::date::Date;
use base64::engine::general_purpose; use base64::engine::general_purpose;
use base64::Engine; use base64::Engine;
use comrak::nodes::{AstNode, NodeValue}; use comrak::nodes::{AstNode, NodeValue};
use comrak::{format_html, parse_document, Arena, ComrakOptions, ListStyleType}; use comrak::{format_html, parse_document, Arena, ComrakOptions, ListStyleType, Options};
use lol_html::html_content::ContentType; use lol_html::html_content::ContentType;
use lol_html::{element, rewrite_str, HtmlRewriter, RewriteStrSettings, Settings}; use lol_html::{element, rewrite_str, HtmlRewriter, RewriteStrSettings, Settings};
use ramhorns::Content; use ramhorns::Content;
@ -227,7 +227,14 @@ fn fix_images_and_integration(path: &str, html: String) -> (String, Metadata) {
if let Ok(file) = fs::read_to_string(&img_path) { if let Ok(file) = fs::read_to_string(&img_path) {
let mime = mime_guess::from_path(&img_path).first_or_octet_stream(); let mime = mime_guess::from_path(&img_path).first_or_octet_stream();
if mime == "text/markdown" { if mime == "text/markdown" {
let data = read_md(&img_path, &file, TypeFileMetadata::Generic); let mut options = get_options();
options.extension.footnotes = false;
let data = read_md(
&img_path,
&file,
TypeFileMetadata::Generic,
Some(options),
);
el.replace(&data.content, ContentType::Html); el.replace(&data.content, ContentType::Html);
metadata.merge(data.metadata); metadata.merge(data.metadata);
} else { } else {
@ -250,11 +257,19 @@ fn fix_images_and_integration(path: &str, html: String) -> (String, Metadata) {
} }
/// Transform markdown string to File structure /// Transform markdown string to File structure
pub fn read_md(path: &str, raw_text: &str, metadata_type: TypeFileMetadata) -> File { pub fn read_md(
path: &str,
raw_text: &str,
metadata_type: TypeFileMetadata,
options: Option<Options>,
) -> File {
let arena = Arena::new(); let arena = Arena::new();
let options = get_options(); let opt = match options {
let root = parse_document(&arena, raw_text, &options); Some(specific_opt) => specific_opt,
None => get_options(),
};
let root = parse_document(&arena, raw_text, &opt);
// Find metadata // Find metadata
let metadata = get_metadata(root, metadata_type); let metadata = get_metadata(root, metadata_type);
@ -264,7 +279,7 @@ pub fn read_md(path: &str, raw_text: &str, metadata_type: TypeFileMetadata) -> F
// Convert to HTML // Convert to HTML
let mut html = vec![]; let mut html = vec![];
format_html(root, &options, &mut html).unwrap(); format_html(root, &opt, &mut html).unwrap();
let mut html_content = String::from_utf8(html).unwrap(); let mut html_content = String::from_utf8(html).unwrap();

View file

@ -61,7 +61,7 @@ pub fn read_file(filename: &str, expected_file: TypeFileMetadata) -> Option<File
Err(_) => None, Err(_) => None,
}, },
_ => match fs::read_to_string(filename) { _ => match fs::read_to_string(filename) {
Ok(text) => Some(read_md(filename, &text, expected_file)), Ok(text) => Some(read_md(filename, &text, expected_file, None)),
Err(_) => None, Err(_) => None,
}, },
}, },