如何将源代码片段添加到 Jekyll 的 _data yaml 中?
How to add source code snippets into _data yaml in Jekyll?
我正在尝试创建代码片段作为我在 Jekyll 中创建的项目网站的示例。
我有这样的 yaml:
-
description: "Scheme hygienic macro that creates assoc list, with macroexpand."
code: >
(define-syntax alist
(syntax-rules ()
((_) ())
((_ x y z ...)
(cons (cons x y) (alist z ...)))))
(print (alist "foo" 10 "bar" 20 "baz" 30))
;; ==> ((foo . 10) (bar . 20) (baz . 30))
(macroexpand (alist "foo" 10 "bar" 20))
;; ==> (#:cons (#:cons "foo" 10)
(#:cons (#:cons "bar" 20)
()))
问题是与第一行缩进完全相同的行被连接成单行。我希望它与我的 pre 标记中的 yaml 完全一样。如果我将每一行都缩进 space 我在添加代码段时会在 pre 标记中得到额外的 space。
有没有办法让它准确插入我在yaml文件中的代码?如何在 yaml 中正确缩进,以便在每行之前没有 spaces,并在输出中将每一行都放在自己的行中 html?
我试图在字符串周围添加引号,但它们出现在输出中,我无法在 Liquid 中删除它们。
我试过这个:
{% for example in site.data.examples %}
{% assign code = example.code | split: '^"|"$' %}
<li>
<div class="example">
<pre>{{ code[1] }}</pre>
</div>
<div class="description">
{{ example.description }}
</div>
</li>
{% endfor %}
但是 split 不接受正则表达式。我也试过:
{% assign len = example.code.length %}
{% assign code = example.code | slice: 1,len-2 %}
但它只打印第一个括号。
编辑:
我已经解决了删除引号的问题,但那是死胡同,我仍然在每行之前得到 spaces。
这是一种在 Jekyll 中从字符串中删除引号的方法:
{% assign code = example.code | remove_first: '"' | rstrip | append: "__" | remove: '"__' %}
看来这比我想的要简单。所需要的只是 Yaml 中的块(参考:https://idratherbewriting.com/documentation-theme-jekyll/mydoc_yaml_tutorial.html)
-
description: "Scheme hygienic macro that creates assoc list, with macroexpand."
code: |
(define-syntax alist
(syntax-rules ()
((_) ())
((_ x y z ...)
(cons (cons x y) (alist z ...)))))
(print (alist "foo" 10 "bar" 20 "baz" 30))
;; ==> ((foo . 10) (bar . 20) (baz . 30))
(macroexpand (alist "foo" 10 "bar" 20))
;; ==> (#:cons (#:cons "foo" 10)
(#:cons (#:cons "bar" 20)
()))
你可以使用普通变量:
{% for example in site.data.examples %}
<li>
<div class="example">
<pre>{{ example.code }}</pre>
</div>
<div class="description">
{{ example.description }}
</div>
</li>
{% endfor %}
如果以上内容不适合您,这里是旧版本的答案:
液体非常有限,但我能够创造这个技巧:
{% for example in site.data.examples %}
{% assign code = example.code | remove_first: '"' | rstrip | append: "__" | remove: '"__' | newline_to_br | split: "<br />" %}
<li>
<div class="example">
<pre>{% for line in code %}{{ line | remove_first: " " }}{% endfor %}</pre>
</div>
<div class="description">
{{ example.description }}
</div>
</li>
{% endfor %}
这是我的 examples.yaml
作为参考
-
description: "Scheme hygienic macro that creates assoc list, with macroexpand."
code: >
" (define-syntax alist
(syntax-rules ()
((_) ())
((_ x y z ...)
(cons (cons x y) (alist z ...)))))
(print (alist "foo" 10 "bar" 20 "baz" 30))
;; ==> ((foo . 10) (bar . 20) (baz . 30))
(macroexpand (alist "foo" 10 "bar" 20))
;; ==> (#:cons (#:cons "foo" 10)
(#:cons (#:cons "bar" 20)
()))"
我正在尝试创建代码片段作为我在 Jekyll 中创建的项目网站的示例。
我有这样的 yaml:
-
description: "Scheme hygienic macro that creates assoc list, with macroexpand."
code: >
(define-syntax alist
(syntax-rules ()
((_) ())
((_ x y z ...)
(cons (cons x y) (alist z ...)))))
(print (alist "foo" 10 "bar" 20 "baz" 30))
;; ==> ((foo . 10) (bar . 20) (baz . 30))
(macroexpand (alist "foo" 10 "bar" 20))
;; ==> (#:cons (#:cons "foo" 10)
(#:cons (#:cons "bar" 20)
()))
问题是与第一行缩进完全相同的行被连接成单行。我希望它与我的 pre 标记中的 yaml 完全一样。如果我将每一行都缩进 space 我在添加代码段时会在 pre 标记中得到额外的 space。
有没有办法让它准确插入我在yaml文件中的代码?如何在 yaml 中正确缩进,以便在每行之前没有 spaces,并在输出中将每一行都放在自己的行中 html?
我试图在字符串周围添加引号,但它们出现在输出中,我无法在 Liquid 中删除它们。
我试过这个:
{% for example in site.data.examples %}
{% assign code = example.code | split: '^"|"$' %}
<li>
<div class="example">
<pre>{{ code[1] }}</pre>
</div>
<div class="description">
{{ example.description }}
</div>
</li>
{% endfor %}
但是 split 不接受正则表达式。我也试过:
{% assign len = example.code.length %}
{% assign code = example.code | slice: 1,len-2 %}
但它只打印第一个括号。 编辑:
我已经解决了删除引号的问题,但那是死胡同,我仍然在每行之前得到 spaces。
这是一种在 Jekyll 中从字符串中删除引号的方法:
{% assign code = example.code | remove_first: '"' | rstrip | append: "__" | remove: '"__' %}
看来这比我想的要简单。所需要的只是 Yaml 中的块(参考:https://idratherbewriting.com/documentation-theme-jekyll/mydoc_yaml_tutorial.html)
-
description: "Scheme hygienic macro that creates assoc list, with macroexpand."
code: |
(define-syntax alist
(syntax-rules ()
((_) ())
((_ x y z ...)
(cons (cons x y) (alist z ...)))))
(print (alist "foo" 10 "bar" 20 "baz" 30))
;; ==> ((foo . 10) (bar . 20) (baz . 30))
(macroexpand (alist "foo" 10 "bar" 20))
;; ==> (#:cons (#:cons "foo" 10)
(#:cons (#:cons "bar" 20)
()))
你可以使用普通变量:
{% for example in site.data.examples %}
<li>
<div class="example">
<pre>{{ example.code }}</pre>
</div>
<div class="description">
{{ example.description }}
</div>
</li>
{% endfor %}
如果以上内容不适合您,这里是旧版本的答案:
液体非常有限,但我能够创造这个技巧:
{% for example in site.data.examples %}
{% assign code = example.code | remove_first: '"' | rstrip | append: "__" | remove: '"__' | newline_to_br | split: "<br />" %}
<li>
<div class="example">
<pre>{% for line in code %}{{ line | remove_first: " " }}{% endfor %}</pre>
</div>
<div class="description">
{{ example.description }}
</div>
</li>
{% endfor %}
这是我的 examples.yaml
作为参考-
description: "Scheme hygienic macro that creates assoc list, with macroexpand."
code: >
" (define-syntax alist
(syntax-rules ()
((_) ())
((_ x y z ...)
(cons (cons x y) (alist z ...)))))
(print (alist "foo" 10 "bar" 20 "baz" 30))
;; ==> ((foo . 10) (bar . 20) (baz . 30))
(macroexpand (alist "foo" 10 "bar" 20))
;; ==> (#:cons (#:cons "foo" 10)
(#:cons (#:cons "bar" 20)
()))"