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