From patchwork Thu Oct 20 07:11:38 2005 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oleg X-Patchwork-Id: 12064 Received: from 213-239-205-194.clients.your-server.de ([213.239.205.194] helo=free-x.de) by www.linuxtv.org with esmtp (Exim 4.50) id 1ESUaX-0007Z1-QJ for vdr@linuxtv.org; Thu, 20 Oct 2005 09:11:45 +0200 Received: by free-x.de (Postfix, from userid 106) id 69FC3C780C3; Thu, 20 Oct 2005 09:10:24 +0200 (CEST) Received: from [10.49.44.85] (site.lycos.de [193.155.140.132]) by free-x.de (Postfix) with ESMTP id 1139DC78016 for ; Thu, 20 Oct 2005 09:10:23 +0200 (CEST) From: Oleg To: vdr@linuxtv.org Date: Thu, 20 Oct 2005 09:11:38 +0200 User-Agent: KMail/1.8.2 MIME-Version: 1.0 Message-Id: <200510200911.39298.oleg@roitburd.de> X-Spam-Checker-Version: SpamAssassin 3.0.3 (2005-04-27) on debian X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=AWL autolearn=ham version=3.0.3 Subject: [vdr] burn-plugin: UTF converting X-BeenThere: vdr@linuxtv.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Klaus Schmidinger's VDR List-Id: Klaus Schmidinger's VDR List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 20 Oct 2005 07:11:45 -0000 Status: O X-Status: X-Keywords: X-UID: 5578 Hi, I wondered about converting to UTF8 ( EscapeLatin1toUTF8() ). What's about another codepages? Here is patch that must working for all cases.... Cheers Oleg diff -urN burn-0.0.6i/common.c burn-0.0.6i-patched/common.c --- burn-0.0.6i/common.c 2005-09-08 09:49:20.000000000 +0000 +++ burn-0.0.6i-patched/common.c 2005-09-16 12:17:04.000000000 +0000 @@ -11,6 +11,8 @@ #include "setup.h" #include #include +#include +#include const char *BurnStates[__STATE_COUNT__] = { "List", "Status" }; const char *DiskTypes[__TYPE_COUNT__] = { "DVD with menus", "DVD without menus", "Archive disk" }; @@ -154,3 +156,43 @@ *out = 0; return utf; } + +char *Convert2UTF(const char *Text) +{ + const char *f = I18nCharSet(Setup.OSDLanguage); + const char *from = MALLOC( char,11 ); + + if(!strcasecmp(f,"iso8859-1")) from = "ISO_8859-1"; + else if(!strcasecmp(f,"iso8859-2")) from = "ISO_8859-2"; + else if(!strcasecmp(f,"iso8859-3")) from = "ISO_8859-3"; + else if(!strcasecmp(f,"iso8859-4")) from = "ISO_8859-4"; + else if(!strcasecmp(f,"iso8859-5")) from = "ISO_8859-5"; + else if(!strcasecmp(f,"iso8859-6")) from = "ISO_8859-6"; + else if(!strcasecmp(f,"iso8859-7")) from = "ISO_8859-7"; + else if(!strcasecmp(f,"iso8859-8")) from = "ISO_8859-8"; + else if(!strcasecmp(f,"iso8859-9")) from = "ISO_8859-9"; + else if(!strcasecmp(f,"iso8859-10")) from = "ISO_8859-10"; + else if(!strcasecmp(f,"iso8859-11")) from = "ISO_8859-11"; + else if(!strcasecmp(f,"iso8859-12")) from = "ISO_8859-12"; + else if(!strcasecmp(f,"iso8859-13")) from = "ISO_8859-13"; + else if(!strcasecmp(f,"iso8859-14")) from = "ISO_8859-14"; + else if(!strcasecmp(f,"iso8859-15")) from = "ISO_8859-15"; + + iconv_t ic = iconv_open("UTF8", from ); + if(ic >= 0) { + size_t inbytesleft = sizeof(Text); + size_t outbytesleft; + size_t ret; + char *out= MALLOC(char, inbytesleft * 4 + 1);; + if( (ret=iconv(ic,(char**)&Text, &inbytesleft, &out, &outbytesleft)) >= 0 ) { + iconv_close(ic); + return out; + } + + } + else { + return (char*)Text; + } + +} + diff -urN burn-0.0.6i/common.h burn-0.0.6i-patched/common.h --- burn-0.0.6i/common.h 2005-05-10 14:47:04.000000000 +0000 +++ burn-0.0.6i-patched/common.h 2005-09-16 12:15:46.000000000 +0000 @@ -147,5 +147,6 @@ const tTrackInfoArray& FindTitleTracks(const char *Path); char *EscapeLatin1toUTF8(const char *Text); +char *Convert2UTF(const char *Text); #endif // VDR_BURN_COMMON_H diff -urN burn-0.0.6i/render.c burn-0.0.6i-patched/render.c --- burn-0.0.6i/render.c 2005-09-11 12:58:35.000000000 +0000 +++ burn-0.0.6i-patched/render.c 2005-09-16 12:14:38.000000000 +0000 @@ -233,14 +233,14 @@ DrawImage(mBackground, 0, 0); - next = EscapeLatin1toUTF8(tr("Next page")); - prev = EscapeLatin1toUTF8(tr("Previous page")); + next = Convert2UTF(tr("Next page")); + prev = Convert2UTF(tr("Previous page")); for (int i = p * MAXPAGETITLES, j = 0; i < min(p * MAXPAGETITLES + MAXPAGETITLES, mJob->Count()); ++i, ++j) { cBurnRecording *rec = mJob->Get(i); - char *name = EscapeLatin1toUTF8(rec->Name()); + char *name = Convert2UTF(rec->Name()); if (BurnSetup.RenderRecordingIndex) { char *indexedName; asprintf(&indexedName, "%d. %s", i+1, name); @@ -250,7 +250,7 @@ DrawText(name, 138, 124 + j * 40, 450, 30); free(name); } - char *name = EscapeLatin1toUTF8(mJob->Title()); + char *name = Convert2UTF(mJob->Title()); DrawText(name, 138, 52, 450, 30); free(name); @@ -348,13 +348,13 @@ DrawImage(mBackground, 0, 0); - stitle = EscapeLatin1toUTF8(tr("DESCRIPTION OF FILMTITLE")); - summary = EscapeLatin1toUTF8(mRecording->Summary() ? mRecording->Summary() + stitle = Convert2UTF(tr("DESCRIPTION OF FILMTITLE")); + summary = Convert2UTF(mRecording->Summary() ? mRecording->Summary() : mRecording->Name()); - play = EscapeLatin1toUTF8(tr("Play movie")); - back = EscapeLatin1toUTF8(tr("Back")); - next = EscapeLatin1toUTF8(tr("Next page")); - prev = EscapeLatin1toUTF8(tr("Previous page")); + play = Convert2UTF(tr("Play movie")); + back = Convert2UTF(tr("Back")); + next = Convert2UTF(tr("Next page")); + prev = Convert2UTF(tr("Previous page")); DrawText(stitle, 90, 52, 450, 30); lines = DrawText(summary, 90, 120, 450, 340, 0, lines);