summaryrefslogtreecommitdiffstats
path: root/libkmime/kmime_charfreq.h
diff options
context:
space:
mode:
Diffstat (limited to 'libkmime/kmime_charfreq.h')
-rw-r--r--libkmime/kmime_charfreq.h68
1 files changed, 68 insertions, 0 deletions
diff --git a/libkmime/kmime_charfreq.h b/libkmime/kmime_charfreq.h
new file mode 100644
index 000000000..12d2035cf
--- /dev/null
+++ b/libkmime/kmime_charfreq.h
@@ -0,0 +1,68 @@
+/* -*- c++ -*-
+ kmime_charfreq.h
+
+ KMime, the KDE internet mail/usenet news message library.
+ Copyright (c) 2001-2002 Marc Mutz <mutz@kde.org>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, US
+*/
+#ifndef __KMIME_CHARFREQ_H__
+#define __KMIME_CHARFREQ_H__
+
+#include <qcstring.h>
+#include <kdepimmacros.h>
+#undef None
+
+namespace KMime {
+
+class KDE_EXPORT CharFreq {
+public:
+ CharFreq( const QByteArray & buf );
+ CharFreq( const char * buf, size_t len );
+
+ enum Type { None = 0, EightBitData, Binary = EightBitData,
+ SevenBitData, EightBitText, SevenBitText };
+
+ Type type() const;
+ bool isEightBitData() const;
+ bool isEightBitText() const;
+ bool isSevenBitData() const;
+ bool isSevenBitText() const;
+ /** Returns true if buf has trailing whitespace, i.e. if any line ends
+ with space (' ') or tab ('\t'). */
+ bool hasTrailingWhitespace() const;
+ /** Returns true if buf contains a line that starts with "From ". */
+ bool hasLeadingFrom() const;
+ /** Returns the percentage of printable characters: printable/total.
+ If total == 0, the result is undefined. */
+ float printableRatio() const;
+ /** Returns the percentage of control code (CTLs): CTL/total.
+ If total == 0, the result is undefined. */
+ float controlCodesRatio() const;
+
+protected:
+ uint NUL; // count of NUL chars
+ uint CTL; // count of CTLs (incl. DEL, excl. CR, LF, HT)
+ uint CR, LF; // count of CRs and LFs
+ uint CRLF; // count of LFs, preceded by CRs
+ uint printable; // count of printable US-ASCII chars (SPC..~)
+ uint eightBit; // count of other latin1 chars (those with 8th bit set)
+ uint total;
+ uint lineMin;
+ uint lineMax;
+ bool mTrailingWS; // does the buffer contain trailing whitespace?
+ bool mLeadingFrom; // does the buffer contain lines starting with "From "?
+
+private:
+ void count( const char * buf, size_t len );
+};
+
+} // namespace KMime
+
+#endif /* __KMIME_CHARFREQ_H__ */