img width="" height="" generation for djot renderer
This commit is contained in:
parent
b6ff4bca21
commit
96fc77dc3e
1 changed files with 53 additions and 2 deletions
|
@ -19,7 +19,9 @@ use crate::dirs::Dirs;
|
||||||
use crate::state::FileId;
|
use crate::state::FileId;
|
||||||
use crate::state::Treehouse;
|
use crate::state::Treehouse;
|
||||||
use crate::vfs;
|
use crate::vfs;
|
||||||
|
use crate::vfs::Dir;
|
||||||
use crate::vfs::ImageSize;
|
use crate::vfs::ImageSize;
|
||||||
|
use crate::vfs::VPathBuf;
|
||||||
|
|
||||||
use super::highlight::highlight;
|
use super::highlight::highlight;
|
||||||
|
|
||||||
|
@ -476,9 +478,28 @@ impl<'a> Writer<'a> {
|
||||||
Container::Image(src, link_type) => {
|
Container::Image(src, link_type) => {
|
||||||
if self.img_alt_text == 1 {
|
if self.img_alt_text == 1 {
|
||||||
if !src.is_empty() {
|
if !src.is_empty() {
|
||||||
out.push_str(r#"" src=""#);
|
out.push_str(r#"" "#);
|
||||||
if let SpanLinkType::Unresolved = link_type {
|
if let SpanLinkType::Unresolved = link_type {
|
||||||
// TODO: Image size.
|
// TODO: Image size.
|
||||||
|
let resolved_image =
|
||||||
|
resolve_image_link(self.renderer.config, src);
|
||||||
|
let size = if let Some(ResolvedImageLink::VPath(vpath)) =
|
||||||
|
&resolved_image
|
||||||
|
{
|
||||||
|
vfs::query::<ImageSize>(&self.renderer.dirs.pic, vpath)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
|
|
||||||
|
if let Some(size) = size {
|
||||||
|
write!(
|
||||||
|
out,
|
||||||
|
r#" width="{}" height="{}""#,
|
||||||
|
size.width, size.height
|
||||||
|
)?;
|
||||||
|
}
|
||||||
|
|
||||||
|
out.push_str(r#" src=""#);
|
||||||
if let Some(resolved) = resolve_link(
|
if let Some(resolved) = resolve_link(
|
||||||
self.renderer.config,
|
self.renderer.config,
|
||||||
self.renderer.treehouse,
|
self.renderer.treehouse,
|
||||||
|
@ -489,11 +510,14 @@ impl<'a> Writer<'a> {
|
||||||
} else {
|
} else {
|
||||||
write_attr(src, out);
|
write_attr(src, out);
|
||||||
}
|
}
|
||||||
|
out.push('"');
|
||||||
} else {
|
} else {
|
||||||
|
out.push_str(r#" src=""#);
|
||||||
write_attr(src, out);
|
write_attr(src, out);
|
||||||
|
out.push('"');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
out.push_str(r#"">"#);
|
out.push('>');
|
||||||
}
|
}
|
||||||
self.img_alt_text -= 1;
|
self.img_alt_text -= 1;
|
||||||
}
|
}
|
||||||
|
@ -672,3 +696,30 @@ pub fn resolve_link(
|
||||||
_ => None,
|
_ => None,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone)]
|
||||||
|
pub enum ResolvedImageLink {
|
||||||
|
VPath(VPathBuf),
|
||||||
|
Url(String),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ResolvedImageLink {
|
||||||
|
pub fn into_url(self, config: &Config, pics_dir: &dyn Dir) -> Option<String> {
|
||||||
|
match self {
|
||||||
|
ResolvedImageLink::VPath(vpath) => vfs::url(&config.site, pics_dir, &vpath),
|
||||||
|
ResolvedImageLink::Url(url) => Some(url),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn resolve_image_link(config: &Config, link: &str) -> Option<ResolvedImageLink> {
|
||||||
|
link.split_once(':').and_then(|(kind, linked)| match kind {
|
||||||
|
"def" => config.defs.get(linked).cloned().map(ResolvedImageLink::Url),
|
||||||
|
"pic" => config
|
||||||
|
.pics
|
||||||
|
.get(linked)
|
||||||
|
.cloned()
|
||||||
|
.map(ResolvedImageLink::VPath),
|
||||||
|
_ => None,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue