-
-
Notifications
You must be signed in to change notification settings - Fork 3
/
check.go
executable file
·155 lines (127 loc) · 4.26 KB
/
check.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
package main
import (
"fmt"
"os"
"regexp"
"strings"
"unicode"
)
// 해상도값 정규식: 2048x1080 형태
var regexpImageSize = regexp.MustCompile(`\d{2,5}[xX]\d{2,5}$`)
// 샷네임값 정규식: SS_0010, SS-0010, S001_C0020 형태
var regexpShotname = regexp.MustCompile(`^[a-zA-Z0-9_-]+[a-zA-Z0-9]$`)
// 에셋 네임값 정규식: stone01 형태
var regexpAssetname = regexp.MustCompile(`^[a-zA-Z0-9_]+$`)
// UserID값 정규식
var regexpUserID = regexp.MustCompile(`^[a-zA-Z0-9]+$`)
// ID값 정규식: organization
var regexpID = regexp.MustCompile(`^[a-z0-9]+$`)
// userInfo 정규칙: id(name,team) 형태
var regexpUserInfo = regexp.MustCompile(`^[a-zA-Z0-9]+\(.+\)$`)
// Email 정규칙: hello@lazypi.org 형태
var regexpEmail = regexp.MustCompile(`^[a-zA-Z0-9]+@[a-zA-Z0-9.]+$`)
// 웹컬러 정규식 #FFFFFF
var regexWebColor = regexp.MustCompile(`^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$`)
// Task값 정규식: task
var regexpTask = regexp.MustCompile(`^[a-z0-9\_]+$`)
// Status값 정규식
var regexpStatus = regexp.MustCompile(`^[a-zA-Z0-9]+$`)
// 검색쿼리형식: tasks.ani.status:done
var regexTaskStatusQuery = regexp.MustCompile(`^[tasks]+\.[a-z0-9]+\.[stau]+\:[a-z]+$`)
// 롤미디어 정규식: 00_A03C001_180113_A001 형태
var regexpRollMedia = regexp.MustCompile(`^\d+_[A-Z0-9]+_\d+_[A-Z0-9]+$`)
// Timecode 정규식: 00:00:00:00 또는 00:00:00;00 형태 ref: https://en.wikipedia.org/wiki/SMPTE_timecode
var regexpTimecode = regexp.MustCompile(`^\d{2}[:;.]\d{2}[:;.]\d{2}[:;.]\d{2}$`)
// Rnum 정규식: A0001~Z9999
var regexpRnum = regexp.MustCompile(`^[A-Z]\d{4}$`)
// Handle 정규식: 5, 10
var regexpHandle = regexp.MustCompile(`^\d{1,2}$`)
// Version 정규식: 5, 10, 103, v5 v10, v100, v1001, V001, V1
var regexpVersion = regexp.MustCompile(`[vV]?\d{1,4}`)
// Tag 정규식
var regexpTag = regexp.MustCompile(`^[가-힣a-zA-Z0-9_]+$`)
var regexpRocketChatToken = regexp.MustCompile(`^[A-Za-z0-9+/]+$`)
// Alexa 카메라의 형태 : N_AAAACCCC_YYMMDD_RRRR
// - N : order
// - AAAACCCC : reel name
// - YYMMDD : 년,월,일
// - RRRR : Unique hex code
// - 참고 : embedded 네임은 AAAARRRR 형태이다.
//
// Red카메라의 형태 : C RRR TTT dd mm HH NNN
// - C : Camera letter, from A to Z
// - RRR : three digit reel number
// - TTT : three digit take number
// - dd mm : date and month
// - HH : unique hex code that ensures another file won't have the exact same name
// - NNN : spanned clip number
// str2bool은 받아들인 문자열이 "true","True" ... 라면 참을, 그 외에는 거짓을 반환한다.
func str2bool(str string) bool {
return strings.ToLower(str) == "true"
}
func bool2str(b bool) string {
if b {
return "true"
}
return "false"
}
// mov경로를 체크하는 함수이다.
func isMov(path string) bool {
// 빈 문자열인지 체크
if path == "" {
return false
}
// .mov로 끝나는지 체크
if !strings.HasSuffix(strings.ToLower(path), ".mov") {
return false
}
// 경로가 존재하는지 체크
if _, err := os.Stat(path); os.IsNotExist(err) {
return false
}
return true
}
// 에셋타입이 유효한지 체크하는 함수이다.
func validAssettype(typ string) (bool, error) {
switch typ {
case "char", "comp", "env", "fx", "matte", "plant", "prop", "vehicle", "concept", "global":
return true, nil
default:
return false, fmt.Errorf("%s 이름을 에셋타입으로 사용할 수 없습니다", typ)
}
}
// 롤넘버가 유효한지 체크하는 함수이다.
func validRnumTag(rnum string) bool {
b, _ := regexp.MatchString(`^\d{1,2}권$`, rnum)
return b
}
// validShottype 함수는 샷타입이 유효한지 체크하는 함수이다.
func validShottype(typ string) error {
switch typ {
case "", "2d", "3d", "2.5d":
return nil
default:
return fmt.Errorf("not support %s shottype", typ)
}
}
// UniqueSlice 함수는 중복 문자를 제거한다.
func UniqueSlice(stringSlice []string) []string {
keys := make(map[string]bool)
list := []string{}
for _, entry := range stringSlice {
if _, value := keys[entry]; !value {
keys[entry] = true
list = append(list, entry)
}
}
return list
}
// isASCII 함수는 문자가 아스키로 구성되어있는지 체크한다.
func isASCII(s string) bool {
for _, c := range s {
if c > unicode.MaxASCII {
return false
}
}
return true
}