1 个不稳定版本

0.1.0 2024年4月13日

#503 in 模板引擎

GPL-3.0-only

670KB
2K SLoC

Rust 1.5K SLoC // 0.1% comments Lua 487 SLoC // 0.2% comments

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:静态文件的directory
  • styles:返回用于样式的file的表

目录:

  • files:所有相关文件表的表
  • directories:所有相关目录表的表
  • scripts:所有相关脚本的表(*.lua./index.lua

文件:

  • 可以通过site.file(text)函数创建
  • parseMd():将文件解析为markdown
  • parseJson():将文件解析为json,转换为一个表
  • parseYaml():将文件解析为yaml,转换为一个表
  • parseToml():将文件解析为toml,转换为一个表
  • parseTxt():将文件加载为一个字符串
  • parseBibtex():将文件加载为bibtex,转换为一个表
  • stem:如果有的话,文件根名称或nil
  • name:如果有的话,文件名称或nil
  • extention:如果有的话,文件扩展名或nil

markdown:

  • front():作为表的前端内容,或如果不存在则为nil。---会被解析为yaml,+++会被解析为toml
  • raw:原始的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命令构建的则为true
  • escapeHtml:转义给定的html字符串

渲染HTML

除了包含这些页面和文件搜索功能外,还有一个用于渲染HTML的小型库。这个库在 h 表格下可用,以及通过 fragmentrawHtml 函数。 h 包含所有元素作为函数,其中 sub() 方法允许添加子节点,每个参数一个,而 attrs() 接受一个属性表,用于设置元素的属性

renderHtml() 将给定节点渲染为HTML字符串 render() 执行相同的操作,但不包括初始的 "<!DOCTYPE html>"

代码高亮显示

待办事项

静态内容

位于 static/ 文件夹下的静态内容默认不包含在内,必须通过页面上的 withFile 手动添加

样式

位于 styles 文件夹下的所有内容均解释为CSS、SCSS或SASS,具体取决于扩展名;目录根部的所有顶级内容都在样式下可用

压缩

通过 withHtml 传入的所有HTML都将被压缩,以及位于 style/ 的所有样式表。可以使用 minifyhtmlminifycssminifyjs 函数分别压缩HTML、CSS和JavaScript。待办事项

配置

可以使用 site.toml 文件进行配置。 [config] 部分下的所有内容都被加载到全局 config

已知问题

  • 由于 syntects 的 ClassStyle::SpacedPrefixed 需要静态生命周期,如果给定前缀字符串,当前语法高亮会泄漏内存

当前待办事项

  • 重命名为 SLSG
  • 找出在字符串之间进行美观间距的方法
  • 让示例网站也作为对 lssg 的简要介绍(并制作徽标)
  • 常见语言的代码高亮规则
  • 图像调整大小
  • 压缩(?)
  • 完成文档
  • atom/rss

食谱待办事项

  • 手动渲染 markdown 完成
  • 基于 markdown 的博客(加载 md)
  • atom
  • 搜索索引?
  • bibtex 参考文献列表

依赖项

~13–22MB
~341K SLoC