Skip to content

Commit e23dcc8

Browse files
committed
[spell check] avoid multiple replace by adding prev and next char to sed replace command
1 parent e7ea37d commit e23dcc8

File tree

3 files changed

+18
-9
lines changed

3 files changed

+18
-9
lines changed

scripts/spell_check/check_spelling.sh

+15-8
Original file line numberDiff line numberDiff line change
@@ -124,10 +124,10 @@ for I in $(seq -f '%02g' 0 $(($SPLIT-1)) ) ; do
124124
IGNORECASE=$(echo "(${IGNORECASE_FIXSPECIALCHAR}|${IGNORECASE_INWORD}|${IGNORECASE_WHOLEWORD})" |${GP}sed -r 's/\(\|/(/' |${GP}sed -r 's/\|\|/|/g' |${GP}sed -r 's/\|\)/)/')'(?!.*'"${SPELLOKRX}"')'
125125
CASEMATCH=$(echo "(${CASEMATCH_FIXCASE}|${MATCHCASE_INWORD})" |${GP}sed -r 's/\(\|/(/' |${GP}sed -r 's/\|\|/|/g' |${GP}sed -r 's/\|\)/)/')'(?!.*'"${SPELLOKRX}"')'
126126

127-
FILE=$INPUTFILES # init with input files (if ag is run with single file, file path is now in output)
127+
FILE=$INPUTFILES # init with input files (if ag is run with single file, file path is not written in output)
128128

129129
while read -u 3 -r LINE; do
130-
echo "$LINE"
130+
echo -e "$LINE"
131131
ERRORFOUND=YES
132132
NOCOLOR=$(echo "$LINE" | ${GP}sed -r 's/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g')
133133
if [[ "$NOCOLOR" =~ ^[[:alnum:]][[:alnum:]\/\._-]+$ ]]; then
@@ -141,7 +141,9 @@ for I in $(seq -f '%02g' 0 $(($SPLIT-1)) ) ; do
141141
fi
142142
NUMBER=$(echo "$NOCOLOR" | cut -d: -f1)
143143
ERRORLINE=$(echo "$NOCOLOR" | cut -d: -f2)
144-
ERROR=$(echo "$LINE" | ${GP}sed -r 's/^.*?\x1B\[30;43m(.*?)\x1B\[0m.*$/\1/')
144+
ERROR=$(echo "$LINE" | ${GP}sed -r 's/^.*?\x1B\[30;43m(.*?)\x1B\[0m.*?$/\1/')
145+
PREVCHAR=$(echo "$LINE" | cut -d: -f2 | ${GP}sed -r 's/^(.*?)\x1B\[30;43m.*?\x1B\[0m.*?$/\1/' | ${GP}sed -r 's/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g' | tail -c 2)
146+
NEXTCHAR=$(echo "$LINE" | cut -d: -f2 | ${GP}sed -r 's/^.*?\x1B\[30;43m.*?\x1B\[0m(.*?)$/\1/' | ${GP}sed -r 's/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g' | head -c 1)
145147

146148
ERRORNOCOLOR=$(echo "$ERROR" | ${GP}sed -r 's/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g')
147149
if [[ "$ERRORNOCOLOR" =~ ^[[:digit:]]+: ]]; then
@@ -152,10 +154,14 @@ for I in $(seq -f '%02g' 0 $(($SPLIT-1)) ) ; do
152154
ERRORSMALLCASE=$(echo ${ERROR,,} |${GP}sed -r 's/\(/\\(/g' |${GP}sed -r 's/\)/\\)/g' |${GP}sed -r 's/\|/\\|/g')
153155
if [[ ! "${ERRORSMALLCASE}" =~ $IGNORECASE_INWORD ]]; then
154156
if [[ -n $(ag --nonumbers --case-sensitive "^${ERRORSMALLCASE:1:-1}${ERRORSMALLCASE: -1}?:" scripts/spell_check/spelling.dat) ]]; then
157+
PREVCHAR=${ERROR::1}
158+
# remove first character
155159
ERRORSMALLCASE=${ERRORSMALLCASE#?}
156160
ERROR=${ERROR#?}
157161
fi
158162
if [[ -n $(ag --nonumbers --case-sensitive "^${ERRORSMALLCASE::-1}:" scripts/spell_check/spelling.dat) ]]; then
163+
NEXTCHAR=${ERROR:${#ERROR}-1:1}
164+
# remove last character
159165
ERRORSMALLCASE=${ERRORSMALLCASE::-1}
160166
ERROR=${ERROR::-1}
161167
fi
@@ -177,7 +183,7 @@ for I in $(seq -f '%02g' 0 $(($SPLIT-1)) ) ; do
177183
# Skip global replace
178184
if [[ -n ${GLOBREP_ALLFILES["$ERROR"]} ]]; then
179185
echo -e "replace \x1B[33m$ERROR\x1B[0m by \x1B[33m$CORRECTIONCASE\x1B[0m in \x1B[33m$FILE\x1B[0m"
180-
${GP}sed -i -r "/${SPELLOKRX}/! s/$ERROR/$CORRECTIONCASE/g" $FILE
186+
${GP}sed -i -r "/${SPELLOKRX}/! s/${PREVCHAR}${ERROR}${NEXTCHAR}/${PREVCHAR}$CORRECTIONCASE${NEXTCHAR}/g" $FILE
181187
continue
182188
elif [[ ( -n ${GLOBREP_CURRENTFILE["$ERROR"]} ) || ( -n ${GLOBREP_IGNORE["$ERROR"]} ) ]]; then
183189
echo "skipping occurrence"
@@ -190,6 +196,7 @@ for I in $(seq -f '%02g' 0 $(($SPLIT-1)) ) ; do
190196
fi
191197
if [[ "$FILE" =~ \.(h|cpp|sip)$ ]]; then
192198
if [[ "$ERRORLINE" =~ ^\s*(\/*\|\/\/) ]]; then
199+
# line is already commented
193200
SPELLOKSTR='#spellok'
194201
fi
195202
fi
@@ -215,20 +222,20 @@ for I in $(seq -f '%02g' 0 $(($SPLIT-1)) ) ; do
215222
case $n in
216223
r)
217224
echo -e "replacing \x1B[33m$ERROR\x1B[0m by \x1B[33m$CORRECTIONCASE\x1B[0m in \x1B[33m$FILE\x1B[0m at line \x1B[33m$NUMBER\x1B[0m"
218-
${GP}sed -i "${NUMBER}s/$ERROR/$CORRECTIONCASE/g" $FILE
225+
${GP}sed -i "${NUMBER}s/${PREVCHAR}${ERROR}${NEXTCHAR}/${PREVCHAR}$CORRECTIONCASE${NEXTCHAR}/g" $FILE
219226
break
220227
;;
221228
f)
222229
GLOBREP_CURRENTFILE+=(["$ERROR"]=1)
223230
echo -e "replacing \x1B[33m$ERROR\x1B[0m by \x1B[33m$CORRECTIONCASE\x1B[0m in \x1B[33m$FILE\x1B[0m"
224-
${GP}sed -i -r "/${SPELLOKRX}/! s/$ERROR/$CORRECTIONCASE/g" $FILE
231+
${GP}sed -i -r "/${SPELLOKRX}/! s/${PREVCHAR}${ERROR}${NEXTCHAR}/${PREVCHAR}$CORRECTIONCASE${NEXTCHAR}/g" $FILE
225232
break
226233
;;
227234
a)
228235
GLOBREP_CURRENTFILE+=(["$ERROR"]=1)
229236
GLOBREP_ALLFILES+=(["$ERROR"]=1)
230237
echo -e "replace \x1B[33m$ERROR\x1B[0m by \x1B[33m$CORRECTIONCASE\x1B[0m in \x1B[33m$FILE\x1B[0m"
231-
${GP}sed -i -r "/${SPELLOKRX}/! s/$ERROR/$CORRECTIONCASE/g" $FILE
238+
${GP}sed -i -r "/${SPELLOKRX}/! s/${PREVCHAR}${ERROR}${NEXTCHAR}/${PREVCHAR}$CORRECTIONCASE${NEXTCHAR}/g" $FILE
232239
break
233240
;;
234241
p)
@@ -242,7 +249,7 @@ for I in $(seq -f '%02g' 0 $(($SPLIT-1)) ) ; do
242249
MATCHCASE="$ERROR:$CORRECTION"
243250
CORRECTIONCASE=$(echo "$MATCHCASE" | ${GP}sed -r 's/([A-Z]+):(.*)/\1:\U\2/; s/([A-Z][a-z]+):([a-z])/\1:\U\2\L/' | cut -d: -f2)
244251
echo -e "replacing \x1B[33m$ERROR\x1B[0m by \x1B[33m$CORRECTIONCASE\x1B[0m in \x1B[33m$FILE\x1B[0m at line \x1B[33m$NUMBER\x1B[0m"
245-
${GP}sed -i "${NUMBER}s/$ERROR/$CORRECTIONCASE/g" $FILE
252+
${GP}sed -i "${NUMBER}s/${PREVCHAR}${ERROR}${NEXTCHAR}/${PREVCHAR}$CORRECTIONCASE${NEXTCHAR}/g" $FILE
246253
break
247254
;;
248255
c)

scripts/spell_check/spell_test.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ elif [[ ! -z $TRAVIS_COMMIT_RANGE ]]; then
1515
FILES=$(git diff --diff-filter=AM --name-only ${TRAVIS_COMMIT_RANGE/.../..} | tr '\n' ' ' )
1616
export PATH=${HOME}/osgeo4travis/bin:${PATH}
1717
else
18-
echo "Runnng spell test on all files (might take a while)"
18+
echo "Running spell test on all files (might take a while)"
1919
FILES=""
2020
fi
2121

scripts/spell_check/test.sh

+2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
# #
1515
###########################################################################
1616

17+
# Testing the spell test :)
18+
1719
# GNU prefix command for mac os support (gsed, gsplit)
1820
GP=
1921
if [[ "$OSTYPE" =~ darwin* ]]; then

0 commit comments

Comments
 (0)