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
// 요소 본문에 넣는 사용자 입력에 씁니다. 큰따옴표를 그대로 두므로 속성 값에는 이스케이프를 씁니다.11
function 본문이스케이프(원문: string) -> string {12
원문.replace("&", "&").replace("<", "<").replace(">", ">")13
}15
// 공용 도우미 끝17
function 목록정리(텍스트: 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>"24
}26
input() |> 목록정리 |> printSHA256 b5138cbc1174b201657a84f41c9be6f7bcd638ec50af7cf45ab8f5bb74c22649