slow.monster

STUDIO HAZE · jeniapp

Topaz source

Open by house policy. Topaz is our own language.

Topaz 5.20.2 · 63 files

apps/char-counter/count.tpz

Topaz · 2001 B · Original file

1// 글자 수 세기. 글자 수, 공백을 뺀 글자 수, 단어 수, 줄 수, UTF-8 바이트 수를 셉니다.
2// 입력은 아무 글이고, 출력은 숫자와 고정 이름만 담은 통계 카드 다섯 장의 HTML 조각입니다.
3// 같은 입력이면 인터프리터와 웹 빌드에서 바이트까지 같은 출력을 냅니다.
4// 글자는 유니코드 스칼라 단위로 세며 자소 묶음이나 화면 너비는 따지지 않습니다. 공백은 스페이스, 탭, LF, CR 입니다.
5// Character counter: scalars, non-space scalars, words, lines and UTF-8 bytes.
7record 통계항목 { 이름: string, 값: int }
9// 공용 도우미 시작 (공백인가)
10// 여러 도구가 같은 원본을 씁니다. 여기서 고치지 않고 원본에서 고친 뒤 다시 생성합니다.
12function 공백인가(글자: string) -> bool {
13 글자 == " " || 글자 == "\t" || 글자 == "\n" || 글자 == "\r"
16// 공용 도우미 끝
18// 카드에는 사용자 글이 들어가지 않으므로 이스케이프하지 않습니다.
19function 카드(항목: 통계항목) -> string {
20 "<div class=\"stat\"><b>{항목.값}</b><span>{항목.이름}</span></div>"
23function 세기(텍스트: string) -> string {
24 let 글자들 = 텍스트.scalars()
25 // 단어는 공백이 아닌 글자가 이어진 것이므로 단어가 시작하는 자리를 셉니다.
26 let 단어수 = filter(0..<글자들.length, i => !공백인가(글자들[i]) && (i == 0 || 공백인가(글자들[i - 1]))).length
27 let 통계 = [
28 통계항목 { 이름: "글자 수", 값: 글자들.length },
29 통계항목 { 이름: "공백 제외", 값: 글자들.filter(글자 => !공백인가(글자)).length },
30 통계항목 { 이름: "단어 수", 값: 단어수 },
31 통계항목 { 이름: "줄 수", 값: 텍스트.split("\n").length },
32 통계항목 { 이름: "바이트 (UTF-8)", 값: 텍스트.byteLength() },
33 ]
34 "<div class=\"stats\">{통계.map(카드).join("")}</div>"
37input() |> 세기 |> print

SHA256 8b76596ea0184ac1692f76c07770a577cd69f2af871a4b859b0e4c0ddd02e0cb