Mozilla/mozilla/mailnews/import/src/ImportTranslate.cpp
gerv%gerv.net 17661ae2d9 Bug 236613: change to MPL/LGPL/GPL tri-license.
git-svn-id: svn://10.0.0.236/trunk@155034 18797224-902f-48f8-a5cc-f745e15eee43
2004-04-17 18:33:16 +00:00

138 lines
4.0 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 1998
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*
* Alternatively, the contents of this file may be used under the terms of
* either of the GNU General Public License Version 2 or later (the "GPL"),
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
#include "ImportTranslate.h"
int ImportTranslate::m_useTranslator = -1;
PRBool ImportTranslate::ConvertString( const nsCString& inStr, nsCString& outStr, PRBool mimeHeader)
{
if (inStr.IsEmpty()) {
outStr = inStr;
return( PR_TRUE);
}
nsImportTranslator *pTrans = GetTranslator();
// int maxLen = (int) pTrans->GetMaxBufferSize( inStr.Length());
// int hLen = 0;
nsCString set;
nsCString lang;
if (mimeHeader) {
// add the charset and language
pTrans->GetCharset( set);
pTrans->GetLanguage( lang);
}
// Unfortunatly, we didn't implement ConvertBuffer for all translators,
// just ConvertToFile. This means that this data will not always
// be converted to the charset of pTrans. In that case...
// We don't always have the data in the same charset as the current
// translator...
// It is safer to leave the charset and language field blank
set.Truncate();
lang.Truncate();
PRUint8 * pBuf;
/*
pBuf = (P_U8) outStr.GetBuffer( maxLen);
if (!pBuf) {
delete pTrans;
return( FALSE);
}
pTrans->ConvertBuffer( (PC_U8)(PC_S8)inStr, inStr.GetLength(), pBuf);
outStr.ReleaseBuffer();
*/
outStr = inStr;
delete pTrans;
// Now I need to run the string through the mime-header special char
// encoder.
pTrans = new CMHTranslator;
pBuf = new PRUint8[pTrans->GetMaxBufferSize( outStr.Length())];
pTrans->ConvertBuffer( (const PRUint8 *)(outStr.get()), outStr.Length(), pBuf);
delete pTrans;
outStr.Truncate();
if (mimeHeader) {
outStr = set;
outStr += "'";
outStr += lang;
outStr += "'";
}
outStr += (const char *)pBuf;
delete [] pBuf;
return( PR_TRUE);
}
nsImportTranslator *ImportTranslate::GetTranslator( void)
{
if (m_useTranslator == -1) {
// get the translator to use...
// CString trans;
// trans.LoadString( IDS_LANGUAGE_TRANSLATION);
m_useTranslator = 0;
// if (!trans.CompareNoCase( "iso-2022-jp"))
// gWizData.m_useTranslator = 1;
}
switch( m_useTranslator) {
case 0:
return( new nsImportTranslator);
//case 1:
// return( new CSJis2JisTranslator);
default:
return( new nsImportTranslator);
}
}
nsImportTranslator *ImportTranslate::GetMatchingTranslator( const char *pCharSet)
{
/*
CString jp = "iso-2022-jp";
if (!jp.CompareNoCase( pCharSet))
return( new CSJis2JisTranslator);
*/
return( nsnull);
}