크라우니워드프로세서 기초도구 — 각주미주.한선
개요
크라우니워드프로세서 기초도구 시리즈의 "각주미주" 도메인을 완전 한선씨(hanseonc_high)로 작성.
각주(footnote)/미주(endnote) 저장·조회·수정·삭제·번호재정렬·페이지별 수집·위치 보정·직렬화를
전부 커버하는 자기완결 라이브러리(가져오기 없음).
무엇을 했는지
- 파일:
/Users/ef/crowny-word/도구/각주미주.한선
- 데이터 모델: 저장소 = 레코드 문자열 배열, 레코드 =
"위치|페이지|종류|내용"(앞 3필드만
분리, 나머지 전부 내용 — 내용에
| 있어도 안전). 배열 인덱스+1 = 표시 번호(별도 번호
필드 없음 → 삭제 시 자동 번호재정렬).
- 함수 19개: 각주저장소생성, 각주추가전체/각주추가/미주추가/각주페이지추가, 각주삭제
(+ 자동 번호재정렬), 내용조회/내용수정, 마커텍스트, 위치시프트보정, 페이지별각주수집,
미주전체수집, 각주영역높이, 마커목록추출, 고아마커검출/고아각주검출(양방향),
직렬화/역직렬화, 개수. + 내부 헬퍼(레코드조립/필드추출/레코드위치/페이지/종류/내용,
올림나눔, 정수배열포함, 숫자문자인가).
- 핵심 VM 실측 확인: 함수 인자로 넘긴 배열에
추가(arr,v)를 호출하면 반환값을 캡처하지
않아도 호출측 원본 배열이 그대로 갱신됨(별칭 뮤테이션) —
각주추가(저장소, 위치, 내용)가
저장소를 재대입 없이 누적시키면서 부여된 번호만 반환하도록 설계할 수 있었던 근거.
전역 변수도 함수 내부 재대입이 누적됨(카운터 테스트로 별도 확인).
- 자체시험 36개 assert, 컴파일+실행 1회차에 36/36 PASS.
컴파일/실행
bashcd /Users/ef/CrownyOS/crownyc
./hanseonc_high /Users/ef/crowny-word/도구/각주미주.한선 > /tmp/각주미주.toau 2>/tmp/각주미주.err
./crownyc run /tmp/각주미주.toau
크라우니코드
- search "각주"/"미주" HIT 2건:
fn_웹코드보고서_웹코드_각주, fn_웹코드프린트_웹코드_각주
— 단 RGB/DOM 렌더링 전용(웹코드 보고서·프린트 도메인), 데이터 모델 로직 재사용 불가.
"[번호]" 마커 표기 관례만 확인 후
마커텍스트()에 차용.
- learn add 4건: 각주삭제번호재정렬, 위치시프트보정각주, 고아마커검출각주, 마커목록추출스캔.
잔여 이슈
- 내용 필드에 개행(
\n)을 넣으면 직렬화 레코드 구분자와 충돌 — 문서파일.한선/서식런.한선과
동일한 기존 관례(구분자와 겹치는 문자는 필드에 안 넣음)를 따름. 멀티라인 각주 내용이
필요하면 별도 이스케이프 규약 추가 필요.
- 각주추가는 항상 저장소 끝에 append(번호=현재길이). 문서 중간에 위치상 앞서는 각주를
나중에 추가하면 번호 순서가 문서상 위치 순서와 어긋날 수 있음(위치 기준 정렬 재배치는
범위 밖, 필요시 호출측이 정렬 후 재구성).
- 각주영역높이의 줄바꿈 계산은 단순 문자수/폭 올림나눔(CJK 표시폭 미고려) — 문단배치.한선의
표시폭/워드랩(한글 폭 2)과 통합하려면 이식 필요.