lgram

A command-line utility for drilling Latin grammar.
git clone git://git.jtobin.io/lgram.git
Log | Files | Refs | README

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