]> git.saurik.com Git - wxWidgets.git/blobdiff - src/html/m_fonts.cpp
fixed (rare but fatal) bug in wxWindowDisabler
[wxWidgets.git] / src / html / m_fonts.cpp
index 1718aa01e791a5b8401d7eb9edf5c96ba845350e..161cbd450c051b1f15b98f741738bbef855a827a 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
-// Name:        mod_fonts.cpp
+// Name:        m_fonts.cpp
 // Purpose:     wxHtml module for fonts & colors of fonts
 // Author:      Vaclav Slavik
 // RCS-ID:      $Id$
@@ -11,7 +11,7 @@
 #pragma implementation
 #endif
 
-#include <wx/wxprec.h>
+#include "wx/wxprec.h"
 
 #include "wx/defs.h"
 #if wxUSE_HTML
 #endif
 
 #ifndef WXPRECOMP
-#include <wx/wx.h>
+#include "wx/wx.h"
 #endif
 
 #include "wx/html/forcelnk.h"
 #include "wx/html/m_templ.h"
+#include "wx/fontenum.h"
+#include "wx/tokenzr.h"
 
-FORCE_LINK_ME(mod_fonts)
+FORCE_LINK_ME(m_fonts)
 
 
-TAG_HANDLER_BEGIN(FONT, "FONT(")
+TAG_HANDLER_BEGIN(FONT, "FONT")
+
+    TAG_HANDLER_VARS
+        wxSortedArrayString m_Faces;
 
     TAG_HANDLER_PROC(tag)
     {
         wxColour oldclr = m_WParser -> GetActualColor();
         int oldsize = m_WParser -> GetFontSize();
+        wxString oldface = m_WParser -> GetFontFace();
 
-        if (tag.HasParam("COLOR")) {
-           unsigned long tmp = 0; 
+        if (tag.HasParam(wxT("COLOR"))) {
+            unsigned long tmp = 0; 
             wxColour clr;
-            if (tag.ScanParam("COLOR", "#%lX", &tmp) == 1) {
+            if (tag.ScanParam(wxT("COLOR"), wxT("#%lX"), &tmp) == 1) {
                 clr = wxColour((tmp & 0xFF0000) >> 16 , (tmp & 0x00FF00) >> 8, (tmp & 0x0000FF));
                 m_WParser -> SetActualColor(clr);
                 m_WParser -> GetContainer() -> InsertCell(new wxHtmlColourCell(clr));
-           }
+            }
         }
 
-        if (tag.HasParam("SIZE")) {
-           long tmp = 0;
-            if (tag.ScanParam("SIZE", "%li", &tmp) == 1) {
-                m_WParser -> SetFontSize(oldsize+tmp);
+        if (tag.HasParam(wxT("SIZE"))) {
+            long tmp = 0;
+            wxChar c = tag.GetParam(wxT("SIZE"))[(unsigned int) 0];
+            if (tag.ScanParam(wxT("SIZE"), wxT("%li"), &tmp) == 1) {
+                if (c == '+' || c == '-')
+                    m_WParser -> SetFontSize(oldsize+tmp);
+                else
+                    m_WParser -> SetFontSize(tmp);
                 m_WParser -> GetContainer() -> InsertCell(new wxHtmlFontCell(m_WParser -> CreateCurrentFont()));
-           }
+            }
+        }
+        
+        if (tag.HasParam(wxT("FACE"))) {
+            if (m_Faces.GetCount() == 0) {
+                wxFontEnumerator enu;
+                enu.EnumerateFacenames();
+                m_Faces = *enu.GetFacenames();
+            }
+            wxStringTokenizer tk(tag.GetParam(wxT("FACE")), ",");
+            int index;
+            
+            while (tk.HasMoreTokens()) 
+                if ((index = m_Faces.Index(tk.GetNextToken())) != wxNOT_FOUND) {
+                    m_WParser -> SetFontFace(m_Faces[index]);
+                    m_WParser -> GetContainer() -> InsertCell(new wxHtmlFontCell(m_WParser -> CreateCurrentFont()));
+                    break;
+                }
         }
 
         ParseInner(tag);
 
-        if (oldclr != m_WParser -> GetActualColor()) {
-            m_WParser -> SetActualColor(oldclr);
-            m_WParser -> GetContainer() -> InsertCell(new wxHtmlColourCell(oldclr));
-        }
+        if (oldface != m_WParser -> GetFontFace()) {
+            m_WParser -> SetFontFace(oldface);
+            m_WParser -> GetContainer() -> InsertCell(new wxHtmlFontCell(m_WParser -> CreateCurrentFont()));
+        }        
         if (oldsize != m_WParser -> GetFontSize()) {
             m_WParser -> SetFontSize(oldsize);
             m_WParser -> GetContainer() -> InsertCell(new wxHtmlFontCell(m_WParser -> CreateCurrentFont()));
+        }        
+        if (oldclr != m_WParser -> GetActualColor()) {
+            m_WParser -> SetActualColor(oldclr);
+            m_WParser -> GetContainer() -> InsertCell(new wxHtmlColourCell(oldclr));
         }
         return TRUE;
     }
@@ -71,36 +102,86 @@ TAG_HANDLER_BEGIN(FONT, "FONT(")
 TAG_HANDLER_END(FONT)
 
 
-TAG_HANDLER_BEGIN(FACES, "U,I,B,TT(")
+TAG_HANDLER_BEGIN(FACES_U, "U,STRIKE")
 
     TAG_HANDLER_PROC(tag)
     {
-        int fixed = m_WParser -> GetFontFixed(),
-            italic = m_WParser -> GetFontItalic(),
-            underlined = m_WParser -> GetFontUnderlined(),
-            bold = m_WParser -> GetFontBold();
-
-        if (tag.GetName() == "U")
-            m_WParser -> SetFontUnderlined(TRUE);
-        else if (tag.GetName() == "B")
-            m_WParser -> SetFontBold(TRUE);
-        else if (tag.GetName() == "I")
-            m_WParser -> SetFontItalic(TRUE);
-        else
-            m_WParser -> SetFontFixed(TRUE);
+        int underlined = m_WParser -> GetFontUnderlined();
+
+        m_WParser -> SetFontUnderlined(TRUE);
         m_WParser -> GetContainer() -> InsertCell(new wxHtmlFontCell(m_WParser -> CreateCurrentFont()));
 
         ParseInner(tag);
 
         m_WParser -> SetFontUnderlined(underlined);
+        m_WParser -> GetContainer() -> InsertCell(new wxHtmlFontCell(m_WParser -> CreateCurrentFont()));
+        return TRUE;
+    }
+
+TAG_HANDLER_END(FACES_U)
+
+
+
+
+TAG_HANDLER_BEGIN(FACES_B, "B,STRONG")
+
+    TAG_HANDLER_PROC(tag)
+    {
+        int bold = m_WParser -> GetFontBold();
+
+        m_WParser -> SetFontBold(TRUE);
+        m_WParser -> GetContainer() -> InsertCell(new wxHtmlFontCell(m_WParser -> CreateCurrentFont()));
+
+        ParseInner(tag);
+
         m_WParser -> SetFontBold(bold);
+        m_WParser -> GetContainer() -> InsertCell(new wxHtmlFontCell(m_WParser -> CreateCurrentFont()));
+        return TRUE;
+    }
+
+TAG_HANDLER_END(FACES_B)
+
+
+
+
+TAG_HANDLER_BEGIN(FACES_I, "I,EM,CITE,ADDRESS")
+
+    TAG_HANDLER_PROC(tag)
+    {
+        int italic = m_WParser -> GetFontItalic();
+
+        m_WParser -> SetFontItalic(TRUE);
+        m_WParser -> GetContainer() -> InsertCell(new wxHtmlFontCell(m_WParser -> CreateCurrentFont()));
+
+        ParseInner(tag);
+
         m_WParser -> SetFontItalic(italic);
+        m_WParser -> GetContainer() -> InsertCell(new wxHtmlFontCell(m_WParser -> CreateCurrentFont()));
+        return TRUE;
+    }
+
+TAG_HANDLER_END(FACES_I)
+
+
+
+
+TAG_HANDLER_BEGIN(FACES_TT, "TT,CODE,KBD,SAMP")
+
+    TAG_HANDLER_PROC(tag)
+    {
+        int fixed = m_WParser -> GetFontFixed();
+
+        m_WParser -> SetFontFixed(TRUE);
+        m_WParser -> GetContainer() -> InsertCell(new wxHtmlFontCell(m_WParser -> CreateCurrentFont()));
+
+        ParseInner(tag);
+
         m_WParser -> SetFontFixed(fixed);
         m_WParser -> GetContainer() -> InsertCell(new wxHtmlFontCell(m_WParser -> CreateCurrentFont()));
         return TRUE;
     }
 
-TAG_HANDLER_END(FACES)
+TAG_HANDLER_END(FACES_TT)
 
 
 
@@ -125,21 +206,21 @@ TAG_HANDLER_BEGIN(Hx, "H1,H2,H3,H4,H5,H6")
         m_WParser -> SetFontUnderlined(FALSE);
         m_WParser -> SetFontFixed(FALSE);
 
-             if (tag.GetName() == "H1")
-                m_WParser -> SetFontSize(+4);
-        else if (tag.GetName() == "H2")
-                m_WParser -> SetFontSize(+3);
-        else if (tag.GetName() == "H3")
-                m_WParser -> SetFontSize(+2);
-        else if (tag.GetName() == "H4") {
-                m_WParser -> SetFontSize(+2);
+        if (tag.GetName() == wxT("H1"))
+                m_WParser -> SetFontSize(7);
+        else if (tag.GetName() == wxT("H2"))
+                m_WParser -> SetFontSize(6);
+        else if (tag.GetName() == wxT("H3"))
+                m_WParser -> SetFontSize(5);
+        else if (tag.GetName() == wxT("H4")) {
+                m_WParser -> SetFontSize(5);
                 m_WParser -> SetFontItalic(TRUE);
                 m_WParser -> SetFontBold(FALSE);
         }
-        else if (tag.GetName() == "H5")
-                m_WParser -> SetFontSize(+1);
-        else if (tag.GetName() == "H6") {
-                m_WParser -> SetFontSize(+1);
+        else if (tag.GetName() == wxT("H5"))
+                m_WParser -> SetFontSize(4);
+        else if (tag.GetName() == wxT("H6")) {
+                m_WParser -> SetFontSize(4);
                 m_WParser -> SetFontItalic(TRUE);
                 m_WParser -> SetFontBold(FALSE);
         }
@@ -154,7 +235,7 @@ TAG_HANDLER_BEGIN(Hx, "H1,H2,H3,H4,H5,H6")
 
         c -> SetAlign(tag);
         c -> InsertCell(new wxHtmlFontCell(m_WParser -> CreateCurrentFont()));
-        c -> SetIndent(m_WParser -> GetCharHeight(), HTML_INDENT_TOP);
+        c -> SetIndent(m_WParser -> GetCharHeight(), wxHTML_INDENT_TOP);
         m_WParser -> SetAlign(c -> GetAlignHor());
 
         ParseInner(tag);
@@ -170,7 +251,7 @@ TAG_HANDLER_BEGIN(Hx, "H1,H2,H3,H4,H5,H6")
         m_WParser -> CloseContainer();
         m_WParser -> OpenContainer();
         c = m_WParser -> GetContainer();
-        c -> SetIndent(m_WParser -> GetCharHeight(), HTML_INDENT_TOP);
+        c -> SetIndent(m_WParser -> GetCharHeight(), wxHTML_INDENT_TOP);
 
         return TRUE;
     }
@@ -178,13 +259,37 @@ TAG_HANDLER_BEGIN(Hx, "H1,H2,H3,H4,H5,H6")
 TAG_HANDLER_END(Hx)
 
 
+TAG_HANDLER_BEGIN(BIGSMALL, "BIG,SMALL")
+
+    TAG_HANDLER_PROC(tag)
+    {
+        int oldsize = m_WParser -> GetFontSize();
+        int sz = (tag.GetName() == wxT("BIG")) ? +1 : -1;
+
+        m_WParser -> SetFontSize(sz);
+        m_WParser -> GetContainer() -> InsertCell(new wxHtmlFontCell(m_WParser -> CreateCurrentFont()));
+
+        ParseInner(tag);
+
+        m_WParser -> SetFontSize(oldsize);
+        m_WParser -> GetContainer() -> InsertCell(new wxHtmlFontCell(m_WParser -> CreateCurrentFont()));
+        return TRUE;
+    }
+
+TAG_HANDLER_END(BIGSMALL)
+
+
 
 
 TAGS_MODULE_BEGIN(Fonts)
 
     TAGS_MODULE_ADD(FONT)
-    TAGS_MODULE_ADD(FACES)
+    TAGS_MODULE_ADD(FACES_U)
+    TAGS_MODULE_ADD(FACES_I)
+    TAGS_MODULE_ADD(FACES_B)
+    TAGS_MODULE_ADD(FACES_TT)
     TAGS_MODULE_ADD(Hx)
+    TAGS_MODULE_ADD(BIGSMALL)
 
 TAGS_MODULE_END(Fonts)