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 }