Commit Graph

14 Commits

Author SHA1 Message Date
gm
df011a5fcc feat(ui): 인라인 구분자 지원 및 리스트 자료형 제거
- VALUE_TYPES에서 '리스트 (List)' 제거
- SEP_CFG에 '줄바꿈' 프리셋 추가 (없음/줄바꿈/빈줄)
- toText() 재작성: lines 배열 → string 직접 결합 방식으로 변경
  - 인라인 구분자(예: '/') 사용 시 a/b/c 형태로 한 줄 출력
  - ss() 함수: none='' / newline='\n' / blank='\n\n' / 직접입력=그대로
  - pendingSep 패턴으로 연속 child node 간 구분자 처리

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-03 00:28:03 +09:00
gm
881b3d1f10 feat(ui): 노드 구분자 설정 추가 (다음 노드 / 하위 노드)
각 노드 카드 바디 상단에 구분자 설정 바 추가.
- 다음 노드 (nextSep): 이 노드 뒤~다음 형제 노드 사이 구분
- 하위 노드 (childSep): 이 노드 헤더~첫 자식 노드 사이 구분
- 프리셋: 없음 / 빈 줄 / 직접 입력
- toText()에 applySep() 적용, list 뒤 빈 줄은 기존 유지
- 기존 저장 데이터 normalizeState()로 자동 마이그레이션

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-03 00:07:31 +09:00
gm
65f5d4b422 feat(ui): 어트리뷰트 키를 드롭다운 선택으로 변경
ATTR_KEYS 목록 정의 (lang/id/class/href/align/order/required/readonly/
hidden/weight/style + 직접 입력). 이미 추가된 키는 드롭다운에서 제외.
키는 배지 레이블로 표시, 값만 자유 입력. 직접 입력 선택 시 prompt()로
키 이름 수동 입력 지원.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 23:59:41 +09:00
gm
839a3222ec refactor(ui): 노드 중심 전면 개편 v0.4
- 노드 헤더: 구분자·이름·숨기기 토글·이동·삭제
- 값 섹션: 드롭다운으로 list/node/string/integer 등 타입별 값 추가, 복수 지원
  - list: 이름목록·카테고리·구분자·줄당 N명
  - node: 하위 노드 카드 인라인 중첩 렌더링
  - 스칼라: 단순 입력(textarea는 markdown/html/json/code)
- 노드 설정 섹션: 드롭다운으로 필요한 옵션만 추가, 미선택=기본값
  - header/footer/prefix/suffix/attributes
- 데이터 모델: sections[]+groups[]+children[] → nodes[]+values[] 통합
- 구버전 localStorage 자동 마이그레이션

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 23:54:11 +09:00
gm
33a1296e8b refactor(ui): per-node delimiter, node settings panel consolidation
각 노드가 독립적인 구분자를 가지도록 전면 개편. 전역 구분자 설정 카드 제거.
노드 카드 구조: 구분자·제목·노드설정·하위노드. 이름 목록(LIST 그룹)을
노드설정 패널 안으로 통합. 불러오기 모달에 구분자 직접 입력 추가.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 23:21:16 +09:00
gm
3940d0c0ea refactor(ui): node-centric settings panel redesign
데이터 모델
- sec.name → sec.content (CTNode content 필드와 통일)
- grp.cat → grp.attributes.category (어트리뷰트 편집기로 통합)
- 모든 노드(SECTION, LIST)에 CTNode 기본 필드 추가:
  header / footer / prefix / suffix / data_type / value

노드 설정 패널 (▶ 노드 설정, 접이식)
- 텍스트 장식: header / footer / prefix / suffix
- 어트리뷰트: key-value 동적 추가·수정·삭제 (level은 자동 관리)
- 값: DataType 드롭다운(17종) + value 입력
- 비기본값 설정 시 파란 점(●) 표시
- openSettings Set으로 접이 상태 렌더 간 유지

기타
- mkSec / mkGrp / nodeDefaults 팩토리로 기본값 통일
- migrate()로 구버전 localStorage 자동 변환
- toJSON: header/footer/prefix/suffix/data_type/value 포함
- 구분자·한줄 옵션은 그룹 하단에 유지

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 00:28:56 +09:00
gm
7a7ff84a2d feat(ui): per-group separator and namesPerLine settings
- 전역 namesPerLine 제거 → 그룹별 개별 설정으로 전환
- 각 이름 그룹 카드에 두 가지 옵션 추가:
  - 구분자: 공백 / ", " / " / " / 줄바꿈(↵) 칩 + 직접 입력
  - 한 줄 N개: 0=제한없음, 줄바꿈 모드 시 자동 비활성화
- mkGrp() 헬퍼로 그룹 기본값(sep=' ', namesPerLine=0) 통일

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-01 23:56:08 +09:00
gm
f81fb09e3b feat(ui): add namesPerLine setting to builder
- 구분자 설정 카드에 '한 줄 N개' 입력란 추가
- 0 = 제한 없음 (기존 동작 유지)
- N > 0 이면 이름을 N개씩 줄 분할, 카테고리 prefix는 첫 줄에만
- localStorage 저장/복원 포함

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-01 23:43:21 +09:00
gm
bbee99a225 feat(ui): add standalone HTML form builder
- 좌측: 시각적 편집기 (섹션/이름그룹 추가·삭제·순서변경)
- 우측: 텍스트/JSON slim/JSON full 실시간 미리보기 + 복사
- 구분자 자유 설정 (이모지·문자열·임의 개수 레벨)
- 텍스트 불러오기 (EmojiMarkupParser JS 포트)
- localStorage 자동저장

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-01 22:41:50 +09:00
gm
a68a79411f feat: slim JSON, EmojiMarkupRenderer, configurable delimiters
- JSONRenderer(slim=True): null·기본값·빈 attributes 필드 제거
- EmojiMarkupRenderer: CTTree → 이모지 마크업 텍스트 왕복 변환 지원
  - title_mark / section_marks 커스터마이징 가능
  - names_per_line 옵션으로 줄당 이름 수 제한
- EmojiMarkupParser: 구분자를 생성자 파라미터로 주입 가능
  - section_marks 길이 제한 없음 (임의 깊이 섹션 지원)
  - 긴 마커 우선 매칭으로 prefix 충돌 방지
- 테스트 39개 추가 (커스텀 구분자·렌더러·slim 검증)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-01 18:30:13 +09:00
gm
daa590117d feat(parser): add EmojiMarkupParser for /🔹/🔸 format
-  → root title, 🔹 → SECTION(level=1), 🔸 → SECTION(level=2)
- (카테고리) 이름들 → LIST with category attribute + LIST_ITEM children
- 카테고리 없는 이름 줄은 빈 줄/새 섹션 전까지 동일 LIST로 묶음
- 22개 테스트 추가 (구조, 명단, 엣지케이스)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-01 18:14:04 +09:00
gm
fd98a4c705 feat(node): add header, footer, prefix, suffix, data_type, value fields
- CTNode에 6개 신규 필드 추가
  - header    : 머리글 (노드 블록 앞 텍스트)
  - footer    : 꼬리글 (노드 블록 뒤 텍스트)
  - prefix    : 접두사 (content 직전 인라인)
  - suffix    : 접미사 (content 직후 인라인)
  - data_type : 값의 자료형 힌트 (DataType enum)
  - value     : 해석된 값 (Any — str/int/float/bool/list/dict 등)
- types.py: DataType enum 추가 (UNSET, STRING~CODE, CUSTOM)
- node.py: full_text() 메서드 추가 (6개 필드 순서대로 조합)
- tree.py: to_dict / from_dict 직렬화에 신규 필드 포함
- 테스트: test_node_fields.py 신규 추가 (15개 케이스)
- 전체 테스트 42/42 통과
2026-05-30 21:13:22 +09:00
gm
3f26cbb687 chore: add .gitignore and remove cached build artifacts 2026-05-30 20:40:50 +09:00
gm
6e3cd19b55 feat: initial CTStruct framework
- CTNode: 트리 기본 단위 (전위/후위/BFS 순회, 탐색, 분리)
- CTTree: 트리 컨테이너 (빌더 API, TOC, filter/map/merge)
- NodeType: 구조/블록/인라인/메타 노드 타입 Enum
- MarkdownParser: Markdown → CTTree 파서
- MarkdownRenderer: CTTree → Markdown 렌더러
- JSONRenderer: CTTree → JSON 직렬화
- 27개 단위/통합 테스트 전체 통과
2026-05-30 20:40:28 +09:00