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::Treehouse;
 | 
			
		||||
use crate::vfs;
 | 
			
		||||
use crate::vfs::Dir;
 | 
			
		||||
use crate::vfs::ImageSize;
 | 
			
		||||
use crate::vfs::VPathBuf;
 | 
			
		||||
 | 
			
		||||
use super::highlight::highlight;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -476,9 +478,28 @@ impl<'a> Writer<'a> {
 | 
			
		|||
                    Container::Image(src, link_type) => {
 | 
			
		||||
                        if self.img_alt_text == 1 {
 | 
			
		||||
                            if !src.is_empty() {
 | 
			
		||||
                                out.push_str(r#"" src=""#);
 | 
			
		||||
                                out.push_str(r#"" "#);
 | 
			
		||||
                                if let SpanLinkType::Unresolved = link_type {
 | 
			
		||||
                                    // 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(
 | 
			
		||||
                                        self.renderer.config,
 | 
			
		||||
                                        self.renderer.treehouse,
 | 
			
		||||
| 
						 | 
				
			
			@ -489,11 +510,14 @@ impl<'a> Writer<'a> {
 | 
			
		|||
                                    } else {
 | 
			
		||||
                                        write_attr(src, out);
 | 
			
		||||
                                    }
 | 
			
		||||
                                    out.push('"');
 | 
			
		||||
                                } else {
 | 
			
		||||
                                    out.push_str(r#" src=""#);
 | 
			
		||||
                                    write_attr(src, out);
 | 
			
		||||
                                    out.push('"');
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                            out.push_str(r#"">"#);
 | 
			
		||||
                            out.push('>');
 | 
			
		||||
                        }
 | 
			
		||||
                        self.img_alt_text -= 1;
 | 
			
		||||
                    }
 | 
			
		||||
| 
						 | 
				
			
			@ -672,3 +696,30 @@ pub fn resolve_link(
 | 
			
		|||
        _ => 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