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

크라우니워드프로세서 — 편집기코어 도메인

개요

크라우니워드프로세서 기초도구 시리즈(도구/ 10파일: 텍스트버퍼·커서선택·편집연산·실행취소·검색치환·서식런·문단배치·문서파일·한글통계·클립보드뷰)에 이어, 세션(문서 편집) 상태 전체를 하나의 직렬화 문자열로 관리하는 편집기코어 도메인을 완전 한선씨(hanseonc_high)로 작성했다.

무엇을 했는지

  • 파일: /Users/ef/crowny-word/도구/편집기코어.한선 (가져오기 없이 자기완결)
  • 세션 상태 = 단일 문자열 직렬화(제어문자 0x01 구분자): 커서행|커서열|선택활성|선택시작행|선택시작열|선택끝행|선택끝열|더티|클립|텍스트
  • 핵심 API 16개: 세션생성, 상태직렬화/상태파싱, 세션텍스트, 세션커서, 명령실행("명령:인자" 디스패치), 문자입력, 백스페이스, 딜리트키, 엔터입력, 탭입력, 선택시작, 선택확장, 선택해제, 세션스냅샷, 세션복원
  • 기존 검증된 파일에서 로직 이식(재사용): 텍스트버퍼.한선(버퍼생성/버퍼삽입/버퍼삭제/버퍼텍스트 등)·커서선택.한선(커서좌우상하/줄시작끝/선택정규화/선택텍스트)을 복사+적응
  • 신규 헬퍼: 분리N(s,구분자,n) — 지정 개수만큼 필드를 분리하되 마지막 필드는 잔여 전체를 보존(텍스트/클립 필드가 임의 문자를 포함해도 안전), 구분자 부족 시 빈 문자열로 패딩
  • 명령 시퀀스 재생 자체시험 41개 assert 전부 통과 (검사: PASS 41/41)

실측 함정 (이번 세션에서 재확인)

  1. 누산 = 누산 + 함수호출() 인라인 누적 패턴이 41개 assert 중 대부분에서 조용히 소실됨 — 개별 PASS는 출력되지만 합계가 1/41로 붕괴. 변수 r = 함수호출(); 누산 = 누산 + r로 분리해 해결(기존 CLAUDE.md 문서화된 함정과 일치, 실사례로 재검증).
  2. 자체 작성한 범용 분리N(s,구분자,n) 헬퍼가 구분자가 부족한 입력(예: 콜론 없는 명령어 "엔터")에서 n개 미만 원소를 반환 → 꺼내(파트,1) 배열범위초과. 결과 배열 길이가 n 미만이면 빈 문자열로 패딩하도록 수정해 해결.

관련 파일

  • /Users/ef/crowny-word/도구/편집기코어.한선 (신규, 컴파일+실행 검증 완료)
  • 이식 출처: /Users/ef/crowny-word/도구/텍스트버퍼.한선, /Users/ef/crowny-word/도구/커서선택.한선
  • 컴파일: /tmp/편집기코어.toau (via hanseonc_high + crownyc run)

잔여 이슈

  • 클립보드 실제 복사/붙여넣기 연동(클립보드뷰.한선과의 결합)은 이번 파일 범위 밖 — 클립 필드는 보존만 검증했고 채우는 로직(예: 선택 복사)은 별도 작업 필요.
  • 상태 직렬화 구분자(0x01)가 사용자가 실제로 그 제어문자를 입력하는 극단 케이스는 처리하지 않음(문서화된 한계, 일반 텍스트 입력에서는 발생하지 않음).