Files
whitakers-words/dictionary_package.ads
2012-05-31 16:45:42 -05:00

477 lines
19 KiB
Ada

-- Need KIND_ENTRY and IO
-- Need to modify TRANS
with TEXT_IO;
with DIRECT_IO;
with INFLECTIONS_PACKAGE; use INFLECTIONS_PACKAGE;
package DICTIONARY_PACKAGE is
use TEXT_IO;
ZZZ_STEM : constant STEM_TYPE := "zzz" & (4..MAX_STEM_SIZE => ' ');
type STEMS_TYPE is array (STEM_KEY_TYPE range 1..4) of STEM_TYPE;
NULL_STEMS_TYPE : constant STEMS_TYPE := (others => NULL_STEM_TYPE);
type DICTIONARY_KIND is (X, -- null
ADDONS, -- For FIXES
XXX, -- TRICKS
YYY, -- Syncope
NNN, -- Unknown Name
RRR, -- Roman Numerals
PPP, -- Compounds
GENERAL, SPECIAL, LOCAL, UNIQUE);
package DICTIONARY_KIND_IO is new TEXT_IO.ENUMERATION_IO(DICTIONARY_KIND);
EXT : array (DICTIONARY_KIND) of STRING(1..3) := ("X ", "ADD", "XXX", "YYY",
"NNN", "RRR", "PPP",
"GEN", "SPE", "LOC",
"UNI");
DEFAULT_DICTIONARY_KIND : DICTIONARY_KIND := X;
DICTIONARY_AVAILABLE : array (DICTIONARY_KIND) of BOOLEAN := (FALSE,
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, -- don't SEARCH
FALSE, FALSE, FALSE, FALSE);
-- Start out as FALSE and set to TRUE when the DICT is loaded
type AREA_TYPE is (
X, -- All or none
A, -- Agriculture, Flora, Fauna, Land, Equipment, Rural
B, -- Biological, Medical, Body Parts
D, -- Drama, Music, Theater, Art, Painting, Sculpture
E, -- Ecclesiastic, Biblical, Religious
G, -- Grammar, Retoric, Logic, Literature, Schools
L, -- Legal, Government, Tax, Financial, Political, Titles
P, -- Poetic
S, -- Science, Philosophy, Mathematics, Units/Measures
T, -- Technical, Architecture, Topography, Surveying
W, -- War, Military, Naval, Ships, Armor
Y -- Mythology
);
package AREA_TYPE_IO is new TEXT_IO.ENUMERATION_IO(AREA_TYPE);
type GEO_TYPE is (
X, -- All or none
A, -- Africa
B, -- Britian
C, -- China
D, -- Scandinavia
E, -- Egypt
F, -- France, Gaul
G, -- Germany
H, -- Greece
I, -- Italy, Rome
J, -- India
K, -- Balkans
N, -- Netherlands
P, -- Persia
Q, -- Near East
R, -- Russia
S, -- Spain, Iberia
U -- Eastern Europe
);
package GEO_TYPE_IO is new TEXT_IO.ENUMERATION_IO(GEO_TYPE);
type SOURCE_TYPE is (
X, -- General or unknown or too common to say
A,
B, -- C.H.Beeson, A Primer of Medieval Latin, 1925 (Bee)
C, -- Charles Beard, Cassell's Latin Dictionary 1892 (Cas)
D, -- J.N.Adams, Latin Sexual Vocabulary, 1982 (Sex)
E, -- L.F.Stelten, Dictionary of Eccles. Latin, 1995 (Ecc)
F, -- Roy J. Deferrari, Dictionary of St. Thomas Aquinas, 1960 (DeF)
G, -- Gildersleeve + Lodge, Latin Grammar 1895 (G+L)
H, -- Collatinus Dictionary by Yves Ouvrard
I, -- Leverett, F.P., Lexicon of the Latin Language, Boston 1845
J, -- Bracton: De Legibus Et Consuetudinibus Angliæ
K, -- Calepinus Novus, modern Latin, by Guy Licoppe (Cal)
L, -- Lewis, C.S., Elementary Latin Dictionary 1891
M, -- Latham, Revised Medieval Word List, 1980 (Latham)
N, -- Lynn Nelson, Wordlist (Nel)
O, -- Oxford Latin Dictionary, 1982 (OLD)
P, -- Souter, A Glossary of Later Latin to 600 A.D., Oxford 1949 (Souter)
Q, -- Other, cited or unspecified dictionaries
R, -- Plater + White, A Grammar of the Vulgate, Oxford 1926 (Plater)
S, -- Lewis and Short, A Latin Dictionary, 1879 (L+S)
T, -- Found in a translation -- no dictionary reference
U, --
V, -- Vademecum in opus Saxonis - Franz Blatt (Saxo)
W, -- My personal guess, mostly obvious extrapolation (Whitaker or W)
Y, -- Temp special code
Z -- Sent by user -- no dictionary reference
-- Mostly John White of Blitz Latin
-- Consulted but used only indirectly
-- Liddell + Scott Greek-English Lexicon (Lid)
-- Oxford English Dictionary 2002 (OED)
-- Consulted but used only occasionally, seperately referenced
-- D.A. Kidd, Collins Latin Gem Dictionary, 1957 (Col)
-- Allen + Greenough, New Latin Grammar, 1888 (A+G)
-- Harrington/Pucci/Elliott, Medieval Latin 2nd Ed 1997 (Harr)
-- C.C./C.L. Scanlon Latin Grammar/Second Latin, TAN 1976 (SCANLON)
-- W. M. Lindsay, Short Historical Latin Grammar, 1895 (Lindsay)
-- Du Cange
-- Oxford English Dictionary (OED)
-- Note that the WORDS dictionary is not just a copy of source info, but the
-- indicated SOURCE is a main reference/check point used to derive the entry
);
package SOURCE_TYPE_IO is new TEXT_IO.ENUMERATION_IO(SOURCE_TYPE);
type KIND_ENTRY(POFS : PART_OF_SPEECH_TYPE := X) is
record
case POFS is
when N =>
N_KIND : NOUN_KIND_TYPE := X;
when PRON =>
PRON_KIND : PRONOUN_KIND_TYPE := X;
when PACK =>
PACK_KIND : PRONOUN_KIND_TYPE := X;
when ADJ =>
null;
when NUM =>
NUM_VALUE : NUMERAL_VALUE_TYPE := 0;
when V =>
V_KIND : VERB_KIND_TYPE := X;
when VPAR =>
VPAR_KIND : VERB_KIND_TYPE := X;
when SUPINE =>
SUPINE_KIND : VERB_KIND_TYPE := X;
when others =>
null;
end case;
end record;
package KIND_ENTRY_IO is
DEFAULT_WIDTH : NATURAL;
procedure GET(F : in FILE_TYPE;
PS : in PART_OF_SPEECH_TYPE; P : out KIND_ENTRY);
procedure GET(PS : in PART_OF_SPEECH_TYPE; P : out KIND_ENTRY);
procedure PUT(F : in FILE_TYPE;
PS : in PART_OF_SPEECH_TYPE; P : in KIND_ENTRY);
procedure PUT(PS : in PART_OF_SPEECH_TYPE; P : in KIND_ENTRY);
procedure GET(S : in STRING; PS : in PART_OF_SPEECH_TYPE;
P : out KIND_ENTRY; LAST : out INTEGER);
procedure PUT(S : out STRING;
PS : in PART_OF_SPEECH_TYPE; P : in KIND_ENTRY);
end KIND_ENTRY_IO;
NULL_KIND_ENTRY : KIND_ENTRY;
type TRANSLATION_RECORD is
record
AGE : AGE_TYPE := X;
AREA : AREA_TYPE := X;
GEO : GEO_TYPE := X;
FREQ : FREQUENCY_TYPE := X;
SOURCE : SOURCE_TYPE := X;
end record;
NULL_TRANSLATION_RECORD : TRANSLATION_RECORD;
package TRANSLATION_RECORD_IO is
DEFAULT_WIDTH : TEXT_IO.FIELD;
procedure GET(F : in TEXT_IO.FILE_TYPE; TR : out TRANSLATION_RECORD);
procedure GET(TR : out TRANSLATION_RECORD);
procedure PUT(F : in TEXT_IO.FILE_TYPE; TR : in TRANSLATION_RECORD);
procedure PUT(TR : in TRANSLATION_RECORD);
procedure GET(S : in STRING; TR : out TRANSLATION_RECORD; LAST : out INTEGER);
procedure PUT(S : out STRING; TR : in TRANSLATION_RECORD);
end TRANSLATION_RECORD_IO;
type NOUN_ENTRY is
record
DECL : DECN_RECORD := (0, 0);
GENDER : GENDER_TYPE := X;
KIND : NOUN_KIND_TYPE := X;
end record;
package NOUN_ENTRY_IO is
DEFAULT_WIDTH : NATURAL;
procedure GET(F : in FILE_TYPE; N : out NOUN_ENTRY);
procedure GET(N : out NOUN_ENTRY);
procedure PUT(F : in FILE_TYPE; N : in NOUN_ENTRY);
procedure PUT(N : in NOUN_ENTRY);
procedure GET(S : in STRING; N : out NOUN_ENTRY; LAST : out INTEGER);
procedure PUT(S : out STRING; N : in NOUN_ENTRY);
end NOUN_ENTRY_IO;
type PRONOUN_ENTRY is
record
DECL : DECN_RECORD := (0,0);
KIND : PRONOUN_KIND_TYPE := X;
end record;
package PRONOUN_ENTRY_IO is
DEFAULT_WIDTH : NATURAL;
procedure GET(F : in FILE_TYPE; P : out PRONOUN_ENTRY);
procedure GET(P : out PRONOUN_ENTRY);
procedure PUT(F : in FILE_TYPE; P : in PRONOUN_ENTRY);
procedure PUT(P : in PRONOUN_ENTRY);
procedure GET(S : in STRING; P : out PRONOUN_ENTRY; LAST : out INTEGER);
procedure PUT(S : out STRING; P : in PRONOUN_ENTRY);
end PRONOUN_ENTRY_IO;
type PROPACK_ENTRY is
record
DECL : DECN_RECORD := (0,0);
KIND : PRONOUN_KIND_TYPE := X;
end record;
package PROPACK_ENTRY_IO is
DEFAULT_WIDTH : NATURAL;
procedure GET(F : in FILE_TYPE; P : out PROPACK_ENTRY);
procedure GET(P : out PROPACK_ENTRY);
procedure PUT(F : in FILE_TYPE; P : in PROPACK_ENTRY);
procedure PUT(P : in PROPACK_ENTRY);
procedure GET(S : in STRING; P : out PROPACK_ENTRY; LAST : out INTEGER);
procedure PUT(S : out STRING; P : in PROPACK_ENTRY);
end PROPACK_ENTRY_IO;
type ADJECTIVE_ENTRY is
record
DECL : DECN_RECORD := (0, 0);
CO : COMPARISON_TYPE := X;
end record;
package ADJECTIVE_ENTRY_IO is
DEFAULT_WIDTH : NATURAL;
procedure GET(F : in FILE_TYPE; A : out ADJECTIVE_ENTRY);
procedure GET(A : out ADJECTIVE_ENTRY);
procedure PUT(F : in FILE_TYPE; A : in ADJECTIVE_ENTRY);
procedure PUT(A : in ADJECTIVE_ENTRY);
procedure GET(S : in STRING; A : out ADJECTIVE_ENTRY; LAST : out INTEGER);
procedure PUT(S : out STRING; A : in ADJECTIVE_ENTRY);
end ADJECTIVE_ENTRY_IO;
type NUMERAL_ENTRY is
record
DECL : DECN_RECORD := (0,0);
SORT : NUMERAL_SORT_TYPE := X;
VALUE : NUMERAL_VALUE_TYPE := 0;
end record;
package NUMERAL_ENTRY_IO is
DEFAULT_WIDTH : NATURAL;
procedure GET(F : in FILE_TYPE; NUM : out NUMERAL_ENTRY);
procedure GET(NUM : out NUMERAL_ENTRY);
procedure PUT(F : in FILE_TYPE; NUM : in NUMERAL_ENTRY);
procedure PUT(NUM : in NUMERAL_ENTRY);
procedure GET(S : in STRING; NUM : out NUMERAL_ENTRY; LAST : out INTEGER);
procedure PUT(S : out STRING; NUM : in NUMERAL_ENTRY);
end NUMERAL_ENTRY_IO;
type ADVERB_ENTRY is
record
CO : COMPARISON_TYPE := X;
end record;
package ADVERB_ENTRY_IO is
DEFAULT_WIDTH : NATURAL;
procedure GET(F : in FILE_TYPE; A : out ADVERB_ENTRY);
procedure GET(A : out ADVERB_ENTRY);
procedure PUT(F : in FILE_TYPE; A : in ADVERB_ENTRY);
procedure PUT(A : in ADVERB_ENTRY);
procedure GET(S : in STRING; A : out ADVERB_ENTRY; LAST : out INTEGER);
procedure PUT(S : out STRING; A : in ADVERB_ENTRY);
end ADVERB_ENTRY_IO;
type VERB_ENTRY is
record
CON : DECN_RECORD := (0,0);
KIND : VERB_KIND_TYPE := X;
end record;
package VERB_ENTRY_IO is
DEFAULT_WIDTH : NATURAL;
procedure GET(F : in FILE_TYPE; V : out VERB_ENTRY);
procedure GET(V : out VERB_ENTRY);
procedure PUT(F : in FILE_TYPE; V : in VERB_ENTRY);
procedure PUT(V : in VERB_ENTRY);
procedure GET(S : in STRING; V : out VERB_ENTRY; LAST : out INTEGER);
procedure PUT(S : out STRING; V : in VERB_ENTRY);
end VERB_ENTRY_IO;
type PREPOSITION_ENTRY is
record
OBJ : CASE_TYPE := X;
end record;
package PREPOSITION_ENTRY_IO is
DEFAULT_WIDTH : NATURAL;
procedure GET(F : in FILE_TYPE; P : out PREPOSITION_ENTRY);
procedure GET(P : out PREPOSITION_ENTRY);
procedure PUT(F : in FILE_TYPE; P : in PREPOSITION_ENTRY);
procedure PUT(P : in PREPOSITION_ENTRY);
procedure GET(S : in STRING; P : out PREPOSITION_ENTRY; LAST : out INTEGER);
procedure PUT(S : out STRING; P : in PREPOSITION_ENTRY);
end PREPOSITION_ENTRY_IO;
type CONJUNCTION_ENTRY is
record
null;
end record;
package CONJUNCTION_ENTRY_IO is
DEFAULT_WIDTH : NATURAL;
procedure GET(F : in FILE_TYPE; C : out CONJUNCTION_ENTRY);
procedure GET(C : out CONJUNCTION_ENTRY);
procedure PUT(F : in FILE_TYPE; C : in CONJUNCTION_ENTRY);
procedure PUT(C : in CONJUNCTION_ENTRY);
procedure GET(S : in STRING; C : out CONJUNCTION_ENTRY; LAST : out INTEGER);
procedure PUT(S : out STRING; C : in CONJUNCTION_ENTRY);
end CONJUNCTION_ENTRY_IO;
type INTERJECTION_ENTRY is
record
null;
end record;
package INTERJECTION_ENTRY_IO is
DEFAULT_WIDTH : NATURAL;
procedure GET(F : in FILE_TYPE; I : out INTERJECTION_ENTRY);
procedure GET(I : out INTERJECTION_ENTRY);
procedure PUT(F : in FILE_TYPE; I : in INTERJECTION_ENTRY);
procedure PUT(I : in INTERJECTION_ENTRY);
procedure GET(S : in STRING; I : out INTERJECTION_ENTRY; LAST : out INTEGER);
procedure PUT(S : out STRING; I : in INTERJECTION_ENTRY);
end INTERJECTION_ENTRY_IO;
type PART_ENTRY(POFS : PART_OF_SPEECH_TYPE := X) is
record
case POFS is
when N =>
N : NOUN_ENTRY;
when PRON =>
PRON : PRONOUN_ENTRY;
when PACK =>
PACK : PROPACK_ENTRY;
when ADJ =>
ADJ : ADJECTIVE_ENTRY;
when NUM =>
NUM : NUMERAL_ENTRY;
when ADV =>
ADV : ADVERB_ENTRY;
when V =>
V : VERB_ENTRY;
when VPAR =>
null; -- There will be no VPAR dictionary entries
when SUPINE =>
null; -- There will be no SUPINE dictionary entries
when PREP =>
PREP : PREPOSITION_ENTRY;
when CONJ =>
CONJ : CONJUNCTION_ENTRY;
when INTERJ =>
INTERJ : INTERJECTION_ENTRY;
when others =>
null;
end case;
end record;
package PART_ENTRY_IO is
DEFAULT_WIDTH : NATURAL;
procedure GET(F : in FILE_TYPE; P : out PART_ENTRY);
procedure GET(P : out PART_ENTRY);
procedure PUT(F : in FILE_TYPE; P : in PART_ENTRY);
procedure PUT(P : in PART_ENTRY);
procedure GET(S : in STRING; P : out PART_ENTRY; LAST : out INTEGER);
procedure PUT(S : out STRING; P : in PART_ENTRY);
end PART_ENTRY_IO;
NULL_PART_ENTRY : PART_ENTRY;
function "<" (LEFT, RIGHT : PART_ENTRY) return BOOLEAN;
type DICTIONARY_ENTRY is
record
STEMS : STEMS_TYPE := NULL_STEMS_TYPE;
PART : PART_ENTRY := NULL_PART_ENTRY;
-- KIND : KIND_ENTRY := NULL_KIND_ENTRY;
TRAN : TRANSLATION_RECORD := NULL_TRANSLATION_RECORD;
MEAN : MEANING_TYPE := NULL_MEANING_TYPE;
end record;
package DICTIONARY_ENTRY_IO is
DEFAULT_WIDTH : FIELD;
procedure GET(F : in FILE_TYPE; D : out DICTIONARY_ENTRY);
procedure GET(D : out DICTIONARY_ENTRY);
procedure PUT(F : in FILE_TYPE; D : in DICTIONARY_ENTRY);
procedure PUT(D : in DICTIONARY_ENTRY);
procedure GET(S : in STRING; D : out DICTIONARY_ENTRY; LAST : out INTEGER);
procedure PUT(S : out STRING; D : in DICTIONARY_ENTRY);
end DICTIONARY_ENTRY_IO;
NULL_DICTIONARY_ENTRY : DICTIONARY_ENTRY;
package DICT_IO is new DIRECT_IO(DICTIONARY_ENTRY);
DICT_FILE : array (DICTIONARY_KIND) of DICT_IO.FILE_TYPE;
package MNPC_IO is new TEXT_IO.INTEGER_IO(DICT_IO.COUNT);
subtype MNPC_TYPE is DICT_IO.COUNT;
NULL_MNPC : DICT_IO.COUNT := DICT_IO.COUNT'FIRST;
type PARSE_RECORD is
record
STEM : STEM_TYPE := NULL_STEM_TYPE;
IR : INFLECTION_RECORD := NULL_INFLECTION_RECORD;
D_K : DICTIONARY_KIND := DEFAULT_DICTIONARY_KIND;
MNPC : DICT_IO.COUNT := NULL_MNPC;
end record;
NULL_PARSE_RECORD : PARSE_RECORD;
package PARSE_RECORD_IO is
DEFAULT_WIDTH : TEXT_IO.FIELD;
procedure GET(F : in TEXT_IO.FILE_TYPE; PR : out PARSE_RECORD);
procedure GET(PR : out PARSE_RECORD);
procedure PUT(F : in TEXT_IO.FILE_TYPE; PR : in PARSE_RECORD);
procedure PUT(PR : in PARSE_RECORD);
procedure GET(S : in STRING; PR : out PARSE_RECORD; LAST : out INTEGER);
procedure PUT(S : out STRING; PR : in PARSE_RECORD);
end PARSE_RECORD_IO;
type PARSE_ARRAY is array (INTEGER range <>) of PARSE_RECORD;
function NUMBER_OF_STEMS(P : PART_OF_SPEECH_TYPE) return STEM_KEY_TYPE;
function "<=" (LEFT, RIGHT : AREA_TYPE) return BOOLEAN;
end DICTIONARY_PACKAGE;