| #!/bin/sh |
| case $# in |
| 0|1|2) echo "Usage: wordforms [-s | -p] dictionary.aff dictionary.dic word |
| -s: print only suffixed forms |
| -p: print only prefixed forms |
| "; exit 1;; |
| esac |
| fx=0 |
| case $1 in |
| -s) fx=1; shift;; |
| -p) fx=2; shift;; |
| esac |
| test -h /tmp/wordforms.aff && rm /tmp/wordforms.aff |
| ln -s $PWD/$1 /tmp/wordforms.aff |
| # prepared dic only with the query word |
| echo 1 >/tmp/wordforms.dic |
| grep "^$3/" $2 >>/tmp/wordforms.dic |
| echo $3 | awk -v "fx=$fx" ' |
| fx!=2 && FILENAME!="-" && /^SFX/ && NF > 4{split($4,a,"/");clen=($3=="0") ? 0 : length($3);sfx[a[1],clen]=a[1];sfxc[a[1],clen]=clen;next} |
| fx!=1 && FILENAME!="-" && /^PFX/ && NF > 4{split($4,a,"/");clen=($3=="0") ? 0 : length($3);pfx[a[1],clen]=a[1];pfxc[a[1],clen]=clen;next} |
| FILENAME=="-"{ |
| wlen=length($1) |
| if (fx==0 || fx==2) { |
| for (j in pfx) {if (wlen<=pfxc[j]) continue; print (pfx[j]=="0" ? "" : pfx[j]) substr($1, pfxc[j]+1)} |
| } |
| if (fx==0 || fx==1) { |
| for(i in sfx){clen=sfxc[i];if (wlen<=clen) continue; print substr($1, 1, wlen-clen) (sfx[i]=="0" ? "": sfx[i]) } |
| } |
| if (fx==0) { |
| for (j in pfx) {if (wlen<=pfxc[j]) continue; |
| for(i in sfx){clen=sfxc[i];if (wlen<=clen || wlen <= (clen + pfxc[j]))continue; |
| print (pfx[j]=="0" ? "" : pfx[j]) substr($1, pfxc[j]+1, wlen-clen-pfxc[j]) (sfx[i]=="0" ? "": sfx[i]) }} |
| } |
| } |
| ' /tmp/wordforms.aff - | hunspell -d /tmp/wordforms -G -l |