]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/richedit/wxlparser.cpp
Fixes to allow compilation with no wchar_t (djgpp probably has a real wchar_t
[wxWidgets.git] / samples / richedit / wxlparser.cpp
index 316247bfc0004c27c084da7663347e8d98ebd246..c5705745a4c3278fc8d4207f29cc3b741875a6ad 100644 (file)
@@ -10,7 +10,7 @@
 #   pragma implementation "wxlparser.h"
 #endif
 
 #   pragma implementation "wxlparser.h"
 #endif
 
-#include <wx/wxprec.h>
+#include "wx/wxprec.h"
 
 #ifdef __BORLANDC__
 #  pragma hdrstop
 
 #ifdef __BORLANDC__
 #  pragma hdrstop
@@ -28,7 +28,7 @@
 
 #define   BASE_SIZE 12
 
 
 #define   BASE_SIZE 12
 
-inline static bool IsEndOfLine(const char *p)
+inline static bool IsEndOfLine(const wxChar *p)
 {
    // the end of line is either just '\n' or "\r\n" - we understand both (even
    // though the second is used only under DOS/Windows) to be able to import
 {
    // the end of line is either just '\n' or "\r\n" - we understand both (even
    // though the second is used only under DOS/Windows) to be able to import
@@ -41,12 +41,12 @@ void wxLayoutImportText(wxLayoutList *list, wxString const &str)
    if ( !str )
       return;
 
    if ( !str )
       return;
 
-   // we change the string temporarily inside this function
-   wxString& s = (wxString &)str; // const_cast
-
-   char * cptr = s.GetWriteBuf(s.Len());
-   const char * begin = cptr;
-   char  backup;
+   // we change the string only temporarily inside this function
+   // VZ: I still don't like it... the string data may be shared...
+   wxChar * cptr = (wxChar *)str.c_str(); // const_cast
+   const wxChar * begin = cptr;
+   wxUnusedVar(begin);
+   wxChar  backup;
 
    for(;;)
    {
 
    for(;;)
    {
@@ -70,34 +70,33 @@ void wxLayoutImportText(wxLayoutList *list, wxString const &str)
          break;
       cptr++;
    }
          break;
       cptr++;
    }
-
-   s.UngetWriteBuf();
 }
 
 static
 wxString wxLayoutExportCmdAsHTML(wxLayoutObjectCmd const & cmd,
 }
 
 static
 wxString wxLayoutExportCmdAsHTML(wxLayoutObjectCmd const & cmd,
-                                 wxLayoutStyleInfo *styleInfo)
+                                 wxLayoutStyleInfo *styleInfo,
+                                 bool firstTime)
 {
 {
-   static char buffer[20];
+   static wxChar buffer[20];
    wxString html;
 
    wxLayoutStyleInfo *si = cmd.GetStyle();
 
    int size, sizecount;
 
    wxString html;
 
    wxLayoutStyleInfo *si = cmd.GetStyle();
 
    int size, sizecount;
 
-   html += "<font ";
+   html += _T("<font ");
 
    if(si->m_fg_valid)
    {
 
    if(si->m_fg_valid)
    {
-      html +="color=";
-      sprintf(buffer,"\"#%02X%02X%02X\"", si->m_fg.Red(),si->m_fg.Green(),si->m_fg.Blue());
+      html += _T("color=");
+      wxSprintf(buffer,_T("\"#%02X%02X%02X\""), si->m_fg.Red(),si->m_fg.Green(),si->m_fg.Blue());
       html += buffer;
    }
 
    if(si->m_bg_valid)
    {
       html += buffer;
    }
 
    if(si->m_bg_valid)
    {
-      html += " bgcolor=";
-      sprintf(buffer,"\"#%02X%02X%02X\"", si->m_bg.Red(),si->m_bg.Green(),si->m_bg.Blue());
+      html += _T(" bgcolor=");
+      wxSprintf(buffer,_T("\"#%02X%02X%02X\""), si->m_bg.Red(),si->m_bg.Green(),si->m_bg.Blue());
       html += buffer;
    }
 
       html += buffer;
    }
 
@@ -105,11 +104,11 @@ wxString wxLayoutExportCmdAsHTML(wxLayoutObjectCmd const & cmd,
    {
    case wxSWISS:
    case wxMODERN:
    {
    case wxSWISS:
    case wxMODERN:
-      html += " face=\"Arial,Helvetica\""; break;
+      html += _T(" face=\"Arial,Helvetica\""); break;
    case wxROMAN:
    case wxROMAN:
-      html += " face=\"Times New Roman, Times\""; break;
+      html += _T(" face=\"Times New Roman, Times\""); break;
    case wxTELETYPE:
    case wxTELETYPE:
-      html += " face=\"Courier New, Courier\""; break;
+      html += _T(" face=\"Courier New, Courier\""); break;
    default:
       ;
    }
    default:
       ;
    }
@@ -125,34 +124,34 @@ wxString wxLayoutExportCmdAsHTML(wxLayoutObjectCmd const & cmd,
       sizecount --;
       size = (size*10)/12;
    }
       sizecount --;
       size = (size*10)/12;
    }
-   html += "size=";
-   sprintf(buffer,"%+1d", sizecount);
+   html += _T("size=");
+   wxSprintf(buffer,_T("%+1d"), sizecount);
    html += buffer;
 
    html += buffer;
 
-   html +=">";
+   html += _T(">");
 
 
-   if(styleInfo != NULL)
-      html ="</font>"+html; // terminate any previous font command
+   if(styleInfo != NULL && ! firstTime)
+      html = _T("</font>")+html; // terminate any previous font command
 
    if((si->weight == wxBOLD) && ( (!styleInfo) || (styleInfo->weight != wxBOLD)))
 
    if((si->weight == wxBOLD) && ( (!styleInfo) || (styleInfo->weight != wxBOLD)))
-      html += "<b>";
+      html += _T("<b>");
    else
       if(si->weight != wxBOLD && ( styleInfo && (styleInfo->weight == wxBOLD)))
    else
       if(si->weight != wxBOLD && ( styleInfo && (styleInfo->weight == wxBOLD)))
-         html += "</b>";
+         html += _T("</b>");
 
    if(si->style == wxSLANT)
       si->style = wxITALIC; // the same for html
 
    if((si->style == wxITALIC) && ( (!styleInfo) || (styleInfo->style != wxITALIC)))
 
    if(si->style == wxSLANT)
       si->style = wxITALIC; // the same for html
 
    if((si->style == wxITALIC) && ( (!styleInfo) || (styleInfo->style != wxITALIC)))
-      html += "<i>";
+      html += _T("<i>");
    else
       if(si->style != wxITALIC && ( styleInfo && (styleInfo->style == wxITALIC)))
    else
       if(si->style != wxITALIC && ( styleInfo && (styleInfo->style == wxITALIC)))
-         html += "</i>";
+         html += _T("</i>");
 
    if(si->underline && ( (!styleInfo) || ! styleInfo->underline))
 
    if(si->underline && ( (!styleInfo) || ! styleInfo->underline))
-      html += "<u>";
+      html += _T("<u>");
    else if(si->underline == false && ( styleInfo && styleInfo->underline))
    else if(si->underline == false && ( styleInfo && styleInfo->underline))
-      html += "</u>";
+      html += _T("</u>");
 
 
    *styleInfo = *si; // update last style info
 
 
    *styleInfo = *si; // update last style info
@@ -167,6 +166,7 @@ wxLayoutExportStatus::wxLayoutExportStatus(wxLayoutList *list)
    m_si = list->GetDefaultStyleInfo();
    m_line = list->GetFirstLine();
    m_iterator = m_line->GetFirstObject();
    m_si = list->GetDefaultStyleInfo();
    m_line = list->GetFirstLine();
    m_iterator = m_line->GetFirstObject();
+   m_FirstTime = true;
 }
 
 
 }
 
 
@@ -180,53 +180,55 @@ wxLayoutExportStatus::wxLayoutExportStatus(wxLayoutList *list)
 wxLayoutExportObject *wxLayoutExport(wxLayoutExportStatus *status,
                                      int mode, int flags)
 {
 wxLayoutExportObject *wxLayoutExport(wxLayoutExportStatus *status,
                                      int mode, int flags)
 {
+   wxLayoutObjectList::iterator nulled(NULL);
    wxASSERT(status);
    wxASSERT(status);
-   wxLayoutExportObject * export;
+   wxLayoutExportObject * exp;
 
 
-   if(status->m_iterator == NULLIT) // end of line
+   if(status->m_iterator == nulled) // end of line
    {
       if(!status->m_line || status->m_line->GetNextLine() == NULL)
          // reached end of list
          return NULL;
    }
    {
       if(!status->m_line || status->m_line->GetNextLine() == NULL)
          // reached end of list
          return NULL;
    }
-   export = new wxLayoutExportObject();
+   exp = new wxLayoutExportObject();
    wxLayoutObjectType type;
    wxLayoutObjectType type;
-   if(status->m_iterator != NULLIT)
+   if(status->m_iterator != nulled)
    {
       type = (** status->m_iterator).GetType();
       if( mode == WXLO_EXPORT_AS_OBJECTS || ! WXLO_IS_TEXT(type)) // simple case
       {
    {
       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++;
          status->m_iterator++;
-         return export;
+         return exp;
       }
    }
    else
       }
    }
    else
-   {  // iterator == NULLIT
+   {  // iterator == nulled
       if(mode == WXLO_EXPORT_AS_OBJECTS)
       {
       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();
          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;
    }
       }
       else
          type = WXLO_TYPE_TEXT;
    }
+   wxUnusedVar(type);
 
    wxString *str = new wxString();
    // text must be concatenated
    for(;;)
    {
 
    wxString *str = new wxString();
    // text must be concatenated
    for(;;)
    {
-      while(status->m_iterator == NULLIT)
+      while(status->m_iterator == nulled)
       {
       {
-         if(flags & WXLO_EXPORT_AS_HTML)
-            *str += "<br>";
+         if(mode & WXLO_EXPORT_AS_HTML)
+            *str += _T("<br>");
          if(flags & WXLO_EXPORT_WITH_CRLF)
          if(flags & WXLO_EXPORT_WITH_CRLF)
-            *str += "\r\n";
+            *str += _T("\r\n");
          else
             *str += '\n';
 
          else
             *str += '\n';
 
@@ -248,18 +250,19 @@ wxLayoutExportObject *wxLayoutExport(wxLayoutExportStatus *status,
          break;
       case WXLO_TYPE_CMD:
          if(mode == WXLO_EXPORT_AS_HTML)
          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++;
    }
          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;
       ?  WXLO_EXPORT_HTML : WXLO_EXPORT_TEXT;
-   export->content.text = str;
-   return export;
+   exp->content.text = str;
+   return exp;
 }
 
 }