1 with TEXT_IO; 2 with INFLECTIONS_PACKAGE; use INFLECTIONS_PACKAGE; 3 with DICTIONARY_PACKAGE; use DICTIONARY_PACKAGE; 4 with CONFIG; use CONFIG; 5 with WORD_PARAMETERS; use WORD_PARAMETERS; 6--with LATIN_DEBUG; 7 procedure PUT_EXAMPLE_LINE(OUTPUT : TEXT_IO.FILE_TYPE; IR : in INFLECTION_RECORD; 8 DE : in DICTIONARY_ENTRY) is 9 -- use LATIN_DEBUG; 10 VK : VERB_KIND_TYPE; 11 12 procedure PUT_VERB_EXAMPLE(OUTPUT : TEXT_IO.FILE_TYPE; IR : in INFLECTION_RECORD; 13 VK : in VERB_KIND_TYPE) is 14 PERSON : constant PERSON_TYPE := IR.QUAL.V.PERSON; 15 NUMBER : constant NUMBER_TYPE := IR.QUAL.V.NUMBER; 16 TENSE : constant TENSE_TYPE := IR.QUAL.V.TENSE_VOICE_MOOD.TENSE; 17 MOOD : constant MOOD_TYPE := IR.QUAL.V.TENSE_VOICE_MOOD.MOOD; 18 VOICE : VOICE_TYPE := IR.QUAL.V.TENSE_VOICE_MOOD.VOICE; 19 KIND : VERB_KIND_TYPE := VK; 20 -- Nothing on (part), gerund, 21 22 function THEY return STRING is 23 begin 24 if KIND = IMPERS then 25 return "it "; 26 end if; 27 28 if MOOD = INF then 29 return "to "; 30 end if; 31 32 if MOOD = IMP and TENSE = PRES and NUMBER = P then 33 return "(you) "; 34 end if; 35 36 if MOOD = SUB and TENSE = PRES and 37 PERSON = 1 and NUMBER = P then 38 return "let us "; -- G&L 263 1 39 end if; 40 41 if NUMBER = S then 42 if PERSON = 1 then 43 return "I "; 44 elsif PERSON = 2 then 45 return "you "; 46 elsif PERSON = 3 then 47 return "he/it "; 48 else 49 return ""; 50 end if; 51 elsif NUMBER = P then 52 if PERSON = 1 then 53 return "we "; 54 elsif PERSON = 2 then 55 return "you "; 56 elsif PERSON = 3 then 57 return "they "; 58 else 59 return ""; 60 end if; 61 else 62 return ""; 63 end if; 64 end THEY; 65 66 function SHALL return STRING is 67 begin -- ACTIVE only !!!!!!!!!!!!!!!! 68 if (TENSE = FUT or TENSE = FUTP ) then 69 if (MOOD = IND) or (MOOD = SUB) then 70 if PERSON = 1 then 71 return "shall "; 72 elsif PERSON = 2 then 73 return "will "; 74 elsif PERSON = 3 then 75 return "will "; 76 else 77 return ""; 78 end if; 79 elsif MOOD = IMP then 80 if PERSON = 1 then 81 return "will "; 82 elsif PERSON = 2 then 83 return "(shall) "; 84 elsif PERSON = 3 then 85 return "(shall) "; 86 else 87 return ""; 88 end if; 89 elsif MOOD = INF then 90 if TENSE = FUT then 91 return "be about to be "; 92 else 93 return ""; 94 end if; 95 else 96 return ""; 97 end if; 98 else 99 return ""; 100 end if; 101 end SHALL; 102 103 function HAVE return STRING is 104 begin 105 if TENSE in PRES..FUT then 106 return ""; 107 elsif TENSE = PERF then 108 if (TENSE = PERF) and (PERSON = 3) and (NUMBER = S) then 109 return "has "; 110 else 111 return "have "; -- works for INF too 112 end if; 113 elsif TENSE = PLUP then 114 if MOOD = IND then 115 return "had"; 116 elsif MOOD = SUB then 117 return "have "; 118 else 119 return ""; 120 end if; 121 elsif TENSE = FUTP then 122 return "have "; 123 else 124 return ""; 125 end if; 126 end HAVE; 127 128 function BEEN return STRING is 129 begin 130 if VOICE = PASSIVE then 131 if MOOD = IND then 132 if TENSE = PRES then 133 if (PERSON = 1) and (NUMBER = S) then 134 return "am/am being "; 135 elsif (PERSON = 3) and (NUMBER = S) then 136 return "is/is being "; 137 else 138 return "are/are being "; 139 end if; 140 elsif TENSE = IMPF then 141 if (PERSON = 1 or PERSON = 3) and (NUMBER = S) then 142 return "was/was being "; 143 else 144 return "were/were being "; 145 end if; 146 elsif TENSE = FUT then 147 return "be "; 148 elsif TENSE = PERF then 149 if (PERSON = 1 or PERSON = 3) and (NUMBER = S) then 150 return "been/was "; 151 else 152 return "been/were "; 153 end if; 154 elsif TENSE in PLUP..FUTP then 155 return "been "; 156 else 157 return ""; 158 end if; 159 elsif MOOD = SUB then 160 return ""; --???????? 161 elsif MOOD = INF then 162 if TENSE = PRES then 163 return "be "; 164 elsif TENSE = PERF then 165 return "been "; 166 else 167 return ""; 168 end if; 169 elsif MOOD = IMP then 170 return "be "; 171 else 172 return ""; 173 end if; 174 else 175 return ""; 176 end if; 177 end BEEN; 178 179 function ED return STRING is 180 begin 181 if MOOD = IMP then 182 if VOICE = ACTIVE then 183 return "!"; 184 elsif VOICE = PASSIVE then 185 return "ed!"; 186 else 187 return ""; 188 end if; 189 elsif MOOD = INF then 190 if VOICE = ACTIVE then 191 return ""; 192 elsif VOICE = PASSIVE then 193 return "ed"; 194 else 195 return ""; 196 end if; 197 elsif MOOD = IND then 198 if VOICE = ACTIVE then 199 if TENSE = PRES then 200 if (PERSON = 3) and (NUMBER = S) then 201 return "s"; 202 else 203 return ""; 204 end if; 205 elsif TENSE = IMPF then 206 if (PERSON = 1 or PERSON = 3) and (NUMBER = S) then 207 return "ed/was ~ing"; 208 else 209 return "ed/were ~ing"; 210 end if; 211 elsif TENSE in PERF..FUTP then 212 return "ed"; 213 else 214 return ""; 215 end if; 216 elsif VOICE = PASSIVE then 217 return "ed"; 218 else 219 return ""; 220 end if; 221 elsif MOOD = SUB then 222 if TENSE in PERF..PLUP then 223 return "ed"; 224 else 225 return ""; 226 end if; 227 else 228 return ""; 229 end if; 230 end ED; 231 232 function SUB return STRING is 233 begin 234 if MOOD = SUB then 235 return "may/must/should "; 236 else 237 return ""; 238 end if; 239 end SUB; 240 241 242 begin -- PUT_VERB_EXAMPLE 243 if KIND = DEP then 244 VOICE := ACTIVE; -- Should only have allowed PASSIVE at this point 245 elsif KIND = SEMIDEP and then TENSE in PERF..FUTP then 246 VOICE := ACTIVE; -- Should only have allowed PASSIVE at this point 247 end if; 248 249 TEXT_IO.PUT(OUTPUT, THEY & SUB & SHALL & HAVE & BEEN & "~" & ED); 250 251 end PUT_VERB_EXAMPLE; 252 253 254 begin -- PUT_EXAMPLE_LINE 255 256 --TEXT_IO.PUT("In EXAMPLES "); 257 --TEXT_IO.PUT(" LKM "); BOOLEAN_IO.PUT(WORDS_MDEV(LOCK_MEANINGS)); 258 --TEXT_IO.PUT(" /LKM "); BOOLEAN_IO.PUT((not WORDS_MDEV(LOCK_MEANINGS)) ); 259 260 if WORDS_MODE(DO_EXAMPLES) and then (not (CONFIGURATION = ONLY_MEANINGS)) then 261 262 case IR.QUAL.POFS is 263 when N => 264 case IR.QUAL.N.CS is 265 when GEN => 266 TEXT_IO.PUT(OUTPUT, "~'s; of ~"); 267 TEXT_IO.NEW_LINE(OUTPUT); 268 when ABL => 269 TEXT_IO.NEW_LINE(OUTPUT); -- Info too much for same line 270 TEXT_IO.SET_COL(OUTPUT, 6); 271 TEXT_IO.PUT(OUTPUT, 272 "from _ (separ); because of ~ (cause); than ~ (compar); of ~ (circumstance)"); 273 TEXT_IO.NEW_LINE(OUTPUT); 274 when DAT => 275 TEXT_IO.NEW_LINE(OUTPUT); -- Info too much for same line 276 TEXT_IO.SET_COL(OUTPUT, 6); 277 TEXT_IO.PUT(OUTPUT, 278 "for _ (purpose, reference); to ~ (w/adjectives); to ~ (double dative)"); 279 TEXT_IO.NEW_LINE(OUTPUT); 280 when LOC => 281 TEXT_IO.PUT(OUTPUT, "at ~ (place where)"); 282 TEXT_IO.NEW_LINE(OUTPUT); 283 when others => 284 null; 285 --TEXT_IO.NEW_LINE(OUTPUT); 286 end case; 287 288 when ADJ => 289 case IR.QUAL.ADJ.CO is 290 when COMP => 291 TEXT_IO.PUT(OUTPUT, "~er; more/too _"); 292 TEXT_IO.NEW_LINE(OUTPUT); 293 when SUPER => 294 TEXT_IO.PUT(OUTPUT, "~est; most/very"); 295 TEXT_IO.NEW_LINE(OUTPUT); 296 when others => 297 null; 298 --TEXT_IO.NEW_LINE(OUTPUT); 299 end case; 300 301 when ADV => 302 case IR.QUAL.ADV.CO is 303 when COMP => 304 TEXT_IO.PUT(OUTPUT, "more/too ~(ly)"); 305 TEXT_IO.NEW_LINE(OUTPUT); 306 when SUPER => 307 TEXT_IO.PUT(OUTPUT, "most/very ~(ly)"); 308 TEXT_IO.NEW_LINE(OUTPUT); 309 when others => 310 null; 311 --TEXT_IO.NEW_LINE(OUTPUT); 312 end case; 313 314 when V => 315 --TEXT_IO.NEW_LINE(OUTPUT); -- Verb info too much for same line 316 VK := DE.PART.V.KIND; 317 TEXT_IO.SET_COL(OUTPUT, 6); 318 PUT_VERB_EXAMPLE(OUTPUT, IR, VK); 319 TEXT_IO.NEW_LINE(OUTPUT); 320 321 when VPAR => 322 -- TEXT_IO.NEW_LINE(OUTPUT); -- Verb info too much for same line 323 case IR.QUAL.VPAR.TENSE_VOICE_MOOD.TENSE is 324 when PERF => 325 TEXT_IO.PUT(OUTPUT, 326 "~ed PERF PASSIVE PPL often used as ADJ or N (amatus => belov.ed)"); 327 TEXT_IO.NEW_LINE(OUTPUT); 328 when PRES => 329 TEXT_IO.PUT(OUTPUT, 330 "~ing PRES ACTIVE PPL often used as ADJ or N (lov.ing, curl.y)"); 331 TEXT_IO.NEW_LINE(OUTPUT); 332 when FUT => 333 if IR.QUAL.VPAR.TENSE_VOICE_MOOD.VOICE = ACTIVE then 334 TEXT_IO.PUT(OUTPUT, 335 "about/going/intending/destined to ~ FUT ACTIVE PPL often used as ADJ or N "); 336 TEXT_IO.NEW_LINE(OUTPUT); 337 else 338 case IR.QUAL.VPAR.CS is 339 when GEN => 340 TEXT_IO.PUT(OUTPUT, 341 "to(/must) be ~ed FUT PASSIVE PPL, often used as gerund or gerundive (of ~ing)"); 342 when DAT => 343 TEXT_IO.PUT(OUTPUT, 344 "to(/must) be ~ed FUT PASSIVE PPL, often used as gerund or gerundive (to/for ~ing)"); 345 when ABL => 346 TEXT_IO.PUT(OUTPUT, 347 "to(/must) be ~ed FUT PASSIVE PPL, often used as gerund or gerundive (by/in ~ing)"); 348 when ACC => 349 TEXT_IO.PUT(OUTPUT, 350 "to(/must) be ~ed FUT PASSIVE PPL, often used as gerund or gerundive (for ~ing/to ~)"); 351 when others => 352 TEXT_IO.PUT(OUTPUT, 353 "to(/must) be ~ed FUT PASSIVE PPL, often used as gerund or gerundive (~ing)"); 354 end case; 355 TEXT_IO.NEW_LINE(OUTPUT); 356 end if; 357 when others => 358 null; 359 --TEXT_IO.NEW_LINE(OUTPUT); 360 end case; -- TENSE 361 362 when SUPINE => 363 --TEXT_IO.NEW_LINE(OUTPUT); 364 if IR.QUAL.SUPINE.CS = ACC then 365 TEXT_IO.PUT(OUTPUT, 366 "to ~ expresses purpose of verb of motion; may take a direct object"); 367 TEXT_IO.NEW_LINE(OUTPUT); 368 elsif IR.QUAL.SUPINE.CS = ABL then 369 TEXT_IO.PUT(OUTPUT, 370 "to ~ after ADJ indicating aspect/respect in which something is/is done"); 371 TEXT_IO.NEW_LINE(OUTPUT); 372 end if; 373 374 when others => 375 null; 376 --TEXT_IO.NEW_LINE(OUTPUT); 377 end case; -- PART 378 379 else 380 null; 381 --TEXT_IO.NEW_LINE(OUTPUT); 382 end if; 383 384 end PUT_EXAMPLE_LINE; 385