|
1 | 1 | package main |
2 | 2 |
|
3 | 3 | import ( |
| 4 | + "html" |
| 5 | + "io" |
4 | 6 | "log" |
| 7 | + "net/url" |
| 8 | + "os" |
| 9 | + "regexp" |
| 10 | + "sort" |
| 11 | + "strconv" |
| 12 | + "strings" |
5 | 13 | "time" |
6 | 14 |
|
| 15 | + "golang.org/x/text/encoding/charmap" |
7 | 16 | "golang.org/x/text/unicode/norm" |
8 | 17 | ) |
9 | 18 |
|
@@ -42,3 +51,190 @@ func TibiadataDatetimeV3(date string) string { |
42 | 51 | // Return of formatted date and time string to functions.. |
43 | 52 | return returnDate.UTC().Format(time.RFC3339) |
44 | 53 | } |
| 54 | + |
| 55 | +// TibiadataHTMLRemoveLinebreaksV3 func |
| 56 | +func TibiadataHTMLRemoveLinebreaksV3(data string) string { |
| 57 | + return strings.ReplaceAll(data, "\n", "") |
| 58 | +} |
| 59 | + |
| 60 | +var removeUrlRegex = regexp.MustCompile(`<a.*>(.*)<\/a>`) |
| 61 | + |
| 62 | +// TibiadataRemoveURLsV3 func |
| 63 | +func TibiadataRemoveURLsV3(data string) string { |
| 64 | + // prepare return value |
| 65 | + var returnData string |
| 66 | + |
| 67 | + result := removeUrlRegex.FindAllStringSubmatch(data, -1) |
| 68 | + |
| 69 | + if len(result) > 0 { |
| 70 | + returnData = result[0][1] |
| 71 | + } else { |
| 72 | + returnData = "" |
| 73 | + } |
| 74 | + |
| 75 | + return returnData |
| 76 | +} |
| 77 | + |
| 78 | +// TibiadataStringWorldFormatToTitleV3 func |
| 79 | +func TibiadataStringWorldFormatToTitleV3(world string) string { |
| 80 | + return strings.Title(strings.ToLower(world)) |
| 81 | +} |
| 82 | + |
| 83 | +// TibiadataQueryEscapeStringV3 func - encode string to be correct formatted |
| 84 | +func TibiadataQueryEscapeStringV3(data string) string { |
| 85 | + // switching "+" to " " |
| 86 | + data = strings.ReplaceAll(data, "+", " ") |
| 87 | + |
| 88 | + // encoding string to latin-1 |
| 89 | + data, _ = TibiaDataConvertEncodingtoISO88591(data) |
| 90 | + |
| 91 | + // returning with QueryEscape function |
| 92 | + return url.QueryEscape(data) |
| 93 | +} |
| 94 | + |
| 95 | +var dateRegex = regexp.MustCompile(`([a-zA-Z]{3}).*([0-9]{2}).*([0-9]{4})`) |
| 96 | + |
| 97 | +// TibiadataDateV3 func |
| 98 | +func TibiadataDateV3(date string) string { |
| 99 | + // use regex to skip weird formatting on "spaces" |
| 100 | + subma1 := dateRegex.FindAllStringSubmatch(date, -1) |
| 101 | + date = (subma1[0][1] + " " + subma1[0][2] + " " + subma1[0][3]) |
| 102 | + |
| 103 | + // parsing and setting format of return |
| 104 | + tmpDate, _ := time.Parse("Jan 02 2006", date) |
| 105 | + date = tmpDate.UTC().Format("2006-01-02") |
| 106 | + |
| 107 | + return date |
| 108 | +} |
| 109 | + |
| 110 | +// TibiadataStringToIntegerV3 func |
| 111 | +func TibiadataStringToIntegerV3(data string) int { |
| 112 | + returnData, err := strconv.Atoi(data) |
| 113 | + if err != nil { |
| 114 | + log.Printf("[warning] TibiadataStringToIntegerV3: couldn't convert %s into an int. error: %s", data, err) |
| 115 | + } |
| 116 | + |
| 117 | + return returnData |
| 118 | +} |
| 119 | + |
| 120 | +var removeHtmlTagRegex = regexp.MustCompile(`(<\/?[a-zA-A]+?[^>]*\/?>)*`) |
| 121 | + |
| 122 | +// match html tag and replace it with "" |
| 123 | +func RemoveHtmlTag(in string) string { |
| 124 | + groups := removeHtmlTagRegex.FindAllString(in, -1) |
| 125 | + // should replace long string first |
| 126 | + sort.Slice(groups, func(i, j int) bool { |
| 127 | + return len(groups[i]) > len(groups[j]) |
| 128 | + }) |
| 129 | + |
| 130 | + for _, group := range groups { |
| 131 | + if strings.TrimSpace(group) != "" { |
| 132 | + in = strings.ReplaceAll(in, group, "") |
| 133 | + } |
| 134 | + } |
| 135 | + |
| 136 | + return in |
| 137 | +} |
| 138 | + |
| 139 | +// TibiaDataConvertEncodingtoISO88591 func - convert string from UTF-8 to latin1 (ISO 8859-1) |
| 140 | +func TibiaDataConvertEncodingtoISO88591(data string) (string, error) { |
| 141 | + return charmap.ISO8859_1.NewEncoder().String(data) |
| 142 | +} |
| 143 | + |
| 144 | +// TibiaDataConvertEncodingtoUTF8 func - convert string from latin1 (ISO 8859-1) to UTF-8 |
| 145 | +func TibiaDataConvertEncodingtoUTF8(data io.Reader) io.Reader { |
| 146 | + return norm.NFKC.Reader(charmap.ISO8859_1.NewDecoder().Reader(data)) |
| 147 | +} |
| 148 | + |
| 149 | +// isEnvExist func - check if environment var is set |
| 150 | +func isEnvExist(key string) bool { |
| 151 | + if _, ok := os.LookupEnv(key); ok { |
| 152 | + return true |
| 153 | + } |
| 154 | + |
| 155 | + return false |
| 156 | +} |
| 157 | + |
| 158 | +// TibiaDataSanitizeEscapedString func - run unescape string on string |
| 159 | +func TibiaDataSanitizeEscapedString(data string) string { |
| 160 | + return html.UnescapeString(data) |
| 161 | +} |
| 162 | + |
| 163 | +// TibiaDataSanitizeDoubleQuoteString func - replaces double quotes to single quotes in strings |
| 164 | +func TibiaDataSanitizeDoubleQuoteString(data string) string { |
| 165 | + return strings.ReplaceAll(data, "\"", "'") |
| 166 | +} |
| 167 | + |
| 168 | +// TibiaDataSanitizeNbspSpaceString func - replaces weird \u00A0 string to real space |
| 169 | +func TibiaDataSanitizeNbspSpaceString(data string) string { |
| 170 | + return strings.ReplaceAll(data, "\u00A0", " ") |
| 171 | +} |
| 172 | + |
| 173 | +// getEnv func - read an environment or return a default value |
| 174 | +func getEnv(key string, defaultVal string) string { |
| 175 | + if value, exists := os.LookupEnv(key); exists { |
| 176 | + return value |
| 177 | + } |
| 178 | + |
| 179 | + return defaultVal |
| 180 | +} |
| 181 | + |
| 182 | +// getEnvAsBool func - read an environment variable into a bool or return default value |
| 183 | +func getEnvAsBool(name string, defaultVal bool) bool { |
| 184 | + valStr := getEnv(name, "") |
| 185 | + if val, err := strconv.ParseBool(valStr); err == nil { |
| 186 | + return val |
| 187 | + } |
| 188 | + |
| 189 | + return defaultVal |
| 190 | +} |
| 191 | + |
| 192 | +/* |
| 193 | +// getEnvAsFloat func - read an environment variable into a float64 or return default value |
| 194 | +func getEnvAsFloat(name string, defaultVal float64) float64 { |
| 195 | + valStr := getEnv(name, "") |
| 196 | + if val, err := strconv.ParseFloat(valStr, 64); err == nil { |
| 197 | + return val |
| 198 | + } |
| 199 | + return defaultVal |
| 200 | +} |
| 201 | +
|
| 202 | +// getEnvAsInt func - read an environment variable into integer or return a default value |
| 203 | +func getEnvAsInt(name string, defaultVal int) int { |
| 204 | + valueStr := getEnv(name, "") |
| 205 | + if value, err := strconv.Atoi(valueStr); err == nil { |
| 206 | + return value |
| 207 | + } |
| 208 | + return defaultVal |
| 209 | +} |
| 210 | +*/ |
| 211 | + |
| 212 | +// TibiaDataVocationValidator func - return valid vocation string and vocation id |
| 213 | +func TibiaDataVocationValidator(vocation string) (string, string) { |
| 214 | + // defining return vars |
| 215 | + var vocationid string |
| 216 | + |
| 217 | + switch strings.ToLower(vocation) { |
| 218 | + case "none": |
| 219 | + vocationid = "1" |
| 220 | + vocation = "none" |
| 221 | + case "knight", "knights": |
| 222 | + vocationid = "2" |
| 223 | + vocation = "knights" |
| 224 | + case "paladin", "paladins": |
| 225 | + vocationid = "3" |
| 226 | + vocation = "paladins" |
| 227 | + case "sorcerer", "sorcerers": |
| 228 | + vocationid = "4" |
| 229 | + vocation = "sorcerers" |
| 230 | + case "druid", "druids": |
| 231 | + vocationid = "5" |
| 232 | + vocation = "druids" |
| 233 | + default: |
| 234 | + vocationid = "0" |
| 235 | + vocation = "all" |
| 236 | + } |
| 237 | + |
| 238 | + // returning vars |
| 239 | + return vocation, vocationid |
| 240 | +} |
0 commit comments