::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:
method LOAD.DICTIONARY:  Read and map dictionary file of words.

  exit Map..Heap..string     :Dictionary map from number -> {code, ...}

 entry Path       string     :Dictionary file path

 local Line       word,                    &Current line in the dictionary file
       Digit      string,                  &Numeric code word representation
      *Key        Key..Heap..string,       &Current number entry in the mapping
       Code.Max |= 50,                     &Maximum code word width
       Line.Max |= 75_000,                 &Maximum number of code words
       Map |= "57630499617851881234762239" :Map letters to digits

 alter Phonecode/Short                     :On exit, the shortest word size
:
:...............................................................................


DO Code  from Read.Text( Path ):           DO over the dictionary file,
   assert Line < Line.Max                    &ERROR:  Too many code words in
          pass "limit = " ! form( Line )           :  the dictionary file.

   Line += 1;                                 Current line number
   Digit = "";                                Begin building encodings.

   assert  Is.Alpha( byte{ Code })           &ERROR:  A code word does not
           pass "line " ! form( Line )             :  begin with a letter.

   DO C  in  lower( Code ):                   DO over code word characters,
      IF C ~= '-' | '"':                         IF not skipping a delimiter,
         assert  Is.Alpha( C )                     &ERROR:  A code word has an
                 pass "line " ! form( Line )             :  invalid character.

         Digit != string( Map, C - 'a' + 1 );       Map and build up digits.
   -  .

   PUT.AT  $, Digit, @Key;                    Map a digital code to the word.
   PILE    Key`Tag, Code;                     Same digits map to multiple words.

   IF Short:                                  IF previously established,
      Short = min( Short, length( Digit ));      Reset if smaller

   ELSE:                                      ELSE first iteration,
      Short = length( Digit );                   Initial minimum width
-  .

return