| #!/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 |