]> git.saurik.com Git - wxWidgets.git/blobdiff - src/html/htmlcell.cpp
Adding MSVC makefile support for building the TIFF library
[wxWidgets.git] / src / html / htmlcell.cpp
index 6979805f45fd302dc65e6dc5dad703716a108a75..e8680be944ef868e670de1f7822dcca267d65e2f 100644 (file)
@@ -13,6 +13,7 @@
 
 #include "wx/wxprec.h"
 
+#include "wx/defs.h"
 #if wxUSE_HTML
 
 #ifdef __BORDLANDC__
@@ -72,11 +73,27 @@ bool wxHtmlCell::AdjustPagebreak(int *pagebreak)
 wxHtmlWordCell::wxHtmlWordCell(const wxString& word, wxDC& dc) : wxHtmlCell()
 {
     m_Word = word;
-    m_Word.Replace(" ", " ", TRUE);
-    m_Word.Replace(""", "\"", TRUE);
-    m_Word.Replace("&lt;", "<", TRUE);
-    m_Word.Replace("&gt;", ">", TRUE);
-    m_Word.Replace("&amp;", "&", TRUE);
+    
+    if (m_Word.Find(wxT('&')) != -1) 
+    {
+        static wxChar* substitutions[][3] = 
+                {
+                    { wxT("&nbsp;"), wxT("&nbsp "), wxT(" ") },
+                    { wxT("&copy;"), wxT("&copy "), wxT("(c)") },
+                    { wxT("&quot;"), wxT("&quot "), wxT("\"") },
+                    { wxT("&lt;"), wxT("&lt "), wxT("<") },
+                    { wxT("&gt;"), wxT("&gt "), wxT(">") },
+                    { wxT("&amp;"), wxT("&amp "), wxT("&")  /*this one should be last one*/ },
+                    { NULL, NULL, NULL }
+                };
+
+        for (int i = 0; substitutions[i][0] != NULL; i++) 
+        {
+            m_Word.Replace(substitutions[i][0], substitutions[i][2], TRUE);
+            m_Word.Replace(substitutions[i][1], substitutions[i][2], TRUE);
+        }
+    }
+
     dc.GetTextExtent(m_Word, &m_Width, &m_Height, &m_Descent);
     SetCanLiveOnPagebreak(FALSE);
 }
@@ -373,19 +390,19 @@ void wxHtmlContainerCell::SetAlign(const wxHtmlTag& tag)
 
 
 
-void wxHtmlContainerCell::SetWidthFloat(const wxHtmlTag& tag)
+void wxHtmlContainerCell::SetWidthFloat(const wxHtmlTag& tag, double pixel_scale)
 {
     if (tag.HasParam("WIDTH")) {
         int wdi;
         wxString wd = tag.GetParam("WIDTH");
 
         if (wd[wd.Length()-1] == '%') {
-            sscanf(wd.c_str(), "%i%%", &wdi);
+            wxSscanf(wd.c_str(), wxT("%i%%"), &wdi);
             SetWidthFloat(wdi, wxHTML_UNITS_PERCENT);
         }
         else {
-            sscanf(wd.c_str(), "%i", &wdi);
-            SetWidthFloat(wdi, wxHTML_UNITS_PIXELS);
+            wxSscanf(wd.c_str(), wxT("%i"), &wdi);
+            SetWidthFloat((int)(pixel_scale * (double)wdi), wxHTML_UNITS_PIXELS);
         }
     }
 }