我正在使用这个 html5-tidy 程序来管道调试输出从 Web 应用程序显示到控制台,以便作为开发人员,包含 HTML 的字符串变量的调试转储不会是一个糟糕的文本块,而是有点结构化HTML 视图。
这基本上是对我已经完成perltidy
的用于检查 perl 数据结构的扩展:从 Data::Dumper 输出的字符串被发送perltidy
,以便人们更容易分析。因为 Dumper 只会产生语法上有效的 Perl,所以它工作得很好。
直到我们到达 HTML 文本变量的大块为止。
所以我想对文本做同样的事情(智能地插入空格和换行符),但是tidy
为我做了太多的工作:
$ ../bin/tidy -q test_tidy.html 2>/dev/null | diff test_tidy.html -
1,6c1,17
< <!-- COMMENT --> <p>This example shows how Tidy can indent output while preserving formatting of particular elements.</p><pre>This is <em>genuine preformatted</em> text</pre> <!-- END -->
---
> <!-- COMMENT -->
> <!DOCTYPE html>
> <html>
> <head>
> <meta name="generator" content=
> "HTML Tidy for HTML5 (experimental) for Linux https://github.com/w3c/tidy-html5/tree/c63cc39">
> <title></title>
> </head>
> <body>
> <p>This example shows how Tidy can indent output while preserving
> formatting of particular elements.</p>
> <pre>
> This is <em>genuine preformatted</em> text
> </pre>
> <!-- END -->
> </body>
> </html>
从理论上讲,我可以假设如何tidy
“总是”添加那些无关的东西,然后基本上将它们提取出来,或者其他什么。但这很可怕,原因有很多。首先,如果我进去把那些东西拿出来,那么如果输入的内容正确或部分正确,它将被更改tidy
为比原始输入更正确,这很糟糕!我可以潜在地显示两个副本,这样在使用该工具时就不会出现奇怪的歧义。但我想避免这种情况,并以某种方式tidy
对这些 HTML 片段进行整理,而不是尝试构建一个独立的 HTML 页面。
但是我基本上真的很接近我想要的东西,所以我宁愿不尝试从头开始制作一些东西,因为我知道这会很困难并且容易出错。Tidy 还会自动通过 STDERR 发送一个非常好的警告和错误集合(我在上面的示例中抑制了这些),它们也非常适合与调试功能一起放置,因为虽然我们有一个很好的自动代码检查标准来处理 perl,但生成的 HTML 不受任何形式的审查。