File indexing completed on 2024-04-28 13:00:35
0001 /*************************************************************************** 0002 begin : Sun Feb 29 2004 0003 copyright : (C) 2004 by Jeroen Wijnhout 0004 email : Jeroen.Wijnhout@kdemail.net 0005 ***************************************************************************/ 0006 0007 /*************************************************************************** 0008 * * 0009 * This program is free software; you can redistribute it and/or modify * 0010 * it under the terms of the GNU General Public License as published by * 0011 * the Free Software Foundation; either version 2 of the License, or * 0012 * (at your option) any later version. * 0013 * * 0014 ***************************************************************************/ 0015 0016 #ifndef CONVERT_H 0017 #define CONVERT_H 0018 0019 #include <QString> 0020 #include <QStringList> 0021 #include <qmap.h> 0022 0023 #include <QUrl> 0024 0025 namespace KTextEditor { 0026 class Document; 0027 } 0028 0029 class ConvertMap 0030 { 0031 protected: 0032 ConvertMap(const QString & encoding); 0033 0034 public: 0035 const QString & encoding() const { 0036 return m_aliases[0]; 0037 } 0038 const QString & isoName() const { 0039 return m_aliases[1]; 0040 } 0041 0042 QChar toEncoding(const QString & enc) { 0043 return m_toEncoding[enc]; 0044 } 0045 QString toASCII(const QChar & c) { 0046 return m_toASCII[c]; 0047 } 0048 0049 void addPair(QChar c, const QString & enc); 0050 0051 bool canDecode(const QChar & c) { 0052 return ( m_toASCII.contains(c)); 0053 } 0054 bool canEncode(const QString & enc) { 0055 return ( m_toEncoding.contains(enc)); 0056 } 0057 0058 bool load(); 0059 0060 private: 0061 bool commandIsTerminated(const QString &); 0062 0063 private: 0064 QStringList m_aliases; 0065 QMap<QChar, QString> m_toASCII; 0066 QMap<QString, QChar> m_toEncoding; 0067 0068 //static members 0069 public: 0070 static bool create(const QString & encoding); 0071 static QString encodingNameFor(const QString &); 0072 static QString isoNameFor(const QString &); 0073 static ConvertMap * mapFor(const QString & enc) { 0074 return g_maps[enc]; 0075 } 0076 0077 private: 0078 static QMap<QString, ConvertMap*> g_maps; 0079 }; 0080 0081 class ConvertIO 0082 { 0083 public: 0084 explicit ConvertIO(KTextEditor::Document *doc); 0085 virtual ~ConvertIO() {} 0086 0087 virtual void nextLine(); //read next line 0088 virtual QString& currentLine(); 0089 virtual QString& text() { 0090 return m_text; 0091 } 0092 virtual void writeText(); 0093 virtual int current(); //current line number 0094 virtual bool done(); 0095 0096 protected: 0097 KTextEditor::Document *m_doc; 0098 QString m_text, m_line; 0099 int m_nLine; 0100 }; 0101 0102 class ConvertIOFile : public ConvertIO 0103 { 0104 public: 0105 ConvertIOFile(KTextEditor::Document *doc, const QUrl &url); 0106 0107 void writeText() override; 0108 0109 private: 0110 QUrl m_url; 0111 }; 0112 0113 class ConvertBase 0114 { 0115 public: 0116 ConvertBase(const QString & encoding, ConvertIO * io); 0117 virtual ~ConvertBase() {}; 0118 0119 public: 0120 virtual bool convert(); 0121 0122 protected: 0123 virtual bool setMap(); 0124 0125 virtual QString mapNext(int&); 0126 0127 ConvertIO *m_io; 0128 QString m_encoding; 0129 ConvertMap *m_map; 0130 }; 0131 0132 class ConvertEncToASCII : public ConvertBase 0133 { 0134 public: 0135 ConvertEncToASCII(const QString & encoding, ConvertIO * io) : ConvertBase(encoding, io) {} 0136 0137 protected: 0138 QString mapNext(int&) override; 0139 }; 0140 0141 class ConvertASCIIToEnc : public ConvertBase 0142 { 0143 public: 0144 ConvertASCIIToEnc(const QString & encoding, ConvertIO * io) : ConvertBase(encoding, io) {} 0145 0146 protected: 0147 QString getSequence(int&); 0148 QString nextSequence(int&); 0149 bool isModifier(const QString&); 0150 QString mapNext(int&) override; 0151 }; 0152 0153 #endif