File indexing completed on 2024-05-05 17:57:58

0001 /*
0002     This file is part of the Okteta Core library, made within the KDE community.
0003 
0004     SPDX-FileCopyrightText: 2004, 2011 Friedrich W. H. Kossebau <kossebau@kde.org>
0005 
0006     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0007 */
0008 
0009 #include "charcodec.hpp"
0010 
0011 // lib
0012 #include "textcharcodec.hpp"
0013 #include "ebcdic1047charcodec.hpp"
0014 #include "ibm874charcodec.hpp"
0015 #include "jisx0201charcodec.hpp"
0016 #include "usasciicharcodec.hpp"
0017 // Qt
0018 #include <QStringList>
0019 
0020 namespace Okteta {
0021 
0022 const QStringList& CharCodec::codecNames()
0023 {
0024     static QStringList codecNames;
0025     // first call?
0026     if (codecNames.isEmpty()) {
0027         codecNames = TextCharCodec::codecNames();
0028         codecNames.reserve(codecNames.size() + 4);
0029         codecNames.insert(codecNames.size()-2, IBM874CharCodec::codecName()); // insert at place of TextCharCodec one
0030         codecNames.append(USASCIICharCodec::codecName());
0031         codecNames.append(EBCDIC1047CharCodec::codecName());
0032         codecNames.append(JISX0201CharCodec::codecName());
0033     }
0034 
0035     return codecNames;
0036 }
0037 
0038 CharCodec* CharCodec::createCodec(const QString& name)
0039 {
0040     CharCodec* result;
0041 
0042     if (TextCharCodec::codecNames().indexOf(name) != -1) {
0043         result = TextCharCodec::createCodec(name);
0044     } else if (USASCIICharCodec::codecName() == name) {
0045         result = USASCIICharCodec::create();
0046     } else if (EBCDIC1047CharCodec::codecName() == name) {
0047         result = EBCDIC1047CharCodec::create();
0048     } else if (IBM874CharCodec::codecName() == name) {
0049         result = IBM874CharCodec::create();
0050     } else if (JISX0201CharCodec::codecName() == name) {
0051         result = JISX0201CharCodec::create();
0052     } else {
0053         result = nullptr;
0054     }
0055 
0056     // ensure at least a codec
0057     if (!result) {
0058         result = TextCharCodec::createLocalCodec();
0059     }
0060 
0061     return result;
0062 }
0063 
0064 CharCodec* CharCodec::createCodec(CharCoding charCoding)
0065 {
0066     CharCodec* result;
0067 
0068     if (charCoding == EBCDIC1047Encoding) {
0069         result = EBCDIC1047CharCodec::create();
0070     } else if (charCoding == ISO8859_1Encoding) {
0071         result = TextCharCodec::createCodec(QStringLiteral("ISO-8859-1"));
0072     }
0073     // LocalEncoding
0074     else {
0075         result = nullptr;
0076     }
0077 
0078     // ensure at least a codec
0079     if (!result) {
0080         result = TextCharCodec::createLocalCodec();
0081     }
0082 
0083     return result;
0084 }
0085 
0086 }