1 个不稳定版本

0.1.0 2023 年 11 月 28 日

#1445Web 编程

MIT 许可证

1MB
3K SLoC

包含 (WOFF 字体,150KB) examples/lyrx/lib/fa-solid-900.woff2,(WOFF 字体,110KB) examples/lyrx/lib/fa-brands-400.woff2

正在进行中

Lyr 的静态网站生成器

想法是基于自定义的 markdown 格式生成静态的 html、css、js 文件。

这使用了一个自定义的 markdown 解析器,它不一定遵循官方规范。我把它做到可以让我使用,欢迎 PR!更多信息请见 LMarkdown 以下。

用法

安装二进制文件

git clone [email protected]:Lyr-7D1h/lssg.git
cd lssg
cargo install --path .

生成静态文件

lssg {PATH_TO_INDEX_MARKDOWN_FILE} {PATH_TO_OUTPUT_FOLDER}

这是从 lyrx 的内容生成 lyrx 的方法

cd examples/lyrx
lssg ./content/home.md ./build

您也可以使用 markdown 链接生成内容

lssg https://raw.githubusercontent.com/Lyr-7D1h/lssg/wip/examples/lyrx/home.md ./build

[!NOTE] 输入 markdown 文件中从 markdown 文件到其他 markdown 文件的链接必须包含在输入 markdown 文件的父文件夹中

LMarkdown(Lyr 的 Markdown)

LMarkdown 尽量遵循 Commonmark markdown 规范,尽管在某些地方有所偏离,以便更容易地进行页面渲染。

lmarkdown 文件的结构

<!--
{MODULE_CONFIG}
-->
{MARKDOWN}

例如。

<!--
[default]
title="This is the html title"
[blog]
-->
<!--
    The first comment on a page is seen as module configuration and is parsed as toml 
    it has the following format:

    [{module_identifier}]
    {options}
-->

# Just some header in file

<!-- All HTML comments are ignore in output -->

<!-- The following will generate `http://{root}/test` url based on the markdown file -->

[Check out my other page](./test.md)

<!-- So this in html will turn into `<a href="./test">Check out my other page</a>` -->

架构

简而言之,这是执行 LSSG 时发生的事情

Given index markdown file path
    |
Sitetree: Recursively find links to resources in parsed pages and stylesheets (stylesheets, fonts, icons, other pages)
    |
Sitetree: Add these resources as nodes into Sitetree
    |
Go through all nodes in tree
if resources 
    Copy resource
if page => use modular HtmlRenderer to turn lmarkdown tokens into html, and write to file
    HtmlRenderer: Create Domtree 
        |
    HtmlRenderer: Delecate modification of Domtree to modules based on LMarkdown Tokens
        |
    BlogModule: Render Token if applicable
        |
    DefaultModule: Fallback rendering of Token, it should render every kind of Token

路线图

  • 使文本更易于阅读,如 Medium(https://blog.medium.com/what-were-reading-are-you-busy-or-are-you-productive-5beca01c0f3b
  • 添加 html! 宏以在编译时将 html 转换为 rust
  • 将默认选项作为属性的根(不需要 [default] 块)
  • 添加恢复和日志记录而不是恐慌
    • 在断开链接时恐慌
  • 下载并安装指向外部资源的链接(字体、css、编码。)
  • 使从 notion 导入页面更容易
  • 不要将所有文件加载到内存中,可能会对大型资源文件或大型网站造成问题
  • 代码支持
  • 为 css 添加文件最小化
  • 支持自定义样式
  • 文档模块

已知的错误

- 对根的引用不起作用

依赖项

~10–23MB
~339K SLoC