Realce de código impede que o valor do placeholder seja exibido em um codeblock

Tive dificuldade com este problema nos últimos dias antes de descobrir qual era o problema. Foi relatado aqui: Placeholder Forms - #48 by jericson.

O problema parece não ocorrer (mais?) no exemplo dado na postagem vinculada, então farei minha própria reprodução aqui:

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

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

faz:

SELECT * FROM =TABLE=;

A variável não é reconhecida por causa do destaque do bloco de código, que é definido automaticamente como SQL.

O HTML de saída é:

<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>

Se eu especificar txt no bloco de código, o valor é exibido corretamente:

SELECT * FROM =TABLE=;

O comportamento esperado seria ter o valor exibido independentemente do destaque do código.

Não sei por que o codeblock não está definido automaticamente como SQL, como estava ontem. Ele torna meu repro ineficaz, mas funciona no try.discourse.org, então aqui está uma captura de tela:

Independentemente da detecção automática de idioma, o fato é que alguns realces de idioma quebrarão a string =VALUE= e o valor não será renderizado, o que é indesejado.

Uma correção aqui vai ser bastante complicada, se os marcadores de espaço reservado forem analisados como seções com destaque de sintaxe, quando formos substituir, não os encontraremos.

A maneira correta de resolver isso é refazer o pipeline e fazer o destaque apenas depois de fazermos a substituição.

Por enquanto, eu diria que isso está no departamento de solicitações de recursos, não me importo de colocar um pr-welcome nisso caso alguém possa encontrar uma maneira barata e simples de resolver isso.

1 curtida