]> git.saurik.com Git - wxWidgets.git/blobdiff - src/html/m_pre.cpp
[ 1563875 ] wxTreeCtrl::FindItem asserts when item not found
[wxWidgets.git] / src / html / m_pre.cpp
index 3e9d05db2c515ece44e6d9b5428e728058713b6c..675d916321d83829df17a55e1acd3193f3b0ae8b 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
-// Name:        m_pre.cpp
+// Name:        src/html/m_pre.cpp
 // Purpose:     wxHtml module for <PRE> ... </PRE> tag (code citation)
 // Author:      Vaclav Slavik
 // RCS-ID:      $Id$
@@ -7,18 +7,14 @@
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-#pragma implementation
-#endif
-
 #include "wx/wxprec.h"
 
-#include "wx/defs.h"
-#if wxUSE_HTML && wxUSE_STREAMS
 #ifdef __BORLANDC__
-#pragma hdrstop
+    #pragma hdrstop
 #endif
 
+#if wxUSE_HTML && wxUSE_STREAMS
+
 #ifndef WXPRECOMP
 #endif
 
@@ -36,29 +32,38 @@ static wxString LINKAGEMODE HtmlizeWhitespaces(const wxString& str)
 {
     wxString out;
     size_t len = str.Len();
+    size_t linepos = 0;
     for (size_t i = 0; i < len; i++)
     {
         switch (str[i])
         {
             case wxT('<'):
                 while (i < len && str[i] != wxT('>'))
+                {
                     out << str[i++];
+                    linepos++;
+                }
                 out << wxT('>');
+                linepos++;
                 break;
             case wxT(' '):
                 out << wxT("&nbsp;");
+                linepos++;
                 break;
             case wxT('\n'):
                 out << wxT("<br>");
+                linepos = 0;
                 break;
             case wxT('\t'):
                 {
-                    for (size_t j = 8 - i%8; j > 0; j--)
+                    for (size_t j = 8 - linepos % 8; j > 0; j--)
                         out << wxT("&nbsp;");
+                    linepos += 8 - linepos % 8;
                 }
                 break;
             default:
                 out << str[i];
+                linepos++;
                 break;
         }
     }
@@ -85,10 +90,10 @@ TAG_HANDLER_BEGIN(PRE, "PRE")
             fsize = m_WParser->GetFontSize();
 
         c = m_WParser->GetContainer();
-        m_WParser->SetFontUnderlined(FALSE);
-        m_WParser->SetFontBold(FALSE);
-        m_WParser->SetFontItalic(FALSE);
-        m_WParser->SetFontFixed(TRUE);
+        m_WParser->SetFontUnderlined(false);
+        m_WParser->SetFontBold(false);
+        m_WParser->SetFontItalic(false);
+        m_WParser->SetFontFixed(true);
         m_WParser->SetFontSize(3);
         c->InsertCell(new wxHtmlFontCell(m_WParser->CreateCurrentFont()));
 
@@ -99,14 +104,8 @@ TAG_HANDLER_BEGIN(PRE, "PRE")
         c->SetAlignHor(wxHTML_ALIGN_LEFT);
         c->SetIndent(m_WParser->GetCharHeight(), wxHTML_INDENT_TOP);
 
-        wxString srcMid =
-            m_WParser->GetSource()->Mid(tag.GetBeginPos(),
-                                        tag.GetEndPos1() - tag.GetBeginPos());
-        // It is safe to temporarily change the source being parsed,
-        // provided we restore the state back after parsing
-        m_Parser->SetSourceAndSaveState(HtmlizeWhitespaces(srcMid));
-        m_Parser->DoParsing();
-        m_Parser->RestoreState();
+        wxString srcMid = m_WParser->GetInnerSource(tag);
+        ParseInnerSource(HtmlizeWhitespaces(srcMid));
 
         m_WParser->CloseContainer();
         m_WParser->CloseContainer();
@@ -119,7 +118,7 @@ TAG_HANDLER_BEGIN(PRE, "PRE")
         m_WParser->SetFontSize(fsize);
         c->InsertCell(new wxHtmlFontCell(m_WParser->CreateCurrentFont()));
 
-        return TRUE;
+        return true;
     }
 
 TAG_HANDLER_END(PRE)