크라우니워드프로세서 기초도구 — 마크다운왕복
개요
크라우니워드프로세서 기초도구 시리즈 중 "마크다운왕복" 도메인을 완전 한선씨(hanseonc_high)로 작성. 문서를 블록 배열로 표현하고 마크다운 텍스트로 내보내기/파싱하는 양방향(왕복) 변환기.
무엇을 했는지
파일: /Users/ef/crowny-word/도구/마크다운왕복.한선 (자기완결, 가져오기 없음)
내부 문서표현: 블록배열(각 원소="타입#내용"), 타입 = H1~H6/P/HR/QUOTE/UL/OL/CODE/TABLE. 줄구분자 "¶", 서브필드구분자 "|".
구현 함수(핵심 10 + 보조 다수):
MD내보내기확장(블록배열→MD텍스트, 헤딩/문단/표/코드블록(백틱3)/인용/수평선/중첩목록 전부 지원)
MD파싱확장(MD텍스트→블록배열, 역방향 전 요소)
표MD왕복(행배열 내보내기+파싱 후 일치검증)
중첩목록/중첩목록파싱(2칸 들여쓰기)
코드블록보존/코드블록추출(펜스 내부 내용 마크다운 해석 없이 그대로 보존 검증)
인용블록/인용블록파싱(">" 중첩 레벨)
수평선/수평선인가
MD이스케이프/MD언이스케이프(특수문자 백슬래시 이스케이프 왕복)
왕복시험함수(임의 블록배열의 내보내기→파싱 완전일치 검증)
요소통계(H/BOLD/ITALIC/STRIKE/LINK/IMG/CODEINLINE/CODEBLOCK/TABLE/QUOTE/HR/UL/OL 카운트)
굵게MD/기울임MD/취소선MD/링크MD/이미지MD/인라인코드MD 인라인 빌더
기존 도구 이식: 검색치환.한선의 매치있나/검색첫/치환전부/검색개수 계열을 로컬 헬퍼(매치있나/찾기/치환전부/개수세기)로 이식, 서식런.한선의 나누기/합치기 계열 이식.
자체시험 40 assert 전부 통과: 검사: PASS 40/40신규 발견 VM 함정 (중요 — 가드레일/메모리 갱신 대상)
한선씨 그리고(AND)는 단락평가(short-circuit)가 아니다. hanseonc_high.c의
parse_logic_and()가 양쪽 피연산자를 무조건 둘 다 평가한 뒤 OP_AND를 방출함(코드 확인: 2752행 부근, 조건부 점프 없음). 따라서:
동안 (i < n 그리고 꺼내(배열, i) == x) { ... }
형태는
i == n(경계)에 도달해도
꺼내(배열, i)를 평가해버려 "배열 범위 초과(array out of bounds)" 런타임 에러가 출력된다(결과 자체는 좌변이 이미 거짓이라 무해하게 무시되지만, stderr에 에러가 계속 찍혀 노이즈+오해 소지).
- 실측: 이 파일 초안에서 3곳(코드펜스 탐색 루프, 표 데이터행 탐색 루프 2곳)이 이 패턴이었고, 실행 시
PC: 4997에서 반복적으로 "인덱스 N (길이 N)" 에러가 발생(정확히 경계값과 일치 — 결과는 40/40 PASS로 무해했음을 확인 후 근본수정).
- 수정 패턴:
동안(i<n){ 만약(조건){실행} 아니면{ 탈출 } } 형태로 경계검사를 AND 밖으로 분리. 탈출 키워드(TOK_BREAK, 별칭 반복끝/멈춰)가 정상 동작 확인됨.
- 학습 등록:
han_and_not_shortcircuit_bounds_guard (크라우니코드 학습DB).
관련 파일
/Users/ef/crowny-word/도구/마크다운왕복.한선 (신규, 이 작업 산출물)
/Users/ef/crowny-word/도구/검색치환.한선 (이식 원본 — 매치있나/검색첫/치환전부/검색개수)
/Users/ef/crowny-word/도구/서식런.한선 (이식 원본 — 나누기/합치기)
/Users/ef/crowny-word/도구/문단배치.한선 (이식 원본 — 줄나누기 내부로직 참고)
/Users/ef/CrownyOS/crownyc/hanseonc_high.c (그리고 AND 비단락평가 확인 지점, parse_logic_and 2752행)
잔여 이슈
- 이스케이프 규약: TABLE 셀/UL·QUOTE 텍스트에 리터럴
|가 포함되면 셀 경계와 충돌(파일 상단 주석에 명기, 이번 스코프에서는 미해결 — 필요시 \| 이스케이프 별도 구현 필요).
요소통계의 ITALIC 카운트는 **...** 제거 후 남은 단독 * 쌍을 세는 근사 방식(***중첩*** 같은 굵게+기울임 결합 마커는 스코프 밖).
그리고 비단락평가 함정은 이 파일 국소 수정만 완료 — 다른 기존 9개 도구 파일(텍스트버퍼·커서선택 등)에도 같은 패턴이 잠재할 수 있어 전수 점검은 별도 작업 필요(이번 작업 범위 아님, 기존 파일 수정 금지 지시로 미확인).