igor@38: #!/bin/bash igor@38: igor@55: cat < /dev/stderr igor@38: igor@38: USAGE: igor@38: igor@38: new-words [ -l lang ] [ -s ] [ ARG ] igor@38: igor@38: SWITCHES: igor@38: igor@38: -h print this screen igor@38: -c show compressed wordlist: one word per group igor@50: -f file show only words related to the words in the file igor@45: -G turn off word grouping igor@38: -k put higher words that are similar to the known words (only for English) igor@38: -l lang override language settings igor@38: -n non-interactive mode (don't run vi) igor@38: -N turn off known words filtering igor@38: -a don't add marks (and don't save marks added by user) igor@38: -p pages work with specified pages only (pages = start-stop/total ) igor@38: -s show the text statistics (percentage of known words and so on) and exit igor@38: -S show your vocabulary statistics (number of words and word groups) igor@38: -t tag tag known words with tag igor@38: -T show list of active tags igor@38: -m tag merge the words tagged with "tag" into the main vocabulary igor@38: -M merge the words tagged with any tag into the main vocabulary igor@48: -d tag delete subvocabulary for the "tag" igor@48: -r RANGE show only first RANGE words igor@48: -R RANGE show only words lower than RANGE percent igor@38: -2 -3 find 2 and 3 words' sequences igor@38: igor@38: The language of the text can be specified also igor@38: by name of the program new-words (correspondent link must be created before). igor@38: For example, these calls are equivalent: igor@38: igor@38: de-words URL igor@38: new-words -l de URL igor@38: igor@38: HELP igor@38: } igor@38: igor@38: if [ "$1" = "-h" ] igor@38: then igor@38: show_usage igor@38: exit 0 igor@38: fi igor@38: igor@38: NEW_WORDS_PY=/home/igor/hg/new-words/new-words.py igor@38: WORK_DIR=~/.new-words/ igor@38: editor=${EDITOR:-vim} igor@38: igor@38: # language detection igor@38: igor@38: LANGUAGE=en igor@38: my_name="`echo $0 | sed s@.*/@@ | sed s/-.*// `" igor@38: for arg igor@38: do igor@38: if echo "$arg" | grep -q http://...wikipedia.org/wiki/ igor@38: then igor@38: LANGUAGE="`echo $arg | sed s@http://@@ | sed s@.wikipedia.*@@`" igor@38: fi igor@38: done igor@38: [ "${my_name}" = "new" ] || LANGUAGE="$my_name" igor@38: igor@38: #---------------------------------------------------- igor@38: # command line options processing igor@38: igor@38: STAT_ONLY=NO igor@38: NEED_TO_USE_VOCABULARY_WHEN_SORT=NO igor@38: DONT_ADD_MARKS=NO igor@38: NON_INTERACTIVE_MODE=NO igor@38: PART_TO_PROCESS='' igor@38: GROUP_WORDS_BY_THREE=NO igor@38: GROUP_WORDS_BY_TWO=NO igor@38: TAG_NAME='' igor@38: MERGE_THIS_TAGS='' igor@38: TAGS_LIST_ONLY=NO igor@38: MERGE_TAGGED_WORDS=NO igor@38: MERGE_ALL_TAGGED=NO igor@38: DONT_ADD_MARKLINES=NO igor@38: FILTER_WORDS=YES igor@38: SHOW_VOC_STAT=NO igor@38: COMPRESSED_WORDLIST=NO igor@45: WORDS_GROUPING=YES igor@50: ALLOWED_WORDS_FILENAME='' igor@50: while getopts Gcf:l:sSkanNp:t:Tm:Md:r:R:23 opt igor@38: do igor@38: case "$opt" in igor@38: c) COMPRESSED_WORDLIST=YES;; igor@50: f) ALLOWED_WORDS_FILENAME="$OPTARG";; igor@45: G) WORDS_GROUPING=NO;; igor@38: s) STAT_ONLY=YES;; igor@38: S) SHOW_VOC_STAT=YES;; igor@38: k) NEED_TO_USE_VOCABULARY_WHEN_SORT=YES;; igor@38: l) LANGUAGE="$OPTARG";; igor@38: a) DONT_ADD_MARKS=YES;; igor@38: n) NON_INTERACTIVE_MODE=YES;; igor@38: N) FILTER_WORDS=NO;; igor@38: p) PART_TO_PROCESS="$OPTARG";; igor@38: t) TAG_NAME="$OPTARG";; igor@38: T) TAGS_LIST_ONLY="YES";; igor@38: m) DONT_ADD_MARKLINES="YES"; MERGE_TAGGED_WORDS="YES"; MERGE_THIS_TAGS="$TAG_NAME $OPTARG";; igor@38: M) DONT_ADD_MARKLINES="YES"; MERGE_ALL_TAGGED="YES";; igor@48: d) REMOVE_TAG="YES"; TAG_NAME="$TAG_NAME $OPTARG";; igor@48: r) SHOW_RANGE="$OPTARG";; igor@48: R) SHOW_RANGE_PERCENTAGE="$OPTARG";; igor@38: 2) GROUP_WORDS_BY_TWO=YES;; igor@38: 3) GROUP_WORDS_BY_THREE=YES;; igor@38: \?) # unknown flag igor@38: show_usage igor@38: exit 1;; igor@38: esac igor@38: done igor@38: shift `expr $OPTIND - 1` igor@38: igor@38: if [ "$1" = "-l" ] igor@38: then igor@38: LANGUAGE="$2" igor@38: shift 2 igor@38: fi igor@38: igor@38: VOCABULARY=${LANGUAGE}.txt igor@38: NOTES_FILE=notes-${LANGUAGE}.txt igor@38: igor@38: if [ "${SHOW_VOC_STAT}" = "YES" ] igor@38: then igor@38: $0 -l "${LANGUAGE}" -N -n ${WORK_DIR}/${VOCABULARY} | head -1 | awk '{print $5}' | tr -d "<>" igor@38: exit 0 igor@38: fi igor@38: igor@40: get_words_group_words_add_stat() igor@38: { igor@54: [ "$PART_TO_PROCESS" == "" ] || PART_TO_PROCESS="-p $PART_TO_PROCESS" igor@54: [ "$ALLOWED_WORDS_FILENAME" = "" ] || ALLOWED_WORDS_FILENAME="-f $ALLOWED_WORDS_FILENAME" igor@55: [ "$SHOW_RANGE" = "" ] || SHOW_RANGE="-r $SHOW_RANGE" igor@54: [ "$SHOW_RANGE_PERCENTAGE" = "" ] || SHOW_RANGE_PERCENTAGE="-R $SHOW_RANGE_PERCENTAGE" igor@54: [ "$NON_INTERACTIVE_MODE" = YES ] && non_interactive="-n" igor@54: [ "$STAT_ONLY" = YES ] && stat_only="-s" igor@54: [ "$COMPRESSED_WORDLIST" = YES ] && compressed_wordlist="-c" igor@54: [ "$FILTER_WORDS" = NO ] && filter_words="-N" igor@54: [ "$GROUP_WORDS_BY_TWO" = YES ] && group_words_by_two="-2" igor@54: [ "$GROUP_WORDS_BY_THREE" = YES ] && group_words_by_three="-3" igor@55: [ "$WORDS_GROUPING" = NO ] && words_grouping="-G" igor@54: igor@54: $NEW_WORDS_PY -l "$LANGUAGE" \ igor@55: $SHOW_RANGE \ igor@54: $SHOW_RANGE_PERCENTAGE \ igor@54: $PART_TO_PROCESS \ igor@54: $ALLOWED_WORDS_FILENAME \ igor@54: $non_interactive \ igor@54: $stat_only \ igor@54: $compressed_wordlist \ igor@54: $filter_words \ igor@54: $group_words_by_two \ igor@54: $group_words_by_three \ igor@55: $words_grouping \ igor@54: -X get_words_group_words_add_stat "$1" igor@38: } igor@38: igor@38: if [ "$TAGS_LIST_ONLY" = "YES" ] igor@38: then igor@38: cd "${WORK_DIR}" igor@38: echo ${LANGUAGE}_*.txt | tr ' ' '\n' | grep -v '*' | sed 's/[^_]*_//;s/.txt$//' igor@38: exit 0 igor@38: fi igor@38: igor@38: tag_file_name() igor@38: { igor@38: echo "${LANGUAGE}_${1}.txt" igor@38: } igor@38: igor@38: if [ "$REMOVE_TAG" = "YES" ] igor@38: then igor@38: cd "${WORK_DIR}" igor@38: for i in $TAG_NAME igor@38: do igor@38: echo "$TAGNAME" | grep -q '[/*?]' && continue igor@38: f="`tag_file_name $i`" igor@38: if [ -e "$f" ] igor@38: then igor@38: rm -f "$f" && echo Tag "'$i'" removed igor@38: else igor@38: echo Unknown tag "'$i'" igor@38: fi igor@38: done igor@38: exit 0 igor@38: fi igor@38: igor@54: get_words_group_words_add_stat "$1" igor@38: igor@54: #mkdir -p $WORK_DIR igor@54: #oldpwd="$PWD" igor@54: #cd $WORK_DIR igor@54: #if [ "$MERGE_TAGGED_WORDS" = "YES" ] igor@54: #then igor@54: # VOC_FILES='' igor@54: # for i in $MERGE_THIS_TAGS igor@54: # do igor@54: # f=`tag_file_name $i` igor@54: # [ -e "$f" ] && VOC_FILES="${VOC_FILES} $f" igor@54: # done igor@54: # if [ -z "$VOC_FILES" ] igor@54: # then igor@54: # echo Unknown tags: $MERGE_THIS_TAGS > /dev/stderr igor@54: # else igor@54: # cat $VOC_FILES igor@54: # fi igor@54: #elif [ "$MERGE_ALL_TAGGED" = "YES" ] igor@54: #then igor@54: # cat ${LANGUAGE}_*.txt igor@54: #else igor@54: # cat igor@54: #fi igor@38: igor@38: