Skip to content

Commit 310f3a6

Browse files
authored
Merge pull request #151 from dev-five-git/v2
V2
2 parents 114262e + 731f09c commit 310f3a6

File tree

388 files changed

+34752
-6185
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

388 files changed

+34752
-6185
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"changes":{"packages/dotnet/Braillify/Braillify.csproj":"Major","libs/braillify/Cargo.toml":"Major","packages/node/package.json":"Major","packages/python/pyproject.toml":"Major","packages/dotnet/BraillifyNet/BraillifyNet.csproj":"Major"},"note":"version 2","date":"2026-04-08T12:52:31.939911700Z"}

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,4 @@ codecov.*
1616
**/.DS_Store
1717
**/._.DS_Store
1818
.claude
19-
CLAUDE.md
19+
.omc

AGENTS.md

Lines changed: 79 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -1,100 +1,106 @@
1-
# PROJECT KNOWLEDGE BASE
1+
# Braillify
22

3-
**Generated:** 2026-01-13
4-
**Commit:** b1d6b2b
5-
**Branch:** main
3+
한국어 텍스트를 한국 점자로 변환하는 라이브러리.
64

7-
## OVERVIEW
5+
## 프로젝트 구조
86

9-
Korean Braille (Jeomja) translation library implementing 2024 Korean Braille Standard. Core in Rust with WASM (Node.js) and PyO3 (Python) bindings.
7+
- `libs/braillify/` — Rust 핵심 변환 엔진
8+
- `packages/node/` — Node.js WASM 바인딩
9+
- `packages/python/` — Python 바인딩 (maturin)
10+
- `apps/landing/` — Next.js 랜딩 페이지
11+
- `test_cases/` — 점자 변환 테스트 케이스 (JSON)
12+
- `docs/` — 2024 개정 한국 점자 규정 PDF
13+
- `braillove-case-collector/` — 점자 내부표기 → 숫자/유니코드 변환기
1014

11-
## STRUCTURE
15+
## 빌드 & 테스트
1216

13-
```
14-
braillify/
15-
├── libs/braillify/ # Core Rust library (see libs/braillify/AGENTS.md)
16-
├── packages/
17-
│ ├── node/ # WASM bindings via wasm-pack
18-
│ └── python/ # PyO3 bindings via maturin
19-
├── apps/landing/ # Next.js 16 docs site (@devup-ui)
20-
├── test_cases/ # CSV rule test cases (61 files)
21-
├── test_case_inputs/ # Input-only test CSVs
22-
├── __tests__/ # Bun JS integration tests
23-
├── py-test/ # Pytest Python tests
24-
└── braillove-case-collector/ # Windows automation tool
17+
```bash
18+
bun install
19+
cargo build --release -p braillify
20+
bun test # 전체 테스트 (Rust + Bun + Python)
21+
bun test test_cases/ # 테스트케이스 무결성 검증만
2522
```
2623

27-
## WHERE TO LOOK
24+
## 테스트 케이스 규칙
2825

29-
| Task | Location | Notes |
30-
| ------------------------- | ------------------------------------------ | --------------------------------------- |
31-
| Braille encoding logic | `libs/braillify/src/lib.rs` | Main `Encoder` struct, `encode()` |
32-
| Korean character handling | `libs/braillify/src/korean_*.rs` | Choseong/Jungseong/Jongseong |
33-
| Rule implementations | `libs/braillify/src/rule.rs`, `rule_en.rs` | Korean Braille Standard rules |
34-
| Symbol/shortcut tables | `libs/braillify/src/*_shortcut.rs` | PHF static maps |
35-
| CLI | `libs/braillify/src/cli.rs` | REPL mode, one-shot mode |
36-
| Node.js API | `packages/node/src/lib.rs` | `encode`, `translateToUnicode` |
37-
| Python API | `packages/python/src/lib.rs` | Same API + CLI entry |
38-
| Landing page | `apps/landing/src/app/` | Next.js App Router |
39-
| Test cases | `test_cases/*.csv` | Format: input,internal,expected,unicode |
26+
### 파일 구조
4027

41-
## CONVENTIONS
28+
- `test_cases/korean/rule_{N}.json` — 한글 점자 제N항
29+
- `test_cases/korean/rule_{N}_b1.json` — 제N항 붙임 1
30+
- `test_cases/math/math_{N}.json` — 수학 점자 제N항
31+
- 근거: `docs/2024 개정 한국 점자 규정.pdf`
4232

43-
### Rust
33+
### 엔트리 형식
4434

45-
- Edition 2024, resolver 3
46-
- PHF macros for static lookup tables
47-
- `Result<T, String>` for encoding errors (no custom error type)
48-
- Feature flags: `cli` (default), `wasm`
49-
- Tests inline with `#[cfg(test)]` modules
35+
```json
36+
{
37+
"input": "입력 텍스트 (묵자 또는 LaTeX)",
38+
"note": "설명 (선택, 동일 input이 여럿이거나 맥락 필요 시에만)",
39+
"internal": "점자 내부표기",
40+
"expected": "브라유셀 인덱스 연결 문자열",
41+
"unicode": "점자 유니코드 문자열"
42+
}
43+
```
5044

51-
### TypeScript
45+
### internal → expected/unicode 변환
5246

53-
- `strict: true`, `moduleResolution: bundler`
54-
- `@/*` path alias to `./src/*`
55-
- ESLint: `eslint-plugin-devup` recommended config
56-
- Bun test with a preload plugin for WASM tests
47+
`braillove-case-collector/converter.py`의 패턴을 따른다:
5748

58-
### Python
49+
```
50+
pattern: " a1b'k2l@cif/msp"e3h9o6r^djg>ntq,*5<-u8v.%[$+x!&;:4\0z7(_?w]#y)="
51+
braille: ⠀⠁⠂⠃⠄⠅⠆⠇⠈⠉⠊⠋⠌⠍⠎⠏⠐⠑⠒⠓⠔⠕⠖⠗⠘⠙⠚⠛⠜⠝⠞⠟⠠⠡⠢⠣⠤⠥⠦⠧⠨⠩⠪⠫⠬⠭⠮⠯⠰⠱⠲⠳⠴⠵⠶⠷⠸⠹⠺⠻⠼⠽⠾⠿
52+
```
5953

60-
- Requires Python >= 3.13 (workspace), >= 3.8 (package)
61-
- `uv` for workspace management
62-
- `maturin` for building wheels
63-
- CLI entry: `braillify = "braillify:cli"`
54+
특수 매핑: `` ` ``→0, `{`→42, `}`→59, `~`→24, `|`→51
6455

65-
## ANTI-PATTERNS (THIS PROJECT)
56+
`expected`는 각 문자의 인덱스를 문자열로 이어붙인 것, `unicode`는 대응하는 점자 유니코드 문자를 이어붙인 것이다.
6657

67-
- **Never suppress encoding errors** - propagate `Result<T, String>`
68-
- **Never modify CSV test files without running full test suite** - `rule_map.json` must match
69-
- **Avoid `as any` or `@ts-ignore`** in TypeScript
58+
### 무결성 검증
7059

71-
## COMMANDS
60+
`test_cases/testcase-integrity.test.ts`가 모든 엔트리의 internal → expected/unicode 일치를 검증한다. 대문자(수학 변수 A, B 등)를 포함한 internal은 기본 패턴 외이므로 skip된다.
7261

73-
```bash
74-
# Install dependencies (runs uv sync, wasm-pack install, maturin install)
75-
bun install
62+
### 테스트 케이스 작성 원칙
7663

77-
# Build all packages
78-
bun run build
64+
1. **PDF가 유일한 근거**`docs/2024 개정 한국 점자 규정.pdf`에 없는 예제를 만들지 않는다.
65+
2. **PDF 순서 준수** — 기호 정의 → 해당 예제 순서로, PDF에 나온 순서 그대로 배치한다.
66+
3. **기호 단독 엔트리 필수** — 각 기호는 단독 엔트리로 먼저 등록하고, 그 뒤에 해당 기호를 사용하는 예제가 온다.
67+
4. **note는 필요할 때만** — 동일 input이 다른 의미로 쓰일 때, 또는 맥락이 필요할 때만 추가한다. input을 반복하는 note는 쓰지 않는다.
68+
5. **소속 정확히** — 각 엔트리는 해당 항 파일에만 존재한다. 다른 항의 예제를 섞지 않는다.
7969

80-
# Run all tests (Rust coverage + Bun test + Pytest)
81-
bun run test
70+
### LaTeX 입력
8271

83-
# Build landing site (requires test_status.json from test run)
84-
bun run build:landing
72+
수학 수식은 LaTeX 형식의 input도 테스트한다. 기존 엔트리의 LaTeX 버전을 추가하는 방식이다:
8573

86-
# Dev server for landing
87-
bun -F landing dev
74+
- 형식: `$<LaTeX 수식>$` (앞에 `$`, 뒤에 `$`)
75+
- 동일한 `internal`/`expected`/`unicode`를 공유
76+
- `"note": "LaTeX"` 표기
77+
- **기존 예제의 변환만** — 새로운 수식을 만들지 않는다
8878

89-
# Lint
90-
bun run lint
91-
bun run lint:fix
79+
```json
80+
{
81+
"input": "$\\frac{3}{4}$",
82+
"note": "LaTeX",
83+
"internal": "#d/#c",
84+
"expected": "6025129",
85+
"unicode": "⠼⠙⠌⠉"
86+
}
9287
```
9388

94-
## NOTES
89+
주요 LaTeX 변환:
90+
91+
| 수식 | LaTeX |
92+
|------|-------|
93+
| 분수 | `$\frac{분자}{분모}$` |
94+
| 근호 | `$\sqrt{x}$`, `$\sqrt[n]{x}$` |
95+
| 위첨자 | `$x^{2}$` |
96+
| 아래첨자 | `$x_{n}$` |
97+
| 부등호 | `$\neq$`, `$\geq$`, `$\leq$` |
98+
| 절댓값 | `$\|x\|$` |
99+
| 무한대 | `$\infty$` |
100+
| 적분 | `$\int f(x)dx$` |
101+
| 집합 | `$\cup$`, `$\cap$`, `$\subset$`, `$\emptyset$` |
102+
| 논리 | `$\land$`, `$\lor$`, `$\forall$`, `$\exists$` |
103+
104+
### 대문자 수학 변수
95105

96-
- **Test output**: `cargo test test_by_testcase` generates `test_status.json` for landing page
97-
- **WASM build**: `wasm-pack build --target bundler` in `packages/node`
98-
- **Python wheel**: `maturin build --release` in `packages/python`
99-
- **No CI workflows checked in** - build/test orchestrated via root `package.json`
100-
- **Korean comments** in Rust code reference specific rule numbers (e.g., "제14항")
106+
수학 점자에서 대문자 변수(A, B, N 등)를 사용하는 internal은 기본 64셀 패턴에 포함되지 않는다. 이런 엔트리는 `expected`/`unicode`가 빈 문자열이며, 무결성 테스트에서 자동으로 skip된다.

CLAUDE.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
@AGENTS.md

0 commit comments

Comments
 (0)