코드 하이라이트로 인해 코드 블록에서 플레이스홀더 값이 표시되지 않습니다

이 문제를 해결하기 위해 며칠 동안 고생했습니다. 마침내 원인을 파악했고, 해당 문제는 여기에서 보고되었습니다: 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로 설정되지 않는 이유가 무엇인지 모르겠습니다. 이로 인해 재현 방법이 무효화되지만, try.discourse.org에서는 정상적으로 작동하므로 스크린샷을 첨부합니다:

자동 언어 감지와 관계없이, 일부 언어 하이라이팅이 =VALUE= 문자열을 깨뜨려 값이 렌더링되지 않는다는 점이 문제입니다. 이는 원치 않는 동작입니다.

여기서 수정하는 것은 꽤 복잡할 것입니다. 플레이스홀더 마커가 구문 강조 섹션으로 파싱되면, 치환으로 넘어갈 때 해당 마커를 찾지 못하기 때문입니다.

이 문제를 올바르게 해결하는 방법은 파이프라인을 다시 작성하고, 치환을 수행한 후에만 강조를 적용하는 것입니다.

지금은 이 문제를 기능 요청으로 분류하는 것이 적절할 것 같습니다. 누군가 저렴하고 간단한 방법으로 이 문제를 해결할 수 있다면, PR을 환영하는 태그를 붙이는 데는 문제가 없습니다.

1개의 좋아요