From 8fc6f35b30642f3a8ebbd7f5f47b70195c8ffea1 Mon Sep 17 00:00:00 2001 From: eunhhu Date: Wed, 30 Sep 2026 13:19:01 +0100 Subject: Say how a value is shown, and what a screen never lets it do --- docs/design/001-first-component.md | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/docs/design/001-first-component.md b/docs/design/001-first-component.md index 325093a..d3ba7e6 100644 --- a/docs/design/001-first-component.md +++ b/docs/design/001-first-component.md @@ -56,8 +56,25 @@ TUI 입력: 앱에 text 입력이 있으면 처음에는 글자가 입력 줄로 Tab이 키 모드로 바꾸면 글자·숫자·Space가 `KeyA`·`Digit0`·`Space` 입력이 된다(앱이 Tab을 쓰면 Tab은 앱의 것). 화살표·Delete·Home 같은 키는 두 모드 모두 앱으로 간다. Ctrl-C나 Ctrl-Q로 끝내고 터미널을 되돌린다. -표시 폭은 Vega가 맡는다. 한글·CJK·그림 이모지는 두 칸, 결합 문자·변이 선택자·ZWJ는 0칸, 제어 문자는 -제어 그림(U+2400대)으로 보인다. grapheme 단위 자르기는 아직 없어 ZWJ 이모지 묶음은 근사다. +표시 폭은 Vega가 맡는다. 한글·CJK·그림 이모지는 두 칸, 결합 문자·변이 선택자·ZWJ는 0칸이다. grapheme 단위 +자르기는 아직 없어 ZWJ 이모지 묶음은 근사다. + +**값이 보이는 방식.** 값은 제 자리 안에서 제 글자로 보인다. 화면에 작용할 글자만 예외다(Pure +`docs/design/015-boundary-meaning.md`가 정한 값의 뜻의 화면 쪽이다). + +- 제어 문자(C0)와 DEL은 제어 그림(␀…␟, ␡)으로, C1 제어는 �로, 줄과 문단의 구분자(U+2028, U+2029)는 ␤로 보인다 + (`vega_visible`). CLI, TUI, 픽셀, 웹 페이지가 모두 같다. 값은 제 줄을 끊지 못한다. +- 터미널의 칸(TUI, CLI)에서는 뒤따르는 글줄을 뒤집을 제어(방향 임베딩·오버라이드·격리, U+202A–202E, U+2066–2069)도 + �로 보인다(`vega_cell`). 터미널은 그 뒤의 칸까지 제 방식으로 다시 늘어놓기 때문이다. 픽셀은 Vega가 값의 자리 안에서 + 양방향을 처리하고, 웹 페이지는 값마다 격리한다(`unicode-bidi: isolate`). +- 문장(NUI)은 작용할 글자를 공백으로 말하고, 방향 제어는 말하지 않는다. +- 웹의 `/screen` JSON은 값을 그대로 싣는다(API는 잃지 않는다). 페이지가 위의 규칙대로 보인다. +- 그래서 값의 어떤 바이트도 터미널에 제어로 닿지 않는다. 다른 노드가 보낸 글(메신저의 줄)로도 받는 쪽의 화면을 + 조작하지 못한다. +- 픽셀에서 방향 제어가 든 값은 칸 너비가 한 칸 넓게 잡힌다(칸 너비는 `vega_cell`로 센다). 드물고, 겉모양만의 일이다. + +`tests/check.py`의 `screen_meaning`이 CLI, TUI, 문장, 웹 JSON을 이 규칙으로 보고, 어느 표면에도 작용할 글자가 날로 +나가지 않는지 본다. `browser`가 페이지의 그림과 격리를 본다. ## 웹 (GUI) -- cgit v1.2.3