STUDIO HAZE · jeniapp
Topaz source
Open by house policy. Topaz is our own language.
Topaz 5.20.2 · 63 files
apps/circuit/core/util.tpz
Topaz · 3257 B · Original file
1
// 회로 도구가 함께 쓰는 작은 도우미. 줄을 토큰으로 나누고 정수와 아이디 토큰을 검사하며 오류 조각을 만듭니다.2
// 입력은 입력 한 줄이나 토큰 하나이고 출력은 토큰 배열, 판정, HTML 조각입니다.3
// 같은 입력이면 늘 같은 결과가 나옵니다.4
// 회로를 해석하지 않습니다.5
// Shared circuit helpers: line tokenizing, integer and id token checks, and the escaped error fragment.7
// 공용 도우미 시작 내보내기 (이스케이프 숫자인가 모두숫자인가 오류알림 정수인가 결과풀기)8
// 여러 도구가 같은 원본을 씁니다. 여기서 고치지 않고 원본에서 고친 뒤 다시 생성합니다.10
// 사용자 입력을 HTML 에 넣기 전에 반드시 거칩니다.11
export function 이스케이프(원문: string) -> string {12
원문.replace("&", "&").replace("<", "<").replace(">", ">").replace("\"", """)13
}15
export function 숫자인가(글자: string) -> bool {16
let 코드 = 글자.codePointAt(0) ?? 017
코드 >= 48 && 코드 <= 5718
}20
// 빈 문자열은 참입니다. 부호와 소수점을 받지 않으려고 toInt 앞에서 씁니다.21
export function 모두숫자인가(글: string) -> bool {22
글.scalars().reduce(true, (모두, 글자) => 모두 && 숫자인가(글자))23
}25
// 문구는 고정 문장이거나 이미 이스케이프한 값이어야 합니다.26
export function 오류알림(문구: string) -> string {27
"<div class=\"err\">{문구}</div>"28
}30
// 맨 앞의 빼기 부호 하나만 받습니다. 더하기 부호와 소수점은 받지 않습니다.31
export function 정수인가(토큰: string) -> bool {32
let 글자들 = 토큰.scalars()33
let 시작 = if 토큰.startsWith("-") { 1 } else { 0 }34
글자들.length > 시작 && 모두숫자인가(글자들.slice(시작, 글자들.length).join(""))35
}37
// 성공 값과 안내가 모두 바로 보여 줄 HTML 조각일 때 진입점에서 한 번 풉니다. 토파즈 과제 'Result 오류 쪽 변환과 풀기' 의 우회입니다.38
export function 결과풀기(값: Result<string, string>) -> string {39
match 값 {40
case Ok(결과) => 결과41
case Err(안내) => 안내42
}43
}45
// 공용 도우미 끝47
// 연속 공백이 빈 토큰을 만들지 않게 걸러 냅니다.48
export function 토큰나누기(줄: string) -> Array<string> {49
줄.trim().split(" ").filter(토큰 => 토큰 != "")50
}52
function 아이디글자인가(글자: string) -> bool {53
let 코드 = 글자.codePointAt(0) ?? 054
숫자인가(글자) || (코드 >= 65 && 코드 <= 90) || (코드 >= 97 && 코드 <= 122) || 글자 == "_"55
}57
// 아이디는 SVG 속성과 계층 이름공간에 그대로 들어가므로 영숫자와 밑줄만 받습니다. __ 는 계층 구분자라 막습니다.58
export function 안전아이디인가(아이디: string) -> bool {59
let 글자들 = 아이디.scalars()60
글자들.length >= 1 && 글자들.length <= 24 && !아이디.contains("__") && 글자들.filter(글자 => !아이디글자인가(글자)).length == 061
}63
// 오류 문구에는 사용자 토큰이 들어가므로 HTML 에 넣기 전에 이스케이프합니다.64
export function 오류표시(문구: string) -> string {65
오류알림(이스케이프(문구))66
}SHA256 168602f08b60e97db091dcb9fa588ea5a908ec71311b5c77e5b6e86688347348