IP 기호 없이 스마트 구두점 사용

현재 마크다운 타이포그래퍼(또는 "스마트 구두점"이라고도 함) 관련 설정을 조정하여 유니코드 구두점 기호(따옴표와 대시 등)는 _활성화_하되, (c), ™ 및 유사한 특수 글리프는 비활성화할 수 있을까요?

저는 변호사입니다. 디스코르스 포럼을 포함하여 상표권과 저작권에 대해 항상 자문을 하고 있습니다. 아직까지 게시물을 수정하여 저작권 또는 상표 기호를 추가하도록 조언한 적은 없습니다. 변호사가 아닌 사람들은 이러한 기호의 유용성이나 필요성을 지나치게 과대평가하는 경향이 있습니다. 반대로, 마크다운 렌더링이 © 기호를 표시하지 않도록 하려고 시도하며 수정한 게시물의 수는 셀 수 없이 많습니다.

이 문제는 나열 목록에서 특히 자주 발생합니다. 예를 들어:

(a) 사과
(b) 바나나
(c) 저작권?
(d) 날짜

이러한 나열 스타일은 법률, 계약, 정책 및 기타 법률 스타일에 영향을 받은 공식 문서에서 매우 흔합니다. 또한 매우 일반적인 개요 작성 스타일이기도 합니다. 미국에서 초등학교 학생으로 있을 때 배운 “표준” 개요 스타일의 일부이기도 했습니다.

현재 설정은 _구두점_에 대해 어느 정도의 유연성을 제공하지만, 제가 알기로는 스마트 기호를 활성화하지 않고 스마트 구두점만 활성화하는 방법은 없는 것 같습니다.

9개의 좋아요

이건 특별히 강한 의견이 없는데, 저작권 기호를 직접 입력해야 하는 경우가 너무 드물어서 이 단축키를 제거해도 될 것 같아요. 매우 드문 유용성과 꽤 흔하지만(보기 안 좋은) 목록 형식인 (a) (b) (c) 사이의 균형이 그렇다는 거죠. @sam, 이 특정 단축키를 완전히 제거하는 데는 문제가 없습니다.

6개의 좋아요

(c)를 그냥 삭제하는 것도 찬성합니다.

"copyright symbol"을 검색해서 복사하고 붙여넣는 게 그렇게 어려운 것도 아니잖아요. 기술에 밝은 사람들은 ©를 직접 입력할 수 있죠.

사용성 측면에서 보면, 모든 확장 기능을 목록으로 정리하는 방식을 선호합니다. 이 확장 기능들이 유용하기보다는 오히려 혼란을 줄 가능성이 훨씬 높다고 확신합니다.

5개의 좋아요

그래, 이 경우에는 이점(아주 아주 미미한)이 위험(상당히 큰)보다 더 큰 것으로 보입니다.

5개의 좋아요

이것은 설정 가능한 것처럼 보이지 않습니다. 이러한 유연성을 지원하려면 markdown.it를 패치하거나, markdown.it를 기반으로 자체 prettify를 작성해야 합니다.

가장 간단한 수정 방법은 해당 기능을 완전히 끄는 것입니다.

5개의 좋아요

아무것도 설정할 수 없다는 게 좀 이상하네요. 아쉬운 점이네요. 그래서

(c) (tm) (r) (p) → (c) ™ (r) (p)

3개의 좋아요

장점은 엔진이 꽤 유연하게 설정할 수 있다는 것입니다. markdown.it의 규칙을 끄고, 코드를 복사한 뒤 @Roman 이 → 를 구현했던 것처럼 자체 치환 로직을 구현할 수 있습니다.

이를 정리하는 데 며칠간의 엔지니어링 작업이 필요할 것이며, 같은 코드를 두 번 배포하는 것은 아쉽지만 포크를 진행한다면 사실상 피할 수 없는 일입니다.

3개의 좋아요

markdown-it의 master 브랜치에서 커밋 7b8969ce5cb2edc54f2c1aa39a85a3a08076337d 기준으로, 관련 소스 파일은 lib/rules_core/replacements.js이며, 관련 테스트 픽스처는 test/fixtures/markdown-it/typographer.txt입니다.

모든 치환은 하드코딩되어 있습니다. 여기에는 "범위 한정 약어(scoped abbreviations)"로 묶인 (c) → (c), (tm) → ™, (r) → (r), 그리고 (p) → (p)가 포함됩니다.

참고로, 저는 §에 대해 (p)가 나오는 것을 이해하지 못하겠습니다. 이는 거의 확실하게 음반 기호(phonorecord symbol)인 ℗여야 합니다.

이 문제를 몇 가지 시도해 보고, “typographer” 기능을 더 구성 가능하게 만드는 패치를 만들어 볼 수 있을지 확인해 보겠습니다.

7개의 좋아요

저도 이 문제로 정말 짜증나요. 최소한 일주일에 한 번은 꼭 겪습니다.

9개의 좋아요

먼저, 부수적인 PR로 (p)와 (P)의 해석을 수정합니다: Fix typographer interpretation of `(p)` - Pull Request #761 - markdown-it/markdown-it - GitHub

7개의 좋아요

대체 그룹을 끄는 PR: Configurable typographer - Pull Request #762 - markdown-it/markdown-it - GitHub

3개의 좋아요

메인터이너가 매우 빠르게 반응합니다. PR을 몇 분 만에 클로즈하거든요 :stuck_out_tongue_winking_eye:

제가 파악한 바로는, 그는 새로운 메이저 버전에서도 깨지는 변경사항(breaking changes)을 도입하는 것을 매우 꺼립니다. (P)가 §로 렌더링되는 것 같은 사소한 변경도 마찬가지입니다. 또한 typographer: true가 여전히 작동하더라도, typographer: {A: true, B: false} 스타일의 옵션을 허용하는 것에 대해서는 인식된 복잡성 때문에 매우 거부감을 보입니다.

글의 행간을 읽는다면, 그는 영어로 글을 쓰는 러시아계 개발자인 것 같습니다. 하지만 그가 markdown-it을 이미 완성된 것으로 보고 있다는 느낌을 받습니다.

감사한 마음을 전하면서, 구현을 포크해서 ES Modules로 다시 작성하고, 현재 번들에 포함된 플러그인 성격의 기능들(링크화 및 치환, 타이포그래퍼의 문장 부호 치환 포함)을 모두 제거하는 것이 가치가 있을지도 모른다고 생각합니다.

3개의 좋아요

메인터이너는 번호가 없는 번들에서 중복된 코드에 대한 지적에 관심이 없습니다. 또한 “사용자의 100%가 요구하지 않는” 또는 플러그인 구현을 차단하는 것이 아닌, 비브레이킹 API 변경 사항에도 관심이 없습니다. 이는 일종의 딜레마를 초래합니다. 왜냐하면 해당 프로젝트는 실제로는 플러그인 성격이 강한 두 개의 서브모듈(링크화 및 스마트 구두점)을 함께 배포하고 있으며, 그 철학에 따라 이러한 기능은 자체적인 작은 npm 패키지로 분리되어야 하기 때문입니다. 이런 일은 가끔 발생합니다.

참고로, markdown-it에는 최근 상당한 릴리스가 있었습니다. 특히 지난해 11월에 Alex Kocharin이 성능 개선을 발표한 것이 주목할 만합니다.

(c)를 수정하고 (p)를 처리하며, 화살표 등 다른 사항도 원하는 대로 처리하려면, 가장 좋은 방법은 코어에서 링크화와 스마트 구두점 서브모듈을 제거하고 대신 Discourse에서 플러그인으로 로드하는 패치를 제안하는 것입니다. GitHub Action 또는 cron 작업을 사용하여 markdown-it 마스터 브랜치를 주시하고 자동 리베이스를 시도해 보세요. 메인터이너가 변경 사항에 대해 이 정도로 보수적인 태도를 유지한다면, 해당 패치는 상당한 기간 동안 깨끗하게 적용될 것입니다. CommonJS 대신 ES Modules로 재작성하는 것과 같은 큰 변화가 없는 한 말입니다.

6개의 좋아요

내부적으로 논의한 결과, typographer를 하드 포크하기로 결정했습니다.

기본적으로 markdown.it에서 typographer를 비활성화하고, discourse에 이를 복사해 구현할 예정입니다. markdown.it는 확장성이 매우 뛰어나므로, 이 작업은 대부분 “복사-붙여넣기” 수준입니다.

복사-붙여넣기가 완료되면 테스트를 추가하고 일부 규칙을 커스터마이징하거나 변경할 수 있습니다.

9개의 좋아요

안녕하세요, 이 주제를 꺼내는 것이 부담스러울 수 있어 죄송합니다. ... -> … 기능을 비활성화하는 방법을 찾고 있었는데, 이 기능이 어떤 식으로 진전되고 있는지, 그리고 향후 개별 규칙을 활성화하거나 비활성화할 수 있을지 궁금해서 질문드립니다.

감사합니다!

2개의 좋아요

사이트 설정입니다. 타이포그래퍼를 비활성화하면 됩니다.

2개의 좋아요

음, 이미 시도해 봤는데, Apparently 작동하지 않는 것 같습니다. 타이포그래퍼를 활성화하거나 비활성화하든 상관없이 치환은 항상 수행됩니다(그리고 참고로 (c)는 작동하지 않는 것 같습니다).

2개의 좋아요

원하는 게시물에서 HTML을 비활성화한 후 다시 빌드해야 합니다.

5개의 좋아요

이제 거의 완벽하게 완료되었습니다 :confetti_ball:

2개의 좋아요