From 633b0af62e93d34d38392c2fb8a301cb8f700ac2 Mon Sep 17 00:00:00 2001 From: bitheaven Date: Sat, 13 Dec 2025 01:29:22 +0500 Subject: [PATCH] Added breadcrumbs --- src/main.rs | 128 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 75 insertions(+), 53 deletions(-) diff --git a/src/main.rs b/src/main.rs index 2dc857c..15db192 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,6 +4,18 @@ use std::net::{TcpListener, TcpStream}; use std::path::Path; use regex::Regex; +#[derive(PartialEq, Clone, Copy)] +enum ListType { + Unordered, + Ordered, +} + +struct TocItem { + level: usize, + text: String, + anchor: String, +} + fn main() { if !Path::new("public").exists() { fs::create_dir("public").expect("Не удалось создать папку public"); @@ -34,11 +46,11 @@ fn handle_connection(mut stream: TcpStream) { let buf_reader = BufReader::new(&stream); let re = Regex::new(r"^GET\s+(\S+)\s+HTTP/\d\.\d$").unwrap(); let request_line = buf_reader.lines().next().unwrap().unwrap(); - let binding = re.captures(&request_line).and_then(|caps| caps.get(1)).map(|m| m.as_str().to_string()).unwrap_or(String::new()); + let binding = re.captures(&request_line).and_then(|caps| caps.get(1)).map(|m| m.as_str().to_owned()).unwrap_or(String::new()); let request_line = binding.trim(); let request_line = if request_line == "/" { "index" } else { &request_line[1..] }; - let (status_line, html_content) = match read_markdown(&format!("public/{}.md", request_line)) { + let (status_line, html_content) = match read_markdown(request_line) { Ok(html) => ("HTTP/1.1 200 OK", html), Err(_) => ("HTTP/1.1 404 NOT FOUND", String::from("

404 - Страница не найдена

")), }; @@ -54,16 +66,17 @@ fn handle_connection(mut stream: TcpStream) { stream.flush().unwrap(); } -fn read_markdown(filename: &str) -> Result { - let markdown_content = fs::read_to_string(filename)?; +fn read_markdown(request_line: &str) -> Result { + let filename = format!("public/{}.md", request_line); + let markdown_content = fs::read_to_string(&filename)?; let (html, toc) = markdown_to_html(&markdown_content); let css = fs::read_to_string("public/style.css")?; let toc_html = if !toc.is_empty() { - let mut toc_list = String::from("