1 个不稳定版本
| 0.1.0 | 2024年4月13日 |
|---|
#503 in 模板引擎
670KB
2K SLoC
SLSG
可脚本化的Lua网站生成器
这与其他网站生成器有何不同?
- lssg使用lua作为其脚本和模板语言,这使得生成网站时具有更复杂的逻辑,且无需编写大量样板代码
- lssg允许使用lua制作页面,从而可以生成与文件系统中定义的文件结构不同的文件结构
如何使用
lssg new [名称]用于初始化新项目。这将创建一个同名目录,一个site.toml文件,内容目录,样式,静态和lib目录
lssg init将当前目录初始化为新的网站,如果它是空的
site/用于网站,lib/用于Lua脚本,styles/用于Sass样式表,static/用于静态可访问文件
完成的网站输出到public/,或由-o或--output指定的文件夹
lssg build通过查看当前或任何父目录中找到的第一个site.toml文件来构建网站
lssg cookbook [名称]显示在制作网站时可能有用的脚本。不带名称运行以查看完整列表。
如何使用
lssg运行site/index.lua文件,该文件预期返回一个页面,然后该页面被转换为网站
该脚本的最终返回项预期为页面
index.lua,以及所有其他在site/或子目录中找到的脚本都可以访问一个名为script的全局变量。这作为与文件系统交互的主要方式。它们还可以访问config表,该表从site.toml加载
脚本:
colocated: 与index.lua文件相同的文件所在的目录,否则为空目录name:*.lua文件的根名称,或者如果存在index.lua,则为目录名称static:静态文件的directorystyles:返回用于样式的file的表
目录:
files:所有相关文件表的表directories:所有相关目录表的表scripts:所有相关脚本的表(*.lua或./index.lua)
文件:
- 可以通过
site.file(text)函数创建 parseMd():将文件解析为markdownparseJson():将文件解析为json,转换为一个表parseYaml():将文件解析为yaml,转换为一个表parseToml():将文件解析为toml,转换为一个表parseTxt():将文件加载为一个字符串parseBibtex():将文件加载为bibtex,转换为一个表stem:如果有的话,文件根名称或nilname:如果有的话,文件名称或nilextention:如果有的话,文件扩展名或nil
markdown:
front():作为表的前端内容,或如果不存在则为nil。---会被解析为yaml,+++会被解析为tomlraw:原始的markdown文本html(flow):将markdown转换为html,接受一个布尔值来指定是否允许mdx流,即在{}之间的文本将被特殊解释ast(flow):将markdown转换为ast(表),接受一个布尔值来指定是否允许mdx流,即在{}之间的文本将被特殊解释。有关如何使用此功能的更多详细信息,请参阅markdown的食谱页面
页面:
- 可以通过
page(name)函数创建 withFile(path, file):在给定的相对路径处添加文件withHtml(html):向页面添加html。如果没有使用html,则不会为目录生成index.html文件withPage(page):向页面添加子页面
其他全局变量
warn:接受单个字符串,警告将在终端和错误页面中显示
lssg库
site.debug:布尔值,如果网站是从serve命令构建的则为trueescapeHtml:转义给定的html字符串
渲染HTML
除了包含这些页面和文件搜索功能外,还有一个用于渲染HTML的小型库。这个库在 h 表格下可用,以及通过 fragment 和 rawHtml 函数。 h 包含所有元素作为函数,其中 sub() 方法允许添加子节点,每个参数一个,而 attrs() 接受一个属性表,用于设置元素的属性
renderHtml() 将给定节点渲染为HTML字符串 render() 执行相同的操作,但不包括初始的 "<!DOCTYPE html>"
代码高亮显示
待办事项
静态内容
位于 static/ 文件夹下的静态内容默认不包含在内,必须通过页面上的 withFile 手动添加
样式
位于 styles 文件夹下的所有内容均解释为CSS、SCSS或SASS,具体取决于扩展名;目录根部的所有顶级内容都在样式下可用
压缩
通过 withHtml 传入的所有HTML都将被压缩,以及位于 style/ 的所有样式表。可以使用 minifyhtml、minifycss 和 minifyjs 函数分别压缩HTML、CSS和JavaScript。待办事项
配置
可以使用 site.toml 文件进行配置。 [config] 部分下的所有内容都被加载到全局 config
已知问题
- 由于 syntects 的 ClassStyle::SpacedPrefixed 需要静态生命周期,如果给定前缀字符串,当前语法高亮会泄漏内存
当前待办事项
- 重命名为 SLSG
- 找出在字符串之间进行美观间距的方法
- 让示例网站也作为对 lssg 的简要介绍(并制作徽标)
- 常见语言的代码高亮规则
- 图像调整大小
- 压缩(?)
- 完成文档
- atom/rss
食谱待办事项
- 手动渲染 markdown 完成
- 基于 markdown 的博客(加载 md)
- atom
- 搜索索引?
- bibtex 参考文献列表
依赖项
~13–22MB
~341K SLoC