stupid but working autolinking
This commit is contained in:
parent
73534faec9
commit
f06de3ba13
2 changed files with 25 additions and 2 deletions
|
@ -25,4 +25,5 @@ tera = "1"
|
|||
|
||||
chrono = "0.4"
|
||||
regex = "1"
|
||||
linkify = "0.4"
|
||||
percent-encoding = "2.1.0"
|
||||
|
|
26
src/main.rs
26
src/main.rs
|
@ -9,6 +9,7 @@ use actix_web::error::ErrorInternalServerError;
|
|||
use actix_web::{error, get, http, middleware, web, App, Error, HttpResponse, HttpServer};
|
||||
use chrono::{DateTime, Local};
|
||||
use clap::{App as ClapApp, Arg};
|
||||
use linkify::LinkFinder;
|
||||
use log::info;
|
||||
use percent_encoding::utf8_percent_encode;
|
||||
use pulldown_cmark::{html, Options, Parser};
|
||||
|
@ -197,8 +198,9 @@ async fn render(
|
|||
|
||||
fn preprocess(string: String) -> String {
|
||||
let double_brackets = Regex::new(r"\[\[(?P<inner>[\w .]+)\]\]").unwrap();
|
||||
let finder = LinkFinder::new();
|
||||
|
||||
double_brackets
|
||||
let result = double_brackets
|
||||
.replace_all(string.as_str(), |caps: &Captures| {
|
||||
format!(
|
||||
"[{}]({})",
|
||||
|
@ -206,5 +208,25 @@ fn preprocess(string: String) -> String {
|
|||
utf8_percent_encode(&caps[1], percent_encoding::NON_ALPHANUMERIC)
|
||||
)
|
||||
})
|
||||
.to_string()
|
||||
.to_string();
|
||||
|
||||
let result_vec = Vec::from(result.as_str());
|
||||
let start_delims = vec![b'(', b'<'];
|
||||
let end_delims = vec![b')', b'>'];
|
||||
let links = finder.links(result.as_str()).filter(|link| {
|
||||
(link.start() == 0 || link.end() == result.len())
|
||||
|| (!start_delims.contains(&result_vec[link.start() - 1])
|
||||
&& !end_delims.contains(&result_vec[link.end() + 1]))
|
||||
});
|
||||
|
||||
let mut offset = 0;
|
||||
let mut result_string = result.to_string();
|
||||
for link in links {
|
||||
let orig = link.as_str();
|
||||
let new = format!("<{}>", orig);
|
||||
result_string.replace_range((link.start() + offset)..(link.end() + offset), new.as_str());
|
||||
offset += new.len() - orig.len();
|
||||
}
|
||||
|
||||
result_string
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue