]> git.saurik.com Git - wxWidgets.git/blobdiff - src/html/m_tables.cpp
fix ANI loading; check for errors when calling Read()
[wxWidgets.git] / src / html / m_tables.cpp
index f50de26c79ec8175f00791be58360c1b040a519f..8540af13f2510dc346fd61783aa39a397204fcfb 100644 (file)
@@ -282,14 +282,19 @@ void wxHtmlTableCell::AddCell(wxHtmlContainerCell *cell, const wxHtmlTag& tag)
 
             if (wd[wd.length()-1] == wxT('%'))
             {
-                wxSscanf(wd.c_str(), wxT("%i%%"), &m_ColsInfo[c].width);
-                m_ColsInfo[c].units = wxHTML_UNITS_PERCENT;
+                if ( wxSscanf(wd.c_str(), wxT("%i%%"), &m_ColsInfo[c].width) == 1 )
+                {
+                    m_ColsInfo[c].units = wxHTML_UNITS_PERCENT;
+                }
             }
             else
             {
-                wxSscanf(wd.c_str(), wxT("%i"), &m_ColsInfo[c].width);
-                m_ColsInfo[c].width = (int)(m_PixelScale * (double)m_ColsInfo[c].width);
-                m_ColsInfo[c].units = wxHTML_UNITS_PIXELS;
+                long width;
+                if ( wd.ToLong(&width) )
+                {
+                    m_ColsInfo[c].width = (int)(m_PixelScale * (double)width);
+                    m_ColsInfo[c].units = wxHTML_UNITS_PIXELS;
+                }
             }
         }
     }
@@ -661,10 +666,12 @@ TAG_HANDLER_BEGIN(TABLE, "TABLE,TR,TD,TH")
     TAG_HANDLER_VARS
         wxHtmlTableCell* m_Table;
         wxString m_tAlign, m_rAlign;
+        wxHtmlContainerCell *m_enclosingContainer;
 
     TAG_HANDLER_CONSTR(TABLE)
     {
         m_Table = NULL;
+        m_enclosingContainer = NULL;
         m_tAlign = m_rAlign = wxEmptyString;
     }
 
@@ -677,9 +684,8 @@ TAG_HANDLER_BEGIN(TABLE, "TABLE,TR,TD,TH")
         if (tag.GetName() == wxT("TABLE"))
         {
             wxHtmlTableCell *oldt = m_Table;
-            wxHtmlContainerCell *oldcont;
 
-            oldcont = c = m_WParser->OpenContainer();
+            m_enclosingContainer = c = m_WParser->OpenContainer();
 
             m_Table = new wxHtmlTableCell(c, tag, m_WParser->GetPixelScale());
 
@@ -713,11 +719,12 @@ TAG_HANDLER_BEGIN(TABLE, "TABLE,TR,TD,TH")
             ParseInner(tag);
 
             m_WParser->SetAlign(oldAlign);
-            m_WParser->SetContainer(oldcont);
+            m_WParser->SetContainer(m_enclosingContainer);
             m_WParser->CloseContainer();
 
             m_Table = oldt;
-            return true;
+
+            return true; // ParseInner() called
         }
 
 
@@ -759,8 +766,19 @@ TAG_HANDLER_BEGIN(TABLE, "TABLE,TR,TD,TH")
                     m_WParser->SetAlign(wxHTML_ALIGN_CENTER);
 
                 m_WParser->OpenContainer();
+
+                ParseInner(tag);
+
+                // set the current container back to the enclosing one so that
+                // text outside of <th> and <td> isn't included in any cell
+                // (this happens often enough in practice because it's common
+                // to use whitespace between </td> and the next <td>):
+                m_WParser->SetContainer(m_enclosingContainer);
+
+                return true; // ParseInner() called
             }
         }
+
         return false;
     }