Blob Blame History Raw

Convert output to user's locale charset.
Index: html2text-1.3.2a/html2text.C
===================================================================
--- html2text-1.3.2a.orig/html2text.C	2008-09-20 14:09:32.009308515 +0300
+++ html2text-1.3.2a/html2text.C	2008-09-20 14:09:40.133207014 +0300
@@ -45,6 +45,7 @@
 
 #include <iconv.h>
 #include <errno.h>
+#include <langinfo.h>
 
 #include "html.h"
 #include "HTMLControl.h"
@@ -59,6 +60,7 @@
 using std::stringstream;
 using std::istream_iterator;
 using std::ostream_iterator;
+using std::noskipws;
 
 class MyParser : public HTMLControl {
 
@@ -474,7 +476,7 @@
 		uis = infile;
     }
 
-	*uis >> std::noskipws;
+	*uis >> noskipws;
 	std::copy(istream_iterator<char>(*uis), istream_iterator<char>(), ostream_iterator<char>(input_stream));
 
 	if (infile)
@@ -547,6 +549,8 @@
 	// real parsing now always process UTF-8
 	use_encoding = UTF8;
 
+	stringstream output_stream;
+
 	// real parsing
 	input_stream.clear();
 	input_stream.seekg(0);
@@ -554,13 +558,28 @@
 	  input_stream,
 	  debug_scanner,
 	  debug_parser,
-	  *osp,
+	  output_stream,
 	  mode,
 	  width,
 	  input_url
 	);
     if (parser.yyparse() != 0) exit(1);
 
+	// recode output
+	setlocale(LC_CTYPE,"");
+	char output_encoding[64];
+	strcpy(output_encoding, nl_langinfo(CODESET));
+	strcat(output_encoding, "//translit");
+
+	result = recode(output_stream, output_encoding, "UTF-8");
+	if (!result)
+	{
+		continue;
+	}
+	output_stream.clear();
+	output_stream.seekg(0);
+	output_stream >> noskipws;
+	std::copy(istream_iterator<char>(output_stream), istream_iterator<char>(), ostream_iterator<char>(*osp));
   }
 
   return 0;