이 글은 .md 렌더 경로(remark/rehype)의 헤딩 처리를 확인하기 위한 픽스처입니다.
같은 내용을 Markdoc 으로 쓴 .mdoc 판과 산출물이 같아야 합니다.
두 경로는 렌더러가 완전히 다르기 때문에, 한쪽만 보고 “됐다”고 판단하면 나머지 한쪽이
조용히 깨진 채로 배포됩니다. 그래서 같은 본문을 두 확장자로 나란히 두고 비교합니다.
설치하기
한글 헤딩은 한글 id 를 갖습니다. 카테고리·태그 슬러그와 같은 규칙을 씁니다.
영문 대문자는 소문자로 내려가고, 공백은 하이픈으로 합쳐지며, 유니코드 문자는 그대로 보존됩니다.
# 나 + 같은 기호는 프로그래밍 언어 이름을 살리려고 음차합니다.
그래서 이 규칙으로 만들어진 주소는 브라우저 주소창에서 사람이 읽을 수 있는 형태로 남습니다.
헤딩 id 는 한 번 공개되면 남이 저장해 둔 링크가 되기 때문에, 규칙을 나중에 바꾸면 그 링크들이 조용히 깨집니다. 그래서 규칙을 라이브러리 기본값에 맡기지 않고 저장소 안에 고정해 두고, 두 렌더 경로가 같은 함수 하나만 쓰도록 묶어 두었습니다.
요구 사항
h3 는 목차에서 바로 앞 h2 아래로 들어갑니다. 목차의 깊이는 두 단계까지만 씁니다.
더 깊은 헤딩까지 담으면 목차가 본문만큼 길어져서, 훑어보기라는 목적 자체를 잃습니다.
더 깊은 헤딩
h4 부터는 앵커는 붙지만 목차에는 담지 않습니다.
앵커가 붙어 있으므로 직접 주소를 공유하는 것은 여전히 가능합니다.
설치하기
같은 텍스트의 헤딩이 두 번 나오는 경우입니다. 두 번째는 -2 가 붙어야 합니다.
중복 id 는 앵커 이동을 망가뜨리고 HTML 유효성도 깨뜨리기 때문에, 문서 안에서
등장 순서에 따라 결정적으로 유일화합니다. 같은 글을 다시 빌드해도 결과는 항상 같습니다.
C# 예제
기호가 섞인 헤딩입니다. C# 은 c-sharp 로 음차합니다. 기호를 그냥 버리면
C# 과 C 가 같은 주소로 합쳐져서, 서로 다른 절이 같은 링크를 갖게 됩니다.
var span = stackalloc int[4];
span[0] = 1;
코드블럭은 읽기 시간 계산에서 산문과 다르게 셉니다. 사람은 코드를 문장처럼 읽지 않고 훑기 때문에, 글자 수가 아니라 줄 수로 세고 블럭당 상한을 둡니다.
???
슬러그로 바꿀 수 없는 헤딩입니다. 빌드를 세우지 않고 대체 id 를 씁니다. 헤딩 하나가 기호뿐이라는 이유로 글 전체 빌드를 실패시키는 것은 과한 처사입니다.