在HUGO帖子中包含来自回购的源文件

时间:2017-03-03 13:27:37

标签: hugo

我正在使用HUGO建立一个博客,作为一个注释代码回购,我直接在帖子的回购中包含源文件。

我已经能够让它达到工作状态,并希望改善它,但我被卡住了。

我做了什么

在HUGO网站根目录中有一个.gitignore'd repos 目录,其中包含源代码存储库。

有一个 getSourceFile.html 短代码:

{{ with .Get 0 }}
<pre><code>{{ readFile . }}</code>
<span class="source-footer">{{.}}</span>
</pre>
{{ end }}

然后,在帖子中我可以像这样使用短代码:

#### Base/EntityTypeConfiguration.cs

Estas clases permiten manejar una clase de configuración por cada clase del modelo...

{{< getSourceFile "repos/EFCoreApp/src/EFCore.App/Base/EntityTypeConfiguration.cs" >}}

我得到了这个:

这是非常好的,因为我不需要复制和粘贴代码,它是100%最新的,我相信它会编译。

但这就是我被困住的地方!

我想做什么

1)在前面设置repo root,这样短代码就更容易使用,如下所示:

{{< getSourceFile "src/EFCore.App/Base/EntityTypeConfiguration.cs" >}}

2)能够将语言作为参数传递给短代码以在突出显示功能中使用它,就像这样(这不起作用):

{{< getSourceFile "src/EFCore.App/Base/EntityTypeConfiguration.cs" "csharp" >}}

getSourceFile.html

{{ with .Get 0 }}
```{{.Get 1}}
<pre><code>{{ readFile . }}</code>
<span class="source-footer">{{.}}</span>
</pre>
```
{{ end }}

或者更好的是,从文件扩展名中推断它! ; - )

我认为这不应该太难,但这是我第一次使用Hugo,Go和模板,所以,有人可以帮助我吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

我终于在HUGO's dicussion forum得到了答案,所以我只是想在这里发帖来完成这个问题。

这是最终的短代码:

{{ $file := .Get 0 }}
{{ $repoFilePath := printf "%s/%s" $.Page.Params.reponame $file }}
{{ $repoFile := printf "repos/%s" $repoFilePath }}
{{ $fileExt := replace (index (findRE "(\\.)\\w+$" $file) 0) "." "" }}
<pre><code class="language-{{ $fileExt }}">{{ readFile $repoFile }}</code>
<span class="source-footer">{{ $repoFilePath }}</span>
</pre>

这甚至可以解决文件扩展名中突出显示的语言。