C++로 요리하기

(첫 게시물이라 너그럽게 봐주세요…)

최근 제 자체 Discourse 포럼을 설정했습니다: https://crucible.hubbe.net/ 전반적으로 매우 만족하고 있습니다. 이 커뮤니티는 주로 프로 모델러들이 사용하는 아두이노 계열 보드에 대한 것입니다. 그래서 템플릿 기반 C++ 코드를 많이 사용하게 됩니다. 특히, 조명 표시 방식을 설정하는 "style"이라는 것을 사용합니다. 스타일은 복잡할 수 있어서 온라인 미리보기/편집기를 작성했고, discourse-linkify 테마 컴포넌트를 사용하여 스타일이 자동으로 편집기에 링크되도록 했습니다. URL 문자를 인용하는 등 discorse-linkify 테마 컴포넌트에 몇 가지 사소한 변경이 필요했는데, 이는 비교적 쉬웠으며 관심이 있다면 해당 변경 사항에 대한 PR을 만들 수 있습니다.

결과는 여기서 볼 수 있습니다: StylePtr links - The Crucible - The Crucible

하지만 문제가 있습니다…
템플릿 코드의 일부는 < 와 > 문자가 많아 HTML처럼 보일 수 있고, 어느 시점에서 Discourse가 일부 "태그"를 제거합니다. 기본적으로 < > 안에 있는 모든 알려지지 않은 단어는 제거되는 것 같습니다. 이 게시물의 다음 줄은 공백 없이 < foo > 형태가 되어야 합니다:

< - foo가 여기에 있습니다

처음에는 linkify 컴포넌트가 무언가 잘못되고 있다고 생각했지만, 조사해 본 결과 linkify가 실행될 때쯤에는 이미 해당 내용이 사라져 있었습니다. 따라서 추가 태그들이 조리(cooking) 과정의 어딘가에서 증발한 것 같습니다.

코드 블록(세 개의 백틱 등)에서는 태그가 유지되는 것을 확인했지만, 제 목적에 항상 유지되는 것이 더 좋습니다.

일段时间 동안 discourse/lib/utilities.cs:CODE_BLOCKS_REGEXP를 수정하면 이 문제를 해결할 수 있다고 생각했지만, inCodeBlock은 많은 곳에서 사용되지 않으므로 이것이 잘못된 접근일 수 있습니다. 또한, 플러그인이나 테마 컴포넌트에서 CODE_BLOCKS_REGEXP를 실제로 수정하는 방법도 아직 찾지 못했습니다.

이 태그들을 제거하는 데 실제로 책임이 있는 코드는 무엇인가요?
이를 비활성화하는 가장 좋은(지원이 가장 잘 되는) 방법은 무엇인가요?

또한, 사람들이 큰 코드 블록을 붙여넣는 경우가 있으므로, 중간 일부가 누락된 사실을 알아채기 매우 어려울 수 있습니다. 최소한, 알려지지 않은 태그가 깜빡이는 경고 표시나 사용자가 예상치 못한 상황이 발생했음을 알 수 있는 형태로 변환된다면 더 나을 것입니다.

질문: 마크다운 코드 블록을 사용해 보는 것은 어떨까요?

코드를 세 개의 백틱(`)으로 감싸면 됩니다.

이렇게요

여기 
<foo>
is <some> </fooer> </foo>

그리고 이건 제 게시물의 실제 원시 마크다운입니다: https://meta.discourse.org/raw/187974/3


사용자들에게 교육해야 하지만, 이는 관리자의 역할이며, 나중에 마크다운을 다뤄야 하는 모든 사용자에게 도움이 될 것입니다.

새로운 전체 고정 주제를 추가하여 이렇게 할 수 있습니다. 예를 들어 “이 사이트에서 코드를 삽입하는 방법” 또는 “이 사이트에서 입력하는 방법” 같은 제목으로요.

또한 이 링크로 안내할 수도 있습니다: Markdown Reference (commonmark.org)

음, 혹시 다른 분들도 같은 문제를 겪고 계실까 봐 이 링크도 여기에 남겨두겠습니다.

piratize 플러그인이 사용하는 것과 동일한 패턴으로 백틱과 링크를 추가하면 이 문제를 해결할 수 있을 것 같습니다.

고양이를 뛰어넘는 것보다 더 좋은 일이 많으니까요?
어떤 일을 쉽고 올바른 방법으로 할 수 있다면, 사람들은 항상 쉬운 방법을 선택할 겁니다. 만약 StylePtr<> 템플릿이 사전 형식화된 텍스트 밖에 놓이는 것을 실제로 막을 수 있다면, 사람들은 올바른 방법을 따를 수밖에 없겠지만, 어떻게 그렇게 할 수 있을까요? (또한, 이는 StylePtr<> 템플릿에 대해 이야기하는 완전히 유효한 방법들도 차단할 수 있으므로 매우 강압적인 해결책처럼 느껴집니다.)

현재 링크파이를 사용해 StylePtr<> 템플릿에 링크를 걸기 위한 제 해결책도 DOM이 매우 다르기 때문에 사전 형식화된 텍스트에서는 작동하지 않지만, 이는 코딩을 조금만 하면 수정할 수 있는 사소한 문제입니다.

아마도 그렇겠죠. 저는 백틱이 없다면 이 패턴을 사용해 자동으로 백틱을 추가하고, 링크를 걸기 위해 후처리(post-cooking) 콜백을 사용하는 방식을 취할 것 같습니다. 제가 착각하고 있지 않다면, 다른 방법으로 사전 형식화된 텍스트 중간에 링크를 추가하는 방법은 없습니다.

인라인 코드는 백틱(`), 코드 블록은 세 개의 백틱(```)을 사용하도록 사용자를 유도하는 것이 최선의 해결책입니다. 포럼에 해당 내용을 고정된 주제로 등록해 보는 건 어떨까요?

또한 Unformatted Code Detector 을 시도해 볼 수 있습니다.

포맷되지 않은 코드 감지 테마 컴포넌트가 유망해 보입니다. 어차피 계획하고 있던 대로, 프리포맷된 코드 내부의 링크 처리를 담당하는 테마 컴포넌트를 만들면 되니, 꼭 시도해 보겠습니다.

결국 linkify 모듈에서 다중 줄 정규식 지원을 활성화하기만 하면 내가 원했던 대로 더 잘 작동하게 되었습니다. 따라서 사람들이 포맷되지 않은 코드 감지기에 실제로 주의를 기울인다면, 저는 이제 괜찮을 것 같습니다.