1
0
mirror of https://github.com/ru-de/faq.git synced 2024-11-22 10:22:20 +00:00

Merge pull request #55 from ewgRa/spell-checker

Spell checker
This commit is contained in:
ewgRa 2016-01-19 00:47:59 +01:00
commit 37bed1c536
3 changed files with 88 additions and 2 deletions

26
.travis.sh Normal file
View File

@ -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

View File

@ -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

59
spell-checker.go Normal file
View File

@ -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
}