= [Macro]CheckBox 체크박스를 인라인으로 표시합니다. `disabled` 상태로 렌더링되어 클릭은 되지 않습니다. == 문법 * 빈 체크박스: `[ ]` 또는 `[[CheckBox]]` 또는 `[[CB]]` * 체크된 체크박스: `[[CheckBox(x)]]` 또는 `[[CB(x)]]` — 인자 내용은 무관, 인자가 있으면 체크됨 == 예시 [[[#!WikiSyntaxPreview [ ] 아직 안 한 일 [[CB]] 축약 형태 빈 체크박스 [[CheckBox]] 긴 형태 빈 체크박스 ---- [[CB(x)]] 완료된 일 [[CB(done)]] 인자 내용은 무관 [[CheckBox(x)]] 긴 형태 체크된 체크박스 ]]] ==> 개발 문서 === 설계 경위 마크다운 표준(GFM)에서 체크박스는 `[ ]` / `[x]`로 표기한다. [AhaMark]에서는 `[PageName]`이 페이지 링크 문법이므로 `[x]`를 그대로 쓰면 `x`라는 페이지로의 링크로 파싱된다. 이 충돌을 해결하기 위해 검토한 방안: * `\[x]` (이스케이프): 체크박스가 아닌 리터럴 텍스트로만 표시됨 — 불가 * `` `[x]` `` (백틱): `` 태그로 렌더링되어 체크박스 불가, 코드 표시 용도와 충돌 — 불가 * `[[CheckBox(x)]]` (매크로): 기존 `[[MacroName(argument)]]` 시스템에 그대로 통합 가능 — 채택 빈 체크박스 `[ ]`는 어느 링크 대안에도 걸리지 않는다. 대상 자리가 `[^]\s]+` 인 것들은 공백을 못 먹고, 공백을 허용하는 `|` 대안(`[^]|]`)은 `|` 를 요구하는데 `[ ]` 에는 없다. 2026-09-14 에 생긴, 괄호 안 전체를 이름으로 읽는 대안은 이름이 공백으로 시작하거나 끝나지 못하게 해 두었으니 공백 하나뿐인 `[ ]` 는 이름이 되지 못한다. 그래서 `[ ]` 를 체크박스로 가져가도 링크에서 빼앗는 것이 없다. 변환은 `InterpreterWiki.replaceLink` 가 링크를 처리하기 전에 먼저 한다. '''`[x]` 와의 비대칭은 여기서 나온다.''' `[ ]` 는 링크 문법이 비워 둔 자리이고, `[x]` 는 이미 차지한 자리다. 문법 자체는 [InterpreterWiki] 의 Link 절과 `test/com/aha00a/logics/wikis/interpreters/InterpreterWikiLinkSpec.scala` 가 고정한다(후자는 `[ ]` 가 어떤 링크도 아님을 명시적으로 검사한다). === 구현 * `app/logics/wikis/macros/MacroCheckBox.scala` — 매크로 본체 * `app/logics/wikis/ExtractConvertInjectMacro.scala` — `CheckBox` 등록, `CB` 별칭 추가 * `app/logics/wikis/interpreters/InterpreterWiki.scala` — `[ ]` → 빈 체크박스 변환 (`replaceLink` 내)