#![allow(clippy::map_unwrap_or)]
#![allow(clippy::missing_errors_doc)]
#![allow(clippy::missing_panics_doc)]
#![allow(clippy::needless_raw_string_hashes)]
#![allow(clippy::redundant_closure_for_method_calls)]
#![allow(clippy::unused_self)]
#![allow(clippy::wildcard_imports)]
#[macro_use] extern crate html5ever;
mod filter;
mod highlight;
mod markup;
mod parser;
pub use crate::filter::*;
pub use crate::markup::*;
use std::path::Path;
pub use crate::highlight::Highlighter;
use serde::{Deserialize, Serialize};
#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)]
pub enum Markup {
Markdown(String),
Rst(String),
AsciiDoc(String),
Html(String),
}
#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)]
pub struct Readme {
pub markup: Markup,
pub base_url: Option<String>,
pub base_image_url: Option<String>,
}
impl Readme {
#[must_use] pub fn new(markup: Markup, base_url: Option<String>, base_image_url: Option<String>) -> Self {
Self { markup, base_url, base_image_url }
}
#[must_use]
pub fn base_urls(&self) -> Option<(&str, &str)> {
match (self.base_url.as_deref(), self.base_image_url.as_deref()) {
(Some(l), Some(i)) => Some((l, i)),
(Some(l), None) | (None, Some(l)) => Some((l, l)),
_ => None,
}
}
#[must_use]
pub fn raw_text(&self) -> &str {
match &self.markup {
Markup::Markdown(t) | Markup::Rst(t) | Markup::AsciiDoc(t) | Markup::Html(t) => t,
}
}
}
#[must_use]
pub fn is_readme_filename(path: &Path) -> bool {
path.to_str().is_some_and(|s| {
let readme_filenames = &[
"readme_en.md", "readme.en.md", "readme.md", "readme.markdown", "readme.mdown", "readme", "readme.rst", "readme.adoc", "readme.asciidoc", "readme.txt", "readme.rest"];
readme_filenames.iter().any(|f| f.eq_ignore_ascii_case(s.as_ref()))
})
}