Skip to content

Commit 8ef062f

Browse files
committed
2 parents de18857 + b9756c2 commit 8ef062f

File tree

6 files changed

+65
-9
lines changed

6 files changed

+65
-9
lines changed

.github/workflows/publish.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,8 @@ jobs:
219219
- uses: actions/checkout@v5
220220
- uses: changepacks/action@main
221221
id: changepacks
222+
with:
223+
token: ${{ secrets.GITHUB_TOKEN }}
222224
outputs:
223225
changepacks: ${{ steps.changepacks.outputs.changepacks }}
224226
release_assets_urls: ${{ steps.changepacks.outputs.release_assets_urls }}

apps/landing/src/components/test-case/TestCaseStat.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export function TestCaseStat({
1919

2020
return (
2121
<Center
22-
bg="#D8D8D8"
22+
bg="$menuHover"
2323
borderRadius="10px"
2424
gap="10px"
2525
px="16px"

libs/braillify/src/lib.rs

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,12 @@ impl Encoder {
102102
skip_count: &mut usize,
103103
result: &mut Vec<u8>,
104104
) -> Result<(), String> {
105+
// 제53항 가운뎃점으로 쓴 줄임표(…… , …)는 ⠠⠠⠠으로, 마침표로 쓴 줄임표(...... , ...)는 ⠲⠲⠲으로 적는다.
106+
let normalized_word = word
107+
.replace("......", "...")
108+
.replace("……", "…");
109+
let word = normalized_word.as_str();
110+
105111
if word.starts_with('$') && word.ends_with('$') {
106112
if let Some((whole, num, den)) = fraction::parse_latex_fraction(word) {
107113
if let Some(w) = whole {
@@ -398,6 +404,10 @@ impl Encoder {
398404
if !(i > 0 && ['.', ','].contains(&word_chars[i - 1])) {
399405
// 제40항 숫자는 수표 ⠼을 앞세워 다음과 같이 적는다.
400406
result.push(60);
407+
// 제61항 작은따옴표(')가 숫자 앞에 올 때는 수표와 작은따옴표를 함께 사용
408+
if i > 0 && (word_chars[i - 1] == '\'' || word_chars[i - 1] == '\u{2019}') {
409+
result.push(4); // ⠄
410+
}
401411
}
402412
is_number = true;
403413
}
@@ -496,6 +506,17 @@ impl Encoder {
496506
}
497507
result.push(7);
498508
*skip_count = count - 1;
509+
} else if (c == '\'' || c == '\u{2019}') && i + 1 < word_len && word_chars[i + 1].is_ascii_digit() {
510+
// 제61항 작은따옴표(')가 숫자 앞에 올 때는 숫자 처리에서 함께 처리하므로 건너뛴다
511+
continue;
512+
} else if c == '*' {
513+
// 제60항 별표(*)는 앞뒤를 한 칸씩 띄어 쓴다
514+
// 별표가 단독 단어이고 이전 단어가 있을 때만 앞에 공백 추가
515+
if i == 0 && word_len == 1 && !prev_word.is_empty() {
516+
result.push(0);
517+
}
518+
result.extend(symbol_shortcut::encode_char_symbol_shortcut(c)?);
519+
// 별표 뒤의 공백은 단어 사이 공백으로 자동 처리됨
499520
} else {
500521
result.extend(symbol_shortcut::encode_char_symbol_shortcut(c)?);
501522
}
@@ -611,6 +632,20 @@ impl Encoder {
611632
}
612633

613634
result.push(0);
635+
} else {
636+
// word_shortcut을 사용한 경우가 아닐 때만 별표 확인
637+
let word_chars = word.chars().collect::<Vec<char>>();
638+
let word_len = word_chars.len();
639+
// 제60항 별표(*)는 앞뒤를 한 칸씩 띄어 쓴다
640+
// 별표가 마지막 단어의 마지막 글자이고, 다음 단어가 없을 때 뒤에 공백 추가
641+
if remaining_words.is_empty() && word_len > 0 {
642+
// 마지막 단어인 경우, 별표로 끝나는지 확인
643+
if let Some(last_char) = word_chars.last() {
644+
if *last_char == '*' {
645+
result.push(0); // 별표 뒤에 공백 추가
646+
}
647+
}
648+
}
614649
}
615650

616651
// Update state for next iteration
@@ -642,6 +677,15 @@ pub fn encode(text: &str) -> Result<Vec<u8>, String> {
642677
let mut result = Vec::new();
643678
encoder.encode(text, &mut result)?;
644679
encoder.finish(&mut result)?;
680+
681+
// 제60항 별표(*)는 앞뒤를 한 칸씩 띄어 쓴다
682+
// 별표가 단독 단어로 포함된 텍스트의 마지막에 공백 추가
683+
let words: Vec<&str> = text.split(' ').filter(|word| !word.is_empty()).collect();
684+
let has_asterisk_as_word = words.iter().any(|w| *w == "*");
685+
if has_asterisk_as_word {
686+
result.push(0); // 별표가 단독 단어로 포함된 텍스트의 마지막에 공백 추가
687+
}
688+
645689
Ok(result)
646690
}
647691

@@ -969,7 +1013,8 @@ mod test {
9691013
);
9701014
let record = result.expect(&error);
9711015
let input = &record[0];
972-
let expected = record[2].replace(" ", "⠀");
1016+
// 테스트 케이스 파일의 숫자 코드에서 앞뒤 공백 제거 후 비교
1017+
let expected = record[2].trim().replace(" ", "⠀");
9731018
match encode(input) {
9741019
Ok(actual) => {
9751020
let braille_expected = actual

libs/braillify/src/symbol_shortcut.rs

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ static SHORTCUT_MAP: phf::Map<char, &'static [u8]> = phf_map! {
88
'\'' => &[decode_unicode('⠠'), decode_unicode('⠦')],
99
// '\'' => &[decode_unicode('⠴'), decode_unicode('⠄')],
1010
'~' => &[decode_unicode('⠈'), decode_unicode('⠔')],
11-
'…' => &[decode_unicode(''), decode_unicode(''), decode_unicode('')],
11+
'…' => &[decode_unicode(''), decode_unicode(''), decode_unicode('')],
1212
'⋯' => &[decode_unicode('⠠'), decode_unicode('⠠'), decode_unicode('⠠')],
1313
'!' => &[decode_unicode('⠖')],
1414
'.' => &[decode_unicode('⠲')],
@@ -45,7 +45,8 @@ static SHORTCUT_MAP: phf::Map<char, &'static [u8]> = phf_map! {
4545
// '×' => &[decode_unicode('⠸'),decode_unicode('⠭'), decode_unicode('⠇')],
4646
'△' => &[decode_unicode('⠸'),decode_unicode('⠬'), decode_unicode('⠇')],
4747
'□' => &[decode_unicode('⠸'),decode_unicode('⠶'), decode_unicode('⠇')],
48-
'ː' => &[decode_unicode('⠰'), decode_unicode('⠂')],
48+
'ː' => &[decode_unicode('⠠'), decode_unicode('⠄')],
49+
'〃' => &[decode_unicode('⠴'), decode_unicode('⠴')],
4950
};
5051

5152
static ENGLISH_SYMBOL_MAP: phf::Map<char, &'static [u8]> = phf_map! {
@@ -115,9 +116,17 @@ mod test {
115116
assert_eq!(
116117
encode_char_symbol_shortcut('…').unwrap(),
117118
&[
118-
decode_unicode('⠲'),
119-
decode_unicode('⠲'),
120-
decode_unicode('⠲')
119+
decode_unicode('⠠'),
120+
decode_unicode('⠠'),
121+
decode_unicode('⠠')
122+
]
123+
);
124+
assert_eq!(
125+
encode_char_symbol_shortcut('⋯').unwrap(),
126+
&[
127+
decode_unicode('⠠'),
128+
decode_unicode('⠠'),
129+
decode_unicode('⠠')
121130
]
122131
);
123132
assert_eq!(

test_cases/rule_49.csv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"·","""2",166,⠐⠆
66
":","""1 ",162,⠐⠂
77
"/",_/ ,5612,⠸⠌
8-
"… , ...",",,,, 444",5050500160505050,⠲⠲⠲⠀⠐⠀⠲⠲⠲
8+
"… , ...",",,,, 444",3232320160505050,⠠⠠⠠⠀⠐⠀⠲⠲⠲
99
"",8,38,
1010
"",0,52,
1111
"",",8",3238,⠠⠦

test_cases/rule_60.csv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
* 야애: 들에 낀 안개,"""9`>-r""1`i!n`,@q`<3@r", 16200283623162010462903283103518823,⠐⠔⠀⠜⠤⠗⠐⠂⠀⠊⠮⠝⠀⠠⠈⠟⠀⠣⠒⠈⠗⠀
1+
* 야애: 들에 낀 안개,"""9`>-r""1`i!n`,@q`<3@r",162002836231620104629032831035188230,⠐⠔⠀⠜⠤⠗⠐⠂⠀⠊⠮⠝⠀⠠⠈⠟⠀⠣⠒⠈⠗⠀

0 commit comments

Comments
 (0)