Beispiel #1
0
 public nest_tables()
 {
     this.td_width           = new int[this.MAX_COLUMNS];
     this.td_percent_width   = new int[this.MAX_COLUMNS];
     this.tdAlignColgroup    = new byte[this.MAX_COLUMNS];
     this.table_p            = new table_params();
     this.nestTblDescription = "";
 }
 public nest_tables()
 {
     this.td_width = new int[this.MAX_COLUMNS];
     this.td_percent_width = new int[this.MAX_COLUMNS];
     this.tdAlignColgroup = new byte[this.MAX_COLUMNS];
     this.table_p = new table_params();
     this.nestTblDescription = "";
 }
 private void TableTrace(int[,] table, table_params table_p, string message)
 {
     StreamWriter writer = new StreamWriter(@"d:\trace.txt", true);
     writer.WriteLine(message);
     for (int i = 0; i < table_p.rows; i++)
     {
         for (int j = 0; j < (table_p.cols + 1); j++)
         {
             writer.Write(table[i, j].ToString() + " ");
         }
         writer.WriteLine();
     }
     writer.Close();
 }
 private void TableSpecifyCols(int[,] table_array, int[,] table_rowspan, int[,] table_colspan, table_params table_p)
 {
     int num2;
     int num3;
     bool flag = false;
     int num6 = 1;
     for (num2 = 0; num2 < table_p.rows; num2++)
     {
         for (num3 = 1; num3 < (table_array[num2, 0] + 1); num3++)
         {
             if (num6 < table_colspan[num2, num3])
             {
                 num6 = table_colspan[num2, num3];
             }
         }
     }
     for (int i = 1; i <= num6; i++)
     {
         int num7 = 0;
         num2 = 0;
         flag = false;
         while (num2 < table_p.rows)
         {
             for (num3 = 1; num3 < (table_array[num2, 0] + 1); num3++)
             {
                 if (i == table_colspan[num2, num3])
                 {
                     if (num7 < table_array[num2, num3])
                     {
                         if (i == num3)
                         {
                             num7 = table_array[num2, num3];
                         }
                         else if ((num3 > 1) && (i > 1))
                         {
                             for (int j = 1; (j < (table_rowspan[num2, num3] + 1)) && ((num2 + j) < table_p.rows); j++)
                             {
                                 int num;
                                 int num8;
                                 if ((table_colspan[num2, num3] - table_colspan[num2, num3 - 1]) == 1)
                                 {
                                     num8 = table_colspan[num2, num3];
                                 }
                                 else
                                 {
                                     num8 = table_colspan[num2, num3] - table_colspan[num2, num3 - 1];
                                 }
                                 int num9 = i;
                                 bool flag2 = false;
                                 bool flag3 = false;
                                 for (num = 1; num < (table_colspan[num2 + j, 0] + 1); num++)
                                 {
                                     if ((table_colspan[num2 + j, num] == num8) && !flag2)
                                     {
                                         num8 = num;
                                         flag2 = true;
                                     }
                                     if ((table_colspan[num2 + j, num] == num9) && !flag3)
                                     {
                                         num9 = num;
                                         flag3 = true;
                                     }
                                 }
                                 if (flag2 && flag3)
                                 {
                                     int num10 = 0;
                                     int num11 = 0;
                                     for (num = num8; num <= num9; num++)
                                     {
                                         if (table_array[num2 + j, num] == 0)
                                         {
                                             num10++;
                                         }
                                         num11 += table_array[num2 + j, num];
                                     }
                                     if ((num10 > 0) && ((num9 - num8) >= 0))
                                     {
                                         if (table_array[num2, num3] > num11)
                                         {
                                             num11 = (table_array[num2, num3] - num11) / num10;
                                             for (num = num8; num <= num9; num++)
                                             {
                                                 if (table_array[num2 + j, num] == 0)
                                                 {
                                                     table_array[num2 + j, num] = num11;
                                                 }
                                             }
                                         }
                                         else
                                         {
                                             if ((num9 - num8) == 0)
                                             {
                                                 num11 = table_array[num2, num3];
                                             }
                                             else
                                             {
                                                 num11 = table_array[num2, num3] / (num9 - num8);
                                             }
                                             for (num = num8; num <= num9; num++)
                                             {
                                                 table_array[num2 + j, num] = num11;
                                             }
                                         }
                                     }
                                 }
                             }
                         }
                     }
                     if (table_array[num2, num3] == 0)
                     {
                         flag = true;
                     }
                 }
             }
             num2++;
         }
         if ((num7 > 0) && flag)
         {
             for (num2 = 0; num2 < table_p.rows; num2++)
             {
                 for (num3 = 1; num3 < (table_array[num2, 0] + 1); num3++)
                 {
                     if ((i == table_colspan[num2, num3]) && (table_array[num2, num3] == 0))
                     {
                         table_array[num2, num3] = num7;
                     }
                 }
             }
         }
     }
 }
 private int table_translate(int num, table_params table_p, int percent_w)
 {
     int num2 = 0;
     if (table_p.table_width < 1)
     {
         if (table_p.percent_width == 1)
         {
             table_p.table_width = 100;
         }
         else
         {
             table_p.table_width = this.SCREEN_W_DEF;
         }
     }
     if (table_p.percent_width == 0)
     {
         if (percent_w != 0)
         {
             return ((num * this.TBLEN) / 100);
         }
         num2 = (num * this.TBLEN) / table_p.table_width;
         if (num2 > this.TBLEN)
         {
             num2 = this.TBLEN - 100;
         }
         return num2;
     }
     if (percent_w != 0)
     {
         return ((num * this.TBLEN) / 100);
     }
     return ((num * this.TBLEN) / this.SCREEN_W_DEF);
 }
 private void table_sort(int[,] table_array, table_params table_p)
 {
     for (int i = 0; i < table_p.rows; i++)
     {
         int num5 = table_array[i, 0];
         for (int j = 1; j < (table_p.cols + 1); j++)
         {
             int num;
             int num4 = table_array[i, j];
             for (num = 0; num < table_p.rows; num++)
             {
                 if ((num4 < table_array[num, j]) && (table_array[num, 0] == num5))
                 {
                     num4 = table_array[num, j];
                 }
             }
             for (num = 0; num < table_p.rows; num++)
             {
                 if (table_array[num, 0] == num5)
                 {
                     table_array[num, j] = num4;
                 }
             }
         }
     }
 }
 private table_types table_getsize(ByteClass buf, int posStartBuf, int max, table_params table_p)
 {
     table_types _types = table_types.TABLE_UNCLOSED;
     int index = posStartBuf;
     int num2 = 0;
     table_p.rows = 0;
     table_p.cols = 0;
     int num3 = 1;
     int percent = 0;
     int colspan = 0;
     int rowspan = 0;
     int num7 = 0;
     bool flag = false;
     bool flag2 = false;
     index++;
     while (index < max)
     {
         if ((((((buf.b[index] == 60) && (buf.b[index + 1] == 0x2f)) && ((buf.b[index + 2] == 0x74) || (buf.b[index + 2] == 0x54))) && ((buf.b[index + 3] == 0x61) || (buf.b[index + 3] == 0x41))) && (((buf.b[index + 4] == 0x62) || (buf.b[index + 4] == 0x42)) && ((buf.b[index + 5] == 0x6c) || (buf.b[index + 5] == 0x4c)))) && (((buf.b[index + 6] == 0x65) || (buf.b[index + 6] == 0x45)) && (buf.b[index + 7] == 0x3e)))
         {
             _types = table_types.TABLE_NORMAL;
             break;
         }
         if (((((buf.b[index] == 60) && ((buf.b[index + 1] == 0x74) || (buf.b[index + 1] == 0x54))) && ((buf.b[index + 2] == 0x61) || (buf.b[index + 2] == 0x41))) && (((buf.b[index + 3] == 0x62) || (buf.b[index + 3] == 0x42)) && ((buf.b[index + 4] == 0x6c) || (buf.b[index + 4] == 0x4c)))) && (((buf.b[index + 5] == 0x65) || (buf.b[index + 5] == 0x45)) && ((buf.b[index + 6] == 0x3e) || this.IS_DELIMITER(buf.b[index + 6]))))
         {
             index += 6;
             num3++;
             while ((num3 > 1) && (index < max))
             {
                 if ((((((buf.b[index] == 60) && (buf.b[index + 1] == 0x2f)) && ((buf.b[index + 2] == 0x74) || (buf.b[index + 2] == 0x54))) && ((buf.b[index + 3] == 0x61) || (buf.b[index + 3] == 0x41))) && (((buf.b[index + 4] == 0x62) || (buf.b[index + 4] == 0x42)) && ((buf.b[index + 5] == 0x6c) || (buf.b[index + 5] == 0x4c)))) && (((buf.b[index + 6] == 0x65) || (buf.b[index + 6] == 0x45)) && (buf.b[index + 7] == 0x3e)))
                 {
                     num3--;
                     index += 6;
                 }
                 else if (((((buf.b[index] == 60) && ((buf.b[index + 1] == 0x74) || (buf.b[index + 1] == 0x54))) && ((buf.b[index + 2] == 0x61) || (buf.b[index + 2] == 0x41))) && (((buf.b[index + 3] == 0x62) || (buf.b[index + 3] == 0x42)) && ((buf.b[index + 4] == 0x6c) || (buf.b[index + 4] == 0x4c)))) && (((buf.b[index + 5] == 0x65) || (buf.b[index + 5] == 0x45)) && ((buf.b[index + 6] == 0x3e) || this.IS_DELIMITER(buf.b[index + 6]))))
                 {
                     num3++;
                 }
                 index++;
             }
         }
         if (((((buf.b[index] == 60) && ((buf.b[index + 1] == 0x74) || (buf.b[index + 1] == 0x54))) && ((buf.b[index + 2] == 0x68) || (buf.b[index + 2] == 0x48))) && (((buf.b[index + 3] == 0x65) || (buf.b[index + 3] == 0x45)) && ((buf.b[index + 4] == 0x61) || (buf.b[index + 4] == 0x41)))) && (((buf.b[index + 5] == 100) || (buf.b[index + 5] == 0x44)) && (buf.b[index + 6] == 0x3e)))
         {
             table_p.rows++;
             if (num2 < (table_p.cols + num7))
             {
                 num2 = table_p.cols + num7;
             }
             table_p.cols = 0;
             num7 = 0;
             flag = true;
             index += 6;
         }
         else if ((((((buf.b[index] == 60) && (buf.b[index + 1] == 0x2f)) && ((buf.b[index + 2] == 0x74) || (buf.b[index + 2] == 0x54))) && ((buf.b[index + 3] == 0x68) || (buf.b[index + 3] == 0x48))) && (((buf.b[index + 4] == 0x65) || (buf.b[index + 4] == 0x45)) && ((buf.b[index + 5] == 0x61) || (buf.b[index + 5] == 0x41)))) && (((buf.b[index + 6] == 100) || (buf.b[index + 6] == 0x44)) && (buf.b[index + 7] == 0x3e)))
         {
             index += 7;
             flag = false;
         }
         else
         {
             if ((((buf.b[index] == 60) && ((buf.b[index + 1] == 0x74) || (buf.b[index + 1] == 0x54))) && ((buf.b[index + 2] == 0x72) || (buf.b[index + 2] == 0x52))) && ((buf.b[index + 3] == 0x3e) || this.IS_DELIMITER(buf.b[index + 3])))
             {
                 if (flag && (table_p.cols == 0))
                 {
                     flag2 = true;
                     flag = false;
                     goto Label_077A;
                 }
                 table_p.rows++;
                 if (num2 < (table_p.cols + num7))
                 {
                     num2 = table_p.cols + num7;
                 }
                 table_p.cols = 0;
                 num7 = 0;
                 flag = false;
                 flag2 = true;
             }
             if (((((buf.b[index] == 60) && (buf.b[index + 1] == 0x2f)) && ((buf.b[index + 2] == 0x74) || (buf.b[index + 2] == 0x54))) && ((buf.b[index + 3] == 0x72) || (buf.b[index + 3] == 0x52))) && (buf.b[index + 4] == 0x3e))
             {
                 index += 4;
                 if (!flag2 && (table_p.cols > 0))
                 {
                     table_p.rows++;
                     if (num2 < (table_p.cols + num7))
                     {
                         num2 = table_p.cols + num7;
                     }
                     table_p.cols = 0;
                     num7 = 0;
                 }
                 flag2 = false;
             }
             else
             {
                 if ((((buf.b[index] == 60) && ((buf.b[index + 1] == 0x74) || (buf.b[index + 1] == 0x54))) && (((buf.b[index + 2] == 100) || (buf.b[index + 2] == 0x44)) || ((buf.b[index + 2] == 0x68) || (buf.b[index + 2] == 0x48)))) && ((buf.b[index + 3] == 0x3e) || this.IS_DELIMITER(buf.b[index + 3])))
                 {
                     colspan = 0;
                     int num8 = -1111;
                     this.get_width(buf, index, max, ref percent, ref colspan, ref rowspan, null, num8, ref num8, null, ref num8, ref num8);
                     if (colspan > 1)
                     {
                         num7 += colspan - 1;
                     }
                     table_p.cols++;
                 }
                 if (buf.b[index] == 60)
                 {
                     while ((index < max) && (buf.b[index] != 0x3e))
                     {
                         index++;
                     }
                 }
             }
         }
     Label_077A:
         index++;
     }
     if (num2 > table_p.cols)
     {
         table_p.cols = num2;
     }
     return _types;
 }
 private void table_clear(int[,] table_array, table_params table_p, int num)
 {
     for (int i = 0; i < table_p.rows; i++)
     {
         for (int j = 0; j < (table_p.cols + 1); j++)
         {
             table_array[i, j] = num;
         }
     }
 }
 private void table_check_width(int[,] table_array, int[,] table_symbols, int[,] table_images, int[,] nested_level, int[,] table_colspan, table_params table_p, int[] row_nulls, int[] rows_empty, bool use_rows_empty)
 {
     int num;
     int num5;
     int num9 = 1;
     int num10 = 1;
     for (num = 0; num < table_p.rows; num++)
     {
         int num3;
         int num7 = 0;
         num5 = 0;
         for (num3 = 1; num3 < (table_array[num, 0] + 1); num3++)
         {
             if ((table_array[num, num3] >= this.TBLEN) && (table_array[num, 0] != 1))
             {
                 num7++;
             }
             else
             {
                 num5 += table_array[num, num3];
             }
         }
         if (num7 > 0)
         {
             int num8 = (this.TBLEN - num5) / num7;
             if (num8 <= 0)
             {
                 num8 = 1;
             }
             for (num3 = 1; num3 < (table_array[num, 0] + 1); num3++)
             {
                 if ((table_array[num, num3] >= this.TBLEN) && (table_array[num, 0] != 1))
                 {
                     table_array[num, num3] = num8;
                 }
             }
         }
     }
     for (int i = 0; i < table_p.rows; i++)
     {
         int num4 = 0;
         num5 = 0;
         for (num = 1; num < (table_array[i, 0] + 1); num++)
         {
             if (table_array[i, num] == 0)
             {
                 num4++;
             }
             num5 += table_array[i, num];
         }
         if (use_rows_empty)
         {
             rows_empty[i] = 0;
             rows_empty[i] = num4;
         }
         if (num4 == table_array[i, 0])
         {
             row_nulls[table_array[i, 0]] = 1;
         }
         if (num4 > 0)
         {
             int num6;
             if (num5 < this.TBLEN)
             {
                 num6 = (this.TBLEN - num5) / num4;
             }
             else
             {
                 num6 = (num5 - this.TBLEN) / num4;
             }
             for (num = 1; num < (table_array[i, 0] + 1); num++)
             {
                 if (table_array[i, num] == 0)
                 {
                     num9 = table_colspan[i, num];
                     if (num > 1)
                     {
                         num9 = table_colspan[i, num] - table_colspan[i, num - 1];
                     }
                     num10 = this.TBLEN / table_p.cols;
                     num10 *= num9;
                     if (((table_images[i, num] == 0) && (table_symbols[i, num] == 0)) && (table_array[i, num] == 0))
                     {
                         table_array[i, num] = 1;
                     }
                     else if ((table_images[i, num] > 0) && (table_symbols[i, num] == 0))
                     {
                         table_array[i, num] = table_images[i, num];
                     }
                     else if (table_images[i, num] > 0)
                     {
                         if (num10 < table_images[i, num])
                         {
                             table_array[i, num] = table_images[i, num];
                         }
                         else
                         {
                             table_array[i, num] = num10;
                         }
                     }
                 }
             }
             num4 = 0;
             num9 = 1;
             num5 = 0;
             for (num = 1; num < (table_array[i, 0] + 1); num++)
             {
                 if (table_array[i, num] == 0)
                 {
                     num4++;
                     if (num > 1)
                     {
                         num9 += table_colspan[i, num] - table_colspan[i, num - 1];
                     }
                 }
                 num5 += table_array[i, num];
             }
             if (num4 > 0)
             {
                 if (num5 < this.TBLEN)
                 {
                     num6 = (this.TBLEN - num5) / num4;
                     num10 = (this.TBLEN - num5) / num9;
                 }
                 else
                 {
                     num6 = (num5 - this.TBLEN) / num4;
                     num10 = (num5 - this.TBLEN) / num9;
                 }
                 for (num = 1; num < (table_array[i, 0] + 1); num++)
                 {
                     if (table_array[i, num] == 0)
                     {
                         num9 = table_colspan[i, num];
                         if (num > 1)
                         {
                             num9 = table_colspan[i, num] - table_colspan[i, num - 1];
                         }
                         num6 = num10 * num9;
                         table_array[i, num] = num6;
                     }
                 }
             }
         }
     }
 }
 private void table_analyse(ByteClass buf, int posStartBuf, int max, int[,] table_array, int[,] table_symbols, int[,] table_map, int[,] table_colspan, int[,] table_rowspan, int[,] table_images, int[,] table_width, int[,] table_colbg, int[,] table_valign, CSS_params CSS_param, table_params table_p, ArrayList color_list, int color_list_num, ByteClass img_folder, int TBLEN_MAX, bool hieroglyph, byte[] tdAlignColgroup)
 {
     int num;
     int num2;
     int num11;
     int num16;
     int num17;
     int num18;
     int[,] numArray8;
     IntPtr ptr;
     bool flag = true;
     int index = posStartBuf;
     int percent = 0;
     int num5 = 0;
     int num6 = 0;
     int colspan = 0;
     int rowspan = 0;
     int num9 = 0;
     int num10 = 0;
     int num12 = TBLEN_MAX;
     int num13 = 0;
     int num14 = 0;
     int num15 = 0;
     int[] numArray = new int[2];
     ByteClass class2 = new ByteClass(0x20);
     float num19 = 1f;
     int rows = 1;
     int[] numArray2 = new int[this.MAX_COLUMNS];
     int[] numArray3 = new int[this.MAX_COLUMNS];
     int[] numArray4 = new int[this.MAX_COLUMNS];
     int[] numArray5 = new int[this.MAX_COLUMNS];
     bool flag2 = false;
     bool flag3 = false;
     int bgcolor = 0;
     int valign = 0;
     int[] numArray6 = null;
     bool flag4 = false;
     if (numArray6 != null)
     {
         flag4 = true;
     }
     int[,] numArray7 = new int[table_p.rows, table_p.cols + 2];
     bool flag5 = false;
     bool flag6 = false;
     bool flag7 = false;
     int num23 = 0;
     if (numArray7 != null)
     {
         flag5 = true;
     }
     if (flag5)
     {
         for (num = 0; num < table_p.rows; num++)
         {
             for (num2 = 0; num2 < (table_p.cols + 2); num2++)
             {
                 numArray7[num, num2] = 0;
             }
         }
     }
     table_p.table_width = this.get_width(buf, posStartBuf, max, ref percent, ref colspan, ref rowspan, color_list, color_list_num, ref bgcolor, CSS_param, ref valign, ref table_p.tableAlign);
     table_p.percent_width = percent;
     num = 0;
     num2 = 0;
     for (num11 = 0; num11 < this.MAX_COLUMNS; num11++)
     {
         tdAlignColgroup[num11] = 0;
     }
     this.table_clear(table_array, table_p, 0);
     this.table_clear(table_symbols, table_p, 0);
     this.table_clear(table_colspan, table_p, 1);
     this.table_clear(table_rowspan, table_p, 1);
     this.table_clear(table_images, table_p, 0);
     this.table_clear(table_width, table_p, 0);
     this.table_clear(table_colbg, table_p, 0);
     this.table_clear(table_valign, table_p, this.VALIGN_TOP);
     this.table_clear(table_map, table_p, 0);
     index++;
     while (index < max)
     {
         if ((((((buf.b[index] == 60) && (buf.b[index + 1] == 0x2f)) && ((buf.b[index + 2] == 0x74) || (buf.b[index + 2] == 0x54))) && ((buf.b[index + 3] == 0x61) || (buf.b[index + 3] == 0x41))) && (((buf.b[index + 4] == 0x62) || (buf.b[index + 4] == 0x42)) && ((buf.b[index + 5] == 0x6c) || (buf.b[index + 5] == 0x4c)))) && (((buf.b[index + 6] == 0x65) || (buf.b[index + 6] == 0x45)) && (buf.b[index + 7] == 0x3e)))
         {
             if (num2 > 0)
             {
                 table_array[num, 0] = num2;
                 table_colspan[num, 0] = num2;
                 table_rowspan[num, 0] = num2;
                 table_symbols[num, 0] = num2;
                 table_width[num, 0] = num2;
                 table_images[num, 0] = num2;
                 table_map[num, 0] = num2;
             }
             break;
         }
         if (((((buf.b[index] == 60) && ((buf.b[index + 1] == 0x74) || (buf.b[index + 1] == 0x54))) && ((buf.b[index + 2] == 0x61) || (buf.b[index + 2] == 0x41))) && (((buf.b[index + 3] == 0x62) || (buf.b[index + 3] == 0x42)) && ((buf.b[index + 4] == 0x6c) || (buf.b[index + 4] == 0x4c)))) && (((buf.b[index + 5] == 0x65) || (buf.b[index + 5] == 0x45)) && ((buf.b[index + 6] == 0x3e) || this.IS_DELIMITER(buf.b[index + 6]))))
         {
             IntPtr ptr2;
             index += 6;
             rows++;
             if (flag5)
             {
                 (numArray8 = numArray7)[(int)(ptr = (IntPtr)num), (int)(ptr2 = (IntPtr)num2)] = numArray8[(int)ptr, (int)ptr2] + 1;
             }
             if (this.IS_DELIMITER(buf.b[index]))
             {
                 int align = -1111;
                 num13 = this.get_width(buf, index, max, ref percent, ref colspan, ref rowspan, color_list, color_list_num, ref bgcolor, CSS_param, ref valign, ref align);
                 if (num2 <= 0)
                 {
                     num2 = 1;
                 }
                 if (percent == 0)
                 {
                     num13 = this.table_translate_width(num13);
                     if (table_array[num, num2] < num13)
                     {
                         table_array[num, num2] = num13;
                     }
                 }
                 else
                 {
                     num13 = this.table_translate(num13, table_p, percent);
                     if (table_array[num, num2] < num13)
                     {
                         table_array[num, num2] = num13;
                     }
                 }
             }
             while ((buf.b[index] != 0x3e) && (index < max))
             {
                 index++;
             }
             if (buf.b[index] == 0x3e)
             {
                 index++;
             }
             num14 = 0;
             num15 = 0;
             while ((rows > 1) && (index < max))
             {
                 if ((((((buf.b[index] == 60) && (buf.b[index + 1] == 0x2f)) && ((buf.b[index + 2] == 0x74) || (buf.b[index + 2] == 0x54))) && ((buf.b[index + 3] == 0x61) || (buf.b[index + 3] == 0x41))) && (((buf.b[index + 4] == 0x62) || (buf.b[index + 4] == 0x42)) && ((buf.b[index + 5] == 0x6c) || (buf.b[index + 5] == 0x4c)))) && (((buf.b[index + 6] == 0x65) || (buf.b[index + 6] == 0x45)) && (buf.b[index + 7] == 0x3e)))
                 {
                     rows--;
                     index += 6;
                 }
                 else if (((((buf.b[index] == 60) && ((buf.b[index + 1] == 0x74) || (buf.b[index + 1] == 0x54))) && ((buf.b[index + 2] == 0x61) || (buf.b[index + 2] == 0x41))) && (((buf.b[index + 3] == 0x62) || (buf.b[index + 3] == 0x42)) && ((buf.b[index + 4] == 0x6c) || (buf.b[index + 4] == 0x4c)))) && (((buf.b[index + 5] == 0x65) || (buf.b[index + 5] == 0x45)) && ((buf.b[index + 6] == 0x3e) || this.IS_DELIMITER(buf.b[index + 6]))))
                 {
                     rows++;
                     if (flag5)
                     {
                         (numArray8 = numArray7)[(int)(ptr = (IntPtr)num), (int)(ptr2 = (IntPtr)num2)] = numArray8[(int)ptr, (int)ptr2] + 1;
                     }
                     if (this.IS_DELIMITER(buf.b[index + 6]))
                     {
                         int num25 = -1111;
                         num13 = this.get_width(buf, index, max, ref percent, ref colspan, ref rowspan, color_list, color_list_num, ref bgcolor, CSS_param, ref valign, ref num25);
                         if (percent == 0)
                         {
                             num13 = this.table_translate_width(num13);
                             if (table_array[num, num2] < num13)
                             {
                                 table_array[num, num2] = num13;
                             }
                         }
                         else
                         {
                             num13 = this.table_translate(num13, table_p, percent);
                             if (table_array[num, num2] < num13)
                             {
                                 table_array[num, num2] = num13;
                             }
                         }
                     }
                 }
                 else if ((((buf.b[index] == 60) && ((buf.b[index + 1] == 0x74) || (buf.b[index + 1] == 0x54))) && (((buf.b[index + 2] == 100) || (buf.b[index + 2] == 0x44)) || ((buf.b[index + 2] == 0x68) || (buf.b[index + 2] == 0x48)))) && ((buf.b[index + 3] == 0x3e) || this.IS_DELIMITER(buf.b[index + 3])))
                 {
                     num14 = 0;
                     while ((buf.b[index] != 0x3e) && (index < max))
                     {
                         index++;
                     }
                 }
                 else if (((((buf.b[index] == 60) && (buf.b[index + 1] == 0x2f)) && ((buf.b[index + 2] == 0x74) || (buf.b[index + 2] == 0x54))) && (((buf.b[index + 3] == 100) || (buf.b[index + 3] == 0x44)) || ((buf.b[index + 3] == 0x68) || (buf.b[index + 3] == 0x48)))) && (buf.b[index + 4] == 0x3e))
                 {
                     if (num15 < num14)
                     {
                         num15 = num14;
                     }
                     num14 = 0;
                     while ((buf.b[index] != 0x3e) && (index < max))
                     {
                         index++;
                     }
                 }
                 else if ((((buf.b[index] == 60) && ((buf.b[index + 1] == 0x62) || (buf.b[index + 1] == 0x42))) && ((buf.b[index + 2] == 0x72) || (buf.b[index + 2] == 0x52))) && ((buf.b[index + 3] == 0x3e) || this.IS_DELIMITER(buf.b[index + 3])))
                 {
                     if (num14 > num15)
                     {
                         num15 = num14;
                     }
                     num14 = 0;
                     while ((buf.b[index] != 0x3e) && (index < max))
                     {
                         index++;
                     }
                 }
                 else if (buf.b[index] == 60)
                 {
                     while ((buf.b[index] != 0x3e) && (index < max))
                     {
                         index++;
                     }
                 }
                 else if (buf.b[index] == 0x26)
                 {
                     index += this.special_symbols_rtf(buf, index, max, class2, false);
                 }
                 else if (this.IS_DELIMITER(buf.b[index]))
                 {
                     if (num14 > num15)
                     {
                         num15 = num14;
                     }
                     num14 = 0;
                 }
                 else if (buf.b[index] >= 0x20)
                 {
                     num14++;
                 }
                 index++;
             }
             if (num6 < num15)
             {
                 num6 = num15;
             }
             if (num6 < num14)
             {
                 num6 = num14;
             }
         }
         else if (((((buf.b[index] == 60) && ((buf.b[index + 1] == 0x74) || (buf.b[index + 1] == 0x54))) && ((buf.b[index + 2] == 0x68) || (buf.b[index + 2] == 0x48))) && (((buf.b[index + 3] == 0x65) || (buf.b[index + 3] == 0x45)) && ((buf.b[index + 4] == 0x61) || (buf.b[index + 4] == 0x41)))) && (((buf.b[index + 5] == 100) || (buf.b[index + 5] == 0x44)) && (buf.b[index + 6] == 0x3e)))
         {
             if (flag3)
             {
                 if (num2 == 0)
                 {
                     num2 = 1;
                 }
                 table_array[num, 0] = num2;
                 table_colspan[num, 0] = num2;
                 table_rowspan[num, 0] = num2;
                 table_symbols[num, 0] = num2;
                 table_width[num, 0] = num2;
                 table_images[num, 0] = num2;
                 table_map[num, 0] = num2;
                 if (flag5)
                 {
                     numArray7[num, 0] = num2;
                 }
                 num++;
                 num2 = 0;
             }
             flag3 = true;
             flag6 = true;
         }
         else if ((((buf.b[index] == 60) && ((buf.b[index + 1] == 0x74) || (buf.b[index + 1] == 0x54))) && ((buf.b[index + 2] == 0x72) || (buf.b[index + 2] == 0x52))) && ((buf.b[index + 3] == 0x3e) || this.IS_DELIMITER(buf.b[index + 3])))
         {
             if (flag6 && (num2 == 0))
             {
                 flag6 = false;
                 flag3 = true;
             }
             else
             {
                 if (flag3 || (num2 == table_p.cols))
                 {
                     if (num2 == 0)
                     {
                         num2 = 1;
                     }
                     table_array[num, 0] = num2;
                     table_colspan[num, 0] = num2;
                     table_rowspan[num, 0] = num2;
                     table_symbols[num, 0] = num2;
                     table_width[num, 0] = num2;
                     table_images[num, 0] = num2;
                     table_map[num, 0] = num2;
                     if (flag5)
                     {
                         numArray7[num, 0] = num2;
                     }
                     num++;
                     num2 = 0;
                 }
                 flag3 = true;
                 flag6 = false;
             }
         }
         else if (((((buf.b[index] == 60) && (buf.b[index + 1] == 0x2f)) && ((buf.b[index + 2] == 0x74) || (buf.b[index + 2] == 0x54))) && ((buf.b[index + 3] == 0x72) || (buf.b[index + 3] == 0x52))) && (buf.b[index + 4] == 0x3e))
         {
             if (flag3 || (num2 == table_p.cols))
             {
                 table_array[num, 0] = num2;
                 table_colspan[num, 0] = num2;
                 table_rowspan[num, 0] = num2;
                 table_symbols[num, 0] = num2;
                 table_width[num, 0] = num2;
                 table_colbg[num, 0] = num2;
                 table_valign[num, 0] = num2;
                 table_images[num, 0] = num2;
                 table_map[num, 0] = num2;
                 if (flag5)
                 {
                     numArray7[num, 0] = num2;
                 }
                 num++;
                 num2 = 0;
                 while ((buf.b[index] != 0x3e) && (index < max))
                 {
                     index++;
                 }
             }
             else if (!flag3 && (num2 > 0))
             {
                 table_array[num, 0] = num2;
                 table_colspan[num, 0] = num2;
                 table_rowspan[num, 0] = num2;
                 table_symbols[num, 0] = num2;
                 table_width[num, 0] = num2;
                 table_colbg[num, 0] = num2;
                 table_valign[num, 0] = num2;
                 table_images[num, 0] = num2;
                 table_map[num, 0] = num2;
                 if (flag5)
                 {
                     numArray7[num, 0] = num2;
                 }
                 num++;
                 num2 = 0;
                 while ((buf.b[index] != 0x3e) && (index < max))
                 {
                     index++;
                 }
             }
             flag3 = false;
             if (num == table_p.rows)
             {
                 break;
             }
         }
         else if ((((buf.b[index] == 60) && ((buf.b[index + 1] == 0x74) || (buf.b[index + 1] == 0x54))) && (((buf.b[index + 2] == 100) || (buf.b[index + 2] == 0x44)) || ((buf.b[index + 2] == 0x68) || (buf.b[index + 2] == 0x48)))) && ((buf.b[index + 3] == 0x3e) || this.IS_DELIMITER(buf.b[index + 3])))
         {
             num2++;
             if (this.IS_DELIMITER(buf.b[index + 3]))
             {
                 index += 3;
                 int num26 = -1111;
                 table_array[num, num2] = this.get_width(buf, index, max, ref percent, ref colspan, ref rowspan, color_list, color_list_num, ref bgcolor, CSS_param, ref valign, ref num26);
                 table_colspan[num, num2] = colspan;
                 table_rowspan[num, num2] = rowspan;
                 table_colbg[num, num2] = bgcolor;
                 table_valign[num, num2] = valign;
                 table_array[num, num2] = this.table_translate(table_array[num, num2], table_p, percent);
             }
             num5 = 0;
             num6 = 0;
             while ((buf.b[index] != 0x3e) && (index < max))
             {
                 index++;
             }
             if (flag)
             {
                 table_images[num, num2] = this.get_width_img(buf, index, max, img_folder);
             }
         }
         else if (((((buf.b[index] == 60) && (buf.b[index + 1] == 0x2f)) && ((buf.b[index + 2] == 0x74) || (buf.b[index + 2] == 0x54))) && (((buf.b[index + 3] == 100) || (buf.b[index + 3] == 0x44)) || ((buf.b[index + 3] == 0x68) || (buf.b[index + 3] == 0x48)))) && (buf.b[index + 4] == 0x3e))
         {
             if (num6 > num5)
             {
                 num5 = num6;
             }
             table_symbols[num, num2] = num5;
             num5 = 0;
             num6 = 0;
             while ((buf.b[index] != 0x3e) && (index < max))
             {
                 index++;
             }
         }
         else if ((((buf.b[index] == 60) && ((buf.b[index + 1] == 0x62) || (buf.b[index + 1] == 0x42))) && ((buf.b[index + 2] == 0x72) || (buf.b[index + 2] == 0x52))) && ((buf.b[index + 3] == 0x3e) || this.IS_DELIMITER(buf.b[index + 3])))
         {
             if (num5 > num6)
             {
                 num6 = num5;
             }
             num5 = 0;
             while ((buf.b[index] != 0x3e) && (index < max))
             {
                 index++;
             }
         }
         else if (((((buf.b[index] == 60) && ((buf.b[index + 1] == 0x63) || (buf.b[index + 1] == 0x43))) && ((buf.b[index + 2] == 0x6f) || (buf.b[index + 2] == 0x4f))) && (((buf.b[index + 3] == 0x6c) || (buf.b[index + 3] == 0x4c)) && ((buf.b[index + 4] == 0x67) || (buf.b[index + 4] == 0x47)))) && ((((buf.b[index + 5] == 0x72) || (buf.b[index + 5] == 0x52)) && ((buf.b[index + 6] == 0x6f) || (buf.b[index + 6] == 0x4f))) && ((((buf.b[index + 7] == 0x75) || (buf.b[index + 7] == 0x55)) && ((buf.b[index + 8] == 0x70) || (buf.b[index + 8] == 80))) && (buf.b[index + 9] == 0x3e))))
         {
             flag7 = true;
         }
         else if (((((num23 < (this.MAX_COLUMNS - 1)) && (buf.b[index] == 60)) && ((buf.b[index + 1] == 0x63) || (buf.b[index + 1] == 0x43))) && ((buf.b[index + 2] == 0x6f) || (buf.b[index + 2] == 0x4f))) && (((buf.b[index + 3] == 0x6c) || (buf.b[index + 3] == 0x4c)) && ((buf.b[index + 4] == 0x20) && flag7)))
         {
             index += 3;
             while ((buf.b[index] != 0x3e) && (index < max))
             {
                 if (buf.b[index] == 60)
                 {
                     index--;
                     break;
                 }
                 if (((((buf.b[index] == 0x63) || (buf.b[index] == 0x43)) && ((buf.b[index + 1] == 0x65) || (buf.b[index + 1] == 0x45))) && (((buf.b[index + 2] == 110) || (buf.b[index + 2] == 0x4e)) && ((buf.b[index + 3] == 0x74) || (buf.b[index + 3] == 0x54)))) && (((buf.b[index + 4] == 0x65) || (buf.b[index + 4] == 0x45)) && ((buf.b[index + 5] == 0x72) || (buf.b[index + 5] == 0x52))))
                 {
                     tdAlignColgroup[num23++] = 0x63;
                 }
                 if (((((buf.b[index] == 0x6d) || (buf.b[index] == 0x4d)) && ((buf.b[index + 1] == 0x69) || (buf.b[index + 1] == 0x49))) && (((buf.b[index + 2] == 100) || (buf.b[index + 2] == 0x44)) && ((buf.b[index + 3] == 100) || (buf.b[index + 3] == 0x44)))) && (((buf.b[index + 4] == 0x6c) || (buf.b[index + 4] == 0x4c)) && ((buf.b[index + 5] == 0x65) || (buf.b[index + 5] == 0x45))))
                 {
                     tdAlignColgroup[num23++] = 0x63;
                 }
                 if ((((buf.b[index] == 0x6c) || (buf.b[index] == 0x4c)) && ((buf.b[index + 1] == 0x65) || (buf.b[index + 1] == 0x45))) && (((buf.b[index + 2] == 0x66) || (buf.b[index + 2] == 70)) && ((buf.b[index + 3] == 0x74) || (buf.b[index + 3] == 0x54))))
                 {
                     tdAlignColgroup[num23++] = 0x6c;
                 }
                 if (((((buf.b[index] == 0x72) || (buf.b[index] == 0x52)) && ((buf.b[index + 1] == 0x69) || (buf.b[index + 1] == 0x49))) && (((buf.b[index + 2] == 0x67) || (buf.b[index + 2] == 0x47)) && ((buf.b[index + 3] == 0x68) || (buf.b[index + 3] == 0x48)))) && ((buf.b[index + 4] == 0x74) || (buf.b[index + 4] == 0x54)))
                 {
                     tdAlignColgroup[num23++] = 0x72;
                 }
                 if (((((buf.b[index] == 0x6a) || (buf.b[index] == 0x4a)) && ((buf.b[index + 1] == 0x75) || (buf.b[index + 1] == 0x55))) && (((buf.b[index + 2] == 0x73) || (buf.b[index + 2] == 0x53)) && ((buf.b[index + 3] == 0x74) || (buf.b[index + 3] == 0x54)))) && ((((buf.b[index + 4] == 0x69) || (buf.b[index + 4] == 0x49)) && ((buf.b[index + 5] == 0x66) || (buf.b[index + 5] == 70))) && ((buf.b[index + 6] == 0x79) || (buf.b[index + 6] == 0x59))))
                 {
                     tdAlignColgroup[num23++] = 0x6a;
                 }
                 index++;
             }
         }
         else if ((buf.b[index] == 60) || (buf.b[index - 1] == 60))
         {
             while ((buf.b[index] != 0x3e) && (index < max))
             {
                 index++;
             }
         }
         else if (buf.b[index] == 0x26)
         {
             index += this.special_symbols_rtf(buf, index, max, class2, false);
             num5++;
         }
         else if (this.IS_DELIMITER(buf.b[index]))
         {
             if (num5 > num6)
             {
                 num6 = num5;
             }
             num5 = 0;
         }
         else if ((buf.b[index] >= 0x20) && ((buf.b[index] <= 0x80) || !hieroglyph))
         {
             num5++;
         }
         index++;
     }
     num10 = 0;
     int num27 = 0;
     int num28 = 0;
     int num29 = 0;
     int num30 = 0;
     int num31 = 0;
     int num32 = 0;
     int num33 = 0;
     int num34 = 0;
     int num35 = 0;
     int num36 = 0;
     int num37 = 0;
     int num38 = 0;
     for (num = 0; num < table_p.rows; num++)
     {
         for (num2 = 1; num2 < (table_colspan[num, 0] + 1); num2++)
         {
             if (table_rowspan[num, num2] > 1)
             {
                 rowspan = table_rowspan[num, num2];
                 for (num17 = 1; (num17 < rowspan) && ((num + num17) < table_p.rows); num17++)
                 {
                     (numArray8 = table_colspan)[(int)(ptr = (IntPtr)(num + num17)), 0] = numArray8[(int)ptr, 0] + 1;
                     num18 = num2;
                     colspan = table_colspan[num, num2];
                     while (num18 < (table_colspan[num + num17, 0] + 1))
                     {
                         num10 = table_colspan[num + num17, num18];
                         table_colspan[num + num17, num18] = colspan;
                         colspan = num10;
                         num18++;
                     }
                 }
             }
         }
     }
     for (num = 0; num < this.MAX_COLUMNS; num++)
     {
         numArray2[num] = 0;
     }
     for (num = 0; num < table_p.rows; num++)
     {
         if (numArray2[table_colspan[num, 0]] > 0)
         {
             num2 = numArray2[table_colspan[num, 0]] - 1;
             for (index = 1; index < (table_p.cols + 1); index++)
             {
                 table_colspan[num, index] = table_colspan[num2, index];
             }
         }
         else
         {
             num16 = 0;
             for (num2 = 1; num2 < (table_p.cols + 1); num2++)
             {
                 num16 += table_colspan[num, num2];
                 table_colspan[num, num2] = num16;
             }
         }
     }
     for (num = 0; num < table_p.rows; num++)
     {
         for (num2 = 1; num2 < (table_colspan[num, 0] + 1); num2++)
         {
             if (table_rowspan[num, num2] > 1)
             {
                 rowspan = table_rowspan[num, num2];
                 table_map[num, num2] = this.CLVMGF;
                 for (num17 = 1; (num17 < rowspan) && ((num + num17) < table_p.rows); num17++)
                 {
                     table_rowspan[num + num17, 0] = table_colspan[num + num17, 0];
                     table_map[num + num17, 0] = table_colspan[num + num17, 0];
                     table_images[num + num17, 0] = table_colspan[num + num17, 0];
                     table_array[num + num17, 0] = table_colspan[num + num17, 0];
                     table_symbols[num + num17, 0] = table_colspan[num + num17, 0];
                     table_width[num + num17, 0] = table_colspan[num + num17, 0];
                     table_colbg[num + num17, 0] = table_colspan[num + num17, 0];
                     table_valign[num + num17, 0] = table_colspan[num + num17, 0];
                     if (flag5)
                     {
                         numArray7[num + num17, 0] = table_colspan[num + num17, 0];
                         num33 = numArray7[num, num2];
                     }
                     num16 = table_colspan[num, num2];
                     num18 = num2;
                     while (num18 < (table_colspan[num + num17, 0] + 1))
                     {
                         if (num16 == table_colspan[num + num17, num18])
                         {
                             break;
                         }
                         num18++;
                     }
                     colspan = table_colspan[num, num2];
                     num27 = table_array[num, num2];
                     num29 = table_symbols[num, num2];
                     num31 = table_images[num, num2];
                     num35 = table_colbg[num, num2];
                     num37 = table_valign[num, num2];
                     while (num18 < (table_colspan[num + num17, 0] + 1))
                     {
                         num28 = table_array[num + num17, num18];
                         table_array[num + num17, num18] = num27;
                         num27 = num28;
                         num30 = table_symbols[num + num17, num18];
                         table_symbols[num + num17, num18] = num29;
                         num29 = num30;
                         num32 = table_images[num + num17, num18];
                         table_images[num + num17, num18] = num31;
                         num31 = num32;
                         num36 = table_colbg[num + num17, num18];
                         table_colbg[num + num17, num18] = num35;
                         num35 = num36;
                         num38 = table_valign[num + num17, num18];
                         table_valign[num + num17, num18] = num37;
                         num37 = num38;
                         if (flag5)
                         {
                             num34 = numArray7[num + num17, num18];
                             numArray7[num + num17, num18] = num33;
                             num33 = num34;
                         }
                         num18++;
                     }
                 }
             }
         }
     }
     for (num = 0; num < table_p.rows; num++)
     {
         if (table_array[num, 0] == 0)
         {
             table_array[num, 0] = 1;
             table_colspan[num, 0] = 1;
             table_rowspan[num, 0] = 1;
             table_symbols[num, 0] = 1;
             table_width[num, 0] = 1;
             table_images[num, 0] = 1;
             table_colbg[num, 0] = 1;
             table_valign[num, 0] = 1;
             table_map[num, 0] = 1;
         }
     }
     for (num = 0; num < table_p.rows; num++)
     {
         for (num2 = 1; num2 < (table_rowspan[num, 0] + 1); num2++)
         {
             if (table_rowspan[num, num2] > 1)
             {
                 rows = table_rowspan[num, num2];
                 if ((table_p.rows - rows) <= 0)
                 {
                     rows = table_p.rows;
                 }
                 if (table_p.rows != 1)
                 {
                     num16 = table_colspan[num, num2];
                     if (table_map[num, num2] != this.CLVMRG)
                     {
                         table_map[num, num2] = this.CLVMGF;
                     }
                     for (num17 = 1; (num17 < rows) && ((num + num17) < table_p.rows); num17++)
                     {
                         for (num18 = 1; num18 < (table_p.cols + 1); num18++)
                         {
                             if (num16 == table_colspan[num + num17, num18])
                             {
                                 table_map[num + num17, num18] = this.CLVMRG;
                             }
                         }
                     }
                 }
             }
         }
     }
     for (num = 0; num < this.MAX_COLUMNS; num++)
     {
         numArray2[num] = 0;
         numArray3[num] = 0;
         numArray4[num] = 0;
         numArray5[num] = 0;
     }
     for (num = 0; num < table_p.rows; num++)
     {
         colspan = 0;
         for (num2 = 1; num2 < (table_array[num, 0] + 1); num2++)
         {
             if (table_array[num, num2] != 0)
             {
                 break;
             }
             colspan++;
         }
         if (table_array[num, 0] == colspan)
         {
             numArray3[table_array[num, 0]] = 1;
         }
     }
     for (num = 0; num < table_p.rows; num++)
     {
         for (num2 = 1; num2 < (table_p.cols + 1); num2++)
         {
             if (table_array[num, num2] == 0)
             {
                 table_width[num, num2] = 1;
             }
             table_rowspan[num, num2] = table_map[num, num2];
             table_map[num, num2] = 0;
         }
     }
     this.table_sort(table_array, table_p);
     this.table_sort(table_symbols, table_p);
     this.TableSpecifyCols(table_array, table_rowspan, table_colspan, table_p);
     for (num = 0; num < this.MAX_COLUMNS; num++)
     {
         numArray2[num] = 0;
     }
     for (num = 0; num < table_p.rows; num++)
     {
         if (numArray2[table_symbols[num, 0]] > 0)
         {
             num2 = numArray2[table_symbols[num, 0]] - 1;
             for (index = 1; index < (table_p.cols + 1); index++)
             {
                 table_symbols[num, index] = table_symbols[num2, index];
             }
         }
         else
         {
             for (num2 = 1; num2 < (table_colspan[num, 0] + 1); num2++)
             {
                 num16 = table_colspan[num, num2];
                 num12 = table_symbols[num, num2];
                 num17 = 0;
                 num10 = 0;
                 while (num17 < table_p.rows)
                 {
                     for (num18 = 1; num18 < (table_colspan[num17, 0] + 1); num18++)
                     {
                         if (num16 == table_colspan[num17, num18])
                         {
                             num10++;
                             if (num12 <= table_symbols[num17, num18])
                             {
                                 num12 = table_symbols[num17, num18];
                             }
                         }
                     }
                     num17++;
                 }
                 if (num10 > 0)
                 {
                     for (num17 = num; num17 < table_p.rows; num17++)
                     {
                         for (num18 = 1; num18 < (table_colspan[num17, 0] + 1); num18++)
                         {
                             if ((num16 == table_colspan[num17, num18]) && (table_symbols[num17, num18] == 0))
                             {
                                 table_symbols[num17, num18] = num12;
                             }
                         }
                     }
                 }
             }
         }
     }
     this.table_check_width(table_array, table_symbols, table_images, numArray7, table_colspan, table_p, numArray3, numArray6, flag4);
     for (num = 0; num < this.MAX_COLUMNS; num++)
     {
         numArray2[num] = 0;
     }
     for (num = 0; num < table_p.rows; num++)
     {
         if (numArray2[table_map[num, 0]] > 0)
         {
             num2 = numArray2[table_map[num, 0]] - 1;
             for (index = 1; index < (table_p.cols + 1); index++)
             {
                 table_map[num, index] = table_map[num2, index];
             }
         }
         else
         {
             index = 1;
             num5 = 0;
             while (index < (table_symbols[num, 0] + 1))
             {
                 num5 += table_symbols[num, index];
                 index++;
             }
             if (num5 > this.MAX_SYMBOLS_IN_COLUMN)
             {
                 num5 = this.MAX_SYMBOLS_IN_COLUMN;
             }
             num5 = this.TBLEN / this.TWIPS_PER_ONE_SYMBOL;
             for (index = 1; index < (table_symbols[num, 0] + 1); index++)
             {
                 if (num5 != 0)
                 {
                     if (table_symbols[num, index] == 1)
                     {
                         table_map[num, index] = (table_symbols[num, index] * TBLEN_MAX) / num5;
                     }
                     else if (table_symbols[num, index] == 0)
                     {
                         table_map[num, index] = 10;
                     }
                     else if ((table_symbols[num, index] >= 2) && (table_symbols[num, index] <= 3))
                     {
                         table_map[num, index] = (table_symbols[num, index] * TBLEN_MAX) / num5;
                     }
                     else if ((table_symbols[num, index] >= 4) && (table_symbols[num, index] <= 10))
                     {
                         table_map[num, index] = (table_symbols[num, index] * TBLEN_MAX) / num5;
                     }
                     else if ((table_symbols[num, index] >= 11) && (table_symbols[num, index] <= 0x19))
                     {
                         table_map[num, index] = (table_symbols[num, index] * TBLEN_MAX) / num5;
                     }
                     else if ((table_symbols[num, index] > 0x19) && (table_symbols[num, index] <= 50))
                     {
                         table_map[num, index] = (0x19 * TBLEN_MAX) / num5;
                     }
                     else if ((table_symbols[num, index] > 50) && (table_symbols[num, index] <= 100))
                     {
                         table_map[num, index] = (0x33 * TBLEN_MAX) / num5;
                     }
                     else if ((table_symbols[num, index] > 100) && (table_symbols[num, index] <= 0xc7))
                     {
                         table_map[num, index] = (70 * TBLEN_MAX) / num5;
                     }
                     else if (table_symbols[num, index] > 200)
                     {
                         table_map[num, index] = (this.MAX_SYMBOLS_IN_COLUMN * TBLEN_MAX) / num5;
                     }
                     if (table_map[num, index] > this.TBLEN)
                     {
                         table_map[num, index] = this.TBLEN;
                     }
                 }
             }
             for (index = 1; index < (table_p.cols + 1); index++)
             {
                 if (table_width[num, index] == 0)
                 {
                     if (table_map[num, index] < table_array[num, index])
                     {
                         table_map[num, index] = table_array[num, index];
                     }
                 }
                 else if (table_array[num, index] != 0)
                 {
                     table_map[num, index] = table_array[num, index];
                 }
             }
         }
     }
     for (num = 0; num < table_p.rows; num++)
     {
         for (num2 = 0; num2 < (table_p.cols + 1); num2++)
         {
             table_array[num, num2] = table_colspan[num, num2];
         }
     }
     for (num = 0; num < this.MAX_COLUMNS; num++)
     {
         numArray2[num] = 0;
     }
     if (flag)
     {
         for (num = 0; num < table_p.rows; num++)
         {
             if (numArray2[table_map[num, 0]] > 0)
             {
                 num2 = numArray2[table_map[num, 0]] - 1;
                 for (index = 1; index < (table_p.cols + 1); index++)
                 {
                     table_map[num, index] = table_map[num2, index];
                 }
             }
             else
             {
                 num10 = 0;
                 for (num11 = 1; num11 < (table_images[num, 0] + 1); num11++)
                 {
                     if (table_images[num, num11] > 0)
                     {
                         num10 = 1;
                         break;
                     }
                 }
                 if (num10 > 0)
                 {
                     for (num2 = 1; num2 < (table_images[num, 0] + 1); num2++)
                     {
                         if (table_map[num, num2] < table_images[num, num2])
                         {
                             table_map[num, num2] = table_images[num, num2];
                         }
                         if ((table_images[num, num2] > 0) && (table_images[num, num2] > table_map[num, num2]))
                         {
                             numArray5[num2] = 1;
                         }
                     }
                 }
                 if (num10 == 0)
                 {
                     num2 = 1;
                     num5 = 0;
                     num12 = 0;
                     while (num2 < (table_map[num, 0] + 1))
                     {
                         num5 += table_map[num, num2];
                         if (table_width[num, num2] == 1)
                         {
                             num12 += table_map[num, num2];
                         }
                         num2++;
                     }
                     num10 = 0;
                     if ((num12 < num5) && (num12 > 0))
                     {
                         if (TBLEN_MAX > (num5 - num12))
                         {
                             num19 = ((float)num12) / ((float)(TBLEN_MAX - (num5 - num12)));
                             num10 = 1;
                         }
                         else
                         {
                             num19 = ((float)num5) / ((float)TBLEN_MAX);
                         }
                     }
                     else
                     {
                         num19 = ((float)num5) / ((float)TBLEN_MAX);
                     }
                     for (num2 = 1; num2 < (table_map[num, 0] + 1); num2++)
                     {
                         if (num10 == 1)
                         {
                             if (table_width[num, num2] == 1)
                             {
                                 table_map[num, num2] = (int)(((float)table_map[num, num2]) / num19);
                             }
                         }
                         else
                         {
                             table_map[num, num2] = (int)(((float)table_map[num, num2]) / num19);
                         }
                     }
                 }
                 else
                 {
                     num5 = 0;
                     num9 = 0;
                     for (num2 = 1; num2 < (table_map[num, 0] + 1); num2++)
                     {
                         num5 += table_map[num, num2];
                         if (numArray5[num2] == 1)
                         {
                             num9 += table_map[num, num2];
                         }
                     }
                     if (num9 > TBLEN_MAX)
                     {
                         num9 = TBLEN_MAX - 100;
                     }
                     if (num5 != num9)
                     {
                         num19 = ((float)(num5 - num9)) / ((float)(TBLEN_MAX - num9));
                     }
                     else
                     {
                         num19 = ((float)num9) / ((float)TBLEN_MAX);
                     }
                     for (num2 = 1; num2 < (table_map[num, 0] + 1); num2++)
                     {
                         if ((numArray5[num2] != 1) || (num19 < 1f))
                         {
                             table_map[num, num2] = (int)(((float)table_map[num, num2]) / num19);
                         }
                     }
                     num2 = 1;
                     num5 = 0;
                     while (num2 < (table_map[num, 0] + 1))
                     {
                         num5 += table_map[num, num2];
                         num2++;
                     }
                     if ((num5 < (TBLEN_MAX - 100)) || (num5 > (TBLEN_MAX + 1)))
                     {
                         num19 = ((float)num5) / ((float)TBLEN_MAX);
                         for (num2 = 1; num2 < (table_map[num, 0] + 1); num2++)
                         {
                             table_map[num, num2] = (int)(((float)table_map[num, num2]) / num19);
                         }
                     }
                     numArray2[table_map[num, 0]] = num + 1;
                     for (num2 = 0; num2 < table_p.cols; num2++)
                     {
                         numArray5[num2] = 0;
                     }
                 }
             }
         }
     }
     else
     {
         for (num = 0; num < table_p.rows; num++)
         {
             if (numArray2[table_map[num, 0]] > 0)
             {
                 num2 = numArray2[table_map[num, 0]] - 1;
                 for (index = 1; index < (table_p.cols + 1); index++)
                 {
                     table_map[num, index] = table_map[num2, index];
                 }
             }
             else
             {
                 num2 = 1;
                 num5 = 0;
                 while (num2 < (table_map[num, 0] + 1))
                 {
                     num5 += table_map[num, num2];
                     num2++;
                 }
                 num19 = ((float)num5) / ((float)TBLEN_MAX);
                 for (num2 = 1; num2 < (table_map[num, 0] + 1); num2++)
                 {
                     table_map[num, num2] = (int)(((float)table_map[num, num2]) / num19);
                 }
                 numArray2[table_map[num, 0]] = num + 1;
             }
         }
     }
     for (num = 0; num < this.MAX_COLUMNS; num++)
     {
         numArray2[num] = 0;
     }
     for (num = 0; num < table_p.rows; num++)
     {
         if (numArray2[table_map[num, 0]] > 0)
         {
             num2 = numArray2[table_map[num, 0]] - 1;
             for (index = 1; index < (table_p.cols + 1); index++)
             {
                 table_map[num, index] = table_map[num2, index];
             }
         }
         else
         {
             num2 = table_map[num, 0];
             num5 = 0;
             while (num2 >= 1)
             {
                 colspan = table_map[num, num2];
                 table_map[num, num2] = TBLEN_MAX - num5;
                 num5 += colspan;
                 num2--;
             }
         }
     }
     for (num = 0; num < table_p.rows; num++)
     {
         for (num2 = 1; num2 < (table_p.cols + 1); num2++)
         {
             table_colspan[num, num2] = 0;
             table_symbols[num, num2] = table_map[num, num2];
         }
     }
     for (num = 0; num < table_p.rows; num++)
     {
         table_map[num, table_map[num, 0]] = TBLEN_MAX;
     }
     for (num = 0; num < this.MAX_COLUMNS; num++)
     {
         numArray2[num] = 0;
     }
     for (num = 0; num < table_p.rows; num++)
     {
         if (numArray2[table_map[num, 0]] > 0)
         {
             num2 = numArray2[table_map[num, 0]] - 1;
             for (index = 1; index < (table_p.cols + 1); index++)
             {
                 table_map[num, index] = table_map[num2, index];
             }
         }
         else
         {
             for (num2 = 1; num2 < (table_array[num, 0] + 1); num2++)
             {
                 num16 = table_array[num, num2];
                 if (((num16 != 1) || (table_map[num, 0] != 1)) && (((num2 != 1) || (num16 <= 1)) || ((table_width[num, num2] != 1) || (table_map[num, 0] != 1))))
                 {
                     num12 = table_map[num, num2];
                     flag2 = false;
                     if (table_width[num, num2] == 1)
                     {
                         flag2 = true;
                     }
                     num17 = 0;
                     num10 = 0;
                     while (num17 < table_p.rows)
                     {
                         for (num18 = 1; num18 < (table_array[num17, 0] + 1); num18++)
                         {
                             if ((num16 == table_array[num17, num18]) && ((num16 != 1) || (table_map[num17, 0] != 1)))
                             {
                                 num10++;
                                 if ((num12 <= table_map[num17, num18]) && (table_map[num17, num18] != TBLEN_MAX))
                                 {
                                     if ((numArray3[table_map[num17, 0]] == 0) || (table_width[num17, num18] == 0))
                                     {
                                         num12 = table_map[num17, num18];
                                     }
                                 }
                                 else if (num12 > table_map[num17, num18])
                                 {
                                     if (flag2 && (table_width[num17, num18] == 0))
                                     {
                                         num12 = table_map[num17, num18];
                                         flag2 = false;
                                     }
                                     else if (numArray4[num17 + 1] == 1)
                                     {
                                         num12 = table_map[num17, num18];
                                     }
                                 }
                             }
                         }
                         num17++;
                     }
                     if (num10 > 0)
                     {
                         for (num17 = num; num17 < table_p.rows; num17++)
                         {
                             for (num18 = 1; num18 < (table_array[num17, 0] + 1); num18++)
                             {
                                 if (num16 == table_array[num17, num18])
                                 {
                                     if (num10 > 1)
                                     {
                                         table_colspan[num17, num18] = 1;
                                     }
                                     table_map[num17, num18] = num12;
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
     for (num = 0; num < this.MAX_COLUMNS; num++)
     {
         numArray2[num] = 0;
     }
     for (num = 0; num < table_p.rows; num++)
     {
         if (numArray2[table_map[num, 0]] > 0)
         {
             num2 = numArray2[table_map[num, 0]] - 1;
             for (index = 1; index < (table_p.cols + 1); index++)
             {
                 table_map[num, index] = table_map[num2, index];
             }
         }
         else
         {
             for (num2 = 1; num2 < table_map[num, 0]; num2++)
             {
                 numArray[0] = table_map[num, num2];
                 numArray[1] = table_map[num, num2 + 1];
                 if ((numArray[1] < numArray[0]) && ((num2 + 1) < table_map[num, 0]))
                 {
                     table_map[num, num2 + 1] = (table_map[num, num2] + table_map[num, num2 + 2]) / 2;
                 }
             }
         }
     }
     for (num = 0; num < table_p.rows; num++)
     {
         table_map[num, table_map[num, 0]] = TBLEN_MAX;
     }
     if ((this._preserveTableWidth == 1) && (table_p.table_width > 0))
     {
         num12 = TBLEN_MAX;
         if (table_p.percent_width == 0)
         {
             num12 = (table_p.table_width * TBLEN_MAX) / this.SCREEN_W_DEF;
         }
         else if (table_p.table_width < 100)
         {
             num12 = (table_p.table_width * TBLEN_MAX) / 100;
         }
         if ((num12 < (TBLEN_MAX - 500)) && (num12 > 0x3e8))
         {
             num19 = ((float)num12) / ((float)TBLEN_MAX);
             for (num = 0; num < table_p.rows; num++)
             {
                 for (num2 = 1; num2 < (table_map[num, 0] + 1); num2++)
                 {
                     table_map[num, num2] = (int)(table_map[num, num2] * num19);
                 }
             }
         }
     }
 }