← 목록
기타 2026-07-12 3KB 읽기 3분

크라우니워드프로세서 기초도구 — 각주미주.한선

개요

크라우니워드프로세서 기초도구 시리즈의 "각주미주" 도메인을 완전 한선씨(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)과 통합하려면 이식 필요.