STUDIO HAZE · jeniapp
Topaz source
Open by house policy. Topaz is our own language.
Topaz 5.20.2 · 63 files
apps/choseong/choseong.tpz
Topaz · 1855 B · Original file
1
// 초성 추출. 한글 음절마다 첫 자음을 뽑고 나머지 글자는 그대로 둡니다.2
// 입력은 아무 글이고, 출력은 입력 원문과 초성으로 바꾼 글을 위아래로 담은 HTML 조각입니다.3
// 같은 입력이면 인터프리터와 웹 빌드에서 바이트까지 같은 출력을 냅니다.4
// 조합된 음절만 바꾸며 낱자 자모, 옛한글, 영문, 이모지는 건드리지 않습니다.5
// Choseong extractor: replaces each Hangul syllable with its leading consonant.7
let 초성표 = [8
"ㄱ", "ㄲ", "ㄴ", "ㄷ", "ㄸ", "ㄹ", "ㅁ", "ㅂ", "ㅃ", "ㅅ",9
"ㅆ", "ㅇ", "ㅈ", "ㅉ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ",10
]12
// 공용 도우미 시작 (본문이스케이프)13
// 여러 도구가 같은 원본을 씁니다. 여기서 고치지 않고 원본에서 고친 뒤 다시 생성합니다.15
// 요소 본문에 넣는 사용자 입력에 씁니다. 큰따옴표를 그대로 두므로 속성 값에는 이스케이프를 씁니다.16
function 본문이스케이프(원문: string) -> string {17
원문.replace("&", "&").replace("<", "<").replace(">", ">")18
}20
// 공용 도우미 끝22
// 한글 음절 U+AC00 ~ U+D7A3 을 10진수로 적습니다. 토파즈 과제 '16진 정수 리터럴' 의 우회입니다.23
// 588 은 초성 하나에 속하는 음절 수로 중성 21개와 종성 28개의 곱입니다.24
function 초성(글자: string) -> string {25
let 코드 = 글자.codePointAt(0) ?? 026
if 코드 >= 44032 && 코드 <= 55203 { 초성표[(코드 - 44032) / 588] } else { 글자 }27
}29
function 초성보기(텍스트: string) -> string {30
let 변환 = 텍스트.scalars().map(초성).join("")31
"<div class=\"choseong\"><div class=\"src\">{본문이스케이프(텍스트)}</div><div class=\"out\">{본문이스케이프(변환)}</div></div>"32
}34
input() |> 초성보기 |> printSHA256 54f7c2bdf6e748b0ab3bfe546c7b9209af174f7673ae80356daa91b0be95c868