크라우니워드프로세서 — 렌더레이아웃 도구
개요
크라우니워드프로세서 기초도구 11번째 도메인 "렌더레이아웃"을 완전 한선씨로 작성. 텍스트를 화면/페이지에 배치하기 위한 픽셀 단위 폭 계산·워드랩·좌표↔문자위치 변환·페이지 요약을 담당.
무엇을 했는지
- 파일:
/Users/ef/crowny-word/도구/렌더레이아웃.한선 (자기완결, 가져오기 없음)
- 공개 함수 14종 + 내부 헬퍼 5종(글리프비율/어절분리/강제분할픽셀/줄단어랩픽셀 등):
글리프폭, 문자열폭(스펙명 "텍스트폭"에서 개명), 줄레이아웃, 말줄임, 정렬시작x, 양쪽정렬공백분배,
세로y, 문서높이, 좌표문자위치, 문자위치좌표, 여백본문폭, 줄번호영역폭, 문단시각줄목록, 레이아웃요약
- VM 빌트인 충돌 발견 및 회피: crownyc.c opcode754 "텍스트폭"(폰트,텍스트,크기 3인자)이 이미 존재 →
스펙의 "텍스트폭(텍스트,크기)" 2인자 함수는 "문자열폭"으로 개명해 충돌 회피. grep으로 hanseonc_high.c 사전 검증.
- 폭 단위 모델: 글리프폭 = ASCII 60%, 비ASCII(한글 등) 100% × 크기/100 — 문단배치.한선의 글자폭/표시폭 관례를
크기 스케일까지 확장 이식.
- 나눗셈 자연반올림 함정 회피: 좌표→행/열 변환은 이진탐색/나눗셈 대신 선형스캔으로 구현
(y/줄높이 나눗셈은 자연반올림 때문에 경계에서 floor와 어긋날 수 있어 배제).
- 양쪽정렬공백분배는 개별 반올림 값에 의존하지 않고 누적차분(cum(i+1)-cum(i)) 방식으로 합=입력 보존을 대수적으로 보장.
- 자체시험 30개 assert 전부 PASS (
검사: PASS 30/30).
관련 파일
/Users/ef/crowny-word/도구/렌더레이아웃.한선 (신규, 이번 작업)
- 참조/이식 대상:
/Users/ef/crowny-word/도구/문단배치.한선(글자폭·워드랩 관례), 텍스트버퍼.한선·커서선택.한선(버퍼=줄배열, 위치=[행,열] 규약)
- 컴파일 산출물:
/tmp/렌더레이아웃.toau (임시)
크라우니코드 학습
- lookup HIT 0건(신규 도메인) / MISS 14건(생성) / learn add 4건
(렌더레이아웃_글리프폭_정렬시작x, 렌더레이아웃_좌표문자위치_선형스캔, 렌더레이아웃_양쪽정렬공백분배_누적차분, 렌더레이아웃_문단시각줄목록_원본행매핑)
잔여 이슈
- 실제 폰트 메트릭(VM 754 폰트로드/텍스트폭/폰트높이)은 TTF 파일 필요 + GUI 환경 의존이라 미채택 — 이 도메인은 순수 근사 폭 모델(ASCII/비ASCII 비율)로 헤드리스 검증 가능하게 설계.
- 문단시각줄목록의 원본행 매핑은 "버퍼=줄 문자열배열(문단배치.한선의 빈줄기준 문단나눔 아님)" 규약 기준 — 상위 문서모델과 연동 시 문단나눔과의 관계 정리 필요.