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

크라우니워드프로세서 기초도구 — 개요문서지도.한선

개요

크라우니워드프로세서(crowny-word) 기초도구 시리즈에 "개요문서지도"(Outline/Navigation Pane) 도메인을 완전 한선씨로 추가. 제목(헤딩) 트리를 부모인덱스 병렬구조로 수집하고, 접기/펼치기, 항목이동(블록스왑), 승격/강등, 개요번호("1." "1.1"), 문서지도 텍스트, 다음/이전 제목 이동, 직렬화/트리검증까지 완비.

데이터모델 정렬 (동시세션 산출물과 호환)

작업 중 같은 디렉토리에 동시세션이 방금 만든 목차생성.한선(목차/TOC 생성기)을 발견 — 문단배열(줄 문자열 배열) + 스타일배열(병렬, "제목N"/"본문" 컨벤션) 데이터모델을 이미 확립하고 있었다. 개요문서지도는 이 모델을 그대로 채택해 두 도구가 같은 문단배열/스타일배열을 공유할 수 있게 설계했다(호환성 우선, 마크다운 # 방식 등 별도 컨벤션 발명 금지). 나누기/합치기/레벨추출/배열복사/들여쓰기 5개 헬퍼는 목차생성.한선에서 그대로 이식(실로직 확인 후 복사).

무엇을 했는지

  • 노드 인코딩: "레벨|부모인덱스|문단인덱스|텍스트" 파이프 직렬화. 텍스트에 |가 있어도 idx>=3 필드를 재조립(텍스트재조립)해 안전 — 별도 이스케이프 불필요(목차생성.한선보다 개선된 방식).
  • 트리 구축(개요수집): 고정 8슬롯 스택(레벨1~6 + 가상루트)을 설정()으로 관리해 부모인덱스 계산(배열 인덱스 직접대입 없이 append-only + 설정 패턴 준수).
  • 블록 범위(블록범위끝), 형제 탐색(다음형제인덱스/이전형제인덱스), 범용 블록 스왑(스왑블록)을 조합해 항목이동을 구현 — 문단배열/스타일배열 양쪽에 각각 호출해 병렬 유지.
  • 승격/강등은 텍스트가 아니라 스타일배열의 "제목N" 레벨만 변경(콤마 뒤 굵게 등 추가토큰 보존), 서브트리 범위 전체에 적용, 1~6 경계 밖은 no-op.
  • 개요번호는 레벨별 카운터 배열(설정/꺼내)로 하위 레벨 리셋 처리, "1." "1.1" "2.2.1" 등 표준 넘버링 생성.
  • 트리검증은 문단인덱스 문서순 증가 + 부모인덱스가 항상 이전 인덱스 + 부모 레벨 < 자식 레벨을 확인.

관련 파일

  • /Users/ef/crowny-word/도구/개요문서지도.한선 (신규, 이 작업의 산출물)
  • /Users/ef/crowny-word/도구/목차생성.한선 (동시세션 산출, 데이터모델/헬퍼 5개 출처 — read-only 참조)
  • 컴파일 산출물: /tmp/개요문서지도.toau

검증

hanseonc_high 컴파일 성공 → crownyc run 실행 → 자체시험 59/59 PASS (첫 시도, 수정 없음). 커버: 트리수집·부모인덱스·블록범위·형제탐색·접기/펼치기/가시줄필터·항목이동(스왑+no-op)·승격/강등(서브트리 전파+경계가드)·개요번호(리셋포함)·문서지도텍스트·다음/이전제목·직렬화왕복·파이프텍스트 재조립·트리검증(정상/부모범위오류/문단역순오류).

크라우니코드

lookup/search MISS(학습DB 비어있음, "트리 부모인덱스"/"개요 목차 트리" 검색 0건) → 전부 신규 생성(5함수는 목차생성.한선에서 코드 이식, 14+ 함수는 신규 로직) → learn add 3건 등록(개요수집_트리부모인덱스, 항목이동_블록스왑, 트리검증_부모레벨정합).

잔여 이슈

  • 접기/펼치기는 단일 레벨 폴드만 처리(중첩 폴드 상태를 별도 보존하지 않음) — 중첩 폴드/펼침 히스토리가 필요하면 숨김들에 "누가 접었는지" 출처 태그를 추가하는 확장이 필요.
  • 스타일 문자열의 헤딩 판정은 목차생성.한선과 동일하게 "제목"+숫자 접두사 규약에 의존 — 향후 서식런.한선의 실제 문단 스타일 시스템과 연동 시 매핑 계층 필요.