slow.monster

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 에 넣기 전에 반드시 거칩니다.
11export function 이스케이프(원문: string) -> string {
12 원문.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;").replace("\"", "&quot;")
15export function 숫자인가(글자: string) -> bool {
16 let 코드 = 글자.codePointAt(0) ?? 0
17 코드 >= 48 && 코드 <= 57
20// 빈 문자열은 참입니다. 부호와 소수점을 받지 않으려고 toInt 앞에서 씁니다.
21export function 모두숫자인가(글: string) -> bool {
22 글.scalars().reduce(true, (모두, 글자) => 모두 && 숫자인가(글자))
25// 문구는 고정 문장이거나 이미 이스케이프한 값이어야 합니다.
26export function 오류알림(문구: string) -> string {
27 "<div class=\"err\">{문구}</div>"
30// 맨 앞의 빼기 부호 하나만 받습니다. 더하기 부호와 소수점은 받지 않습니다.
31export function 정수인가(토큰: string) -> bool {
32 let 글자들 = 토큰.scalars()
33 let 시작 = if 토큰.startsWith("-") { 1 } else { 0 }
34 글자들.length > 시작 && 모두숫자인가(글자들.slice(시작, 글자들.length).join(""))
37// 성공 값과 안내가 모두 바로 보여 줄 HTML 조각일 때 진입점에서 한 번 풉니다. 토파즈 과제 'Result 오류 쪽 변환과 풀기' 의 우회입니다.
38export function 결과풀기(값: Result<string, string>) -> string {
39 match 값 {
40 case Ok(결과) => 결과
41 case Err(안내) => 안내
42 }
45// 공용 도우미 끝
47// 연속 공백이 빈 토큰을 만들지 않게 걸러 냅니다.
48export function 토큰나누기(줄: string) -> Array<string> {
49 줄.trim().split(" ").filter(토큰 => 토큰 != "")
52function 아이디글자인가(글자: string) -> bool {
53 let 코드 = 글자.codePointAt(0) ?? 0
54 숫자인가(글자) || (코드 >= 65 && 코드 <= 90) || (코드 >= 97 && 코드 <= 122) || 글자 == "_"
57// 아이디는 SVG 속성과 계층 이름공간에 그대로 들어가므로 영숫자와 밑줄만 받습니다. __ 는 계층 구분자라 막습니다.
58export function 안전아이디인가(아이디: string) -> bool {
59 let 글자들 = 아이디.scalars()
60 글자들.length >= 1 && 글자들.length <= 24 && !아이디.contains("__") && 글자들.filter(글자 => !아이디글자인가(글자)).length == 0
63// 오류 문구에는 사용자 토큰이 들어가므로 HTML 에 넣기 전에 이스케이프합니다.
64export function 오류표시(문구: string) -> string {
65 오류알림(이스케이프(문구))

SHA256 168602f08b60e97db091dcb9fa588ea5a908ec71311b5c77e5b6e86688347348