diff --git a/.travis.sh b/.travis.sh new file mode 100644 index 0000000..2c3d6b3 --- /dev/null +++ b/.travis.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +go build spell-checker.go + +EXIT_CODE=0 + +git diff HEAD^ --name-only > changed_files + +while read FILE; do + echo -n "Проверка файла $FILE на опечатки... "; + + OUTPUT_RU=$(cat "$FILE" | hunspell -d ru_RU | ./spell-checker); + RU_EXIT_CODE=$? + OUTPUT_EN=$(cat "$FILE" | hunspell -d en_US | ./spell-checker); + EN_EXIT_CODE=$? + + if [ $RU_EXIT_CODE -ne 0 ] || [ $EN_EXIT_CODE -ne 0 ]; then + EXIT_CODE=1; + echo "ошибка"; + echo "$OUTPUT_RU\n$OUTPUT_EN" | sort -n -k1,4; + else + echo "пройдена"; + fi +done < changed_files + +exit $EXIT_CODE \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index f736de2..b072a64 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,10 @@ before_install: - sudo apt-get -qq update - sudo apt-get install -y hunspell hunspell-ru hunspell-en-us - + - curl -s http://extensions.libreoffice.org/extension-center/russian-spellcheck-dictionary.-based-on-works-of-aot-group | grep -oP "http://extensions.libreoffice.org/extension-center/russian-spellcheck-dictionary.-based-on-works-of-aot-group/pscre[^\"]+" | sort -r | head -1 | wget -q -i - -O dictionary.otx + - unzip dictionary.otx script: - - git diff HEAD^ | hunspell -d ru_RU,en_US | grep "^&" + - sh .travis.sh notifications: email: false diff --git a/spell-checker.go b/spell-checker.go new file mode 100644 index 0000000..f946ba5 --- /dev/null +++ b/spell-checker.go @@ -0,0 +1,59 @@ +package main + +import ( + "fmt" + "os" + "bufio" +) + + +type TypeResult struct { + results []Result +} + +type Result struct { + line int + word string +} + +func main() { + scanner := bufio.NewScanner(os.Stdin) + types := parseHunspellOutput(scanner); + + _, ok := types["&"] + + if ok { + for _, result := range types["&"].results { + fmt.Println("Строка " + fmt.Sprintf("%v", result.line) + ":" + result.word) + } + + os.Exit(1) + } +} + +func parseHunspellOutput(scanner *bufio.Scanner) map[string]*TypeResult { + line := 1; + types := make(map[string]*TypeResult) + + scanner.Scan() + + for scanner.Scan() { + text := scanner.Text() + + if text == "" { + line++; + } else { + resultType := text[0:1] + typeResult, ok := types[resultType] + + if !ok { + typeResult = &TypeResult{} + types[resultType] = typeResult + } + + typeResult.results = append(typeResult.results, Result{line: line, word: text[1:]}) + } + } + + return types +} \ No newline at end of file