decl (6925B)
1 #!/usr/bin/env bash 2 3 # nb everything after 9th field are optional tags 4 5 DATA=$(cat << EOF 6 hōra,dēclīnātiō I,fēminīnum,singulāris,hōra,hōram,hōrae,hōrae,hōrā,hour,nomina 7 hōrae,dēclīnātiō I,fēminīnum,plūrālis,hōrae,hōrās,hōrārum,hōrīs,hōrīs,hours,nomina 8 magnus,dēclīnātiō I,masculīnum,singulāris,magnus,magnum,magnī,magnō,magnō,large,dēclīnātiō II,adiectīva 9 magnus,dēclīnātiō I,masculīnum,plūrālis,magnī,magnōs,magnōrum,magnīs,magnīs,large,dēclīnātiō II,adiectīva 10 magnus,dēclīnātiō I,fēminīnum,singulāris,magna,magnam,magnae,magnae,magnā,large,dēclīnātiō II,adiectīva 11 magnus,dēclīnātiō I,fēminīnum,plūrālis,magnae,magnās,magnārum,magnīs,magnīs,large,dēclīnātiō II,adiectīva 12 magnus,dēclīnātiō I,neutrum,singulāris,magnum,magnum,magnī,magnō,magnō,large,dēclīnātiō II,adiectīva 13 magnus,dēclīnātiō I,neutrum,plūrālis,magna,magna,magnōrum,magnīs,magnīs,large,dēclīnātiō II,adiectīva 14 nūllus,dēclīnātiō I,masculīnum,singulāris,nūllus,nūllum,nūllīus,nūllī,nūllō,none,dēclīnātiō II,adiectīva 15 nūllus,dēclīnātiō I,masculīnum,plūrālis,nūllī,nūllōs,nūllōrum,nūllīs,nūllīs,none,dēclīnātiō II,adiectīva 16 nūllus,dēclīnātiō I,fēminīnum,singulāris,nūlla,nūllam,nūllīus,nūllī,nūllā,none,dēclīnātiō II,adiectīva 17 nūllus,dēclīnātiō I,fēminīnum,plūrālis,nūllae,nūllās,nūllārum,nūllīs,nūllīs,none,dēclīnātiō II,adiectīva 18 nūllus,dēclīnātiō I,neutrum,singulāris,nūllum,nūllum,nūllīus,nūllī,nūllō,none,dēclīnātiō II,adiectīva 19 nūllus,dēclīnātiō I,neutrum,plūrālis,nūlla,nūlla,nūllōrum,nūllīs,nūllīs,none,dēclīnātiō II,adiectīva 20 liber,dēclīnātiō II,masculīnum,singulāris,liber,librum,librī,librō,librō,book,nomina 21 librī,dēclīnātiō II,masculīnum,plūrālis,librī,librōs,librōrum,librīs,librīs,book,nomina 22 servus,dēclīnātiō II,masculīnum,singulāris,servus,servum,servī,servō,servō,servant,nomina 23 servī,dēclīnātiō II,masculīnum,plūrālis,servī,servō,servōrum,servīs,servīs,books,nomina 24 verbum,dēclīnātiō II,neutrum,singulāris,verbum,verbum,verbī,verbō,verbō,word,nomina 25 verba,dēclīnātiō II,neutrum,plūrālis,verba,verba,verbōrum,verbīs,verbīs,words,nomina 26 leō,dēclīnātiō III,masculīnum,singulāris,leō,leōnem,leōnis,leōnī,leōne,lion,nomina 27 leō,dēclīnātiō III,masculīnum,plūrālis,leōnēs,leōnēs,leōnum,leōnibus,leōnibus,lions,nomina 28 mare,dēclīnātiō III,neutrum,singulāris,mare,mare,maris,marī,marī,sea,nomina 29 maria,dēclīnātiō III,neutrum,plūrālis,maria,maria,marium,maribus,maribus,seas,nomina 30 mōns,dēclīnātiō III,masculīnum,singulāris,mōns,montem,montis,montī,monte,mountain,nomina 31 montēs,dēclīnātiō III,masculīnum,plūrālis,montēs,montēs,montium,montibus,montibus,mountains,nomina 32 nāvis,dēclīnātiō III,fēminīnum,singulāris,nāvis,nāvem,nāvis,nāvī,nāve,ship,nomina 33 nāvēs,dēclīnātiō III,fēminīnum,plūrālis,nāvēs,nāvēs,nāvium,nāvibus,nāvibus,ships,nomina 34 nōmen,dēclīnātiō III,neutrum,singulāris,nōmen,nōmen,nōminis,nōminī,nōmine,name,nomina 35 nōmina,dēclīnātiō III,neutrum,plūrālis,nōmina,nōmina,nōminum,nōminibus,nōminibus,names,nomina 36 sōl,dēclīnātiō III,masculīnum,singulāris,sōl,sōlem,sōlis,sōlī,sōle,sun,nomina 37 sōlēs,dēclīnātiō III,masculīnum,plūrālis,sōlēs,sōlēs,sōlum,sōlibus,sōlibus,suns,nomina 38 urbs,dēclīnātiō III,fēminīnum,singulāris,urbs,urbem,urbis,urbī,urbe,city,nomina 39 urbēs,dēclīnātiō III,fēminīnum,plūrālis,urbēs,urbēs,urbium,urbibus,urbibus,cities,nomina 40 vōx,dēclīnātiō III,fēminīnum,singulāris,vōx,vōcem,vōcis,vōcī,vōce,voice,nomina 41 vōcēs,dēclīnātiō III,fēminīnum,plūrālis,vōcēs,vōcēs,vōcum,vōcibus,vōcibus,voices,nomina 42 cāsus,dēclīnātiō IV,masculīnum,singulāris,cāsus,cāsum,cāsūs,cāsuī,cāsū,case,nomina 43 cāsūs,dēclīnātiō IV,masculīnum,plūrālis,cāsūs,cāsūs,cāsuum,cāsibus,cāsibus,cases,nomina 44 cornū,dēclīnātiō IV,neutrum,singulāris,cornū,cornū,cornūs,cornū,cornū,horn,nomina 45 cornua,dēclīnātiō IV,neutrum,plūrālis,cornua,cornua,cornuum,cornibus,cornibus,horns,nomina 46 diēs,dēclīnātiō V,masculīnum,singulāris,diēs,diem,diēī,diēī,diē,day,nomina 47 diēs,dēclīnātiō V,masculīnum,plūrālis,diēs,diēs,diērum,diēbus,diēbus,days,nomina 48 rēs,dēclīnātiō V,fēminīnum,singulāris,rēs,rem,reī,reī,rē,cause,nomina 49 rēs,dēclīnātiō V,fēminīnum,plūrālis,rēs,rēs,rērum,rēbus,rēbus,causes,nomina 50 gravis,dēclīnātiō III,masculīnum/fēminīnum,singulāris,gravis,gravem,gravis,gravī,gravī,heavy,adiectīva 51 gravis,dēclīnātiō III,masculīnum/fēminīnum,plūrālis,gravēs,gravēs,gravium,gravibus,gravibus,heavy,adiectīva 52 gravis,dēclīnātiō III,neutrum,singulāris,grave,grave,gravis,gravī,gravī,heavy,adiectīva 53 gravis,dēclīnātiō III,neutrum,plūrālis,gravia,gravia,gravium,gravibus,gravibus,heavy,adiectīva 54 ingēns,dēclīnātiō III,masculīnum/fēminīnum,singulāris,ingēns,ingentem,ingentis,ingentī,ingentī,enormous,adiectīva 55 ingēns,dēclīnātiō III,masculīnum/fēminīnum,plūrālis,ingentēs,ingentēs,ingentium,ingentibus,ingentibus,enormous,adiectīva 56 ingēns,dēclīnātiō III,neutrum,singulāris,ingēns,ingēns,ingentis,ingentī,ingentī,enormous,adiectīva 57 ingēns,dēclīnātiō III,neutrum,plūrālis,ingentia,ingentia,ingentium,ingentibus,ingentibus,enormous,adiectīva 58 melior,dēclīnātiō III,masculīnum/fēminīnum,singulāris,melior,meliōrem,meliōris,meliōrī,meliōre,better,adiectīva 59 melior,dēclīnātiō III,masculīnum/fēminīnum,plūrālis,meliōrēs,meliōrēs,meliorum,meliōribus,meliōribus,better,adiectīva 60 melior,dēclīnātiō III,neutrum,singulāris,melius,melius,meliōris,meliōrī,meliōre,better,adiectīva 61 melior,dēclīnātiō III,neutrum,plūrālis,meliōra,meliōra,meliōrum,meliōribus,meliōribus,better,adiectīva 62 EOF 63 ) 64 65 prompt() { 66 read -p '' -n 1 -r <&1 67 if [[ $REPLY =~ ^[Qq]$ ]]; then 68 exit 0 69 fi 70 } 71 72 IFS="|" 73 74 if [[ ! -z "$@" ]]; then 75 for arg in "$@"; do 76 sarg=$(echo -n "$arg" | sed 's/|/\\b|\\b/g') 77 DATA=$(grep -E "\b$sarg\b" <<< "$DATA") 78 done 79 80 if [[ -z "$DATA" ]]; then 81 echo "no results" 82 exit 1 83 fi 84 fi 85 86 LOOP=true 87 88 while $LOOP; do 89 90 clear 91 92 cont=$(shuf -n 1 <<< "$DATA") 93 94 wd=$(cut -f 1 -d, <(echo -n "$cont")) 95 ty=$(cut -f 2 -d, <(echo -n "$cont")) 96 ge=$(cut -f 3 -d, <(echo -n "$cont")) 97 mu=$(cut -f 4 -d, <(echo -n "$cont")) 98 en=$(cut -f 10 -d, <(echo -n "$cont")) 99 100 echo "$wd ($mu, $ge): $en" 101 102 prompt 103 104 echo "$ty" 105 echo 106 echo "nōm: $(cut -f 5 -d, <<< "$cont")" 107 echo "acc: $(cut -f 6 -d, <<< "$cont")" 108 echo "gen: $(cut -f 7 -d, <<< "$cont")" 109 echo "dat: $(cut -f 8 -d, <<< "$cont")" 110 echo "abl: $(cut -f 9 -d, <<< "$cont")" 111 112 prompt 113 114 done