超薄模板,自定义DOCTYPE

时间:2012-11-29 18:33:08

标签: ruby doctype slim-lang

我有一个包含此doctype的页面:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">

现在将它转换为slim模板格式,bu slim在预设中没有doctype,我怀疑应该有指定自定义格式的方法。现在我使用|

|<!DOCTYPE html PUBLIC "...skip...>
html
 ....

但它在doctype行之后没有换行符号呈现:

<!DOCTYPE html PUBLIC "...skip...><html ...

哪种方式不受欢迎,将它们放在不同的行上?

2 个答案:

答案 0 :(得分:2)

要在模板中的任意位置插入换行符,只需添加以下行:

= "\n"

Slim中的“=”命令执行给定的Ruby代码并将其附加到缓冲区。在这种情况下,Ruby代码只是一个换行符。

答案 1 :(得分:1)

您不需要|字符,Slim允许inline HTML直接包含HTML,其中包括doctypes。这对格式化没有帮助,但之后仍然没有换行符。

Slim使用的doctypes are actually managed in Temple。您可以更改此选项以添加自定义文档类型以获取所需的行为。这确实涉及到弄乱Temple的内部数据所以你需要小心一点,特别是在升级时,因为内部可能已经改变了。

有问题的哈希是frozen,所以你不能只为它添加一个新条目。但是,您可以dup,向重复的哈希添加一个条目,并将新哈希值分配给常量。这将导致Ruby生成警告,因为您通常不应该以这种方式重新分配常量。

new_hash = Temple::HTML::Fast::XHTML_DOCTYPES.dup
new_hash['rdf'] = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">'
Temple::HTML::Fast::XHTML_DOCTYPES = new_hash

现在,您可以使用rdf,就好像它是Slim中的预定义文档类型一样。

doctype rdf
html

这会产生:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">
<html></html>

如果您想避免看到警告,请在更改常量之前将$VERBOSE设置为nil(确保之后再将其更改)。

begin
  old_verbose, $VERBOSE = $VERBOSE, nil
  Temple::HTML::Fast::XHTML_DOCTYPES = new_hash
ensure
  $VERBOSE = old_verbose
end

(您可以将其转换为接受块的方法。如果您使用的是Rails,则silence_warnings已经为您完成了。)