代码高亮导致代码块中不显示占位符值

我在这个问题上挣扎了好几天,才弄清楚问题所在。它在这里被报告:Placeholder Forms - #48 by jericson

这个问题似乎(不再?)出现在链接帖子中的示例中,所以我将在下面自己重现:

[wrap=placeholder key=TABLE description="table name" default="users"][/wrap]

```
SELECT * FROM =TABLE=;
```

会变成:

SELECT * FROM =TABLE=;

变量未被识别,因为代码块高亮被自动设置为 SQL。

输出的 HTML 是:

<code class="hljs language-sql" data-highlighted="yes">
  <span class="hljs-keyword">SELECT</span>
  <span class="hljs-operator">*</span>
  <span class="hljs-keyword">FROM</span>
  <span class="hljs-operator">=</span>
  <span class="hljs-keyword">TABLE</span>
  <span class="hljs-operator">=</span>
  ;
</code>

如果我在代码块中指定 txt,那么值就会正确显示:

SELECT * FROM =TABLE=;

预期的行为是无论代码高亮如何,都能显示该值。

我不知道为什么代码块没有像昨天那样自动设置为 SQL。这使得我的 repro 无效,但在 try.discourse.org 上却可以正常工作,所以这里有一个截图:

无论自动语言检测如何,事实是某些语言高亮会破坏字符串 =VALUE=,导致该值无法渲染,这是不希望发生的。

这里的修复将相当复杂,如果占位符被解析为语法高亮部分,那么在替换时我们将找不到它们。

正确的解决方法是重做管道,仅在替换完成后进行高亮显示。

目前我认为这属于功能请求部门,如果有人能想出一种廉价而简单的方法来解决这个问题,我不介意给它打上“pr-welcome”的标签。

1 个赞