| [[GitHub| | ||
| {{{#!wiki style="min-height: calc(1.5em + 5px); margin: 0 -10px -5px" {{{#!folding [ 펼치기 · 접기 ] {{{#!wiki style="margin: -5px -1px -11px" | <colbgcolor=#000,#000><colcolor=#fff,#fff> 관련 인물 | 톰 프레스턴 워너 · 필립 제퍼리 하이엣 |
| 서비스 | 저장소 · GitHub Pages · GitHub Action · GitHub Packages · Codespace(github.dev) · GitHub Wiki · GitHub Gist · Dependabot · GitHub Advisory Database · GitHub Copilot | |
| 클라이언트 | GitHub CLI · GitHub Desktop · GitHub Mobile | |
| 오픈 소스 | Electron(Atom) · Linguist · Semantic · Tree-sitter | |
| 관련 문서 | 사건 사고 · Octocat · GitHub Universe · GitHub Flavored Markdown · One Dark · npm |
1. 개요
GitHub Flavored Markdown, GFMhttps://github.github.com/gfm/
GitHub 등에서 사용되는 CommonMark의 확장 스펙으로, 기존의 CommonMark에 여러 반필수적인 유용한 기능과 문법을 추가한 것이 특징이며, 이로 인하여 사실상 표준 취급을 받는다.
2. 역사
3. 고유 확장
spec 기준, (extension)이라고 마킹된 부분을 보면 좋다. 기본적으로 다음 5가지 확장이 주를 이룬다.- 표 문법
- task list 문법. 흔히 생각하는 체크박스를 말한다.
- 취소선 문법
- bare URL 인식. 즉, 기본 CommonMark 파서에서는 별도의 처리를 하지 않는 URL을 자동으로 링크로써 인식되도록 파싱한다.
- tagfilter. 무제한적인 HTML 태그 사용을 못하도록 특정 태그의 경우 이스케이프 처리된 것으로 파싱하는 동작이다.
4. GFM이 아닌데 GitHub에서 지원되는 경우
사실 GitHub에서 쓰는 마크다운/렌더러 == GFM으로 생각하지만, 엄밀히는 GFM은 2019년에 머물러있는 단순한 언어 스펙이고, 현재 최신 GitHub에서 사용하는 마크다운 파서/렌더러 구현체는 GFM 스펙이 명시하는 것보다 좀더 많은 기능을 지원한다.대표적으로 다음이 있다.
- footnote: 정말 충격적이겠지만 표준 GFM 스펙에 포함되어있지는 않으며, 계보를 따져보면 PHP Markdown Extra 쪽 변종 문법이 발전한 것이다. 정작 cmark-gfm 구현에는 일단 구현이 되어 있는데도 GFM 스펙에는 반영하지 않았다.
- GitHub Emojicode##: 흔히
:+1:PR에 달려있으면 매우 짜증난다등을 특정 이모지로 렌더하는 레이어. GFM 마크다운 스펙에는 이런 레이어를 의도적으로 포함하지 않고 있다.#75 - alert(callout): 2022년경에 해당 discussion에서 시연이 되었는데, 정작 당시엔 preview feature로 추가되어서 공식 문서화도 늦었고 어디서는 render되고 어디서는 render 안되는 등 혼란이 좀 있었다. 특히 이게 처음 추가됐을 땐 저장소 README나 GitHub Gist 쪽 렌더러에는 바로 적용이 안 되고 issue 쪽 렌더러에만 적용되었기 때문에... 요즘은 잘 지원된다. 참고로 GFM 스펙도 아니지만 이 문법은 유용하기 때문인지 상당수의 마크다운 에디터에서도 지원하는 편. 대표적으로 Obsidian이 있다.
- 구문 강조: 렌더러 수준의 구현이다.
- Mermaid 다이어그래밍: 렌더러 수준의 구현이다.
- 수식 문법: ad hoc 파서 및 렌더러 수준의 구현이며, 현행 렌더러 기준 MathJax를 사용한다. 파싱은 살짝 독특한데, TeX 파싱 자체는 GFM 파싱 레이어 이후에 동작하기 때문에 TeX 문법을 마크다운에 입력하다 보면 $를 올바른 injection delimitor로 인식하지 못해서
_등 이것저것 깨지는 일이 다반사다. 그래서 인라인 수식 입력시$`...`$와 같은 ad hoc한 문법을 지원한다. - permalink preview: ad hoc 파서 및 렌더러 수준 구현이다.
이 외에도, GitHub의 파서 구현체가 다르게 사용되는 경우, 특정 상황에서만 사용 가능한 문법이 있다.
- 이슈, PR 등에서 쓰이는 파서만 지원하는 경우:
- 헥스 코드 리터럴 문법 (
`#ffffff`) - git hash autolink
- issue/PR ref autolink
- 사용자 멘션