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

크라우니워드프로세서 기초도구 — RTF내보내기

개요

크라우니워드프로세서 기초도구 시리즈 중 "RTF내보내기" 도메인을 완전 한선씨로 작성. 문서(제목+문단+정렬+문자서식런)를 유효한 RTF(Rich Text Format) 텍스트로 변환하는 10개 공개 함수 + 내부 헬퍼로 구성.

무엇을 했는지

  • 파일: /Users/ef/crowny-word/도구/RTF내보내기.한선 (자기완결, 가져오기 없음)
  • 공개 함수 10종: RTF헤더 / 색테이블수집 / RTF이스케이프 / 굵게기울임런변환 / 문단변환(\par) / 정렬변환 / 표기초변환 / 문서RTF조립 / 중괄호짝검증 / RTF저장
  • 이식(재사용): 서식런.한선에서 나누기·런목록·속성있나·위치속성조회·런추가 5개 헬퍼를 복사(동일 이름, 단일 파일 자기완결이라 충돌 없음).
  • 런상태 포맷은 서식런.한선과 동일("시작|끝|속성;...", 속성=콤마구분 "굵게"/"기울임"/"밑줄"/"색:#RRGGBB").
  • 유니코드 처리: RTF \uN? 방식. N=코드포인트, 32767 초과시 코드포인트-65536(서명 16비트) 보정. 코드값(문자) 내장함수는 문단배치.한선에서 이미 실사용 확인된 것을 그대로 재사용(가 → 44032 실측 확인).
  • 색상: "#RRGGBB" 16진 파싱용 헥스값/헥스바이트/색R/색G/색B 헬퍼 신규 작성(식별자가 숫자로 시작할 수 없어 "16진값"→"헥스값"으로 개명한 컴파일 함정 1건 실측·수정).
  • 중괄호짝검증: \{ \} \\ 이스케이프를 건너뛰며 순수 구조적 { } 짝만 카운트하는 스캐너 — 문서RTF조립 결과물의 종단 무결성 검증에 사용.
  • 자체시험 assert 35건 전부 PASS (검사: PASS 35/35).

실측 VM 함정 (이번 세션)

  1. 함수명이 숫자로 시작하면 컴파일 에러("함수명 기대, '16' 발견") → 16진값헥스값으로 개명.
  2. 통과 = 통과 + 확인(...) 인라인 누산 패턴이 조용히 소실됨(가드레일 §4 "누산=누산+함수호출() 인라인 금지"의 실측 재현) — 개별 PASS/FAIL 출력은 35건 다 정상인데 최종 합계가 "PASS 1/35"로 붕괴. 변수 체크N = 확인(...); 통과 = 통과 + 체크N 패턴으로 전량 교정 후 정상화(35/35). 대량 assert 파일 작성 시 반드시 임시변수 경유할 것 — 이 함정은 매우 조용해서(개별 로그는 다 맞음) 최종 합계만 보고 놓치기 쉬움.
  3. 포함(s,sub)은 불리언이 아니라 인덱스 반환(기존 가드레일 지식과 일치) — 표기초변환 테스트에서 포함(...)==0 대신 포함(...)>=0 로 정정.

관련 파일

  • /Users/ef/crowny-word/도구/RTF내보내기.한선 (신규, 완성)
  • /Users/ef/crowny-word/도구/서식런.한선 (헬퍼 이식 원본, 읽기만, 미수정)
  • /Users/ef/crowny-word/도구/문단배치.한선 (코드값 내장함수 재사용 확인 원본, 읽기만, 미수정)
  • /Users/ef/crowny-word/도구/문서파일.한선 (기존 HTML이스케이프/문서구조 패턴 참고, 읽기만, 미수정)

크라우니코드

  • lookup/search: HTML이스케이프(HIT, 서로 다른 이스케이프라 미사용) / 이스케이프(HIT 다수, 서로 다른 포맷) — RTF 고유 로직은 전부 MISS(신규 생성)
  • learn add 4건: rtf문자열이스케이프 / rtf굵게기울임런변환 / rtf색테이블수집 / rtf문서RTF조립

잔여 이슈

  • RTF저장/문서RTF조립은 "유효한 RTF 텍스트" 산출까지가 범위. 실제 .rtf 확장자 파일은 텍스트 포맷이라 별도 바이너리 패키징 불필요(범위 내 완결).
  • 이미지 임베드(\pict), 각주/목차 등 고급 RTF 기능은 범위 밖(기초도구 명세에 없음) — 필요 시 별도 도메인으로 확장.
  • 색상은 RGB 헥스만 지원(테마색상.한선 등 다른 세션 산출물과의 색상 팔레트 연동은 미검토).