aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md2
-rw-r--r--Cargo.lock4
-rw-r--r--Cargo.toml3
-rw-r--r--src/listing.rs17
-rw-r--r--src/renderer.rs2
-rw-r--r--tests/readme.rs22
6 files changed, 31 insertions, 19 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index f0be364..ce9dad9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
## [Unreleased] - ReleaseDate
- Faster QR code generation [#848](https://github.com/svenstaro/miniserve/pull/848/files) (thanks @cyqsimon)
+- Make `--readme` support not only `README.md` but also `README` and `README.txt` rendered as
+ plaintext (thanks @Atreyagaurav)
## [0.21.0] - 2022-09-15
- Fix bug where static files would be served incorrectly when using `--random-route` [#835](https://github.com/svenstaro/miniserve/pull/835) (thanks @solarknight)
diff --git a/Cargo.lock b/Cargo.lock
index 7669520..957be89 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -839,9 +839,9 @@ dependencies = [
[[package]]
name = "fast_qr"
-version = "0.3.1"
+version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b798dfd6e29b85c0bcf434272db4cde0100ab4d82c5db0a4f422e77b30d0b4e4"
+checksum = "c6ca492f7dae5b7705f8997b042fcf7a665addb13181908d1fa7cb6d9bc1c0e6"
dependencies = [
"wasm-bindgen",
]
diff --git a/Cargo.toml b/Cargo.toml
index 05baaab..2cfe594 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -32,7 +32,7 @@ clap = { version = "3.2", features = ["derive", "cargo", "wrap_help"] }
clap_complete = "3.2.3"
clap_mangen = "0.1"
comrak = "0.14.0"
-fast_qr = "0.3.1"
+fast_qr = "0.5.1"
futures = "0.3"
get_if_addrs = "0.5"
hex = "0.4"
@@ -45,6 +45,7 @@ mime = "0.3"
nanoid = "0.4"
percent-encoding = "2"
port_check = "0.1"
+regex = "1"
rustls = { version = "0.20", optional = true }
rustls-pemfile = { version = "1.0", optional = true }
serde = { version = "1", features = ["derive"] }
diff --git a/src/listing.rs b/src/listing.rs
index 7477599..fbee8de 100644
--- a/src/listing.rs
+++ b/src/listing.rs
@@ -9,6 +9,7 @@ use actix_web::{HttpMessage, HttpRequest, HttpResponse};
use bytesize::ByteSize;
use comrak::{markdown_to_html, ComrakOptions};
use percent_encoding::{percent_decode_str, utf8_percent_encode};
+use regex::Regex;
use serde::Deserialize;
use strum_macros::{Display, EnumString};
@@ -224,6 +225,7 @@ pub fn directory_listing(
let mut entries: Vec<Entry> = Vec::new();
let mut readme: Option<(String, String)> = None;
+ let readme_rx: Regex = Regex::new("^readme([.](md|txt))?$").unwrap();
for entry in dir.path.read_dir()? {
if dir.is_visible(&entry) || conf.show_hidden {
@@ -274,13 +276,18 @@ pub fn directory_listing(
last_modification_date,
symlink_dest,
));
- if conf.readme && file_name.to_lowercase() == "readme.md" {
+ if conf.readme && readme_rx.is_match(&file_name.to_lowercase()) {
+ let ext = file_name.split('.').last().unwrap().to_lowercase();
readme = Some((
file_name.to_string(),
- markdown_to_html(
- &std::fs::read_to_string(entry.path())?,
- &ComrakOptions::default(),
- ),
+ if ext == "md" {
+ markdown_to_html(
+ &std::fs::read_to_string(entry.path())?,
+ &ComrakOptions::default(),
+ )
+ } else {
+ format!("<pre>{}</pre>", &std::fs::read_to_string(entry.path())?)
+ },
));
}
}
diff --git a/src/renderer.rs b/src/renderer.rs
index 38d2617..6aad5bd 100644
--- a/src/renderer.rs
+++ b/src/renderer.rs
@@ -241,7 +241,7 @@ fn qr_code_svg(url: impl AsRef<str>, margin: usize) -> Result<String, QRCodeErro
let qr = QRBuilder::new(url.as_ref().into())
.ecl(consts::QR_EC_LEVEL)
.build()?;
- let svg = SvgBuilder::new().margin(margin).build_qr(qr);
+ let svg = SvgBuilder::default().margin(margin).to_str(&qr);
Ok(svg)
}
diff --git a/tests/readme.rs b/tests/readme.rs
index 56a3afd..3fcbe29 100644
--- a/tests/readme.rs
+++ b/tests/readme.rs
@@ -64,7 +64,11 @@ fn show_root_readme_contents(
case("readme.md"),
case("README.md"),
case("README.MD"),
- case("ReAdMe.Md")
+ case("ReAdMe.Md"),
+ case("Readme.txt"),
+ case("README.txt"),
+ case("README"),
+ case("ReAdMe")
)]
fn show_nested_readme_contents(
#[with(&["--readme"])] server: TestServer,
@@ -113,13 +117,11 @@ fn assert_readme_contents(parsed_dom: &Document, filename: &str) {
.find(Attr("id", "readme-contents"))
.next()
.is_some());
- assert!(
- parsed_dom
- .find(Attr("id", "readme-contents"))
- .next()
- .unwrap()
- .text()
- .trim()
- == format!("Contents of {}", filename)
- );
+ assert!(parsed_dom
+ .find(Attr("id", "readme-contents"))
+ .next()
+ .unwrap()
+ .text()
+ .trim()
+ .contains(&format!("Contents of {}", filename)));
}