-
-
Notifications
You must be signed in to change notification settings - Fork 34
Description
안녕하세요, 실패 테스트를 해결하려고 내부 코드와 현상을 살펴보다가 특이한 점을 발견해서 이슈를 올립니다.
현재 53항과 관련된 3가지 문제가 존재하는데요.
우선 각각의 문제를 간단하게 설명하고 시작하겠습니다.
······와……처럼 2번 연속으로 쓰였을 때, 1개처럼 취급해야 하는 처리가 빠져있음- 이건 단일 문자가 아니므로
symbol_shortcut.rs보다는lib.rs에서 선행 처리되어야 할 것 같습니다.
- 이건 단일 문자가 아니므로
- 가운뎃점으로 쓴 줄임표
···가⠠⠠⠠로 변환되지 않고, 마침표로 쓴 줄임표…처럼⠲⠲⠲로 변환됨- 가운뎃점으로 쓴 줄임표가 실제로는
마침표로 쓴 줄임표와 같은 U+2026 기호라는 게 문제입니다.
- 가운뎃점으로 쓴 줄임표가 실제로는
53항 다만은 단순 변환에서는 반영하기 어려움줄임표 점의 개수를 분명히 밝혀야 할 때라는 건 맥락을 이해해야 가능하므로 단순 번역만으로는 이를 구별하기 어렵습니다.
즉, 53항 다만을 제외하면 모두 해결 가능한 문제입니다.
괜찮다면 제가 해당 문제를 고쳐보고 싶은데, 아래 자세한 설명을 읽어 보시고 의견 알려주시면 감사하겠습니다
1️⃣ 2번 연속으로 사용된 줄임표를 1개처럼 취급
······와 ……처럼 2개가 연속으로 쓰였을 때 1개로 취급하는 부분은 symbol_shortcut.rs만으로 해결하긴 어렵습니다.
// symbol_shortcut.rs
static SHORTCUT_MAP: phf::Map<char, &'static [u8]> = phf_map! {
'"' => &[decode_unicode('⠦')],현재 symbol_shortcut.rs는 Map<char, &'static [u8]>로 단일 기호에 매핑하는 형태입니다.
물론 char대신 &'static str을 쓸 수도 있지만, 28항을 다룰 때와 마찬가지로 연속된 문자 처리는 lib.rs에서 맡는 게 낫다고 판단했습니다.
결론: lib.rs에 2번 연속으로 사용된 줄임표를 1개처럼 처리되도록 핸들링
다만, 2번에서 후술할 문제로 연속된 문자 판단을 위해 최소 2개에서 최대 6개까지 봐야 할 것 같습니다.
2️⃣ 가운뎃점으로 쓴 줄임표가 실제로는 마침표로 쓴 줄임표와 같은 기호
49항과 53항 테스트 실패 건에서 가운뎃점으로 쓴 줄임표 ··· 가 ⠠⠠⠠로 변환되지 않고,
마침표로 쓴 줄임표 …처럼 ⠲⠲⠲로 변환되는 점이 이상해서 살펴보다가 특이한 사실을 발견하게 됐는데요.
// symbol_shortcut.rs
static SHORTCUT_MAP: phf::Map<char, &'static [u8]> = phf_map! {
'"' => &[decode_unicode('⠦')],
// '"' => &[decode_unicode('⠴')],
'\'' => &[decode_unicode('⠠'), decode_unicode('⠦')],
// '\'' => &[decode_unicode('⠴'), decode_unicode('⠄')],
'~' => &[decode_unicode('⠈'), decode_unicode('⠔')],
'…' => &[decode_unicode('⠲'), decode_unicode('⠲'), decode_unicode('⠲')],
'⋯' => &[decode_unicode('⠠'), decode_unicode('⠠'), decode_unicode('⠠')],symbol_shortcut.rs를 살펴봐도 가운뎃점으로 쓴 줄임표인 ⋯가 잘 매핑되어있는데도 불구하고 말이죠.
아마도 지금까지 가운뎃점으로 쓴 줄임표로 ⋯를 염두에 두신 것 같습니다.
⋯는 수학용 줄임표로 유니코드 U+22EF인데요.
저도 · 점번역 구분기호(≒가운뎃점, 유니코드 U+00B7)가 3개 붙어있는 그런 기호라고 생각했습니다.
그런데 정작 2024 개정 한국 점자 규정에서 53항 정의에 사용되는 가운뎃점이라 표기한 기호는 ⋯ U+22EF가 아니었던 겁니다.
실제 가운뎃점으로 쓴 줄임표는 지금까지 마침표로 쓴 줄임표라고 생각했던 … U+2026이었고,
정의에서 마침표로 쓴 줄임표로 표기된 건 . 그저 마침표 U+002E를 3번 쓴 기호들의 뭉치였던 것입니다.
처음엔 코드는 정상인데 왜 테스트가 실패하는지 궁금해서 해당 기호를 복사-붙여넣기 해보았더니,
가운뎃점으로 쓴 줄임표가 계속해서 … U+2026로 붙여 넣어지는 것이 이상해서 조사하다가 이 사실을 발견하게 되었습니다.
그럼 왜 … U+2026가 실제 화면 상에서는 ⋯ U+22EF처럼 보였던 것일까요?
그것은 단지 폰트에서 … U+2026를 화면에 그릴 때, 가운뎃점으로 쓴 줄임표처럼 표현했기 때문입니다.
그럼 이제 가운뎃점으로 쓴 줄임표가 ⠠⠠⠠로 정상적으로 변환되게 하는 방법을 알 수 있습니다.
다시 symbol_shortcut.rs로 돌아가서 살펴보죠.
static SHORTCUT_MAP: phf::Map<char, &'static [u8]> = phf_map! {
'"' => &[decode_unicode('⠦')],
// '"' => &[decode_unicode('⠴')],
'\'' => &[decode_unicode('⠠'), decode_unicode('⠦')],
// '\'' => &[decode_unicode('⠴'), decode_unicode('⠄')],
'~' => &[decode_unicode('⠈'), decode_unicode('⠔')],
'…' => &[decode_unicode('⠲'), decode_unicode('⠲'), decode_unicode('⠲')], // <- 이것이 실제 가운뎃점으로 쓴 줄임표
'⋯' => &[decode_unicode('⠠'), decode_unicode('⠠'), decode_unicode('⠠')], // <- 여기 이 부분은 삭제… U+2026가 들어왔을 때, &[decode_unicode('⠠'), decode_unicode('⠠'), decode_unicode('⠠')]로 변환하면 해결되는 간단한 문제입니다.
기존에 마침표로 쓴 줄임표는 이미 각각 . 마침표 U+002E로서 ⠲로 3번 변환되고 있었기에 문제되지 않습니다.
@owjs3901 제가 수정 작업을 맡아도 괜찮을지 의견을 남겨주시면, 작업 후 PR 등록하겠습니다!