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