00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
#include <config.h>
00021
00022
#include <qfile.h>
00023
00024
#include <kdebug.h>
00025
00026
#include "kcatalogue.h"
00027
00028
char *k_nl_find_msg(
struct kde_loaded_l10nfile *domain_file,
00029
const char *msgid);
00030
void k_nl_unload_domain (
struct loaded_domain *domain);
00031
00032
#ifndef KDE_USE_FINAL // with --enable-final, we're getting this from libintl.cpp
00033
struct kde_loaded_l10nfile
00034 {
00035
const char *filename;
00036
int decided;
00037
00038
const void *data;
00039
00040 kde_loaded_l10nfile() : filename(0), decided(0), data(0) {}
00041 };
00042
#endif
00043
00044
class KCataloguePrivate
00045 {
00046
public:
00047
QString name;
00048
00049 kde_loaded_l10nfile domain;
00050 };
00051
00052 KCatalogue::KCatalogue(
const QString & name)
00053 : d( new KCataloguePrivate )
00054 {
00055 d->name = name;
00056 }
00057
00058 KCatalogue::KCatalogue(
const KCatalogue & rhs)
00059 : d( new KCataloguePrivate )
00060 {
00061 *
this = rhs;
00062 }
00063
00064 KCatalogue &
KCatalogue::operator=(
const KCatalogue & rhs)
00065 {
00066 d->name = rhs.
d->name;
00067
setFileName( rhs.
fileName() );
00068
00069
return *
this;
00070 }
00071
00072 KCatalogue::~KCatalogue()
00073 {
00074 doUnload();
00075
00076
delete d;
00077 }
00078
00079 QString KCatalogue::name()
const
00080
{
00081
return d->name;
00082 }
00083
00084 void KCatalogue::setFileName(
const QString & fileName )
00085 {
00086
00087
if ( this->fileName() == fileName )
return;
00088
00089 doUnload();
00090
00091
QCString newFileName =
QFile::encodeName( fileName );
00092
00093
if ( !fileName.
isEmpty() )
00094 {
00095
00096
char *filename =
new char[ newFileName.
length() + 1 ];
00097 ::qstrcpy( filename, newFileName );
00098 d->domain.filename = filename;
00099 }
00100 }
00101
00102
QString KCatalogue::fileName()
const
00103
{
00104
return QFile::decodeName( d->domain.filename );
00105 }
00106
00107 const char *
KCatalogue::translate(
const char * msgid)
const
00108
{
00109 return ::k_nl_find_msg( &d->domain, msgid );
00110 }
00111
00112
void KCatalogue::doUnload()
00113 {
00114
00115
if ( d->domain.data )
00116 ::k_nl_unload_domain( (
struct loaded_domain *)d->domain.data );
00117 d->domain.data = 0;
00118
00119
00120
delete [] const_cast<char *>(d->domain.filename);
00121 d->domain.filename = 0;
00122
00123 d->domain.decided = 0;
00124 }