From 1c7fee465aae2f652e7e353d0728ba3521a6bcfa Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Mon, 23 Jul 2012 11:02:30 +0000 Subject: [PATCH] 2012-07-23 13:00 UTC+0200 Viktor Szakats (harbour syenar.net) + src/rtl/langcomp.prg * src/rtl/langapi.c * src/rtl/Makefile + added compatibility layer to HB_LANGSELECT() that dynamically generates language modules for legacy codepages from the UTF-8 codepages. ; TODO: Move this layer to C level (I need help) ; TODO: Delete legacy codepages ; TODO: Resolve language modules with missing codepage modules (ideally by implementing the option to chose from real codepages directly) --- harbour/ChangeLog | 13 ++++ harbour/src/rtl/Makefile | 1 + harbour/src/rtl/langapi.c | 2 +- harbour/src/rtl/langcomp.prg | 134 +++++++++++++++++++++++++++++++++++ 4 files changed, 149 insertions(+), 1 deletion(-) create mode 100644 harbour/src/rtl/langcomp.prg diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 5756bc821e..36c8a91655 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -16,6 +16,19 @@ The license applies to all entries newer than 2009-04-28. */ +2012-07-23 13:00 UTC+0200 Viktor Szakats (harbour syenar.net) + + src/rtl/langcomp.prg + * src/rtl/langapi.c + * src/rtl/Makefile + + added compatibility layer to HB_LANGSELECT() that + dynamically generates language modules for legacy + codepages from the UTF-8 codepages. + ; TODO: Move this layer to C level (I need help) + ; TODO: Delete legacy codepages + ; TODO: Resolve language modules with missing codepage modules + (ideally by implementing the option to chose from + real codepages directly) + 2012-07-23 11:43 UTC+0200 Viktor Szakats (harbour syenar.net) * src/lang/msgcsutf.c * src/lang/msgelutf.c diff --git a/harbour/src/rtl/Makefile b/harbour/src/rtl/Makefile index 130225c383..cb7e16ac30 100644 --- a/harbour/src/rtl/Makefile +++ b/harbour/src/rtl/Makefile @@ -239,6 +239,7 @@ PRG_SOURCES := \ hbi18n2.prg \ hbini.prg \ input.prg \ + langcomp.prg \ libname.prg \ listbox.prg \ memoedit.prg \ diff --git a/harbour/src/rtl/langapi.c b/harbour/src/rtl/langapi.c index 6d40ce9956..13f38bd863 100644 --- a/harbour/src/rtl/langapi.c +++ b/harbour/src/rtl/langapi.c @@ -449,7 +449,7 @@ const char * hb_langDGetErrorDesc( int iIndex ) /* Harbour interface */ -HB_FUNC( HB_LANGSELECT ) +HB_FUNC( __HB_LANGSELECT ) { const char * szNewLang; diff --git a/harbour/src/rtl/langcomp.prg b/harbour/src/rtl/langcomp.prg new file mode 100644 index 0000000000..7e03125fd4 --- /dev/null +++ b/harbour/src/rtl/langcomp.prg @@ -0,0 +1,134 @@ +/* + * $Id$ + */ + +/* + * Harbour Project source code: + * The Language API compatibility layer + * + * Copyright 2012 Viktor Szakats (harbour syenar.net) + * www - http://harbour-project.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/). + * + * As a special exception, the Harbour Project gives permission for + * additional uses of the text contained in its release of Harbour. + * + * The exception is that, if you link the Harbour libraries with other + * files to produce an executable, this does not by itself cause the + * resulting executable to be covered by the GNU General Public License. + * Your use of that executable is in no way restricted on account of + * linking the Harbour library code into it. + * + * This exception does not however invalidate any other reasons why + * the executable file might be covered by the GNU General Public License. + * + * This exception applies only to the code released by the Harbour + * Project under the name Harbour. If you copy code from other + * Harbour Project or Free Software Foundation releases into a copy of + * Harbour, as the General Public License permits, the exception does + * not apply to the code that you add in this way. To avoid misleading + * anyone as to the status of such modified files, you must delete + * this exception notice from them. + * + * If you write modifications of your own for Harbour, it is your choice + * whether to permit this exception to apply to your modifications. + * If you do not wish that, delete this exception notice. + * + */ + +#include "hbextcdp.ch" +#include "hbextlng.ch" + +REQUEST HB_CODEPAGE_UTF8 + +FUNCTION hb_langSelect( cLangID ) + + IF HB_ISSTRING( cLangID ) + /* For compatibility with legacy codepages */ + SWITCH cLangID + CASE "BE866" ; hb_langNew( cLangID, "BG866" , "BEUTF", "UTF8" ) ; EXIT + CASE "BEWIN" ; hb_langNew( cLangID, "BGWIN" , "BEUTF", "UTF8" ) ; EXIT + CASE "BG866" ; hb_langNew( cLangID, "BG866" , "BGUTF", "UTF8" ) ; EXIT + CASE "BGISO" ; hb_langNew( cLangID, "BGISO" , "BGUTF", "UTF8" ) ; EXIT + CASE "BGMIK" ; hb_langNew( cLangID, "BGMIK" , "BGUTF", "UTF8" ) ; EXIT + CASE "BGWIN" ; hb_langNew( cLangID, "BGWIN" , "BGUTF", "UTF8" ) ; EXIT + CASE "CA" ; hb_langNew( cLangID, "ES850" , "CAUTF", "UTF8" ) ; EXIT + CASE "CS852" ; hb_langNew( cLangID, "CS852" , "CSUTF", "UTF8" ) ; EXIT + CASE "CSISO" ; hb_langNew( cLangID, "CSISO" , "CSUTF", "UTF8" ) ; EXIT + CASE "CSKAM" ; hb_langNew( cLangID, "CSKAMC", "CSUTF", "UTF8" ) ; EXIT + CASE "CSWIN" ; hb_langNew( cLangID, "CSWIN" , "CSUTF", "UTF8" ) ; EXIT + CASE "DE" ; hb_langNew( cLangID, "DE850" , "DEUTF", "UTF8" ) ; EXIT + CASE "DEWIN" ; hb_langNew( cLangID, "DEWIN" , "DEUTF", "UTF8" ) ; EXIT + CASE "EL" ; hb_langNew( cLangID, "EL737" , "ELUTF", "UTF8" ) ; EXIT + CASE "ELWIN" ; hb_langNew( cLangID, "ELWIN" , "ELUTF", "UTF8" ) ; EXIT + CASE "EO" ; hb_langNew( cLangID, "ES850" , "EOUTF", "UTF8" ) ; EXIT + CASE "ES" ; hb_langNew( cLangID, "ES850" , "ESUTF", "UTF8" ) ; EXIT + CASE "ESWIN" ; hb_langNew( cLangID, "ESWIN" , "ESUTF", "UTF8" ) ; EXIT + CASE "EU" ; hb_langNew( cLangID, "ES850" , "EUUTF", "UTF8" ) ; EXIT + CASE "FR" ; hb_langNew( cLangID, "FR850" , "FRUTF", "UTF8" ) ; EXIT + CASE "GL" ; hb_langNew( cLangID, "ES850" , "GLUTF", "UTF8" ) ; EXIT +// CASE "HE862" ; hb_langNew( cLangID, "?????" , "HEUTF", "UTF8" ) ; EXIT +// CASE "HEWIN" ; hb_langNew( cLangID, "?????" , "HEUTF", "UTF8" ) ; EXIT + CASE "HR646" ; hb_langNew( cLangID, "HR646" , "HRUTF", "UTF8" ) ; EXIT + CASE "HR852" ; hb_langNew( cLangID, "HR852" , "HRUTF", "UTF8" ) ; EXIT + CASE "HRISO" ; hb_langNew( cLangID, "HRISO" , "HRUTF", "UTF8" ) ; EXIT + CASE "HRWIN" ; hb_langNew( cLangID, "HRWIN" , "HRUTF", "UTF8" ) ; EXIT + CASE "HU852" ; hb_langNew( cLangID, "HU852" , "HUUTF", "UTF8" ) ; EXIT +// CASE "HUCWI" ; hb_langNew( cLangID, "?????" , "HUUTF", "UTF8" ) ; EXIT + CASE "HUISO" ; hb_langNew( cLangID, "HUISO" , "HUUTF", "UTF8" ) ; EXIT + CASE "HUWIN" ; hb_langNew( cLangID, "HUWIN" , "HUUTF", "UTF8" ) ; EXIT + CASE "ID" ; hb_langNew( cLangID, "EN" , "IDUTF", "UTF8" ) ; EXIT + CASE "IS850" ; hb_langNew( cLangID, "IS850" , "ISUTF", "UTF8" ) ; EXIT + CASE "IT" ; hb_langNew( cLangID, "IT850" , "ITUTF", "UTF8" ) ; EXIT +// CASE "KO" ; hb_langNew( cLangID, "?????" , "KOUTF", "UTF8" ) ; EXIT + CASE "LTWIN" ; hb_langNew( cLangID, "LTWIN" , "LTUTF", "UTF8" ) ; EXIT + CASE "NL" ; hb_langNew( cLangID, "EN" , "NLUTF", "UTF8" ) ; EXIT + CASE "PL852" ; hb_langNew( cLangID, "PL852" , "PLUTF", "UTF8" ) ; EXIT + CASE "PLISO" ; hb_langNew( cLangID, "PLISO" , "PLUTF", "UTF8" ) ; EXIT + CASE "PLMAZ" ; hb_langNew( cLangID, "PLMAZ" , "PLUTF", "UTF8" ) ; EXIT + CASE "PLWIN" ; hb_langNew( cLangID, "PLWIN" , "PLUTF", "UTF8" ) ; EXIT + CASE "PT" ; hb_langNew( cLangID, "PT850" , "PTUTF", "UTF8" ) ; EXIT + CASE "PTISO" ; hb_langNew( cLangID, "PTISO" , "PTUTF", "UTF8" ) ; EXIT + CASE "RO" ; hb_langNew( cLangID, "RO852" , "ROUTF", "UTF8" ) ; EXIT + CASE "RU866" ; hb_langNew( cLangID, "RU866" , "RUUTF", "UTF8" ) ; EXIT + CASE "RUKOI" ; hb_langNew( cLangID, "RUKOI8", "RUUTF", "UTF8" ) ; EXIT + CASE "RUWIN" ; hb_langNew( cLangID, "RU1251", "RUUTF", "UTF8" ) ; EXIT + CASE "SK852" ; hb_langNew( cLangID, "SK852" , "SKUTF", "UTF8" ) ; EXIT + CASE "SKISO" ; hb_langNew( cLangID, "SKISO" , "SKUTF", "UTF8" ) ; EXIT + CASE "SKKAM" ; hb_langNew( cLangID, "SKKAMC", "SKUTF", "UTF8" ) ; EXIT + CASE "SKWIN" ; hb_langNew( cLangID, "SKWIN" , "SKUTF", "UTF8" ) ; EXIT + CASE "SL646" ; hb_langNew( cLangID, "SL646" , "SLUTF", "UTF8" ) ; EXIT + CASE "SL852" ; hb_langNew( cLangID, "SL852" , "SLUTF", "UTF8" ) ; EXIT + CASE "SLISO" ; hb_langNew( cLangID, "SLISO" , "SLUTF", "UTF8" ) ; EXIT + CASE "SLWIN" ; hb_langNew( cLangID, "SLWIN" , "SLUTF", "UTF8" ) ; EXIT +// CASE "SR852" ; hb_langNew( cLangID, "?????" , "SRUTF", "UTF8" ) ; EXIT +// CASE "SRISO" ; hb_langNew( cLangID, "?????" , "SRUTF", "UTF8" ) ; EXIT + CASE "SRWIN" ; hb_langNew( cLangID, "SRWIN" , "SRUTF", "UTF8" ) ; EXIT + CASE "SV" ; hb_langNew( cLangID, "SV850" , "SVUTF", "UTF8" ) ; EXIT + CASE "SVWIN" ; hb_langNew( cLangID, "SVWIN" , "SVUTF", "UTF8" ) ; EXIT + CASE "TR857" ; hb_langNew( cLangID, "TR857" , "TRUTF", "UTF8" ) ; EXIT + CASE "TRWIN" ; hb_langNew( cLangID, "TRWIN" , "TRUTF", "UTF8" ) ; EXIT + CASE "UA866" ; hb_langNew( cLangID, "UA866" , "UAUTF", "UTF8" ) ; EXIT +// CASE "UADOS" ; hb_langNew( cLangID, "?????" , "UAUTF", "UTF8" ) ; EXIT + CASE "UAKOI" ; hb_langNew( cLangID, "UAKOI8", "UAUTF", "UTF8" ) ; EXIT + CASE "UAWIN" ; hb_langNew( cLangID, "UA1125", "UAUTF", "UTF8" ) ; EXIT +// CASE "ZHB5" ; hb_langNew( cLangID, "?????" , "ZHUTF", "UTF8" ) ; EXIT +// CASE "ZHGB" ; hb_langNew( cLangID, "?????" , "ZHUTF", "UTF8" ) ; EXIT + ENDSWITCH + ENDIF + + RETURN __hb_langSelect( cLangID )