[Aptitude-svn-commit] r3469 - in branches/aptitude-0.3/aptitude: . src/vscreen

Daniel Burrows dburrows@costa.debian.org
Sun, 26 Jun 2005 17:41:40 +0000


Author: dburrows
Date: Sun Jun 26 17:41:38 2005
New Revision: 3469

Modified:
   branches/aptitude-0.3/aptitude/ChangeLog
   branches/aptitude-0.3/aptitude/src/vscreen/transcode.cc
   branches/aptitude-0.3/aptitude/src/vscreen/transcode.h
Log:
Implement the simpler transcoder.

Modified: branches/aptitude-0.3/aptitude/ChangeLog
==============================================================================
--- branches/aptitude-0.3/aptitude/ChangeLog	(original)
+++ branches/aptitude-0.3/aptitude/ChangeLog	Sun Jun 26 17:41:38 2005
@@ -1,5 +1,10 @@
 2005-06-26  Daniel Burrows  <dburrows@debian.org>
 
+	* src/vscreen/transcode.cc, src/vscreen/transcode.h:
+
+	  Implement the new transcoder, and fix some types in the
+	  header (oops).
+
 	* src/vscreen/vs_util.cc:
 
 	  Add explicit transcoding in the fallback routines.

Modified: branches/aptitude-0.3/aptitude/src/vscreen/transcode.cc
==============================================================================
--- branches/aptitude-0.3/aptitude/src/vscreen/transcode.cc	(original)
+++ branches/aptitude-0.3/aptitude/src/vscreen/transcode.cc	Sun Jun 26 17:41:38 2005
@@ -25,6 +25,29 @@
 
 using namespace std;
 
+static std::string default_wtomb_err(int error,
+				     const std::string &partial,
+				     const std::wstring &input)
+{
+  return partial;
+}
+
+static std::wstring default_mbtow_err(int error,
+				      const std::wstring &partial,
+				      const std::string &input)
+{
+  return partial;
+}
+
+std::string (*transcode_wtomb_err)(int error,
+				   const std::string &partial,
+				   const std::wstring &input)=default_wtomb_err;
+
+std::wstring (*transcode_mbtow_err)(int error,
+				    const std::wstring &partial,
+				    const std::string &input)=default_mbtow_err;
+
+
 /** Does the dirty iconv work, given that an iconv session has been
  *  opened and we want to fully decode the "inbuf".  If the outbuf
  *  isn't large enough, it will be repeatedly doubled.
@@ -144,6 +167,23 @@
   return rval;
 }
 
+std::wstring transcode(const std::string &s,
+		       const char *encoding,
+		       std::wstring (*errf)(int error,
+					    const std::wstring &partial,
+					    const std::string &input))
+{
+  std::wstring rval;
+  if(transcode(s, rval, encoding))
+    return rval;
+  else
+    {
+      if(errf == NULL)
+	errf=transcode_mbtow_err;
+      return errf(errno, rval, s);
+    }
+}
+
 bool transcode(const wchar_t *s,
 	       string &out,
 	       const char *encoding)
@@ -176,3 +216,20 @@
 
   return rval;
 }
+
+std::string transcode(const std::wstring &s,
+		      const char *encoding,
+		      std::string (*errf)(int error,
+					  const std::string &partial,
+					  const std::wstring &input))
+{
+  std::string rval;
+  if(transcode(s, rval, encoding))
+    return rval;
+  else
+    {
+      if(errf == NULL)
+	errf=transcode_wtomb_err;
+      return errf(errno, rval, s);
+    }
+}

Modified: branches/aptitude-0.3/aptitude/src/vscreen/transcode.h
==============================================================================
--- branches/aptitude-0.3/aptitude/src/vscreen/transcode.h	(original)
+++ branches/aptitude-0.3/aptitude/src/vscreen/transcode.h	Sun Jun 26 17:41:38 2005
@@ -102,9 +102,9 @@
  *  code, and its return value becomes the return value of the
  *  function.  The default handler just returns "partial".
  */
-extern std::wstring (*transcode_wtomb_err)(int error,
-					   const std::wstring &partial,
-					   const std::string &input);
+extern std::string (*transcode_wtomb_err)(int error,
+					  const std::string &partial,
+					  const std::wstring &input);
 
 /** Convenience function to convert a multibyte encoding to wide
  *  characters, where the caller doesn't need to directly handle
@@ -121,7 +121,7 @@
 std::string transcode(const std::wstring &s,
 		      const char *encoding=NULL,
 		      std::string (*errf)(int error,
-					  const std::wstring &partial,
-					  const std::string &input)=NULL);
+					  const std::string &partial,
+					  const std::wstring &input)=NULL);
 
 #endif // TRANSCODE_H