Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
219cbdc
Feat english braille rules
belltalion May 26, 2026
b704bc5
feat: add test case collector script and populate comprehensive Engli…
indianaPoly Jun 15, 2026
438d01b
feat: add extensive collection of English rule test case JSON files
indianaPoly Jun 15, 2026
c8b6fa4
feat: add comprehensive English braille rule test cases
indianaPoly Jun 16, 2026
1a473fd
test: add test cases for rule 13.6.4 and an empty rule template
indianaPoly Jun 17, 2026
50847d4
feat: add test cases for English rules 13.7.2 and 13.8.1
indianaPoly Jun 17, 2026
82afdbc
test: add new English rule test cases for braille conversion validation
indianaPoly Jun 17, 2026
f1d6485
feat: add new English test case JSON files for multiple braille rules
indianaPoly Jun 19, 2026
12180d2
Fix rule_map
owjs3901 Jun 19, 2026
e15f5a5
feat(ueb): add feature-gated Grade-2 English (UEB) braille encoder
owjs3901 Jun 19, 2026
7a40e65
feat(ueb): encode \$ currency sign (§3.10) with LaTeX guard
owjs3901 Jun 20, 2026
3026794
Fix rule and impl en rules
owjs3901 Jun 21, 2026
d7e732b
Merge UEB
owjs3901 Jun 21, 2026
79706ec
Imp UEB
owjs3901 Jun 23, 2026
ca856c1
Add test
owjs3901 Jun 25, 2026
ee640ba
Fix testcase
owjs3901 Jun 29, 2026
58a936c
Fix testcase
owjs3901 Jun 29, 2026
0fd4439
Improve
owjs3901 Jun 29, 2026
4c28184
Fix rule 10
owjs3901 Jun 29, 2026
9f142fa
Improve
owjs3901 Jun 29, 2026
4a8ab67
Improve UEB english rules: symbols, typeform, contractions
owjs3901 Jun 30, 2026
ae4a01b
Fix fixture patch issue
owjs3901 Jul 1, 2026
835fca0
Fix rule 10
owjs3901 Jul 1, 2026
8f464f9
Improve
owjs3901 Jul 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
47 changes: 46 additions & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

123 changes: 123 additions & 0 deletions braillove-case-collector/reverse_converter.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
"""
Unicode 점자 → internal / expected 역변환기

Usage:
python reverse_converter.py
(유니코드 점자 문자열 입력 시 internal과 expected 출력)
"""

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

# 특수 매핑 (pattern에 없는 문자들)
# internal char → braille index
SPECIAL_FORWARD = {
"`": 0, # 백틱 → 인덱스 0 (공백과 동일)
"{": 42, # 여는 중괄호
"}": 59, # 닫는 중괄호
"~": 24, # 물결표
"|": 51, # 파이프
}

# braille index → internal char (역매핑은 pattern 우선, 특수문자는 별도 처리 필요)
# 특수 매핑의 역방향: 같은 인덱스에 여러 internal 문자가 매핑될 수 있음
# - 인덱스 0: 공백(' ') 또는 백틱('`')
# - 인덱스 42: '*' (pattern) 또는 '{' (special)
# - 인덱스 59: ']' (pattern) 또는 '}' (special)
# - 인덱스 24: '^' (pattern) 또는 '~' (special)
# - 인덱스 51: '%' (pattern) 또는 '|' (special)
#
# 기본적으로 pattern의 문자를 우선 사용 (원본 converter.py가 internal→unicode 변환 시
# pattern에 있으면 pattern 사용, 없으면 special 사용하므로)


def normalize_unicode(unicode_str: str) -> str:
"""
일반 스페이스(U+0020)를 점자 스페이스(U+2800)로 변환
"""
return unicode_str.replace(' ', '⠀') # U+0020 → U+2800


def unicode_to_internal(unicode_str: str) -> str:
"""
유니코드 점자 문자열을 internal 표기로 변환

Args:
unicode_str: 점자 유니코드 문자열 (예: "⠼⠙⠌⠉")

Returns:
internal 표기 문자열 (예: "#d/c")
"""
unicode_str = normalize_unicode(unicode_str)
result = []
for char in unicode_str:
if char in braille:
idx = braille.index(char)
result.append(pattern[idx])
else:
raise ValueError(f"Unknown braille character: {char} (U+{ord(char):04X})")
return "".join(result)


def unicode_to_expected(unicode_str: str) -> str:
"""
유니코드 점자 문자열을 expected (인덱스 문자열)로 변환

Args:
unicode_str: 점자 유니코드 문자열 (예: "⠼⠙⠌⠉")

Returns:
expected 인덱스 문자열 (예: "6025129")
"""
unicode_str = normalize_unicode(unicode_str)
result = []
for char in unicode_str:
if char in braille:
idx = braille.index(char)
result.append(str(idx))
else:
raise ValueError(f"Unknown braille character: {char} (U+{ord(char):04X})")
return "".join(result)


def convert_unicode(unicode_str: str) -> tuple[str, str]:
"""
유니코드 점자를 internal과 expected로 동시에 변환

Args:
unicode_str: 점자 유니코드 문자열

Returns:
(internal, expected) 튜플
"""
internal = unicode_to_internal(unicode_str)
expected = unicode_to_expected(unicode_str)
return internal, expected


def main():
"""대화형 모드: 유니코드 점자 입력 → internal, expected 출력"""
print("Unicode 점자 → internal / expected 역변환기")
print("점자 유니코드 문자열을 입력하세요 (빈 줄 입력 시 종료)")
print("-" * 50)

while True:
try:
inp = input("unicode> ").strip()
if not inp:
break

internal, expected = convert_unicode(inp)
print(f"internal: {internal}")
print(f"expected: {expected}")
print()
except ValueError as e:
print(f"Error: {e}")
print()
except EOFError:
break


if __name__ == "__main__":
main()
Loading
Loading