/usr/include/kencodingdetector.h is in kdelibs5-dev 4:4.13.3-0ubuntu0.5.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 | /*
This file is part of the KDE libraries
Copyright (C) 1999 Lars Knoll (knoll@mpi-hd.mpg.de)
Copyright (C) 2007 Nick Shaforostoff (shafff@ukr.net)
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef KENCODINGDETECTOR_H
#define KENCODINGDETECTOR_H
#include <kdecore_export.h>
#include <QtCore/QString>
class QTextCodec;
class QTextDecoder;
class KEncodingDetectorPrivate;
/**
* @short Provides encoding detection capabilities.
*
* Searches for encoding declaration inside raw data -- meta and xml tags.
* In the case it can't find it, uses heuristics for specified language.
*
* If it finds unicode BOM marks, it changes encoding regardless of what the user has told
*
* Intended lifetime of the object: one instance per document.
*
* Typical use:
* \code
* QByteArray data;
* ...
* KEncodingDetector detector;
* detector.setAutoDetectLanguage(KEncodingDetector::Cyrillic);
* QString out=detector.decode(data);
* \endcode
*
*
* Do not mix decode() with decodeWithBuffering()
*
* @short Guess encoding of char array
*
*/
class KDECORE_EXPORT KEncodingDetector
{
public:
enum EncodingChoiceSource
{
DefaultEncoding,
AutoDetectedEncoding,
BOM,
EncodingFromXMLHeader,
EncodingFromMetaTag,
EncodingFromHTTPHeader,
UserChosenEncoding
};
enum AutoDetectScript
{
None,
SemiautomaticDetection,
Arabic,
Baltic,
CentralEuropean,
ChineseSimplified,
ChineseTraditional,
Cyrillic,
Greek,
Hebrew,
Japanese,
Korean,
NorthernSaami,
SouthEasternEurope,
Thai,
Turkish,
Unicode,
WesternEuropean
};
/**
* Default codec is latin1 (as html spec says), EncodingChoiceSource is default, AutoDetectScript=Semiautomatic
*/
KEncodingDetector();
/**
* Allows to set Default codec, EncodingChoiceSource, AutoDetectScript
*/
KEncodingDetector(QTextCodec* codec, EncodingChoiceSource source, AutoDetectScript script=None);
~KEncodingDetector();
//const QTextCodec* codec() const;
/**
* @returns true if specified encoding was recognized
*/
bool setEncoding(const char *encoding, EncodingChoiceSource type);
/**
* Convenience method.
* @returns mime name of detected encoding
*/
const char* encoding() const;
bool visuallyOrdered() const;
// void setAutoDetectLanguage( const QString& );
// const QString& autoDetectLanguage() const;
void setAutoDetectLanguage( AutoDetectScript );
AutoDetectScript autoDetectLanguage() const;
EncodingChoiceSource encodingChoiceSource() const;
/**
* The main class method
*
* Calls protected analyze() only the first time of the whole object life
*
* Replaces all null chars with spaces.
*/
QString decode(const char *data, int len);
QString decode(const QByteArray &data);
//* You don't need to call analyze() if you use this method.
/**
* Convenience method that uses buffering. It waits for full html head to be buffered
* (i.e. calls analyze every time until it returns true).
*
* Replaces all null chars with spaces.
*
* @returns Decoded data, or empty string, if there was not enough data for accurate detection
* @see flush()
*/
QString decodeWithBuffering(const char *data, int len);
/**
* This method checks whether invalid characters were found
* during a decoding operation.
*
* Note that this bit is never reset once invalid characters have been found.
* To force a reset, either change the encoding using setEncoding() or call
* resetDecoder()
*
* @returns a boolean reflecting said state.
* @since 4.3
* @see resetDecoder() setEncoding()
*/
bool decodedInvalidCharacters() const;
/**
* Resets the decoder. Any stateful decoding information (such as resulting from previous calls
* to decodeWithBuffering()) will be lost.
* Will Reset the state of decodedInvalidCharacters() as a side effect.
*
* @since 4.3
* @see decodeWithBuffering() decodedInvalidCharacters()
*
*/
void resetDecoder();
/**
* Convenience method to be used with decodeForHtml. Flushes buffer.
* @see decodeForHtml()
*/
QString flush();
/**
* Takes lang name _after_ it were i18n()'ed
*/
static AutoDetectScript scriptForName(const QString& lang);
static QString nameForScript(AutoDetectScript);
static bool hasAutoDetectionForScript(AutoDetectScript);
protected:
/**
* This nice method will kill all 0 bytes (or double bytes)
* and remember if this was a binary or not ;)
*/
bool processNull(char* data,int length);
/**
* Check if we are really utf8. Taken from kate
*
* @returns true if current encoding is utf8 and the text cannot be in this encoding
*
* Please somebody read http://de.wikipedia.org/wiki/UTF-8 and check this code...
*/
bool errorsIfUtf8 (const char* data, int length);
/**
* Analyze text data.
* @returns true if there was enough data for accurate detection
*/
bool analyze (const char *data, int len);
/**
* @returns QTextDecoder for detected encoding
*/
QTextDecoder* decoder();
private:
KEncodingDetectorPrivate* const d;
};
#endif
|