#blog-post #markdown #html #rss #content #index #static

bin+lib wellington

一个轻量级博客引擎,使用 markdown 并支持边注

1 个不稳定版本

使用旧的 Rust 2015

0.0.1 2018 年 10 月 6 日

20#blog-post

CC0 许可证

67KB
1.5K SLoC

wellington

惠灵顿是一个使用 Rust 编写的轻量级静态博客生成器。您可以在https://emanuelgeromin.com/blog/中看到它的实际应用。

惠灵顿允许您用 markdown 编写博客文章,然后自动

  • 将它们渲染为 HTML
  • 更新目录
  • 更新 RSS 源。

在您网站的根目录下,创建一个新的博客

mkdir my-amazing-blog
cd my-amazing-blog
wellington init --title "My Blog" \
    --home_url "https://mysite.com \
    --desc "My blog about clogs" \
    --author "It's Me"

然后编写一篇博客文章

mkdir post-1
touch post-1/index.md  # edit this file
wellington sync

这个最后的命令 wellington sync 自动

  • 将文章渲染为 HTML 在 post-1/index.html
  • 创建/更新目录在 index.html
  • 创建/更新 rss 源在 rss.xml

安装

安装通过 cargo 完成

cargo install wellington

带有脚注/边注的 Markdown

惠灵顿支持扩展的 markdown 语法。除了常见的 markdown 语法外,您还可以直接在 HTML 中使用花括号标记脚注/边注


# Here is an article

Here is some text with sidenotes/footnotes{this text will render as a
footnote/sidenote}

边注 类似于脚注,但它们在文章的右侧显示,而不是底部。请参阅这篇博客文章作为示例。要正常工作,它们需要合适的 CSS。请参阅下面的 'CSS' 部分。

为什么选择惠灵顿

市面上有许多博客引擎,许多是为与 GitHub pages 等静态托管服务一起使用而设计的。一个很好的例子是 Jekyll

我编写惠灵顿是因为我想要支持边注,并且只需要一个非常简单的功能集。

文章 markdown 文件中的相对链接将自动更改,以指向它们所在的目录。例如,如果 my-amazing-blog/post-1/index.md 包含以下内容

![an image](image.png)

那么这将渲染为

<img src="my-amazing-blog/post-1/image.png" />

这使得在博客文章中嵌入图片更容易。

CSS

惠灵顿的边注是为使用 tufte-css 而设计的。我在我的博客中使用了一个修改过的版本。这个修改过的版本更符合移动端友好,在窄屏幕上,而不是显示边注,而是显示脚注。欢迎您复制我的 CSS。或者,作为一个更简约的解决方案,如果您不需要边注,只需隐藏它们并只渲染脚注即可。

.sidenote {
    display: none;
}

为了以移动友好方式显示博客文章,使用桌面侧边注释和移动端脚注,如我所做,请检查修改后的tufte-css版本

模板

wellington使用Handlebars模板引擎来渲染文章和目录,这允许自定义文章和目录。源代码中的templates目录有默认模板。这些模板默认使用,无需安装。要覆盖它们,请在您的博客主目录中提供自己的模板

  • .index_template.html用于目录
  • .post_template.html用于文章

查看默认模板并根据您的需求进行修改!

MathJax (LaTeX) 支持

在博客文章中使用mathjax (LaTeX)需要一些技巧。为了防止LaTeX被markdown解析器渲染,它必须在markdown中标记为代码,例如


# a markdown file

Here is some text with an equation: `\(E = mc^2\)`

默认情况下,mathjax不渲染任何用<pre><code>标签包裹的内容。要覆盖此行为,除了链接到mathjax CDN的<script>标签外,您还必须在模板的<head>部分添加以下内容

<script type="text/x-mathjax-config">
MathJax.Hub.Config({
  tex2jax: {
      skipTags: ["script","noscript","style","textarea"]
      }
  });
</script>

这覆盖了默认的skipTags,允许在<pre><code>标签中使用LaTeX进行渲染。

如果您需要在博客文章中同时使用渲染的LaTeX和LaTeX代码,那么很遗憾,目前您无法做到。一个更长期的解决方案是在markdown文档中正确解析LaTeX。然而,这是一个更长期的项目,因为它需要修改我用于渲染markdown的库pulldown-cmark。欢迎贡献!

已知错误

  • 脚注没有正确渲染,因为所有内联markdown格式都丢失了(#3)

路线图

还有很多工作要做。当前的代码库没有经过详细的规划而自然地发展。这表明:代码库相当杂乱,需要重构!

功能方面,我希望很快能够支持

  • 语法高亮(#1)
  • 使模板变量post_urlindex_url在markdown中可用(#5)。这在将外部代码或演示嵌入博客文章时很有用。

依赖项

~12MB
~235K SLoC