// ----------------------------------------------------------------------------------------
        /// <!-- Show_complex -->
        /// <summary>
        ///      Returns a string displaying the endeme in the specified width
        /// </summary>
        /// <remarks>
        ///      112-2334-4556-6778-7654-321
        ///         1    3    5    4    2
        /// </remarks>
        /// <param name="width"></param>
        /// <param name="divs"></param>
        /// <param name="divider"></param>
        /// <returns></returns>
        public static string Show_complex(Endeme en, int width, int divs, string divider)
        {
            // --------------------------------------------------------------------------
            //  Handle some error conditions
            // --------------------------------------------------------------------------
            if (width <= 0)
            {
                return("");
            }
            if (en.IsEmpty)
            {
                return(divider.PadRight(divs, divider.ToCharArray()[0]).PadRight(width));
            }
            if (divs >= width)
            {
                return("".PadRight(width, divider.ToCharArray()[0]));
            }


            // --------------------------------------------------------------------------
            //  Calculate how many characteristics to show
            // --------------------------------------------------------------------------
            divs = Math.Min(5, divs);
            int num = width - divs * divider.Length;

            if (en.EnSet == null)
            {
                num = Math.Min(num, en.Count);
            }
            else
            {
                num = Math.Min(num, en.EnSet.Count);
            }


            // --------------------------------------------------------------------------
            //  Remove characters from the endeme string as necessary to format
            // --------------------------------------------------------------------------
            if (width <= 8)
            {
                return(EndemeTextFormat.Show_positive(en, width, divs, num, divider));
            }
            if (num < en.ToString().Length)
            {
                return(EndemeTextFormat.Show_partial(en, width, divs, num, divider));
            }
            else
            {
                return(EndemeTextFormat.Show_perfect(en, width, divs, num, divider));
            }
        }
        // ----------------------------------------------------------------------------------------
        /// <!-- Show() -->
        /// <summary>
        ///      Returns a string displaying the N most important characteristics etc
        /// </summary>
        /// <param name="num"></param>
        /// <param name="width"></param>
        /// <param name="wordLen"></param>
        /// <returns></returns>
        /// <remarks>
        ///      Deprecated
        /// </remarks>
        public static string Show(Endeme en, int num, int width, string divider, int wordLen, string delim)
        {
            if (num > width)
            {
                num = width;
            }
            string        str     = "";
            string        pattern = "";
            string        replace = "";
            StringBuilder letters = new StringBuilder();


            if (en.IsEmpty)
            {
                str = "";
            }
            else
            {
                str = en.ToString(); // new string(_string.ToArray());
                num = Math.Max(Math.Min(str.Length, num), 0);
                switch (width - num)
                {
                case 0:
                    letters = new StringBuilder(str);
                    break;

                case 1:
                case 2:
                    if (num > 5)
                    {
                        letters.Append(Regex.Replace(str, "^(...)(..)", "$1-$2"));
                    }
                    else
                    {
                        letters.Append(EndemeTextFormat.SetLength(num, str));
                    }
                    break;

                case 3:
                    switch (num)
                    {
                    case  0: pattern = "^.*$"; replace = ""; break;

                    case  1: pattern = "^(.).*$"; replace = "$1"; break;

                    case  2: pattern = "^(..).*$"; replace = "$1"; break;

                    case  3: pattern = "^(...).*$"; replace = "$1"; break;

                    case  4: pattern = "^(....).*$"; replace = "$1"; break;

                    case  5: pattern = "^(...)(..).*$"; replace = "$1-$2"; break;

                    case  6: pattern = "^(...)(...).*$"; replace = "$1-$2"; break;

                    case  7: pattern = "^(...)(....).*$"; replace = "$1-$2"; break;

                    case  8: pattern = "^(...)(.....).*$"; replace = "$1-$2"; break;

                    case  9: pattern = "^(...)(...).*(...)$"; replace = "$1-$2--$3"; break;

                    case 10: pattern = "^(...)(....).*(...)$"; replace = "$1-$2--$3"; break;

                    case 11: pattern = "^(...)(.....).*(...)$"; replace = "$1-$2--$3"; break;

                    case 12: pattern = "^(...)(....)(..).*(...)$"; replace = "$1-$2-$3-$4"; break;

                    case 13: pattern = "^(...)(....)(...).*(...)$"; replace = "$1-$2-$3-$4"; break;

                    case 14: pattern = "^(...)(....)(....).*(...)$"; replace = "$1-$2-$3-$4"; break;

                    case 15: pattern = "^(...)(....)(....).*(....)$"; replace = "$1-$2-$3-$4"; break;

                    case 16: pattern = "^(...)(....)(....).*(.....)$"; replace = "$1-$2-$3-$4"; break;

                    case 17: pattern = "^(...)(....)(....).*(......)$"; replace = "$1-$2-$3-$4"; break;

                    case 18: pattern = "^(...)(....)(....).*(.......)$"; replace = "$1-$2-$3-$4"; break;

                    case 19: pattern = "^(...)(....)(....).*(........)$"; replace = "$1-$2-$3-$4"; break;

                    case 20: pattern = "^(...)(....)(......).*(.......)$"; replace = "$1-$2-$3-$4"; break;

                    case 21: pattern = "^(...)(....)(.......).*(.......)$"; replace = "$1-$2-$3-$4"; break;

                    case 22: pattern = "^(...)(....)(........).*(.......)$"; replace = "$1-$2-$3-$4"; break;

                    default: pattern = "^(...)(....)(.......*)(.......)$"; replace = "$1-$2-$3-$4"; break;
                    }
                    letters.Append(Regex.Replace(str, pattern, replace));
                    break;

                //  case 4 :
                //      switch(num)
                //      {
                //          case  0 : pattern = "^.*$"                                  ; replace = ""              ; break;
                //          case  1 : pattern = "^(.).*$"                               ; replace = "$1"            ; break;
                //          case  2 : pattern = "^(..).*$"                              ; replace = "$1"            ; break;
                //          case  3 : pattern = "^(...).*$"                             ; replace = "$1"            ; break;
                //          case  4 : pattern = "^(....).*$"                            ; replace = "$1"            ; break;
                //          case  5 : pattern = "^(...)(..).*$"                         ; replace = "$1-$2"         ; break;
                //          case  6 : pattern = "^(...)(...).*$"                        ; replace = "$1-$2"         ; break;
                //          case  7 : pattern = "^(...)(....).*$"                       ; replace = "$1-$2"         ; break;
                //          case  8 : pattern = "^(...)(.....).*$"                      ; replace = "$1-$2"         ; break;
                //          case  9 : pattern = "^(...)(...).*(...)$"                   ; replace = "$1-$2---$3"    ; break;
                //          case 10 : pattern = "^(...)(....).*(...)$"                  ; replace = "$1-$2---$3"    ; break;
                ///* TAG */ case 11 : pattern = "^(...)(.....).*(...)$"                 ; replace = "$1-$2---$3"    ; break;
                //          case 12 : pattern = "^(...)(....)(..).*(...)$"              ; replace = "$1-$2-$3--$4"  ; break;
                //          case 13 : pattern = "^(...)(....)(...).*(...)$"             ; replace = "$1-$2-$3--$4"  ; break;
                //          case 14 : pattern = "^(...)(....)(....).*(...)$"            ; replace = "$1-$2-$3--$4"  ; break;
                //          case 15 : pattern = "^(...)(....)(....).*(....)$"           ; replace = "$1-$2-$3--$4"  ; break;
                //          case 16 : pattern = "^(...)(....)(....).*(.....)$"          ; replace = "$1-$2-$3--$4"  ; break;
                //          case 17 : pattern = "^(...)(....)(....).*(......)$"         ; replace = "$1-$2-$3--$4"  ; break;
                //          case 18 : pattern = "^(...)(....)(....).*(.......)$"        ; replace = "$1-$2-$3--$4"  ; break;
                //          case 19 : pattern = "^(...)(....)(....).*(........)$"       ; replace = "$1-$2-$3--$4"  ; break;
                //          case 20 : pattern = "^(...)(....)(......).*(....)(...)$"    ; replace = "$1-$2-$3-$4-$5"; break;
                //          case 21 : pattern = "^(...)(....)(.......).*(....)(...)$"   ; replace = "$1-$2-$3-$4-$5"; break;
                //          case 22 : pattern = "^(...)(....)(........).*(....)(...)$"  ; replace = "$1-$2-$3-$4-$5"; break;
                //          default : pattern = "^(...)(....)(.......*)(....)(...)$"    ; replace = "$1-$2-$3-$4-$5"; break;
                //      }
                //      letters.Append(Regex.Replace(str, pattern, replace));
                //      break;
                case 5:
                case 6:
                case 7:
                case 8:
                case 9:
                case 10:
                    switch (num)
                    {
                    case  0: pattern = "^.*$"; replace = ""; break;

                    case  1: pattern = "^(.).*$"; replace = "$1"; break;

                    case  2: pattern = "^(..).*$"; replace = "$1"; break;

                    case  3: pattern = "^(...).*$"; replace = "$1"; break;

                    case  4: pattern = "^(....).*$"; replace = "$1"; break;

                    case  5: pattern = "^(...)(..).*$"; replace = "$1-$2"; break;

                    case  6: pattern = "^(...)(...).*$"; replace = "$1-$2"; break;

                    case  7: pattern = "^(...)(....).*$"; replace = "$1-$2"; break;

                    case  8: pattern = "^(...)(.....).*$"; replace = "$1-$2"; break;

                    case  9: pattern = "^(...)(...).*(...)$"; replace = "$1-$2----$3"; break;

                    case 10: pattern = "^(...)(....).*(...)$"; replace = "$1-$2----$3"; break;

                    case 11: pattern = "^(...)(.....).*(...)$"; replace = "$1-$2----$3"; break;

                    case 12: pattern = "^(...)(....)(..).*(...)$"; replace = "$1-$2-$3---$4"; break;

                    case 13: pattern = "^(...)(....)(...).*(...)$"; replace = "$1-$2-$3---$4"; break;

                    case 14: pattern = "^(...)(....)(....).*(...)$"; replace = "$1-$2-$3---$4"; break;

                    case 15: pattern = "^(...)(....)(....).*(....)$"; replace = "$1-$2-$3---$4"; break;

                    case 16: pattern = "^(...)(....)(....).*(..)(...)$"; replace = "$1-$2-$3--$4-$5"; break;

                    case 17: pattern = "^(...)(....)(....).*(...)(...)$"; replace = "$1-$2-$3--$4-$5"; break;

                    case 18: pattern = "^(...)(....)(....).*(....)(...)$"; replace = "$1-$2-$3--$4-$5"; break;

                    case 19: pattern = "^(...)(....)(....).*(.....)(...)$"; replace = "$1-$2-$3--$4-$5"; break;

                    case 20: pattern = "^(...)(....)(....)(..).*(....)(...)$"; replace = "$1-$2-$3-$4-$5-$6"; break;

                    case 21: pattern = "^(...)(....)(....)(...).*(....)(...)$"; replace = "$1-$2-$3-$4-$5-$6"; break;

                    case 22: pattern = "^(...)(....)(....)(....).*(....)(...)$"; replace = "$1-$2-$3-$4-$5-$6"; break;

                    default: pattern = "^(...)(....)(....)(...*)(....)(...)$"; replace = "$1-$2-$3-$4-$5-$6"; break;
                    }
                    letters.Append(Regex.Replace(str, pattern, replace));
                    break;

                case 4:
                default:
                    switch (num)
                    {
                    case  0: pattern = "^.*$"; replace = ""; break;

                    case  1: pattern = "^(.).*$"; replace = "$1"; break;

                    case  2: pattern = "^(..).*$"; replace = "$1"; break;

                    case  3: pattern = "^(...).*$"; replace = "$1"; break;

                    case  4: pattern = "^(....).*$"; replace = "$1"; break;

                    case  5: pattern = "^(...)(..).*$"; replace = "$1-$2"; break;

                    case  6: pattern = "^(...)(...).*$"; replace = "$1-$2"; break;

                    case  7: pattern = "^(...)(....).*$"; replace = "$1-$2"; break;

                    case  8: pattern = "^(...)(.....).*$"; replace = "$1-$2"; break;

                    case  9: pattern = "^(...)(...).*(...)$"; replace = "$1-$2--$3"; break;

                    case 10: pattern = "^(...)(....).*(...)$"; replace = "$1-$2--$3"; break;

                    /* TAG */         case 11: pattern = "^(...)(.....).*(...)$"; replace = "$1-$2--$3"; break;

                    case 12: pattern = "^(...)(....)(..).*(...)$"; replace = "$1-$2-$3--$4"; break;

                    case 13: pattern = "^(...)(....)(...).*(...)$"; replace = "$1-$2-$3--$4"; break;

                    case 14: pattern = "^(...)(....)(....).*(...)$"; replace = "$1-$2-$3--$4"; break;

                    case 15: pattern = "^(...)(....)(....).*(....)$"; replace = "$1-$2-$3--$4"; break;

                    case 16: pattern = "^(...)(....)(....).*(.....)$"; replace = "$1-$2-$3--$4"; break;

                    case 17: pattern = "^(...)(....)(....).*(......)$"; replace = "$1-$2-$3--$4"; break;

                    case 18: pattern = "^(...)(....)(....).*(.......)$"; replace = "$1-$2-$3--$4"; break;

                    case 19: pattern = "^(...)(....)(....).*(........)$"; replace = "$1-$2-$3--$4"; break;

                    case 20: pattern = "^(...)(....)(......).*(....)(...)$"; replace = "$1-$2-$3-$4-$5"; break;

                    case 21: pattern = "^(...)(....)(.......).*(....)(...)$"; replace = "$1-$2-$3-$4-$5"; break;

                    case 22: pattern = "^(...)(....)(........).*(....)(...)$"; replace = "$1-$2-$3-$4-$5"; break;

                    default: pattern = "^(...)(....)(.......*)(....)(...)$"; replace = "$1-$2-$3-$4-$5"; break;
                    }
                    letters.Append(Regex.Replace(str, pattern, replace));
                    break;
                }
            }


            // -------------------------------------------------------------------------
            //  Add some words if there is room
            // -------------------------------------------------------------------------
            if (en.EnSet != null && width > letters.Length + 5)
            {
                string d = divider;
                for (int i = 0; i < en.Count && i < 7; ++i)
                {
                    letters.Append(d + EndemeTextFormat.SetLength(wordLen, en.EnSet.Characteristic[en[i]].Label));
                    d = delim;
                }
                d = divider;
                for (int i = Math.Max(0, en.Count - 3); i < en.Count; ++i)
                {
                    char   ch    = en[i];
                    string addme = en.EnSet.Characteristic[ch].Label;
                    addme = Regex.Replace(addme, "^.* vs ", "-");
                    letters.Append(d + EndemeTextFormat.SetLength(wordLen, addme));
                    d = delim;
                }
                d = divider;
                for (int i = 7; i < en.Count - 3; ++i)
                {
                    letters.Append(d + EndemeTextFormat.SetLength(wordLen, en.EnSet.Characteristic[en[i]].Label));
                    d = delim;
                }
            }
            return(EndemeTextFormat.SetLength(width, letters.ToString()));
        }