]> git.saurik.com Git - wxWidgets.git/commitdiff
Unicodification of wxTextFile
authorVáclav Slavík <vslavik@fastmail.fm>
Mon, 6 Aug 2001 22:40:57 +0000 (22:40 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Mon, 6 Aug 2001 22:40:57 +0000 (22:40 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@11314 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/textfile.h
src/common/textfile.cpp

index ec93546696cc1a0b877c18839a8343b39763a9b5..6d902976d2abe22d5d70ff3f413fa716714659c2 100644 (file)
@@ -79,9 +79,9 @@ public:
     // same as Create() but with (another) file name
   bool Create(const wxString& strFile);
     // Open() also loads file in memory on success
-  bool Open();
+  bool Open(wxMBConv& conv = wxConvLibc);
     // same as Open() but with (another) file name
-  bool Open(const wxString& strFile);
+  bool Open(const wxString& strFile, wxMBConv& conv = wxConvLibc);
     // closes the file and frees memory, losing all changes
   bool Close();
     // is file currently opened?
@@ -135,7 +135,8 @@ public:
 
   // change the file on disk (default argument means "don't change type")
   // possibly in another format
-  bool Write(wxTextFileType typeNew = wxTextFileType_None);
+  bool Write(wxTextFileType typeNew = wxTextFileType_None,
+             wxMBConv& conv = wxConvLibc);
 
   // dtor
   ~wxTextFile();
@@ -146,7 +147,7 @@ private:
   wxTextFile& operator=(const wxTextFile&);
 
   // read the file in memory (m_file is supposed to be just opened)
-  bool Read();
+  bool Read(wxMBConv& conv);
 
   wxFile        m_file;     // current file
 
index 8dff698c9bc31a80057057b3f18729756ba50de2..ff284db4840046463b5cfaf028200f25a0f04d25 100644 (file)
@@ -189,14 +189,14 @@ bool wxTextFile::Create()
   }
 }
 
-bool wxTextFile::Open(const wxString& strFile)
+bool wxTextFile::Open(const wxString& strFile, wxMBConv& conv)
 {
   m_strFile = strFile;
 
-  return Open();
+  return Open(conv);
 }
 
-bool wxTextFile::Open()
+bool wxTextFile::Open(wxMBConv& conv)
 {
   // file name must be either given in ctor or in Open(const wxString&)
   wxASSERT( !m_strFile.IsEmpty() );
@@ -206,7 +206,7 @@ bool wxTextFile::Open()
     return FALSE;
 
   // read file into memory
-  m_isOpened = Read();
+  m_isOpened = Read(conv);
 
   m_file.Close();
 
@@ -221,8 +221,8 @@ wxTextFileType wxTextFile::GuessType() const
 
   // scan the file lines
   size_t nUnix = 0,     // number of '\n's alone
-       nDos  = 0,     // number of '\r\n'
-       nMac  = 0;     // number of '\r's
+         nDos  = 0,     // number of '\r\n'
+         nMac  = 0;     // number of '\r's
 
   // we take MAX_LINES_SCAN in the beginning, middle and the end of file
   #define MAX_LINES_SCAN    (10)
@@ -248,7 +248,7 @@ wxTextFileType wxTextFile::GuessType() const
   #undef   AnalyseLine
 
   // interpret the results (FIXME far from being even 50% fool proof)
-  if ( nDos + nUnix + nMac == 0 ) {
+  if ( nScan > 0 && nDos + nUnix + nMac == 0 ) {
     // no newlines at all
     wxLogWarning(_("'%s' is probably a binary file."), m_strFile.c_str());
   }
@@ -276,11 +276,19 @@ wxTextFileType wxTextFile::GuessType() const
   return typeDefault;
 }
 
-bool wxTextFile::Read()
+bool wxTextFile::Read(wxMBConv& conv)
 {
   // file should be opened and we must be in it's beginning
   wxASSERT( m_file.IsOpened() && m_file.Tell() == 0 );
 
+#if wxUSE_UNICODE
+  char conv_mbBuf[2];
+  wchar_t conv_wcBuf[2];
+  conv_mbBuf[1] = 0;
+#else
+  (void)conv;
+#endif
+
   wxString str;
   char ch, chLast = '\0';
   char buf[1024];
@@ -320,11 +328,23 @@ bool wxTextFile::Read()
             m_aLines.Add(str);
             m_aTypes.Add(wxTextFileType_Mac);
             chLast = ch;
+#if wxUSE_UNICODE
+            if (conv.MB2WC(conv_wcBuf, conv_mbBuf, 2) == (size_t)-1)
+                conv_wcBuf[0] = ch;
+            str = conv_wcBuf[0];
+#else
             str = ch;
+#endif
           }
           else {
             // add to the current line
+#if wxUSE_UNICODE
+            if (conv.MB2WC(conv_wcBuf, conv_mbBuf, 2) == (size_t)-1)
+                conv_wcBuf[0] = ch;
+            str += conv_wcBuf[0];
+#else
             str += ch;
+#endif
           }
       }
     }
@@ -349,7 +369,7 @@ bool wxTextFile::Close()
     return TRUE;
 }
 
-bool wxTextFile::Write(wxTextFileType typeNew)
+bool wxTextFile::Write(wxTextFileType typeNew, wxMBConv& conv)
 {
   wxTempFile fileTmp(m_strFile);
 
@@ -362,7 +382,7 @@ bool wxTextFile::Write(wxTextFileType typeNew)
   for ( size_t n = 0; n < nCount; n++ ) {
     fileTmp.Write(m_aLines[n] +
                   GetEOL(typeNew == wxTextFileType_None ? m_aTypes[n]
-                                                        : typeNew));
+                                                        : typeNew), conv);
   }
 
   // replace the old file with this one