slow.monster

STUDIO HAZE · jeniapp

Topaz source

Open by house policy. Topaz is our own language.

Topaz 5.20.2 · 63 files

apps/list-organizer/clean.tpz

Topaz · 1699 B · Original file

1// 목록 정리. 줄마다 앞뒤 공백을 지우고 빈 줄을 버린 뒤 정렬하고 중복을 없앱니다.
2// 입력은 여러 줄 글이고, 출력은 원본 줄 수와 고유 줄 수를 적은 요약 한 줄과 순서 있는 목록 HTML 입니다.
3// 같은 입력이면 인터프리터와 웹 빌드에서 바이트까지 같은 출력을 냅니다.
4// 정렬은 표준 sorted 의 순서 하나뿐이며 대소문자 무시나 숫자 크기 순 정렬은 하지 않습니다.
5// List organizer: trims lines, drops empty ones, sorts and removes duplicates.
7// 공용 도우미 시작 (본문이스케이프)
8// 여러 도구가 같은 원본을 씁니다. 여기서 고치지 않고 원본에서 고친 뒤 다시 생성합니다.
10// 요소 본문에 넣는 사용자 입력에 씁니다. 큰따옴표를 그대로 두므로 속성 값에는 이스케이프를 씁니다.
11function 본문이스케이프(원문: string) -> string {
12 원문.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;")
15// 공용 도우미 끝
17function 목록정리(텍스트: string) -> string {
18 let 줄목록 = 텍스트.split("\n").map(줄 => 줄.trim()).filter(줄 => 줄 != "")
19 // 정렬하면 같은 줄이 이웃하므로 바로 앞 줄과만 비교합니다.
20 let 정렬됨 = 줄목록.sorted()
21 let 고유목록 = [for i in 0..<정렬됨.length if i == 0 || 정렬됨[i] != 정렬됨[i - 1] => 정렬됨[i]]
22 let 항목들 = 고유목록.map(줄 => "<li>{본문이스케이프(줄)}</li>").join("")
23 "<p class=\"meta\">원본 {줄목록.length}줄 → 고유 {고유목록.length}줄 (정렬·중복제거)</p><ol class=\"list\">{항목들}</ol>"
26input() |> 목록정리 |> print

SHA256 b5138cbc1174b201657a84f41c9be6f7bcd638ec50af7cf45ab8f5bb74c22649