[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