Skip to content

feat: JSON 작성기 경량화 — 기본값 생략·한글 비이스케이프 (corpus 3,043 → 378 KB, 스키마 그대로) - #62

Merged
centwon merged 3 commits into
mainfrom
feat/lean-json
Oct 2, 2026
Merged

centwon merged 3 commits into
mainfrom
feat/lean-json

Conversation

@centwon

@centwon centwon commented Oct 1, 2026

Copy link
Copy Markdown
Owner

스키마는 그대로(1.0)이고 작성기만 바꿨다.

  • 판독기가 없을 때 가정하는 값과 같은 필드는 쓰지 않는다. 비ASCII 글자는 그대로 쓰고(HTML에 민감한 문자만 이스케이프), 들여쓰기는 없앴다.
  • 구 판독기 호환은 실제로 확인했다. 변경 전 트리가 새 형식으로 쓴 문서 18개를 읽어 다시 쓴 결과가, 자기가 쓴 출력과 바이트 단위로 같았다(JSON·.flow 모두).
  • 실측(corpus): 240.6 → 37.7 KB, 3,043 → 378 KB.
  • 메이저 버전이 더 높은 문서는 로드 경로(LoadJson·LoadJsonAsync·LoadPackageAsync)가 거부한다. 모르는 블록·인라인 Type은 진단으로 보고한다.
  • 문단 MarginTop이 NaN이면 직렬화가 예외를 던지던 것을 고쳤다.
  • docs/DOCUMENT_FORMAT.md를 코드에 맞췄다.
  • ⚠ JSON을 바이트로 비교하는 호스트 테스트는 갱신해야 한다.

검증: unit 1307 + render 55, 반증 9건.

🤖 Generated with Claude Code

스키마는 그대로("1.0"). 판독기가 없을 때 가정하는 값과 같은 필드는 쓰지 않는다
(run의 Bold/Italic/Underline/Strikethrough/FontSize 10, 문단 기본 필드, 기본 Type,
Rows/Columns, 병합 없는 표의 span 격자, 레거시 IsListItem). 비ASCII는 그대로 쓰고
HTML 민감 문자만 이스케이프(UnicodeRanges.All). 들여쓰기 없음.
corpus 240.6 -> 37.7 KB, 3,043 -> 378 KB.

구 판독기 호환: 변경 전 트리가 새 출력 18개를 읽어 자기 출력과 바이트 동일(JSON·.flow).
구 형식 fixture(format-1.0-verbose-kitchen-sink.json)를 새 판독기가 그대로 읽는 테스트.

그 밖: 메이저 버전이 더 높은 문서는 로드 경로가 거부(JsonException) ·
모르는 블록/인라인 Type은 RichEditorDiagnostics에 보고 · 문단 MarginTop NaN 직렬화 예외 ·
DOCUMENT_FORMAT.md를 코드에 맞춤(손상=예외, 여백 15mm, 자동 MarginTop, 가져오기 상한).

테스트 LeanJsonFormatTests 14, 반증 9. unit 1307 + render 55.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
centwon and others added 2 commits October 1, 2026 13:06
- JSON 로드도 같은 서식의 이웃 run을 합친다(HTML·RTF와 포트처럼)
- 색은 Color.ToString()(이름·소문자) 대신 #AARRGGBB 대문자 — 사양대로, 포트와 같게
- Alt·VAlign 선언 순서를 포트와 맞춤
- Fixtures/format-1.0-interchange.json: 모든 필드를 쓰는 정본 문서, 포트도 같은 파일·같은 테스트
- 만든 모델과 비교하던 왕복 테스트 3개는 한 번 읽은 출력 기준으로

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 로드 시 run 합치기, 색 #AARRGGBB 대문자(이전 판의 이름·소문자 표기 기록), 행 없는 표, 교환 정본 파일

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@centwon

centwon commented Oct 1, 2026

Copy link
Copy Markdown
Owner Author

추가 커밋 2개(6a8a470, 1f8b1ec) — 한 문서는 두 에디터에서 같은 바이트: JSON/.flow 로드 시 같은 서식의 run 합치기, 색 #AARRGGBB 대문자(Color.ToString()의 이름·소문자 표기 대신), Alt/VAlign 필드 순서를 포트와 맞춤, 교환 정본 파일 Fixtures/format-1.0-interchange.json(포트에 같은 파일·같은 테스트). 만든 모델과 비교하던 왕복 테스트 3개는 한 번 읽은 출력 기준으로. 반증 4/4. 제목 모델 일치화는 이 위에 쌓은 #63.

@centwon
centwon merged commit 233fcbf into main Oct 2, 2026
4 checks passed
@centwon
centwon deleted the feat/lean-json branch October 2, 2026 07:13
@centwon
centwon restored the feat/lean-json branch October 2, 2026 07:14
@centwon
centwon deleted the feat/lean-json branch October 2, 2026 07:14
centwon added a commit that referenced this pull request Oct 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant