]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/richedit/wxlparser.cpp
Further wxUniv fixes
[wxWidgets.git] / samples / richedit / wxlparser.cpp
index 316247bfc0004c27c084da7663347e8d98ebd246..d666c16fa2ffb85b4670a4ce9c736a0ab6d23f6a 100644 (file)
@@ -41,10 +41,9 @@ void wxLayoutImportText(wxLayoutList *list, wxString const &str)
    if ( !str )
       return;
 
-   // we change the string temporarily inside this function
-   wxString& s = (wxString &)str; // const_cast
-
-   char * cptr = s.GetWriteBuf(s.Len());
+   // we change the string only temporarily inside this function
+   // VZ: I still don't like it... the string data may be shared...
+   char * cptr = (char *)str.c_str(); // const_cast
    const char * begin = cptr;
    char  backup;
 
@@ -70,13 +69,12 @@ void wxLayoutImportText(wxLayoutList *list, wxString const &str)
          break;
       cptr++;
    }
-
-   s.UngetWriteBuf();
 }
 
 static
 wxString wxLayoutExportCmdAsHTML(wxLayoutObjectCmd const & cmd,
-                                 wxLayoutStyleInfo *styleInfo)
+                                 wxLayoutStyleInfo *styleInfo,
+                                 bool firstTime)
 {
    static char buffer[20];
    wxString html;
@@ -131,7 +129,7 @@ wxString wxLayoutExportCmdAsHTML(wxLayoutObjectCmd const & cmd,
 
    html +=">";
 
-   if(styleInfo != NULL)
+   if(styleInfo != NULL && ! firstTime)
       html ="</font>"+html; // terminate any previous font command
 
    if((si->weight == wxBOLD) && ( (!styleInfo) || (styleInfo->weight != wxBOLD)))
@@ -167,6 +165,7 @@ wxLayoutExportStatus::wxLayoutExportStatus(wxLayoutList *list)
    m_si = list->GetDefaultStyleInfo();
    m_line = list->GetFirstLine();
    m_iterator = m_line->GetFirstObject();
+   m_FirstTime = TRUE;
 }
 
 
@@ -181,7 +180,7 @@ wxLayoutExportObject *wxLayoutExport(wxLayoutExportStatus *status,
                                      int mode, int flags)
 {
    wxASSERT(status);
-   wxLayoutExportObject * export;
+   wxLayoutExportObject * exp;
 
    if(status->m_iterator == NULLIT) // end of line
    {
@@ -189,29 +188,29 @@ wxLayoutExportObject *wxLayoutExport(wxLayoutExportStatus *status,
          // reached end of list
          return NULL;
    }
-   export = new wxLayoutExportObject();
+   exp = new wxLayoutExportObject();
    wxLayoutObjectType type;
    if(status->m_iterator != NULLIT)
    {
       type = (** status->m_iterator).GetType();
       if( mode == WXLO_EXPORT_AS_OBJECTS || ! WXLO_IS_TEXT(type)) // simple case
       {
-         export->type = WXLO_EXPORT_OBJECT;
-         export->content.object = *status->m_iterator;
+         exp->type = WXLO_EXPORT_OBJECT;
+         exp->content.object = *status->m_iterator;
          status->m_iterator++;
-         return export;
+         return exp;
       }
    }
    else
    {  // iterator == NULLIT
       if(mode == WXLO_EXPORT_AS_OBJECTS)
       {
-         export->type = WXLO_EXPORT_EMPTYLINE;
-         export->content.object = NULL; //empty line
+         exp->type = WXLO_EXPORT_EMPTYLINE;
+         exp->content.object = NULL; //empty line
          status->m_line = status->m_line->GetNextLine();
          if(status->m_line)
             status->m_iterator = status->m_line->GetFirstObject();
-         return export;
+         return exp;
       }
       else
          type = WXLO_TYPE_TEXT;
@@ -223,7 +222,7 @@ wxLayoutExportObject *wxLayoutExport(wxLayoutExportStatus *status,
    {
       while(status->m_iterator == NULLIT)
       {
-         if(flags & WXLO_EXPORT_AS_HTML)
+         if(mode & WXLO_EXPORT_AS_HTML)
             *str += "<br>";
          if(flags & WXLO_EXPORT_WITH_CRLF)
             *str += "\r\n";
@@ -248,18 +247,19 @@ wxLayoutExportObject *wxLayoutExport(wxLayoutExportStatus *status,
          break;
       case WXLO_TYPE_CMD:
          if(mode == WXLO_EXPORT_AS_HTML)
-            *str += wxLayoutExportCmdAsHTML(*(wxLayoutObjectCmd const
-                                              *)*status->m_iterator, & status->m_si);
+            *str += wxLayoutExportCmdAsHTML(
+               *(wxLayoutObjectCmd const *)*status->m_iterator,
+               & status->m_si, status->m_FirstTime);
+         status->m_FirstTime = FALSE;
          break;
       default:  // ignore icons
          ;
       }
       status->m_iterator++;
    }
-
-   export->type = (mode == WXLO_EXPORT_AS_HTML)
+   exp->type = (mode == WXLO_EXPORT_AS_HTML)
       ?  WXLO_EXPORT_HTML : WXLO_EXPORT_TEXT;
-   export->content.text = str;
-   return export;
+   exp->content.text = str;
+   return exp;
 }