Crates.io | hugo_head |
lib.rs | hugo_head |
version | 0.1.4 |
created_at | 2025-07-17 08:35:37.045667+00 |
updated_at | 2025-07-18 05:34:42.773952+00 |
description | hugo_head |
homepage | https://github.com/i18n-site/rust/tree/dev/hugo_head |
repository | https://github.com/i18n-site/rust.git |
max_upload_size | |
id | 1757227 |
size | 37,515 |
#![feature(trait_alias)]
use tran_trait::Parse;
mod toml;
mod yaml;
use aok::Result;
use txt_li::TxtLi;
pub const TRAN: [&str; 5] = ["description", "title", "summary", "brief", "author"];
pub const HUGO_TOML: &str = "+++";
pub const HUGO_YAML: &str = "---";
pub const HUGO_HEAD: [&str; 2] = [HUGO_YAML, HUGO_TOML];
pub const HUGO_YAML_POS: usize = 0;
pub const HUGO_TOML_POS: usize = 1;
pub fn parse<P: Parse, S: Into<String>>(iter: impl IntoIterator<Item = S>) -> Result<TxtLi> {
let mut txt_li = TxtLi::new();
let mut iter = iter.into_iter().map(|i| i.into());
if let Some(first_line) = iter.next() {
#[allow(clippy::never_loop)]
'out: loop {
for (pos, prefix) in HUGO_HEAD.into_iter().enumerate() {
if first_line == prefix {
txt_li.push_no_tran_line(prefix);
let mut buf = vec![];
for i in iter.by_ref() {
if i != prefix {
buf.push(i);
} else {
let t = buf.join("\n");
if pos == HUGO_YAML_POS {
yaml::parse::<P>(&mut txt_li, t)?;
} else if pos == HUGO_TOML_POS {
toml::parse::<P>(&mut txt_li, t)?;
}
txt_li.push_no_tran_line(prefix);
P::parse(&mut txt_li, iter)?;
break 'out;
}
}
// 没找到闭合标记
P::parse(&mut txt_li, buf.into_iter())?;
break 'out;
}
}
// 开头不是 hugo 标记
P::parse(&mut txt_li, [first_line].into_iter().chain(iter))?;
break;
}
}
// 找不到闭合, 忽略
Ok(txt_li)
}
This project is an open-source component of i18n.site ⋅ Internationalization Solution.
i18 : MarkDown Command Line Translation Tool
The translation perfectly maintains the Markdown format.
It recognizes file changes and only translates the modified files.
The translated Markdown content is editable; if you modify the original text and translate it again, manually edited translations will not be overwritten (as long as the original text has not been changed).
i18n.site : MarkDown Multi-language Static Site Generator
Optimized for a better reading experience
本项目为 i18n.site ⋅ 国际化解决方案 的开源组件。
翻译能够完美保持 Markdown 的格式。能识别文件的修改,仅翻译有变动的文件。
Markdown 翻译内容可编辑;如果你修改原文并再次机器翻译,手动修改过的翻译不会被覆盖(如果这段原文没有被修改)。
i18n.site : MarkDown多语言静态站点生成器 为阅读体验而优化。