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

크라우니워드프로세서 — 서식런.한선 (도메인 6/10)

개요

크라우니워드프로세서 기초도구 100 중 도메인 6 "서식런"(문자 서식/런 관리) 10함수를 완전 한선씨(hanseonc_high 경로)로 작성. 자기완결(임포트 없음), 컴파일+실행 검증 완료.

설계

  • 런상태 = 단일 직렬화 문자열 "시작|끝|속성;시작|끝|속성;..." (append-only)
  • 속성 = 콤마구분 토큰 목록: 플래그(굵게/기울임/밑줄) + 키값(크기:14, 색:#C9A961)
  • 겹치는 구간은 나중에 append된 런이 조회 시 우선(last-wins overlay 모델)
  • 배열 중첩·맵을 쓰지 않고 문자열 파싱만으로 구현(한선씨 배열 참조형/맵 함정 회피)

구현 함수 (11개 — 설계서 10항목 중 마지막 1항목이 직렬화+역직렬화 2함수로 확장)

  1. 런추가(런상태,시작,끝,속성) — 런 append
  2. 위치속성조회(런상태,오프셋) — 해당 오프셋 실효 속성("" = 없음)
  3. 굵게토글 / 4. 기울임토글 / 5. 밑줄토글 — 시작 오프셋 기준 현재상태 판정 후 토글
  4. 크기설정 / 7. 색설정 — 기존 토큰 있으면 교체, 없으면 추가(다른 토큰 보존)
  5. 런병합 — 스윕라인(경계오프셋 수집→정렬→유일화→구간별 실효속성 계산→인접동일속성 병합)
  6. 런분할(런상태,오프셋) — 오프셋이 런 내부를 관통할 때만 2개로 쪼갬(경계 일치는 무동작)
  7. 런직렬화 / 11. 런역직렬화 — 파싱+재조립 왕복(canonical form 검증)
내부 헬퍼(비공개, 크로스파일 재사용 없음): 나누기(단일문자 split), 합치기(join), 런목록, 속성있나, 속성토글, 속성값넣기.

검증

cd /Users/ef/CrownyOS/crownyc
./hanseonc_high /Users/ef/crowny-word/도구/서식런.한선 > /tmp/서식런.toau 2>/tmp/서식런.err
./crownyc run /tmp/서식런.toau
결과: 검사: PASS 20/20 (토글 2회 원복, 병합/분할 왕복, 겹침 last-wins, 직렬화 왕복 등 20 assert) 컴파일 exit=0, stderr 경고 없음, 6005 큐브.

관련 파일

  • /Users/ef/crowny-word/도구/서식런.한선 (본 산출물)
  • /Users/ef/crowny-word/설계서.md (전체 100도구 설계, Fable 작성)
  • 나머지 9도메인(텍스트버퍼/커서선택/편집연산/실행취소/검색치환/문단배치/문서파일/한글통계/클립보드뷰)은 미착수

크라우니코드 학습

lookup HIT 0건(신규 도메인) / MISS 4건(핵심 함수 4종 add로 학습) — 런추가/위치속성조회/런병합스윕라인/런분할오프셋

잔여 이슈

  • 굵게/기울임/밑줄 토글은 범위 시작 오프셋의 속성을 대표값으로 채택(범위 내 혼합서식은 단순화) — 실제 워드프로세서급 정밀도가 필요하면 런분할 선행 후 부분 토글 조합 필요(엔진 통합 단계에서 편집연산.한선과 연계 예정)
  • 다음 단계: 나머지 9개 도메인 파일 순차 작성 → 편집기코어.한선 통합