slow.monster

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.
7let 초성표 = [
8 "ㄱ", "ㄲ", "ㄴ", "ㄷ", "ㄸ", "ㄹ", "ㅁ", "ㅂ", "ㅃ", "ㅅ",
9 "ㅆ", "ㅇ", "ㅈ", "ㅉ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ",
12// 공용 도우미 시작 (본문이스케이프)
13// 여러 도구가 같은 원본을 씁니다. 여기서 고치지 않고 원본에서 고친 뒤 다시 생성합니다.
15// 요소 본문에 넣는 사용자 입력에 씁니다. 큰따옴표를 그대로 두므로 속성 값에는 이스케이프를 씁니다.
16function 본문이스케이프(원문: string) -> string {
17 원문.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;")
20// 공용 도우미 끝
22// 한글 음절 U+AC00 ~ U+D7A3 을 10진수로 적습니다. 토파즈 과제 '16진 정수 리터럴' 의 우회입니다.
23// 588 은 초성 하나에 속하는 음절 수로 중성 21개와 종성 28개의 곱입니다.
24function 초성(글자: string) -> string {
25 let 코드 = 글자.codePointAt(0) ?? 0
26 if 코드 >= 44032 && 코드 <= 55203 { 초성표[(코드 - 44032) / 588] } else { 글자 }
29function 초성보기(텍스트: string) -> string {
30 let 변환 = 텍스트.scalars().map(초성).join("")
31 "<div class=\"choseong\"><div class=\"src\">{본문이스케이프(텍스트)}</div><div class=\"out\">{본문이스케이프(변환)}</div></div>"
34input() |> 초성보기 |> print

SHA256 54f7c2bdf6e748b0ab3bfe546c7b9209af174f7673ae80356daa91b0be95c868