크라우니워드프로세서 기초도구 — 개요문서지도.한선
개요
크라우니워드프로세서(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건 등록(개요수집_트리부모인덱스, 항목이동_블록스왑, 트리검증_부모레벨정합).
잔여 이슈
접기/펼치기는 단일 레벨 폴드만 처리(중첩 폴드 상태를 별도 보존하지 않음) — 중첩 폴드/펼침 히스토리가 필요하면 숨김들에 "누가 접었는지" 출처 태그를 추가하는 확장이 필요.
- 스타일 문자열의 헤딩 판정은 목차생성.한선과 동일하게 "제목"+숫자 접두사 규약에 의존 — 향후 서식런.한선의 실제 문단 스타일 시스템과 연동 시 매핑 계층 필요.