func LoadStrings(file *os.File, set *map[string]struct{}, logger *logs.Logger) error { bytes, err := ReadAll(file) if err != nil { return err } lines := split([]rune(string(bytes)), []rune{'\n', ' '}) newSet := map[string]struct{}{} oldSet := map[string]struct{}{} for k, v := range *set { oldSet[k] = v //复制一遍 } var added []string for _, _line := range lines { var line string if line = strings.TrimSpace(string(_line)); line == "" { continue } newSet[line] = struct{}{} if _, exist := oldSet[line]; !exist { added = append(added, line) } delete(oldSet, line) } *set = newSet var updateInfo string = fmt.Sprintf("更新关键词(%s):", file.Name()) if len(added) > 0 { updateInfo = updateInfo + "\n[+]" for _, str := range added { updateInfo = updateInfo + str + " " } updateInfo = strings.TrimRight(updateInfo, " ") } if len(oldSet) > 0 { updateInfo = updateInfo + "\n[-]" for str, _ := range oldSet { updateInfo = updateInfo + str + " " } updateInfo = strings.TrimRight(updateInfo, " ") } logger.Info(updateInfo) return nil }
func LoadExps(file *os.File, exps *[]RegexpKeyword, logger *logs.Logger) error { bytes, err := ReadAll(file) if err != nil { return err } lines := strings.Split(string(bytes), "\n") oldExps := make(map[string]RegexpKeyword) for _, exp := range *exps { if exp.BanFlag { oldExps["$ban "+exp.Rx.String()] = exp } else { oldExps[exp.Rx.String()] = exp } } newExps := make(map[string]RegexpKeyword) var addedExps []string for lineNo, line := range lines { line = strings.TrimRightFunc(line, func(r rune) bool { return r == '\n' || r == '\r' }) if line == "" { continue } if exp, exist := oldExps[line]; exist { newExps[line] = exp delete(oldExps, line) } else { var banFlag bool var newExp *regexp.Regexp var err error if banFlag = strings.HasPrefix(line, "$ban "); banFlag { newExp, err = regexp.Compile(strings.TrimLeft(line, "$ban ")) } else { newExp, err = regexp.Compile(line) } if err != nil { logs.Error(fmt.Sprintf("不正确的关键词(第%d行),跳过.", lineNo), err) } else { newExps[line] = RegexpKeyword{banFlag, newExp} addedExps = append(addedExps, line) } } } newExpSlice := make([]RegexpKeyword, 0, len(newExps)) for _, exp := range newExps { newExpSlice = append(newExpSlice, exp) } *exps = newExpSlice var updateInfo string = fmt.Sprintf("更新关键词(%s):\n", file.Name()) for _, exp := range addedExps { updateInfo = updateInfo + "[+] " + exp + "\n" } for _, exp := range oldExps { if exp.BanFlag { updateInfo = updateInfo + "[-] $ban" + exp.Rx.String() + "\n" } else { updateInfo = updateInfo + "[-] " + exp.Rx.String() + "\n" } } updateInfo = strings.TrimSuffix(updateInfo, "\n") logger.Info(updateInfo) //logger.Debug("现在的关键词:", newExpSlice, ".") return nil }