diff options
308 files changed, 4 insertions, 50054 deletions
diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..34198ce --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "src/libcommuni"] + path = src/libcommuni + url = https://github.com/communi/libcommuni.git diff --git a/src/CrServerManager.pro b/src/CrServerManager.pro index 6fa5e4b..8ba7cd6 100644 --- a/src/CrServerManager.pro +++ b/src/CrServerManager.pro @@ -4,7 +4,7 @@ # #------------------------------------------------- -QT += core +QT += core network QT -= gui diff --git a/src/libcommuni b/src/libcommuni new file mode 160000 +Subproject 780dcdc29678dc62bc306f91bcfdcb3ba62c9bb diff --git a/src/libcommuni/.gitignore b/src/libcommuni/.gitignore deleted file mode 100644 index a05a434..0000000 --- a/src/libcommuni/.gitignore +++ /dev/null @@ -1,70 +0,0 @@ -Makefile -Makefile.* -Makefile_*.mk -debug -release -doc/html -/lib -/bin -/qml -/imports -/coverage -*~ -*.o -*.so -*.moc -*.app -*.pdb -*.bak -*.rej -*.exe -*.orig -*.user -*.user.* -*.json -*.sln -*.suo -*.sdf -*.opensdf -*.vcproj -*.vcxproj -*.filters -/ipch -Thumbs.db -*.dylib -*.xcodeproj -*.plist -.DS_Store -communi-config.prf -.qmake.cache -.qmake.stash -.config.vars -.tmp -*.Debug -*.Release -moc_*.cpp -qrc_*.cpp -/examples/bot/bot -/examples/client/client -/examples/minimal/minimal -/examples/qmlbot/qmlbot -/examples/quick/quick -/tests/auto/dbgout/tst_dbgout -/tests/auto/irc/tst_irc -/tests/auto/ircbuffer/tst_ircbuffer -/tests/auto/ircbuffermodel/tst_ircbuffermodel -/tests/auto/ircchannel/tst_ircchannel -/tests/auto/irccommand/tst_irccommand -/tests/auto/irccommandparser/tst_irccommandparser -/tests/auto/irccompleter/tst_irccompleter -/tests/auto/ircconnection/tst_ircconnection -/tests/auto/irclagtimer/tst_irclagtimer -/tests/auto/ircmessage/tst_ircmessage -/tests/auto/ircnetwork/tst_ircnetwork -/tests/auto/ircpalette/tst_ircpalette -/tests/auto/irctextformat/tst_irctextformat -/tests/auto/ircuser/tst_ircuser -/tests/auto/ircusermodel/tst_ircusermodel -/tests/benchmarks/ircmessage/tst_ircmessage -/tests/benchmarks/ircmessagedecoder/tst_ircmessagedecoder -/tests/benchmarks/irctextformat/tst_irctextformat diff --git a/src/libcommuni/.travis.yml b/src/libcommuni/.travis.yml deleted file mode 100644 index ea4700b..0000000 --- a/src/libcommuni/.travis.yml +++ /dev/null @@ -1,39 +0,0 @@ -language: cpp -compiler: - - gcc - - clang -before_install: - - sudo add-apt-repository --yes ppa:ubuntu-sdk-team/ppa - - sudo apt-get update -qq - - sudo apt-get install -qq qt5-qmake qtbase5-dev -script: - - nproc - - qmake -qt=qt4 -v - - qmake -qt=qt5 -v - - ./configure -verbose -qmake `qmake -qt=qt4 -query QT_INSTALL_BINS`/qmake -var "QMAKE_CXX=${CXX}" -var "QMAKE_CC=${CC}" - - make -j$(nproc) - - make check - - sudo make install - - cd tests/build - - qmake -qt=qt4 && make - - cd - - - git clean -xdf - - ./configure -verbose -qmake `qmake -qt=qt5 -query QT_INSTALL_BINS`/qmake -var "QMAKE_CXX=${CXX}" -var "QMAKE_CC=${CC}" - - make -j$(nproc) - - make check - - sudo make install - - cd tests/build - - qmake -qt=qt5 && make -notifications: - email: - recipients: - - jpnurmi@gmail.com - on_success: never - on_failure: always - irc: - channels: - - "irc.freenode.org#communi" - template: - - "%{repository}#%{build_number} (%{branch} - %{commit} : %{author}): %{message} - %{build_url}" - use_notice: true - skip_join: true diff --git a/src/libcommuni/AUTHORS b/src/libcommuni/AUTHORS deleted file mode 100644 index 1eca6c9..0000000 --- a/src/libcommuni/AUTHORS +++ /dev/null @@ -1,9 +0,0 @@ -J-P Nurmi <jpnurmi@gmail.com> -Sjors Gielen <dazjorz@dazjorz.com> -SmokeX <smokexjc@gmail.com> -V Jousse <vjousse@gmail.com> -Arto Karppinen <arto.karppinen@iki.fi> -Robby <robbyke@gmail.com> -Henrik Hartz <hhartz@gmail.com> -Mark Johnson <marknotgeorge@googlemail.com> -Pier Luigi Fiorini <pierluigi.fiorini@gmail.com> diff --git a/src/libcommuni/CHANGELOG b/src/libcommuni/CHANGELOG deleted file mode 100644 index f17c9b8..0000000 --- a/src/libcommuni/CHANGELOG +++ /dev/null @@ -1,415 +0,0 @@ -3.2.0 ------ -- General - - Relicensed to BSD -- Build system - - Added support for no_install_xxx qmake configs - - Exported qmake variables IRC_VERSION(_MAJOR/MINOR/PATCH) -- IrcCore - - Introduced IrcProtocol - - Exposed IrcConnection::protocol - - Added IrcConnection::secureSupported - - Added IrcConnection::secureError() [signal] - - Restored IrcMessage::own for convenience - - Added Playback to IrcMessage::Flags - - Added IrcMessage::setFlags() - - Added IrcCore::registerMetaTypes() -- IrcModel - - Added IrcBufferModel::receiveMessage() - - Added IrcModel::registerMetaTypes() - - Handle IrcMessage::Playback as appropriate -- IrcUtil - - Made IrcCommandParser retain whitespace and compose a single - command parameter out of a multi-word input parameter - - Made IrcCompleter prioritize channel users over buffer names - - Added IrcCompleter::Direction - - Added IrcUtil::registerMetaTypes() - - Added IrcTextFormat::parse() - - Added IrcTextFormat::plainText - - Added IrcTextFormat::html - - Added IrcTextFormat::urls - -3.1.1/3.0.3 ------------ -- General - - Fixed configure script's default imports and qml directories - - Added missing namespace macros to the QML plugins -- IrcCore - - Added missing enums to Irc::registerMetaTypes() -- IrcModel - - Fixed IrcChannel::isChannel() for namespaced builds - -3.1.0 ------ -- General - - IrcUtil now depends on IrcModel -- IrcCore - - Added IrcConnection::userData - - Added IrcConnection::saveState() - - Added IrcConnection::restoreState() - - Added IrcConnection::channelKeyRequired() [signal] - - Added IrcConnection::nickNameRequired() [signal] - - Deprecated IrcConnection::nickNameReserved() [signal] - - Added IrcMessage::tags - - Added IrcModeMessage::arguments() - - Introduced IrcWhoReplyMessage -- IrcModel - - Added IrcBufferModel::empty - - Added IrcBufferModel::saveState() - - Added IrcBufferModel::restoreState() - - Added IrcBufferModel::persistent - - Added IrcChannel::key - - Added IrcChannel::join(QString key) - - Added IrcBuffer::userData - - Added IrcBuffer::close() - - Added IrcUserModel::empty - - Added IrcUser::away - - Added IrcUser::servOp -- IrcUtil - - Introduced IrcCompleter - - Added IrcTextFormat::spanFormat - - Improved IrcTextFormat::toHtml() performance on Qt 5 (QRegularExpression) -- Examples - - Made the QtQuick example remember connection settings (requires Qt 5.2) - -3.0.2 ------ -- General - - Added missing QML plugin type info files -- IrcCore - - Fix login when SASL enabled but not available - - Fixed RPL_ISUPPORT handling when server sends ERR_NOMOTD -- IrcModel - - Fixed IrcBufferModel to not block IrcBuffer signals on destruction/removal - - Fixed IrcBufferModel to deliver own echoed messages to the target buffer -- IrcUtil - - Fixed IrcTextFormat::toHtml() to not percent encode comma in URLs - -3.0.1 ------ -- IrcCore - - Fixed IrcConnection::open() to bail out when already active - - Fixed IrcModeMessage::kind() for modes with arguments -- IrcModel - - Added missing IrcUserModel::channelChanged() to docs - - Fixed a potential crash in IrcUserModel sorting - - Fixed IrcChannel::isActive() on quit - - Fixed IrcBufferModel to deliver messages only to active buffers - - Fixed IrcUser mode & prefix sorting in the "ranking" order -- IrcUtil - - Added missing export macro to IrcPalette - - Fixed IrcTextFormat::toHtml() to percent encode special characters in URLs - -3.0.0 ------ -- General - - Modularized: IrcCore, IrcModel & IrcUtil - - Added namespace support - - Full QML support & restored the QML plugin - - Renamed all COMMUNI_XXX macros to IRC_XXX - - Made uchardet the default encoding detection backend -- IrcCore - - Added Irc::registerMetaTypes() - - Renamed Irc::toString() to Irc::codeToString() - - Added Irc::nick/ident/hostFromPrefix() - - Renamed IrcSessionInfo to IrcNetwork - - Renamed IrcSession to IrcConnection - - Added IrcConnection::network - - Added IrcConnection::enabled - - Added IrcConnection::status - - Added IrcConnection::displayName - - Added IrcConnection::reconnectDelay - - Replaced IrcConnection::password signal with a property - - Added IrcConnection::saslMechanism & supportedSaslMechanisms - - Added IrcConnection(host, parent) convenience constructor - - Made IrcConnection::sendCommand() queue when inactive - - Introduced IrcCommandFilter - - Removed IrcSender - - Replaced IrcMessage::sender with IrcMessage::(prefix|nick|ident|host) - - Added IrcMessage::network - - Added IrcPrivate/NoticeMessage::private property - - Replaced IrcNickMessage::nick with oldNick & newNick - - Renamed IrcPrivate/NoticeMessage::message to content - - Replaced IrcMessage::fromCommand() with IrcCommand::toMessage() -- IrcModel - - Added IrcUserModel::sortOrder & sortMethod - - Added IrcUserModel::indexOf(IrcUser*) - - Added IrcUserModel::clear() - - Added IrcUser::title - - Renamed IrcUserModel::user(QString) to find(QString) - - Added IrcBufferModel::network - - Added IrcBufferModel::sortOrder & sortMethod - - Added IrcBufferModel::add(IrcBuffer*) - - Added IrcBufferModel::indexOf(IrcBuffer*) - - Added IrcBufferModel::remove(IrcBuffer*) - - Added IrcBufferModel::buffer/channelPrototype - - Split IrcBufferModel::create() to createBuffer() & createChannel() - - Renamed IrcBufferModel::user(QString) to find(QString) - - Removed IrcBufferModel::destroy() - - Added IrcBuffer::persistent - - Added IrcBuffer::sticky - - Added IrcBuffer::network - - Added IrcBuffer::receiveMessage() -- IrcUtil - - Added IrcCommandParser::tolerant - - Renamed IrcCommandParser::currentTarget to target - - Replaced IrcCommandParser::prefix with triggers - - Added details for IrcCommandParser::syntax() - - Added IrcPalette color name properties -- Examples - - Added a minimal example - connect, join & message in 8 lines of code - - Added a Qt Quick based GUI client example - - Added a bot example written in QML - -2.2.0 ------ -- Implemented SASL support (http://freenode.net/sasl) -- Introduced IrcBufferModel, IrcUserModel and IrcCommandParser -- Added new IrcSession convenience signals - - void xxxMessageReceived(IrcXxxMessage* message) - - void nickNameReserved(QString* alternate) -- Added bool IrcSession::secure property -- Added IrcSession::quit() slot for convenience -- Allowed constructing an invalid IrcSessionInfo -- Added IrcSessionInfo::channelModes(A|B|C|D) -- Added IrcModeMessage::Kind { Channel, User } -- Added IrcTopicMessage::isReply() and IrcModeMessage::isReply() - - NOTE: Notice that there is no need to catch RPL_TOPIC, RPL_NOTOPIC - or RPL_CHANNELMODEIS anymore. These numeric replies are now - composed to IrcTopicMessage and IrcModeMessage. -- Made IrcLagTimer::session a writable property -- Improved submodule support: - https://github.com/communi/libcommuni/wiki/Submodule -- Overall documentation improvements - -2.1.1 ------ -- Add missing docs for IrcMessage::Motd/Names enum values -- Enable using communi as a static lib & git submodule -- Fixed a memory leak in IrcProtocol -- Other cosmetic docs & build system cleanups and improvements - -2.1.0 ------ -- Introduced IrcMessageFilter and IrcLagTimer -- Added IrcSessionInfo::availableCapabilities() and activeCapabilities() -- Added QDebug stream operators for IrcSender -- Added QDataStream operators for IrcPalette and IrcTextFormat -- Added comparison operators for IrcSender, IrcPalette and IrcTextFormat -- Added IrcCommand::createPing() -- Added IrcMotdMessage and IrcNamesMessage -- Made IrcSession::sendCommand() only delete parentless commands -- Fixes and improvements to the congigure script - -2.0.1 ------ -- Fixed IrcMessage::toData() -- Fixed identify-msg capability handling -- Fixed ICU linking on 64-bit Windows -- Fixed IrcSession::close() to abort connecting - -2.0.0 ------ -- Focus on easy deployment - - Removed all plugins - - Better support for static builds and including(src.pri) -- Removed Symbian support -- The default FALLBACK encoding changed from UTF-8 to ISO-8859-15 - - UTF-8 did not make much sense as the default fallback encoding, - since the fallback is only used when the message is detected NOT - to be valid UTF-8 and the auto-detection fails -- Radically simplified examples -- Removed all deprecated classes and methods -- API changes: - - Added: - - IrcPalette - - IrcTextFormat - - IrcSessionInfo - - IrcMessage::session - - IrcMessage::timeStamp - - IrcCommand::Type & IrcCommand::createXxx() for: - - admin/info/knock/list/motd/stats/time/trace/users/version/who - - Removed: - - IrcUtil - - use IrcTextFormat & IrcPalette instead - - IrcCodecPlugin - - use qmake -config icu or -config uchardet instead - - IrcMessage::isOwn - - use IrcMessage::flags() & IrcMessage::Own instead - - IrcMessage::toString() - - use IrcMessage::toData() instead - - IrcMessage::fromString() - - use IrcMessage::fromData/Command/Parameters() instead - -1.2.2 ------ -- Qt 5.0.0 final specific build fixes -- Fixed CTCP reply handling -- Fixed SSL connections - -1.2.1 ------ -- Fixed #24: IrcSessionPrivate::_q_error() is too verbose -- Fixed #25: IrcSessionPrivate::processLine() should not respond to - CTCP requests -- Qt 5 specific build fixes -- Made the default fallback encoding ISO-8859-1 -- Fixed a performance bottleneck in IrcDecoder::setEncoding() - -1.2.0 ------ -- Qt 5 support -- Implemented support for IRC capabilities as specified at - http://www.leeh.co.uk/draft-mitchell-irc-capabilities-02.html -- Implemented support for the "identify-msg" capability -- Pluginized the message decoder - - The default message decoder plugin is based on uchardet, which - is built into the plugin, making it available on all platforms - - An alternative message decoder plugin based on ICU is available - in src/plugins/icu must be enabled/built by hand. It requires - the presence of ICU (modify icu.pri if necessary) that is not - available for all Communi supported platforms - - The used message decoder plugin may be controlled by setting the - COMMUNI_CODEC_PLUGIN (values: uchardet,icu) environment variable - - In conjuction with the standard QT_PLUGIN_PATH, plugin paths may - be controlled by setting the COMMUNI_PLUGIN_PATH environment - variable -- API changes: - - Added IrcCodecPlugin - - Added QByteArray IrcMessage::encoding [property] - - Added IrcMessage::Flags and IrcMessage::flags() - - None, Own, Identified, Unidentified - - Added IrcMessage::Capability and IrcCapabilityMessage - - Added IrcCommand::Capability and IrcCommand::createCapability() -- Facelifted the desktop example - -1.1.2 ------ -- Docs: - - Fixed IrcMessage::Private enum value to appear -- Examples: - - Fixed settings to be remembered - - Fixed a performance issue in channel message nick highlighting - -1.1.1 ------ -- Various build system fixes and improvements - - Fixed shadow builds - - Configure: improved qmake(-qt4) detection & added error handling - - Fixed plugins, examples and tests to link to the local built libs - instead of the installed ones whether they happen to exist - - Added a 'no_rpath' qmake config -- Examples: fixed message formatting clash with nick names & URLs - -1.1.0 ------ -- Introduced a configure script -- Added a Symbian (QML) example -- Significantly revised the desktop example - - Added dock icon badge, topic label & channel user list - - Made it possible to emded parts into another app -- Replaced ICU with uchardet as the encoding detection engine - - ICU is not available on all platforms, whereas uchardet is - built into Communi and therefore available on all platforms -- IrcUtil::messageToHtml() to handle mIRC style background colors -- Detect message encoding part by part, instead of for the whole line -- Changed the semantics of IrcSession::encoding to a fallback encoding -- API changes: - - Added bool IrcMessage::own [property] - - Added IrcMessage::fromData() - deprecated IrcMessage::fromString() - - Added IrcMessage::toData() - deprecated IrcMessage::toString() - - Added QByteArray IrcCommand::encoding [property] - - Added bool IrcSession::sendData(const QByteArray& data) - -1.0.0 ------ -- Renamed Communi (was LibIrcClient-Qt) -- Underwent a major rewrite - - Split the monolithic IrcSession class - - New event/message & property based IrcSession API - - Removed the problematic buffer concept - - New public classes: IrcCommand and IrcMessage & subclasses -- Improved QML compatibility - - QObject based messages & commands - - Used properties, signals, slots and invokables - - Provided a declarative plugin: import Communi 1.0 -- Environment variable COMMUNI_DEBUG=1 to help debugging - log socket state - changes and received messages to the debug output -- Added desktop (QWidgets) & MeeGo (QML) examples - -0.5.0 ------ -- Irc::Session API additions: - - addBuffer() and buffers() for buffer management - - welcomed() signal, emitted when 001 is received -- Added IRC capability support -- Implemented IDENTIFY-MSG capability -- Fixed "icu.pri: Unescaped backslashes are deprecated" -- Remove buffer upon parting a channel -- Fixed Session::raw()'s check of written bytes -- Fixed #3 An incorrect buffer is created when StripNicks is off and - EchoMessages -- Improved building on Mac - - Make a difference between frameworks and standard dylibs (depending - on Qt's installation style) - - Set INSTALL_NAME correctly - -0.4.1 ------ -- Added support for static builds (qmake -config static) -- Fixed qmake project messages output only once -- Fixed MOC_DIR in release mode -- Added default MacPorts paths for ICU -- Fixed notices and messages from "real host" vs. "connected host" to get - directed to the same buffer -- Fixed CTCP requests not to create a new buffer - -0.4.0 ------ -- Introduced Irc::Buffer - the concept of server/channel/query specific buffers -- Deprecated buffer-specific functionality in Irc::Session -- Fixed tabs not to cause underlined text -- Added a version number to the library -- Added Irc::Rfc::toString() -- Fixed euIRC connection problems - -0.3.2 ------ -- Fixed problems with "unknown" messages -- Fixed Irc::Session::connectSlotsByName() not to try to establish - a connection when the parameter types don't match -- Code improvements - -0.3.1 ------ -- Fixed compilation on Mac -- Fixed Irc::Session::connected() and disconnected() to be emitted correctly -- Fixed Irc::Session::connectSlotsByName() not to establish multiple - connections when a slot exists multiple times (reimplemented) -- Made Irc::Session::cmdMessage(), cmdNotice() and cmdCtcpAction() to - emit own messages, notices and actions. This simplifies client - implementation -- Started working on auto tests and added code coverage support -- Added a workaround for older Qt versions that don't have the - QT_FORWARD_DECLARE_CLASS() macro defined - -0.3.0 ------ -- Added SSL support -- Quality & compatibility - - no_keywords - - QT_NO_CAST_FROM_ASCII - - QT_NO_CAST_TO_ASCII -- Bug fixes & code improvements - -0.2.0 ------ -- The first fully Qt-based version - -0.1.1 ------ -- Added support for optional encoding detection with ICU - -0.1.0 ------ -- The first internal release diff --git a/src/libcommuni/Doxyfile b/src/libcommuni/Doxyfile deleted file mode 100644 index 310c09e..0000000 --- a/src/libcommuni/Doxyfile +++ /dev/null @@ -1,2321 +0,0 @@ -# Doxyfile 1.8.7 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project. -# -# All text after a double hash (##) is considered a comment and is placed in -# front of the TAG it is preceding. -# -# All text after a single hash (#) is considered a comment and will be ignored. -# The format is: -# TAG = value [value, ...] -# For lists, items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (\" \"). - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all text -# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv -# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv -# for the list of possible encodings. -# The default value is: UTF-8. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by -# double-quotes, unless you are using Doxywizard) that should identify the -# project for which the documentation is generated. This name is used in the -# title of most generated pages and in a few other places. -# The default value is: My Project. - -PROJECT_NAME = Communi - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. This -# could be handy for archiving the generated documentation or if some version -# control system is used. - -PROJECT_NUMBER = 3.2.0 - -# Using the PROJECT_BRIEF tag one can provide an optional one line description -# for a project that appears at the top of each page and should give viewer a -# quick idea about the purpose of the project. Keep the description short. - -PROJECT_BRIEF = "A cross-platform IRC framework written with Qt" - -# With the PROJECT_LOGO tag one can specify an logo or icon that is included in -# the documentation. The maximum height of the logo should not exceed 55 pixels -# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo -# to the output directory. - -PROJECT_LOGO = doc/communi.png - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path -# into which the generated documentation will be written. If a relative path is -# entered, it will be relative to the location where doxygen was started. If -# left blank the current directory will be used. - -OUTPUT_DIRECTORY = doc - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub- -# directories (in 2 levels) under the output directory of each output format and -# will distribute the generated files over these directories. Enabling this -# option can be useful when feeding doxygen a huge amount of source files, where -# putting all generated files in the same directory would otherwise causes -# performance problems for the file system. -# The default value is: NO. - -CREATE_SUBDIRS = NO - -# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII -# characters to appear in the names of generated files. If set to NO, non-ASCII -# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode -# U+3044. -# The default value is: NO. - -ALLOW_UNICODE_NAMES = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, -# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), -# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, -# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), -# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, -# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, -# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, -# Ukrainian and Vietnamese. -# The default value is: English. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member -# descriptions after the members that are listed in the file and class -# documentation (similar to Javadoc). Set to NO to disable this. -# The default value is: YES. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief -# description of a member or function before the detailed description -# -# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. -# The default value is: YES. - -REPEAT_BRIEF = NO - -# This tag implements a quasi-intelligent brief description abbreviator that is -# used to form the text in various listings. Each string in this list, if found -# as the leading text of the brief description, will be stripped from the text -# and the result, after processing the whole list, is used as the annotated -# text. Otherwise, the brief description is used as-is. If left blank, the -# following values are used ($name is automatically replaced with the name of -# the entity):The $name class, The $name widget, The $name file, is, provides, -# specifies, contains, represents, a, an and the. - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# doxygen will generate a detailed section even if there is only a brief -# description. -# The default value is: NO. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. -# The default value is: NO. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path -# before files name in the file list and in the header files. If set to NO the -# shortest path that makes the file name unique will be used -# The default value is: YES. - -FULL_PATH_NAMES = YES - -# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. -# Stripping is only done if one of the specified strings matches the left-hand -# part of the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the path to -# strip. -# -# Note that you can specify absolute paths here, but also relative paths, which -# will be relative from the directory where doxygen is started. -# This tag requires that the tag FULL_PATH_NAMES is set to YES. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the -# path mentioned in the documentation of a class, which tells the reader which -# header file to include in order to use a class. If left blank only the name of -# the header file containing the class definition is used. Otherwise one should -# specify the list of include paths that are normally passed to the compiler -# using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but -# less readable) file names. This can be useful is your file systems doesn't -# support long names like on DOS, Mac, or CD-ROM. -# The default value is: NO. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the -# first line (until the first dot) of a Javadoc-style comment as the brief -# description. If set to NO, the Javadoc-style will behave just like regular Qt- -# style comments (thus requiring an explicit @brief command for a brief -# description.) -# The default value is: NO. - -JAVADOC_AUTOBRIEF = NO - -# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first -# line (until the first dot) of a Qt-style comment as the brief description. If -# set to NO, the Qt-style will behave just like regular Qt-style comments (thus -# requiring an explicit \brief command for a brief description.) -# The default value is: NO. - -QT_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a -# multi-line C++ special comment block (i.e. a block of //! or /// comments) as -# a brief description. This used to be the default behavior. The new default is -# to treat a multi-line C++ comment block as a detailed description. Set this -# tag to YES if you prefer the old behavior instead. -# -# Note that setting this tag to YES also means that rational rose comments are -# not recognized any more. -# The default value is: NO. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the -# documentation from any documented member that it re-implements. -# The default value is: YES. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a -# new page for each member. If set to NO, the documentation of a member will be -# part of the file/class/namespace that contains it. -# The default value is: NO. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen -# uses this value to replace tabs by spaces in code fragments. -# Minimum value: 1, maximum value: 16, default value: 4. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that act as commands in -# the documentation. An alias has the form: -# name=value -# For example adding -# "sideeffect=@par Side Effects:\n" -# will allow you to put the command \sideeffect (or @sideeffect) in the -# documentation, which will result in a user-defined paragraph with heading -# "Side Effects:". You can put \n's in the value part of an alias to insert -# newlines. - -ALIASES = - -# This tag can be used to specify a number of word-keyword mappings (TCL only). -# A mapping has the form "name=value". For example adding "class=itcl::class" -# will allow you to use the command class in the itcl::class meaning. - -TCL_SUBST = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources -# only. Doxygen will then generate output that is more tailored for C. For -# instance, some of the names that are used will be different. The list of all -# members will be omitted, etc. -# The default value is: NO. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or -# Python sources only. Doxygen will then generate output that is more tailored -# for that language. For instance, namespaces will be presented as packages, -# qualified scopes will look different, etc. -# The default value is: NO. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -# sources. Doxygen will then generate output that is tailored for Fortran. -# The default value is: NO. - -OPTIMIZE_FOR_FORTRAN = NO - -# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -# sources. Doxygen will then generate output that is tailored for VHDL. -# The default value is: NO. - -OPTIMIZE_OUTPUT_VHDL = NO - -# Doxygen selects the parser to use depending on the extension of the files it -# parses. With this tag you can assign which parser to use for a given -# extension. Doxygen has a built-in mapping, but you can override or extend it -# using this tag. The format is ext=language, where ext is a file extension, and -# language is one of the parsers supported by doxygen: IDL, Java, Javascript, -# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: -# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: -# Fortran. In the later case the parser tries to guess whether the code is fixed -# or free formatted code, this is the default for Fortran type files), VHDL. For -# instance to make doxygen treat .inc files as Fortran files (default is PHP), -# and .f files as C (default is Fortran), use: inc=Fortran f=C. -# -# Note For files without extension you can use no_extension as a placeholder. -# -# Note that for custom extensions you also need to set FILE_PATTERNS otherwise -# the files are not read by doxygen. - -EXTENSION_MAPPING = - -# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments -# according to the Markdown format, which allows for more readable -# documentation. See http://daringfireball.net/projects/markdown/ for details. -# The output of markdown processing is further processed by doxygen, so you can -# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in -# case of backward compatibilities issues. -# The default value is: YES. - -MARKDOWN_SUPPORT = YES - -# When enabled doxygen tries to link words that correspond to documented -# classes, or namespaces to their corresponding documentation. Such a link can -# be prevented in individual cases by by putting a % sign in front of the word -# or globally by setting AUTOLINK_SUPPORT to NO. -# The default value is: YES. - -AUTOLINK_SUPPORT = YES - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -# to include (a tag file for) the STL sources as input, then you should set this -# tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); -# versus func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. -# The default value is: NO. - -BUILTIN_STL_SUPPORT = NO - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. -# The default value is: NO. - -CPP_CLI_SUPPORT = NO - -# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: -# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen -# will parse them like normal C++ but will assume all classes use public instead -# of private inheritance when no explicit protection keyword is present. -# The default value is: NO. - -SIP_SUPPORT = NO - -# For Microsoft's IDL there are propget and propput attributes to indicate -# getter and setter methods for a property. Setting this option to YES will make -# doxygen to replace the get and set methods by a property in the documentation. -# This will only work if the methods are indeed getting or setting a simple -# type. If this is not the case, or you want to show the methods anyway, you -# should set this option to NO. -# The default value is: YES. - -IDL_PROPERTY_SUPPORT = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. -# The default value is: NO. - -DISTRIBUTE_GROUP_DOC = NO - -# Set the SUBGROUPING tag to YES to allow class member groups of the same type -# (for instance a group of public functions) to be put as a subgroup of that -# type (e.g. under the Public Functions section). Set it to NO to prevent -# subgrouping. Alternatively, this can be done per class using the -# \nosubgrouping command. -# The default value is: YES. - -SUBGROUPING = YES - -# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions -# are shown inside the group in which they are included (e.g. using \ingroup) -# instead of on a separate page (for HTML and Man pages) or section (for LaTeX -# and RTF). -# -# Note that this feature does not work in combination with -# SEPARATE_MEMBER_PAGES. -# The default value is: NO. - -INLINE_GROUPED_CLASSES = NO - -# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions -# with only public data fields or simple typedef fields will be shown inline in -# the documentation of the scope in which they are defined (i.e. file, -# namespace, or group documentation), provided this scope is documented. If set -# to NO, structs, classes, and unions are shown on a separate page (for HTML and -# Man pages) or section (for LaTeX and RTF). -# The default value is: NO. - -INLINE_SIMPLE_STRUCTS = NO - -# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or -# enum is documented as struct, union, or enum with the name of the typedef. So -# typedef struct TypeS {} TypeT, will appear in the documentation as a struct -# with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically be -# useful for C code in case the coding convention dictates that all compound -# types are typedef'ed and only the typedef is referenced, never the tag name. -# The default value is: NO. - -TYPEDEF_HIDES_STRUCT = NO - -# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This -# cache is used to resolve symbols given their name and scope. Since this can be -# an expensive process and often the same symbol appears multiple times in the -# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small -# doxygen will become slower. If the cache is too large, memory is wasted. The -# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range -# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 -# symbols. At the end of a run doxygen will report the cache usage and suggest -# the optimal cache size from a speed point of view. -# Minimum value: 0, maximum value: 9, default value: 0. - -LOOKUP_CACHE_SIZE = 0 - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. Private -# class members and static file members will be hidden unless the -# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. -# Note: This will also disable the warnings about undocumented members that are -# normally produced when WARNINGS is set to YES. -# The default value is: NO. - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class will -# be included in the documentation. -# The default value is: NO. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal -# scope will be included in the documentation. -# The default value is: NO. - -EXTRACT_PACKAGE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file will be -# included in the documentation. -# The default value is: NO. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined -# locally in source files will be included in the documentation. If set to NO -# only classes defined in header files are included. Does not have any effect -# for Java sources. -# The default value is: YES. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local methods, -# which are defined in the implementation section but not in the interface are -# included in the documentation. If set to NO only methods in the interface are -# included. -# The default value is: NO. - -EXTRACT_LOCAL_METHODS = NO - -# If this flag is set to YES, the members of anonymous namespaces will be -# extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base name of -# the file that contains the anonymous namespace. By default anonymous namespace -# are hidden. -# The default value is: NO. - -EXTRACT_ANON_NSPACES = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all -# undocumented members inside documented classes or files. If set to NO these -# members will be included in the various overviews, but no documentation -# section is generated. This option has no effect if EXTRACT_ALL is enabled. -# The default value is: NO. - -HIDE_UNDOC_MEMBERS = YES - -# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. If set -# to NO these classes will be included in the various overviews. This option has -# no effect if EXTRACT_ALL is enabled. -# The default value is: NO. - -HIDE_UNDOC_CLASSES = YES - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend -# (class|struct|union) declarations. If set to NO these declarations will be -# included in the documentation. -# The default value is: NO. - -HIDE_FRIEND_COMPOUNDS = YES - -# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any -# documentation blocks found inside the body of a function. If set to NO these -# blocks will be appended to the function's detailed documentation block. -# The default value is: NO. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation that is typed after a -# \internal command is included. If the tag is set to NO then the documentation -# will be excluded. Set it to YES to include the internal documentation. -# The default value is: NO. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file -# names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. -# The default value is: system dependent. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with -# their full class and namespace scopes in the documentation. If set to YES the -# scope will be hidden. -# The default value is: NO. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of -# the files that are included by a file in the documentation of that file. -# The default value is: YES. - -SHOW_INCLUDE_FILES = NO - -# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each -# grouped member an include statement to the documentation, telling the reader -# which file to include in order to use the member. -# The default value is: NO. - -SHOW_GROUPED_MEMB_INC = NO - -# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include -# files with double quotes in the documentation rather than with sharp brackets. -# The default value is: NO. - -FORCE_LOCAL_INCLUDES = NO - -# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the -# documentation for inline members. -# The default value is: YES. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the -# (detailed) documentation of file and class members alphabetically by member -# name. If set to NO the members will appear in declaration order. -# The default value is: YES. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief -# descriptions of file, namespace and class members alphabetically by member -# name. If set to NO the members will appear in declaration order. Note that -# this will also influence the order of the classes in the class list. -# The default value is: NO. - -SORT_BRIEF_DOCS = YES - -# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the -# (brief and detailed) documentation of class members so that constructors and -# destructors are listed first. If set to NO the constructors will appear in the -# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. -# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief -# member documentation. -# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting -# detailed member documentation. -# The default value is: NO. - -SORT_MEMBERS_CTORS_1ST = YES - -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy -# of group names into alphabetical order. If set to NO the group names will -# appear in their defined order. -# The default value is: NO. - -SORT_GROUP_NAMES = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by -# fully-qualified names, including namespaces. If set to NO, the class list will -# be sorted only by class name, not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the alphabetical -# list. -# The default value is: NO. - -SORT_BY_SCOPE_NAME = NO - -# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper -# type resolution of all parameters of a function it will reject a match between -# the prototype and the implementation of a member function even if there is -# only one candidate or it is obvious which candidate to choose by doing a -# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still -# accept a match between prototype and implementation in such cases. -# The default value is: NO. - -STRICT_PROTO_MATCHING = NO - -# The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the -# todo list. This list is created by putting \todo commands in the -# documentation. -# The default value is: YES. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the -# test list. This list is created by putting \test commands in the -# documentation. -# The default value is: YES. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug -# list. This list is created by putting \bug commands in the documentation. -# The default value is: YES. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO) -# the deprecated list. This list is created by putting \deprecated commands in -# the documentation. -# The default value is: YES. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional documentation -# sections, marked by \if <section_label> ... \endif and \cond <section_label> -# ... \endcond blocks. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the -# initial value of a variable or macro / define can have for it to appear in the -# documentation. If the initializer consists of more lines than specified here -# it will be hidden. Use a value of 0 to hide initializers completely. The -# appearance of the value of individual variables and macros / defines can be -# controlled using \showinitializer or \hideinitializer command in the -# documentation regardless of this setting. -# Minimum value: 0, maximum value: 10000, default value: 30. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at -# the bottom of the documentation of classes and structs. If set to YES the list -# will mention the files that were used to generate the documentation. -# The default value is: YES. - -SHOW_USED_FILES = NO - -# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This -# will remove the Files entry from the Quick Index and from the Folder Tree View -# (if specified). -# The default value is: YES. - -SHOW_FILES = YES - -# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces -# page. This will remove the Namespaces entry from the Quick Index and from the -# Folder Tree View (if specified). -# The default value is: YES. - -SHOW_NAMESPACES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from -# the version control system). Doxygen will invoke the program by executing (via -# popen()) the command command input-file, where command is the value of the -# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided -# by doxygen. Whatever the program writes to standard output is used as the file -# version. For an example see the documentation. - -FILE_VERSION_FILTER = - -# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed -# by doxygen. The layout file controls the global structure of the generated -# output files in an output format independent way. To create the layout file -# that represents doxygen's defaults, run doxygen with the -l option. You can -# optionally specify a file name after the option, if omitted DoxygenLayout.xml -# will be used as the name of the layout file. -# -# Note that if you run doxygen from a directory containing a file called -# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE -# tag is left empty. - -LAYOUT_FILE = - -# The CITE_BIB_FILES tag can be used to specify one or more bib files containing -# the reference definitions. This must be a list of .bib files. The .bib -# extension is automatically appended if omitted. This requires the bibtex tool -# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. -# For LaTeX the style of the bibliography can be controlled using -# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the -# search path. Do not use file names with spaces, bibtex cannot handle them. See -# also \cite for info how to create references. - -CITE_BIB_FILES = - -#--------------------------------------------------------------------------- -# Configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated to -# standard output by doxygen. If QUIET is set to YES this implies that the -# messages are off. -# The default value is: NO. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES -# this implies that the warnings are on. -# -# Tip: Turn warnings on while writing the documentation. -# The default value is: YES. - -WARNINGS = YES - -# If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate -# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag -# will automatically be disabled. -# The default value is: YES. - -WARN_IF_UNDOCUMENTED = YES - -# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some parameters -# in a documented function, or documenting parameters that don't exist or using -# markup commands wrongly. -# The default value is: YES. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that -# are documented, but have no documentation for their parameters or return -# value. If set to NO doxygen will only warn about wrong or incomplete parameter -# documentation, but not about the absence of documentation. -# The default value is: NO. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that doxygen -# can produce. The string should contain the $file, $line, and $text tags, which -# will be replaced by the file and line number from which the warning originated -# and the warning text. Optionally the format may contain $version, which will -# be replaced by the version of the file (if it could be obtained via -# FILE_VERSION_FILTER) -# The default value is: $file:$line: $text. - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning and error -# messages should be written. If left blank the output is written to standard -# error (stderr). - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# Configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag is used to specify the files and/or directories that contain -# documented source files. You may enter file names like myfile.cpp or -# directories like /usr/src/myproject. Separate the files or directories with -# spaces. -# Note: If this tag is empty the current directory is searched. - -INPUT = doc \ - examples \ - include \ - src - -# This tag can be used to specify the character encoding of the source files -# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses -# libiconv (or the iconv built into libc) for the transcoding. See the libiconv -# documentation (see: http://www.gnu.org/software/libiconv) for the list of -# possible encodings. -# The default value is: UTF-8. - -INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and -# *.h) to filter out the source-files in the directories. If left blank the -# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii, -# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, -# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, -# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, -# *.qsf, *.as and *.js. - -FILE_PATTERNS = *.dox \ - *.h \ - *.cpp \ - *.qml - -# The RECURSIVE tag can be used to specify whether or not subdirectories should -# be searched for input files as well. -# The default value is: NO. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should be -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. -# -# Note that relative paths are relative to the directory from which doxygen is -# run. - -EXCLUDE = src/3rdparty - -# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or -# directories that are symbolic links (a Unix file system feature) are excluded -# from the input. -# The default value is: NO. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories for example use the pattern */test/* - -EXCLUDE_PATTERNS = *_p.h \ - moc_*.cpp - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the -# output. The symbol name can be a fully qualified name, a word, or if the -# wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories use the pattern */test/* - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or directories -# that contain example code fragments that are included (see the \include -# command). - -EXAMPLE_PATH = examples \ - src - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and -# *.h) to filter out the source-files in the directories. If left blank all -# files are included. - -EXAMPLE_PATTERNS = *.h \ - *.cpp \ - *.qml - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude commands -# irrespective of the value of the RECURSIVE tag. -# The default value is: NO. - -EXAMPLE_RECURSIVE = YES - -# The IMAGE_PATH tag can be used to specify one or more files or directories -# that contain images that are to be included in the documentation (see the -# \image command). - -IMAGE_PATH = doc - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command: -# -# <filter> <input-file> -# -# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the -# name of an input file. Doxygen will then use the output that the filter -# program writes to standard output. If FILTER_PATTERNS is specified, this tag -# will be ignored. -# -# Note that the filter must not add or remove lines; it is applied before the -# code is scanned, but not when the output code is generated. If lines are added -# or removed, the anchors will not be placed correctly. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: pattern=filter -# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how -# filters are used. If the FILTER_PATTERNS tag is empty or if none of the -# patterns match the file name, INPUT_FILTER is applied. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER ) will also be used to filter the input files that are used for -# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). -# The default value is: NO. - -FILTER_SOURCE_FILES = NO - -# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file -# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and -# it is also possible to disable source filtering for a specific pattern using -# *.ext= (so without naming a filter). -# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. - -FILTER_SOURCE_PATTERNS = - -# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that -# is part of the input, its contents will be placed on the main page -# (index.html). This can be useful if you have a project on for instance GitHub -# and want to reuse the introduction page also for the doxygen output. - -USE_MDFILE_AS_MAINPAGE = - -#--------------------------------------------------------------------------- -# Configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will be -# generated. Documented entities will be cross-referenced with these sources. -# -# Note: To get rid of all source code in the generated output, make sure that -# also VERBATIM_HEADERS is set to NO. -# The default value is: NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body of functions, -# classes and enums directly into the documentation. -# The default value is: NO. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any -# special comment blocks from generated source code fragments. Normal C, C++ and -# Fortran comments will always remain visible. -# The default value is: YES. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES then for each documented -# function all documented functions referencing it will be listed. -# The default value is: NO. - -REFERENCED_BY_RELATION = NO - -# If the REFERENCES_RELATION tag is set to YES then for each documented function -# all documented entities called/used by that function will be listed. -# The default value is: NO. - -REFERENCES_RELATION = NO - -# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set -# to YES, then the hyperlinks from functions in REFERENCES_RELATION and -# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will -# link to the documentation. -# The default value is: YES. - -REFERENCES_LINK_SOURCE = YES - -# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the -# source code will show a tooltip with additional information such as prototype, -# brief description and links to the definition and documentation. Since this -# will make the HTML file larger and loading of large files a bit slower, you -# can opt to disable this feature. -# The default value is: YES. -# This tag requires that the tag SOURCE_BROWSER is set to YES. - -SOURCE_TOOLTIPS = YES - -# If the USE_HTAGS tag is set to YES then the references to source code will -# point to the HTML generated by the htags(1) tool instead of doxygen built-in -# source browser. The htags tool is part of GNU's global source tagging system -# (see http://www.gnu.org/software/global/global.html). You will need version -# 4.8.6 or higher. -# -# To use it do the following: -# - Install the latest version of global -# - Enable SOURCE_BROWSER and USE_HTAGS in the config file -# - Make sure the INPUT points to the root of the source tree -# - Run doxygen as normal -# -# Doxygen will invoke htags (and that will in turn invoke gtags), so these -# tools must be available from the command line (i.e. in the search path). -# -# The result: instead of the source browser generated by doxygen, the links to -# source code will now point to the output of htags. -# The default value is: NO. -# This tag requires that the tag SOURCE_BROWSER is set to YES. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a -# verbatim copy of the header file for each class for which an include is -# specified. Set to NO to disable this. -# See also: Section \class. -# The default value is: YES. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# Configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all -# compounds will be generated. Enable this if the project contains a lot of -# classes, structs, unions or interfaces. -# The default value is: YES. - -ALPHABETICAL_INDEX = YES - -# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in -# which the alphabetical index list will be split. -# Minimum value: 1, maximum value: 20, default value: 5. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all classes will -# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag -# can be used to specify a prefix (or a list of prefixes) that should be ignored -# while generating the index headers. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -IGNORE_PREFIX = Irc - -#--------------------------------------------------------------------------- -# Configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES doxygen will generate HTML output -# The default value is: YES. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a -# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of -# it. -# The default directory is: html. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each -# generated HTML page (for example: .htm, .php, .asp). -# The default value is: .html. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a user-defined HTML header file for -# each generated HTML page. If the tag is left blank doxygen will generate a -# standard header. -# -# To get valid HTML the header file that includes any scripts and style sheets -# that doxygen needs, which is dependent on the configuration options used (e.g. -# the setting GENERATE_TREEVIEW). It is highly recommended to start with a -# default header using -# doxygen -w html new_header.html new_footer.html new_stylesheet.css -# YourConfigFile -# and then modify the file new_header.html. See also section "Doxygen usage" -# for information on how to generate the default header that doxygen normally -# uses. -# Note: The header is subject to change so you typically have to regenerate the -# default header when upgrading to a newer version of doxygen. For a description -# of the possible markers and block names see the documentation. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_HEADER = doc/header.html - -# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each -# generated HTML page. If the tag is left blank doxygen will generate a standard -# footer. See HTML_HEADER for more information on how to generate a default -# footer and what special commands can be used inside the footer. See also -# section "Doxygen usage" for information on how to generate the default footer -# that doxygen normally uses. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style -# sheet that is used by each HTML page. It can be used to fine-tune the look of -# the HTML output. If left blank doxygen will generate a default style sheet. -# See also section "Doxygen usage" for information on how to generate the style -# sheet that doxygen normally uses. -# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as -# it is more robust and this tag (HTML_STYLESHEET) will in the future become -# obsolete. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_STYLESHEET = - -# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional user- -# defined cascading style sheet that is included after the standard style sheets -# created by doxygen. Using this option one can overrule certain style aspects. -# This is preferred over using HTML_STYLESHEET since it does not replace the -# standard style sheet and is therefor more robust against future updates. -# Doxygen will copy the style sheet file to the output directory. For an example -# see the documentation. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_EXTRA_STYLESHEET = - -# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or -# other source files which should be copied to the HTML output directory. Note -# that these files will be copied to the base HTML output directory. Use the -# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these -# files. In the HTML_STYLESHEET file, use the file name only. Also note that the -# files will be copied as-is; there are no commands or markers available. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_EXTRA_FILES = - -# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen -# will adjust the colors in the stylesheet and background images according to -# this color. Hue is specified as an angle on a colorwheel, see -# http://en.wikipedia.org/wiki/Hue for more information. For instance the value -# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 -# purple, and 360 is red again. -# Minimum value: 0, maximum value: 359, default value: 220. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_HUE = 220 - -# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors -# in the HTML output. For a value of 0 the output will use grayscales only. A -# value of 255 will produce the most vivid colors. -# Minimum value: 0, maximum value: 255, default value: 100. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_SAT = 100 - -# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the -# luminance component of the colors in the HTML output. Values below 100 -# gradually make the output lighter, whereas values above 100 make the output -# darker. The value divided by 100 is the actual gamma applied, so 80 represents -# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not -# change the gamma. -# Minimum value: 40, maximum value: 240, default value: 80. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_GAMMA = 80 - -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting this -# to NO can help when comparing the output of multiple runs. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_TIMESTAMP = YES - -# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML -# documentation will contain sections that can be hidden and shown after the -# page has loaded. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_DYNAMIC_SECTIONS = NO - -# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries -# shown in the various tree structured indices initially; the user can expand -# and collapse entries dynamically later on. Doxygen will expand the tree to -# such a level that at most the specified number of entries are visible (unless -# a fully collapsed tree already exceeds this amount). So setting the number of -# entries 1 will produce a full collapsed tree by default. 0 is a special value -# representing an infinite number of entries and will result in a full expanded -# tree by default. -# Minimum value: 0, maximum value: 9999, default value: 100. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_INDEX_NUM_ENTRIES = 100 - -# If the GENERATE_DOCSET tag is set to YES, additional index files will be -# generated that can be used as input for Apple's Xcode 3 integrated development -# environment (see: http://developer.apple.com/tools/xcode/), introduced with -# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a -# Makefile in the HTML output directory. Running make will produce the docset in -# that directory and running make install will install the docset in -# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at -# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html -# for more information. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_DOCSET = NO - -# This tag determines the name of the docset feed. A documentation feed provides -# an umbrella under which multiple documentation sets from a single provider -# (such as a company or product suite) can be grouped. -# The default value is: Doxygen generated docs. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_FEEDNAME = "Doxygen generated docs" - -# This tag specifies a string that should uniquely identify the documentation -# set bundle. This should be a reverse domain-name style string, e.g. -# com.mycompany.MyDocSet. Doxygen will append .docset to the name. -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_BUNDLE_ID = org.doxygen.Project - -# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify -# the documentation publisher. This should be a reverse domain-name style -# string, e.g. com.mycompany.MyDocSet.documentation. -# The default value is: org.doxygen.Publisher. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_PUBLISHER_ID = org.doxygen.Publisher - -# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. -# The default value is: Publisher. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_PUBLISHER_NAME = Publisher - -# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three -# additional HTML index files: index.hhp, index.hhc, and index.hhk. The -# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop -# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on -# Windows. -# -# The HTML Help Workshop contains a compiler that can convert all HTML output -# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML -# files are now used as the Windows 98 help format, and will replace the old -# Windows help format (.hlp) on all Windows platforms in the future. Compressed -# HTML files also contain an index, a table of contents, and you can search for -# words in the documentation. The HTML workshop also contains a viewer for -# compressed HTML files. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_HTMLHELP = NO - -# The CHM_FILE tag can be used to specify the file name of the resulting .chm -# file. You can add a path in front of the file if the result should not be -# written to the html output directory. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -CHM_FILE = - -# The HHC_LOCATION tag can be used to specify the location (absolute path -# including file name) of the HTML help compiler ( hhc.exe). If non-empty -# doxygen will try to run the HTML help compiler on the generated index.hhp. -# The file has to be specified with full path. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -HHC_LOCATION = - -# The GENERATE_CHI flag controls if a separate .chi index file is generated ( -# YES) or that it should be included in the master .chm file ( NO). -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -GENERATE_CHI = NO - -# The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc) -# and project file content. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -CHM_INDEX_ENCODING = - -# The BINARY_TOC flag controls whether a binary table of contents is generated ( -# YES) or a normal table of contents ( NO) in the .chm file. Furthermore it -# enables the Previous and Next buttons. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members to -# the table of contents of the HTML help documentation and to the tree view. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -TOC_EXPAND = NO - -# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and -# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that -# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help -# (.qch) of the generated HTML documentation. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_QHP = NO - -# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify -# the file name of the resulting .qch file. The path specified is relative to -# the HTML output folder. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QCH_FILE = - -# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help -# Project output. For more information please see Qt Help Project / Namespace -# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_NAMESPACE = org.doxygen.Project - -# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt -# Help Project output. For more information please see Qt Help Project / Virtual -# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- -# folders). -# The default value is: doc. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_VIRTUAL_FOLDER = doc - -# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom -# filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- -# filters). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_CUST_FILTER_NAME = - -# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the -# custom filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- -# filters). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_CUST_FILTER_ATTRS = - -# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this -# project's filter section matches. Qt Help Project / Filter Attributes (see: -# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_SECT_FILTER_ATTRS = - -# The QHG_LOCATION tag can be used to specify the location of Qt's -# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the -# generated .qhp file. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHG_LOCATION = - -# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be -# generated, together with the HTML files, they form an Eclipse help plugin. To -# install this plugin and make it available under the help contents menu in -# Eclipse, the contents of the directory containing the HTML and XML files needs -# to be copied into the plugins directory of eclipse. The name of the directory -# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. -# After copying Eclipse needs to be restarted before the help appears. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_ECLIPSEHELP = NO - -# A unique identifier for the Eclipse help plugin. When installing the plugin -# the directory name containing the HTML and XML files should also have this -# name. Each documentation set should have its own identifier. -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. - -ECLIPSE_DOC_ID = org.doxygen.Project - -# If you want full control over the layout of the generated HTML pages it might -# be necessary to disable the index and replace it with your own. The -# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top -# of each HTML page. A value of NO enables the index and the value YES disables -# it. Since the tabs in the index contain the same information as the navigation -# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -DISABLE_INDEX = NO - -# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. If the tag -# value is set to YES, a side panel will be generated containing a tree-like -# index structure (just like the one that is generated for HTML Help). For this -# to work a browser that supports JavaScript, DHTML, CSS and frames is required -# (i.e. any modern browser). Windows users are probably better off using the -# HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can -# further fine-tune the look of the index. As an example, the default style -# sheet generated by doxygen has an example that shows how to put an image at -# the root of the tree instead of the PROJECT_NAME. Since the tree basically has -# the same information as the tab index, you could consider setting -# DISABLE_INDEX to YES when enabling this option. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_TREEVIEW = NO - -# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that -# doxygen will group on one line in the generated HTML documentation. -# -# Note that a value of 0 will completely suppress the enum values from appearing -# in the overview section. -# Minimum value: 0, maximum value: 20, default value: 4. -# This tag requires that the tag GENERATE_HTML is set to YES. - -ENUM_VALUES_PER_LINE = 4 - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used -# to set the initial width (in pixels) of the frame in which the tree is shown. -# Minimum value: 0, maximum value: 1500, default value: 250. -# This tag requires that the tag GENERATE_HTML is set to YES. - -TREEVIEW_WIDTH = 250 - -# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to -# external symbols imported via tag files in a separate window. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -EXT_LINKS_IN_WINDOW = NO - -# Use this tag to change the font size of LaTeX formulas included as images in -# the HTML documentation. When you change the font size after a successful -# doxygen run you need to manually remove any form_*.png images from the HTML -# output directory to force them to be regenerated. -# Minimum value: 8, maximum value: 50, default value: 10. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_FONTSIZE = 10 - -# Use the FORMULA_TRANPARENT tag to determine whether or not the images -# generated for formulas are transparent PNGs. Transparent PNGs are not -# supported properly for IE 6.0, but are supported on all modern browsers. -# -# Note that when changing this option you need to delete any form_*.png files in -# the HTML output directory before the changes have effect. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_TRANSPARENT = YES - -# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see -# http://www.mathjax.org) which uses client side Javascript for the rendering -# instead of using prerendered bitmaps. Use this if you do not have LaTeX -# installed or if you want to formulas look prettier in the HTML output. When -# enabled you may also need to install MathJax separately and configure the path -# to it using the MATHJAX_RELPATH option. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -USE_MATHJAX = NO - -# When MathJax is enabled you can set the default output format to be used for -# the MathJax output. See the MathJax site (see: -# http://docs.mathjax.org/en/latest/output.html) for more details. -# Possible values are: HTML-CSS (which is slower, but has the best -# compatibility), NativeMML (i.e. MathML) and SVG. -# The default value is: HTML-CSS. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_FORMAT = HTML-CSS - -# When MathJax is enabled you need to specify the location relative to the HTML -# output directory using the MATHJAX_RELPATH option. The destination directory -# should contain the MathJax.js script. For instance, if the mathjax directory -# is located at the same level as the HTML output directory, then -# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax -# Content Delivery Network so you can quickly see the result without installing -# MathJax. However, it is strongly recommended to install a local copy of -# MathJax from http://www.mathjax.org before deployment. -# The default value is: http://cdn.mathjax.org/mathjax/latest. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_RELPATH = http://www.mathjax.org/mathjax - -# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax -# extension names that should be enabled during MathJax rendering. For example -# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_EXTENSIONS = - -# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces -# of code that will be used on startup of the MathJax code. See the MathJax site -# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an -# example see the documentation. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_CODEFILE = - -# When the SEARCHENGINE tag is enabled doxygen will generate a search box for -# the HTML output. The underlying search engine uses javascript and DHTML and -# should work on any modern browser. Note that when using HTML help -# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) -# there is already a search function so this one should typically be disabled. -# For large projects the javascript based search engine can be slow, then -# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to -# search using the keyboard; to jump to the search box use <access key> + S -# (what the <access key> is depends on the OS and browser, but it is typically -# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down -# key> to jump into the search results window, the results can be navigated -# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel -# the search. The filter options can be selected when the cursor is inside the -# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> -# to select a filter and <Enter> or <escape> to activate or cancel the filter -# option. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - -SEARCHENGINE = YES - -# When the SERVER_BASED_SEARCH tag is enabled the search engine will be -# implemented using a web server instead of a web client using Javascript. There -# are two flavors of web server based searching depending on the EXTERNAL_SEARCH -# setting. When disabled, doxygen will generate a PHP script for searching and -# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing -# and searching needs to be provided by external tools. See the section -# "External Indexing and Searching" for details. -# The default value is: NO. -# This tag requires that the tag SEARCHENGINE is set to YES. - -SERVER_BASED_SEARCH = NO - -# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP -# script for searching. Instead the search results are written to an XML file -# which needs to be processed by an external indexer. Doxygen will invoke an -# external search engine pointed to by the SEARCHENGINE_URL option to obtain the -# search results. -# -# Doxygen ships with an example indexer ( doxyindexer) and search engine -# (doxysearch.cgi) which are based on the open source search engine library -# Xapian (see: http://xapian.org/). -# -# See the section "External Indexing and Searching" for details. -# The default value is: NO. -# This tag requires that the tag SEARCHENGINE is set to YES. - -EXTERNAL_SEARCH = NO - -# The SEARCHENGINE_URL should point to a search engine hosted by a web server -# which will return the search results when EXTERNAL_SEARCH is enabled. -# -# Doxygen ships with an example indexer ( doxyindexer) and search engine -# (doxysearch.cgi) which are based on the open source search engine library -# Xapian (see: http://xapian.org/). See the section "External Indexing and -# Searching" for details. -# This tag requires that the tag SEARCHENGINE is set to YES. - -SEARCHENGINE_URL = - -# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed -# search data is written to a file for indexing by an external tool. With the -# SEARCHDATA_FILE tag the name of this file can be specified. -# The default file is: searchdata.xml. -# This tag requires that the tag SEARCHENGINE is set to YES. - -SEARCHDATA_FILE = searchdata.xml - -# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the -# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is -# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple -# projects and redirect the results back to the right project. -# This tag requires that the tag SEARCHENGINE is set to YES. - -EXTERNAL_SEARCH_ID = - -# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen -# projects other than the one defined by this configuration file, but that are -# all added to the same external search index. Each project needs to have a -# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of -# to a relative location where the documentation can be found. The format is: -# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... -# This tag requires that the tag SEARCHENGINE is set to YES. - -EXTRA_SEARCH_MAPPINGS = - -#--------------------------------------------------------------------------- -# Configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES doxygen will generate LaTeX output. -# The default value is: YES. - -GENERATE_LATEX = NO - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a -# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of -# it. -# The default directory is: latex. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. -# -# Note that when enabling USE_PDFLATEX this option is only used for generating -# bitmaps for formulas in the HTML output, but not in the Makefile that is -# written to the output directory. -# The default file is: latex. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate -# index for LaTeX. -# The default file is: makeindex. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES doxygen generates more compact LaTeX -# documents. This may be useful for small projects and may help to save some -# trees in general. -# The default value is: NO. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used by the -# printer. -# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x -# 14 inches) and executive (7.25 x 10.5 inches). -# The default value is: a4. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -PAPER_TYPE = a4 - -# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names -# that should be included in the LaTeX output. To get the times font for -# instance you can specify -# EXTRA_PACKAGES=times -# If left blank no extra packages will be included. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the -# generated LaTeX document. The header should contain everything until the first -# chapter. If it is left blank doxygen will generate a standard header. See -# section "Doxygen usage" for information on how to let doxygen write the -# default header to a separate file. -# -# Note: Only use a user-defined header if you know what you are doing! The -# following commands have a special meaning inside the header: $title, -# $datetime, $date, $doxygenversion, $projectname, $projectnumber. Doxygen will -# replace them by respectively the title of the page, the current date and time, -# only the current date, the version number of doxygen, the project name (see -# PROJECT_NAME), or the project number (see PROJECT_NUMBER). -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_HEADER = - -# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the -# generated LaTeX document. The footer should contain everything after the last -# chapter. If it is left blank doxygen will generate a standard footer. -# -# Note: Only use a user-defined footer if you know what you are doing! -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_FOOTER = - -# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or -# other source files which should be copied to the LATEX_OUTPUT output -# directory. Note that the files will be copied as-is; there are no commands or -# markers available. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_EXTRA_FILES = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is -# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will -# contain links (just like the HTML output) instead of page references. This -# makes the output suitable for online browsing using a PDF viewer. -# The default value is: YES. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -PDF_HYPERLINKS = YES - -# If the LATEX_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate -# the PDF file directly from the LaTeX files. Set this option to YES to get a -# higher quality PDF documentation. -# The default value is: YES. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -USE_PDFLATEX = YES - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode -# command to the generated LaTeX files. This will instruct LaTeX to keep running -# if errors occur, instead of asking the user for help. This option is also used -# when generating formulas in HTML. -# The default value is: NO. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_BATCHMODE = NO - -# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the -# index chapters (such as File Index, Compound Index, etc.) in the output. -# The default value is: NO. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_HIDE_INDICES = NO - -# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source -# code with syntax highlighting in the LaTeX output. -# -# Note that which sources are shown also depends on other settings such as -# SOURCE_BROWSER. -# The default value is: NO. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_SOURCE_CODE = NO - -# The LATEX_BIB_STYLE tag can be used to specify the style to use for the -# bibliography, e.g. plainnat, or ieeetr. See -# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. -# The default value is: plain. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_BIB_STYLE = plain - -#--------------------------------------------------------------------------- -# Configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES doxygen will generate RTF output. The -# RTF output is optimized for Word 97 and may not look too pretty with other RTF -# readers/editors. -# The default value is: NO. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a -# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of -# it. -# The default directory is: rtf. -# This tag requires that the tag GENERATE_RTF is set to YES. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES doxygen generates more compact RTF -# documents. This may be useful for small projects and may help to save some -# trees in general. -# The default value is: NO. -# This tag requires that the tag GENERATE_RTF is set to YES. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will -# contain hyperlink fields. The RTF file will contain links (just like the HTML -# output) instead of page references. This makes the output suitable for online -# browsing using Word or some other Word compatible readers that support those -# fields. -# -# Note: WordPad (write) and others do not support links. -# The default value is: NO. -# This tag requires that the tag GENERATE_RTF is set to YES. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's config -# file, i.e. a series of assignments. You only have to provide replacements, -# missing definitions are set to their default value. -# -# See also section "Doxygen usage" for information on how to generate the -# default style sheet that doxygen normally uses. -# This tag requires that the tag GENERATE_RTF is set to YES. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an RTF document. Syntax is -# similar to doxygen's config file. A template extensions file can be generated -# using doxygen -e rtf extensionFile. -# This tag requires that the tag GENERATE_RTF is set to YES. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# Configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES doxygen will generate man pages for -# classes and files. -# The default value is: NO. - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a -# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of -# it. A directory man3 will be created inside the directory specified by -# MAN_OUTPUT. -# The default directory is: man. -# This tag requires that the tag GENERATE_MAN is set to YES. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to the generated -# man pages. In case the manual section does not start with a number, the number -# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is -# optional. -# The default value is: .3. -# This tag requires that the tag GENERATE_MAN is set to YES. - -MAN_EXTENSION = .3 - -# The MAN_SUBDIR tag determines the name of the directory created within -# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by -# MAN_EXTENSION with the initial . removed. -# This tag requires that the tag GENERATE_MAN is set to YES. - -MAN_SUBDIR = - -# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it -# will generate one additional man file for each entity documented in the real -# man page(s). These additional files only source the real man page, but without -# them the man command would be unable to find the correct page. -# The default value is: NO. -# This tag requires that the tag GENERATE_MAN is set to YES. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# Configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES doxygen will generate an XML file that -# captures the structure of the code including all documentation. -# The default value is: NO. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a -# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of -# it. -# The default directory is: xml. -# This tag requires that the tag GENERATE_XML is set to YES. - -XML_OUTPUT = xml - -# If the XML_PROGRAMLISTING tag is set to YES doxygen will dump the program -# listings (including syntax highlighting and cross-referencing information) to -# the XML output. Note that enabling this will significantly increase the size -# of the XML output. -# The default value is: YES. -# This tag requires that the tag GENERATE_XML is set to YES. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# Configuration options related to the DOCBOOK output -#--------------------------------------------------------------------------- - -# If the GENERATE_DOCBOOK tag is set to YES doxygen will generate Docbook files -# that can be used to generate PDF. -# The default value is: NO. - -GENERATE_DOCBOOK = NO - -# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in -# front of it. -# The default directory is: docbook. -# This tag requires that the tag GENERATE_DOCBOOK is set to YES. - -DOCBOOK_OUTPUT = docbook - -#--------------------------------------------------------------------------- -# Configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES doxygen will generate an AutoGen -# Definitions (see http://autogen.sf.net) file that captures the structure of -# the code including all documentation. Note that this feature is still -# experimental and incomplete at the moment. -# The default value is: NO. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# Configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES doxygen will generate a Perl module -# file that captures the structure of the code including all documentation. -# -# Note that this feature is still experimental and incomplete at the moment. -# The default value is: NO. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES doxygen will generate the necessary -# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI -# output from the Perl module output. -# The default value is: NO. -# This tag requires that the tag GENERATE_PERLMOD is set to YES. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be nicely -# formatted so it can be parsed by a human reader. This is useful if you want to -# understand what is going on. On the other hand, if this tag is set to NO the -# size of the Perl module output will be much smaller and Perl will parse it -# just the same. -# The default value is: YES. -# This tag requires that the tag GENERATE_PERLMOD is set to YES. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file are -# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful -# so different doxyrules.make files included by the same Makefile don't -# overwrite each other's variables. -# This tag requires that the tag GENERATE_PERLMOD is set to YES. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES doxygen will evaluate all -# C-preprocessor directives found in the sources and include files. -# The default value is: YES. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES doxygen will expand all macro names -# in the source code. If set to NO only conditional compilation will be -# performed. Macro expansion can be done in a controlled way by setting -# EXPAND_ONLY_PREDEF to YES. -# The default value is: NO. -# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then -# the macro expansion is limited to the macros specified with the PREDEFINED and -# EXPAND_AS_DEFINED tags. -# The default value is: NO. -# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES the includes files in the -# INCLUDE_PATH will be searched if a #include is found. -# The default value is: YES. -# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by the -# preprocessor. -# This tag requires that the tag SEARCH_INCLUDES is set to YES. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will be -# used. -# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that are -# defined before the preprocessor is started (similar to the -D option of e.g. -# gcc). The argument of the tag is a list of macros of the form: name or -# name=definition (no spaces). If the definition and the "=" are omitted, "=1" -# is assumed. To prevent a macro definition from being undefined via #undef or -# recursively expanded use the := operator instead of the = operator. -# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. - -PREDEFINED = IRC_DOXYGEN - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this -# tag can be used to specify a list of macro names that should be expanded. The -# macro definition that is found in the sources will be used. Use the PREDEFINED -# tag if you want to use a different macro definition that overrules the -# definition found in the source code. -# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will -# remove all references to function-like macros that are alone on a line, have -# an all uppercase name, and do not end with a semicolon. Such function macros -# are typically used for boiler-plate code, and will confuse the parser if not -# removed. -# The default value is: YES. -# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration options related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES tag can be used to specify one or more tag files. For each tag -# file the location of the external documentation should be added. The format of -# a tag file without this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where loc1 and loc2 can be relative or absolute paths or URLs. See the -# section "Linking to external documentation" for more information about the use -# of tag files. -# Note: Each tag file must have a unique name (where the name does NOT include -# the path). If a tag file is not located in the directory in which doxygen is -# run, you must also specify the path to the tagfile here. - -TAGFILES = "$(QT_INSTALL_DOCS)/qtcore/qtcore.tags=http://qt-project.org/doc/qt-5" \ - "$(QT_INSTALL_DOCS)/qtnetwork/qtnetwork.tags=http://qt-project.org/doc/qt-5" - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create a -# tag file that is based on the input files it reads. See section "Linking to -# external documentation" for more information about the usage of tag files. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external class will be listed in the -# class index. If set to NO only the inherited external classes will be listed. -# The default value is: NO. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed in -# the modules index. If set to NO, only the current project's groups will be -# listed. -# The default value is: YES. - -EXTERNAL_GROUPS = YES - -# If the EXTERNAL_PAGES tag is set to YES all external pages will be listed in -# the related pages index. If set to NO, only the current project's pages will -# be listed. -# The default value is: YES. - -EXTERNAL_PAGES = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of 'which perl'). -# The default file (with absolute path) is: /usr/bin/perl. - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES doxygen will generate a class diagram -# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to -# NO turns the diagrams off. Note that this option also works with HAVE_DOT -# disabled, but it is recommended to install and use dot, since it yields more -# powerful graphs. -# The default value is: YES. - -CLASS_DIAGRAMS = NO - -# You can define message sequence charts within doxygen comments using the \msc -# command. Doxygen will then run the mscgen tool (see: -# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the -# documentation. The MSCGEN_PATH tag allows you to specify the directory where -# the mscgen tool resides. If left empty the tool is assumed to be found in the -# default search path. - -MSCGEN_PATH = - -# You can include diagrams made with dia in doxygen documentation. Doxygen will -# then run dia to produce the diagram and insert it in the documentation. The -# DIA_PATH tag allows you to specify the directory where the dia binary resides. -# If left empty dia is assumed to be found in the default search path. - -DIA_PATH = - -# If set to YES, the inheritance and collaboration graphs will hide inheritance -# and usage relations if the target is undocumented or is not a class. -# The default value is: YES. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz (see: -# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent -# Bell Labs. The other options in this section have no effect if this option is -# set to NO -# The default value is: NO. - -HAVE_DOT = NO - -# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed -# to run in parallel. When set to 0 doxygen will base this on the number of -# processors available in the system. You can set it explicitly to a value -# larger than 0 to get control over the balance between CPU load and processing -# speed. -# Minimum value: 0, maximum value: 32, default value: 0. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_NUM_THREADS = 0 - -# When you want a differently looking font n the dot files that doxygen -# generates you can specify the font name using DOT_FONTNAME. You need to make -# sure dot is able to find the font, which can be done by putting it in a -# standard location or by setting the DOTFONTPATH environment variable or by -# setting DOT_FONTPATH to the directory containing the font. -# The default value is: Helvetica. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_FONTNAME = Helvetica - -# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of -# dot graphs. -# Minimum value: 4, maximum value: 24, default value: 10. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_FONTSIZE = 10 - -# By default doxygen will tell dot to use the default font as specified with -# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set -# the path where dot can find it using this tag. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_FONTPATH = - -# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for -# each documented class showing the direct and indirect inheritance relations. -# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO. -# The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a -# graph for each documented class showing the direct and indirect implementation -# dependencies (inheritance, containment, and class references variables) of the -# class with other documented classes. -# The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for -# groups, showing the direct groups dependencies. -# The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -UML_LOOK = NO - -# If the UML_LOOK tag is enabled, the fields and methods are shown inside the -# class node. If there are many fields or methods and many nodes the graph may -# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the -# number of items for each type to make the size more manageable. Set this to 0 -# for no limit. Note that the threshold may be exceeded by 50% before the limit -# is enforced. So when you set the threshold to 10, up to 15 fields may appear, -# but if the number exceeds 15, the total amount of fields shown is limited to -# 10. -# Minimum value: 0, maximum value: 100, default value: 10. -# This tag requires that the tag HAVE_DOT is set to YES. - -UML_LIMIT_NUM_FIELDS = 10 - -# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and -# collaboration graphs will show the relations between templates and their -# instances. -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -TEMPLATE_RELATIONS = NO - -# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to -# YES then doxygen will generate a graph for each documented file showing the -# direct and indirect include dependencies of the file with other documented -# files. -# The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. - -INCLUDE_GRAPH = YES - -# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are -# set to YES then doxygen will generate a graph for each documented file showing -# the direct and indirect include dependencies of the file with other documented -# files. -# The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH tag is set to YES then doxygen will generate a call -# dependency graph for every global function or class method. -# -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -CALL_GRAPH = NO - -# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller -# dependency graph for every global function or class method. -# -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable caller graphs for selected -# functions only using the \callergraph command. -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -CALLER_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical -# hierarchy of all classes instead of a textual one. -# The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the -# dependencies a directory has on other directories in a graphical way. The -# dependency relations are determined by the #include relations between the -# files in the directories. -# The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. -# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order -# to make the SVG files visible in IE 9+ (other browsers do not have this -# requirement). -# Possible values are: png, jpg, gif and svg. -# The default value is: png. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_IMAGE_FORMAT = png - -# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to -# enable generation of interactive SVG images that allow zooming and panning. -# -# Note that this requires a modern browser other than Internet Explorer. Tested -# and working are Firefox, Chrome, Safari, and Opera. -# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make -# the SVG files visible. Older versions of IE do not have SVG support. -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -INTERACTIVE_SVG = NO - -# The DOT_PATH tag can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the \dotfile -# command). -# This tag requires that the tag HAVE_DOT is set to YES. - -DOTFILE_DIRS = - -# The MSCFILE_DIRS tag can be used to specify one or more directories that -# contain msc files that are included in the documentation (see the \mscfile -# command). - -MSCFILE_DIRS = - -# The DIAFILE_DIRS tag can be used to specify one or more directories that -# contain dia files that are included in the documentation (see the \diafile -# command). - -DIAFILE_DIRS = - -# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes -# that will be shown in the graph. If the number of nodes in a graph becomes -# larger than this value, doxygen will truncate the graph, which is visualized -# by representing a node as a red box. Note that doxygen if the number of direct -# children of the root node in a graph is already larger than -# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that -# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. -# Minimum value: 0, maximum value: 10000, default value: 50. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_GRAPH_MAX_NODES = 50 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs -# generated by dot. A depth value of 3 means that only nodes reachable from the -# root by following a path via at most 3 edges will be shown. Nodes that lay -# further from the root node will be omitted. Note that setting this option to 1 -# or 2 may greatly reduce the computation time needed for large code bases. Also -# note that the size of a graph can be further restricted by -# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. -# Minimum value: 0, maximum value: 1000, default value: 0. -# This tag requires that the tag HAVE_DOT is set to YES. - -MAX_DOT_GRAPH_DEPTH = 0 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, because dot on Windows does not seem -# to support this out of the box. -# -# Warning: Depending on the platform used, enabling this option may lead to -# badly anti-aliased labels on the edges of a graph (i.e. they become hard to -# read). -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_TRANSPARENT = NO - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) support -# this, this feature is disabled by default. -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_MULTI_TARGETS = NO - -# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page -# explaining the meaning of the various boxes and arrows in the dot generated -# graphs. -# The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES doxygen will remove the intermediate dot -# files that are used to generate the various graphs. -# The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_CLEANUP = YES diff --git a/src/libcommuni/INSTALL b/src/libcommuni/INSTALL deleted file mode 100644 index 358a799..0000000 --- a/src/libcommuni/INSTALL +++ /dev/null @@ -1,26 +0,0 @@ -1. qmake -2. make -3. sudo make install -4. CONFIG += communi -5. enjoy! - -Build config ------------- -The default build config is resolved by qmake. To build Communi -specifically in release or debug mode, you may pass additional -"-config release" or "-config debug" parameters to qmake, respectively. -Furthermore, in order to build a static version of Communi, you -may pass "-config static". - -uchardet vs. ICU ----------------- -The default encoding detection backend is uchardet. It is bundled -with Communi and therefore requires no special build configuration. -In order to configure Communi with the ICU encoding detection backend, -pass "-config icu" parameters to qmake. This requires that the ICU -libraries are installed on the system. - -Example -------- -A static library in release mode: -qmake -config static -config release diff --git a/src/libcommuni/LICENSE b/src/libcommuni/LICENSE deleted file mode 100644 index dee610c..0000000 --- a/src/libcommuni/LICENSE +++ /dev/null @@ -1,26 +0,0 @@ -Copyright (C) 2008-2014 The Communi Project - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the {organization} nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/src/libcommuni/README b/src/libcommuni/README deleted file mode 100644 index f58c9d1..0000000 --- a/src/libcommuni/README +++ /dev/null @@ -1,3 +0,0 @@ -Website: http://communi.github.com -Bug tracker: http://communi.github.com/issues -IRC channel: #communi on irc.freenode.net diff --git a/src/libcommuni/configure b/src/libcommuni/configure deleted file mode 100755 index 3c29418..0000000 --- a/src/libcommuni/configure +++ /dev/null @@ -1,319 +0,0 @@ -#!/bin/sh - -BUILD_TREE=`/bin/pwd` -SOURCE_TREE=`dirname $0` -SOURCE_TREE=`cd "$SOURCE_TREE"; /bin/pwd` -CONFIG_VARS="$BUILD_TREE/.config.vars" - -INSTALL_PREFIX= -INSTALL_LIBS= -INSTALL_BINS= -INSTALL_HEADERS= -INSTALL_FEATURES= -INSTALL_IMPORTS= -INSTALL_QML= - -BUILD_EXAMPLES=yes -BUILD_TESTS=yes - -BUILD_UCHARDET=auto -BUILD_ICU=auto - -QMAKE_CONFIG= -QMAKE_PARAMS= -QMAKE_DEBUG= -QMAKE_SPEC= -OPT_HELP=no - -QMAKE=`which qmake || which qmake-qt5 || which qmake-qt4` 2>/dev/null - -if [ -f "$CONFIG_VARS" ]; then - rm "$CONFIG_VARS" -fi - -#------------------------------------------------------------------------------- -# parse command line arguments -#------------------------------------------------------------------------------- - -# parse the arguments, setting things to "yes" or "no" -while [ "$#" -gt 0 ]; do - CURRENT_OPT="$1" - UNKNOWN_ARG=no - case "$1" in - #Autoconf style options - --enable-*) - VAR=`echo $1 | sed "s,^--enable-\(.*\),\1,"` - VAL=yes - ;; - --disable-*) - VAR=`echo $1 | sed "s,^--disable-\(.*\),\1,"` - VAL=no - ;; - --*=*) - VAR=`echo $1 | sed "s,^--\(.*\)=.*,\1,"` - VAL=`echo $1 | sed "s,^--.*=\(.*\),\1,"` - ;; - --nomake|--make|--prefix|--libdir|--bindir|--headerdir|--featuredir|--importdir|--qmldir|--qmake|--spec|--config|--var) - VAR=`echo $1 | sed "s,^--\(.*\),\1,"` - shift - VAL="$1" - ;; - --no-*) - VAR=`echo $1 | sed "s,^--no-\(.*\),\1,"` - VAL=no - ;; - --*) - VAR=`echo $1 | sed "s,^--\(.*\),\1,"` - VAL=yes - ;; - #Qt style options that pass an argument - -nomake|-make|-prefix|-libdir|-bindir|-headerdir|-featuredir|-importdir|-qmldir|-qmake|-spec|-config|-var) - VAR=`echo $1 | sed "s,^-\(.*\),\1,"` - shift - VAL="$1" - ;; - #Qt style no options - -no-uchardet|-no-icu) - VAR=`echo $1 | sed 's,^-no-\(.*\),\1,'` - VAL=no - ;; - #Qt style yes options - -uchardet|-icu) - VAR=`echo $1 | sed 's,^-\(.*\),\1,'` - VAL=yes - ;; - -*) - VAR=`echo $1 | sed 's,^-\(.*\),\1,'` - VAL=unknown - ;; - *) - UNKNOWN_ARG=yes - ;; - esac - if [ "$UNKNOWN_ARG" = "yes" ]; then - echo "$1: unknown argument" - OPT_HELP=yes - ERROR=yes - shift - continue - fi - shift - - UNKNOWN_OPT=no - case "$VAR" in - prefix) - INSTALL_PREFIX="$VAL" - ;; - libdir) - INSTALL_LIBS="$VAL" - ;; - bindir) - INSTALL_BINS="$VAL" - ;; - headerdir) - INSTALL_HEADERS="$VAL" - ;; - featuredir) - INSTALL_FEATURES="$VAL" - ;; - importdir) - INSTALL_IMPORTS="$VAL" - ;; - qmldir) - INSTALL_QML="$VAL" - ;; - nomake) - case "$VAL" in - examples) - BUILD_EXAMPLES=no - ;; - tests) - BUILD_TESTS=no - ;; - *) - CURRENT_OPT="$VAL" - UNKNOWN_OPT=yes - ;; - esac - ;; - make) - case "$VAL" in - examples) - BUILD_EXAMPLES=yes - ;; - tests) - BUILD_TESTS=yes - ;; - *) - CURRENT_OPT="$VAL" - UNKNOWN_OPT=yes - ;; - esac - ;; - verbose) - QMAKE_CONFIG="$QMAKE_CONFIG verbose" - ;; - static) - QMAKE_CONFIG="$QMAKE_CONFIG static" - ;; - qmake) - QMAKE="$VAL" - ;; - spec) - QMAKE_SPEC="$VAL" - ;; - config) - QMAKE_CONFIG="$QMAKE_CONFIG $VAL" - ;; - var) - echo "$VAL" >> "$CONFIG_VARS" - ;; - d) - QMAKE_DEBUG="$QMAKE_DEBUG -d" - ;; - uchardet) - if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then - BUILD_UCHARDET=$VAL - else - UNKNOWN_OPT=yes - fi - ;; - icu) - if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then - BUILD_ICU=$VAL - else - UNKNOWN_OPT=yes - fi - ;; - h|help) - OPT_HELP=yes - ;; - *) - UNKNOWN_OPT=yes - ;; - esac - if [ "$UNKNOWN_OPT" = "yes" ]; then - echo "${CURRENT_OPT}: unknown option" - OPT_HELP=yes - ERROR=yes - fi -done - -if [ "$OPT_HELP" = "yes" ]; then - cat << EOF -Usage: configure [options] - -Installation options: - - -prefix <dir> ............ The installation prefix - -libdir <dir> ............ Libraries will be installed to <dir> - (default QT_INSTALL_LIBS) - -bindir <dir> ............ Binaries will be installed to <dir> - (default QT_INSTALL_BINS) - -headerdir <dir> ......... Headers will be installed to <dir> - (default QT_INSTALL_HEADERS/Communi) - -featuredir <dir> ........ Features will be installed to <dir> - (default QT_HOST_DATA/mkspecs/features) - -importdir <dir> ......... Imports for QML1 will be installed to <dir>/Communi - (default QT_INSTALL_IMPORTS/Communi) - -qmldir <dir> ............ Imports for QML2 will be installed to <dir>/Communi - (default QT_INSTALL_QML/Communi) - -Configure options: - - -verbose ................. Verbose build output - -static .................. Build static library - -qmake ................... qmake to use - -config (config) ......... Additional configuration options recognized by qmake - (eg. -config warn_off) - -var (value) ............. Additional variables recognized by qmake - (eg. -var "QMAKE_LFLAGS += -L/path/to/icu") - -make (part) ............. Add part to the list of parts to be built at - make time (available parts: examples tests) - -nomake (part) ........... Exclude part from the list of parts to be built - -Additional options: - - -no-uchardet ............. Do not build uchardet support - -uchardet ................ Build uchardet support - - -no-icu .................. Do not build ICU support - -icu ..................... Build ICU support - -EOF - [ "x$ERROR" = "xyes" ] && exit 1 - exit 0 -fi - -if [ ! -f "$QMAKE" ]; then - echo "ERROR: Unable to find qmake. Try $0 -qmake /path/to/qmake." - exit 1 -fi - -if [ "$INSTALL_PREFIX" != "" ]; then - [ "$INSTALL_LIBS" = "" ] && INSTALL_LIBS="$INSTALL_PREFIX/lib" - [ "$INSTALL_BINS" = "" ] && INSTALL_BINS="$INSTALL_PREFIX/bin" - [ "$INSTALL_HEADERS" = "" ] && INSTALL_HEADERS="$INSTALL_PREFIX/include" - [ "$INSTALL_FEATURES" = "" ] && INSTALL_FEATURES="$INSTALL_PREFIX/features" - [ "$INSTALL_IMPORTS" = "" ] && INSTALL_IMPORTS="$INSTALL_PREFIX/imports" - [ "$INSTALL_QML" = "" ] && INSTALL_QML="$INSTALL_PREFIX/qml" -fi -[ "$INSTALL_LIBS" != "" ] && QMAKE_PARAMS="$QMAKE_PARAMS IRC_INSTALL_LIBS=$INSTALL_LIBS" -[ "$INSTALL_BINS" != "" ] && QMAKE_PARAMS="$QMAKE_PARAMS IRC_INSTALL_BINS=$INSTALL_BINS" -[ "$INSTALL_HEADERS" != "" ] && QMAKE_PARAMS="$QMAKE_PARAMS IRC_INSTALL_HEADERS=$INSTALL_HEADERS" -[ "$INSTALL_FEATURES" != "" ] && QMAKE_PARAMS="$QMAKE_PARAMS IRC_INSTALL_FEATURES=$INSTALL_FEATURES" -[ "$INSTALL_IMPORTS" != "" ] && QMAKE_PARAMS="$QMAKE_PARAMS IRC_INSTALL_IMPORTS=$INSTALL_IMPORTS" -[ "$INSTALL_QML" != "" ] && QMAKE_PARAMS="$QMAKE_PARAMS IRC_INSTALL_QML=$INSTALL_QML" - -[ "$INSTALL_LIBS" = "" ] && INSTALL_LIBS=`$QMAKE -query QT_INSTALL_LIBS` -[ "$INSTALL_BINS" = "" ] && INSTALL_BINS=`$QMAKE -query QT_INSTALL_BINS` -[ "$INSTALL_HEADERS" = "" ] && INSTALL_HEADERS=`$QMAKE -query QT_INSTALL_HEADERS`/Communi - -if [ "$INSTALL_FEATURES" = "" ]; then - $QMAKE -query QT_HOST_DATA > /dev/null 2>&1 - if [ $? != 0 ]; then - INSTALL_FEATURES=`$QMAKE -query QMAKE_MKSPECS`/features - else - INSTALL_FEATURES=`$QMAKE -query QT_HOST_DATA`/mkspecs/features - fi -fi - -[ "$INSTALL_IMPORTS" = "" ] && INSTALL_IMPORTS=`$QMAKE -query QT_INSTALL_IMPORTS` -[ "$INSTALL_QML" = "" ] && INSTALL_QML=`$QMAKE -query QT_INSTALL_QML` - -[ "$BUILD_EXAMPLES" = "no" ] && QMAKE_PARAMS="$QMAKE_PARAMS -config no_examples" -[ "$BUILD_TESTS" = "no" ] && QMAKE_PARAMS="$QMAKE_PARAMS -config no_tests" - -[ "$BUILD_UCHARDET" = "no" ] && QMAKE_PARAMS="$QMAKE_PARAMS -config no_uchardet" -[ "$BUILD_ICU" = "no" ] && QMAKE_PARAMS="$QMAKE_PARAMS -config no_icu" - -[ "$QMAKE_SPEC" != "" ] && QMAKE_SPEC="-spec $QMAKE_SPEC" - -echo -echo "Running $QMAKE $QMAKE_SPEC..." - -$QMAKE $QMAKE_SPEC $QMAKE_DEBUG $QMAKE_PARAMS "CONFIG+=$QMAKE_CONFIG" -r $SOURCE_TREE/libcommuni.pro -if [ $? != 0 ]; then - echo "ERROR: qmake run failed." - exit 1 -fi - -echo -echo "Communi build configuration:" -if [ "$QMAKE_CONFIG" != "" ]; then - echo "Configuration ...................$QMAKE_CONFIG" -fi -echo "uchardet support ................ $BUILD_UCHARDET" -echo "ICU support ..................... $BUILD_ICU" -echo "Examples ........................ $BUILD_EXAMPLES" -echo "Tests ........................... $BUILD_TESTS" -echo -echo "Install libs .................... $INSTALL_LIBS" -#echo "Install binaries ................ $INSTALL_BINS" -echo "Install headers ................. $INSTALL_HEADERS" -echo "Install features ................ $INSTALL_FEATURES" -echo "Install QML1 imports ............ $INSTALL_IMPORTS" -echo "Install QML2 imports ............ $INSTALL_QML" -echo -echo Communi is now configured for building. Just run \'make\'. -echo diff --git a/src/libcommuni/doc/bot.dox b/src/libcommuni/doc/bot.dox deleted file mode 100644 index 8f28ee7..0000000 --- a/src/libcommuni/doc/bot.dox +++ /dev/null @@ -1,99 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/*! - \page bot Bot example - - The example presents a simple IRC bot that can handle half a dozen commands. - This article focuses on handling messages, and parsing and sending commands. - See the \ref minimal "Minimal example" for basics on setting up an IRC - connection. - - \image html bot.png "The bot example in action" - - The bot uses IrcCommandParser for parsing commands from messages received - from other clients. In order to take it in use, the desired commands must - be first introduced. - - \snippet bot/ircbot.cpp commands - - Some of the commands are context sensitive. Thus, the parser must know - the list of channels the bot is on. This is easily achieved with help of - IrcBufferModel. - - \snippet bot/ircbot.cpp channels - - Furthermore, the current target of the parser is later updated whenever - messages are received and parsed for commands. - - In order for the bot to be able to process private and channel - messages, it connects to the \ref IrcConnection::messageReceived() - "IrcConnection::privateMessageReceived()" signal. - - \snippet bot/ircbot.cpp messages - - The current target of the parser, and command triggers are chosen depending - on whether the received message is a channel or private message. The next - snippet illustrates how the logic of the bot has been implemented using - IrcCommandParser. - - \snippet bot/ircbot.cpp receive - - Notice how the help command is implemented as a "custom" command. This is - because it does not correspond to any actual IRC command, but we want the - bot to reply with a help message instead of performing an actual command. - - Finally, the last snippet shows the bot in action! - - \code - [17:42:44] ! CommuniBot172375 (~communi@12.34.56.78) joined #communi - [17:42:59] <jpnurmi> !say Communi rocks! - [17:42:59] <CommuniBot172375> Communi rocks! - [17:44:05] <jpnurmi> CommuniBot172375: nick CommuniRocks - [17:44:05] ! CommuniBot172375 changed nick to CommuniRocks - [17:44:18] <jpnurmi> CommuniRocks: quit - [17:44:19] ! CommuniRocks (~communi@12.34.56.78) has quit (Client Quit) - \endcode - - Files: - \li \ref examples/bot/main.cpp - \li \ref examples/bot/ircbot.h - \li \ref examples/bot/ircbot.cpp - - \file examples/bot/main.cpp - \brief \ref bot - \include examples/bot/main.cpp - - \file examples/bot/ircbot.h - \brief \ref bot - \include examples/bot/ircbot.h - - \file examples/bot/ircbot.cpp - \brief \ref bot - \include examples/bot/ircbot.cpp - */ diff --git a/src/libcommuni/doc/bot.png b/src/libcommuni/doc/bot.png Binary files differdeleted file mode 100644 index eed773b..0000000 --- a/src/libcommuni/doc/bot.png +++ /dev/null diff --git a/src/libcommuni/doc/client.dox b/src/libcommuni/doc/client.dox deleted file mode 100644 index f23e57f..0000000 --- a/src/libcommuni/doc/client.dox +++ /dev/null @@ -1,67 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/*! - \page client Client example - - The example illustrates how to create a simple GUI client. See \ref minimal - and \ref bot for getting familiar with the core concepts of Communi. - - \image html client.png "The client example in action" - - If you're curious what the example does behind the scenes, try setting an - environment variable \c IRC_DEBUG=1 in order to enable verbose debug output - as explained in \ref debugging. - - Files: - \li \ref examples/client/main.cpp - \li \ref examples/client/ircclient.h - \li \ref examples/client/ircclient.cpp - \li \ref examples/client/ircmessageformatter.h - \li \ref examples/client/ircmessageformatter.cpp - - \file examples/client/main.cpp - \brief \ref client - \include examples/client/main.cpp - - \file examples/client/ircclient.h - \brief \ref client - \include examples/client/ircclient.h - - \file examples/client/ircclient.cpp - \brief \ref client - \include examples/client/ircclient.cpp - - \file examples/client/ircmessageformatter.h - \brief \ref client - \include examples/client/ircmessageformatter.h - - \file examples/client/ircmessageformatter.cpp - \brief \ref client - \include examples/client/ircmessageformatter.cpp - */ diff --git a/src/libcommuni/doc/client.png b/src/libcommuni/doc/client.png Binary files differdeleted file mode 100644 index 43308ab..0000000 --- a/src/libcommuni/doc/client.png +++ /dev/null diff --git a/src/libcommuni/doc/communi.png b/src/libcommuni/doc/communi.png Binary files differdeleted file mode 100644 index ad02367..0000000 --- a/src/libcommuni/doc/communi.png +++ /dev/null diff --git a/src/libcommuni/doc/debugging.dox b/src/libcommuni/doc/debugging.dox deleted file mode 100644 index 8edb5bf..0000000 --- a/src/libcommuni/doc/debugging.dox +++ /dev/null @@ -1,45 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/*! - \page debugging Debugging techniques - - Communi recognizes the following environment variables at runtime: - - <table> - <tr> - <th>Variable</th> - <th>Description</th> - </tr> - <tr> - <td>IRC_DEBUG</td> - <td>Set to a non-zero value to make Communi print out connection status - changes and all activity including the received messages and sent commands.</td> - </tr> - </table> - */ diff --git a/src/libcommuni/doc/doc.pri b/src/libcommuni/doc/doc.pri deleted file mode 100644 index 055b5c9..0000000 --- a/src/libcommuni/doc/doc.pri +++ /dev/null @@ -1,20 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -OTHER_FILES += $$PWD/bot.dox -OTHER_FILES += $$PWD/client.dox -OTHER_FILES += $$PWD/communi.png -OTHER_FILES += $$PWD/debugging.dox -OTHER_FILES += $$PWD/enums.dox -OTHER_FILES += $$PWD/mainpage.dox -OTHER_FILES += $$PWD/minimal.dox -OTHER_FILES += $$PWD/modules.dox -OTHER_FILES += $$PWD/qml.dox -OTHER_FILES += $$PWD/qmlbot.dox -OTHER_FILES += $$PWD/usage.dox - -isEqual(_PRO_FILE_PWD_, $$OUT_PWD) { - docs.commands += QT_INSTALL_DOCS=$$[QT_INSTALL_DOCS] doxygen - QMAKE_EXTRA_TARGETS += docs -} diff --git a/src/libcommuni/doc/enums.dox b/src/libcommuni/doc/enums.dox deleted file mode 100644 index 0cbe240..0000000 --- a/src/libcommuni/doc/enums.dox +++ /dev/null @@ -1,1957 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/*! - \enum Irc::Color - This enum describes the (m)IRC colors. - - The default values are - <a href="http://www.w3.org/TR/SVG/types.html#ColorKeywords">SVG color keyword names</a> - provided by the World Wide Web Consortium - - \sa IrcPalette - */ - -/*! - \var Irc::White - \brief The default value is \c "white" - */ - -/*! - \var Irc::Black - \brief The default value is \c "black" - */ - -/*! - \var Irc::Blue - \brief The default value is \c "blue" - */ - -/*! - \var Irc::Green - \brief The default value is \c "green" - */ - -/*! - \var Irc::Red - \brief The default value is \c "red" - */ - -/*! - \var Irc::Brown - \brief The default value is \c "brown" - */ - -/*! - \var Irc::Purple - \brief The default value is \c "purple" - */ - -/*! - \var Irc::Orange - \brief The default value is \c "orange" - */ - -/*! - \var Irc::Yellow - \brief The default value is \c "yellow" - */ - -/*! - \var Irc::LightGreen - \brief The default value is \c "lightgreen" - */ - -/*! - \var Irc::Cyan - \brief The default value is \c "cyan" - */ - -/*! - \var Irc::LightCyan - \brief The default value is \c "lightcyan" - */ - -/*! - \var Irc::LightBlue - \brief The default value is \c "lightblue" - */ - -/*! - \var Irc::Pink - \brief The default value is \c "pink" - */ - -/*! - \var Irc::Gray - \brief The default value is \c "gray" - */ - -/*! - \var Irc::LightGray - \brief The default value is \c "lightgray" - */ - -/*! - \enum Irc::SortMethod - This enum describes the available model sort methods. - - \sa IrcBufferModel, IrcUserModel - */ - -/*! - \var Irc::SortByHand - \brief Sort by hand by calling sort() - */ - -/*! - \var Irc::SortByName - \brief Sort by name (Irc::NameRole) - */ - -/*! - \var Irc::SortByTitle - \brief Sort by title (Irc::TitleRole) - */ - -/*! - \var Irc::SortByActivity - \brief Sort by activity - */ - -/*! - \enum Irc::Code - - The command responses and error replies as defined in - <a href="http://tools.ietf.org/html/rfc1459">RFC 1459</a>, - <a href="http://tools.ietf.org/html/rfc2812">RFC 2812</a>, - and various <a href="http://www.alien.net.au/irc/irc2numerics.html">IRCd specific extensions</a>. - */ - -/*! - \var Irc::RPL_WELCOME - \brief 1 - */ -/*! - \var Irc::RPL_YOURHOST - \brief 2 - */ -/*! - \var Irc::RPL_CREATED - \brief 3 - */ -/*! - \var Irc::RPL_MYINFO - \brief 4 - */ -/*! - \var Irc::RPL_ISUPPORT - \brief 5 - */ -/*! - \var Irc::RPL_SNOMASK - \brief 8 - */ -/*! - \var Irc::RPL_STATMEMTOT - \brief 9 - */ -/*! - \var Irc::RPL_BOUNCE - \brief 10 - */ -/*! - \var Irc::RPL_STATMEM - \brief 10 - */ -/*! - \var Irc::RPL_YOURCOOKIE - \brief 14 - */ -/*! - \var Irc::RPL_YOURID - \brief 42 - */ -/*! - \var Irc::RPL_SAVENICK - \brief 43 - */ -/*! - \var Irc::RPL_ATTEMPTINGJUNC - \brief 50 - */ -/*! - \var Irc::RPL_ATTEMPTINGREROUTE - \brief 51 - */ -/*! - \var Irc::RPL_TRACELINK - \brief 200 - */ -/*! - \var Irc::RPL_TRACECONNECTING - \brief 201 - */ -/*! - \var Irc::RPL_TRACEHANDSHAKE - \brief 202 - */ -/*! - \var Irc::RPL_TRACEUNKNOWN - \brief 203 - */ -/*! - \var Irc::RPL_TRACEOPERATOR - \brief 204 - */ -/*! - \var Irc::RPL_TRACEUSER - \brief 205 - */ -/*! - \var Irc::RPL_TRACESERVER - \brief 206 - */ -/*! - \var Irc::RPL_TRACESERVICE - \brief 207 - */ -/*! - \var Irc::RPL_TRACENEWTYPE - \brief 208 - */ -/*! - \var Irc::RPL_TRACECLASS - \brief 209 - */ -/*! - \var Irc::RPL_TRACERECONNECT - \brief 210 - */ -/*! - \var Irc::RPL_STATS - \brief 210 - */ -/*! - \var Irc::RPL_STATSLINKINFO - \brief 211 - */ -/*! - \var Irc::RPL_STATSCOMMANDS - \brief 212 - */ -/*! - \var Irc::RPL_STATSCLINE - \brief 213 - */ -/*! - \var Irc::RPL_STATSNLINE - \brief 214 - */ -/*! - \var Irc::RPL_STATSILINE - \brief 215 - */ -/*! - \var Irc::RPL_STATSKLINE - \brief 216 - */ -/*! - \var Irc::RPL_STATSQLINE - \brief 217 - */ -/*! - \var Irc::RPL_STATSYLINE - \brief 218 - */ -/*! - \var Irc::RPL_ENDOFSTATS - \brief 219 - */ -/*! - \var Irc::RPL_UMODEIS - \brief 221 - */ -/*! - \var Irc::RPL_MODLIST - \brief 222 - */ -/*! - \var Irc::RPL_SQLINE_NICK - \brief 222 - */ -/*! - \var Irc::RPL_STATSZLINE - \brief 225 - */ -/*! - \var Irc::RPL_STATSCOUNT - \brief 226 - */ -/*! - \var Irc::RPL_SERVICEINFO - \brief 231 - */ -/*! - \var Irc::RPL_ENDOFSERVICES - \brief 232 - */ -/*! - \var Irc::RPL_SERVICE - \brief 233 - */ -/*! - \var Irc::RPL_SERVLIST - \brief 234 - */ -/*! - \var Irc::RPL_SERVLISTEND - \brief 235 - */ -/*! - \var Irc::RPL_STATSVERBOSE - \brief 236 - */ -/*! - \var Irc::RPL_STATSENGINE - \brief 237 - */ -/*! - \var Irc::RPL_STATSIAUTH - \brief 239 - */ -/*! - \var Irc::RPL_STATSVLINE - \brief 240 - */ -/*! - \var Irc::RPL_STATSLLINE - \brief 241 - */ -/*! - \var Irc::RPL_STATSUPTIME - \brief 242 - */ -/*! - \var Irc::RPL_STATSOLINE - \brief 243 - */ -/*! - \var Irc::RPL_STATSHLINE - \brief 244 - */ -/*! - \var Irc::RPL_STATSSLINE - \brief 245 - */ -/*! - \var Irc::RPL_STATSPING - \brief 246 - */ -/*! - \var Irc::RPL_STATSBLINE - \brief 247 - */ -/*! - \var Irc::RPL_STATSDEFINE - \brief 248 - */ -/*! - \var Irc::RPL_STATSDEBUG - \brief 249 - */ -/*! - \var Irc::RPL_STATSDLINE - \brief 250 - */ -/*! - \var Irc::RPL_STATSCONN - \brief 250 - */ -/*! - \var Irc::RPL_LUSERCLIENT - \brief 251 - */ -/*! - \var Irc::RPL_LUSEROP - \brief 252 - */ -/*! - \var Irc::RPL_LUSERUNKNOWN - \brief 253 - */ -/*! - \var Irc::RPL_LUSERCHANNELS - \brief 254 - */ -/*! - \var Irc::RPL_LUSERME - \brief 255 - */ -/*! - \var Irc::RPL_ADMINME - \brief 256 - */ -/*! - \var Irc::RPL_ADMINLOC1 - \brief 257 - */ -/*! - \var Irc::RPL_ADMINLOC2 - \brief 258 - */ -/*! - \var Irc::RPL_ADMINEMAIL - \brief 259 - */ -/*! - \var Irc::RPL_TRACELOG - \brief 261 - */ -/*! - \var Irc::RPL_TRACEPING - \brief 262 - */ -/*! - \var Irc::RPL_TRACEEND - \brief 262 - */ -/*! - \var Irc::RPL_TRYAGAIN - \brief 263 - */ -/*! - \var Irc::RPL_LOCALUSERS - \brief 265 - */ -/*! - \var Irc::RPL_GLOBALUSERS - \brief 266 - */ -/*! - \var Irc::RPL_START_NETSTAT - \brief 267 - */ -/*! - \var Irc::RPL_NETSTAT - \brief 268 - */ -/*! - \var Irc::RPL_END_NETSTAT - \brief 269 - */ -/*! - \var Irc::RPL_PRIVS - \brief 270 - */ -/*! - \var Irc::RPL_SILELIST - \brief 271 - */ -/*! - \var Irc::RPL_ENDOFSILELIST - \brief 272 - */ -/*! - \var Irc::RPL_NOTIFY - \brief 273 - */ -/*! - \var Irc::RPL_ENDNOTIFY - \brief 274 - */ -/*! - \var Irc::RPL_STATSDELTA - \brief 274 - */ -/*! - \var Irc::RPL_VCHANEXIST - \brief 276 - */ -/*! - \var Irc::RPL_VCHANLIST - \brief 277 - */ -/*! - \var Irc::RPL_VCHANHELP - \brief 278 - */ -/*! - \var Irc::RPL_GLIST - \brief 280 - */ -/*! - \var Irc::RPL_ENDOFGLIST - \brief 281 - */ -/*! - \var Irc::RPL_ACCEPTLIST - \brief 281 - */ -/*! - \var Irc::RPL_ENDOFACCEPT - \brief 282 - */ -/*! - \var Irc::RPL_JUPELIST - \brief 282 - */ -/*! - \var Irc::RPL_ENDOFJUPELIST - \brief 283 - */ -/*! - \var Irc::RPL_FEATURE - \brief 284 - */ -/*! - \var Irc::RPL_GLIST_HASH - \brief 285 - */ -/*! - \var Irc::RPL_CHANINFO_HANDLE - \brief 285 - */ -/*! - \var Irc::RPL_NEWHOSTIS - \brief 285 - */ -/*! - \var Irc::RPL_CHANINFO_USERS - \brief 286 - */ -/*! - \var Irc::RPL_CHKHEAD - \brief 286 - */ -/*! - \var Irc::RPL_CHANINFO_CHOPS - \brief 287 - */ -/*! - \var Irc::RPL_CHANUSER - \brief 287 - */ -/*! - \var Irc::RPL_CHANINFO_VOICES - \brief 288 - */ -/*! - \var Irc::RPL_PATCHHEAD - \brief 288 - */ -/*! - \var Irc::RPL_CHANINFO_AWAY - \brief 289 - */ -/*! - \var Irc::RPL_PATCHCON - \brief 289 - */ -/*! - \var Irc::RPL_CHANINFO_OPERS - \brief 290 - */ -/*! - \var Irc::RPL_HELPHDR - \brief 290 - */ -/*! - \var Irc::RPL_DATASTR - \brief 290 - */ -/*! - \var Irc::RPL_CHANINFO_BANNED - \brief 291 - */ -/*! - \var Irc::RPL_HELPOP - \brief 291 - */ -/*! - \var Irc::RPL_ENDOFCHECK - \brief 291 - */ -/*! - \var Irc::RPL_CHANINFO_BANS - \brief 292 - */ -/*! - \var Irc::RPL_HELPTLR - \brief 292 - */ -/*! - \var Irc::RPL_CHANINFO_INVITE - \brief 293 - */ -/*! - \var Irc::RPL_HELPHLP - \brief 293 - */ -/*! - \var Irc::RPL_CHANINFO_INVITES - \brief 294 - */ -/*! - \var Irc::RPL_HELPFWD - \brief 294 - */ -/*! - \var Irc::RPL_CHANINFO_KICK - \brief 295 - */ -/*! - \var Irc::RPL_HELPIGN - \brief 295 - */ -/*! - \var Irc::RPL_CHANINFO_KICKS - \brief 296 - */ -/*! - \var Irc::RPL_END_CHANINFO - \brief 299 - */ -/*! - \var Irc::RPL_NONE - \brief 300 - */ -/*! - \var Irc::RPL_AWAY - \brief 301 - */ -/*! - \var Irc::RPL_USERHOST - \brief 302 - */ -/*! - \var Irc::RPL_ISON - \brief 303 - */ -/*! - \var Irc::RPL_TEXT - \brief 304 - */ -/*! - \var Irc::RPL_UNAWAY - \brief 305 - */ -/*! - \var Irc::RPL_NOWAWAY - \brief 306 - */ -/*! - \var Irc::RPL_WHOISREGNICK - \brief 307 - */ -/*! - \var Irc::RPL_SUSERHOST - \brief 307 - */ -/*! - \var Irc::RPL_NOTIFYACTION - \brief 308 - */ -/*! - \var Irc::RPL_WHOISADMIN - \brief 308 - */ -/*! - \var Irc::RPL_NICKTRACE - \brief 309 - */ -/*! - \var Irc::RPL_WHOISSADMIN - \brief 309 - */ -/*! - \var Irc::RPL_WHOISHELPER - \brief 309 - */ -/*! - \var Irc::RPL_WHOISSVCMSG - \brief 310 - */ -/*! - \var Irc::RPL_WHOISHELPOP - \brief 310 - */ -/*! - \var Irc::RPL_WHOISSERVICE - \brief 310 - */ -/*! - \var Irc::RPL_WHOISUSER - \brief 311 - */ -/*! - \var Irc::RPL_WHOISSERVER - \brief 312 - */ -/*! - \var Irc::RPL_WHOISOPERATOR - \brief 313 - */ -/*! - \var Irc::RPL_WHOWASUSER - \brief 314 - */ -/*! - \var Irc::RPL_ENDOFWHO - \brief 315 - */ -/*! - \var Irc::RPL_WHOISCHANOP - \brief 316 - */ -/*! - \var Irc::RPL_WHOISIDLE - \brief 317 - */ -/*! - \var Irc::RPL_ENDOFWHOIS - \brief 318 - */ -/*! - \var Irc::RPL_WHOISCHANNELS - \brief 319 - */ -/*! - \var Irc::RPL_WHOISVIRT - \brief 320 - */ -/*! - \var Irc::RPL_WHOIS_HIDDEN - \brief 320 - */ -/*! - \var Irc::RPL_WHOISSPECIAL - \brief 320 - */ -/*! - \var Irc::RPL_LISTSTART - \brief 321 - */ -/*! - \var Irc::RPL_LIST - \brief 322 - */ -/*! - \var Irc::RPL_LISTEND - \brief 323 - */ -/*! - \var Irc::RPL_CHANNELMODEIS - \brief 324 - */ -/*! - \var Irc::RPL_UNIQOPIS - \brief 325 - */ -/*! - \var Irc::RPL_CHANNELPASSIS - \brief 325 - */ -/*! - \var Irc::RPL_NOCHANPASS - \brief 326 - */ -/*! - \var Irc::RPL_CHPASSUNKNOWN - \brief 327 - */ -/*! - \var Irc::RPL_CHANNEL_URL - \brief 328 - */ -/*! - \var Irc::RPL_CREATIONTIME - \brief 329 - */ -/*! - \var Irc::RPL_WHOWAS_TIME - \brief 330 - */ -/*! - \var Irc::RPL_WHOISACCOUNT - \brief 330 - */ -/*! - \var Irc::RPL_NOTOPIC - \brief 331 - */ -/*! - \var Irc::RPL_TOPIC - \brief 332 - */ -/*! - \var Irc::RPL_TOPICWHOTIME - \brief 333 - */ -/*! - \var Irc::RPL_LISTUSAGE - \brief 334 - */ -/*! - \var Irc::RPL_COMMANDSYNTAX - \brief 334 - */ -/*! - \var Irc::RPL_LISTSYNTAX - \brief 334 - */ -/*! - \var Irc::RPL_CHANPASSOK - \brief 338 - */ -/*! - \var Irc::RPL_WHOISACTUALLY - \brief 338 - */ -/*! - \var Irc::RPL_BADCHANPASS - \brief 339 - */ -/*! - \var Irc::RPL_INVITING - \brief 341 - */ -/*! - \var Irc::RPL_SUMMONING - \brief 342 - */ -/*! - \var Irc::RPL_INVITED - \brief 345 - */ -/*! - \var Irc::RPL_INVITELIST - \brief 346 - */ -/*! - \var Irc::RPL_ENDOFINVITELIST - \brief 347 - */ -/*! - \var Irc::RPL_EXCEPTLIST - \brief 348 - */ -/*! - \var Irc::RPL_ENDOFEXCEPTLIST - \brief 349 - */ -/*! - \var Irc::RPL_VERSION - \brief 351 - */ -/*! - \var Irc::RPL_WHOREPLY - \brief 352 - */ -/*! - \var Irc::RPL_NAMREPLY - \brief 353 - */ -/*! - \var Irc::RPL_WHOSPCRPL - \brief 354 - */ -/*! - \var Irc::RPL_NAMREPLY_ - \brief 355 - */ -/*! - \var Irc::RPL_KILLDONE - \brief 361 - */ -/*! - \var Irc::RPL_CLOSING - \brief 362 - */ -/*! - \var Irc::RPL_CLOSEEND - \brief 363 - */ -/*! - \var Irc::RPL_LINKS - \brief 364 - */ -/*! - \var Irc::RPL_ENDOFLINKS - \brief 365 - */ -/*! - \var Irc::RPL_ENDOFNAMES - \brief 366 - */ -/*! - \var Irc::RPL_BANLIST - \brief 367 - */ -/*! - \var Irc::RPL_ENDOFBANLIST - \brief 368 - */ -/*! - \var Irc::RPL_ENDOFWHOWAS - \brief 369 - */ -/*! - \var Irc::RPL_INFO - \brief 371 - */ -/*! - \var Irc::RPL_MOTD - \brief 372 - */ -/*! - \var Irc::RPL_INFOSTART - \brief 373 - */ -/*! - \var Irc::RPL_ENDOFINFO - \brief 374 - */ -/*! - \var Irc::RPL_MOTDSTART - \brief 375 - */ -/*! - \var Irc::RPL_ENDOFMOTD - \brief 376 - */ -/*! - \var Irc::RPL_KICKEXPIRED - \brief 377 - */ -/*! - \var Irc::RPL_SPAM - \brief 377 - */ -/*! - \var Irc::RPL_BANEXPIRED - \brief 378 - */ -/*! - \var Irc::RPL_WHOISHOST - \brief 378 - */ -/*! - \var Irc::RPL_KICKLINKED - \brief 379 - */ -/*! - \var Irc::RPL_WHOISMODES - \brief 379 - */ -/*! - \var Irc::RPL_BANLINKED - \brief 380 - */ -/*! - \var Irc::RPL_YOURHELPER - \brief 380 - */ -/*! - \var Irc::RPL_YOUREOPER - \brief 381 - */ -/*! - \var Irc::RPL_REHASHING - \brief 382 - */ -/*! - \var Irc::RPL_YOURESERVICE - \brief 383 - */ -/*! - \var Irc::RPL_MYPORTIS - \brief 384 - */ -/*! - \var Irc::RPL_NOTOPERANYMORE - \brief 385 - */ -/*! - \var Irc::RPL_QLIST - \brief 386 - */ -/*! - \var Irc::RPL_IRCOPS - \brief 386 - */ -/*! - \var Irc::RPL_ENDOFQLIST - \brief 387 - */ -/*! - \var Irc::RPL_ENDOFIRCOPS - \brief 387 - */ -/*! - \var Irc::RPL_ALIST - \brief 388 - */ -/*! - \var Irc::RPL_ENDOFALIST - \brief 389 - */ -/*! - \var Irc::RPL_TIME - \brief 391 - */ -/*! - \var Irc::RPL_USERSSTART - \brief 392 - */ -/*! - \var Irc::RPL_USERS - \brief 393 - */ -/*! - \var Irc::RPL_ENDOFUSERS - \brief 394 - */ -/*! - \var Irc::RPL_NOUSERS - \brief 395 - */ -/*! - \var Irc::RPL_HOSTHIDDEN - \brief 396 - */ -/*! - \var Irc::ERR_UNKNOWNERROR - \brief 400 - */ -/*! - \var Irc::ERR_NOSUCHNICK - \brief 401 - */ -/*! - \var Irc::ERR_NOSUCHSERVER - \brief 402 - */ -/*! - \var Irc::ERR_NOSUCHCHANNEL - \brief 403 - */ -/*! - \var Irc::ERR_CANNOTSENDTOCHAN - \brief 404 - */ -/*! - \var Irc::ERR_TOOMANYCHANNELS - \brief 405 - */ -/*! - \var Irc::ERR_WASNOSUCHNICK - \brief 406 - */ -/*! - \var Irc::ERR_TOOMANYTARGETS - \brief 407 - */ -/*! - \var Irc::ERR_NOSUCHSERVICE - \brief 408 - */ -/*! - \var Irc::ERR_NOCOLORSONCHAN - \brief 408 - */ -/*! - \var Irc::ERR_NOORIGIN - \brief 409 - */ -/*! - \var Irc::ERR_NORECIPIENT - \brief 411 - */ -/*! - \var Irc::ERR_NOTEXTTOSEND - \brief 412 - */ -/*! - \var Irc::ERR_NOTOPLEVEL - \brief 413 - */ -/*! - \var Irc::ERR_WILDTOPLEVEL - \brief 414 - */ -/*! - \var Irc::ERR_BADMASK - \brief 415 - */ -/*! - \var Irc::ERR_TOOMANYMATCHES - \brief 416 - */ -/*! - \var Irc::ERR_QUERYTOOLONG - \brief 416 - */ -/*! - \var Irc::ERR_LENGTHTRUNCATED - \brief 419 - */ -/*! - \var Irc::ERR_UNKNOWNCOMMAND - \brief 421 - */ -/*! - \var Irc::ERR_NOMOTD - \brief 422 - */ -/*! - \var Irc::ERR_NOADMININFO - \brief 423 - */ -/*! - \var Irc::ERR_FILEERROR - \brief 424 - */ -/*! - \var Irc::ERR_NOOPERMOTD - \brief 425 - */ -/*! - \var Irc::ERR_TOOMANYAWAY - \brief 429 - */ -/*! - \var Irc::ERR_EVENTNICKCHANGE - \brief 430 - */ -/*! - \var Irc::ERR_NONICKNAMEGIVEN - \brief 431 - */ -/*! - \var Irc::ERR_ERRONEUSNICKNAME - \brief 432 - */ -/*! - \var Irc::ERR_NICKNAMEINUSE - \brief 433 - */ -/*! - \var Irc::ERR_SERVICENAMEINUSE - \brief 434 - */ -/*! - \var Irc::ERR_NORULES - \brief 434 - */ -/*! - \var Irc::ERR_SERVICECONFUSED - \brief 435 - */ -/*! - \var Irc::ERR_BANONCHAN - \brief 435 - */ -/*! - \var Irc::ERR_NICKCOLLISION - \brief 436 - */ -/*! - \var Irc::ERR_UNAVAILRESOURCE - \brief 437 - */ -/*! - \var Irc::ERR_BANNICKCHANGE - \brief 437 - */ -/*! - \var Irc::ERR_NICKTOOFAST - \brief 438 - */ -/*! - \var Irc::ERR_DEAD - \brief 438 - */ -/*! - \var Irc::ERR_TARGETTOOFAST - \brief 439 - */ -/*! - \var Irc::ERR_SERVICESDOWN - \brief 440 - */ -/*! - \var Irc::ERR_USERNOTINCHANNEL - \brief 441 - */ -/*! - \var Irc::ERR_NOTONCHANNEL - \brief 442 - */ -/*! - \var Irc::ERR_USERONCHANNEL - \brief 443 - */ -/*! - \var Irc::ERR_NOLOGIN - \brief 444 - */ -/*! - \var Irc::ERR_SUMMONDISABLED - \brief 445 - */ -/*! - \var Irc::ERR_USERSDISABLED - \brief 446 - */ -/*! - \var Irc::ERR_NONICKCHANGE - \brief 447 - */ -/*! - \var Irc::ERR_NOTIMPLEMENTED - \brief 449 - */ -/*! - \var Irc::ERR_NOTREGISTERED - \brief 451 - */ -/*! - \var Irc::ERR_IDCOLLISION - \brief 452 - */ -/*! - \var Irc::ERR_NICKLOST - \brief 453 - */ -/*! - \var Irc::ERR_HOSTILENAME - \brief 455 - */ -/*! - \var Irc::ERR_ACCEPTFULL - \brief 456 - */ -/*! - \var Irc::ERR_ACCEPTEXIST - \brief 457 - */ -/*! - \var Irc::ERR_ACCEPTNOT - \brief 458 - */ -/*! - \var Irc::ERR_NOHIDING - \brief 459 - */ -/*! - \var Irc::ERR_NOTFORHALFOPS - \brief 460 - */ -/*! - \var Irc::ERR_NEEDMOREPARAMS - \brief 461 - */ -/*! - \var Irc::ERR_ALREADYREGISTERED - \brief 462 - */ -/*! - \var Irc::ERR_NOPERMFORHOST - \brief 463 - */ -/*! - \var Irc::ERR_PASSWDMISMATCH - \brief 464 - */ -/*! - \var Irc::ERR_YOUREBANNEDCREEP - \brief 465 - */ -/*! - \var Irc::ERR_YOUWILLBEBANNED - \brief 466 - */ -/*! - \var Irc::ERR_KEYSET - \brief 467 - */ -/*! - \var Irc::ERR_INVALIDUSERNAME - \brief 468 - */ -/*! - \var Irc::ERR_ONLYSERVERSCANCHANGE - \brief 468 - */ -/*! - \var Irc::ERR_LINKSET - \brief 469 - */ -/*! - \var Irc::ERR_LINKCHANNEL - \brief 470 - */ -/*! - \var Irc::ERR_KICKEDFROMCHAN - \brief 470 - */ -/*! - \var Irc::ERR_CHANNELISFULL - \brief 471 - */ -/*! - \var Irc::ERR_UNKNOWNMODE - \brief 472 - */ -/*! - \var Irc::ERR_INVITEONLYCHAN - \brief 473 - */ -/*! - \var Irc::ERR_BANNEDFROMCHAN - \brief 474 - */ -/*! - \var Irc::ERR_BADCHANNELKEY - \brief 475 - */ -/*! - \var Irc::ERR_BADCHANMASK - \brief 476 - */ -/*! - \var Irc::ERR_NOCHANMODES - \brief 477 - */ -/*! - \var Irc::ERR_NEEDREGGEDNICK - \brief 477 - */ -/*! - \var Irc::ERR_BANLISTFULL - \brief 478 - */ -/*! - \var Irc::ERR_BADCHANNAME - \brief 479 - */ -/*! - \var Irc::ERR_LINKFAIL - \brief 479 - */ -/*! - \var Irc::ERR_NOULINE - \brief 480 - */ -/*! - \var Irc::ERR_CANNOTKNOCK - \brief 480 - */ -/*! - \var Irc::ERR_NOPRIVILEGES - \brief 481 - */ -/*! - \var Irc::ERR_CHANOPRIVSNEEDED - \brief 482 - */ -/*! - \var Irc::ERR_CANTKILLSERVER - \brief 483 - */ -/*! - \var Irc::ERR_RESTRICTED - \brief 484 - */ -/*! - \var Irc::ERR_ISCHANSERVICE - \brief 484 - */ -/*! - \var Irc::ERR_DESYNC - \brief 484 - */ -/*! - \var Irc::ERR_ATTACKDENY - \brief 484 - */ -/*! - \var Irc::ERR_UNIQOPRIVSNEEDED - \brief 485 - */ -/*! - \var Irc::ERR_KILLDENY - \brief 485 - */ -/*! - \var Irc::ERR_CANTKICKADMIN - \brief 485 - */ -/*! - \var Irc::ERR_ISREALSERVICE - \brief 485 - */ -/*! - \var Irc::ERR_NONONREG - \brief 486 - */ -/*! - \var Irc::ERR_HTMDISABLED - \brief 486 - */ -/*! - \var Irc::ERR_ACCOUNTONLY - \brief 486 - */ -/*! - \var Irc::ERR_CHANTOORECENT - \brief 487 - */ -/*! - \var Irc::ERR_MSGSERVICES - \brief 487 - */ -/*! - \var Irc::ERR_TSLESSCHAN - \brief 488 - */ -/*! - \var Irc::ERR_VOICENEEDED - \brief 489 - */ -/*! - \var Irc::ERR_SECUREONLYCHAN - \brief 489 - */ -/*! - \var Irc::ERR_NOOPERHOST - \brief 491 - */ -/*! - \var Irc::ERR_NOSERVICEHOST - \brief 492 - */ -/*! - \var Irc::ERR_NOFEATURE - \brief 493 - */ -/*! - \var Irc::ERR_BADFEATURE - \brief 494 - */ -/*! - \var Irc::ERR_BADLOGTYPE - \brief 495 - */ -/*! - \var Irc::ERR_BADLOGSYS - \brief 496 - */ -/*! - \var Irc::ERR_BADLOGVALUE - \brief 497 - */ -/*! - \var Irc::ERR_ISOPERLCHAN - \brief 498 - */ -/*! - \var Irc::ERR_CHANOWNPRIVNEEDED - \brief 499 - */ -/*! - \var Irc::ERR_UMODEUNKNOWNFLAG - \brief 501 - */ -/*! - \var Irc::ERR_USERSDONTMATCH - \brief 502 - */ -/*! - \var Irc::ERR_GHOSTEDCLIENT - \brief 503 - */ -/*! - \var Irc::ERR_VWORLDWARN - \brief 503 - */ -/*! - \var Irc::ERR_USERNOTONSERV - \brief 504 - */ -/*! - \var Irc::ERR_SILELISTFULL - \brief 511 - */ -/*! - \var Irc::ERR_TOOMANYWATCH - \brief 512 - */ -/*! - \var Irc::ERR_BADPING - \brief 513 - */ -/*! - \var Irc::ERR_INVALID_ERROR - \brief 514 - */ -/*! - \var Irc::ERR_TOOMANYDCC - \brief 514 - */ -/*! - \var Irc::ERR_BADEXPIRE - \brief 515 - */ -/*! - \var Irc::ERR_DONTCHEAT - \brief 516 - */ -/*! - \var Irc::ERR_DISABLED - \brief 517 - */ -/*! - \var Irc::ERR_NOINVITE - \brief 518 - */ -/*! - \var Irc::ERR_LONGMASK - \brief 518 - */ -/*! - \var Irc::ERR_ADMONLY - \brief 519 - */ -/*! - \var Irc::ERR_TOOMANYUSERS - \brief 519 - */ -/*! - \var Irc::ERR_OPERONLY - \brief 520 - */ -/*! - \var Irc::ERR_MASKTOOWIDE - \brief 520 - */ -/*! - \var Irc::ERR_WHOTRUNC - \brief 520 - */ -/*! - \var Irc::ERR_LISTSYNTAX - \brief 521 - */ -/*! - \var Irc::ERR_WHOSYNTAX - \brief 522 - */ -/*! - \var Irc::ERR_WHOLIMEXCEED - \brief 523 - */ -/*! - \var Irc::ERR_QUARANTINED - \brief 524 - */ -/*! - \var Irc::ERR_OPERSPVERIFY - \brief 524 - */ -/*! - \var Irc::ERR_REMOTEPFX - \brief 525 - */ -/*! - \var Irc::ERR_PFXUNROUTABLE - \brief 526 - */ -/*! - \var Irc::ERR_BADHOSTMASK - \brief 550 - */ -/*! - \var Irc::ERR_HOSTUNAVAIL - \brief 551 - */ -/*! - \var Irc::ERR_USINGSLINE - \brief 552 - */ -/*! - \var Irc::ERR_STATSSLINE - \brief 553 - */ -/*! - \var Irc::RPL_LOGON - \brief 600 - */ -/*! - \var Irc::RPL_LOGOFF - \brief 601 - */ -/*! - \var Irc::RPL_WATCHOFF - \brief 602 - */ -/*! - \var Irc::RPL_WATCHSTAT - \brief 603 - */ -/*! - \var Irc::RPL_NOWON - \brief 604 - */ -/*! - \var Irc::RPL_NOWOFF - \brief 605 - */ -/*! - \var Irc::RPL_WATCHLIST - \brief 606 - */ -/*! - \var Irc::RPL_ENDOFWATCHLIST - \brief 607 - */ -/*! - \var Irc::RPL_WATCHCLEAR - \brief 608 - */ -/*! - \var Irc::RPL_ISOPER - \brief 610 - */ -/*! - \var Irc::RPL_ISLOCOP - \brief 611 - */ -/*! - \var Irc::RPL_ISNOTOPER - \brief 612 - */ -/*! - \var Irc::RPL_ENDOFISOPER - \brief 613 - */ -/*! - \var Irc::RPL_DCCSTATUS - \brief 617 - */ -/*! - \var Irc::RPL_DCCLIST - \brief 618 - */ -/*! - \var Irc::RPL_ENDOFDCCLIST - \brief 619 - */ -/*! - \var Irc::RPL_WHOWASHOST - \brief 619 - */ -/*! - \var Irc::RPL_DCCINFO - \brief 620 - */ -/*! - \var Irc::RPL_ENDOFO - \brief 626 - */ -/*! - \var Irc::RPL_SETTINGS - \brief 630 - */ -/*! - \var Irc::RPL_ENDOFSETTINGS - \brief 631 - */ -/*! - \var Irc::RPL_DUMPING - \brief 640 - */ -/*! - \var Irc::RPL_DUMPRPL - \brief 641 - */ -/*! - \var Irc::RPL_EODUMP - \brief 642 - */ -/*! - \var Irc::RPL_TRACEROUTE_HOP - \brief 660 - */ -/*! - \var Irc::RPL_TRACEROUTE_START - \brief 661 - */ -/*! - \var Irc::RPL_MODECHANGEWARN - \brief 662 - */ -/*! - \var Irc::RPL_CHANREDIR - \brief 663 - */ -/*! - \var Irc::RPL_SERVMODEIS - \brief 664 - */ -/*! - \var Irc::RPL_OTHERUMODEIS - \brief 665 - */ -/*! - \var Irc::RPL_ENDOF_GENERIC - \brief 666 - */ -/*! - \var Irc::RPL_WHOWASDETAILS - \brief 670 - */ -/*! - \var Irc::RPL_WHOISSECURE - \brief 671 - */ -/*! - \var Irc::RPL_UNKNOWNMODES - \brief 672 - */ -/*! - \var Irc::RPL_CANNOTSETMODES - \brief 673 - */ -/*! - \var Irc::RPL_LUSERSTAFF - \brief 678 - */ -/*! - \var Irc::RPL_TIMEONSERVERIS - \brief 679 - */ -/*! - \var Irc::RPL_NETWORKS - \brief 682 - */ -/*! - \var Irc::RPL_YOURLANGUAGEIS - \brief 687 - */ -/*! - \var Irc::RPL_LANGUAGE - \brief 688 - */ -/*! - \var Irc::RPL_WHOISSTAFF - \brief 689 - */ -/*! - \var Irc::RPL_WHOISLANGUAGE - \brief 690 - */ -/*! - \var Irc::RPL_HELPSTART - \brief 704 - */ -/*! - \var Irc::RPL_HELPTXT - \brief 705 - */ -/*! - \var Irc::RPL_ENDOFHELP - \brief 706 - */ -/*! - \var Irc::RPL_ETRACEFULL - \brief 708 - */ -/*! - \var Irc::RPL_ETRACE - \brief 709 - */ -/*! - \var Irc::RPL_KNOCK - \brief 710 - */ -/*! - \var Irc::RPL_KNOCKDLVR - \brief 711 - */ -/*! - \var Irc::ERR_TOOMANYKNOCK - \brief 712 - */ -/*! - \var Irc::ERR_CHANOPEN - \brief 713 - */ -/*! - \var Irc::ERR_KNOCKONCHAN - \brief 714 - */ -/*! - \var Irc::ERR_KNOCKDISABLED - \brief 715 - */ -/*! - \var Irc::RPL_TARGUMODEG - \brief 716 - */ -/*! - \var Irc::RPL_TARGNOTIFY - \brief 717 - */ -/*! - \var Irc::RPL_UMODEGMSG - \brief 718 - */ -/*! - \var Irc::RPL_ENDOFOMOTD - \brief 722 - */ -/*! - \var Irc::ERR_NOPRIVS - \brief 723 - */ -/*! - \var Irc::RPL_TESTMARK - \brief 724 - */ -/*! - \var Irc::RPL_TESTLINE - \brief 725 - */ -/*! - \var Irc::RPL_NOTESTLINE - \brief 726 - */ -/*! - \var Irc::RPL_XINFO - \brief 771 - */ -/*! - \var Irc::RPL_XINFOSTART - \brief 773 - */ -/*! - \var Irc::RPL_XINFOEND - \brief 774 - */ -/*! - \var Irc::ERR_CANNOTDOCOMMAND - \brief 972 - */ -/*! - \var Irc::ERR_CANNOTCHANGEUMODE - \brief 973 - */ -/*! - \var Irc::ERR_CANNOTCHANGECHANMODE - \brief 974 - */ -/*! - \var Irc::ERR_CANNOTCHANGESERVERMODE - \brief 975 - */ -/*! - \var Irc::ERR_CANNOTSENDTONICK - \brief 976 - */ -/*! - \var Irc::ERR_UNKNOWNSERVERMODE - \brief 977 - */ -/*! - \var Irc::ERR_SERVERMODELOCK - \brief 979 - */ -/*! - \var Irc::ERR_BADCHARENCODING - \brief 980 - */ -/*! - \var Irc::ERR_TOOMANYLANGUAGES - \brief 981 - */ -/*! - \var Irc::ERR_NOLANGUAGE - \brief 982 - */ -/*! - \var Irc::ERR_TEXTTOOSHORT - \brief 983 - */ -/*! - \var Irc::ERR_NUMERIC_ERR - \brief 999 - */ - -/*! - \enum Irc::DataRole - This enum describes the available model data roles. - - \sa IrcBufferModel, IrcUserModel - */ - -/*! - \var Irc::UserRole - \brief User object (\ref IrcUser*) - */ - -/*! - \var Irc::BufferRole - \brief Buffer object (\ref IrcBuffer*) - */ - -/*! - \var Irc::ChannelRole - \brief Channel object (\ref IrcChannel*) - */ - -/*! - \var Irc::NameRole - \brief Buffer/user name (QString) - */ - -/*! - \var Irc::PrefixRole - \brief Channel/user prefix (QString) - */ - -/*! - \var Irc::ModeRole - \brief User mode (QString) - */ - -/*! - \var Irc::TitleRole - \brief Channel/user prefix and name (QString) - */ diff --git a/src/libcommuni/doc/header.html b/src/libcommuni/doc/header.html deleted file mode 100644 index 435f194..0000000 --- a/src/libcommuni/doc/header.html +++ /dev/null @@ -1,55 +0,0 @@ -<!-- HTML header for doxygen 1.8.5--> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta http-equiv="X-UA-Compatible" content="IE=9"/> -<meta name="generator" content="Doxygen $doxygenversion"/> -<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME--> -<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME--> -<link href="$relpath^tabs.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="$relpath^jquery.js"></script> -<script type="text/javascript" src="$relpath^dynsections.js"></script> -$treeview -$search -$mathjax -<link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" /> -$extrastylesheet -</head> -<body> -<div id="top"><!-- do not remove this div, it is closed by doxygen! --> - -<!--BEGIN TITLEAREA--> -<div id="titlearea"> -<table cellspacing="0" cellpadding="0"> - <tbody> - <tr style="height: 56px;"> - <!--BEGIN PROJECT_LOGO--> - <td id="projectlogo"><a href="http://communi.github.com"><img alt="Logo" src="$relpath^$projectlogo"/></a></td> - <!--END PROJECT_LOGO--> - <!--BEGIN PROJECT_NAME--> - <td style="padding-left: 0.5em;"> - <div id="projectname">$projectname - <!--BEGIN PROJECT_NUMBER--> <span id="projectnumber">$projectnumber</span><!--END PROJECT_NUMBER--> - </div> - <!--BEGIN PROJECT_BRIEF--><div id="projectbrief">$projectbrief</div><!--END PROJECT_BRIEF--> - </td> - <!--END PROJECT_NAME--> - <!--BEGIN !PROJECT_NAME--> - <!--BEGIN PROJECT_BRIEF--> - <td style="padding-left: 0.5em;"> - <div id="projectbrief">$projectbrief</div> - </td> - <!--END PROJECT_BRIEF--> - <!--END !PROJECT_NAME--> - <!--BEGIN DISABLE_INDEX--> - <!--BEGIN SEARCHENGINE--> - <td>$searchbox</td> - <!--END SEARCHENGINE--> - <!--END DISABLE_INDEX--> - </tr> - </tbody> -</table> -</div> -<!--END TITLEAREA--> -<!-- end header part --> diff --git a/src/libcommuni/doc/mainpage.dox b/src/libcommuni/doc/mainpage.dox deleted file mode 100644 index 622fb23..0000000 --- a/src/libcommuni/doc/mainpage.dox +++ /dev/null @@ -1,54 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/*! - \mainpage Communi - a cross-platform IRC framework written with %Qt - - \section introduction Introduction - - Communi is a cross-platform <a href="http://en.wikipedia.org/wiki/Internet_Relay_Chat">IRC</a> - framework written with <a href="http://qt-project.org/">Qt</a>. Communi provides a set of tools - for enabling IRC connectivity in Qt-based C++ and QML applications. - - IRC (Internet Relay Chat protocol) is a simple text-based communication protocol. IRC was created - back in 1988 and is still popular particularly amongst open source projects. The Communi project's - own IRC channel \c \#communi is located on <a href="http://freenode.net/">Freenode</a>. - - \section getting-started Getting started - - Communi is divided in three <a href="modules.html" style="font-weight: bold;">modules</a>. - The following classes from the \ref core module are the most essential classes to get started. - - \li IrcConnection manages a connection to an IRC server. - \li IrcNetwork provides information about the connected IRC network. - \li IrcMessage represents a message received from the IRC server. - \li IrcCommand represents a command sent to the IRC server. - - Refer to the \ref usage document, and the list of - <a href="pages.html" style="font-weight: bold;">examples</a> for further details and help. - */ diff --git a/src/libcommuni/doc/minimal.dox b/src/libcommuni/doc/minimal.dox deleted file mode 100644 index 810f404..0000000 --- a/src/libcommuni/doc/minimal.dox +++ /dev/null @@ -1,46 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/*! - \page minimal Minimal example - - The example illustrates the minimum amount of code required for: - \li Setting up and opening a connection, - \li joining a channel, - \li sending a channel message, - \li and quiting. - - \snippet minimal/main.cpp minimal - - Files: - \li \ref examples/minimal/main.cpp - - \file examples/minimal/main.cpp - \brief \ref minimal - \include examples/minimal/main.cpp - */ diff --git a/src/libcommuni/doc/modules.dox b/src/libcommuni/doc/modules.dox deleted file mode 100644 index ee72180..0000000 --- a/src/libcommuni/doc/modules.dox +++ /dev/null @@ -1,85 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/*! - \file irccore.h - \brief \#include <\ref core "IrcCore"> - */ - -/*! - \file ircmodel.h - \brief \#include <\ref models "IrcModel"> - */ - -/*! - \file ircutil.h - \brief \#include <\ref util "IrcUtil"> - */ - -/*! - \defgroup core IrcCore - \brief Core classes to manage IRC connections, receive messages and send commands. - - In order to enable the module, add the following lines to your qmake project (.pro) file: - \code - CONFIG += communi - COMMUNI += core - \endcode - - This sets up the necessary include paths and linker rules in order to use the module. - */ - -/*! - \defgroup models IrcModel - \brief Model classes to keep track of queries, channels and users. - - In order to enable the module, add the following lines to your qmake project (.pro) file: - \code - CONFIG += communi - COMMUNI += core model - \endcode - - This sets up the necessary include paths and linker rules in order to use the module. - - \note IrcModel depends on \ref core "IrcCore" - */ - -/*! - \defgroup util IrcUtil - \brief Miscellaneous utility classes for common IRC client related needs. - - In order to enable the module, add the following lines to your qmake project (.pro) file: - \code - CONFIG += communi - COMMUNI += core model util - \endcode - - This sets up the necessary include paths and linker rules in order to use the module. - - \note IrcUtil depends on \ref core "IrcCore" and \ref models "IrcModel" - */ diff --git a/src/libcommuni/doc/qml.dox b/src/libcommuni/doc/qml.dox deleted file mode 100644 index da46191..0000000 --- a/src/libcommuni/doc/qml.dox +++ /dev/null @@ -1,160 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/*! - \page qml QML compatibility - - Communi strives for full QML support. The property-based APIs have been - designed QML compatibility in mind. Almost all the types can be registered - to QML and used as is. - - A ready-made QML plugin is also provided for convenience. The plugin does - QML type registration and is made available via the following import: - - \code - import Communi 3.0 - \endcode - - \section qml-type-registration Type registration - - The following snippet illustrates how the Communi QML plugin does the type - registration. The same can be done manually in application code to avoid - the need of deploying the Communi QML plugin. - - \snippet src/imports/qml2/plugin.cpp qml-register-types - - \section qml-connecting-to-irc Connecting to IRC - - In order to connect to IRC in QML, declare an IrcConnection instance, - set the desired properties, and call \ref IrcConnection::open() - "connection.open()". - - \code - IrcConnection { - id: freenode - host: "irc.freenode.net" - userName: "communi" - nickName: "Communi" + Math.round(Math.random() * 9999) - realName: "Communi QML example" - } - \endcode - - \section qml-sending-commands Sending commands - - Even though the IrcCommand::createXxx() methods are static, QML does not - provide a way to call them without an IrcCommand instance. Thus, in order - to create and send commands, declare an instance of IrcCommand, call any - createXxx() method to create a command, and finally send it via - IrcCommand::sendCommand(). - - \code - IrcCommand { id: command } - - IrcConnection { - onConnected: { - var cmd = command.createJoin(channel) - sendCommand(cmd) - } - } - \endcode - - \section qml-channels-and-queries Channels and queries - - In order to keep track of channels and queries, declare an instance of - IrcBufferModel. Notice that it can be used directly as a data model for - QML types such as ListView and Repeater. - - \code - IrcBufferModel { - id: bufferModel - connection: freenode - } - \endcode - - IrcBufferModel creates channel and query buffers automatically when - the client joins channels and receives private messages, respectively. - - A typical IRC client has a special server buffer for messages that - are not targeted to any specific channel or query. This can be easily - achieved by declaring an instance of IrcBuffer and forwarding the - messages ignored by IrcBufferModel to it. - - \code - IrcBuffer { - id: serverBuffer - name: freenode.displayName - Component.onCompleted: bufferModel.add(serverBuffer) - } - - IrcBufferModel { - id: bufferModel - connection: freenode - onMessageIgnored: serverBuffer.receiveMessage(message) - } - \endcode - - \section qml-channel-users Channel users - - In order to keep track of channel users, create an instance of IrcUserModel. - It can be also used directly as a data model for QML types such as ListView - and Repeater. - - \code - IrcUserModel { - id: userModel - channel: currentBuffer.toChannel() - } - \endcode - - \section qml-parsing-user-commands Parsing user commands - - IrcCommandParser helps with parsing commands from user input. In order to - take it in use, declare an instance of IrcCommandParser and introduce the - desired commands. - - Notice that commands are often context sensitive. While some command may - accept an optional parameter that is filled up with the current target - (channel/query) name when absent, another command may always inject the - current target name as a certain parameter. Therefore IrcCommandParser - must be kept up-to-date with the current target and the list of channels. - - \code - IrcCommandParser { - id: parser - triggers: ["/"] - target: currentBuffer.title - channels: bufferModel.channels - Component.onCompleted: { - parser.addCommand(IrcCommand.Join, "JOIN <#channel> (<key>)"); - parser.addCommand(IrcCommand.Part, "PART (<#channel>) (<message...>)"); - parser.addCommand(IrcCommand.Kick, "KICK (<#channel>) <nick> (<reason...>)"); - parser.addCommand(IrcCommand.CtcpAction, "ME [target] <message...>"); - } - } - \endcode - */ diff --git a/src/libcommuni/doc/qmlbot.dox b/src/libcommuni/doc/qmlbot.dox deleted file mode 100644 index 13d76ec..0000000 --- a/src/libcommuni/doc/qmlbot.dox +++ /dev/null @@ -1,71 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/*! - \page qmlbot QML bot example - - The QML bot example is a simplified version of the \ref bot "bot example", - written in QML. See the \ref qml article for more QML specific details. - - \image html qmlbot.png "The QML bot example in action" - - The following snippet illustrates how IrcConnection is prepared and opened, - and how a command is queued to automatically join a channel when connected. - - \snippet qmlbot/qml/main.qml connection - - The example utilizes IrcCommandParser for parsing commands from messages - received from other clients. In order to take the parser in use, the supported - commands must be teached, as illustrated below. Some of the commands are context - sensitive, and the parser must be therefore kept aware of the list of channels - the bot is on. This is easily achieved by binding the IrcCommandParser::channels - property to the value of the IrcBufferModel::channels property. Furthermore, like - a typical IRC bot, the commands are triggered using a slightly different syntax in - queries and channels. - - \snippet qmlbot/qml/main.qml parser - - The bot listens to incoming messages via \ref IrcConnection::messageReceived(). - The current target is chosen based on whether the incoming message is a channel - or a private message. Each message content is parsed for commands that were - taught earlier. - - \snippet qmlbot/qml/main.qml receive - - Files: - \li \ref examples/qmlbot/main.cpp - \li \ref examples/qmlbot/qml/main.qml - - \file examples/qmlbot/main.cpp - \brief \ref qmlbot - \include examples/qmlbot/main.cpp - - \file examples/qmlbot/qml/main.qml - \brief \ref qmlbot - \include examples/qmlbot/qml/main.qml - */ diff --git a/src/libcommuni/doc/qmlbot.png b/src/libcommuni/doc/qmlbot.png Binary files differdeleted file mode 100644 index 6d6c87f..0000000 --- a/src/libcommuni/doc/qmlbot.png +++ /dev/null diff --git a/src/libcommuni/doc/quick.dox b/src/libcommuni/doc/quick.dox deleted file mode 100644 index 347854e..0000000 --- a/src/libcommuni/doc/quick.dox +++ /dev/null @@ -1,91 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/*! - \page quick Qt Quick example - - The example illustrates how to create a simple GUI client using %Qt Quick. - - \image html quick.png "The Qt Quick example in action" - - If you're curious what the example does behind the scenes, try setting an - environment variable \c IRC_DEBUG=1 in order to enable verbose debug output - as explained in \ref debugging. - - Files: - \li \ref examples/quick/main.cpp - \li \ref examples/quick/qml/main.qml - \li \ref examples/quick/qml/BufferListView.qml - \li \ref examples/quick/qml/ChatPage.qml - \li \ref examples/quick/qml/ConnectPage.qml - \li \ref examples/quick/qml/MessageFormatter.qml - \li \ref examples/quick/qml/TextBrowser.qml - \li \ref examples/quick/qml/TextEntry.qml - \li \ref examples/quick/qml/TopicLabel.qml - \li \ref examples/quick/qml/UserListView.qml - - \file examples/quick/main.cpp - \brief \ref quick - \include examples/quick/main.cpp - - \file examples/quick/qml/main.qml - \brief \ref quick - \include examples/quick/qml/main.qml - - \file examples/quick/qml/BufferListView.qml - \brief \ref quick - \include examples/quick/qml/BufferListView.qml - - \file examples/quick/qml/ChatPage.qml - \brief \ref quick - \include examples/quick/qml/ChatPage.qml - - \file examples/quick/qml/ConnectPage.qml - \brief \ref quick - \include examples/quick/qml/ConnectPage.qml - - \file examples/quick/qml/MessageFormatter.qml - \brief \ref quick - \include examples/quick/qml/MessageFormatter.qml - - \file examples/quick/qml/TextBrowser.qml - \brief \ref quick - \include examples/quick/qml/TextBrowser.qml - - \file examples/quick/qml/TextEntry.qml - \brief \ref quick - \include examples/quick/qml/TextEntry.qml - - \file examples/quick/qml/TopicLabel.qml - \brief \ref quick - \include examples/quick/qml/TopicLabel.qml - - \file examples/quick/qml/UserListView.qml - \brief \ref quick - \include examples/quick/qml/UserListView.qml - */ diff --git a/src/libcommuni/doc/quick.png b/src/libcommuni/doc/quick.png Binary files differdeleted file mode 100644 index c3d3cc7..0000000 --- a/src/libcommuni/doc/quick.png +++ /dev/null diff --git a/src/libcommuni/doc/usage.dox b/src/libcommuni/doc/usage.dox deleted file mode 100644 index 669bf94..0000000 --- a/src/libcommuni/doc/usage.dox +++ /dev/null @@ -1,81 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/*! - \page usage Using Communi - - \section using-as-a-library Using as a library - - In order to use Communi as a library, build and install Communi using the standard mantra: - \code - $ qmake - $ make - $ sudo make install - \endcode - - This integrates Communi with qmake from the corresponding %Qt installation. To take Communi - in use in your application, add the following lines to your qmake project (.pro) file: - \code - CONFIG += communi - COMMUNI += core model util - \endcode - - This sets up the necessary include paths and linker rules in order to use the library. - Notice that the needed Communi <a href="modules.html">modules</a> can be controlled via - the \c COMMUNI qmake variable. The above example enables all available - <a href="modules.html">modules</a>. - - \section buiding-into-application Building into application - - In order to embed the whole Communi to an application, add the following line to your - qmake project (.pro) file: - \code - include(path/to/libcommuni/src/src.pri) - \endcode - - Alternatively, only specific module(s) can be included, for example: - \code - include(path/to/libcommuni/src/core/core.pri) - include(path/to/libcommuni/src/util/util.pri) - \endcode - - This sets up the necessary include paths, and builds Communi sources into the application - for convenient deployment on systems that do not have Communi installed. This option is - also convenient when adding Communi as a Git submodule to your project tree. - - \section namespace-support Namespace support - - The Communi source code can be compiled into a namespace to for example - avoid symbol conflicts. In order to embed a namespaced Communi to an - application, add the following lines to your qmake project (.pro) file: - - \code - DEFINES += IRC_NAMESPACE=Communi - include(path/to/libcommuni/src/src.pri) - \endcode - */ diff --git a/src/libcommuni/examples/bot/bot.pro b/src/libcommuni/examples/bot/bot.pro deleted file mode 100644 index 1f4f434..0000000 --- a/src/libcommuni/examples/bot/bot.pro +++ /dev/null @@ -1,17 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -TEMPLATE = app -TARGET = bot -DEPENDPATH += . -INCLUDEPATH += . -CONFIG += console -CONFIG -= app_bundle -QT = core network - -# Input -HEADERS += ircbot.h -SOURCES += ircbot.cpp main.cpp - -include(../examples.pri) diff --git a/src/libcommuni/examples/bot/ircbot.cpp b/src/libcommuni/examples/bot/ircbot.cpp deleted file mode 100644 index 1891e62..0000000 --- a/src/libcommuni/examples/bot/ircbot.cpp +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This example is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -#include "ircbot.h" -#include <IrcMessage> -#include <IrcCommand> -#include <QCoreApplication> -#include <QTimer> - -IrcBot::IrcBot(QObject* parent) : IrcConnection(parent) -{ -//! [messages] - connect(this, SIGNAL(privateMessageReceived(IrcPrivateMessage*)), this, SLOT(processMessage(IrcPrivateMessage*))); -//! [messages] - -//! [commands] - parser.addCommand(IrcCommand::CtcpAction, "ACT [target] <message...>"); - parser.addCommand(IrcCommand::Custom, "HELP (<command...>)"); - parser.addCommand(IrcCommand::Nick, "NICK <nick>"); - parser.addCommand(IrcCommand::Join, "JOIN <#channel> (<key>)"); - parser.addCommand(IrcCommand::Part, "PART (<#channel>) (<message...>)"); - parser.addCommand(IrcCommand::Quit, "QUIT (<message...>)"); - parser.addCommand(IrcCommand::Message, "SAY [target] <message...>"); -//! [commands] - - bufferModel.setConnection(this); -//! [channels] - connect(&bufferModel, SIGNAL(channelsChanged(QStringList)), &parser, SLOT(setChannels(QStringList))); -//! [channels] -} - -void IrcBot::join(QString channel) -{ - sendCommand(IrcCommand::createJoin(channel)); -} - -//![receive] -void IrcBot::processMessage(IrcPrivateMessage* message) -{ - if (message->isPrivate()) { - // private message: reply to the message sender - // => triggers: "!<cmd> <params>" and "<cmd> <params>" - parser.setTarget(message->nick()); - parser.setTriggers(QStringList() << "!" << ""); - } else { - // channel message: reply to the target channel - // => triggers: "!<cmd> <params>" and "bot: <cmd> <params>" - parser.setTarget(message->target()); - parser.setTriggers(QStringList() << "!" << nickName().append(":")); - } - - IrcCommand* cmd = parser.parse(message->content()); - if (cmd) { - if (cmd->type() == IrcCommand::Custom && cmd->parameters().value(0) == "HELP") { - help(cmd->parameters().mid(1)); - } else { - sendCommand(cmd); - - if (cmd->type() == IrcCommand::Quit) { - connect(this, SIGNAL(disconnected()), qApp, SLOT(quit())); - QTimer::singleShot(1000, qApp, SLOT(quit())); - } - } - } -} -//![receive] - -void IrcBot::help(QStringList commands) -{ - if (commands.isEmpty()) - commands = parser.commands(); - - QString target = parser.target(); - foreach (const QString& command, commands) { - QString syntax = parser.syntax(command); - sendCommand(IrcCommand::createMessage(target, syntax)); - } -} diff --git a/src/libcommuni/examples/bot/ircbot.h b/src/libcommuni/examples/bot/ircbot.h deleted file mode 100644 index 1a88a01..0000000 --- a/src/libcommuni/examples/bot/ircbot.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This example is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -#ifndef IRCBOT_H -#define IRCBOT_H - -#include <IrcConnection> -#include <IrcBufferModel> -#include <IrcCommandParser> - -class IrcBot : public IrcConnection -{ - Q_OBJECT - -public: - IrcBot(QObject* parent = 0); - -public slots: - void join(QString channel); - -private slots: - void processMessage(IrcPrivateMessage* message); - -private: - void help(QStringList commands); - - IrcCommandParser parser; - IrcBufferModel bufferModel; -}; - -#endif // IRCBOT_H diff --git a/src/libcommuni/examples/bot/main.cpp b/src/libcommuni/examples/bot/main.cpp deleted file mode 100644 index 526f776..0000000 --- a/src/libcommuni/examples/bot/main.cpp +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This example is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -#include <QtCore> -#include "ircbot.h" - -int main(int argc, char* argv[]) -{ - QCoreApplication app(argc, argv); - - // enable debug output - qputenv("IRC_DEBUG", "1"); - qsrand(QTime::currentTime().msec()); - - IrcBot bot; - bot.setHost("irc.freenode.net"); - bot.setUserName("communi"); - bot.setNickName("Bot" + QString::number(qrand() % 9999)); - bot.setRealName("Communi " + Irc::version() + " example bot"); - - bool joined = false; - QStringList args = app.arguments(); - for (int i = 0; i < args.count(); ++i) { - QString arg = args.at(i); - if (arg == "-help") { - qDebug() << "Usage:" << argv[0] << "(-host <host>) (-port <port>) (-ssl) (-nick <nick>) (-user <user>) (-password <password>) (-channel <channel>)"; - return 0; - } else if (arg == "-port") { - bool ok = false; - int port = args.value(++i).toInt(&ok); - if (ok) - bot.setPort(port); - } else if (arg == "-ssl") { - bot.setSecure(true); - } else if (arg == "-host") { - bot.setHost(args.value(++i)); - } else if (arg == "-user") { - bot.setUserName(args.value(++i)); - } else if (arg == "-password") { - bot.setPassword(args.value(++i)); - } else if (arg == "-nick") { - bot.setNickName(args.value(++i)); - } else if (arg == "-channel") { - bot.join(args.value(++i)); - joined = true; - } - } - if (!joined) - bot.join("#communi"); - - bot.open(); - return app.exec(); -} diff --git a/src/libcommuni/examples/client/client.pro b/src/libcommuni/examples/client/client.pro deleted file mode 100644 index 5e91b12..0000000 --- a/src/libcommuni/examples/client/client.pro +++ /dev/null @@ -1,16 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -TEMPLATE = app -TARGET = client -DEPENDPATH += . -INCLUDEPATH += . -QT = core network gui -greaterThan(QT_MAJOR_VERSION, 4):QT += widgets - -# Input -HEADERS += ircclient.h ircmessageformatter.h -SOURCES += ircclient.cpp ircmessageformatter.cpp main.cpp - -include(../examples.pri) diff --git a/src/libcommuni/examples/client/ircclient.cpp b/src/libcommuni/examples/client/ircclient.cpp deleted file mode 100644 index c33043b..0000000 --- a/src/libcommuni/examples/client/ircclient.cpp +++ /dev/null @@ -1,321 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This example is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -#include "ircclient.h" -#include "ircmessageformatter.h" - -#include <QTextDocument> -#include <QTextCursor> -#include <QVBoxLayout> -#include <QScrollBar> -#include <QLineEdit> -#include <QShortcut> -#include <QListView> -#include <QTextEdit> -#include <QTime> - -#include <Irc> -#include <IrcUser> -#include <IrcBuffer> -#include <IrcCommand> -#include <IrcMessage> -#include <IrcUserModel> -#include <IrcCompleter> -#include <IrcConnection> -#include <IrcBufferModel> -#include <IrcCommandParser> - -static const char* CHANNEL = "#communi"; -static const char* SERVER = "irc.freenode.net"; - -IrcClient::IrcClient(QWidget* parent) : QSplitter(parent) -{ - createParser(); - createConnection(); - createCompleter(); - createUserList(); - createLayout(); - createBufferList(); - - // queue a command to automatically join the channel when connected - connection->sendCommand(IrcCommand::createJoin(CHANNEL)); - connection->open(); - - textEdit->append(IrcMessageFormatter::formatMessage(tr("! Welcome to the Communi %1 example client.").arg(IRC_VERSION_STR))); - textEdit->append(IrcMessageFormatter::formatMessage(tr("! This example connects %1 and joins %2.").arg(SERVER, CHANNEL))); - textEdit->append(IrcMessageFormatter::formatMessage(tr("! PS. Available commands: JOIN, ME, NICK, PART"))); -} - -IrcClient::~IrcClient() -{ - if (connection->isActive()) { - connection->quit(connection->realName()); - connection->close(); - } -} - -void IrcClient::onConnected() -{ - textEdit->append(IrcMessageFormatter::formatMessage("! Connected to %1.").arg(SERVER)); - textEdit->append(IrcMessageFormatter::formatMessage("! Joining %1...").arg(CHANNEL)); -} - -void IrcClient::onConnecting() -{ - textEdit->append(IrcMessageFormatter::formatMessage("! Connecting %1...").arg(SERVER)); -} - -void IrcClient::onDisconnected() -{ - textEdit->append(IrcMessageFormatter::formatMessage("! Disconnected from %1.").arg(SERVER)); -} - -void IrcClient::onTextEdited() -{ - // clear the possible error indication - lineEdit->setStyleSheet(QString()); -} - -void IrcClient::onTextEntered() -{ - QString input = lineEdit->text(); - IrcCommand* command = parser->parse(input); - if (command) { - connection->sendCommand(command); - - // echo own messages (servers do not send our own messages back) - if (command->type() == IrcCommand::Message || command->type() == IrcCommand::CtcpAction) { - IrcMessage* msg = command->toMessage(connection->nickName(), connection); - receiveMessage(msg); - delete msg; - } - - lineEdit->clear(); - } else if (input.length() > 1) { - QString error; - QString command = lineEdit->text().mid(1).split(" ", QString::SkipEmptyParts).value(0).toUpper(); - if (parser->commands().contains(command)) - error = tr("[ERROR] Syntax: %1").arg(parser->syntax(command).replace("<", "<").replace(">", ">")); - else - error = tr("[ERROR] Unknown command: %1").arg(command); - textEdit->append(IrcMessageFormatter::formatMessage(error)); - lineEdit->setStyleSheet("background: salmon"); - } -} - -void IrcClient::onCompletion() -{ - completer->complete(lineEdit->text(), lineEdit->cursorPosition()); -} - -void IrcClient::onCompleted(const QString& text, int cursor) -{ - lineEdit->setText(text); - lineEdit->setCursorPosition(cursor); -} - -void IrcClient::onBufferAdded(IrcBuffer* buffer) -{ - // joined a buffer - start listening to buffer specific messages - connect(buffer, SIGNAL(messageReceived(IrcMessage*)), this, SLOT(receiveMessage(IrcMessage*))); - - // create a document for storing the buffer specific messages - QTextDocument* document = new QTextDocument(buffer); - documents.insert(buffer, document); - - // create a sorted model for buffer users - IrcUserModel* userModel = new IrcUserModel(buffer); - userModel->setSortMethod(Irc::SortByTitle); - userModels.insert(buffer, userModel); - - // activate the new buffer - int idx = bufferModel->buffers().indexOf(buffer); - if (idx != -1) - bufferList->setCurrentIndex(bufferModel->index(idx)); -} - -void IrcClient::onBufferRemoved(IrcBuffer* buffer) -{ - // the buffer specific models and documents are no longer needed - delete userModels.take(buffer); - delete documents.take(buffer); -} - -void IrcClient::onBufferActivated(const QModelIndex& index) -{ - IrcBuffer* buffer = index.data(Irc::BufferRole).value<IrcBuffer*>(); - - // document, user list and nick completion for the current buffer - textEdit->setDocument(documents.value(buffer)); - textEdit->verticalScrollBar()->triggerAction(QScrollBar::SliderToMaximum); - userList->setModel(userModels.value(buffer)); - completer->setBuffer(buffer); - - // keep the command parser aware of the context - if (buffer) - parser->setTarget(buffer->title()); -} - -void IrcClient::onUserActivated(const QModelIndex& index) -{ - IrcUser* user = index.data(Irc::UserRole).value<IrcUser*>(); - - if (user) { - IrcBuffer* buffer = bufferModel->add(user->name()); - - // activate the new query - int idx = bufferModel->buffers().indexOf(buffer); - if (idx != -1) - bufferList->setCurrentIndex(bufferModel->index(idx)); - } -} - -static void appendHtml(QTextDocument* document, const QString& html) -{ - QTextCursor cursor(document); - cursor.beginEditBlock(); - cursor.movePosition(QTextCursor::End); - if (!document->isEmpty()) - cursor.insertBlock(); - cursor.insertHtml(html); - cursor.endEditBlock(); -} - -void IrcClient::receiveMessage(IrcMessage* message) -{ - IrcBuffer* buffer = qobject_cast<IrcBuffer*>(sender()); - if (!buffer) - buffer = bufferList->currentIndex().data(Irc::BufferRole).value<IrcBuffer*>(); - - QTextDocument* document = documents.value(buffer); - if (document) { - QString html = IrcMessageFormatter::formatMessage(message); - if (!html.isEmpty()) { - if (document == textEdit->document()) - textEdit->append(html); - else - appendHtml(document, html); - } - } -} - -void IrcClient::createLayout() -{ - setWindowTitle(tr("Communi %1 example client").arg(IRC_VERSION_STR)); - - // a read-only text editor for showing the messages - textEdit = new QTextEdit(this); - textEdit->setReadOnly(true); - - // a line editor for entering commands - lineEdit = new QLineEdit(this); - lineEdit->setAttribute(Qt::WA_MacShowFocusRect, false); - textEdit->setFocusProxy(lineEdit); - connect(lineEdit, SIGNAL(returnPressed()), this, SLOT(onTextEntered())); - connect(lineEdit, SIGNAL(textEdited(QString)), this, SLOT(onTextEdited())); - - // the rest is just setting up the UI layout... - QSplitter* splitter = new QSplitter(this); - splitter->setHandleWidth(1); - splitter->addWidget(textEdit); - splitter->addWidget(userList); - splitter->setStretchFactor(0, 5); - splitter->setStretchFactor(1, 1); - - QWidget* container = new QWidget(this); - QVBoxLayout* layout = new QVBoxLayout(container); - layout->setSpacing(0); - layout->setMargin(0); - layout->addWidget(splitter); - layout->addWidget(lineEdit); - - addWidget(container); - - setHandleWidth(1); -} - -void IrcClient::createCompleter() -{ - // nick name completion - completer = new IrcCompleter(this); - completer->setParser(parser); - connect(completer, SIGNAL(completed(QString,int)), this, SLOT(onCompleted(QString,int))); - - QShortcut* shortcut = new QShortcut(Qt::Key_Tab, this); - connect(shortcut, SIGNAL(activated()), this, SLOT(onCompletion())); -} - -void IrcClient::createParser() -{ - // create a command parser and teach it some commands. notice also - // that we must keep the command parser aware of the context in - // createUi() and onBufferActivated() - - parser = new IrcCommandParser(this); - parser->setTolerant(true); - parser->setTriggers(QStringList("/")); - parser->addCommand(IrcCommand::Join, "JOIN <#channel> (<key>)"); - parser->addCommand(IrcCommand::CtcpAction, "ME [target] <message...>"); - parser->addCommand(IrcCommand::Mode, "MODE (<channel/user>) (<mode>) (<arg>)"); - parser->addCommand(IrcCommand::Nick, "NICK <nick>"); - parser->addCommand(IrcCommand::Part, "PART (<#channel>) (<message...>)"); -} - -void IrcClient::createUserList() -{ - // a list of channel users - userList = new QListView(this); - userList->setFocusPolicy(Qt::NoFocus); - - // open a private query when double clicking a user - connect(userList, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(onUserActivated(QModelIndex))); -} - -void IrcClient::createBufferList() -{ - bufferModel = new IrcBufferModel(connection); - connect(bufferModel, SIGNAL(added(IrcBuffer*)), this, SLOT(onBufferAdded(IrcBuffer*))); - connect(bufferModel, SIGNAL(removed(IrcBuffer*)), this, SLOT(onBufferRemoved(IrcBuffer*))); - - bufferList = new QListView(this); - bufferList->setFocusPolicy(Qt::NoFocus); - bufferList->setModel(bufferModel); - - // keep the command parser aware of the context - connect(bufferModel, SIGNAL(channelsChanged(QStringList)), parser, SLOT(setChannels(QStringList))); - - // keep track of the current buffer, see also onBufferActivated() - connect(bufferList->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), this, SLOT(onBufferActivated(QModelIndex))); - - // create a server buffer for non-targeted messages... - IrcBuffer* serverBuffer = bufferModel->add(connection->host()); - - // ...and connect it to IrcBufferModel::messageIgnored() - connect(bufferModel, SIGNAL(messageIgnored(IrcMessage*)), serverBuffer, SLOT(receiveMessage(IrcMessage*))); - - insertWidget(0, bufferList); - - setStretchFactor(0, 1); - setStretchFactor(1, 3); -} - -void IrcClient::createConnection() -{ - connection = new IrcConnection(this); - connect(connection, SIGNAL(connected()), this, SLOT(onConnected())); - connect(connection, SIGNAL(connecting()), this, SLOT(onConnecting())); - connect(connection, SIGNAL(disconnected()), this, SLOT(onDisconnected())); - - qsrand(QTime::currentTime().msec()); - - connection->setHost(SERVER); - connection->setUserName("communi"); - connection->setNickName(tr("Client%1").arg(qrand() % 9999)); - connection->setRealName(tr("Communi %1 example client").arg(IRC_VERSION_STR)); -} diff --git a/src/libcommuni/examples/client/ircclient.h b/src/libcommuni/examples/client/ircclient.h deleted file mode 100644 index 9d6ee3c..0000000 --- a/src/libcommuni/examples/client/ircclient.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This example is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -#ifndef IRCCLIENT_H -#define IRCCLIENT_H - -#include <QSplitter> -#include <QHash> - -class IrcBuffer; -class IrcMessage; -class IrcUserModel; -class IrcCompleter; -class IrcConnection; -class IrcBufferModel; -class IrcCommandParser; - -QT_FORWARD_DECLARE_CLASS(QLineEdit) -QT_FORWARD_DECLARE_CLASS(QListView) -QT_FORWARD_DECLARE_CLASS(QTextEdit) -QT_FORWARD_DECLARE_CLASS(QModelIndex) -QT_FORWARD_DECLARE_CLASS(QTextDocument) - -class IrcClient : public QSplitter -{ - Q_OBJECT - -public: - IrcClient(QWidget* parent = 0); - ~IrcClient(); - -private slots: - void onConnected(); - void onConnecting(); - void onDisconnected(); - - void onTextEdited(); - void onTextEntered(); - - void onCompletion(); - void onCompleted(const QString& text, int cursor); - - void onBufferAdded(IrcBuffer* buffer); - void onBufferRemoved(IrcBuffer* buffer); - - void onBufferActivated(const QModelIndex& index); - void onUserActivated(const QModelIndex& index); - - void receiveMessage(IrcMessage* message); - -private: - void createLayout(); - void createCompleter(); - void createParser(); - void createUserList(); - void createBufferList(); - void createConnection(); - - QLineEdit* lineEdit; - QTextEdit* textEdit; - QListView* userList; - QListView* bufferList; - - IrcCompleter* completer; - IrcCommandParser* parser; - IrcConnection* connection; - IrcBufferModel* bufferModel; - QHash<IrcBuffer*, IrcUserModel*> userModels; - QHash<IrcBuffer*, QTextDocument*> documents; -}; - -#endif // IRCCLIENT_H diff --git a/src/libcommuni/examples/client/ircmessageformatter.cpp b/src/libcommuni/examples/client/ircmessageformatter.cpp deleted file mode 100644 index 6537664..0000000 --- a/src/libcommuni/examples/client/ircmessageformatter.cpp +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This example is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -#include "ircmessageformatter.h" - -#include <IrcTextFormat> -#include <IrcConnection> -#include <QTime> -#include <Irc> - -QString IrcMessageFormatter::formatMessage(IrcMessage* message) -{ - QString formatted; - switch (message->type()) { - case IrcMessage::Join: - formatted = formatJoinMessage(static_cast<IrcJoinMessage*>(message)); - break; - case IrcMessage::Mode: - formatted = formatModeMessage(static_cast<IrcModeMessage*>(message)); - break; - case IrcMessage::Names: - formatted = formatNamesMessage(static_cast<IrcNamesMessage*>(message)); - break; - case IrcMessage::Nick: - formatted = formatNickMessage(static_cast<IrcNickMessage*>(message)); - break; - case IrcMessage::Part: - formatted = formatPartMessage(static_cast<IrcPartMessage*>(message)); - break; - case IrcMessage::Private: - formatted = formatPrivateMessage(static_cast<IrcPrivateMessage*>(message)); - break; - case IrcMessage::Quit: - formatted = formatQuitMessage(static_cast<IrcQuitMessage*>(message)); - break; - default: - break; - } - return formatMessage(formatted); -} - -QString IrcMessageFormatter::formatMessage(const QString& message) -{ - if (!message.isEmpty()) { - QString formatted = QObject::tr("[%1] %2").arg(QTime::currentTime().toString(), message); - if (message.startsWith("!")) - formatted = QObject::tr("<font color='gray'>%1</font>").arg(formatted); - else if (message.startsWith("*")) - formatted = QObject::tr("<font color='maroon'>%1</font>").arg(formatted); - else if (message.startsWith("[")) - formatted = QObject::tr("<font color='indianred'>%1</font>").arg(formatted); - return formatted; - } - return QString(); -} - -QString IrcMessageFormatter::formatJoinMessage(IrcJoinMessage* message) -{ - if (message->flags() & IrcMessage::Own) - return QObject::tr("! You have joined %1 as %2").arg(message->channel(), message->nick()); - else - return QObject::tr("! %1 has joined %2").arg(message->nick(), message->channel()); -} - -QString IrcMessageFormatter::formatModeMessage(IrcModeMessage* message) -{ - QString args = message->arguments().join(" "); - if (message->isReply()) - return QObject::tr("! %1 mode is %2 %3").arg(message->target(), message->mode(), args); - else - return QObject::tr("! %1 sets mode %2 %3 %4").arg(message->nick(), message->target(), message->mode(), args); -} - -QString IrcMessageFormatter::formatNamesMessage(IrcNamesMessage* message) -{ - return QObject::tr("! %1 has %2 users").arg(message->channel()).arg(message->names().count()); -} - -QString IrcMessageFormatter::formatNickMessage(IrcNickMessage* message) -{ - return QObject::tr("! %1 has changed nick to %2").arg(message->oldNick(), message->newNick()); -} - -QString IrcMessageFormatter::formatPartMessage(IrcPartMessage* message) -{ - if (message->reason().isEmpty()) - return QObject::tr("! %1 has left %2").arg(message->nick(), message->channel()); - else - return QObject::tr("! %1 has left %2 (%3)").arg(message->nick(), message->channel(), message->reason()); -} - -QString IrcMessageFormatter::formatPrivateMessage(IrcPrivateMessage* message) -{ - const QString content = IrcTextFormat().toHtml(message->content()); - if (message->isAction()) - return QObject::tr("* %1 %2").arg(message->nick(), content); - else - return QObject::tr("<%1> %2").arg(message->nick(),content); -} - -QString IrcMessageFormatter::formatQuitMessage(IrcQuitMessage* message) -{ - if (message->reason().isEmpty()) - return QObject::tr("! %1 has quit").arg(message->nick()); - else - return QObject::tr("! %1 has quit (%2)").arg(message->nick(), message->reason()); -} diff --git a/src/libcommuni/examples/client/ircmessageformatter.h b/src/libcommuni/examples/client/ircmessageformatter.h deleted file mode 100644 index f91be50..0000000 --- a/src/libcommuni/examples/client/ircmessageformatter.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This example is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -#ifndef IRCMESSAGEFORMATTER_H -#define IRCMESSAGEFORMATTER_H - -#include <IrcMessage> - -class IrcMessageFormatter -{ -public: - static QString formatMessage(IrcMessage* message); - static QString formatMessage(const QString& message); - -private: - static QString formatJoinMessage(IrcJoinMessage* message); - static QString formatModeMessage(IrcModeMessage* message); - static QString formatNamesMessage(IrcNamesMessage* message); - static QString formatNickMessage(IrcNickMessage* message); - static QString formatPartMessage(IrcPartMessage* message); - static QString formatPrivateMessage(IrcPrivateMessage* message); - static QString formatQuitMessage(IrcQuitMessage* message); -}; - -#endif // IRCMESSAGEFORMATTER_H diff --git a/src/libcommuni/examples/client/main.cpp b/src/libcommuni/examples/client/main.cpp deleted file mode 100644 index 951ee91..0000000 --- a/src/libcommuni/examples/client/main.cpp +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This example is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -#include <QApplication> -#include "ircclient.h" - -int main(int argc, char* argv[]) -{ - QApplication app(argc, argv); - IrcClient client; - client.resize(800, 480); - client.show(); - return app.exec(); -} diff --git a/src/libcommuni/examples/examples.pri b/src/libcommuni/examples/examples.pri deleted file mode 100644 index bc9b138..0000000 --- a/src/libcommuni/examples/examples.pri +++ /dev/null @@ -1,24 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -!verbose:CONFIG += silent - -CONFIG(debug, debug|release) { - OBJECTS_DIR = debug - MOC_DIR = debug - RCC_DIR = debug - UI_DIR = debug -} else { - OBJECTS_DIR = release - MOC_DIR = release - RCC_DIR = release - UI_DIR = release -} - -developer { - include(../src/src.pri) -} else { - IRC_MODULES = IrcCore IrcModel IrcUtil - include(../src/module_deps.pri) -} diff --git a/src/libcommuni/examples/examples.pro b/src/libcommuni/examples/examples.pro deleted file mode 100644 index 48d9906..0000000 --- a/src/libcommuni/examples/examples.pro +++ /dev/null @@ -1,13 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -TEMPLATE = subdirs -SUBDIRS += bot client minimal - -!lessThan(QT_MAJOR_VERSION, 5):!lessThan(QT_MINOR_VERSION, 1) { - qtHaveModule(qml):SUBDIRS += qmlbot -} -!lessThan(QT_MAJOR_VERSION, 5):!lessThan(QT_MINOR_VERSION, 2) { - qtHaveModule(quick):SUBDIRS += quick -} diff --git a/src/libcommuni/examples/minimal/main.cpp b/src/libcommuni/examples/minimal/main.cpp deleted file mode 100644 index 790280e..0000000 --- a/src/libcommuni/examples/minimal/main.cpp +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This example is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -#include <QtCore> -#include <IrcConnection> -#include <IrcCommand> -#include <Irc> - -#ifndef IRC_DOXYGEN -int main(int argc, char* argv[]) -{ - QCoreApplication app(argc, argv); - - // enable debug output - //qputenv("IRC_DEBUG", "1"); - qsrand(QTime::currentTime().msec()); - -//! [minimal] - IrcConnection connection("irc.rbx.fr.euirc.net"); - connection.setUserName("communi"); - connection.setNickName(QString("Minimal%1").arg(qrand() % 9999)); - connection.setRealName(QString("Communi %1 minimal example").arg(Irc::version())); - connection.sendCommand(IrcCommand::createJoin("#clonk-tod")); - connection.sendCommand(IrcCommand::createMessage("#clonk-tod", "Hi, kthxbye!")); - connection.sendCommand(IrcCommand::createQuit()); - connection.open(); -//! [minimal] - - QObject::connect(&connection, SIGNAL(disconnected()), &app, SLOT(quit())); - return app.exec(); -} -#endif diff --git a/src/libcommuni/examples/minimal/minimal.pro b/src/libcommuni/examples/minimal/minimal.pro deleted file mode 100644 index 5dd8584..0000000 --- a/src/libcommuni/examples/minimal/minimal.pro +++ /dev/null @@ -1,16 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -TEMPLATE = app -TARGET = minimal -DEPENDPATH += . -INCLUDEPATH += . -CONFIG += console -CONFIG -= app_bundle -QT = core network - -# Input -SOURCES += main.cpp - -include(../examples.pri) diff --git a/src/libcommuni/examples/qmlbot/main.cpp b/src/libcommuni/examples/qmlbot/main.cpp deleted file mode 100644 index d74e909..0000000 --- a/src/libcommuni/examples/qmlbot/main.cpp +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This example is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -#include <QCoreApplication> -#include <QQmlApplicationEngine> - -int main(int argc, char* argv[]) -{ - QCoreApplication app(argc, argv); - - // enable debug output - qputenv("IRC_DEBUG", "1"); - - QQmlApplicationEngine engine(QUrl("qrc:/main.qml")); - return app.exec(); -} diff --git a/src/libcommuni/examples/qmlbot/qml/main.qml b/src/libcommuni/examples/qmlbot/qml/main.qml deleted file mode 100644 index 2dad458..0000000 --- a/src/libcommuni/examples/qmlbot/qml/main.qml +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This example is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -import QtQml 2.0 -import Communi 3.0 - -QtObject { - id: bot - - property string channel: "#communi" - - property Irc irc: Irc { id: irc } - property IrcCommand command: IrcCommand { id: command } - - property IrcBufferModel model: IrcBufferModel { - id: model - -//! [connection] - connection: IrcConnection { - id: connection - - host: "irc.freenode.net" - userName: "communi" - nickName: "QmlBot" + Math.round(Math.random() * 9999) - realName: qsTr("Communi %1 QML bot example").arg(irc.version()) - - Component.onCompleted: { - // queue a command to automatically join a channel when connected - sendCommand(command.createJoin(channel)) - open() - } -//! [connection] - -//! [receive] - onMessageReceived: { - if (message.type === IrcMessage.Private) { - // - in private, reply to the message sender - // - on channel, reply to the target channel - parser.target = message.private ? message.nick : message.target - - var command = parser.parse(message.content) - if (command) { - // send the command to the IRC server - sendCommand(command) - if (command.type === IrcCommand.Quit) { - // close the connection & quit the app when a !quit command was received - close() - Qt.quit() - } - } - } - } -//! [receive] - } - } - -//! [parser] - property IrcCommandParser parser: IrcCommandParser { - id: parser - - // keep the parser aware of the context - channels: model.channels - - // - on channel, respond to: "!<command> <params>" and "bot: <command> <params>" - // - in query, respond to: "!<command> <params>" and "<command> <params>" - triggers: connection.network.isChannel(target) ? ["!", connection.nickName + ":"] : ["!", ""] - - Component.onCompleted: { - // teach the bot some commands - parser.addCommand(IrcCommand.Nick, "NICK <nick>"); - parser.addCommand(IrcCommand.Join, "JOIN <#channel> (<key>)"); - parser.addCommand(IrcCommand.Part, "PART (<#channel>) (<message...>)"); - parser.addCommand(IrcCommand.Quit, "QUIT (<message...>)"); - parser.addCommand(IrcCommand.Message, "SAY [target] <message...>"); - } - } -//! [parser] -} diff --git a/src/libcommuni/examples/qmlbot/qmlbot.pro b/src/libcommuni/examples/qmlbot/qmlbot.pro deleted file mode 100644 index 95c2961..0000000 --- a/src/libcommuni/examples/qmlbot/qmlbot.pro +++ /dev/null @@ -1,22 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -TEMPLATE = app -TARGET = qmlbot -DEPENDPATH += . -INCLUDEPATH += . -CONFIG += console -CONFIG -= app_bundle -QT = core network qml - -lessThan(QT_MAJOR_VERSION, 5)|lessThan(QT_MINOR_VERSION, 1) { - error(The QML2 based example requires Qt 5.1 or newer but Qt $$[QT_VERSION] was detected.) -} - -# Input -SOURCES += main.cpp -RESOURCES += qmlbot.qrc -OTHER_FILES += qml/main.qml - -include(../examples.pri) diff --git a/src/libcommuni/examples/qmlbot/qmlbot.qrc b/src/libcommuni/examples/qmlbot/qmlbot.qrc deleted file mode 100644 index 5f94096..0000000 --- a/src/libcommuni/examples/qmlbot/qmlbot.qrc +++ /dev/null @@ -1,5 +0,0 @@ -<RCC> - <qresource prefix="/"> - <file alias="main.qml">qml/main.qml</file> - </qresource> -</RCC> diff --git a/src/libcommuni/examples/quick/main.cpp b/src/libcommuni/examples/quick/main.cpp deleted file mode 100644 index c503b98..0000000 --- a/src/libcommuni/examples/quick/main.cpp +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This example is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -#include <QGuiApplication> -#include <QQmlApplicationEngine> - -int main(int argc, char* argv[]) -{ - QGuiApplication app(argc, argv); - app.setOrganizationName("Commmuni"); - app.setApplicationName("QtQuick Example"); - QQmlApplicationEngine engine(QUrl("qrc:/main.qml")); - return app.exec(); -} diff --git a/src/libcommuni/examples/quick/qml/BufferListView.qml b/src/libcommuni/examples/quick/qml/BufferListView.qml deleted file mode 100644 index 3d277b6..0000000 --- a/src/libcommuni/examples/quick/qml/BufferListView.qml +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This example is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -import QtQuick 2.1 -import QtQuick.Controls 1.0 -import Communi 3.0 - -Rectangle { - id: background - - property alias bufferModel: listView.model - property IrcBuffer currentBuffer - - signal closed(IrcBuffer buffer) - - color: "#edf3fe" - - Rectangle { - id: frame - anchors.fill: parent - anchors.topMargin: -1 - color: "transparent" - border.color: "#aaa" - } - - Menu { - id: menu - MenuItem { - text: qsTr("Close") - shortcut: qsTr("Ctrl+W") - enabled: !!currentBuffer - onTriggered: closed(currentBuffer) - } - } - - ScrollView { - id: scrollView - - anchors.fill: parent - anchors.topMargin: -1 - - ListView { - id: listView - - delegate: Rectangle { - property bool first: index === 0 - property bool current: model.buffer === currentBuffer - anchors.left: parent ? parent.left : undefined - anchors.right: parent ? parent.right : undefined - anchors.margins: 1 - height: Math.max(21, label.implicitHeight + 5) - color: first ? "#ddd" : current ? "#b5d5ff" : "transparent" - Rectangle { - visible: first - width: parent.width - height: 1 - anchors.bottom: parent.bottom - anchors.fill: parent - anchors.leftMargin: -1 - anchors.rightMargin: -1 - color: "transparent" - border.color: "#aaa" - } - Label { - id: label - text: model.title - font.bold: first - anchors.margins: 2 - anchors.leftMargin: 6 - anchors.left: parent.left - anchors.right: parent.right - anchors.verticalCenter: parent.verticalCenter - } - MouseArea { - anchors.fill: parent - acceptedButtons: Qt.LeftButton | Qt.RightButton - onPressed: { - currentBuffer = model.buffer - if (mouse.button === Qt.RightButton) - menu.popup() - } - } - } - } - } -} diff --git a/src/libcommuni/examples/quick/qml/ChatPage.qml b/src/libcommuni/examples/quick/qml/ChatPage.qml deleted file mode 100644 index 474b950..0000000 --- a/src/libcommuni/examples/quick/qml/ChatPage.qml +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This example is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -import QtQuick 2.1 -import QtQuick.Layouts 1.0 -import QtQuick.Controls 1.0 -import QtQuick.Controls.Styles 1.0 -import Communi 3.0 - -Item { - id: page - - property IrcBuffer serverBuffer - property alias bufferModel: bufferListView.bufferModel - property alias currentBuffer: bufferListView.currentBuffer - property IrcChannel currentChannel: currentBuffer ? currentBuffer.toChannel() : null - - Connections { - target: bufferModel - onAdded: currentBuffer = buffer - onAboutToBeRemoved: { - var idx = bufferModel.indexOf(buffer) - currentBuffer = bufferModel.get(idx + 1) || bufferModel.get(Math.max(0, idx - 1)) - } - } - - SplitView { - anchors.fill: parent - - handleDelegate: Item { } - - BufferListView { - id: bufferListView - width: page.width / 6 - onClosed: { - if (buffer === serverBuffer) { - bufferModel.quit() - } else { - if (buffer.channel) - buffer.part(qsTr("Communi %1 QtQuick example").arg(irc.version())) - bufferModel.remove(buffer) - } - } - } - - Column { - Layout.fillWidth: true - - TopicLabel { - id: topicLabel - width: parent.width - visible: currentChannel - channel: currentChannel - } - - SplitView { - width: parent.width - height: parent.height - (currentChannel ? topicLabel.height : 0) - textEntry.height - - handleDelegate: Item { } - - Item { - id: stack - - width: 1; height: 1 - Layout.fillWidth: true - Layout.fillHeight: true - - Repeater { - anchors.fill: parent - model: bufferModel - delegate: TextBrowser { - anchors.fill: parent - buffer: model.buffer - visible: buffer == currentBuffer - } - } - } - - UserListView { - width: page.width / 6 - visible: currentChannel - channel: currentChannel - onQueried: currentBuffer = currentBuffer.model.add(user.name) - } - } - - TextEntry { - id: textEntry - width: parent.width - buffer: currentBuffer - enabled: currentBuffer - onMessageSent: currentBuffer.receiveMessage(message) - - Connections { - target: page - onCurrentBufferChanged: { - if (page.visible && currentBuffer) - textEntry.forceActiveFocus() - } - } - } - } - } -} diff --git a/src/libcommuni/examples/quick/qml/ConnectPage.qml b/src/libcommuni/examples/quick/qml/ConnectPage.qml deleted file mode 100644 index 8a7c296..0000000 --- a/src/libcommuni/examples/quick/qml/ConnectPage.qml +++ /dev/null @@ -1,160 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This example is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -import QtQuick 2.1 -import QtQuick.Layouts 1.0 -import QtQuick.Controls 1.0 -import Qt.labs.settings 1.0 -import Communi 3.0 - -Item { - id: page - - property string host: hostField.text || hostField.placeholderText - property int port: portField.value - property bool secure: secureField.checked - property bool sasl: saslField.checked - property string nickName: nickNameField.text || nickNameField.placeholderText - property string realName: realNameField.text || realNameField.placeholderText - property string userName: userNameField.text || userNameField.placeholderText - property string password: passwordField.text - property string channel: channelField.text || channelField.placeholderText - - Settings { - id: settings - property alias host: hostField.text - property alias port: portField.value - property alias secure: secureField.checked - property alias sasl: saslField.checked - property alias nickName: nickNameField.text - property alias realName: realNameField.text - property alias userName: userNameField.text - property alias password: passwordField.text - property alias channel: channelField.text - } - - signal accepted() - signal rejected() - - implicitWidth: grid.implicitWidth + row.implicitWidth - implicitHeight: grid.implicitHeight + row.implicitHeight + 48 - - GridLayout { - id: grid - - width: page.width * 2 / 3 - anchors.centerIn: parent - anchors.verticalCenterOffset: -row.height + 12 - - columns: 2 - rowSpacing: 12 - columnSpacing: 12 - - Label { text: qsTr("Host:") } - TextField { - id: hostField - focus: true - Layout.fillWidth: true - placeholderText: "irc.freenode.net" - } - - Label { text: qsTr("Port:") } - RowLayout { - SpinBox { - id: portField - value: 6667 - minimumValue: 1024 - maximumValue: 65535 - Layout.fillWidth: true - } - CheckBox { - id: secureField - text: qsTr("SSL") - } - CheckBox { - id: saslField - text: qsTr("SASL") - } - } - - Label { text: qsTr("Nick name:") } - TextField { - id: nickNameField - Layout.fillWidth: true - placeholderText: "Quick" + Math.round(Math.random() * 9999) - } - - Label { text: qsTr("Real name:") } - TextField { - id: realNameField - Layout.fillWidth: true - placeholderText: qsTr("Communi %1 QtQuick example").arg(irc.version()) - } - - Label { text: qsTr("User name:") } - TextField { - id: userNameField - Layout.fillWidth: true - placeholderText: "communi" - } - - Label { text: qsTr("Password:") } - TextField { - id: passwordField - echoMode: TextInput.Password - Layout.fillWidth: true - } - - Label { text: qsTr("Channel:") } - TextField { - id: channelField - Layout.fillWidth: true - placeholderText: "#communi" - } - } - - Keys.onReturnPressed: { - if (okButton.enabled) - page.accepted() - } - - Keys.onEnterPressed: { - if (okButton.enabled) - page.accepted() - } - - Keys.onEscapePressed: { - if (cancelButton.enabled) - page.rejected() - } - - RowLayout { - id: row - - anchors.margins: 12 - anchors.left: parent.left - anchors.right: parent.right - anchors.bottom: parent.bottom - - Item { Layout.fillWidth: true } - - Button { - id: okButton - text: qsTr("Ok") - enabled: page.visible - onClicked: page.accepted() - } - - Button { - id: cancelButton - text: qsTr("Cancel") - onClicked: page.rejected() - } - } -} diff --git a/src/libcommuni/examples/quick/qml/MessageFormatter.qml b/src/libcommuni/examples/quick/qml/MessageFormatter.qml deleted file mode 100644 index 754ca1c..0000000 --- a/src/libcommuni/examples/quick/qml/MessageFormatter.qml +++ /dev/null @@ -1,215 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This example is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -import QtQuick 2.1 -import Communi 3.0 - -QtObject { - id: root - - property IrcTextFormat textFormat: IrcTextFormat { - id: textFormat - - palette.gray: "#606060" - palette.lightGray: "#808080" - - // http://ethanschoonover.com/solarized - palette.blue: "#268bd2" - palette.green: "#859900" - palette.red: "#dc322f" - palette.brown: "#cb4b16" - palette.purple: "#6c71c4" - palette.orange: "#cb4b16" - palette.yellow: "#b58900" - palette.lightGreen: "#859900" - palette.cyan: "#2aa198" - palette.lightCyan: "#2aa198" - palette.lightBlue: "#268bd2" - palette.pink: "#6c71c4" - } - - function formatMessage(message) { - var formatted - switch (message.type) { - case IrcMessage.Invite: formatted = formatInviteMessage(message); break - case IrcMessage.Join: formatted = formatJoinMessage(message); break - case IrcMessage.Kick: formatted = formatKickMessage(message); break - case IrcMessage.Mode: formatted = formatModeMessage(message); break - case IrcMessage.Names: formatted = formatNamesMessage(message); break - case IrcMessage.Nick: formatted = formatNickMessage(message); break - case IrcMessage.Notice: formatted = formatNoticeMessage(message); break - case IrcMessage.Numeric: formatted = formatNumericMessage(message); break - case IrcMessage.Part: formatted = formatPartMessage(message); break - case IrcMessage.Private: formatted = formatPrivateMessage(message); break - case IrcMessage.Quit: formatted = formatQuitMessage(message); break - case IrcMessage.Topic: formatted = formatTopicMessage(message); break - } - return formatText(formatted, message.timeStamp) - } - - function formatText(text, timeStamp) { - if (text) { - switch (text[0]) { - case '!': text = qsTr("<font color='gray'>%1</font>").arg(text); break; - case '[': text = qsTr("<font color='brown'>%1</font>").arg(text); break; - case '*': text = qsTr("<font color='darkmagenta'>%1</font>").arg(text); break; - case '?': text = qsTr("<font color='brown'>%1</font>").arg(text); break; - default: break; - } - - return qsTr("<font color='gray'>[%1]</font> %2").arg(Qt.formatTime(timeStamp, "hh:mm:ss")).arg(text) - } - } - - function formatInviteMessage(message) { - var sender = formatName(message.nick) - return qsTr("! %1 invited to %3").arg(sender).arg(message.channel) - } - - function formatJoinMessage(message) { - var sender = formatName(message.nick) - return qsTr("! %1 joined %2").arg(sender).arg(message.channel) - } - - function formatKickMessage(message) { - var sender = formatName(message.nick) - var user = formatName(message.user) - if (message.reason.length) - return qsTr("! %1 kicked %2 (%3)").arg(sender).arg(user).arg(message.reason) - return qsTr("! %1 kicked %2").arg(sender).arg(user) - } - - function formatModeMessage(message) { - var sender = formatName(message.nick) - if (message.reply) - return qsTr("! %1 mode is %2 %3").arg(message.target).arg(message.mode).arg(message.argument) - return qsTr("! %1 sets mode %2 %3").arg(sender).arg(message.mode).arg(message.argument) - } - - function formatNamesMessage(message) { - return qsTr("! %1 has %2 users").arg(message.channel).arg(message.names.length) - } - - function formatNickMessage(message) { - var sender = formatName(message.nick) - var nick = formatName(message.newNick) - return qsTr("! %1 changed nick to %2").arg(sender).arg(nick) - } - - function formatNoticeMessage(message) { - var sender = formatName(message.nick) - var content = formatHtml(message.content) - return qsTr("[%1] %2").arg(sender).arg(content) - } - - function formatNumericMessage(message) { - switch (message.code) { - case Irc.RPL_TOPIC: - case Irc.RPL_TOPICWHOTIME: - case Irc.RPL_CHANNEL_URL: - case Irc.RPL_NAMREPLY: - case Irc.RPL_ENDOFNAMES: - return // ignore - default: - return qsTr("[%1] %2").arg(message.code).arg(message.parameters.slice(1).join(" ")) - } - } - - function formatPartMessage(message) { - var sender = formatName(message.nick) - if (message.reason.length) - return qsTr("! %1 parted %2 (%3)").arg(sender).arg(message.channel).arg(formatHtml(message.reason)) - return qsTr("! %1 parted %2").arg(sender).arg(message.channel) - } - - function formatPrivateMessage(message) { - var sender = formatName(message.nick) - var content = formatHtml(message.content) - if (message.action) - return qsTr("* %1 %2").arg(sender).arg(content) - if (message.request) - return qsTr("! %1 requested %2").arg(sender).arg(content.split(" ")[0].toLowerCase()) - return qsTr("<%1> %2").arg(sender).arg(content) - } - - function formatQuitMessage(message) { - var sender = formatName(message.nick) - if (message.reason.length) - return qsTr("! %1 has quit (%2)").arg(sender).arg(formatHtml(message.reason)) - return qsTr("! %1 has quit").arg(sender) - } - - function formatTopicMessage(message) { - var sender = formatName(message.nick) - var topic = formatHtml(message.topic) - var channel = message.channel - if (message.reply) - return qsTr("! %1 topic is \"%2\"").arg(channel).arg(topic) - return qsTr("! %1 sets topic \"%2\" on %3").arg(sender).arg(topic).arg(channel) - } - - function formatHtml(message) { - return textFormat.toHtml(message) - } - - function formatName(name) { - var color = hslToRgb((hashCode(name) % 359)/359, 0.5, 0.25) - var r = ("0" + Math.round(Math.abs(color[0])).toString(16)).substr(-2) - var g = ("0" + Math.round(Math.abs(color[1])).toString(16)).substr(-2) - var b = ("0" + Math.round(Math.abs(color[2])).toString(16)).substr(-2) - return qsTr("<b><font color='#%1'>%2</font></b>").arg(r+g+b).arg(name); - } - - function hashCode(str) { - var hash = 0; - if (str.length == 0) return hash; - for (var i = 0; i < str.length; i++) { - var chr = str.charCodeAt(i); - hash = ((hash<<5)-hash)+chr; - hash = hash & hash; // Convert to 32bit integer - } - return hash; - } - - /** - * Converts an HSL color value to RGB. Conversion formula - * adapted from http://en.wikipedia.org/wiki/HSL_color_space. - * Assumes h, s, and l are contained in the set [0, 1] and - * returns r, g, and b in the set [0, 255]. - * - * @param Number h The hue - * @param Number s The saturation - * @param Number l The lightness - * @return Array The RGB representation - */ - function hslToRgb(h, s, l){ - var r, g, b; - - function hue2rgb(p, q, t){ - if(t < 0) t += 1; - if(t > 1) t -= 1; - if(t < 1/6) return p + (q - p) * 6 * t; - if(t < 1/2) return q; - if(t < 2/3) return p + (q - p) * (2/3 - t) * 6; - return p; - } - - if(s == 0){ - r = g = b = l; // achromatic - }else{ - var q = l < 0.5 ? l * (1 + s) : l + s - l * s; - var p = 2 * l - q; - r = hue2rgb(p, q, h + 1/3); - g = hue2rgb(p, q, h); - b = hue2rgb(p, q, h - 1/3); - } - - return [r * 255, g * 255, b * 255]; - } -} diff --git a/src/libcommuni/examples/quick/qml/TextBrowser.qml b/src/libcommuni/examples/quick/qml/TextBrowser.qml deleted file mode 100644 index fb013bc..0000000 --- a/src/libcommuni/examples/quick/qml/TextBrowser.qml +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This example is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -import QtQuick 2.1 -import QtQuick.Controls 1.0 -import Communi 3.0 - -Item { - id: background - - property IrcBuffer buffer - - implicitWidth: textArea.implicitWidth - implicitHeight: textArea.implicitHeight - - MessageFormatter { - id: formatter - } - - Connections { - target: buffer - onMessageReceived: { - var line = formatter.formatMessage(message) - if (line) - textArea.append(line) - } - } - - TextArea { - id: textArea - - anchors.fill: parent - anchors.topMargin: -1 - anchors.leftMargin: -1 - anchors.bottomMargin: -1 - - readOnly: true - textFormat: Qt.RichText - frameVisible: false - } -} diff --git a/src/libcommuni/examples/quick/qml/TextEntry.qml b/src/libcommuni/examples/quick/qml/TextEntry.qml deleted file mode 100644 index 4201e86..0000000 --- a/src/libcommuni/examples/quick/qml/TextEntry.qml +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This example is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -import QtQuick 2.1 -import QtQuick.Controls 1.0 -import QtQuick.Controls.Styles 1.0 -import Communi 3.1 - -TextField { - id: textField - - property alias buffer: completer.buffer - - signal messageSent(IrcMessage message) - - focus: true - placeholderText: qsTr("...") - - Keys.onTabPressed: completer.complete(text, cursorPosition) - - IrcCompleter { - id: completer - - onCompleted: { - textField.text = text - textField.cursorPosition = cursor - } - - parser: IrcCommandParser { - id: parser - - tolerant: true - triggers: ["/"] - channels: buffer ? buffer.model.channels : [] - target: buffer ? buffer.title : "" - - Component.onCompleted: { - parser.addCommand(IrcCommand.Join, "JOIN <#channel> (<key>)") - parser.addCommand(IrcCommand.CtcpAction, "ME [target] <message...>") - parser.addCommand(IrcCommand.Nick, "NICK <nick>") - parser.addCommand(IrcCommand.Part, "PART (<#channel>) (<message...>)") - } - } - } - - style: TextFieldStyle { - background: Rectangle { - color: palette.base - Rectangle { - color: "transparent" - anchors.fill: parent - anchors.leftMargin: -1 - border.color: "#aaa" - } - } - } - - onAccepted: { - var cmd = parser.parse(text) - if (cmd) { - buffer.connection.sendCommand(cmd) - if (cmd.type === IrcCommand.Message - || cmd.type === IrcCommand.CtcpAction - || cmd.type === IrcCommand.Notice) { - var msg = cmd.toMessage(buffer.connection.nickName, buffer.connection) - textField.messageSent(msg) - } - textField.text = "" - } - } -} diff --git a/src/libcommuni/examples/quick/qml/TopicLabel.qml b/src/libcommuni/examples/quick/qml/TopicLabel.qml deleted file mode 100644 index 4009304..0000000 --- a/src/libcommuni/examples/quick/qml/TopicLabel.qml +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This example is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -import QtQuick 2.1 -import QtQuick.Controls 1.0 -import Communi 3.0 - -Rectangle { - id: background - - property IrcChannel channel - - color: "#ddd" - height: Math.max(20, label.implicitHeight + 4) - - IrcTextFormat { - id: textFormat - } - - Label { - id: label - - anchors.margins: 2 - anchors.leftMargin: 4 - anchors.left: parent.left - anchors.right: parent.right - anchors.verticalCenter: parent.verticalCenter - - wrapMode: Text.Wrap - text: channel && channel.topic ? textFormat.toHtml(channel.topic) : "-" - } - - Rectangle { - id: frame - - color: "transparent" - anchors.fill: parent - anchors.topMargin: -1 - anchors.leftMargin: -1 - border.color: "#aaa" - } -} diff --git a/src/libcommuni/examples/quick/qml/UserListView.qml b/src/libcommuni/examples/quick/qml/UserListView.qml deleted file mode 100644 index 6daf06b..0000000 --- a/src/libcommuni/examples/quick/qml/UserListView.qml +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This example is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -import QtQuick 2.1 -import QtQuick.Controls 1.0 -import Communi 3.0 - -Rectangle { - id: background - - property IrcChannel channel - - signal queried(IrcUser user) - - color: "#edf3fe" - - Rectangle { - id: frame - anchors.fill: parent - color: "transparent" - border.color: "#aaa" - anchors.topMargin: -1 - anchors.leftMargin: -1 - anchors.bottomMargin: -1 - } - - ScrollView { - id: scrollView - - anchors.fill: parent - anchors.topMargin: -1 - anchors.bottomMargin: -1 - - ListView { - id: listView - - model: IrcUserModel { - id: userModel - sortMethod: Irc.SortByTitle - channel: background.channel - onChannelChanged: listView.currentIndex = -1 - } - - delegate: Rectangle { - width: parent.width - height: Math.max(20, label.implicitHeight + 4) - color: ListView.isCurrentItem ? "#b5d5ff" : "transparent" - Label { - id: label - text: model.title - anchors.margins: 2 - anchors.leftMargin: 6 - anchors.left: parent.left - anchors.right: parent.right - anchors.verticalCenter: parent.verticalCenter - } - MouseArea { - anchors.fill: parent - onPressed: listView.currentIndex = index - onDoubleClicked: queried(model.user) - } - } - } - } -} diff --git a/src/libcommuni/examples/quick/qml/main.qml b/src/libcommuni/examples/quick/qml/main.qml deleted file mode 100644 index 8c431ad..0000000 --- a/src/libcommuni/examples/quick/qml/main.qml +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This example is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -import QtQuick 2.1 -import QtQuick.Controls 1.0 -import Communi 3.0 - -ApplicationWindow { - id: window - - visible: true - title: qsTr("Communi %1 QtQuick example").arg(irc.version()) - - width: 800 - height: 480 - - minimumWidth: connectPage.implicitWidth - minimumHeight: connectPage.implicitHeight - - color: Qt.darker(palette.base, 1.06) - - SystemPalette { id: palette } - - Irc { id: irc } - IrcCommand { id: cmd } - - ConnectPage { - id: connectPage - anchors.fill: parent - visible: !connection.active - onAccepted: { - chatPage.currentBuffer = serverBuffer - connection.sendCommand(cmd.createJoin(channel)) - connection.open() - } - onRejected: Qt.quit() - } - - ChatPage { - id: chatPage - anchors.fill: parent - visible: connection.active - bufferModel: IrcBufferModel { - id: bufferModel - sortMethod: Irc.SortByTitle - connection: IrcConnection { - id: connection - host: connectPage.host - port: connectPage.port - secure: connectPage.secure - saslMechanism: connectPage.sasl ? supportedSaslMechanisms[0] : "" - nickName: connectPage.nickName - realName: connectPage.realName - userName: connectPage.userName - password: connectPage.password - } - onMessageIgnored: serverBuffer.receiveMessage(message) - function quit() { - bufferModel.clear() - connection.quit(qsTr("Communi %1 QtQuick example").arg(irc.version())) - connection.close() - } - } - serverBuffer: IrcBuffer { - id: serverBuffer - sticky: true - persistent: true - name: connection.displayName - Component.onCompleted: bufferModel.add(serverBuffer) - } - } - - Component.onDestruction: bufferModel.quit() -} diff --git a/src/libcommuni/examples/quick/quick.pro b/src/libcommuni/examples/quick/quick.pro deleted file mode 100644 index 10690af..0000000 --- a/src/libcommuni/examples/quick/quick.pro +++ /dev/null @@ -1,28 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -TEMPLATE = app -TARGET = quick -DEPENDPATH += . -INCLUDEPATH += . -QT += network quick - -lessThan(QT_MAJOR_VERSION, 5)|lessThan(QT_MINOR_VERSION, 2) { - error(The Qt Quick 2 based example requires Qt 5.2 or newer but Qt $$[QT_VERSION] was detected.) -} - -# Input -SOURCES += main.cpp -RESOURCES += quick.qrc -OTHER_FILES += qml/main.qml -OTHER_FILES += qml/BufferListView.qml -OTHER_FILES += qml/ChatPage.qml -OTHER_FILES += qml/ConnectPage.qml -OTHER_FILES += qml/MessageFormatter.qml -OTHER_FILES += qml/TextBrowser.qml -OTHER_FILES += qml/TextEntry.qml -OTHER_FILES += qml/TopicLabel.qml -OTHER_FILES += qml/UserListView.qml - -include(../examples.pri) diff --git a/src/libcommuni/examples/quick/quick.qrc b/src/libcommuni/examples/quick/quick.qrc deleted file mode 100644 index aba83b9..0000000 --- a/src/libcommuni/examples/quick/quick.qrc +++ /dev/null @@ -1,13 +0,0 @@ -<RCC> - <qresource prefix="/"> - <file alias="main.qml">qml/main.qml</file> - <file alias="BufferListView.qml">qml/BufferListView.qml</file> - <file alias="ChatPage.qml">qml/ChatPage.qml</file> - <file alias="ConnectPage.qml">qml/ConnectPage.qml</file> - <file alias="MessageFormatter.qml">qml/MessageFormatter.qml</file> - <file alias="TextBrowser.qml">qml/TextBrowser.qml</file> - <file alias="TextEntry.qml">qml/TextEntry.qml</file> - <file alias="TopicLabel.qml">qml/TopicLabel.qml</file> - <file alias="UserListView.qml">qml/UserListView.qml</file> - </qresource> -</RCC> diff --git a/src/libcommuni/features/communi.prf b/src/libcommuni/features/communi.prf deleted file mode 100644 index fe3fb2f..0000000 --- a/src/libcommuni/features/communi.prf +++ /dev/null @@ -1,41 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -isEmpty(COMMUNI):error(Usage: \"CONFIG += communi\" and \"COMMUNI += <module(s)>\" \(available modules: core model util\)) - -include(communi-config.prf) - -isEmpty(IRC_INSTALL_LIBS):IRC_INSTALL_LIBS = $$[QT_INSTALL_LIBS] -isEmpty(IRC_INSTALL_BINS):IRC_INSTALL_BINS = $$[QT_INSTALL_BINS] -isEmpty(IRC_INSTALL_HEADERS):IRC_INSTALL_HEADERS = $$[QT_INSTALL_HEADERS]/Communi - -macx:!qt_no_framework { - QMAKE_FRAMEWORKPATH += $$IRC_INSTALL_LIBS -} else { - INCLUDEPATH += $$IRC_INSTALL_HEADERS - DEPENDPATH += $$IRC_INSTALL_HEADERS - LIBS += -L$$IRC_INSTALL_LIBS -} - -IRC_MODULES = -for(MODULE, COMMUNI) { - MODULE = $$lower($$MODULE) - isEqual(MODULE, "core"):IRC_MODULES *= IrcCore - else:isEqual(MODULE, "model"):IRC_MODULES *= IrcModel - else:isEqual(MODULE, "util"):IRC_MODULES *= IrcUtil -} - -for(IRC_MODULE, IRC_MODULES) { - macx:!qt_no_framework { - INCLUDEPATH += $$IRC_INSTALL_LIBS/$${IRC_MODULE}.framework/Headers - LIBS += -framework $$IRC_MODULE - } else { - INCLUDEPATH += $$IRC_INSTALL_HEADERS/$$IRC_MODULE - DEPENDPATH += $$IRC_INSTALL_HEADERS/$$IRC_MODULE - REAL_TEMPLATE = $$TEMPLATE - TEMPLATE = fakelib - LIBS += -l$$qtLibraryTarget($$IRC_MODULE) - TEMPLATE = $$REAL_TEMPLATE - } -} diff --git a/src/libcommuni/include/IrcCore/Irc b/src/libcommuni/include/IrcCore/Irc deleted file mode 100644 index c7f8af4..0000000 --- a/src/libcommuni/include/IrcCore/Irc +++ /dev/null @@ -1 +0,0 @@ -#include <irc.h>
diff --git a/src/libcommuni/include/IrcCore/IrcCommand b/src/libcommuni/include/IrcCore/IrcCommand deleted file mode 100644 index a9b4889..0000000 --- a/src/libcommuni/include/IrcCore/IrcCommand +++ /dev/null @@ -1 +0,0 @@ -#include <irccommand.h> diff --git a/src/libcommuni/include/IrcCore/IrcCommandFilter b/src/libcommuni/include/IrcCore/IrcCommandFilter deleted file mode 100644 index 1edae38..0000000 --- a/src/libcommuni/include/IrcCore/IrcCommandFilter +++ /dev/null @@ -1 +0,0 @@ -#include <ircfilter.h> diff --git a/src/libcommuni/include/IrcCore/IrcConnection b/src/libcommuni/include/IrcCore/IrcConnection deleted file mode 100644 index 75c878e..0000000 --- a/src/libcommuni/include/IrcCore/IrcConnection +++ /dev/null @@ -1 +0,0 @@ -#include <ircconnection.h>
diff --git a/src/libcommuni/include/IrcCore/IrcCore b/src/libcommuni/include/IrcCore/IrcCore deleted file mode 100644 index 918016d..0000000 --- a/src/libcommuni/include/IrcCore/IrcCore +++ /dev/null @@ -1 +0,0 @@ -#include <irccore.h> diff --git a/src/libcommuni/include/IrcCore/IrcFilter b/src/libcommuni/include/IrcCore/IrcFilter deleted file mode 100644 index 1edae38..0000000 --- a/src/libcommuni/include/IrcCore/IrcFilter +++ /dev/null @@ -1 +0,0 @@ -#include <ircfilter.h> diff --git a/src/libcommuni/include/IrcCore/IrcGlobal b/src/libcommuni/include/IrcCore/IrcGlobal deleted file mode 100644 index af36086..0000000 --- a/src/libcommuni/include/IrcCore/IrcGlobal +++ /dev/null @@ -1 +0,0 @@ -#include <ircglobal.h>
diff --git a/src/libcommuni/include/IrcCore/IrcMessage b/src/libcommuni/include/IrcCore/IrcMessage deleted file mode 100644 index 4c767f6..0000000 --- a/src/libcommuni/include/IrcCore/IrcMessage +++ /dev/null @@ -1 +0,0 @@ -#include <ircmessage.h>
diff --git a/src/libcommuni/include/IrcCore/IrcMessageFilter b/src/libcommuni/include/IrcCore/IrcMessageFilter deleted file mode 100644 index 1edae38..0000000 --- a/src/libcommuni/include/IrcCore/IrcMessageFilter +++ /dev/null @@ -1 +0,0 @@ -#include <ircfilter.h> diff --git a/src/libcommuni/include/IrcCore/IrcNetwork b/src/libcommuni/include/IrcCore/IrcNetwork deleted file mode 100644 index c298490..0000000 --- a/src/libcommuni/include/IrcCore/IrcNetwork +++ /dev/null @@ -1 +0,0 @@ -#include <ircnetwork.h> diff --git a/src/libcommuni/include/IrcCore/IrcProtocol b/src/libcommuni/include/IrcCore/IrcProtocol deleted file mode 100644 index 5ec3d80..0000000 --- a/src/libcommuni/include/IrcCore/IrcProtocol +++ /dev/null @@ -1 +0,0 @@ -#include <ircprotocol.h> diff --git a/src/libcommuni/include/IrcCore/irc.h b/src/libcommuni/include/IrcCore/irc.h deleted file mode 100644 index 911528a..0000000 --- a/src/libcommuni/include/IrcCore/irc.h +++ /dev/null @@ -1,557 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef IRC_H -#define IRC_H - -#include <IrcGlobal> -#include <QtCore/qobject.h> -#include <QtCore/qstring.h> -#include <QtCore/qmetatype.h> - -IRC_BEGIN_NAMESPACE - -#ifdef IRC_DOXYGEN -namespace Irc -{ - Q_INVOKABLE QString version(); - Q_INVOKABLE QString codeToString(int code); - Q_INVOKABLE QString nickFromPrefix(const QString& prefix); - Q_INVOKABLE QString identFromPrefix(const QString& prefix); - Q_INVOKABLE QString hostFromPrefix(const QString& prefix); - Q_INVOKABLE void registerMetaTypes(); -#else -class IRC_CORE_EXPORT Irc : public QObject -{ - Q_OBJECT - Q_ENUMS(Color DataRole SortMethod Code) - -public: - Q_INVOKABLE static QString version(); - Q_INVOKABLE static QString codeToString(int code); - Q_INVOKABLE static QString nickFromPrefix(const QString& prefix); - Q_INVOKABLE static QString identFromPrefix(const QString& prefix); - Q_INVOKABLE static QString hostFromPrefix(const QString& prefix); - Q_INVOKABLE static void registerMetaTypes(); -#endif - - enum Color { - White = 0, - Black = 1, - Blue = 2, - Green = 3, - Red = 4, - Brown = 5, - Purple = 6, - Orange = 7, - Yellow = 8, - LightGreen = 9, - Cyan = 10, - LightCyan = 11, - LightBlue = 12, - Pink = 13, - Gray = 14, - LightGray = 15 - }; - - enum DataRole { - UserRole = Qt::UserRole, - BufferRole, - ChannelRole, - NameRole, - PrefixRole, - ModeRole, - TitleRole - }; - - enum SortMethod { - SortByHand, - SortByName, - SortByTitle, - SortByActivity - }; - - enum Code { - RPL_WELCOME = 1, - RPL_YOURHOST = 2, - RPL_CREATED = 3, - RPL_MYINFO = 4, - RPL_ISUPPORT = 5, - RPL_SNOMASK = 8, - RPL_STATMEMTOT = 9, - RPL_BOUNCE = 10, - RPL_STATMEM = 10, - RPL_YOURCOOKIE = 14, - RPL_YOURID = 42, - RPL_SAVENICK = 43, - RPL_ATTEMPTINGJUNC = 50, - RPL_ATTEMPTINGREROUTE = 51, - RPL_TRACELINK = 200, - RPL_TRACECONNECTING = 201, - RPL_TRACEHANDSHAKE = 202, - RPL_TRACEUNKNOWN = 203, - RPL_TRACEOPERATOR = 204, - RPL_TRACEUSER = 205, - RPL_TRACESERVER = 206, - RPL_TRACESERVICE = 207, - RPL_TRACENEWTYPE = 208, - RPL_TRACECLASS = 209, - RPL_TRACERECONNECT = 210, - RPL_STATS = 210, - RPL_STATSLINKINFO = 211, - RPL_STATSCOMMANDS = 212, - RPL_STATSCLINE = 213, - RPL_STATSNLINE = 214, - RPL_STATSILINE = 215, - RPL_STATSKLINE = 216, - RPL_STATSQLINE = 217, - RPL_STATSYLINE = 218, - RPL_ENDOFSTATS = 219, - RPL_UMODEIS = 221, - RPL_MODLIST = 222, - RPL_SQLINE_NICK = 222, - RPL_STATSZLINE = 225, - RPL_STATSCOUNT = 226, - RPL_SERVICEINFO = 231, - RPL_ENDOFSERVICES = 232, - RPL_SERVICE = 233, - RPL_SERVLIST = 234, - RPL_SERVLISTEND = 235, - RPL_STATSVERBOSE = 236, - RPL_STATSENGINE = 237, - RPL_STATSIAUTH = 239, - RPL_STATSVLINE = 240, - RPL_STATSLLINE = 241, - RPL_STATSUPTIME = 242, - RPL_STATSOLINE = 243, - RPL_STATSHLINE = 244, - RPL_STATSSLINE = 245, - RPL_STATSPING = 246, - RPL_STATSBLINE = 247, - RPL_STATSDEFINE = 248, - RPL_STATSDEBUG = 249, - RPL_STATSDLINE = 250, - RPL_STATSCONN = 250, - RPL_LUSERCLIENT = 251, - RPL_LUSEROP = 252, - RPL_LUSERUNKNOWN = 253, - RPL_LUSERCHANNELS = 254, - RPL_LUSERME = 255, - RPL_ADMINME = 256, - RPL_ADMINLOC1 = 257, - RPL_ADMINLOC2 = 258, - RPL_ADMINEMAIL = 259, - RPL_TRACELOG = 261, - RPL_TRACEPING = 262, - RPL_TRACEEND = 262, - RPL_TRYAGAIN = 263, - RPL_LOCALUSERS = 265, - RPL_GLOBALUSERS = 266, - RPL_START_NETSTAT = 267, - RPL_NETSTAT = 268, - RPL_END_NETSTAT = 269, - RPL_PRIVS = 270, - RPL_SILELIST = 271, - RPL_ENDOFSILELIST = 272, - RPL_NOTIFY = 273, - RPL_ENDNOTIFY = 274, - RPL_STATSDELTA = 274, - RPL_VCHANEXIST = 276, - RPL_VCHANLIST = 277, - RPL_VCHANHELP = 278, - RPL_GLIST = 280, - RPL_ENDOFGLIST = 281, - RPL_ACCEPTLIST = 281, - RPL_ENDOFACCEPT = 282, - RPL_JUPELIST = 282, - RPL_ENDOFJUPELIST = 283, - RPL_FEATURE = 284, - RPL_GLIST_HASH = 285, - RPL_CHANINFO_HANDLE = 285, - RPL_NEWHOSTIS = 285, - RPL_CHANINFO_USERS = 286, - RPL_CHKHEAD = 286, - RPL_CHANINFO_CHOPS = 287, - RPL_CHANUSER = 287, - RPL_CHANINFO_VOICES = 288, - RPL_PATCHHEAD = 288, - RPL_CHANINFO_AWAY = 289, - RPL_PATCHCON = 289, - RPL_CHANINFO_OPERS = 290, - RPL_HELPHDR = 290, - RPL_DATASTR = 290, - RPL_CHANINFO_BANNED = 291, - RPL_HELPOP = 291, - RPL_ENDOFCHECK = 291, - RPL_CHANINFO_BANS = 292, - RPL_HELPTLR = 292, - RPL_CHANINFO_INVITE = 293, - RPL_HELPHLP = 293, - RPL_CHANINFO_INVITES = 294, - RPL_HELPFWD = 294, - RPL_CHANINFO_KICK = 295, - RPL_HELPIGN = 295, - RPL_CHANINFO_KICKS = 296, - RPL_END_CHANINFO = 299, - RPL_NONE = 300, - RPL_AWAY = 301, - RPL_USERHOST = 302, - RPL_ISON = 303, - RPL_TEXT = 304, - RPL_UNAWAY = 305, - RPL_NOWAWAY = 306, - RPL_WHOISREGNICK = 307, - RPL_SUSERHOST = 307, - RPL_NOTIFYACTION = 308, - RPL_WHOISADMIN = 308, - RPL_NICKTRACE = 309, - RPL_WHOISSADMIN = 309, - RPL_WHOISHELPER = 309, - RPL_WHOISSVCMSG = 310, - RPL_WHOISHELPOP = 310, - RPL_WHOISSERVICE = 310, - RPL_WHOISUSER = 311, - RPL_WHOISSERVER = 312, - RPL_WHOISOPERATOR = 313, - RPL_WHOWASUSER = 314, - RPL_ENDOFWHO = 315, - RPL_WHOISCHANOP = 316, - RPL_WHOISIDLE = 317, - RPL_ENDOFWHOIS = 318, - RPL_WHOISCHANNELS = 319, - RPL_WHOISVIRT = 320, - RPL_WHOIS_HIDDEN = 320, - RPL_WHOISSPECIAL = 320, - RPL_LISTSTART = 321, - RPL_LIST = 322, - RPL_LISTEND = 323, - RPL_CHANNELMODEIS = 324, - RPL_UNIQOPIS = 325, - RPL_CHANNELPASSIS = 325, - RPL_NOCHANPASS = 326, - RPL_CHPASSUNKNOWN = 327, - RPL_CHANNEL_URL = 328, - RPL_CREATIONTIME = 329, - RPL_WHOWAS_TIME = 330, - RPL_WHOISACCOUNT = 330, - RPL_NOTOPIC = 331, - RPL_TOPIC = 332, - RPL_TOPICWHOTIME = 333, - RPL_LISTUSAGE = 334, - RPL_COMMANDSYNTAX = 334, - RPL_LISTSYNTAX = 334, - RPL_CHANPASSOK = 338, - RPL_WHOISACTUALLY = 338, - RPL_BADCHANPASS = 339, - RPL_INVITING = 341, - RPL_SUMMONING = 342, - RPL_INVITED = 345, - RPL_INVITELIST = 346, - RPL_ENDOFINVITELIST = 347, - RPL_EXCEPTLIST = 348, - RPL_ENDOFEXCEPTLIST = 349, - RPL_VERSION = 351, - RPL_WHOREPLY = 352, - RPL_NAMREPLY = 353, - RPL_WHOSPCRPL = 354, - RPL_NAMREPLY_ = 355, - RPL_KILLDONE = 361, - RPL_CLOSING = 362, - RPL_CLOSEEND = 363, - RPL_LINKS = 364, - RPL_ENDOFLINKS = 365, - RPL_ENDOFNAMES = 366, - RPL_BANLIST = 367, - RPL_ENDOFBANLIST = 368, - RPL_ENDOFWHOWAS = 369, - RPL_INFO = 371, - RPL_MOTD = 372, - RPL_INFOSTART = 373, - RPL_ENDOFINFO = 374, - RPL_MOTDSTART = 375, - RPL_ENDOFMOTD = 376, - RPL_KICKEXPIRED = 377, - RPL_SPAM = 377, - RPL_BANEXPIRED = 378, - RPL_WHOISHOST = 378, - RPL_KICKLINKED = 379, - RPL_WHOISMODES = 379, - RPL_BANLINKED = 380, - RPL_YOURHELPER = 380, - RPL_YOUREOPER = 381, - RPL_REHASHING = 382, - RPL_YOURESERVICE = 383, - RPL_MYPORTIS = 384, - RPL_NOTOPERANYMORE = 385, - RPL_QLIST = 386, - RPL_IRCOPS = 386, - RPL_ENDOFQLIST = 387, - RPL_ENDOFIRCOPS = 387, - RPL_ALIST = 388, - RPL_ENDOFALIST = 389, - RPL_TIME = 391, - RPL_USERSSTART = 392, - RPL_USERS = 393, - RPL_ENDOFUSERS = 394, - RPL_NOUSERS = 395, - RPL_HOSTHIDDEN = 396, - ERR_UNKNOWNERROR = 400, - ERR_NOSUCHNICK = 401, - ERR_NOSUCHSERVER = 402, - ERR_NOSUCHCHANNEL = 403, - ERR_CANNOTSENDTOCHAN = 404, - ERR_TOOMANYCHANNELS = 405, - ERR_WASNOSUCHNICK = 406, - ERR_TOOMANYTARGETS = 407, - ERR_NOSUCHSERVICE = 408, - ERR_NOCOLORSONCHAN = 408, - ERR_NOORIGIN = 409, - ERR_NORECIPIENT = 411, - ERR_NOTEXTTOSEND = 412, - ERR_NOTOPLEVEL = 413, - ERR_WILDTOPLEVEL = 414, - ERR_BADMASK = 415, - ERR_TOOMANYMATCHES = 416, - ERR_QUERYTOOLONG = 416, - ERR_LENGTHTRUNCATED = 419, - ERR_UNKNOWNCOMMAND = 421, - ERR_NOMOTD = 422, - ERR_NOADMININFO = 423, - ERR_FILEERROR = 424, - ERR_NOOPERMOTD = 425, - ERR_TOOMANYAWAY = 429, - ERR_EVENTNICKCHANGE = 430, - ERR_NONICKNAMEGIVEN = 431, - ERR_ERRONEUSNICKNAME = 432, - ERR_NICKNAMEINUSE = 433, - ERR_SERVICENAMEINUSE = 434, - ERR_NORULES = 434, - ERR_SERVICECONFUSED = 435, - ERR_BANONCHAN = 435, - ERR_NICKCOLLISION = 436, - ERR_UNAVAILRESOURCE = 437, - ERR_BANNICKCHANGE = 437, - ERR_NICKTOOFAST = 438, - ERR_DEAD = 438, - ERR_TARGETTOOFAST = 439, - ERR_SERVICESDOWN = 440, - ERR_USERNOTINCHANNEL = 441, - ERR_NOTONCHANNEL = 442, - ERR_USERONCHANNEL = 443, - ERR_NOLOGIN = 444, - ERR_SUMMONDISABLED = 445, - ERR_USERSDISABLED = 446, - ERR_NONICKCHANGE = 447, - ERR_NOTIMPLEMENTED = 449, - ERR_NOTREGISTERED = 451, - ERR_IDCOLLISION = 452, - ERR_NICKLOST = 453, - ERR_HOSTILENAME = 455, - ERR_ACCEPTFULL = 456, - ERR_ACCEPTEXIST = 457, - ERR_ACCEPTNOT = 458, - ERR_NOHIDING = 459, - ERR_NOTFORHALFOPS = 460, - ERR_NEEDMOREPARAMS = 461, - ERR_ALREADYREGISTERED = 462, - ERR_NOPERMFORHOST = 463, - ERR_PASSWDMISMATCH = 464, - ERR_YOUREBANNEDCREEP = 465, - ERR_YOUWILLBEBANNED = 466, - ERR_KEYSET = 467, - ERR_INVALIDUSERNAME = 468, - ERR_ONLYSERVERSCANCHANGE = 468, - ERR_LINKSET = 469, - ERR_LINKCHANNEL = 470, - ERR_KICKEDFROMCHAN = 470, - ERR_CHANNELISFULL = 471, - ERR_UNKNOWNMODE = 472, - ERR_INVITEONLYCHAN = 473, - ERR_BANNEDFROMCHAN = 474, - ERR_BADCHANNELKEY = 475, - ERR_BADCHANMASK = 476, - ERR_NOCHANMODES = 477, - ERR_NEEDREGGEDNICK = 477, - ERR_BANLISTFULL = 478, - ERR_BADCHANNAME = 479, - ERR_LINKFAIL = 479, - ERR_NOULINE = 480, - ERR_CANNOTKNOCK = 480, - ERR_NOPRIVILEGES = 481, - ERR_CHANOPRIVSNEEDED = 482, - ERR_CANTKILLSERVER = 483, - ERR_RESTRICTED = 484, - ERR_ISCHANSERVICE = 484, - ERR_DESYNC = 484, - ERR_ATTACKDENY = 484, - ERR_UNIQOPRIVSNEEDED = 485, - ERR_KILLDENY = 485, - ERR_CANTKICKADMIN = 485, - ERR_ISREALSERVICE = 485, - ERR_NONONREG = 486, - ERR_HTMDISABLED = 486, - ERR_ACCOUNTONLY = 486, - ERR_CHANTOORECENT = 487, - ERR_MSGSERVICES = 487, - ERR_TSLESSCHAN = 488, - ERR_VOICENEEDED = 489, - ERR_SECUREONLYCHAN = 489, - ERR_NOOPERHOST = 491, - ERR_NOSERVICEHOST = 492, - ERR_NOFEATURE = 493, - ERR_BADFEATURE = 494, - ERR_BADLOGTYPE = 495, - ERR_BADLOGSYS = 496, - ERR_BADLOGVALUE = 497, - ERR_ISOPERLCHAN = 498, - ERR_CHANOWNPRIVNEEDED = 499, - ERR_UMODEUNKNOWNFLAG = 501, - ERR_USERSDONTMATCH = 502, - ERR_GHOSTEDCLIENT = 503, - ERR_VWORLDWARN = 503, - ERR_USERNOTONSERV = 504, - ERR_SILELISTFULL = 511, - ERR_TOOMANYWATCH = 512, - ERR_BADPING = 513, - ERR_INVALID_ERROR = 514, - ERR_TOOMANYDCC = 514, - ERR_BADEXPIRE = 515, - ERR_DONTCHEAT = 516, - ERR_DISABLED = 517, - ERR_NOINVITE = 518, - ERR_LONGMASK = 518, - ERR_ADMONLY = 519, - ERR_TOOMANYUSERS = 519, - ERR_OPERONLY = 520, - ERR_MASKTOOWIDE = 520, - ERR_WHOTRUNC = 520, - ERR_LISTSYNTAX = 521, - ERR_WHOSYNTAX = 522, - ERR_WHOLIMEXCEED = 523, - ERR_QUARANTINED = 524, - ERR_OPERSPVERIFY = 524, - ERR_REMOTEPFX = 525, - ERR_PFXUNROUTABLE = 526, - ERR_BADHOSTMASK = 550, - ERR_HOSTUNAVAIL = 551, - ERR_USINGSLINE = 552, - ERR_STATSSLINE = 553, - RPL_LOGON = 600, - RPL_LOGOFF = 601, - RPL_WATCHOFF = 602, - RPL_WATCHSTAT = 603, - RPL_NOWON = 604, - RPL_NOWOFF = 605, - RPL_WATCHLIST = 606, - RPL_ENDOFWATCHLIST = 607, - RPL_WATCHCLEAR = 608, - RPL_ISOPER = 610, - RPL_ISLOCOP = 611, - RPL_ISNOTOPER = 612, - RPL_ENDOFISOPER = 613, - RPL_DCCSTATUS = 617, - RPL_DCCLIST = 618, - RPL_ENDOFDCCLIST = 619, - RPL_WHOWASHOST = 619, - RPL_DCCINFO = 620, - RPL_ENDOFO = 626, - RPL_SETTINGS = 630, - RPL_ENDOFSETTINGS = 631, - RPL_DUMPING = 640, - RPL_DUMPRPL = 641, - RPL_EODUMP = 642, - RPL_TRACEROUTE_HOP = 660, - RPL_TRACEROUTE_START = 661, - RPL_MODECHANGEWARN = 662, - RPL_CHANREDIR = 663, - RPL_SERVMODEIS = 664, - RPL_OTHERUMODEIS = 665, - RPL_ENDOF_GENERIC = 666, - RPL_WHOWASDETAILS = 670, - RPL_WHOISSECURE = 671, - RPL_UNKNOWNMODES = 672, - RPL_CANNOTSETMODES = 673, - RPL_LUSERSTAFF = 678, - RPL_TIMEONSERVERIS = 679, - RPL_NETWORKS = 682, - RPL_YOURLANGUAGEIS = 687, - RPL_LANGUAGE = 688, - RPL_WHOISSTAFF = 689, - RPL_WHOISLANGUAGE = 690, - RPL_HELPSTART = 704, - RPL_HELPTXT = 705, - RPL_ENDOFHELP = 706, - RPL_ETRACEFULL = 708, - RPL_ETRACE = 709, - RPL_KNOCK = 710, - RPL_KNOCKDLVR = 711, - ERR_TOOMANYKNOCK = 712, - ERR_CHANOPEN = 713, - ERR_KNOCKONCHAN = 714, - ERR_KNOCKDISABLED = 715, - RPL_TARGUMODEG = 716, - RPL_TARGNOTIFY = 717, - RPL_UMODEGMSG = 718, - RPL_ENDOFOMOTD = 722, - ERR_NOPRIVS = 723, - RPL_TESTMARK = 724, - RPL_TESTLINE = 725, - RPL_NOTESTLINE = 726, - RPL_XINFO = 771, - RPL_XINFOSTART = 773, - RPL_XINFOEND = 774, - ERR_CANNOTDOCOMMAND = 972, - ERR_CANNOTCHANGEUMODE = 973, - ERR_CANNOTCHANGECHANMODE = 974, - ERR_CANNOTCHANGESERVERMODE = 975, - ERR_CANNOTSENDTONICK = 976, - ERR_UNKNOWNSERVERMODE = 977, - ERR_SERVERMODELOCK = 979, - ERR_BADCHARENCODING = 980, - ERR_TOOMANYLANGUAGES = 981, - ERR_NOLANGUAGE = 982, - ERR_TEXTTOOSHORT = 983, - ERR_NUMERIC_ERR = 999 - }; -}; - -#ifndef QT_NO_DEBUG_STREAM -IRC_CORE_EXPORT QDebug operator<<(QDebug debug, Irc::Code code); -IRC_CORE_EXPORT QDebug operator<<(QDebug debug, Irc::DataRole role); -IRC_CORE_EXPORT QDebug operator<<(QDebug debug, Irc::Color color); -IRC_CORE_EXPORT QDebug operator<<(QDebug debug, Irc::SortMethod method); -#endif // QT_NO_DEBUG_STREAM - -IRC_END_NAMESPACE - -Q_DECLARE_METATYPE(IRC_PREPEND_NAMESPACE(Irc::Code)) -Q_DECLARE_METATYPE(IRC_PREPEND_NAMESPACE(Irc::DataRole)) -Q_DECLARE_METATYPE(IRC_PREPEND_NAMESPACE(Irc::Color)) -Q_DECLARE_METATYPE(IRC_PREPEND_NAMESPACE(Irc::SortMethod)) - -#endif // IRC_H diff --git a/src/libcommuni/include/IrcCore/irccommand.h b/src/libcommuni/include/IrcCore/irccommand.h deleted file mode 100644 index e532755..0000000 --- a/src/libcommuni/include/IrcCore/irccommand.h +++ /dev/null @@ -1,158 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef IRCCOMMAND_H -#define IRCCOMMAND_H - -#include <IrcGlobal> -#include <QtCore/qobject.h> -#include <QtCore/qmetatype.h> -#include <QtCore/qstringlist.h> - -IRC_BEGIN_NAMESPACE - -class IrcMessage; -class IrcConnection; -class IrcCommandPrivate; - -class IRC_CORE_EXPORT IrcCommand : public QObject -{ - Q_OBJECT - Q_PROPERTY(QStringList parameters READ parameters WRITE setParameters) - Q_PROPERTY(QByteArray encoding READ encoding WRITE setEncoding) - Q_PROPERTY(Type type READ type WRITE setType) - Q_ENUMS(Type) - -public: - enum Type { - Admin, - Away, - Capability, - CtcpAction, - CtcpReply, - CtcpRequest, - Custom, - Info, - Invite, - Join, - Kick, - Knock, - List, - Message, - Mode, - Motd, - Names, - Nick, - Notice, - Part, - Ping, - Pong, - Quit, - Quote, - Stats, - Time, - Topic, - Trace, - Users, - Version, - Who, - Whois, - Whowas - }; - - explicit IrcCommand(QObject* parent = 0); - virtual ~IrcCommand(); - - Type type() const; - void setType(Type type); - - QStringList parameters() const; - void setParameters(const QStringList& parameters); - - QByteArray encoding() const; - void setEncoding(const QByteArray& encoding); - - virtual QString toString() const; - - Q_INVOKABLE IrcMessage* toMessage(const QString& prefix, IrcConnection* connection) const; - - Q_INVOKABLE static IrcCommand* createAdmin(const QString& server = QString()); - Q_INVOKABLE static IrcCommand* createAway(const QString& reason = QString()); - Q_INVOKABLE static IrcCommand* createCapability(const QString& subCommand, const QString& capability); - Q_INVOKABLE static IrcCommand* createCapability(const QString& subCommand, const QStringList& capabilities = QStringList()); - Q_INVOKABLE static IrcCommand* createCtcpAction(const QString& target, const QString& action); - Q_INVOKABLE static IrcCommand* createCtcpReply(const QString& target, const QString& reply); - Q_INVOKABLE static IrcCommand* createCtcpRequest(const QString& target, const QString& request); - Q_INVOKABLE static IrcCommand* createInfo(const QString& server = QString()); - Q_INVOKABLE static IrcCommand* createInvite(const QString& user, const QString& channel); - Q_INVOKABLE static IrcCommand* createJoin(const QString& channel, const QString& key = QString()); - Q_INVOKABLE static IrcCommand* createJoin(const QStringList& channels, const QStringList& keys = QStringList()); - Q_INVOKABLE static IrcCommand* createKick(const QString& channel, const QString& user, const QString& reason = QString()); - Q_INVOKABLE static IrcCommand* createKnock(const QString& channel, const QString& message = QString()); - Q_INVOKABLE static IrcCommand* createList(const QStringList& channels = QStringList(), const QString& server = QString()); - Q_INVOKABLE static IrcCommand* createMessage(const QString& target, const QString& message); - Q_INVOKABLE static IrcCommand* createMode(const QString& target, const QString& mode = QString(), const QString& arg = QString()); - Q_INVOKABLE static IrcCommand* createMotd(const QString& server = QString()); - Q_INVOKABLE static IrcCommand* createNames(const QString& channel = QString(), const QString& server = QString()); - Q_INVOKABLE static IrcCommand* createNames(const QStringList& channels, const QString& server = QString()); - Q_INVOKABLE static IrcCommand* createNick(const QString& nick); - Q_INVOKABLE static IrcCommand* createNotice(const QString& target, const QString& notice); - Q_INVOKABLE static IrcCommand* createPart(const QString& channel, const QString& reason = QString()); - Q_INVOKABLE static IrcCommand* createPart(const QStringList& channels, const QString& reason = QString()); - Q_INVOKABLE static IrcCommand* createPing(const QString& argument); - Q_INVOKABLE static IrcCommand* createPong(const QString& argument); - Q_INVOKABLE static IrcCommand* createQuit(const QString& reason = QString()); - Q_INVOKABLE static IrcCommand* createQuote(const QString& raw); - Q_INVOKABLE static IrcCommand* createQuote(const QStringList& parameters); - Q_INVOKABLE static IrcCommand* createStats(const QString& query, const QString& server = QString()); - Q_INVOKABLE static IrcCommand* createTime(const QString& server = QString()); - Q_INVOKABLE static IrcCommand* createTopic(const QString& channel, const QString& topic = QString()); - Q_INVOKABLE static IrcCommand* createTrace(const QString& target = QString()); - Q_INVOKABLE static IrcCommand* createUsers(const QString& server = QString()); - Q_INVOKABLE static IrcCommand* createVersion(const QString& user = QString()); - Q_INVOKABLE static IrcCommand* createWho(const QString& mask, bool operators = false); - Q_INVOKABLE static IrcCommand* createWhois(const QString& user); - Q_INVOKABLE static IrcCommand* createWhowas(const QString& user, int count = 1); - -private: - QScopedPointer<IrcCommandPrivate> d_ptr; - Q_DECLARE_PRIVATE(IrcCommand) - Q_DISABLE_COPY(IrcCommand) -}; - -#ifndef QT_NO_DEBUG_STREAM -IRC_CORE_EXPORT QDebug operator<<(QDebug debug, IrcCommand::Type type); -IRC_CORE_EXPORT QDebug operator<<(QDebug debug, const IrcCommand* command); -#endif // QT_NO_DEBUG_STREAM - -IRC_END_NAMESPACE - -Q_DECLARE_METATYPE(IRC_PREPEND_NAMESPACE(IrcCommand*)) -Q_DECLARE_METATYPE(IRC_PREPEND_NAMESPACE(IrcCommand::Type)) - -#endif // IRCCOMMAND_H diff --git a/src/libcommuni/include/IrcCore/irccommandfilter.h b/src/libcommuni/include/IrcCore/irccommandfilter.h deleted file mode 100644 index 1edae38..0000000 --- a/src/libcommuni/include/IrcCore/irccommandfilter.h +++ /dev/null @@ -1 +0,0 @@ -#include <ircfilter.h> diff --git a/src/libcommuni/include/IrcCore/ircconnection.h b/src/libcommuni/include/IrcCore/ircconnection.h deleted file mode 100644 index 5ce26a5..0000000 --- a/src/libcommuni/include/IrcCore/ircconnection.h +++ /dev/null @@ -1,240 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef IRCCONNECTION_H -#define IRCCONNECTION_H - -#include <IrcGlobal> -#include <IrcMessage> -#include <IrcNetwork> -#include <QtCore/qobject.h> -#include <QtCore/qvariant.h> -#include <QtCore/qmetatype.h> -#include <QtCore/qscopedpointer.h> -#include <QtNetwork/qabstractsocket.h> - -IRC_BEGIN_NAMESPACE - -class IrcCommand; -class IrcProtocol; -class IrcConnectionPrivate; - -class IRC_CORE_EXPORT IrcConnection : public QObject -{ - Q_OBJECT - - Q_PROPERTY(QString host READ host WRITE setHost NOTIFY hostChanged) - Q_PROPERTY(int port READ port WRITE setPort NOTIFY portChanged) - Q_PROPERTY(QString userName READ userName WRITE setUserName NOTIFY userNameChanged) - Q_PROPERTY(QString nickName READ nickName WRITE setNickName NOTIFY nickNameChanged) - Q_PROPERTY(QString realName READ realName WRITE setRealName NOTIFY realNameChanged) - Q_PROPERTY(QString password READ password WRITE setPassword NOTIFY passwordChanged) - Q_PROPERTY(QString displayName READ displayName WRITE setDisplayName NOTIFY displayNameChanged) - Q_PROPERTY(QVariantMap userData READ userData WRITE setUserData NOTIFY userDataChanged) - Q_PROPERTY(QByteArray encoding READ encoding WRITE setEncoding) - Q_PROPERTY(Status status READ status NOTIFY statusChanged) - Q_PROPERTY(bool active READ isActive NOTIFY statusChanged) - Q_PROPERTY(bool connected READ isConnected NOTIFY statusChanged) - Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged) - Q_PROPERTY(int reconnectDelay READ reconnectDelay WRITE setReconnectDelay NOTIFY reconnectDelayChanged) - Q_PROPERTY(QAbstractSocket* socket READ socket WRITE setSocket) - Q_PROPERTY(bool secure READ isSecure WRITE setSecure NOTIFY secureChanged) - Q_PROPERTY(bool secureSupported READ isSecureSupported) - Q_PROPERTY(QString saslMechanism READ saslMechanism WRITE setSaslMechanism NOTIFY saslMechanismChanged) - Q_PROPERTY(QStringList supportedSaslMechanisms READ supportedSaslMechanisms CONSTANT) - Q_PROPERTY(IrcNetwork* network READ network CONSTANT) - Q_PROPERTY(IrcProtocol* protocol READ protocol WRITE setProtocol) - Q_ENUMS(Status) - -public: - explicit IrcConnection(QObject* parent = 0); - explicit IrcConnection(const QString& host, QObject* parent = 0); - virtual ~IrcConnection(); - - QString host() const; - void setHost(const QString& host); - - int port() const; - void setPort(int port); - - QString userName() const; - void setUserName(const QString& name); - - QString nickName() const; - void setNickName(const QString& name); - - QString realName() const; - void setRealName(const QString& name); - - QString password() const; - void setPassword(const QString& password); - - QString displayName() const; - void setDisplayName(const QString& name); - - QVariantMap userData() const; - void setUserData(const QVariantMap& data); - - QByteArray encoding() const; - void setEncoding(const QByteArray& encoding); - - enum Status { - Inactive, - Waiting, - Connecting, - Connected, - Closing, - Closed, - Error - }; - Status status() const; - bool isActive() const; - bool isConnected() const; - bool isEnabled() const; - - int reconnectDelay() const; - void setReconnectDelay(int seconds); - - QAbstractSocket* socket() const; - void setSocket(QAbstractSocket* socket); - - bool isSecure() const; - void setSecure(bool secure); - static bool isSecureSupported(); - - QString saslMechanism() const; - void setSaslMechanism(const QString& mechanism); - - static QStringList supportedSaslMechanisms(); - - IrcNetwork* network() const; - - IrcProtocol* protocol() const; - void setProtocol(IrcProtocol* protocol); - - void installMessageFilter(QObject* filter); - void removeMessageFilter(QObject* filter); - - void installCommandFilter(QObject* filter); - void removeCommandFilter(QObject* filter); - - Q_INVOKABLE QByteArray saveState(int version = 0) const; - Q_INVOKABLE bool restoreState(const QByteArray& state, int version = 0); - -public Q_SLOTS: - void open(); - void close(); - void quit(const QString& reason = QString()); - void setEnabled(bool enabled = true); - void setDisabled(bool disabled = true); - - bool sendCommand(IrcCommand* command); - bool sendData(const QByteArray& data); - bool sendRaw(const QString& message); - -Q_SIGNALS: - void connecting(); - void connected(); - void disconnected(); - void statusChanged(IrcConnection::Status status); - void socketError(QAbstractSocket::SocketError error); - void socketStateChanged(QAbstractSocket::SocketState state); - void secureError(); - - void nickNameReserved(QString* alternate); // deprecated - void nickNameRequired(const QString& reserved, QString* alternate); - void channelKeyRequired(const QString& channel, QString* key); - - void messageReceived(IrcMessage* message); - - void capabilityMessageReceived(IrcCapabilityMessage* message); - void errorMessageReceived(IrcErrorMessage* message); - void inviteMessageReceived(IrcInviteMessage* message); - void joinMessageReceived(IrcJoinMessage* message); - void kickMessageReceived(IrcKickMessage* message); - void modeMessageReceived(IrcModeMessage* message); - void namesMessageReceived(IrcNamesMessage* message); - void nickMessageReceived(IrcNickMessage* message); - void noticeMessageReceived(IrcNoticeMessage* message); - void numericMessageReceived(IrcNumericMessage* message); - void motdMessageReceived(IrcMotdMessage* message); - void partMessageReceived(IrcPartMessage* message); - void pingMessageReceived(IrcPingMessage* message); - void pongMessageReceived(IrcPongMessage* message); - void privateMessageReceived(IrcPrivateMessage* message); - void quitMessageReceived(IrcQuitMessage* message); - void topicMessageReceived(IrcTopicMessage* message); - void whoReplyMessageReceived(IrcWhoReplyMessage* message); - - void hostChanged(const QString& host); - void portChanged(int port); - void userNameChanged(const QString& name); - void nickNameChanged(const QString& name); - void realNameChanged(const QString& name); - void passwordChanged(const QString& password); - void displayNameChanged(const QString& name); - void userDataChanged(const QVariantMap& data); - - void reconnectDelayChanged(int seconds); - void enabledChanged(bool enabled); - void secureChanged(bool secure); - void saslMechanismChanged(const QString& mechanism); - - void destroyed(IrcConnection* connection); - -protected Q_SLOTS: - virtual IrcCommand* createCtcpReply(IrcPrivateMessage* request) const; - -private: - friend class IrcProtocol; - friend class IrcProtocolPrivate; - QScopedPointer<IrcConnectionPrivate> d_ptr; - Q_DECLARE_PRIVATE(IrcConnection) - Q_DISABLE_COPY(IrcConnection) - - Q_PRIVATE_SLOT(d_func(), void _irc_connected()) - Q_PRIVATE_SLOT(d_func(), void _irc_disconnected()) - Q_PRIVATE_SLOT(d_func(), void _irc_error(QAbstractSocket::SocketError)) - Q_PRIVATE_SLOT(d_func(), void _irc_state(QAbstractSocket::SocketState)) - Q_PRIVATE_SLOT(d_func(), void _irc_sslErrors()) - Q_PRIVATE_SLOT(d_func(), void _irc_reconnect()) - Q_PRIVATE_SLOT(d_func(), void _irc_readData()) - Q_PRIVATE_SLOT(d_func(), void _irc_filterDestroyed(QObject*)) -}; - -#ifndef QT_NO_DEBUG_STREAM -IRC_CORE_EXPORT QDebug operator<<(QDebug debug, IrcConnection::Status status); -IRC_CORE_EXPORT QDebug operator<<(QDebug debug, const IrcConnection* connection); -#endif // QT_NO_DEBUG_STREAM - -IRC_END_NAMESPACE - -Q_DECLARE_METATYPE(IRC_PREPEND_NAMESPACE(IrcConnection*)) -Q_DECLARE_METATYPE(IRC_PREPEND_NAMESPACE(IrcConnection::Status)) - -#endif // IRCCONNECTION_H diff --git a/src/libcommuni/include/IrcCore/ircconnection_p.h b/src/libcommuni/include/IrcCore/ircconnection_p.h deleted file mode 100644 index f9e91ab..0000000 --- a/src/libcommuni/include/IrcCore/ircconnection_p.h +++ /dev/null @@ -1,105 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef IRCCONNECTION_P_H -#define IRCCONNECTION_P_H - -#include "ircconnection.h" - -#include <QList> -#include <QHash> -#include <QStack> -#include <QTimer> -#include <QString> -#include <QByteArray> -#include <QAbstractSocket> - -IRC_BEGIN_NAMESPACE - -class IrcMessageFilter; -class IrcCommandFilter; - -class IrcConnectionPrivate -{ - Q_DECLARE_PUBLIC(IrcConnection) - -public: - IrcConnectionPrivate(); - - void init(IrcConnection* connection); - - void _irc_connected(); - void _irc_disconnected(); - void _irc_error(QAbstractSocket::SocketError error); - void _irc_state(QAbstractSocket::SocketState state); - void _irc_sslErrors(); - void _irc_reconnect(); - void _irc_readData(); - - void _irc_filterDestroyed(QObject* filter); - - void setNick(const QString& nick); - void setStatus(IrcConnection::Status status); - void setInfo(const QHash<QString, QString>& info); - - void receiveMessage(IrcMessage* msg); - IrcCommand* createCtcpReply(IrcPrivateMessage* request); - - static IrcConnectionPrivate* get(const IrcConnection* connection) - { - return connection->d_ptr.data(); - } - - IrcConnection* q_ptr; - QByteArray encoding; - IrcNetwork* network; - IrcProtocol* protocol; - QAbstractSocket* socket; - QString host; - int port; - QString userName; - QString nickName; - QString realName; - QString password; - QString displayName; - QVariantMap userData; - QTimer reconnecter; - QString saslMechanism; - bool enabled; - IrcConnection::Status status; - QList<IrcCommand*> pendingCommands; - QList<QObject*> commandFilters; - QList<QObject*> messageFilters; - QStack<QObject*> activeCommandFilters; - bool sslErrors; - bool closed; -}; - -IRC_END_NAMESPACE - -#endif // IRCCONNECTION_P_H diff --git a/src/libcommuni/include/IrcCore/irccore.h b/src/libcommuni/include/IrcCore/irccore.h deleted file mode 100644 index b5ca266..0000000 --- a/src/libcommuni/include/IrcCore/irccore.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef IRCCORE_H -#define IRCCORE_H - -#include "irc.h" -#include "irccommand.h" -#include "ircconnection.h" -#include "ircglobal.h" -#include "ircmessage.h" -#include "ircfilter.h" -#include "ircnetwork.h" -#include "ircprotocol.h" - -IRC_BEGIN_NAMESPACE - -namespace IrcCore { - void registerMetaTypes(); -} - -IRC_END_NAMESPACE - -#endif // IRCCORE_H diff --git a/src/libcommuni/include/IrcCore/ircfilter.h b/src/libcommuni/include/IrcCore/ircfilter.h deleted file mode 100644 index a2536fc..0000000 --- a/src/libcommuni/include/IrcCore/ircfilter.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef IRCFILTER_H -#define IRCFILTER_H - -#include <IrcGlobal> -#include <QtCore/qobject.h> - -IRC_BEGIN_NAMESPACE - -class IrcMessage; -class IrcCommand; - -class IRC_CORE_EXPORT IrcMessageFilter -{ -public: - virtual ~IrcMessageFilter() { } - virtual bool messageFilter(IrcMessage* message) = 0; -}; - -class IRC_CORE_EXPORT IrcCommandFilter -{ -public: - virtual ~IrcCommandFilter() { } - virtual bool commandFilter(IrcCommand* command) = 0; -}; - -IRC_END_NAMESPACE - -// TODO: fixme -#ifdef IRC_NAMESPACE -using IRC_NAMESPACE::IrcMessageFilter; -using IRC_NAMESPACE::IrcCommandFilter; -#endif - -Q_DECLARE_INTERFACE(IrcMessageFilter, "Communi.IrcMessageFilter") -Q_DECLARE_INTERFACE(IrcCommandFilter, "Communi.IrcCommandFilter") - -#endif // IRCFILTER_H diff --git a/src/libcommuni/include/IrcCore/ircglobal.h b/src/libcommuni/include/IrcCore/ircglobal.h deleted file mode 100644 index d088dba..0000000 --- a/src/libcommuni/include/IrcCore/ircglobal.h +++ /dev/null @@ -1,117 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef IRCGLOBAL_H -#define IRCGLOBAL_H - -#include <QtCore/qglobal.h> - -/*! - \file ircglobal.h - \brief \#include <\ref ircglobal.h "IrcGlobal"> - */ - -#if defined(IRC_SHARED) -# -# if defined(BUILD_IRC_CORE) -# define IRC_CORE_EXPORT Q_DECL_EXPORT -# else -# define IRC_CORE_EXPORT Q_DECL_IMPORT -# endif -# -# if defined(BUILD_IRC_MODEL) -# define IRC_MODEL_EXPORT Q_DECL_EXPORT -# else -# define IRC_MODEL_EXPORT Q_DECL_IMPORT -# endif -# -# if defined(BUILD_IRC_UTIL) -# define IRC_UTIL_EXPORT Q_DECL_EXPORT -# else -# define IRC_UTIL_EXPORT Q_DECL_IMPORT -# endif -# -#elif defined(IRC_STATIC) || defined(BUILD_IRC_CORE) || defined(BUILD_IRC_MODEL) || defined(BUILD_IRC_UTIL) -# -# define IRC_CORE_EXPORT -# define IRC_MODEL_EXPORT -# define IRC_UTIL_EXPORT -# -#else -# error Installation problem: either IRC_SHARED or IRC_STATIC must be defined! -#endif - -/*! - \def IRC_VERSION - - This macro expands a numeric value of the form 0xMMNNPP (MM = major, NN = minor, PP = patch) that specifies Communi's version number. - For example, if you compile your application against Communi 1.2.3, the IRC_VERSION macro will expand to 0x010203. - - You can use IRC_VERSION to use the latest Communi features where available. For example: - \code - #if IRC_VERSION >= 0x000300 - // SSL support since version 0.3.0 - connection->setSocket(new QSslSocket(connection)); - #endif - \endcode - - \sa Irc::version() - */ -#define IRC_VERSION 0x030200 - -/*! - \def IRC_VERSION_STR - - This macro expands to a string that specifies Communi's version number (for example, "1.2.3"). - This is the version against which the application is compiled. - - \sa Irc::version() - */ -#define IRC_VERSION_STR "3.2.0" - -#ifdef IRC_NAMESPACE - -# define IRC_PREPEND_NAMESPACE(name) ::IRC_NAMESPACE::name -# define IRC_USE_NAMESPACE using namespace ::IRC_NAMESPACE; -# define IRC_BEGIN_NAMESPACE namespace IRC_NAMESPACE { -# define IRC_END_NAMESPACE } -# define IRC_FORWARD_DECLARE_CLASS(name) \ - IRC_BEGIN_NAMESPACE class name; IRC_END_NAMESPACE \ - using IRC_PREPEND_NAMESPACE(name); - -#else - -# define IRC_PREPEND_NAMESPACE(name) ::name -# define IRC_USE_NAMESPACE -# define IRC_BEGIN_NAMESPACE -# define IRC_END_NAMESPACE -# define IRC_FORWARD_DECLARE_CLASS(name) class name; - -#endif // IRC_NAMESPACE - -#endif // IRCGLOBAL_H diff --git a/src/libcommuni/include/IrcCore/ircmessage.h b/src/libcommuni/include/IrcCore/ircmessage.h deleted file mode 100644 index 02b8c86..0000000 --- a/src/libcommuni/include/IrcCore/ircmessage.h +++ /dev/null @@ -1,519 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef IRCMESSAGE_H -#define IRCMESSAGE_H - -#include <Irc> -#include <IrcGlobal> -#include <QtCore/qobject.h> -#include <QtCore/qvariant.h> -#include <QtCore/qmetatype.h> -#include <QtCore/qdatetime.h> -#include <QtCore/qstringlist.h> - -IRC_BEGIN_NAMESPACE - -class IrcCommand; -class IrcNetwork; -class IrcConnection; -class IrcMessagePrivate; - -class IRC_CORE_EXPORT IrcMessage : public QObject -{ - Q_OBJECT - Q_PROPERTY(IrcConnection* connection READ connection) - Q_PROPERTY(IrcNetwork* network READ network) - Q_PROPERTY(Type type READ type) - Q_PROPERTY(bool own READ isOwn) - Q_PROPERTY(Flags flags READ flags) - Q_PROPERTY(bool valid READ isValid) - Q_PROPERTY(QString command READ command) - Q_PROPERTY(QString prefix READ prefix WRITE setPrefix) - Q_PROPERTY(QString nick READ nick) - Q_PROPERTY(QString ident READ ident) - Q_PROPERTY(QString host READ host) - Q_PROPERTY(QStringList parameters READ parameters WRITE setParameters) - Q_PROPERTY(QDateTime timeStamp READ timeStamp WRITE setTimeStamp) - Q_PROPERTY(QVariantMap tags READ tags WRITE setTags) - Q_ENUMS(Type Flag) - Q_FLAGS(Flags) - -public: - enum Type { - Unknown, - Capability, - Error, - Invite, - Join, - Kick, - Mode, - Motd, - Names, - Nick, - Notice, - Numeric, - Part, - Ping, - Pong, - Private, - Quit, - Topic, - WhoReply - }; - - enum Flag { - None = 0x0, - Own = 0x1, - Identified = 0x2, - Unidentified = 0x4, - Playback = 0x8 - }; - Q_DECLARE_FLAGS(Flags, Flag) - - Q_INVOKABLE explicit IrcMessage(IrcConnection* connection); - virtual ~IrcMessage(); - - IrcConnection* connection() const; - IrcNetwork* network() const; - - Type type() const; - bool isOwn() const; - - Flags flags() const; - void setFlags(Flags flags); - - QString command() const; - void setCommand(const QString& command); - - QString prefix() const; - void setPrefix(const QString& prefix); - - QString nick() const; - QString ident() const; - QString host() const; - - QStringList parameters() const; - void setParameters(const QStringList& parameters); - - virtual bool isValid() const; - - QDateTime timeStamp() const; - void setTimeStamp(const QDateTime& timeStamp); - - QByteArray encoding() const; - void setEncoding(const QByteArray& encoding); - - QVariantMap tags() const; - void setTags(const QVariantMap& tags); - - Q_INVOKABLE QByteArray toData() const; - Q_INVOKABLE static IrcMessage* fromData(const QByteArray& data, IrcConnection* connection); - Q_INVOKABLE static IrcMessage* fromParameters(const QString& prefix, const QString& command, const QStringList& parameters, IrcConnection* connection); - -protected: - QScopedPointer<IrcMessagePrivate> d_ptr; - Q_DECLARE_PRIVATE(IrcMessage) - Q_DISABLE_COPY(IrcMessage) -}; - -Q_DECLARE_OPERATORS_FOR_FLAGS(IrcMessage::Flags) - -class IRC_CORE_EXPORT IrcCapabilityMessage : public IrcMessage -{ - Q_OBJECT - Q_PROPERTY(QString subCommand READ subCommand) - Q_PROPERTY(QStringList capabilities READ capabilities) - -public: - Q_INVOKABLE explicit IrcCapabilityMessage(IrcConnection* connection); - - QString subCommand() const; - QStringList capabilities() const; - - bool isValid() const; - -private: - Q_DISABLE_COPY(IrcCapabilityMessage) -}; - -class IRC_CORE_EXPORT IrcErrorMessage : public IrcMessage -{ - Q_OBJECT - Q_PROPERTY(QString error READ error) - -public: - Q_INVOKABLE explicit IrcErrorMessage(IrcConnection* connection); - - QString error() const; - - bool isValid() const; - -private: - Q_DISABLE_COPY(IrcErrorMessage) -}; - -class IRC_CORE_EXPORT IrcInviteMessage : public IrcMessage -{ - Q_OBJECT - Q_PROPERTY(QString user READ user) - Q_PROPERTY(QString channel READ channel) - -public: - Q_INVOKABLE explicit IrcInviteMessage(IrcConnection* connection); - - QString user() const; - QString channel() const; - - bool isValid() const; - -private: - Q_DISABLE_COPY(IrcInviteMessage) -}; - -class IRC_CORE_EXPORT IrcJoinMessage : public IrcMessage -{ - Q_OBJECT - Q_PROPERTY(QString channel READ channel) - -public: - Q_INVOKABLE explicit IrcJoinMessage(IrcConnection* connection); - - QString channel() const; - - bool isValid() const; - -private: - Q_DISABLE_COPY(IrcJoinMessage) -}; - -class IRC_CORE_EXPORT IrcKickMessage : public IrcMessage -{ - Q_OBJECT - Q_PROPERTY(QString channel READ channel) - Q_PROPERTY(QString user READ user) - Q_PROPERTY(QString reason READ reason) - -public: - Q_INVOKABLE explicit IrcKickMessage(IrcConnection* connection); - - QString channel() const; - QString user() const; - QString reason() const; - - bool isValid() const; - -private: - Q_DISABLE_COPY(IrcKickMessage) -}; - -class IRC_CORE_EXPORT IrcModeMessage : public IrcMessage -{ - Q_OBJECT - Q_PROPERTY(QString target READ target) - Q_PROPERTY(QString mode READ mode) - Q_PROPERTY(QString argument READ argument) - Q_PROPERTY(QStringList arguments READ arguments) - Q_PROPERTY(bool reply READ isReply) - Q_PROPERTY(Kind kind READ kind) - Q_ENUMS(Kind) - -public: - Q_INVOKABLE explicit IrcModeMessage(IrcConnection* connection); - - QString target() const; - QString mode() const; - QString argument() const; - QStringList arguments() const; - bool isReply() const; - - enum Kind { Channel, User }; - Kind kind() const; - - bool isValid() const; - -private: - Q_DISABLE_COPY(IrcModeMessage) -}; - -class IRC_CORE_EXPORT IrcMotdMessage : public IrcMessage -{ - Q_OBJECT - Q_PROPERTY(QStringList lines READ lines) - -public: - Q_INVOKABLE explicit IrcMotdMessage(IrcConnection* connection); - - QStringList lines() const; - - bool isValid() const; - -private: - Q_DISABLE_COPY(IrcMotdMessage) -}; - -class IRC_CORE_EXPORT IrcNamesMessage : public IrcMessage -{ - Q_OBJECT - Q_PROPERTY(QString channel READ channel) - Q_PROPERTY(QStringList names READ names) - -public: - Q_INVOKABLE explicit IrcNamesMessage(IrcConnection* connection); - - QString channel() const; - QStringList names() const; - - bool isValid() const; - -private: - Q_DISABLE_COPY(IrcNamesMessage) -}; - -class IRC_CORE_EXPORT IrcNickMessage : public IrcMessage -{ - Q_OBJECT - Q_PROPERTY(QString oldNick READ oldNick) - Q_PROPERTY(QString newNick READ newNick) - -public: - Q_INVOKABLE explicit IrcNickMessage(IrcConnection* connection); - - QString oldNick() const; - QString newNick() const; - - bool isValid() const; - -private: - Q_DISABLE_COPY(IrcNickMessage) -}; - -class IRC_CORE_EXPORT IrcNoticeMessage : public IrcMessage -{ - Q_OBJECT - Q_PROPERTY(QString target READ target) - Q_PROPERTY(QString content READ content) - Q_PROPERTY(bool private READ isPrivate) - Q_PROPERTY(bool reply READ isReply) - -public: - Q_INVOKABLE explicit IrcNoticeMessage(IrcConnection* connection); - - QString target() const; - QString content() const; - bool isPrivate() const; - bool isReply() const; - - bool isValid() const; - -private: - Q_DISABLE_COPY(IrcNoticeMessage) -}; - -class IRC_CORE_EXPORT IrcNumericMessage : public IrcMessage -{ - Q_OBJECT - Q_PROPERTY(int code READ code) - -public: - Q_INVOKABLE explicit IrcNumericMessage(IrcConnection* connection); - - int code() const; - - bool isValid() const; - -private: - Q_DISABLE_COPY(IrcNumericMessage) -}; - -class IRC_CORE_EXPORT IrcPartMessage : public IrcMessage -{ - Q_OBJECT - Q_PROPERTY(QString channel READ channel) - Q_PROPERTY(QString reason READ reason) - -public: - Q_INVOKABLE explicit IrcPartMessage(IrcConnection* connection); - - QString channel() const; - QString reason() const; - - bool isValid() const; - -private: - Q_DISABLE_COPY(IrcPartMessage) -}; - -class IRC_CORE_EXPORT IrcPingMessage : public IrcMessage -{ - Q_OBJECT - Q_PROPERTY(QString argument READ argument) - -public: - Q_INVOKABLE explicit IrcPingMessage(IrcConnection* connection); - - QString argument() const; - - bool isValid() const; - -private: - Q_DISABLE_COPY(IrcPingMessage) -}; - -class IRC_CORE_EXPORT IrcPongMessage : public IrcMessage -{ - Q_OBJECT - Q_PROPERTY(QString argument READ argument) - -public: - Q_INVOKABLE explicit IrcPongMessage(IrcConnection* connection); - - QString argument() const; - - bool isValid() const; - -private: - Q_DISABLE_COPY(IrcPongMessage) -}; - -class IRC_CORE_EXPORT IrcPrivateMessage : public IrcMessage -{ - Q_OBJECT - Q_PROPERTY(QString target READ target) - Q_PROPERTY(QString content READ content) - Q_PROPERTY(bool private READ isPrivate) - Q_PROPERTY(bool action READ isAction) - Q_PROPERTY(bool request READ isRequest) - -public: - Q_INVOKABLE explicit IrcPrivateMessage(IrcConnection* connection); - - QString target() const; - QString content() const; - bool isPrivate() const; - bool isAction() const; - bool isRequest() const; - - bool isValid() const; - -private: - Q_DISABLE_COPY(IrcPrivateMessage) -}; - -class IRC_CORE_EXPORT IrcQuitMessage : public IrcMessage -{ - Q_OBJECT - Q_PROPERTY(QString reason READ reason) - -public: - Q_INVOKABLE explicit IrcQuitMessage(IrcConnection* connection); - - QString reason() const; - - bool isValid() const; - -private: - Q_DISABLE_COPY(IrcQuitMessage) -}; - -class IRC_CORE_EXPORT IrcTopicMessage : public IrcMessage -{ - Q_OBJECT - Q_PROPERTY(QString channel READ channel) - Q_PROPERTY(QString topic READ topic) - Q_PROPERTY(bool reply READ isReply) - -public: - Q_INVOKABLE explicit IrcTopicMessage(IrcConnection* connection); - - QString channel() const; - QString topic() const; - bool isReply() const; - - bool isValid() const; - -private: - Q_DISABLE_COPY(IrcTopicMessage) -}; - -class IRC_CORE_EXPORT IrcWhoReplyMessage : public IrcMessage -{ - Q_OBJECT - Q_PROPERTY(QString mask READ mask) - Q_PROPERTY(QString server READ server) - Q_PROPERTY(bool away READ isAway) - Q_PROPERTY(bool servOp READ isServOp) - Q_PROPERTY(QString realName READ realName) - -public: - Q_INVOKABLE explicit IrcWhoReplyMessage(IrcConnection* connection); - - QString mask() const; - QString server() const; - bool isAway() const; - bool isServOp() const; - QString realName() const; - - bool isValid() const; - -private: - Q_DISABLE_COPY(IrcWhoReplyMessage) -}; - -#ifndef QT_NO_DEBUG_STREAM -IRC_CORE_EXPORT QDebug operator<<(QDebug debug, IrcMessage::Type type); -IRC_CORE_EXPORT QDebug operator<<(QDebug debug, IrcMessage::Flag flag); -IRC_CORE_EXPORT QDebug operator<<(QDebug debug, IrcMessage::Flags flags); -IRC_CORE_EXPORT QDebug operator<<(QDebug debug, IrcModeMessage::Kind kind); -IRC_CORE_EXPORT QDebug operator<<(QDebug debug, const IrcMessage* message); -#endif // QT_NO_DEBUG_STREAM - -IRC_END_NAMESPACE - -Q_DECLARE_METATYPE(IRC_PREPEND_NAMESPACE(IrcMessage::Type)) -Q_DECLARE_METATYPE(IRC_PREPEND_NAMESPACE(IrcMessage*)) -Q_DECLARE_METATYPE(IRC_PREPEND_NAMESPACE(IrcCapabilityMessage*)) -Q_DECLARE_METATYPE(IRC_PREPEND_NAMESPACE(IrcErrorMessage*)) -Q_DECLARE_METATYPE(IRC_PREPEND_NAMESPACE(IrcInviteMessage*)) -Q_DECLARE_METATYPE(IRC_PREPEND_NAMESPACE(IrcJoinMessage*)) -Q_DECLARE_METATYPE(IRC_PREPEND_NAMESPACE(IrcKickMessage*)) -Q_DECLARE_METATYPE(IRC_PREPEND_NAMESPACE(IrcModeMessage*)) -Q_DECLARE_METATYPE(IRC_PREPEND_NAMESPACE(IrcMotdMessage*)) -Q_DECLARE_METATYPE(IRC_PREPEND_NAMESPACE(IrcNamesMessage*)) -Q_DECLARE_METATYPE(IRC_PREPEND_NAMESPACE(IrcNickMessage*)) -Q_DECLARE_METATYPE(IRC_PREPEND_NAMESPACE(IrcNoticeMessage*)) -Q_DECLARE_METATYPE(IRC_PREPEND_NAMESPACE(IrcNumericMessage*)) -Q_DECLARE_METATYPE(IRC_PREPEND_NAMESPACE(IrcPartMessage*)) -Q_DECLARE_METATYPE(IRC_PREPEND_NAMESPACE(IrcPingMessage*)) -Q_DECLARE_METATYPE(IRC_PREPEND_NAMESPACE(IrcPongMessage*)) -Q_DECLARE_METATYPE(IRC_PREPEND_NAMESPACE(IrcPrivateMessage*)) -Q_DECLARE_METATYPE(IRC_PREPEND_NAMESPACE(IrcQuitMessage*)) -Q_DECLARE_METATYPE(IRC_PREPEND_NAMESPACE(IrcTopicMessage*)) -Q_DECLARE_METATYPE(IRC_PREPEND_NAMESPACE(IrcWhoReplyMessage*)) - -#endif // IRCMESSAGE_H diff --git a/src/libcommuni/include/IrcCore/ircmessage_p.h b/src/libcommuni/include/IrcCore/ircmessage_p.h deleted file mode 100644 index b2b50e1..0000000 --- a/src/libcommuni/include/IrcCore/ircmessage_p.h +++ /dev/null @@ -1,124 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef IRCMESSAGE_P_H -#define IRCMESSAGE_P_H - -#include <QtCore/qmap.h> -#include <QtCore/qlist.h> -#include <QtCore/qstring.h> -#include <QtCore/qvariant.h> -#include <QtCore/qbytearray.h> -#include <QtCore/qstringlist.h> - -#include "ircmessage.h" - -IRC_BEGIN_NAMESPACE - -class IrcConnection; - -template <class T> -class IrcExplicitValue -{ -public: - IrcExplicitValue() : exp(false), null(true) { } - IrcExplicitValue(const T& value) : v(value), exp(false), null(false) { } - - bool isNull() const { return null; } - bool isExplicit() const { return exp; } - - const T& value() const { return v; } - void setValue(const T& value) { v = value; exp = true; null = false; } - - void clear() { v = T(); exp = false; null = true; } - -private: - T v; - bool exp; - bool null; -}; - -class IrcMessageData -{ -public: - static IrcMessageData fromData(const QByteArray& data); - - QByteArray content; - QByteArray prefix; - QByteArray command; - QList<QByteArray> params; - QMap<QByteArray, QByteArray> tags; -}; - -class IrcMessagePrivate -{ -public: - IrcMessagePrivate(); - - QString prefix() const; - void setPrefix(const QString& prefix); - - QString nick() const; - QString ident() const; - QString host() const; - - QString command() const; - void setCommand(const QString& command); - - QStringList params() const; - QString param(int index) const; - void setParams(const QStringList& params); - - QVariantMap tags() const; - void setTags(const QVariantMap& tags); - - QByteArray content() const; - - void invalidate(); - - static QString decode(const QByteArray& data, const QByteArray& encoding); - static bool parsePrefix(const QString& prefix, QString* nick, QString* ident, QString* host); - - IrcConnection* connection; - IrcMessage::Type type; - QDateTime timeStamp; - QByteArray encoding; - mutable int flags; - IrcMessageData data; - -private: - mutable QString m_nick, m_ident, m_host; - mutable IrcExplicitValue<QString> m_prefix; - mutable IrcExplicitValue<QString> m_command; - mutable IrcExplicitValue<QStringList> m_params; - mutable IrcExplicitValue<QVariantMap> m_tags; -}; - -IRC_END_NAMESPACE - -#endif // IRCMESSAGE_P_H diff --git a/src/libcommuni/include/IrcCore/ircmessagebuilder_p.h b/src/libcommuni/include/IrcCore/ircmessagebuilder_p.h deleted file mode 100644 index 3047eda..0000000 --- a/src/libcommuni/include/IrcCore/ircmessagebuilder_p.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef IRCMESSAGEBUILDER_P_H -#define IRCMESSAGEBUILDER_P_H - -#include <IrcGlobal> -#include <QtCore/qobject.h> -#include <QtCore/qstringlist.h> - -IRC_BEGIN_NAMESPACE - -class IrcConnection; -class IrcMessage; -class IrcNumericMessage; - -class IrcMessageBuilder : public QObject -{ - Q_OBJECT - -public: - IrcMessageBuilder(IrcConnection* connection); - - void processMessage(IrcNumericMessage* message); - -Q_SIGNALS: - void messageReceived(IrcMessage* message); - -private: - struct Data { - IrcConnection* connection; - IrcMessage* message; - } d; -}; - -IRC_END_NAMESPACE - -#endif // IRCMESSAGEBUILDER_P_H diff --git a/src/libcommuni/include/IrcCore/ircmessagedecoder_p.h b/src/libcommuni/include/IrcCore/ircmessagedecoder_p.h deleted file mode 100644 index 005053e..0000000 --- a/src/libcommuni/include/IrcCore/ircmessagedecoder_p.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef IRCMESSAGEDECODER_P_H -#define IRCMESSAGEDECODER_P_H - -#include <IrcGlobal> -#include <QtCore/qbytearray.h> -#include <QtCore/qtextcodec.h> - -IRC_BEGIN_NAMESPACE - -class IrcMessageDecoder -{ -public: - IrcMessageDecoder(); - ~IrcMessageDecoder(); - - QString decode(const QByteArray& data, const QByteArray& encoding) const; - -private: - void initialize(); - void uninitialize(); - QByteArray codecForData(const QByteArray& data) const; - - struct Data { - void* detector; - } d; -}; - -IRC_END_NAMESPACE - -#endif // IRCMESSAGEDECODER_P_H diff --git a/src/libcommuni/include/IrcCore/ircmessagefilter.h b/src/libcommuni/include/IrcCore/ircmessagefilter.h deleted file mode 100644 index 1edae38..0000000 --- a/src/libcommuni/include/IrcCore/ircmessagefilter.h +++ /dev/null @@ -1 +0,0 @@ -#include <ircfilter.h> diff --git a/src/libcommuni/include/IrcCore/ircnetwork.h b/src/libcommuni/include/IrcCore/ircnetwork.h deleted file mode 100644 index 6b2a5d2..0000000 --- a/src/libcommuni/include/IrcCore/ircnetwork.h +++ /dev/null @@ -1,147 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef IRCNETWORK_H -#define IRCNETWORK_H - -#include <IrcGlobal> -#include <QtCore/qobject.h> -#include <QtCore/qmetatype.h> -#include <QtCore/qstringlist.h> -#include <QtCore/qscopedpointer.h> - -IRC_BEGIN_NAMESPACE - -class IrcConnection; -class IrcNetworkPrivate; - -class IRC_CORE_EXPORT IrcNetwork : public QObject -{ - Q_OBJECT - Q_PROPERTY(bool initialized READ isInitialized NOTIFY initialized) - Q_PROPERTY(QString name READ name NOTIFY nameChanged) - Q_PROPERTY(QStringList modes READ modes NOTIFY modesChanged) - Q_PROPERTY(QStringList prefixes READ prefixes NOTIFY prefixesChanged) - Q_PROPERTY(QStringList channelTypes READ channelTypes NOTIFY channelTypesChanged) - Q_PROPERTY(QStringList availableCapabilities READ availableCapabilities NOTIFY availableCapabilitiesChanged) - Q_PROPERTY(QStringList requestedCapabilities READ requestedCapabilities WRITE setRequestedCapabilities NOTIFY requestedCapabilitiesChanged) - Q_PROPERTY(QStringList activeCapabilities READ activeCapabilities NOTIFY activeCapabilitiesChanged) - Q_ENUMS(Limit ModeType) - Q_FLAGS(ModeTypes) - -public: - virtual ~IrcNetwork(); - - bool isInitialized(); - - QString name() const; - - QStringList modes() const; - QStringList prefixes() const; - - Q_INVOKABLE QString modeToPrefix(const QString& mode) const; - Q_INVOKABLE QString prefixToMode(const QString& prefix) const; - - QStringList channelTypes() const; - - Q_INVOKABLE bool isChannel(const QString& name) const; - - enum ModeType { - TypeA = 0x1, - TypeB = 0x2, - TypeC = 0x4, - TypeD = 0x8, - AllTypes = 0xf - }; - Q_DECLARE_FLAGS(ModeTypes, ModeType) - - Q_INVOKABLE QStringList channelModes(IrcNetwork::ModeTypes types) const; - - enum Limit { - NickLength, - ChannelLength, - TopicLength, - MessageLength, - KickReasonLength, - AwayReasonLength, - ModeCount - }; - - Q_INVOKABLE int numericLimit(IrcNetwork::Limit limit) const; - - Q_INVOKABLE int modeLimit(const QString& mode) const; - Q_INVOKABLE int channelLimit(const QString& type) const; - Q_INVOKABLE int targetLimit(const QString& command) const; - - QStringList availableCapabilities() const; - QStringList requestedCapabilities() const; - QStringList activeCapabilities() const; - - Q_INVOKABLE bool hasCapability(const QString& capability) const; - Q_INVOKABLE bool isCapable(const QString& capability) const; - -public Q_SLOTS: - bool requestCapability(const QString& capability); - bool requestCapabilities(const QStringList& capabilities); - void setRequestedCapabilities(const QStringList& capabilities); - -Q_SIGNALS: - void initialized(); - void nameChanged(const QString& name); - void modesChanged(const QStringList& modes); - void prefixesChanged(const QStringList& prefixes); - void channelTypesChanged(const QStringList& types); - void availableCapabilitiesChanged(const QStringList& capabilities); - void requestedCapabilitiesChanged(const QStringList& capabilities); - void activeCapabilitiesChanged(const QStringList& capabilities); - void requestingCapabilities(); - -private: - friend class IrcProtocol; - friend class IrcConnection; - explicit IrcNetwork(IrcConnection* connection); - - QScopedPointer<IrcNetworkPrivate> d_ptr; - Q_DECLARE_PRIVATE(IrcNetwork) - Q_DISABLE_COPY(IrcNetwork) -}; - -#ifndef QT_NO_DEBUG_STREAM -IRC_CORE_EXPORT QDebug operator<<(QDebug debug, IrcNetwork::Limit limit); -IRC_CORE_EXPORT QDebug operator<<(QDebug debug, IrcNetwork::ModeType type); -IRC_CORE_EXPORT QDebug operator<<(QDebug debug, IrcNetwork::ModeTypes types); -IRC_CORE_EXPORT QDebug operator<<(QDebug debug, const IrcNetwork* network); -#endif // QT_NO_DEBUG_STREAM - -Q_DECLARE_OPERATORS_FOR_FLAGS(IrcNetwork::ModeTypes) - -IRC_END_NAMESPACE - -Q_DECLARE_METATYPE(IRC_PREPEND_NAMESPACE(IrcNetwork*)) - -#endif // IRCNETWORK_H diff --git a/src/libcommuni/include/IrcCore/ircnetwork_p.h b/src/libcommuni/include/IrcCore/ircnetwork_p.h deleted file mode 100644 index 22e6435..0000000 --- a/src/libcommuni/include/IrcCore/ircnetwork_p.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef IRCNETWORK_P_H -#define IRCNETWORK_P_H - -#include "ircnetwork.h" - -#include <QSet> -#include <QHash> -#include <QString> -#include <QPointer> - -IRC_BEGIN_NAMESPACE - -class IrcNetworkPrivate -{ - Q_DECLARE_PUBLIC(IrcNetwork) - -public: - IrcNetworkPrivate(); - - void setInfo(const QHash<QString, QString>& info); - void setAvailableCapabilities(const QSet<QString>& capabilities); - void setActiveCapabilities(const QSet<QString>& capabilities); - - void setName(const QString& name); - void setModes(const QStringList& modes); - void setPrefixes(const QStringList& prefixes); - void setChannelTypes(const QStringList& types); - - static IrcNetwork* create(IrcConnection* connection) - { - return new IrcNetwork(connection); - } - - static IrcNetworkPrivate* get(const IrcNetwork* network) - { - return network->d_ptr.data(); - } - - IrcNetwork* q_ptr; - QPointer<IrcConnection> connection; - bool initialized; - QString name; - QStringList modes, prefixes, channelTypes, channelModes; - QHash<QString, int> numericLimits, modeLimits, channelLimits, targetLimits; - QSet<QString> availableCaps, requestedCaps, activeCaps; -}; - -IRC_END_NAMESPACE - -#endif // IRCNETWORK_P_H diff --git a/src/libcommuni/include/IrcCore/ircprotocol.h b/src/libcommuni/include/IrcCore/ircprotocol.h deleted file mode 100644 index ae600c4..0000000 --- a/src/libcommuni/include/IrcCore/ircprotocol.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef IRCPROTOCOL_H -#define IRCPROTOCOL_H - -#include <IrcGlobal> -#include <IrcConnection> -#include <QtCore/qset.h> -#include <QtCore/qhash.h> -#include <QtCore/qobject.h> -#include <QtCore/qscopedpointer.h> -#include <QtNetwork/qabstractsocket.h> - -IRC_BEGIN_NAMESPACE - -class IrcMessage; -class IrcProtocolPrivate; - -class IRC_CORE_EXPORT IrcProtocol : public QObject -{ - Q_OBJECT - Q_PROPERTY(IrcConnection* connection READ connection) - Q_PROPERTY(QAbstractSocket* socket READ socket) - -public: - explicit IrcProtocol(IrcConnection* connection); - virtual ~IrcProtocol(); - - IrcConnection* connection() const; - QAbstractSocket* socket() const; - - virtual void open(); - virtual void close(); - - virtual void read(); - virtual bool write(const QByteArray& data); - -public Q_SLOTS: - void receiveMessage(IrcMessage* message); - -protected Q_SLOTS: - void setNickName(const QString& name); - void setStatus(IrcConnection::Status status); - void setInfo(const QHash<QString, QString>& info); - void setAvailableCapabilities(const QSet<QString>& capabilities); - void setActiveCapabilities(const QSet<QString>& capabilities); - -private: - QScopedPointer<IrcProtocolPrivate> d_ptr; - Q_DECLARE_PRIVATE(IrcProtocol) - Q_DISABLE_COPY(IrcProtocol) - - Q_PRIVATE_SLOT(d_func(), void _irc_pauseHandshake()) - Q_PRIVATE_SLOT(d_func(), void _irc_resumeHandshake()) -}; - -IRC_END_NAMESPACE - -#endif // IRCPROTOCOL_H diff --git a/src/libcommuni/include/IrcModel/IrcBuffer b/src/libcommuni/include/IrcModel/IrcBuffer deleted file mode 100644 index 4c88f75..0000000 --- a/src/libcommuni/include/IrcModel/IrcBuffer +++ /dev/null @@ -1 +0,0 @@ -#include <ircbuffer.h> diff --git a/src/libcommuni/include/IrcModel/IrcBufferModel b/src/libcommuni/include/IrcModel/IrcBufferModel deleted file mode 100644 index 149310e..0000000 --- a/src/libcommuni/include/IrcModel/IrcBufferModel +++ /dev/null @@ -1 +0,0 @@ -#include <ircbuffermodel.h> diff --git a/src/libcommuni/include/IrcModel/IrcChannel b/src/libcommuni/include/IrcModel/IrcChannel deleted file mode 100644 index 9392686..0000000 --- a/src/libcommuni/include/IrcModel/IrcChannel +++ /dev/null @@ -1 +0,0 @@ -#include <ircchannel.h> diff --git a/src/libcommuni/include/IrcModel/IrcModel b/src/libcommuni/include/IrcModel/IrcModel deleted file mode 100644 index 0ca546f..0000000 --- a/src/libcommuni/include/IrcModel/IrcModel +++ /dev/null @@ -1 +0,0 @@ -#include <ircmodel.h> diff --git a/src/libcommuni/include/IrcModel/IrcUser b/src/libcommuni/include/IrcModel/IrcUser deleted file mode 100644 index 7b7b69e..0000000 --- a/src/libcommuni/include/IrcModel/IrcUser +++ /dev/null @@ -1 +0,0 @@ -#include <ircuser.h> diff --git a/src/libcommuni/include/IrcModel/IrcUserModel b/src/libcommuni/include/IrcModel/IrcUserModel deleted file mode 100644 index 90a67b7..0000000 --- a/src/libcommuni/include/IrcModel/IrcUserModel +++ /dev/null @@ -1 +0,0 @@ -#include <ircusermodel.h> diff --git a/src/libcommuni/include/IrcModel/ircbuffer.h b/src/libcommuni/include/IrcModel/ircbuffer.h deleted file mode 100644 index 69cc69f..0000000 --- a/src/libcommuni/include/IrcModel/ircbuffer.h +++ /dev/null @@ -1,126 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef IRCBUFFER_H -#define IRCBUFFER_H - -#include <Irc> -#include <IrcGlobal> -#include <QtCore/qobject.h> -#include <QtCore/qvariant.h> -#include <QtCore/qmetatype.h> -#include <QtCore/qscopedpointer.h> - -IRC_BEGIN_NAMESPACE - -class IrcChannel; -class IrcCommand; -class IrcMessage; -class IrcNetwork; -class IrcConnection; -class IrcBufferModel; -class IrcBufferPrivate; - -class IRC_MODEL_EXPORT IrcBuffer : public QObject -{ - Q_OBJECT - Q_PROPERTY(QString title READ title NOTIFY titleChanged) - Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged) - Q_PROPERTY(QString prefix READ prefix WRITE setPrefix NOTIFY prefixChanged) - Q_PROPERTY(IrcConnection* connection READ connection CONSTANT) - Q_PROPERTY(IrcNetwork* network READ network CONSTANT) - Q_PROPERTY(IrcBufferModel* model READ model CONSTANT) - Q_PROPERTY(bool active READ isActive NOTIFY activeChanged) - Q_PROPERTY(bool channel READ isChannel CONSTANT) - Q_PROPERTY(bool sticky READ isSticky WRITE setSticky NOTIFY stickyChanged) - Q_PROPERTY(bool persistent READ isPersistent WRITE setPersistent NOTIFY persistentChanged) - Q_PROPERTY(QVariantMap userData READ userData WRITE setUserData NOTIFY userDataChanged) - -public: - Q_INVOKABLE explicit IrcBuffer(QObject* parent = 0); - virtual ~IrcBuffer(); - - QString title() const; - QString name() const; - QString prefix() const; - - bool isChannel() const; - Q_INVOKABLE IrcChannel* toChannel(); - - IrcConnection* connection() const; - IrcNetwork* network() const; - IrcBufferModel* model() const; - - virtual bool isActive() const; - - bool isSticky() const; - void setSticky(bool sticky); - - bool isPersistent() const; - void setPersistent(bool persistent); - - QVariantMap userData() const; - void setUserData(const QVariantMap& data); - - Q_INVOKABLE bool sendCommand(IrcCommand* command); - -public Q_SLOTS: - void setName(const QString& name); - void setPrefix(const QString& prefix); - void receiveMessage(IrcMessage* message); - virtual void close(const QString& reason = QString()); - -Q_SIGNALS: - void titleChanged(const QString& title); - void nameChanged(const QString& name); - void prefixChanged(const QString& name); - void messageReceived(IrcMessage* message); - void destroyed(IrcBuffer* buffer); - void activeChanged(bool active); - void stickyChanged(bool sticky); - void persistentChanged(bool persistent); - void userDataChanged(const QVariantMap& data); - -protected: - IrcBuffer(IrcBufferPrivate& dd, QObject* parent); - - QScopedPointer<IrcBufferPrivate> d_ptr; - Q_DECLARE_PRIVATE(IrcBuffer) - Q_DISABLE_COPY(IrcBuffer) -}; - -#ifndef QT_NO_DEBUG_STREAM -IRC_MODEL_EXPORT QDebug operator<<(QDebug debug, const IrcBuffer* buffer); -#endif // QT_NO_DEBUG_STREAM - -IRC_END_NAMESPACE - -Q_DECLARE_METATYPE(IRC_PREPEND_NAMESPACE(IrcBuffer*)) -Q_DECLARE_METATYPE(QList<IRC_PREPEND_NAMESPACE(IrcBuffer*)>) - -#endif // IRCBUFFER_H diff --git a/src/libcommuni/include/IrcModel/ircbuffer_p.h b/src/libcommuni/include/IrcModel/ircbuffer_p.h deleted file mode 100644 index cadc043..0000000 --- a/src/libcommuni/include/IrcModel/ircbuffer_p.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef IRCBUFFER_P_H -#define IRCBUFFER_P_H - -#include "ircbuffer.h" -#include "ircmessage.h" -#include <qstringlist.h> -#include <qlist.h> -#include <qmap.h> - -IRC_BEGIN_NAMESPACE - -class IrcUser; -class IrcUserModel; - -class IrcBufferPrivate -{ - Q_DECLARE_PUBLIC(IrcBuffer) - -public: - IrcBufferPrivate(); - virtual ~IrcBufferPrivate(); - - virtual void init(const QString& title, IrcBufferModel* model); - virtual void connected(); - virtual void disconnected(); - - void setName(const QString& name); - void setPrefix(const QString& prefix); - void setModel(IrcBufferModel* model); - - bool processMessage(IrcMessage* message); - - virtual bool processJoinMessage(IrcJoinMessage* message); - virtual bool processKickMessage(IrcKickMessage* message); - virtual bool processModeMessage(IrcModeMessage* message); - virtual bool processNamesMessage(IrcNamesMessage* message); - virtual bool processNickMessage(IrcNickMessage* message); - virtual bool processNoticeMessage(IrcNoticeMessage* message); - virtual bool processNumericMessage(IrcNumericMessage* message); - virtual bool processPartMessage(IrcPartMessage* message); - virtual bool processPrivateMessage(IrcPrivateMessage* message); - virtual bool processQuitMessage(IrcQuitMessage* message); - virtual bool processTopicMessage(IrcTopicMessage* message); - virtual bool processWhoReplyMessage(IrcWhoReplyMessage* message); - - static IrcBufferPrivate* get(IrcBuffer* buffer) - { - return buffer->d_func(); - } - - IrcBuffer* q_ptr; - IrcBufferModel* model; - QString name; - QString prefix; - bool persistent; - bool sticky; - QVariantMap userData; -}; - -IRC_END_NAMESPACE - -#endif // IRCBUFFER_P_H diff --git a/src/libcommuni/include/IrcModel/ircbuffermodel.h b/src/libcommuni/include/IrcModel/ircbuffermodel.h deleted file mode 100644 index ef23fc4..0000000 --- a/src/libcommuni/include/IrcModel/ircbuffermodel.h +++ /dev/null @@ -1,158 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef IRCBUFFERMODEL_H -#define IRCBUFFERMODEL_H - -#include <Irc> -#include <IrcGlobal> -#include <QtCore/qstringlist.h> -#include <QtCore/qabstractitemmodel.h> - -IRC_BEGIN_NAMESPACE - -class IrcBuffer; -class IrcChannel; -class IrcMessage; -class IrcNetwork; -class IrcConnection; -class IrcBufferModelPrivate; - -class IRC_MODEL_EXPORT IrcBufferModel : public QAbstractListModel -{ - Q_OBJECT - Q_PROPERTY(int count READ count NOTIFY countChanged) - Q_PROPERTY(bool empty READ isEmpty NOTIFY emptyChanged) - Q_PROPERTY(Qt::SortOrder sortOrder READ sortOrder WRITE setSortOrder) - Q_PROPERTY(Irc::SortMethod sortMethod READ sortMethod WRITE setSortMethod) - Q_PROPERTY(QStringList channels READ channels NOTIFY channelsChanged) - Q_PROPERTY(Irc::DataRole displayRole READ displayRole WRITE setDisplayRole) - Q_PROPERTY(bool persistent READ isPersistent WRITE setPersistent NOTIFY persistentChanged) - Q_PROPERTY(QList<IrcBuffer*> buffers READ buffers NOTIFY buffersChanged) - Q_PROPERTY(IrcConnection* connection READ connection WRITE setConnection NOTIFY connectionChanged) - Q_PROPERTY(IrcNetwork* network READ network NOTIFY networkChanged) - Q_PROPERTY(IrcBuffer* bufferPrototype READ bufferPrototype WRITE setBufferPrototype NOTIFY bufferPrototypeChanged) - Q_PROPERTY(IrcChannel* channelPrototype READ channelPrototype WRITE setChannelPrototype NOTIFY channelPrototypeChanged) - -public: - explicit IrcBufferModel(QObject* parent = 0); - virtual ~IrcBufferModel(); - - IrcConnection* connection() const; - void setConnection(IrcConnection* connection); - - IrcNetwork* network() const; - - int count() const; - bool isEmpty() const; - QStringList channels() const; - QList<IrcBuffer*> buffers() const; - Q_INVOKABLE IrcBuffer* get(int index) const; - Q_INVOKABLE IrcBuffer* find(const QString& title) const; - Q_INVOKABLE bool contains(const QString& title) const; - Q_INVOKABLE int indexOf(IrcBuffer* buffer) const; - - Q_INVOKABLE IrcBuffer* add(const QString& title); - Q_INVOKABLE void add(IrcBuffer* buffer); - Q_INVOKABLE void remove(const QString& title); - Q_INVOKABLE void remove(IrcBuffer* buffer); - - Qt::SortOrder sortOrder() const; - void setSortOrder(Qt::SortOrder order); - - Irc::SortMethod sortMethod() const; - void setSortMethod(Irc::SortMethod method); - - Irc::DataRole displayRole() const; - void setDisplayRole(Irc::DataRole role); - - bool isPersistent() const; - void setPersistent(bool persistent); - - QModelIndex index(IrcBuffer* buffer) const; - IrcBuffer* buffer(const QModelIndex& index) const; - - QHash<int, QByteArray> roleNames() const; - int rowCount(const QModelIndex& parent = QModelIndex()) const; - QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const; - QModelIndex index(int row, int column = 0, const QModelIndex& parent = QModelIndex()) const; - - IrcBuffer* bufferPrototype() const; - void setBufferPrototype(IrcBuffer* prototype); - - IrcChannel* channelPrototype() const; - void setChannelPrototype(IrcChannel* prototype); - - Q_INVOKABLE QByteArray saveState(int version = 0) const; - Q_INVOKABLE bool restoreState(const QByteArray& state, int version = 0); - -public Q_SLOTS: - void clear(); - void receiveMessage(IrcMessage* message); - void sort(int column = 0, Qt::SortOrder order = Qt::AscendingOrder); - void sort(Irc::SortMethod method, Qt::SortOrder order = Qt::AscendingOrder); - -Q_SIGNALS: - void countChanged(int count); - void emptyChanged(bool empty); - void added(IrcBuffer* buffer); - void removed(IrcBuffer* buffer); - void aboutToBeAdded(IrcBuffer* buffer); - void aboutToBeRemoved(IrcBuffer* buffer); - void persistentChanged(bool persistent); - void buffersChanged(const QList<IrcBuffer*>& buffers); - void channelsChanged(const QStringList& channels); - void connectionChanged(IrcConnection* connection); - void networkChanged(IrcNetwork* network); - void messageIgnored(IrcMessage* message); - void bufferPrototypeChanged(IrcBuffer* prototype); - void channelPrototypeChanged(IrcChannel* prototype); - void destroyed(IrcBufferModel* model); - -protected Q_SLOTS: - virtual IrcBuffer* createBuffer(const QString& title); - virtual IrcChannel* createChannel(const QString& title); - -protected: - virtual bool lessThan(IrcBuffer* one, IrcBuffer* another, Irc::SortMethod method) const; - -private: - friend class IrcBufferLessThan; - friend class IrcBufferGreaterThan; - QScopedPointer<IrcBufferModelPrivate> d_ptr; - Q_DECLARE_PRIVATE(IrcBufferModel) - Q_DISABLE_COPY(IrcBufferModel) - - Q_PRIVATE_SLOT(d_func(), void _irc_connected()) - Q_PRIVATE_SLOT(d_func(), void _irc_disconnected()) - Q_PRIVATE_SLOT(d_func(), void _irc_bufferDestroyed(IrcBuffer*)) -}; - -IRC_END_NAMESPACE - -#endif // IRCBUFFERMODEL_H diff --git a/src/libcommuni/include/IrcModel/ircbuffermodel_p.h b/src/libcommuni/include/IrcModel/ircbuffermodel_p.h deleted file mode 100644 index c7446b0..0000000 --- a/src/libcommuni/include/IrcModel/ircbuffermodel_p.h +++ /dev/null @@ -1,89 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef IRCBUFFERMODEL_P_H -#define IRCBUFFERMODEL_P_H - -#include "ircbuffer.h" -#include "ircfilter.h" -#include "ircbuffermodel.h" -#include <qpointer.h> - -IRC_BEGIN_NAMESPACE - -class IrcBufferModelPrivate : public QObject, public IrcMessageFilter, public IrcCommandFilter -{ - Q_OBJECT - Q_DECLARE_PUBLIC(IrcBufferModel) - Q_INTERFACES(IrcMessageFilter IrcCommandFilter) - -public: - IrcBufferModelPrivate(); - - bool messageFilter(IrcMessage* message); - bool commandFilter(IrcCommand* command); - - IrcBuffer* createBufferHelper(const QString& title); - IrcChannel* createChannelHelper(const QString& title); - - IrcBuffer* createBuffer(const QString& title); - void destroyBuffer(const QString& title, bool force = false); - - void addBuffer(IrcBuffer* buffer, bool notify = true); - void insertBuffer(int index, IrcBuffer* buffer, bool notify = true); - void removeBuffer(IrcBuffer* buffer, bool notify = true); - bool renameBuffer(const QString& from, const QString& to); - - bool processMessage(const QString& title, IrcMessage* message, bool create = false); - - void _irc_connected(); - void _irc_disconnected(); - void _irc_bufferDestroyed(IrcBuffer* buffer); - - static IrcBufferModelPrivate* get(IrcBufferModel* model) - { - return model->d_func(); - } - - IrcBufferModel* q_ptr; - Irc::DataRole role; - QPointer<IrcConnection> connection; - QList<IrcBuffer*> bufferList; - QMap<QString, IrcBuffer*> bufferMap; - QHash<QString, QString> keys; - QStringList channels; - Irc::SortMethod sortMethod; - Qt::SortOrder sortOrder; - IrcBuffer* bufferProto; - IrcChannel* channelProto; - bool persistent; -}; - -IRC_END_NAMESPACE - -#endif // IRCBUFFERMODEL_P_H diff --git a/src/libcommuni/include/IrcModel/ircchannel.h b/src/libcommuni/include/IrcModel/ircchannel.h deleted file mode 100644 index e16de90..0000000 --- a/src/libcommuni/include/IrcModel/ircchannel.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef IRCCHANNEL_H -#define IRCCHANNEL_H - -#include <IrcGlobal> -#include <IrcBuffer> -#include <QtCore/qmetatype.h> - -IRC_BEGIN_NAMESPACE - -class IrcChannelPrivate; - -class IRC_MODEL_EXPORT IrcChannel : public IrcBuffer -{ - Q_OBJECT - Q_PROPERTY(QString key READ key NOTIFY keyChanged) - Q_PROPERTY(QString mode READ mode NOTIFY modeChanged) - Q_PROPERTY(QString topic READ topic NOTIFY topicChanged) - -public: - Q_INVOKABLE explicit IrcChannel(QObject* parent = 0); - virtual ~IrcChannel(); - - QString key() const; - QString mode() const; - QString topic() const; - - virtual bool isActive() const; - -public Q_SLOTS: - void join(const QString& key = QString()); - void part(const QString& reason = QString()); - void close(const QString& reason = QString()); - -Q_SIGNALS: - void keyChanged(const QString& key); - void modeChanged(const QString& mode); - void topicChanged(const QString& topic); - void destroyed(IrcChannel* channel); -private: - Q_DECLARE_PRIVATE(IrcChannel) - Q_DISABLE_COPY(IrcChannel) -}; - -#ifndef QT_NO_DEBUG_STREAM -IRC_MODEL_EXPORT QDebug operator<<(QDebug debug, const IrcChannel* channel); -#endif // QT_NO_DEBUG_STREAM - -IRC_END_NAMESPACE - -Q_DECLARE_METATYPE(IRC_PREPEND_NAMESPACE(IrcChannel*)) -Q_DECLARE_METATYPE(QList<IRC_PREPEND_NAMESPACE(IrcChannel*)>) - -#endif // IRCCHANNEL diff --git a/src/libcommuni/include/IrcModel/ircchannel_p.h b/src/libcommuni/include/IrcModel/ircchannel_p.h deleted file mode 100644 index 9da375b..0000000 --- a/src/libcommuni/include/IrcModel/ircchannel_p.h +++ /dev/null @@ -1,99 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef IRCCHANNEL_P_H -#define IRCCHANNEL_P_H - -#include "ircchannel.h" -#include "ircnetwork.h" -#include "ircbuffer_p.h" -#include <qstringlist.h> -#include <qlist.h> -#include <qmap.h> - -IRC_BEGIN_NAMESPACE - -class IrcChannelPrivate : public IrcBufferPrivate -{ - Q_DECLARE_PUBLIC(IrcChannel) - -public: - IrcChannelPrivate(); - virtual ~IrcChannelPrivate(); - - virtual void init(const QString& title, IrcBufferModel* model); - virtual void connected(); - virtual void disconnected(); - - void setActive(bool active); - - void changeModes(const QString& value, const QStringList& arguments); - void setModes(const QString& value, const QStringList& arguments); - void setTopic(const QString& value); - void setKey(const QString& value); - - void addUser(const QString& user); - bool removeUser(const QString& user); - void setUsers(const QStringList& users); - bool renameUser(const QString& from, const QString& to); - void setUserMode(const QString& user, const QString& mode); - void promoteUser(const QString& user); - void setUserAway(const QString &name, const bool& away); - void setUserServOp(const QString &name, const bool& servOp); - - virtual bool processJoinMessage(IrcJoinMessage* message); - virtual bool processKickMessage(IrcKickMessage* message); - virtual bool processModeMessage(IrcModeMessage* message); - virtual bool processNamesMessage(IrcNamesMessage* message); - virtual bool processNickMessage(IrcNickMessage* message); - virtual bool processNoticeMessage(IrcNoticeMessage* message); - virtual bool processNumericMessage(IrcNumericMessage* message); - virtual bool processPartMessage(IrcPartMessage* message); - virtual bool processPrivateMessage(IrcPrivateMessage* message); - virtual bool processQuitMessage(IrcQuitMessage* message); - virtual bool processTopicMessage(IrcTopicMessage* message); - virtual bool processWhoReplyMessage(IrcWhoReplyMessage* message); - - static IrcChannelPrivate* get(IrcChannel* channel) - { - return channel->d_func(); - } - - QMap<QString, QString> modes; - QString topic; - bool active; - QStringList names; - QList<IrcUser*> userList; - QList<IrcUser*> activeUsers; - QMap<QString, IrcUser*> userMap; - QList<IrcUserModel*> userModels; -}; - -IRC_END_NAMESPACE - -#endif // IRCCHANNEL_P_H diff --git a/src/libcommuni/include/IrcModel/ircmodel.h b/src/libcommuni/include/IrcModel/ircmodel.h deleted file mode 100644 index 45ac4bd..0000000 --- a/src/libcommuni/include/IrcModel/ircmodel.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef IRCMODEL_H -#define IRCMODEL_H - -#include "ircbuffer.h" -#include "ircbuffermodel.h" -#include "ircchannel.h" -#include "ircuser.h" -#include "ircusermodel.h" - -IRC_BEGIN_NAMESPACE - -namespace IrcModel { - void registerMetaTypes(); -} - -IRC_END_NAMESPACE - -#endif // IRCMODEL_H diff --git a/src/libcommuni/include/IrcModel/ircuser.h b/src/libcommuni/include/IrcModel/ircuser.h deleted file mode 100644 index 9e59a9f..0000000 --- a/src/libcommuni/include/IrcModel/ircuser.h +++ /dev/null @@ -1,89 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef IRCUSER_H -#define IRCUSER_H - -#include <IrcGlobal> -#include <QtCore/qobject.h> -#include <QtCore/qmetatype.h> -#include <QtCore/qscopedpointer.h> - -IRC_BEGIN_NAMESPACE - -class IrcChannel; -class IrcUserPrivate; - -class IRC_MODEL_EXPORT IrcUser : public QObject -{ - Q_OBJECT - Q_PROPERTY(QString title READ title NOTIFY titleChanged) - Q_PROPERTY(QString name READ name NOTIFY nameChanged) - Q_PROPERTY(QString prefix READ prefix NOTIFY prefixChanged) - Q_PROPERTY(QString mode READ mode NOTIFY modeChanged) - Q_PROPERTY(bool servOp READ isServOp NOTIFY servOpChanged) - Q_PROPERTY(bool away READ isAway NOTIFY awayChanged) - Q_PROPERTY(IrcChannel* channel READ channel CONSTANT) - -public: - explicit IrcUser(QObject* parent = 0); - virtual ~IrcUser(); - - QString title() const; - QString name() const; - QString prefix() const; - QString mode() const; - bool isServOp() const; - bool isAway() const; - - IrcChannel* channel() const; - -Q_SIGNALS: - void titleChanged(const QString& title); - void nameChanged(const QString& name); - void prefixChanged(const QString& prefix); - void modeChanged(const QString& mode); - void servOpChanged(bool servOp); - void awayChanged(bool away); - -private: - QScopedPointer<IrcUserPrivate> d_ptr; - Q_DECLARE_PRIVATE(IrcUser) - Q_DISABLE_COPY(IrcUser) -}; - -#ifndef QT_NO_DEBUG_STREAM -IRC_MODEL_EXPORT QDebug operator<<(QDebug debug, const IrcUser* user); -#endif // QT_NO_DEBUG_STREAM - -IRC_END_NAMESPACE - -Q_DECLARE_METATYPE(IRC_PREPEND_NAMESPACE(IrcUser*)) -Q_DECLARE_METATYPE(QList<IRC_PREPEND_NAMESPACE(IrcUser*)>) - -#endif // IRCUSER_H diff --git a/src/libcommuni/include/IrcModel/ircuser_p.h b/src/libcommuni/include/IrcModel/ircuser_p.h deleted file mode 100644 index 0e88e6b..0000000 --- a/src/libcommuni/include/IrcModel/ircuser_p.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef IRCUSER_P_H -#define IRCUSER_P_H - -#include "ircuser.h" - -IRC_BEGIN_NAMESPACE - -class IrcUserPrivate -{ - Q_DECLARE_PUBLIC(IrcUser) - -public: - void setName(const QString& n); - void setPrefix(const QString& p); - void setMode(const QString& m); - void setServOp(const bool& o); - void setAway(const bool& a); - - static IrcUserPrivate* get(IrcUser* user) - { - return user->d_func(); - } - - IrcUser* q_ptr; - IrcChannel* channel; - QString name; - QString prefix; - QString mode; - bool servOp; - bool away; -}; - -IRC_END_NAMESPACE - -#endif // IRCUSER_P_H diff --git a/src/libcommuni/include/IrcModel/ircusermodel.h b/src/libcommuni/include/IrcModel/ircusermodel.h deleted file mode 100644 index 331af37..0000000 --- a/src/libcommuni/include/IrcModel/ircusermodel.h +++ /dev/null @@ -1,119 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef IRCUSERMODEL_H -#define IRCUSERMODEL_H - -#include <Irc> -#include <IrcGlobal> -#include <QtCore/qstringlist.h> -#include <QtCore/qabstractitemmodel.h> - -IRC_BEGIN_NAMESPACE - -class IrcUser; -class IrcChannel; -class IrcMessage; -class IrcUserModelPrivate; - -class IRC_MODEL_EXPORT IrcUserModel : public QAbstractListModel -{ - Q_OBJECT - Q_PROPERTY(int count READ count NOTIFY countChanged) - Q_PROPERTY(bool empty READ isEmpty NOTIFY emptyChanged) - Q_PROPERTY(QStringList names READ names NOTIFY namesChanged) - Q_PROPERTY(QList<IrcUser*> users READ users NOTIFY usersChanged) - Q_PROPERTY(Irc::DataRole displayRole READ displayRole WRITE setDisplayRole) - Q_PROPERTY(IrcChannel* channel READ channel WRITE setChannel NOTIFY channelChanged) - Q_PROPERTY(Irc::SortMethod sortMethod READ sortMethod WRITE setSortMethod) - Q_PROPERTY(Qt::SortOrder sortOrder READ sortOrder WRITE setSortOrder) - -public: - explicit IrcUserModel(QObject* parent = 0); - virtual ~IrcUserModel(); - - IrcChannel* channel() const; - void setChannel(IrcChannel* channel); - - int count() const; - bool isEmpty() const; - QStringList names() const; - QList<IrcUser*> users() const; - Q_INVOKABLE IrcUser* get(int index) const; - Q_INVOKABLE IrcUser* find(const QString& name) const; - Q_INVOKABLE bool contains(const QString& name) const; - Q_INVOKABLE int indexOf(IrcUser* user) const; - - Irc::DataRole displayRole() const; - void setDisplayRole(Irc::DataRole role); - - Irc::SortMethod sortMethod() const; - void setSortMethod(Irc::SortMethod method); - - Qt::SortOrder sortOrder() const; - void setSortOrder(Qt::SortOrder order); - - QModelIndex index(IrcUser* user) const; - IrcUser* user(const QModelIndex& index) const; - - QHash<int, QByteArray> roleNames() const; - int rowCount(const QModelIndex& parent = QModelIndex()) const; - QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const; - QModelIndex index(int row, int column = 0, const QModelIndex& parent = QModelIndex()) const; - -public Q_SLOTS: - void clear(); - void sort(int column = 0, Qt::SortOrder order = Qt::AscendingOrder); - void sort(Irc::SortMethod method, Qt::SortOrder order = Qt::AscendingOrder); - -Q_SIGNALS: - void added(IrcUser* user); - void removed(IrcUser* user); - void aboutToBeAdded(IrcUser* user); - void aboutToBeRemoved(IrcUser* user); - void countChanged(int count); - void emptyChanged(bool empty); - void namesChanged(const QStringList& names); - void usersChanged(const QList<IrcUser*>& users); - void channelChanged(IrcChannel* channel); - -protected: - virtual bool lessThan(IrcUser* one, IrcUser* another, Irc::SortMethod method) const; - -private: - friend class IrcUserLessThan; - friend class IrcChannelPrivate; - friend class IrcUserGreaterThan; - QScopedPointer<IrcUserModelPrivate> d_ptr; - Q_DECLARE_PRIVATE(IrcUserModel) - Q_DISABLE_COPY(IrcUserModel) -}; - -IRC_END_NAMESPACE - -#endif // IRCUSERMODEL_H diff --git a/src/libcommuni/include/IrcModel/ircusermodel_p.h b/src/libcommuni/include/IrcModel/ircusermodel_p.h deleted file mode 100644 index 45c00bb..0000000 --- a/src/libcommuni/include/IrcModel/ircusermodel_p.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef IRCUSERMODEL_P_H -#define IRCUSERMODEL_P_H - -#include "ircuser.h" -#include "ircchannel_p.h" -#include "ircusermodel.h" -#include <qpointer.h> - -IRC_BEGIN_NAMESPACE - -class IrcUserModelPrivate -{ - Q_DECLARE_PUBLIC(IrcUserModel) - -public: - IrcUserModelPrivate(); - - void addUser(IrcUser* user, bool notify = true); - void insertUser(int index, IrcUser* user, bool notify = true); - void removeUser(IrcUser* user, bool notify = true); - void setUsers(const QList<IrcUser*>& users, bool reset = true); - void renameUser(IrcUser* user); - void setUserMode(IrcUser* user); - void promoteUser(IrcUser* user); - - static IrcUserModelPrivate* get(IrcUserModel* model) - { - return model->d_func(); - } - - IrcUserModel* q_ptr; - Irc::DataRole role; - QList<IrcUser*> userList; - QPointer<IrcChannel> channel; - Irc::SortMethod sortMethod; - Qt::SortOrder sortOrder; -}; - -IRC_END_NAMESPACE - -#endif // IRCUSERMODEL_P_H diff --git a/src/libcommuni/include/IrcUtil/IrcCommandParser b/src/libcommuni/include/IrcUtil/IrcCommandParser deleted file mode 100644 index 0cac681..0000000 --- a/src/libcommuni/include/IrcUtil/IrcCommandParser +++ /dev/null @@ -1 +0,0 @@ -#include <irccommandparser.h> diff --git a/src/libcommuni/include/IrcUtil/IrcCompleter b/src/libcommuni/include/IrcUtil/IrcCompleter deleted file mode 100644 index 7f561f4..0000000 --- a/src/libcommuni/include/IrcUtil/IrcCompleter +++ /dev/null @@ -1 +0,0 @@ -#include <irccompleter.h> diff --git a/src/libcommuni/include/IrcUtil/IrcLagTimer b/src/libcommuni/include/IrcUtil/IrcLagTimer deleted file mode 100644 index d290939..0000000 --- a/src/libcommuni/include/IrcUtil/IrcLagTimer +++ /dev/null @@ -1 +0,0 @@ -#include <irclagtimer.h> diff --git a/src/libcommuni/include/IrcUtil/IrcPalette b/src/libcommuni/include/IrcUtil/IrcPalette deleted file mode 100644 index b82c1c0..0000000 --- a/src/libcommuni/include/IrcUtil/IrcPalette +++ /dev/null @@ -1 +0,0 @@ -#include <ircpalette.h> diff --git a/src/libcommuni/include/IrcUtil/IrcTextFormat b/src/libcommuni/include/IrcUtil/IrcTextFormat deleted file mode 100644 index f78fd81..0000000 --- a/src/libcommuni/include/IrcUtil/IrcTextFormat +++ /dev/null @@ -1 +0,0 @@ -#include <irctextformat.h> diff --git a/src/libcommuni/include/IrcUtil/IrcUtil b/src/libcommuni/include/IrcUtil/IrcUtil deleted file mode 100644 index 64e9f15..0000000 --- a/src/libcommuni/include/IrcUtil/IrcUtil +++ /dev/null @@ -1 +0,0 @@ -#include <ircutil.h> diff --git a/src/libcommuni/include/IrcUtil/irccommandparser.h b/src/libcommuni/include/IrcUtil/irccommandparser.h deleted file mode 100644 index c31a6f2..0000000 --- a/src/libcommuni/include/IrcUtil/irccommandparser.h +++ /dev/null @@ -1,112 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef IRCCOMMANDPARSER_H -#define IRCCOMMANDPARSER_H - -#include <IrcGlobal> -#include <IrcCommand> -#include <QtCore/qobject.h> -#include <QtCore/qmetatype.h> -#include <QtCore/qstringlist.h> - -IRC_BEGIN_NAMESPACE - -class IrcCommandParserPrivate; - -class IRC_UTIL_EXPORT IrcCommandParser : public QObject -{ - Q_OBJECT - Q_PROPERTY(QStringList commands READ commands NOTIFY commandsChanged) - Q_PROPERTY(QStringList triggers READ triggers WRITE setTriggers NOTIFY triggersChanged) - Q_PROPERTY(QStringList channels READ channels WRITE setChannels NOTIFY channelsChanged) - Q_PROPERTY(QString target READ target WRITE setTarget NOTIFY targetChanged) - Q_PROPERTY(bool tolerant READ isTolerant WRITE setTolerant NOTIFY tolerancyChanged) - Q_FLAGS(Details) - -public: - explicit IrcCommandParser(QObject* parent = 0); - virtual ~IrcCommandParser(); - - QStringList commands() const; - - enum Detail { - Full = 0x0, - NoTarget = 0x1, - NoPrefix = 0x2, - NoEllipsis = 0x4, - NoParentheses = 0x8, - NoBrackets = 0x10, - NoAngles = 0x20, - Visual = NoTarget | NoPrefix | NoEllipsis - }; - Q_DECLARE_FLAGS(Details, Detail) - - Q_INVOKABLE QString syntax(const QString& command, Details details = Visual) const; - - Q_INVOKABLE void addCommand(IrcCommand::Type type, const QString& syntax); - Q_INVOKABLE void removeCommand(IrcCommand::Type type, const QString& syntax = QString()); - - QStringList triggers() const; - - QString target() const; - QStringList channels() const; - - bool isTolerant() const; - void setTolerant(bool tolerant); - - Q_INVOKABLE IrcCommand* parse(const QString& input) const; - -public Q_SLOTS: - void clear(); - void reset(); - - void setTriggers(const QStringList& triggers); - void setChannels(const QStringList& channels); - void setTarget(const QString& target); - -Q_SIGNALS: - void commandsChanged(const QStringList& commands); - void triggersChanged(const QStringList& triggers); - void channelsChanged(const QStringList& channels); - void targetChanged(const QString& target); - void tolerancyChanged(bool tolerant); - -private: - QScopedPointer<IrcCommandParserPrivate> d_ptr; - Q_DECLARE_PRIVATE(IrcCommandParser) - Q_DISABLE_COPY(IrcCommandParser) -}; - -Q_DECLARE_OPERATORS_FOR_FLAGS(IrcCommandParser::Details) - -IRC_END_NAMESPACE - -Q_DECLARE_METATYPE(IRC_PREPEND_NAMESPACE(IrcCommandParser*)) - -#endif // IRCCOMMANDPARSER_H diff --git a/src/libcommuni/include/IrcUtil/irccommandparser_p.h b/src/libcommuni/include/IrcUtil/irccommandparser_p.h deleted file mode 100644 index d22fd6d..0000000 --- a/src/libcommuni/include/IrcUtil/irccommandparser_p.h +++ /dev/null @@ -1,96 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef IRCCOMMANDPARSER_P_H -#define IRCCOMMANDPARSER_P_H - -#include "irccommandparser.h" -#include "irccommand.h" - -#include <QList> -#include <QString> -#include <QMultiMap> -#include <QStringList> - -IRC_BEGIN_NAMESPACE - -struct IrcParameterInfo -{ - IrcParameterInfo() : optional(false), channel(false), current(false), multi(false) { } - bool optional; - bool channel; - bool current; - bool multi; - QString value; - QString syntax; -}; - -struct IrcCommandInfo -{ - IrcCommandInfo() : type(IrcCommand::Custom), min(0), max(0) { } - - QString fullSyntax() - { - return command + QLatin1Char(' ') + syntax; - } - - IrcCommand::Type type; - QString command; - QString syntax; - int min, max; - QList<IrcParameterInfo> params; -}; - -class IrcCommandParserPrivate -{ -public: - IrcCommandParserPrivate(); - - QList<IrcCommandInfo> find(const QString& command) const; - static IrcCommandInfo parseSyntax(IrcCommand::Type type, const QString& syntax); - IrcCommand* parseCommand(const IrcCommandInfo& command, const QString& input) const; - bool processParameters(const IrcCommandInfo& command, const QString& input, QStringList* params) const; - bool processCommand(QString* input, int* removed = 0) const; - bool processMessage(QString* input, int* removed = 0) const; - bool onChannel() const; - - static IrcCommandParserPrivate* get(IrcCommandParser* parser) - { - return parser->d_func(); - } - - bool tolerant; - QString target; - QStringList triggers; - QStringList channels; - QMultiMap<QString, IrcCommandInfo> commands; -}; - -IRC_END_NAMESPACE - -#endif // IRCCOMMANDPARSER_P_H diff --git a/src/libcommuni/include/IrcUtil/irccompleter.h b/src/libcommuni/include/IrcUtil/irccompleter.h deleted file mode 100644 index f4c33ab..0000000 --- a/src/libcommuni/include/IrcUtil/irccompleter.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef IRCCOMPLETER_H -#define IRCCOMPLETER_H - -#include <IrcGlobal> -#include <QtCore/qobject.h> -#include <QtCore/qstring.h> -#include <QtCore/qmetatype.h> - -IRC_BEGIN_NAMESPACE - -class IrcBuffer; -class IrcCommandParser; -class IrcCompleterPrivate; - -class IRC_UTIL_EXPORT IrcCompleter : public QObject -{ - Q_OBJECT - Q_PROPERTY(QString suffix READ suffix WRITE setSuffix NOTIFY suffixChanged) - Q_PROPERTY(IrcBuffer* buffer READ buffer WRITE setBuffer NOTIFY bufferChanged) - Q_PROPERTY(IrcCommandParser* parser READ parser WRITE setParser NOTIFY parserChanged) - Q_ENUMS(Direction) - -public: - explicit IrcCompleter(QObject* parent = 0); - virtual ~IrcCompleter(); - - enum Direction { - Forward, - Backward - }; - - QString suffix() const; - IrcBuffer* buffer() const; - IrcCommandParser* parser() const; - -public Q_SLOTS: - void setSuffix(const QString& suffix); - void setBuffer(IrcBuffer* buffer); - void setParser(IrcCommandParser* parser); - - void complete(const QString& text, int cursor, Direction direction = Forward); - void reset(); - -Q_SIGNALS: - void suffixChanged(const QString& suffix); - void bufferChanged(IrcBuffer* buffer); - void parserChanged(IrcCommandParser* parser); - - void completed(const QString& text, int cursor); - -private: - QScopedPointer<IrcCompleterPrivate> d_ptr; - Q_DECLARE_PRIVATE(IrcCompleter) - Q_DISABLE_COPY(IrcCompleter) -}; - -IRC_END_NAMESPACE - -Q_DECLARE_METATYPE(IRC_PREPEND_NAMESPACE(IrcCompleter*)) -Q_DECLARE_METATYPE(IRC_PREPEND_NAMESPACE(IrcCompleter::Direction)) - -#endif // IRCCOMPLETER_H diff --git a/src/libcommuni/include/IrcUtil/irclagtimer.h b/src/libcommuni/include/IrcUtil/irclagtimer.h deleted file mode 100644 index 29816d8..0000000 --- a/src/libcommuni/include/IrcUtil/irclagtimer.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef IRCLAGTIMER_H -#define IRCLAGTIMER_H - -#include <IrcGlobal> -#include <QtCore/qobject.h> -#include <QtCore/qmetatype.h> -#include <QtCore/qscopedpointer.h> - -IRC_BEGIN_NAMESPACE - -class IrcConnection; -class IrcLagTimerPrivate; - -class IRC_UTIL_EXPORT IrcLagTimer : public QObject -{ - Q_OBJECT - Q_PROPERTY(qint64 lag READ lag NOTIFY lagChanged) - Q_PROPERTY(int interval READ interval WRITE setInterval) - Q_PROPERTY(IrcConnection* connection READ connection WRITE setConnection) - -public: - explicit IrcLagTimer(QObject* parent = 0); - virtual ~IrcLagTimer(); - - IrcConnection* connection() const; - void setConnection(IrcConnection* connection); - - qint64 lag() const; - - int interval() const; - void setInterval(int seconds); - -Q_SIGNALS: - void lagChanged(qint64 lag); - -private: - QScopedPointer<IrcLagTimerPrivate> d_ptr; - Q_DECLARE_PRIVATE(IrcLagTimer) - Q_DISABLE_COPY(IrcLagTimer) - - Q_PRIVATE_SLOT(d_func(), void _irc_connected()) - Q_PRIVATE_SLOT(d_func(), void _irc_pingServer()) - Q_PRIVATE_SLOT(d_func(), void _irc_disconnected()) -}; - -IRC_END_NAMESPACE - -Q_DECLARE_METATYPE(IRC_PREPEND_NAMESPACE(IrcLagTimer*)) - -#endif // IRCLAGTIMER_H diff --git a/src/libcommuni/include/IrcUtil/irclagtimer_p.h b/src/libcommuni/include/IrcUtil/irclagtimer_p.h deleted file mode 100644 index 712f4a9..0000000 --- a/src/libcommuni/include/IrcUtil/irclagtimer_p.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef IRCLAGTIMER_P_H -#define IRCLAGTIMER_P_H - -#include "irclagtimer.h" -#include "ircfilter.h" -#include <QTimer> - -IRC_BEGIN_NAMESPACE - -class IrcPongMessage; - -class IrcLagTimerPrivate : public QObject, public IrcMessageFilter -{ - Q_OBJECT - Q_INTERFACES(IrcMessageFilter) - Q_DECLARE_PUBLIC(IrcLagTimer) - -public: - IrcLagTimerPrivate(); - - bool messageFilter(IrcMessage* msg); - bool processPongReply(IrcPongMessage* msg); - - void _irc_connected(); - void _irc_pingServer(); - void _irc_disconnected(); - - void updateTimer(); - void updateLag(qint64 value); - - IrcLagTimer* q_ptr; - IrcConnection* connection; - QTimer timer; - int interval; - qint64 lag; -}; - -IRC_END_NAMESPACE - -#endif // IRCLAGTIMER_P_H diff --git a/src/libcommuni/include/IrcUtil/ircpalette.h b/src/libcommuni/include/IrcUtil/ircpalette.h deleted file mode 100644 index 735ff17..0000000 --- a/src/libcommuni/include/IrcUtil/ircpalette.h +++ /dev/null @@ -1,133 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef IRCPALETTE_H -#define IRCPALETTE_H - -#include <IrcGlobal> -#include <QtCore/qmap.h> -#include <QtCore/qobject.h> -#include <QtCore/qstring.h> -#include <QtCore/qmetatype.h> -#include <QtCore/qscopedpointer.h> - -IRC_BEGIN_NAMESPACE - -class IrcPalettePrivate; - -class IRC_UTIL_EXPORT IrcPalette : public QObject -{ - Q_OBJECT - Q_PROPERTY(QString white READ white WRITE setWhite) - Q_PROPERTY(QString black READ black WRITE setBlack) - Q_PROPERTY(QString blue READ blue WRITE setBlue) - Q_PROPERTY(QString green READ green WRITE setGreen) - Q_PROPERTY(QString red READ red WRITE setRed) - Q_PROPERTY(QString brown READ brown WRITE setBrown) - Q_PROPERTY(QString purple READ purple WRITE setPurple) - Q_PROPERTY(QString orange READ orange WRITE setOrange) - Q_PROPERTY(QString yellow READ yellow WRITE setYellow) - Q_PROPERTY(QString lightGreen READ lightGreen WRITE setLightGreen) - Q_PROPERTY(QString cyan READ cyan WRITE setCyan) - Q_PROPERTY(QString lightCyan READ lightCyan WRITE setLightCyan) - Q_PROPERTY(QString lightBlue READ lightBlue WRITE setLightBlue) - Q_PROPERTY(QString pink READ pink WRITE setPink) - Q_PROPERTY(QString gray READ gray WRITE setGray) - Q_PROPERTY(QString lightGray READ lightGray WRITE setLightGray) - -public: - ~IrcPalette(); - - QMap<int, QString> colorNames() const; - void setColorNames(const QMap<int, QString>& names); - - QString colorName(int color, const QString& fallback = QLatin1String("black")) const; - void setColorName(int color, const QString& name); - - QString white() const; - void setWhite(const QString& color); - - QString black() const; - void setBlack(const QString& color); - - QString blue() const; - void setBlue(const QString& color); - - QString green() const; - void setGreen(const QString& color); - - QString red() const; - void setRed(const QString& color); - - QString brown() const; - void setBrown(const QString& color); - - QString purple() const; - void setPurple(const QString& color); - - QString orange() const; - void setOrange(const QString& color); - - QString yellow() const; - void setYellow(const QString& color); - - QString lightGreen() const; - void setLightGreen(const QString& color); - - QString cyan() const; - void setCyan(const QString& color); - - QString lightCyan() const; - void setLightCyan(const QString& color); - - QString lightBlue() const; - void setLightBlue(const QString& color); - - QString pink() const; - void setPink(const QString& color); - - QString gray() const; - void setGray(const QString& color); - - QString lightGray() const; - void setLightGray(const QString& color); - -private: - friend class IrcTextFormat; - explicit IrcPalette(QObject* parent); - - QScopedPointer<IrcPalettePrivate> d_ptr; - Q_DECLARE_PRIVATE(IrcPalette) - Q_DISABLE_COPY(IrcPalette) -}; - -IRC_END_NAMESPACE - -Q_DECLARE_METATYPE(IRC_PREPEND_NAMESPACE(IrcPalette*)) - -#endif // IRCPALETTE_H diff --git a/src/libcommuni/include/IrcUtil/irctextformat.h b/src/libcommuni/include/IrcUtil/irctextformat.h deleted file mode 100644 index 5056b79..0000000 --- a/src/libcommuni/include/IrcUtil/irctextformat.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef IRCTEXTFORMAT_H -#define IRCTEXTFORMAT_H - -#include <IrcGlobal> -#include <QtCore/qurl.h> -#include <QtCore/qlist.h> -#include <QtCore/qobject.h> -#include <QtCore/qstring.h> -#include <QtCore/qmetatype.h> -#include <QtCore/qscopedpointer.h> - -IRC_BEGIN_NAMESPACE - -class IrcPalette; -class IrcTextFormatPrivate; - -class IRC_UTIL_EXPORT IrcTextFormat : public QObject -{ - Q_OBJECT - Q_PROPERTY(IrcPalette* palette READ palette CONSTANT) - Q_PROPERTY(QString urlPattern READ urlPattern WRITE setUrlPattern) - Q_PROPERTY(QString plainText READ plainText) - Q_PROPERTY(QString html READ html) - Q_PROPERTY(QList<QUrl> urls READ urls) - Q_ENUMS(SpanFormat) - -public: - explicit IrcTextFormat(QObject* parent = 0); - virtual ~IrcTextFormat(); - - IrcPalette* palette() const; - - QString urlPattern() const; - void setUrlPattern(const QString& pattern); - - enum SpanFormat { SpanStyle, SpanClass }; - - SpanFormat spanFormat() const; - void setSpanFormat(SpanFormat format); - - Q_INVOKABLE QString toHtml(const QString& text) const; - Q_INVOKABLE QString toPlainText(const QString& text) const; - - QString plainText() const; - QString html() const; - QList<QUrl> urls() const; - -public Q_SLOTS: - void parse(const QString& text); - -private: - QScopedPointer<IrcTextFormatPrivate> d_ptr; - Q_DECLARE_PRIVATE(IrcTextFormat) - Q_DISABLE_COPY(IrcTextFormat) -}; - -IRC_END_NAMESPACE - -Q_DECLARE_METATYPE(IRC_PREPEND_NAMESPACE(IrcTextFormat*)) -Q_DECLARE_METATYPE(IRC_PREPEND_NAMESPACE(IrcTextFormat::SpanFormat)) - -#endif // IRCTEXTFORMAT_H diff --git a/src/libcommuni/include/IrcUtil/irctoken_p.h b/src/libcommuni/include/IrcUtil/irctoken_p.h deleted file mode 100644 index 0e1b707..0000000 --- a/src/libcommuni/include/IrcUtil/irctoken_p.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef IRCTOKEN_P_H -#define IRCTOKEN_P_H - -#include "ircglobal.h" -#include <QtCore/qlist.h> -#include <QtCore/qstring.h> - -IRC_BEGIN_NAMESPACE - -class IrcToken -{ -public: - IrcToken() : idx(-1), pos(-1) { } - IrcToken(int index, int position, const QString& text) - : idx(index), pos(position), str(text) { } - - bool isValid() const { return idx != -1; } - int index() const { return idx; } - int position() const { return pos; } - int length() const { return str.length(); } - QString text() const { return str; } - -private: - int idx; - int pos; - QString str; - friend class IrcTokenizer; -}; - -class IrcTokenizer -{ -public: - IrcTokenizer(const QString& str = QString()); - - int count() const; - bool isEmpty() const; - QList<IrcToken> tokens() const; - IrcToken at(int index) const; - IrcTokenizer mid(int index) const; - - void clear(); - void replace(int index, const QString& text); - IrcToken find(int pos) const; - QString toString() const; - -private: - int len; - QList<IrcToken> t; -}; - -IRC_END_NAMESPACE - -#endif // IRCTOKEN_P_H diff --git a/src/libcommuni/include/IrcUtil/ircutil.h b/src/libcommuni/include/IrcUtil/ircutil.h deleted file mode 100644 index 6e39f18..0000000 --- a/src/libcommuni/include/IrcUtil/ircutil.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef IRCUTIL_H -#define IRCUTIL_H - -#include "irccommandparser.h" -#include "irccompleter.h" -#include "irclagtimer.h" -#include "ircpalette.h" -#include "irctextformat.h" - -IRC_BEGIN_NAMESPACE - -namespace IrcUtil { - void registerMetaTypes(); -} - -IRC_END_NAMESPACE - -#endif // IRCUTIL_H diff --git a/src/libcommuni/libcommuni.pro b/src/libcommuni/libcommuni.pro deleted file mode 100644 index 08b39b0..0000000 --- a/src/libcommuni/libcommuni.pro +++ /dev/null @@ -1,121 +0,0 @@ -######################################################################
-# Communi
-######################################################################
-
-TEMPLATE = subdirs
-SUBDIRS += src
-CONFIG += ordered
-
-!no_tests {
- SUBDIRS += tests
-} else {
- message(Tests disabled)
-}
-
-!no_examples {
- SUBDIRS += examples
-} else {
- message(Examples disabled)
-}
-
-lessThan(QT_MAJOR_VERSION, 5) {
- lessThan(QT_MAJOR_VERSION, 4) | lessThan(QT_MINOR_VERSION, 6) {
- error(Communi requires Qt 4.6 or newer but Qt $$[QT_VERSION] was detected.)
- }
- defineTest(write_file) {
- first = true
- for(line, $$2) {
- !isEmpty(first):system(echo $$line > $$1)
- else:system(echo $$line >> $$1)
- first =
- }
- return(true)
- }
-}
-
-static:CONFIG_LINES += "DEFINES+=IRC_STATIC"
-else:CONFIG_LINES += "DEFINES+=IRC_SHARED"
-
-include(version.pri)
-IRC_VERSION_MAJOR = $$section(IRC_VERSION, ., 0, 0)
-IRC_VERSION_MINOR = $$section(IRC_VERSION, ., 1, 1)
-IRC_VERSION_PATCH = $$section(IRC_VERSION, ., 2, 2)
-
-CONFIG_LINES += "IRC_VERSION=$$IRC_VERSION"
-CONFIG_LINES += "IRC_VERSION_MAJOR=$$IRC_VERSION_MAJOR"
-CONFIG_LINES += "IRC_VERSION_MINOR=$$IRC_VERSION_MINOR"
-CONFIG_LINES += "IRC_VERSION_PATCH=$$IRC_VERSION_PATCH"
-
-isEmpty(IRC_INSTALL_LIBS):IRC_INSTALL_LIBS = $$[QT_INSTALL_LIBS]
-isEmpty(IRC_INSTALL_BINS):IRC_INSTALL_BINS = $$[QT_INSTALL_BINS]
-isEmpty(IRC_INSTALL_HEADERS):IRC_INSTALL_HEADERS = $$[QT_INSTALL_HEADERS]/Communi
-isEmpty(IRC_INSTALL_FEATURES) {
- isEqual(QT_MAJOR_VERSION, 5):IRC_INSTALL_FEATURES = $$[QT_HOST_DATA]/mkspecs/features
- else:IRC_INSTALL_FEATURES = $$[QMAKE_MKSPECS]/features
-}
-
-# qt4/win: WARNING: Unescaped backslashes are deprecated
-!win32|greaterThan(QT_MAJOR_VERSION, 4) {
- CONFIG_LINES += "IRC_INSTALL_LIBS=$$IRC_INSTALL_LIBS"
- CONFIG_LINES += "IRC_INSTALL_BINS=$$IRC_INSTALL_BINS"
- CONFIG_LINES += "IRC_INSTALL_HEADERS=$$IRC_INSTALL_HEADERS"
- CONFIG_LINES += "IRC_INSTALL_FEATURES=$$IRC_INSTALL_FEATURES"
-}
-
-IRC_CONFIG = $${OUT_PWD}$${QMAKE_DIR_SEP}communi-config.prf
-write_file($$IRC_CONFIG, CONFIG_LINES)
-
-CONFIG_VARS = $${OUT_PWD}$${QMAKE_DIR_SEP}.config.vars
-exists($$CONFIG_VARS) {
- CONFIG_LINES += "include\\\($$CONFIG_VARS\\\)"
-}
-QMAKE_CACHE = $${OUT_PWD}$${QMAKE_DIR_SEP}.qmake.cache
-write_file($$QMAKE_CACHE, CONFIG_LINES)
-
-OTHER_FILES += .gitignore
-OTHER_FILES += .travis.yml
-OTHER_FILES += AUTHORS
-OTHER_FILES += CHANGELOG
-OTHER_FILES += configure
-OTHER_FILES += Doxyfile
-OTHER_FILES += INSTALL
-OTHER_FILES += LICENSE
-OTHER_FILES += README
-OTHER_FILES += features/communi.prf
-
-include(doc/doc.pri)
-
-features.files += features/communi.prf
-features.files += $$OUT_PWD/communi-config.prf
-features.path = $$IRC_INSTALL_FEATURES
-INSTALLS += features
-
-!build_pass {
- macx {
- !qt_no_framework {
- message(Building Communi $$IRC_VERSION (framework))
- } else {
- message(Building Communi $$IRC_VERSION (dylib))
- }
- } else {
- message(Building Communi $$IRC_VERSION)
- }
-}
-
-coverage {
- cov_zerocounters.CONFIG += recursive
- cov_zerocounters.recurse = src
- QMAKE_EXTRA_TARGETS += cov_zerocounters
-
- cov_capture.CONFIG += recursive
- cov_capture.recurse = src
- QMAKE_EXTRA_TARGETS += cov_capture
-
- cov_genhtml.CONFIG += recursive
- cov_genhtml.recurse = src
- QMAKE_EXTRA_TARGETS += cov_genhtml
-
- coverage.depends += first cov_zerocounters check cov_capture cov_genhtml
- QMAKE_EXTRA_TARGETS += coverage
- !build_pass:message(Code coverage collection enabled)
-}
diff --git a/src/libcommuni/src/3rdparty/icu/icu.pri b/src/libcommuni/src/3rdparty/icu/icu.pri deleted file mode 100644 index 352c218..0000000 --- a/src/libcommuni/src/3rdparty/icu/icu.pri +++ /dev/null @@ -1,44 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -include(../pkg.pri) - -pkgExists(icu) { - CONFIG += link_pkgconfig - PKGCONFIG += icu -} else:pkgExists(icu-i18n) { - CONFIG += link_pkgconfig - PKGCONFIG += icu-i18n -} - -isEmpty(PKGCONFIG) { - win32 { - isEmpty(ICU_DIR):ICU_DIR = $$(ICU_DIR) - isEmpty(ICU_DIR):ICU_DIR = C:/ICU - !build_pass { - !exists($$ICU_DIR) { - error("ICU support has been enabled, but the ICU installation \ - has not been found at $${ICU_DIR}. Please download and \ - install ICU from http://icu-project.org and/or specify \ - ICU_DIR to match the installation location.") - } else { - message("Using ICU from $${ICU_DIR}") - } - } - INCLUDEPATH += $$ICU_DIR/include - contains(QMAKE_TARGET.arch, x86_64):LIBS += -L$$ICU_DIR/lib64 - else:LIBS += -L$$ICU_DIR/lib - LIBS += -licuuc - - # icudata vs. icudt - exists($$ICU_DIR/bin/icudata*.dll):LIBS += -licudata - else:LIBS += -licudt - - # icui18n vs. icuin - exists($$ICU_DIR/bin/icui18n*.dll):LIBS += -licui18n - else:LIBS += -licuin - } else { - LIBS += -licui18n -licudata -licuuc - } -} diff --git a/src/libcommuni/src/3rdparty/mozilla/mozilla.pri b/src/libcommuni/src/3rdparty/mozilla/mozilla.pri deleted file mode 100644 index 3e279d9..0000000 --- a/src/libcommuni/src/3rdparty/mozilla/mozilla.pri +++ /dev/null @@ -1,5 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -SOURCES += $$PWD/rdf_utils.c diff --git a/src/libcommuni/src/3rdparty/mozilla/rdf_utils.c b/src/libcommuni/src/3rdparty/mozilla/rdf_utils.c deleted file mode 100644 index c1329f7..0000000 --- a/src/libcommuni/src/3rdparty/mozilla/rdf_utils.c +++ /dev/null @@ -1,132 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- - * - * ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -/* - This file implements utility routines for the rdf data model. - For more information on this file, contact rjc or guha - For more information on RDF, look at the RDF section of www.mozilla.org -*/ - -#define kLeft1BitMask 0x80 -#define kLeft2BitsMask 0xC0 -#define kLeft3BitsMask 0xE0 -#define kLeft4BitsMask 0xF0 -#define kLeft5BitsMask 0xF8 -#define kLeft6BitsMask 0xFC -#define kLeft7BitsMask 0xFE - -#define k2BytesLeadByte kLeft2BitsMask -#define k3BytesLeadByte kLeft3BitsMask -#define k4BytesLeadByte kLeft4BitsMask -#define k5BytesLeadByte kLeft5BitsMask -#define k6BytesLeadByte kLeft6BitsMask -#define kTrialByte kLeft1BitMask - -#define UTF8_1Byte(c) ( 0 == ((c) & kLeft1BitMask)) -#define UTF8_2Bytes(c) ( k2BytesLeadByte == ((c) & kLeft3BitsMask)) -#define UTF8_3Bytes(c) ( k3BytesLeadByte == ((c) & kLeft4BitsMask)) -#define UTF8_4Bytes(c) ( k4BytesLeadByte == ((c) & kLeft5BitsMask)) -#define UTF8_5Bytes(c) ( k5BytesLeadByte == ((c) & kLeft6BitsMask)) -#define UTF8_6Bytes(c) ( k6BytesLeadByte == ((c) & kLeft7BitsMask)) -#define UTF8_ValidTrialByte(c) ( kTrialByte == ((c) & kLeft2BitsMask)) - -int IsUTF8Text(const unsigned char* utf8, int len) -{ - int i; - int j; - int clen; - for(i =0; i < len; i += clen) - { - if(UTF8_1Byte(utf8[i])) - { - clen = 1; - } else if(UTF8_2Bytes(utf8[i])) { - clen = 2; - /* No enough trail bytes */ - if( (i + clen) > len) - return 0; - /* 0000 0000 - 0000 007F : should encode in less bytes */ - if(0 == (utf8[i] & 0x1E )) - return 0; - } else if(UTF8_3Bytes(utf8[i])) { - clen = 3; - /* No enough trail bytes */ - if( (i + clen) > len) - return 0; - /* a single Surrogate should not show in 3 bytes UTF8, instead, the pair should be intepreted - as one single UCS4 char and encoded UTF8 in 4 bytes */ - if((0xED == utf8[i] ) && (0xA0 == (utf8[i+1] & 0xA0 ) )) - return 0; - /* 0000 0000 - 0000 07FF : should encode in less bytes */ - if((0 == (utf8[i] & 0x0F )) && (0 == (utf8[i+1] & 0x20 ) )) - return 0; - } else if(UTF8_4Bytes(utf8[i])) { - clen = 4; - /* No enough trail bytes */ - if( (i + clen) > len) - return 0; - /* 0000 0000 - 0000 FFFF : should encode in less bytes */ - if((0 == (utf8[i] & 0x07 )) && (0 == (utf8[i+1] & 0x30 )) ) - return 0; - } else if(UTF8_5Bytes(utf8[i])) { - clen = 5; - /* No enough trail bytes */ - if( (i + clen) > len) - return 0; - /* 0000 0000 - 001F FFFF : should encode in less bytes */ - if((0 == (utf8[i] & 0x03 )) && (0 == (utf8[i+1] & 0x38 )) ) - return 0; - } else if(UTF8_6Bytes(utf8[i])) { - clen = 6; - /* No enough trail bytes */ - if( (i + clen) > len) - return 0; - /* 0000 0000 - 03FF FFFF : should encode in less bytes */ - if((0 == (utf8[i] & 0x01 )) && (0 == (utf8[i+1] & 0x3E )) ) - return 0; - } else { - return 0; - } - for(j = 1; j<clen ;j++) - { - if(! UTF8_ValidTrialByte(utf8[i+j])) /* Trail bytes invalid */ - return 0; - } - } - return 1; -} diff --git a/src/libcommuni/src/3rdparty/pkg.pri b/src/libcommuni/src/3rdparty/pkg.pri deleted file mode 100644 index 53715fb..0000000 --- a/src/libcommuni/src/3rdparty/pkg.pri +++ /dev/null @@ -1,10 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -defineTest(pkgExists) { - contains(QT_CONFIG, no-pkg-config):return(false) - isEmpty(PKG_CONFIG):PKG_CONFIG = pkg-config - unix:system($$PKG_CONFIG --exists $$1 2> /dev/null):return(true) - return(false) -} diff --git a/src/libcommuni/src/3rdparty/qblowfish/LICENSE b/src/libcommuni/src/3rdparty/qblowfish/LICENSE deleted file mode 100644 index db148cb..0000000 --- a/src/libcommuni/src/3rdparty/qblowfish/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -QBlowfish is licensed under the MIT License - -Copyright © 2012 Roopesh Chander <roop@forwardbias.in> - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject -to the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS -BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/src/libcommuni/src/3rdparty/qblowfish/README.md b/src/libcommuni/src/3rdparty/qblowfish/README.md deleted file mode 100644 index fb961bb..0000000 --- a/src/libcommuni/src/3rdparty/qblowfish/README.md +++ /dev/null @@ -1,28 +0,0 @@ -# QBlowfish - -QBlowfish is a [Qt](http://qt.nokia.com/) implementation of the [Blowfish](http://www.schneier.com/blowfish.html) encryption algorithm, as described in the original Blowfish [paper](http://www.schneier.com/paper-blowfish-fse.html) by Bruce Schneier. - -The Blowfish algorithm requires the input in 8-byte blocks. To simplify usage, QBlowfish can optionally add [PKCS5 padding](http://tools.ietf.org/html/rfc5652#section-6.3) to the input data. (For example, if the input is only 60 bytes long, 4 bytes will be padded to bring the bytecount to a multiple of 8.) When padding is enabled during decryption, QBlowfish will also remove the padded bytes from the output. - -You only need to add 3 files (src/*) to your project. You can then use the QBlowfish class to encrypt and decrypt stuff. - - QByteArray secretKey("This is a secret") - QString clearText("Stuff to encrypt"); - - QBlowfish bf(secretKey); - bf.setPaddingEnabled(true); - QByteArray encryptedBa = bf.encrypted(clearText.toUtf8()); - -A more detailed example is included in the repo. - -QBlowfish is not optimized for speed. It processes the data in bytes (most other Blowfish implementations seem to work on 4-byte words) and is endianness-agnostic. - -### Tests - -Unit tests are written using QTestLib. Tests include [the official test vectors](http://www.schneier.com/code/vectors.txt). - -QBlowfish has been tested with Qt 4.8 on Windows and Linux. - -### License - -QBlowfish is published under the MIT license. diff --git a/src/libcommuni/src/3rdparty/qblowfish/qblowfish.cpp b/src/libcommuni/src/3rdparty/qblowfish/qblowfish.cpp deleted file mode 100644 index 605ff24..0000000 --- a/src/libcommuni/src/3rdparty/qblowfish/qblowfish.cpp +++ /dev/null @@ -1,277 +0,0 @@ -/* - This file is part of QBlowfish and is licensed under the MIT License - - Copyright (C) 2012 Roopesh Chander <roop@forwardbias.in> - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject - to the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS - BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. -*/ - -#include "qblowfish.h" -#include "qblowfish_p.h" -#include <QtEndian> -#include <QDebug> - -QBlowfish::QBlowfish(const QByteArray &key) - : m_key(key) - , m_initialized(false) - , m_paddingEnabled(false) -{ -} - -void QBlowfish::setPaddingEnabled(bool enabled) -{ - m_paddingEnabled = enabled; -} - -bool QBlowfish::isPaddingEnabled() const -{ - return m_paddingEnabled; -} - -QByteArray QBlowfish::encrypted(const QByteArray &_clearText) -{ - QByteArray clearText(_clearText); - if (clearText.isEmpty()) { - return QByteArray(); - } - - if (isPaddingEnabled()) { - // Add padding as per PKCS5 - // Ref: RFC 5652 http://tools.ietf.org/html/rfc5652#section-6.3 - quint8 paddingLength = 8 - (clearText.size() % 8); - QByteArray paddingBa(paddingLength, static_cast<char>(paddingLength)); - clearText.append(paddingBa); - } else { - if (clearText.size() % 8 != 0) { - qWarning("Cannot encrypt. Clear-text length is not a multiple of 8 and padding is not enabled."); - return QByteArray(); - } - } - - Q_ASSERT(clearText.size() % 8 == 0); - if ((clearText.size() % 8 == 0) && init()) { - - QByteArray copyBa(clearText.constData(), clearText.size()); - for (int i = 0; i < clearText.size(); i += 8) { - coreEncrypt(copyBa.data() + i); - } - return copyBa; - - } - return QByteArray(); -} - -QByteArray QBlowfish::decrypted(const QByteArray &cipherText) -{ - if (cipherText.isEmpty()) { - return QByteArray(); - } - - Q_ASSERT(cipherText.size() % 8 == 0); - if ((cipherText.size() % 8 == 0) && init()) { - - QByteArray copyBa(cipherText.constData(), cipherText.size()); - for (int i = 0; i < cipherText.size(); i += 8) { - coreDecrypt(copyBa.data() + i); - } - - if (isPaddingEnabled()) { - // Remove padding as per PKCS5 - quint8 paddingLength = static_cast<quint8>(copyBa.right(1).at(0)); - QByteArray paddingBa(paddingLength, static_cast<char>(paddingLength)); - if (copyBa.right(paddingLength) == paddingBa) { - return copyBa.left(copyBa.length() - paddingLength); - } - return QByteArray(); - } - return copyBa; - } - return QByteArray(); -} - -/* - Core encryption code follows. This is an implementation of the Blowfish algorithm as described at: - http://www.schneier.com/paper-blowfish-fse.html -*/ - -bool QBlowfish::init() -{ - if (m_initialized) { - return true; - } - - if (m_key.isEmpty()) { - qWarning("Cannot init. Key is empty."); - return false; - } - - m_sbox1 = QByteArray::fromHex(QByteArray::fromRawData(sbox0, SBOX_SIZE_BYTES * 2)); - m_sbox2 = QByteArray::fromHex(QByteArray::fromRawData(sbox1, SBOX_SIZE_BYTES * 2)); - m_sbox3 = QByteArray::fromHex(QByteArray::fromRawData(sbox2, SBOX_SIZE_BYTES * 2)); - m_sbox4 = QByteArray::fromHex(QByteArray::fromRawData(sbox3, SBOX_SIZE_BYTES * 2)); - m_parray = QByteArray::fromHex(QByteArray::fromRawData(parray, PARRAY_SIZE_BYTES * 2)); - - const QByteArray &key = m_key; - int keyLength = key.length(); - for (int i = 0; i < PARRAY_SIZE_BYTES; i++) { - m_parray[i] = static_cast<char>(static_cast<quint8>(m_parray[i]) ^ static_cast<quint8>(key[i % keyLength])); - } - - char seed[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }; - - // Update p-array - for (int i = 0; i < (PARRAY_SIZE_BYTES / 4); i += 2) { - coreEncrypt(seed); - for (int j = 0; j < 8; j++) { - // P1 = xL; P2 = xR - m_parray[i * 4 + j] = seed[j]; - } - } - - // Update s-boxes - for (int sboxIndex = 1; sboxIndex <= 4; sboxIndex++) { - QByteArray *sbox = 0; - switch (sboxIndex) { - case 1: sbox = &m_sbox1; break; - case 2: sbox = &m_sbox2; break; - case 3: sbox = &m_sbox3; break; - case 4: sbox = &m_sbox4; break; - default: Q_ASSERT(false); - } - Q_ASSERT(sbox != 0); - - for (int i = 0; i < (SBOX_SIZE_BYTES / 4); i += 2) { - coreEncrypt(seed); - for (int j = 0; j < 8; j++) { - // S1,1 = xL; S1,2 = xR - sbox->operator[](i * 4 + j) = seed[j]; - } - } - } - - m_initialized = true; - return true; -} - -void QBlowfish::coreEncrypt(char *x) // encrypts 8 bytes pointed to by x, result is written to the same location -{ - // Divide x into two 32-bit halves: xL, xR - char *xL = x; - char *xR = x + 4; - uchar f_xL_bytes[4] = { 0, 0, 0, 0 }; - - for (int i = 0; i < 16; i++) { - - // xL = xL XOR Pi - for (int j = 0; j < 4; j++) { - // quint8 old_xL = xL[j]; - xL[j] = static_cast<char>(static_cast<quint8>(xL[j]) ^ static_cast<quint8>(m_parray[i * 4 + j])); - } - - // Divide xL into four eight-bit quarters: a, b, c, and d - quint8 a = static_cast<quint8>(xL[0]); - quint8 b = static_cast<quint8>(xL[1]); - quint8 c = static_cast<quint8>(xL[2]); - quint8 d = static_cast<quint8>(xL[3]); - - // F(xL) = ((S1,a + S2,b mod 2**32) XOR S3,c) + S4,d mod 2**32 - quint32 s1a = qFromBigEndian<quint32>(reinterpret_cast<const uchar *>(m_sbox1.constData() + a * 4)); - quint32 s2b = qFromBigEndian<quint32>(reinterpret_cast<const uchar *>(m_sbox2.constData() + b * 4)); - quint32 s3c = qFromBigEndian<quint32>(reinterpret_cast<const uchar *>(m_sbox3.constData() + c * 4)); - quint32 s4d = qFromBigEndian<quint32>(reinterpret_cast<const uchar *>(m_sbox4.constData() + d * 4)); - quint32 f_xL = ((((s1a + s2b) & 0xffffffff) ^ s3c) + s4d) & 0xffffffff; - qToBigEndian<quint32>(f_xL, f_xL_bytes); - - // xR = F(xL) XOR xR - for (int j = 0; j < 4; j++) { - xR[j] = static_cast<char>(static_cast<quint8>(f_xL_bytes[j]) ^ static_cast<quint8>(xR[j])); - } - - // Swap xL and xR, but not in the last iteration - if (i != 15) { - for (int j = 0; j < 4; j++) { - char temp = xL[j]; - xL[j] = xR[j]; - xR[j] = temp; - } - } - - } - - // xR = xR XOR P17 - // xL = xL XOR P18 - for (int j = 0; j < 4; j++) { - xR[j] = static_cast<char>(static_cast<quint8>(xR[j]) ^ static_cast<quint8>(m_parray[16 * 4 + j])); - xL[j] = static_cast<char>(static_cast<quint8>(xL[j]) ^ static_cast<quint8>(m_parray[17 * 4 + j])); - } -} - -void QBlowfish::coreDecrypt(char *x) // decrypts 8 bytes pointed to by x, result is written to the same location -{ - // Divide x into two 32-bit halves: xL, xR - char *xL = x; - char *xR = x + 4; - uchar f_xL_bytes[4] = { 0, 0, 0, 0 }; - - // xL = xL XOR P18 - // xR = xR XOR P17 - for (int j = 0; j < 4; j++) { - xL[j] = static_cast<char>(static_cast<quint8>(xL[j]) ^ static_cast<quint8>(m_parray[17 * 4 + j])); - xR[j] = static_cast<char>(static_cast<quint8>(xR[j]) ^ static_cast<quint8>(m_parray[16 * 4 + j])); - } - - for (int i = 15; i >= 0; i--) { - - // Swap xL and xR, but not in the first iteration - if (i != 15) { - for (int j = 0; j < 4; j++) { - char temp = xL[j]; - xL[j] = xR[j]; - xR[j] = temp; - } - } - - // Divide xL into four eight-bit quarters: a, b, c, and d - quint8 a = static_cast<quint8>(xL[0]); - quint8 b = static_cast<quint8>(xL[1]); - quint8 c = static_cast<quint8>(xL[2]); - quint8 d = static_cast<quint8>(xL[3]); - - // F(xL) = ((S1,a + S2,b mod 2**32) XOR S3,c) + S4,d mod 2**32 - quint32 s1a = qFromBigEndian<quint32>(reinterpret_cast<const uchar *>(m_sbox1.constData() + a * 4)); - quint32 s2b = qFromBigEndian<quint32>(reinterpret_cast<const uchar *>(m_sbox2.constData() + b * 4)); - quint32 s3c = qFromBigEndian<quint32>(reinterpret_cast<const uchar *>(m_sbox3.constData() + c * 4)); - quint32 s4d = qFromBigEndian<quint32>(reinterpret_cast<const uchar *>(m_sbox4.constData() + d * 4)); - quint32 f_xL = ((((s1a + s2b) & 0xffffffff) ^ s3c) + s4d) & 0xffffffff; - qToBigEndian<quint32>(f_xL, f_xL_bytes); - - // xR = F(xL) XOR xR - for (int j = 0; j < 4; j++) { - xR[j] = static_cast<char>(static_cast<quint8>(f_xL_bytes[j]) ^ static_cast<quint8>(xR[j])); - } - - // xL = xL XOR Pi - for (int j = 0; j < 4; j++) { - xL[j] = static_cast<char>(static_cast<quint8>(xL[j]) ^ static_cast<quint8>(m_parray[i * 4 + j])); - } - - } -} diff --git a/src/libcommuni/src/3rdparty/qblowfish/qblowfish.h b/src/libcommuni/src/3rdparty/qblowfish/qblowfish.h deleted file mode 100644 index 100a2e6..0000000 --- a/src/libcommuni/src/3rdparty/qblowfish/qblowfish.h +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef QBLOWFISH_H -#define QBLOWFISH_H - -#include <QByteArray> - -class QBlowfish -{ -public: - QBlowfish(const QByteArray &key); - bool init(); - - // Padding: - // - // Blowfish works on 8-byte blocks. Padding makes it usable even - // in case where the input size is not in exact 8-byte blocks. - // - // If padding is disabled (the default), encrypted() will work only if the - // input size (in bytes) is a multiple of 8. (If it's not a multiple of 8, - // encrypted() will return a null bytearray.) - // - // If padding is enabled, we increase the input length to a multiple of 8 - // by padding bytes as per PKCS5 - // - // If padding was enabled during encryption, it should be enabled during - // decryption for correct decryption (and vice versa). - - void setPaddingEnabled(bool enabled); - bool isPaddingEnabled() const; - - // Encrypt / decrypt - QByteArray encrypted(const QByteArray &clearText); - QByteArray decrypted(const QByteArray &cipherText); - -private: - // core encrypt/decrypt methods, encrypts/decrypts in-place - void coreEncrypt(char *x); - void coreDecrypt(char *x); - - QByteArray m_key; - bool m_initialized; - bool m_paddingEnabled; - QByteArray m_parray; - QByteArray m_sbox1, m_sbox2, m_sbox3, m_sbox4; -}; - -#endif // QBLOWFISH_H diff --git a/src/libcommuni/src/3rdparty/qblowfish/qblowfish.pri b/src/libcommuni/src/3rdparty/qblowfish/qblowfish.pri deleted file mode 100644 index 5d01670..0000000 --- a/src/libcommuni/src/3rdparty/qblowfish/qblowfish.pri +++ /dev/null @@ -1,11 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -INCLUDEPATH += $$PWD -DEPENDPATH += $$PWD - -HEADERS += $$PWD/qblowfish.h -HEADERS += $$PWD/qblowfish_p.h - -SOURCES += $$PWD/qblowfish.cpp diff --git a/src/libcommuni/src/3rdparty/qblowfish/qblowfish_p.h b/src/libcommuni/src/3rdparty/qblowfish/qblowfish_p.h deleted file mode 100644 index 3e15083..0000000 --- a/src/libcommuni/src/3rdparty/qblowfish/qblowfish_p.h +++ /dev/null @@ -1,201 +0,0 @@ -/* - Source: http://www.schneier.com/code/constants.txt -*/ - -#ifndef Q_BLOWFISH_P_H -#define Q_BLOWFISH_P_H - -#define SBOX_SIZE_BYTES (256 * 4) -#define PARRAY_SIZE_BYTES (18 * 4) - -char sbox0[] = - "d1310ba698dfb5ac2ffd72dbd01adfb7b8e1afed6a267e96" - "ba7c9045f12c7f9924a19947b3916cf70801f2e2858efc16" - "636920d871574e69a458fea3f4933d7e0d95748f728eb658" - "718bcd5882154aee7b54a41dc25a59b59c30d5392af26013" - "c5d1b023286085f0ca417918b8db38ef8e79dcb0603a180e" - "6c9e0e8bb01e8a3ed71577c1bd314b2778af2fda55605c60" - "e65525f3aa55ab945748986263e8144055ca396a2aab10b6" - "b4cc5c341141e8cea15486af7c72e993b3ee1411636fbc2a" - "2ba9c55d741831f6ce5c3e169b87931eafd6ba336c24cf5c" - "7a325381289586773b8f48986b4bb9afc4bfe81b66282193" - "61d809ccfb21a991487cac605dec8032ef845d5de98575b1" - "dc262302eb651b8823893e81d396acc50f6d6ff383f44239" - "2e0b4482a484200469c8f04a9e1f9b5e21c66842f6e96c9a" - "670c9c61abd388f06a51a0d2d8542f68960fa728ab5133a3" - "6eef0b6c137a3be4ba3bf0507efb2a98a1f1651d39af0176" - "66ca593e82430e888cee8619456f9fb47d84a5c33b8b5ebe" - "e06f75d885c12073401a449f56c16aa64ed3aa62363f7706" - "1bfedf72429b023d37d0d724d00a1248db0fead349f1c09b" - "075372c980991b7b25d479d8f6e8def7e3fe501ab6794c3b" - "976ce0bd04c006bac1a94fb6409f60c45e5c9ec2196a2463" - "68fb6faf3e6c53b51339b2eb3b52ec6f6dfc511f9b30952c" - "cc814544af5ebd09bee3d004de334afd660f2807192e4bb3" - "c0cba85745c8740fd20b5f39b9d3fbdb5579c0bd1a60320a" - "d6a100c6402c7279679f25fefb1fa3cc8ea5e9f8db3222f8" - "3c7516dffd616b152f501ec8ad0552ab323db5fafd238760" - "53317b483e00df829e5c57bbca6f8ca01a87562edf1769db" - "d542a8f6287effc3ac6732c68c4f5573695b27b0bbca58c8" - "e1ffa35db8f011a010fa3d98fd2183b84afcb56c2dd1d35b" - "9a53e479b6f84565d28e49bc4bfb9790e1ddf2daa4cb7e33" - "62fb1341cee4c6e8ef20cada36774c01d07e9efe2bf11fb4" - "95dbda4dae909198eaad8e716b93d5a0d08ed1d0afc725e0" - "8e3c5b2f8e7594b78ff6e2fbf2122b648888b812900df01c" - "4fad5ea0688fc31cd1cff191b3a8c1ad2f2f2218be0e1777" - "ea752dfe8b021fa1e5a0cc0fb56f74e818acf3d6ce89e299" - "b4a84fe0fd13e0b77cc43b81d2ada8d9165fa26680957705" - "93cc7314211a1477e6ad206577b5fa86c75442f5fb9d35cf" - "ebcdaf0c7b3e89a0d6411bd3ae1e7e4900250e2d2071b35e" - "226800bb57b8e0af2464369bf009b91e5563911d59dfa6aa" - "78c14389d95a537f207d5ba202e5b9c5832603766295cfa9" - "11c819684e734a41b3472dca7b14a94a1b5100529a532915" - "d60f573fbc9bc6e42b60a47681e6740008ba6fb5571be91f" - "f296ec6b2a0dd915b6636521e7b9f9b6ff34052ec5855664" - "53b02d5da99f8fa108ba47996e85076a" -; - -char sbox1[] = - "4b7a70e9b5b32944db75092ec4192623ad6ea6b049a7df7d" - "9cee60b88fedb266ecaa8c71699a17ff5664526cc2b19ee1" - "193602a575094c29a0591340e4183a3e3f54989a5b429d65" - "6b8fe4d699f73fd6a1d29c07efe830f54d2d38e6f0255dc1" - "4cdd20868470eb266382e9c6021ecc5e09686b3f3ebaefc9" - "3c9718146b6a70a1687f358452a0e286b79c5305aa500737" - "3e07841c7fdeae5c8e7d44ec5716f2b8b03ada37f0500c0d" - "f01c1f040200b3ffae0cf51a3cb574b225837a58dc0921bd" - "d19113f97ca92ff69432477322f547013ae5e58137c2dadc" - "c8b576349af3dda7a94461460fd0030eecc8c73ea4751e41" - "e238cd993bea0e2f3280bba1183eb3314e548b384f6db908" - "6f420d03f60a04bf2cb8129024977c795679b072bcaf89af" - "de9a771fd9930810b38bae12dccf3f2e5512721f2e6b7124" - "501adde69f84cd877a5847187408da17bc9f9abce94b7d8c" - "ec7aec3adb851dfa63094366c464c3d2ef1c18473215d908" - "dd433b3724c2ba1612a14d432a65c45150940002133ae4dd" - "71dff89e10314e5581ac77d65f11199b043556f1d7a3c76b" - "3c11183b5924a509f28fe6ed97f1fbfa9ebabf2c1e153c6e" - "86e34570eae96fb1860e5e0a5a3e2ab3771fe71c4e3d06fa" - "2965dcb999e71d0f803e89d65266c8252e4cc9789c10b36a" - "c6150eba94e2ea78a5fc3c531e0a2df4f2f74ea7361d2b3d" - "1939260f19c279605223a708f71312b6ebadfe6eeac31f66" - "e3bc4595a67bc883b17f37d1018cff28c332ddefbe6c5aa5" - "6558218568ab9802eecea50fdb2f953b2aef7dad5b6e2f84" - "1521b62829076170ecdd4775619f151013cca830eb61bd96" - "0334fe1eaa0363cfb5735c904c70a239d59e9e0bcbaade14" - "eecc86bc60622ca79cab5cabb2f3846e648b1eaf19bdf0ca" - "a02369b9655abb5040685a323c2ab4b3319ee9d5c021b8f7" - "9b540b19875fa09995f7997e623d7da8f837889a97e32d77" - "11ed935f166812810e358829c7e61fd696dedfa17858ba99" - "57f584a51b2272639b83c3ff1ac24696cdb30aeb532e3054" - "8fd948e46dbc312858ebf2ef34c6ffeafe28ed61ee7c3c73" - "5d4a14d9e864b7e342105d14203e13e045eee2b6a3aaabea" - "db6c4f15facb4fd0c742f442ef6abbb5654f3b1d41cd2105" - "d81e799e86854dc7e44b476a3d816250cf62a1f25b8d2646" - "fc8883a0c1c7b6a37f1524c369cb749247848a0b5692b285" - "095bbf00ad19489d1462b17423820e0058428d2a0c55f5ea" - "1dadf43e233f70613372f0928d937e41d65fecf16c223bdb" - "7cde3759cbee74604085f2a7ce77326ea607808419f8509e" - "e8efd85561d99735a969a7aac50c06c25a04abfc800bcadc" - "9e447a2ec3453484fdd567050e1e9ec9db73dbd3105588cd" - "675fda79e3674340c5c43465713e38d83d28f89ef16dff20" - "153e21e78fb03d4ae6e39f2bdb83adf7" -; - -char sbox2[] = - "e93d5a68948140f7f64c261c94692934411520f77602d4f7" - "bcf46b2ed4a20068d40824713320f46a43b7d4b7500061af" - "1e39f62e9724454614214f74bf8b88404d95fc1d96b591af" - "70f4ddd366a02f45bfbc09ec03bd97857fac6dd031cb8504" - "96eb27b355fd3941da2547e6abca0a9a28507825530429f4" - "0a2c86dae9b66dfb68dc1462d7486900680ec0a427a18dee" - "4f3ffea2e887ad8cb58ce0067af4d6b6aace1e7cd3375fec" - "ce78a399406b2a4220fe9e35d9f385b9ee39d7ab3b124e8b" - "1dc9faf74b6d185626a36631eae397b23a6efa74dd5b4332" - "6841e7f7ca7820fbfb0af54ed8feb397454056acba489527" - "55533a3a20838d87fe6ba9b7d096954b55a867bca1159a58" - "cca9296399e1db33a62a4a563f3125f95ef47e1c9029317c" - "fdf8e80204272f7080bb155c05282ce395c11548e4c66d22" - "48c1133fc70f86dc07f9c9ee41041f0f404779a45d886e17" - "325f51ebd59bc0d1f2bcc18f41113564257b7834602a9c60" - "dff8e8a31f636c1b0e12b4c202e1329eaf664fd1cad18115" - "6b2395e0333e92e13b240b62eebeb92285b2a20ee6ba0d99" - "de720c8c2da2f728d012784595b794fd647d0862e7ccf5f0" - "5449a36f877d48fac39dfd27f33e8d1e0a476341992eff74" - "3a6f6eabf4f8fd37a812dc60a1ebddf8991be14cdb6e6b0d" - "c67b55106d672c372765d43bdcd0e804f1290dc7cc00ffa3" - "b5390f92690fed0b667b9ffbcedb7d9ca091cf0bd9155ea3" - "bb132f88515bad247b9479bf763bd6eb37392eb3cc115979" - "8026e297f42e312d6842ada7c66a2b3b12754ccc782ef11c" - "6a124237b79251e706a1bbe64bfb63501a6b101811caedfa" - "3d25bdd8e2e1c3c9444216590a121386d90cec6ed5abea2a" - "64af674eda86a85fbebfe98864e4c3fe9dbc8057f0f7c086" - "60787bf86003604dd1fd8346f6381fb07745ae04d736fccc" - "83426b33f01eab71b08041873c005e5f77a057bebde8ae24" - "55464299bf582e614e58f48ff2ddfda2f474ef388789bdc2" - "5366f9c3c8b38e74b475f25546fcd9b97aeb26618b1ddf84" - "846a0e79915f95e2466e598e20b457708cd55591c902de4c" - "b90bace1bb8205d011a862487574a99eb77f19b6e0a9dc09" - "662d09a1c4324633e85a1f0209f0be8c4a99a0251d6efe10" - "1ab93d1d0ba5a4dfa186f20f2868f169dcb7da83573906fe" - "a1e2ce9b4fcd7f5250115e01a70683faa002b5c40de6d027" - "9af88c27773f8641c3604c0661a806b5f0177a28c0f586e0" - "006058aa30dc7d6211e69ed72338ea6353c2dd94c2c21634" - "bbcbee5690bcb6deebfc7da1ce591d766f05e4094b7c0188" - "39720a3d7c927c2486e3725f724d9db91ac15bb4d39eb8fc" - "ed54557808fca5b5d83d7cd34dad0fc41e50ef5eb161e6f8" - "a28514d96c51133c6fd5c7e756e14ec4362abfceddc6c837" - "d79a323492638212670efa8e406000e0" -; - -char sbox3[] = - "3a39ce37d3faf5cfabc277375ac52d1b5cb0679e4fa33742" - "d382274099bc9bbed5118e9dbf0f7315d62d1c7ec700c47b" - "b78c1b6b21a19045b26eb1be6a366eb45748ab2fbc946e79" - "c6a376d26549c2c8530ff8ee468dde7dd5730a1d4cd04dc6" - "2939bbdba9ba4650ac9526e8be5ee304a1fad5f06a2d519a" - "63ef8ce29a86ee22c089c2b843242ef6a51e03aa9cf2d0a4" - "83c061ba9be96a4d8fe51550ba645bd62826a2f9a73a3ae1" - "4ba99586ef5562e9c72fefd3f752f7da3f046f6977fa0a59" - "80e4a91587b086019b09e6ad3b3ee593e990fd5a9e34d797" - "2cf0b7d9022b8b5196d5ac3a017da67dd1cf3ed67c7d2d28" - "1f9f25cfadf2b89b5ad6b4725a88f54ce029ac71e019a5e6" - "47b0acfded93fa9be8d3c48d283b57ccf8d5662979132e28" - "785f0191ed756055f7960e44e3d35e8c15056dd488f46dba" - "03a161250564f0bdc3eb9e153c9057a297271aeca93a072a" - "1b3f6d9b1e6321f5f59c66fb26dcf3197533d928b155fdf5" - "035634828aba3cbb28517711c20ad9f8abcc5167ccad925f" - "4de817513830dc8e379d58629320f991ea7a90c2fb3e7bce" - "5121ce64774fbe32a8b6e37ec3293d4648de53696413e680" - "a2ae0810dd6db22469852dfd09072166b39a460a6445c0dd" - "586cdecf1c20c8ae5bbef7dd1b588d40ccd2017f6bb4e3bb" - "dda26a7e3a59ff453e350a44bcb4cdd572eacea8fa6484bb" - "8d6612aebf3c6f47d29be463542f5d9eaec2771bf64e6370" - "740e0d8de75b1357f8721671af537d5d4040cb084eb4e2cc" - "34d2466a0115af84e1b0042895983a1d06b89fb4ce6ea048" - "6f3f3b823520ab82011a1d4b277227f8611560b1e7933fdc" - "bb3a792b344525bda08839e151ce794b2f32c9b7a01fbac9" - "e01cc87ebcc7d1f6cf0111c3a1e8aac71a908749d44fbd9a" - "d0dadecbd50ada380339c32ac69136678df9317ce0b12b4f" - "f79e59b743f5bb3af2d519ff27d9459cbf97222c15e6fc2a" - "0f91fc719b941525fae59361ceb69cebc2a8645912baa8d1" - "b6c1075ee3056a0c10d25065cb03a442e0ec6e0e1698db3b" - "4c98a0be3278e9649f1f9532e0d392dfd3a0342b8971f21e" - "1b0a74414ba3348cc5be7120c37632d8df359f8d9b992f2e" - "e60b6f470fe3f11de54cda541edad891ce6279cfcd3e7e6f" - "1618b166fd2c1d05848fd2c5f6fb2299f523f357a6327623" - "93a8353156cccd02acf081625a75ebb56e16369788d273cc" - "de96629281b949d04c50901b71c65614e6c6c7bd327a140a" - "45e1d006c3f27b9ac9aa53fd62a80f00bb25bfe235bdd2f6" - "71126905b2040222b6cbcf7ccd769c2b53113ec01640e3d3" - "38abbd602547adf0ba38209cf746ce7677afa1c520756060" - "85cbfe4e8ae88dd87aaaf9b04cf9aa7e1948c25c02fb8a8c" - "01c36ae4d6ebe1f990d4f869a65cdea03f09252dc208e69f" - "b74e6132ce77e25b578fdfe33ac372e6" -; - -char parray[] = - "243f6a8885a308d313198a2e03707344a4093822299f31d0" - "082efa98ec4e6c89452821e638d01377be5466cf34e90c6c" - "c0ac29b7c97c50dd3f84d5b5b54709179216d5d98979fb1b" -; - -#endif // Q_BLOWFISH_P_H diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/AUTHORS b/src/libcommuni/src/3rdparty/uchardet-0.0.1/AUTHORS deleted file mode 100644 index 0b87f99..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/AUTHORS +++ /dev/null @@ -1 +0,0 @@ -BYVoid <byvoid.kcp@gmail.com> diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/CMakeLists.txt b/src/libcommuni/src/3rdparty/uchardet-0.0.1/CMakeLists.txt deleted file mode 100644 index 0dde2cc..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/CMakeLists.txt +++ /dev/null @@ -1,78 +0,0 @@ -######## Project settings -cmake_minimum_required(VERSION 2.8) -set (PACKAGE_NAME opencc) -project (${PACKAGE_NAME} CXX) -enable_testing() - -######## Package information -set (PACKAGE_URL http://code.google.com/p/uchardet/) -set (PACKAGE_BUGREPORT http://code.google.com/p/uchardet/issues/entry) -set (UCHARDET_VERSION_MAJOR 0) -set (UCHARDET_VERSION_MINOR 0) -set (UCHARDET_VERSION_REVISION 1) - -if (CMAKE_BUILD_TYPE MATCHES Debug) - set (version_suffix .Debug) -endif (CMAKE_BUILD_TYPE MATCHES Debug) - -set ( - UCHARDET_VERSION - ${UCHARDET_VERSION_MAJOR}.${UCHARDET_VERSION_MINOR}.${UCHARDET_VERSION_REVISION}${version_suffix} -) - -######## Windows - -if (WIN32) - set(CMAKE_SHARED_LIBRARY_PREFIX ${CMAKE_INSTALL_PREFIX}) - set(CMAKE_STATIC_LIBRARY_PREFIX ${CMAKE_INSTALL_PREFIX}) -endif (WIN32) - -######## Directory - -set (DIR_PREFIX ${CMAKE_INSTALL_PREFIX}) -set (DIR_LIBRARY ${DIR_PREFIX}/${CMAKE_SHARED_LIBRARY_PREFIX}) -set (DIR_LIBRARY_STATIC ${DIR_PREFIX}/${CMAKE_STATIC_LIBRARY_PREFIX}) -set (DIR_INCLUDE ${DIR_PREFIX}/include) -set (DIR_SHARE ${DIR_PREFIX}/share) -set (DIR_BIN ${DIR_PREFIX}/bin) -set (DIR_ETC ${DIR_PREFIX}/etc) - -if (DEFINED CMAKE_INSTALL_LIBDIR) - set (DIR_LIBRARY ${CMAKE_INSTALL_LIBDIR}) - set (DIR_LIBRARY_STATIC ${CMAKE_INSTALL_LIBDIR}) -endif (DEFINED CMAKE_INSTALL_LIBDIR) - -if (DEFINED SHARE_INSTALL_PREFIX) - set (DIR_SHARE ${SHARE_INSTALL_PREFIX}) -endif (DEFINED SHARE_INSTALL_PREFIX) - -if (DEFINED INCLUDE_INSTALL_DIR) - set (DIR_INCLUDE ${INCLUDE_INSTALL_DIR}) -endif (DEFINED INCLUDE_INSTALL_DIR) - -if (DEFINED SYSCONF_INSTALL_DIR) - set (DIR_ETC ${SYSCONF_INSTALL_DIR}) -endif (DEFINED SYSCONF_INSTALL_DIR) - -set (DIR_SHARE_UCHARDET ${DIR_SHARE}/opencc) -set (DIR_SHARE_LOCALE ${DIR_SHARE}/locale) - -######## Configuration - -configure_file( - uchardet.pc.in - uchardet.pc - @ONLY -) - -install( - FILES - ${CMAKE_BINARY_DIR}/uchardet.pc - DESTINATION - ${DIR_LIBRARY}/pkgconfig -) - -######## Subdirectories - -add_subdirectory(src) -add_subdirectory(doc) diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/COPYING b/src/libcommuni/src/3rdparty/uchardet-0.0.1/COPYING deleted file mode 100644 index 7714141..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/COPYING +++ /dev/null @@ -1,470 +0,0 @@ - MOZILLA PUBLIC LICENSE - Version 1.1 - - --------------- - -1. Definitions. - - 1.0.1. "Commercial Use" means distribution or otherwise making the - Covered Code available to a third party. - - 1.1. "Contributor" means each entity that creates or contributes to - the creation of Modifications. - - 1.2. "Contributor Version" means the combination of the Original - Code, prior Modifications used by a Contributor, and the Modifications - made by that particular Contributor. - - 1.3. "Covered Code" means the Original Code or Modifications or the - combination of the Original Code and Modifications, in each case - including portions thereof. - - 1.4. "Electronic Distribution Mechanism" means a mechanism generally - accepted in the software development community for the electronic - transfer of data. - - 1.5. "Executable" means Covered Code in any form other than Source - Code. - - 1.6. "Initial Developer" means the individual or entity identified - as the Initial Developer in the Source Code notice required by Exhibit - A. - - 1.7. "Larger Work" means a work which combines Covered Code or - portions thereof with code not governed by the terms of this License. - - 1.8. "License" means this document. - - 1.8.1. "Licensable" means having the right to grant, to the maximum - extent possible, whether at the time of the initial grant or - subsequently acquired, any and all of the rights conveyed herein. - - 1.9. "Modifications" means any addition to or deletion from the - substance or structure of either the Original Code or any previous - Modifications. When Covered Code is released as a series of files, a - Modification is: - A. Any addition to or deletion from the contents of a file - containing Original Code or previous Modifications. - - B. Any new file that contains any part of the Original Code or - previous Modifications. - - 1.10. "Original Code" means Source Code of computer software code - which is described in the Source Code notice required by Exhibit A as - Original Code, and which, at the time of its release under this - License is not already Covered Code governed by this License. - - 1.10.1. "Patent Claims" means any patent claim(s), now owned or - hereafter acquired, including without limitation, method, process, - and apparatus claims, in any patent Licensable by grantor. - - 1.11. "Source Code" means the preferred form of the Covered Code for - making modifications to it, including all modules it contains, plus - any associated interface definition files, scripts used to control - compilation and installation of an Executable, or source code - differential comparisons against either the Original Code or another - well known, available Covered Code of the Contributor's choice. The - Source Code can be in a compressed or archival form, provided the - appropriate decompression or de-archiving software is widely available - for no charge. - - 1.12. "You" (or "Your") means an individual or a legal entity - exercising rights under, and complying with all of the terms of, this - License or a future version of this License issued under Section 6.1. - For legal entities, "You" includes any entity which controls, is - controlled by, or is under common control with You. For purposes of - this definition, "control" means (a) the power, direct or indirect, - to cause the direction or management of such entity, whether by - contract or otherwise, or (b) ownership of more than fifty percent - (50%) of the outstanding shares or beneficial ownership of such - entity. - -2. Source Code License. - - 2.1. The Initial Developer Grant. - The Initial Developer hereby grants You a world-wide, royalty-free, - non-exclusive license, subject to third party intellectual property - claims: - (a) under intellectual property rights (other than patent or - trademark) Licensable by Initial Developer to use, reproduce, - modify, display, perform, sublicense and distribute the Original - Code (or portions thereof) with or without Modifications, and/or - as part of a Larger Work; and - - (b) under Patents Claims infringed by the making, using or - selling of Original Code, to make, have made, use, practice, - sell, and offer for sale, and/or otherwise dispose of the - Original Code (or portions thereof). - - (c) the licenses granted in this Section 2.1(a) and (b) are - effective on the date Initial Developer first distributes - Original Code under the terms of this License. - - (d) Notwithstanding Section 2.1(b) above, no patent license is - granted: 1) for code that You delete from the Original Code; 2) - separate from the Original Code; or 3) for infringements caused - by: i) the modification of the Original Code or ii) the - combination of the Original Code with other software or devices. - - 2.2. Contributor Grant. - Subject to third party intellectual property claims, each Contributor - hereby grants You a world-wide, royalty-free, non-exclusive license - - (a) under intellectual property rights (other than patent or - trademark) Licensable by Contributor, to use, reproduce, modify, - display, perform, sublicense and distribute the Modifications - created by such Contributor (or portions thereof) either on an - unmodified basis, with other Modifications, as Covered Code - and/or as part of a Larger Work; and - - (b) under Patent Claims infringed by the making, using, or - selling of Modifications made by that Contributor either alone - and/or in combination with its Contributor Version (or portions - of such combination), to make, use, sell, offer for sale, have - made, and/or otherwise dispose of: 1) Modifications made by that - Contributor (or portions thereof); and 2) the combination of - Modifications made by that Contributor with its Contributor - Version (or portions of such combination). - - (c) the licenses granted in Sections 2.2(a) and 2.2(b) are - effective on the date Contributor first makes Commercial Use of - the Covered Code. - - (d) Notwithstanding Section 2.2(b) above, no patent license is - granted: 1) for any code that Contributor has deleted from the - Contributor Version; 2) separate from the Contributor Version; - 3) for infringements caused by: i) third party modifications of - Contributor Version or ii) the combination of Modifications made - by that Contributor with other software (except as part of the - Contributor Version) or other devices; or 4) under Patent Claims - infringed by Covered Code in the absence of Modifications made by - that Contributor. - -3. Distribution Obligations. - - 3.1. Application of License. - The Modifications which You create or to which You contribute are - governed by the terms of this License, including without limitation - Section 2.2. The Source Code version of Covered Code may be - distributed only under the terms of this License or a future version - of this License released under Section 6.1, and You must include a - copy of this License with every copy of the Source Code You - distribute. You may not offer or impose any terms on any Source Code - version that alters or restricts the applicable version of this - License or the recipients' rights hereunder. However, You may include - an additional document offering the additional rights described in - Section 3.5. - - 3.2. Availability of Source Code. - Any Modification which You create or to which You contribute must be - made available in Source Code form under the terms of this License - either on the same media as an Executable version or via an accepted - Electronic Distribution Mechanism to anyone to whom you made an - Executable version available; and if made available via Electronic - Distribution Mechanism, must remain available for at least twelve (12) - months after the date it initially became available, or at least six - (6) months after a subsequent version of that particular Modification - has been made available to such recipients. You are responsible for - ensuring that the Source Code version remains available even if the - Electronic Distribution Mechanism is maintained by a third party. - - 3.3. Description of Modifications. - You must cause all Covered Code to which You contribute to contain a - file documenting the changes You made to create that Covered Code and - the date of any change. You must include a prominent statement that - the Modification is derived, directly or indirectly, from Original - Code provided by the Initial Developer and including the name of the - Initial Developer in (a) the Source Code, and (b) in any notice in an - Executable version or related documentation in which You describe the - origin or ownership of the Covered Code. - - 3.4. Intellectual Property Matters - (a) Third Party Claims. - If Contributor has knowledge that a license under a third party's - intellectual property rights is required to exercise the rights - granted by such Contributor under Sections 2.1 or 2.2, - Contributor must include a text file with the Source Code - distribution titled "LEGAL" which describes the claim and the - party making the claim in sufficient detail that a recipient will - know whom to contact. If Contributor obtains such knowledge after - the Modification is made available as described in Section 3.2, - Contributor shall promptly modify the LEGAL file in all copies - Contributor makes available thereafter and shall take other steps - (such as notifying appropriate mailing lists or newsgroups) - reasonably calculated to inform those who received the Covered - Code that new knowledge has been obtained. - - (b) Contributor APIs. - If Contributor's Modifications include an application programming - interface and Contributor has knowledge of patent licenses which - are reasonably necessary to implement that API, Contributor must - also include this information in the LEGAL file. - - (c) Representations. - Contributor represents that, except as disclosed pursuant to - Section 3.4(a) above, Contributor believes that Contributor's - Modifications are Contributor's original creation(s) and/or - Contributor has sufficient rights to grant the rights conveyed by - this License. - - 3.5. Required Notices. - You must duplicate the notice in Exhibit A in each file of the Source - Code. If it is not possible to put such notice in a particular Source - Code file due to its structure, then You must include such notice in a - location (such as a relevant directory) where a user would be likely - to look for such a notice. If You created one or more Modification(s) - You may add your name as a Contributor to the notice described in - Exhibit A. You must also duplicate this License in any documentation - for the Source Code where You describe recipients' rights or ownership - rights relating to Covered Code. You may choose to offer, and to - charge a fee for, warranty, support, indemnity or liability - obligations to one or more recipients of Covered Code. However, You - may do so only on Your own behalf, and not on behalf of the Initial - Developer or any Contributor. You must make it absolutely clear than - any such warranty, support, indemnity or liability obligation is - offered by You alone, and You hereby agree to indemnify the Initial - Developer and every Contributor for any liability incurred by the - Initial Developer or such Contributor as a result of warranty, - support, indemnity or liability terms You offer. - - 3.6. Distribution of Executable Versions. - You may distribute Covered Code in Executable form only if the - requirements of Section 3.1-3.5 have been met for that Covered Code, - and if You include a notice stating that the Source Code version of - the Covered Code is available under the terms of this License, - including a description of how and where You have fulfilled the - obligations of Section 3.2. The notice must be conspicuously included - in any notice in an Executable version, related documentation or - collateral in which You describe recipients' rights relating to the - Covered Code. You may distribute the Executable version of Covered - Code or ownership rights under a license of Your choice, which may - contain terms different from this License, provided that You are in - compliance with the terms of this License and that the license for the - Executable version does not attempt to limit or alter the recipient's - rights in the Source Code version from the rights set forth in this - License. If You distribute the Executable version under a different - license You must make it absolutely clear that any terms which differ - from this License are offered by You alone, not by the Initial - Developer or any Contributor. You hereby agree to indemnify the - Initial Developer and every Contributor for any liability incurred by - the Initial Developer or such Contributor as a result of any such - terms You offer. - - 3.7. Larger Works. - You may create a Larger Work by combining Covered Code with other code - not governed by the terms of this License and distribute the Larger - Work as a single product. In such a case, You must make sure the - requirements of this License are fulfilled for the Covered Code. - -4. Inability to Comply Due to Statute or Regulation. - - If it is impossible for You to comply with any of the terms of this - License with respect to some or all of the Covered Code due to - statute, judicial order, or regulation then You must: (a) comply with - the terms of this License to the maximum extent possible; and (b) - describe the limitations and the code they affect. Such description - must be included in the LEGAL file described in Section 3.4 and must - be included with all distributions of the Source Code. Except to the - extent prohibited by statute or regulation, such description must be - sufficiently detailed for a recipient of ordinary skill to be able to - understand it. - -5. Application of this License. - - This License applies to code to which the Initial Developer has - attached the notice in Exhibit A and to related Covered Code. - -6. Versions of the License. - - 6.1. New Versions. - Netscape Communications Corporation ("Netscape") may publish revised - and/or new versions of the License from time to time. Each version - will be given a distinguishing version number. - - 6.2. Effect of New Versions. - Once Covered Code has been published under a particular version of the - License, You may always continue to use it under the terms of that - version. You may also choose to use such Covered Code under the terms - of any subsequent version of the License published by Netscape. No one - other than Netscape has the right to modify the terms applicable to - Covered Code created under this License. - - 6.3. Derivative Works. - If You create or use a modified version of this License (which you may - only do in order to apply it to code which is not already Covered Code - governed by this License), You must (a) rename Your license so that - the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", - "MPL", "NPL" or any confusingly similar phrase do not appear in your - license (except to note that your license differs from this License) - and (b) otherwise make it clear that Your version of the license - contains terms which differ from the Mozilla Public License and - Netscape Public License. (Filling in the name of the Initial - Developer, Original Code or Contributor in the notice described in - Exhibit A shall not of themselves be deemed to be modifications of - this License.) - -7. DISCLAIMER OF WARRANTY. - - COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, - WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, - WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF - DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. - THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE - IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, - YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE - COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER - OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF - ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. - -8. TERMINATION. - - 8.1. This License and the rights granted hereunder will terminate - automatically if You fail to comply with terms herein and fail to cure - such breach within 30 days of becoming aware of the breach. All - sublicenses to the Covered Code which are properly granted shall - survive any termination of this License. Provisions which, by their - nature, must remain in effect beyond the termination of this License - shall survive. - - 8.2. If You initiate litigation by asserting a patent infringement - claim (excluding declatory judgment actions) against Initial Developer - or a Contributor (the Initial Developer or Contributor against whom - You file such action is referred to as "Participant") alleging that: - - (a) such Participant's Contributor Version directly or indirectly - infringes any patent, then any and all rights granted by such - Participant to You under Sections 2.1 and/or 2.2 of this License - shall, upon 60 days notice from Participant terminate prospectively, - unless if within 60 days after receipt of notice You either: (i) - agree in writing to pay Participant a mutually agreeable reasonable - royalty for Your past and future use of Modifications made by such - Participant, or (ii) withdraw Your litigation claim with respect to - the Contributor Version against such Participant. If within 60 days - of notice, a reasonable royalty and payment arrangement are not - mutually agreed upon in writing by the parties or the litigation claim - is not withdrawn, the rights granted by Participant to You under - Sections 2.1 and/or 2.2 automatically terminate at the expiration of - the 60 day notice period specified above. - - (b) any software, hardware, or device, other than such Participant's - Contributor Version, directly or indirectly infringes any patent, then - any rights granted to You by such Participant under Sections 2.1(b) - and 2.2(b) are revoked effective as of the date You first made, used, - sold, distributed, or had made, Modifications made by that - Participant. - - 8.3. If You assert a patent infringement claim against Participant - alleging that such Participant's Contributor Version directly or - indirectly infringes any patent where such claim is resolved (such as - by license or settlement) prior to the initiation of patent - infringement litigation, then the reasonable value of the licenses - granted by such Participant under Sections 2.1 or 2.2 shall be taken - into account in determining the amount or value of any payment or - license. - - 8.4. In the event of termination under Sections 8.1 or 8.2 above, - all end user license agreements (excluding distributors and resellers) - which have been validly granted by You or any distributor hereunder - prior to termination shall survive termination. - -9. LIMITATION OF LIABILITY. - - UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT - (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL - DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, - OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR - ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY - CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, - WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER - COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN - INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF - LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY - RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW - PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE - EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO - THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. - -10. U.S. GOVERNMENT END USERS. - - The Covered Code is a "commercial item," as that term is defined in - 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer - software" and "commercial computer software documentation," as such - terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 - C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), - all U.S. Government End Users acquire Covered Code with only those - rights set forth herein. - -11. MISCELLANEOUS. - - This License represents the complete agreement concerning subject - matter hereof. If any provision of this License is held to be - unenforceable, such provision shall be reformed only to the extent - necessary to make it enforceable. This License shall be governed by - California law provisions (except to the extent applicable law, if - any, provides otherwise), excluding its conflict-of-law provisions. - With respect to disputes in which at least one party is a citizen of, - or an entity chartered or registered to do business in the United - States of America, any litigation relating to this License shall be - subject to the jurisdiction of the Federal Courts of the Northern - District of California, with venue lying in Santa Clara County, - California, with the losing party responsible for costs, including - without limitation, court costs and reasonable attorneys' fees and - expenses. The application of the United Nations Convention on - Contracts for the International Sale of Goods is expressly excluded. - Any law or regulation which provides that the language of a contract - shall be construed against the drafter shall not apply to this - License. - -12. RESPONSIBILITY FOR CLAIMS. - - As between Initial Developer and the Contributors, each party is - responsible for claims and damages arising, directly or indirectly, - out of its utilization of rights under this License and You agree to - work with Initial Developer and Contributors to distribute such - responsibility on an equitable basis. Nothing herein is intended or - shall be deemed to constitute any admission of liability. - -13. MULTIPLE-LICENSED CODE. - - Initial Developer may designate portions of the Covered Code as - "Multiple-Licensed". "Multiple-Licensed" means that the Initial - Developer permits you to utilize portions of the Covered Code under - Your choice of the NPL or the alternative licenses, if any, specified - by the Initial Developer in the file described in Exhibit A. - -EXHIBIT A -Mozilla Public License. - - ``The contents of this file are subject to the Mozilla Public License - Version 1.1 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the - License for the specific language governing rights and limitations - under the License. - - The Original Code is ______________________________________. - - The Initial Developer of the Original Code is ________________________. - Portions created by ______________________ are Copyright (C) ______ - _______________________. All Rights Reserved. - - Contributor(s): ______________________________________. - - Alternatively, the contents of this file may be used under the terms - of the _____ license (the "[___] License"), in which case the - provisions of [______] License are applicable instead of those - above. If you wish to allow use of your version of this file only - under the terms of the [____] License and not to allow others to use - your version of this file under the MPL, indicate your decision by - deleting the provisions above and replace them with the notice and - other provisions required by the [___] License. If you do not delete - the provisions above, a recipient may use your version of this file - under either the MPL or the [___] License." - - [NOTE: The text of this Exhibit A may differ slightly from the text of - the notices in the Source Code files of the Original Code. You should - use the text of this Exhibit A rather than the text found in the - Original Code Source Code for Your Modifications.] - diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/INSTALL b/src/libcommuni/src/3rdparty/uchardet-0.0.1/INSTALL deleted file mode 100644 index 8d0ab8f..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/INSTALL +++ /dev/null @@ -1,4 +0,0 @@ -Execute release.sh or manually make a directory and check in, and execute - cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release && make -Then install - sudo make install diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/doc/CMakeLists.txt b/src/libcommuni/src/3rdparty/uchardet-0.0.1/doc/CMakeLists.txt deleted file mode 100644 index f14354e..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/doc/CMakeLists.txt +++ /dev/null @@ -1,6 +0,0 @@ -install( - FILES - uchardet.1 - DESTINATION - ${DIR_SHARE}/man/man1 -) diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/doc/uchardet.1 b/src/libcommuni/src/3rdparty/uchardet-0.0.1/doc/uchardet.1 deleted file mode 100644 index 7d187fe..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/doc/uchardet.1 +++ /dev/null @@ -1,18 +0,0 @@ -.TH UCHARDET "1" "July 2011" "uchardet " "User Commands" -.SH NAME -uchardet \- universalchardet (Universal Charset Detector) -.SH DESCRIPTION -uchardet Command Line Tool -.SS "Usage:" -.HP -uchardet [\fBOptions\fR] [\fBFile\fR] -.HP -\fB\-v\fR -Print version and build information. -.HP -\fB\-h\fR -Print help text. -.HP -.IP -.PP -uchardet Command Line Tool diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/script/debug.sh b/src/libcommuni/src/3rdparty/uchardet-0.0.1/script/debug.sh deleted file mode 100644 index f85d69b..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/script/debug.sh +++ /dev/null @@ -1,9 +0,0 @@ -mkdir --parents debug \ -&& cd debug - -cmake \ - -DCMAKE_BUILD_TYPE=Debug \ - -DCMAKE_INSTALL_PREFIX=`pwd`/root \ - .. \ -&& make \ -&& make install diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/script/release.sh b/src/libcommuni/src/3rdparty/uchardet-0.0.1/script/release.sh deleted file mode 100644 index 21a5f6e..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/script/release.sh +++ /dev/null @@ -1,8 +0,0 @@ -mkdir --parents release \ -&& cd release - -cmake \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_INSTALL_PREFIX=/usr \ - .. \ -&& make diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/script/win32.sh b/src/libcommuni/src/3rdparty/uchardet-0.0.1/script/win32.sh deleted file mode 100644 index b757380..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/script/win32.sh +++ /dev/null @@ -1,7 +0,0 @@ -mkdir --parents win32 \ -&& cd win32 \ -&& cmake .. \ - -G "MSYS Makefiles" \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_INSTALL_PREFIX="" \ -&& make
\ No newline at end of file diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/Big5Freq.tab b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/Big5Freq.tab deleted file mode 100644 index fd6b0e0..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/Big5Freq.tab +++ /dev/null @@ -1,943 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is Mozilla Communicator client code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -// Big5 frequency table -// by Taiwan's Mandarin Promotion Council -// <http://www.edu.tw:81/mandr/> - -/****************************************************************************** - * 128 --> 0.42261 - * 256 --> 0.57851 - * 512 --> 0.74851 - * 1024 --> 0.89384 - * 2048 --> 0.97583 - * - * Idea Distribution Ratio = 0.74851/(1-0.74851) =2.98 - * Random Distribution Ration = 512/(5401-512)=0.105 - * - * Typical Distribution Ratio about 25% of Ideal one, still much higher than RDR - *****************************************************************************/ - -#define BIG5_TYPICAL_DISTRIBUTION_RATIO (float)0.75 - - -//Char to FreqOrder table , -#define BIG5_TABLE_SIZE 5376 - -static const PRInt16 Big5CharToFreqOrder[] = -{ - 1,1801,1506, 255,1431, 198, 9, 82, 6,5008, 177, 202,3681,1256,2821, 110, // 16 -3814, 33,3274, 261, 76, 44,2114, 16,2946,2187,1176, 659,3971, 26,3451,2653, // 32 -1198,3972,3350,4202, 410,2215, 302, 590, 361,1964, 8, 204, 58,4510,5009,1932, // 48 - 63,5010,5011, 317,1614, 75, 222, 159,4203,2417,1480,5012,3555,3091, 224,2822, // 64 -3682, 3, 10,3973,1471, 29,2787,1135,2866,1940, 873, 130,3275,1123, 312,5013, // 80 -4511,2052, 507, 252, 682,5014, 142,1915, 124, 206,2947, 34,3556,3204, 64, 604, // 96 -5015,2501,1977,1978, 155,1991, 645, 641,1606,5016,3452, 337, 72, 406,5017, 80, // 112 - 630, 238,3205,1509, 263, 939,1092,2654, 756,1440,1094,3453, 449, 69,2987, 591, // 128 - 179,2096, 471, 115,2035,1844, 60, 50,2988, 134, 806,1869, 734,2036,3454, 180, // 144 - 995,1607, 156, 537,2907, 688,5018, 319,1305, 779,2145, 514,2379, 298,4512, 359, // 160 -2502, 90,2716,1338, 663, 11, 906,1099,2553, 20,2441, 182, 532,1716,5019, 732, // 176 -1376,4204,1311,1420,3206, 25,2317,1056, 113, 399, 382,1950, 242,3455,2474, 529, // 192 -3276, 475,1447,3683,5020, 117, 21, 656, 810,1297,2300,2334,3557,5021, 126,4205, // 208 - 706, 456, 150, 613,4513, 71,1118,2037,4206, 145,3092, 85, 835, 486,2115,1246, // 224 -1426, 428, 727,1285,1015, 800, 106, 623, 303,1281,5022,2128,2359, 347,3815, 221, // 240 -3558,3135,5023,1956,1153,4207, 83, 296,1199,3093, 192, 624, 93,5024, 822,1898, // 256 -2823,3136, 795,2065, 991,1554,1542,1592, 27, 43,2867, 859, 139,1456, 860,4514, // 272 - 437, 712,3974, 164,2397,3137, 695, 211,3037,2097, 195,3975,1608,3559,3560,3684, // 288 -3976, 234, 811,2989,2098,3977,2233,1441,3561,1615,2380, 668,2077,1638, 305, 228, // 304 -1664,4515, 467, 415,5025, 262,2099,1593, 239, 108, 300, 200,1033, 512,1247,2078, // 320 -5026,5027,2176,3207,3685,2682, 593, 845,1062,3277, 88,1723,2038,3978,1951, 212, // 336 - 266, 152, 149, 468,1899,4208,4516, 77, 187,5028,3038, 37, 5,2990,5029,3979, // 352 -5030,5031, 39,2524,4517,2908,3208,2079, 55, 148, 74,4518, 545, 483,1474,1029, // 368 -1665, 217,1870,1531,3138,1104,2655,4209, 24, 172,3562, 900,3980,3563,3564,4519, // 384 - 32,1408,2824,1312, 329, 487,2360,2251,2717, 784,2683, 4,3039,3351,1427,1789, // 400 - 188, 109, 499,5032,3686,1717,1790, 888,1217,3040,4520,5033,3565,5034,3352,1520, // 416 -3687,3981, 196,1034, 775,5035,5036, 929,1816, 249, 439, 38,5037,1063,5038, 794, // 432 -3982,1435,2301, 46, 178,3278,2066,5039,2381,5040, 214,1709,4521, 804, 35, 707, // 448 - 324,3688,1601,2554, 140, 459,4210,5041,5042,1365, 839, 272, 978,2262,2580,3456, // 464 -2129,1363,3689,1423, 697, 100,3094, 48, 70,1231, 495,3139,2196,5043,1294,5044, // 480 -2080, 462, 586,1042,3279, 853, 256, 988, 185,2382,3457,1698, 434,1084,5045,3458, // 496 - 314,2625,2788,4522,2335,2336, 569,2285, 637,1817,2525, 757,1162,1879,1616,3459, // 512 - 287,1577,2116, 768,4523,1671,2868,3566,2526,1321,3816, 909,2418,5046,4211, 933, // 528 -3817,4212,2053,2361,1222,4524, 765,2419,1322, 786,4525,5047,1920,1462,1677,2909, // 544 -1699,5048,4526,1424,2442,3140,3690,2600,3353,1775,1941,3460,3983,4213, 309,1369, // 560 -1130,2825, 364,2234,1653,1299,3984,3567,3985,3986,2656, 525,1085,3041, 902,2001, // 576 -1475, 964,4527, 421,1845,1415,1057,2286, 940,1364,3141, 376,4528,4529,1381, 7, // 592 -2527, 983,2383, 336,1710,2684,1846, 321,3461, 559,1131,3042,2752,1809,1132,1313, // 608 - 265,1481,1858,5049, 352,1203,2826,3280, 167,1089, 420,2827, 776, 792,1724,3568, // 624 -4214,2443,3281,5050,4215,5051, 446, 229, 333,2753, 901,3818,1200,1557,4530,2657, // 640 -1921, 395,2754,2685,3819,4216,1836, 125, 916,3209,2626,4531,5052,5053,3820,5054, // 656 -5055,5056,4532,3142,3691,1133,2555,1757,3462,1510,2318,1409,3569,5057,2146, 438, // 672 -2601,2910,2384,3354,1068, 958,3043, 461, 311,2869,2686,4217,1916,3210,4218,1979, // 688 - 383, 750,2755,2627,4219, 274, 539, 385,1278,1442,5058,1154,1965, 384, 561, 210, // 704 - 98,1295,2556,3570,5059,1711,2420,1482,3463,3987,2911,1257, 129,5060,3821, 642, // 720 - 523,2789,2790,2658,5061, 141,2235,1333, 68, 176, 441, 876, 907,4220, 603,2602, // 736 - 710, 171,3464, 404, 549, 18,3143,2398,1410,3692,1666,5062,3571,4533,2912,4534, // 752 -5063,2991, 368,5064, 146, 366, 99, 871,3693,1543, 748, 807,1586,1185, 22,2263, // 768 - 379,3822,3211,5065,3212, 505,1942,2628,1992,1382,2319,5066, 380,2362, 218, 702, // 784 -1818,1248,3465,3044,3572,3355,3282,5067,2992,3694, 930,3283,3823,5068, 59,5069, // 800 - 585, 601,4221, 497,3466,1112,1314,4535,1802,5070,1223,1472,2177,5071, 749,1837, // 816 - 690,1900,3824,1773,3988,1476, 429,1043,1791,2236,2117, 917,4222, 447,1086,1629, // 832 -5072, 556,5073,5074,2021,1654, 844,1090, 105, 550, 966,1758,2828,1008,1783, 686, // 848 -1095,5075,2287, 793,1602,5076,3573,2603,4536,4223,2948,2302,4537,3825, 980,2503, // 864 - 544, 353, 527,4538, 908,2687,2913,5077, 381,2629,1943,1348,5078,1341,1252, 560, // 880 -3095,5079,3467,2870,5080,2054, 973, 886,2081, 143,4539,5081,5082, 157,3989, 496, // 896 -4224, 57, 840, 540,2039,4540,4541,3468,2118,1445, 970,2264,1748,1966,2082,4225, // 912 -3144,1234,1776,3284,2829,3695, 773,1206,2130,1066,2040,1326,3990,1738,1725,4226, // 928 - 279,3145, 51,1544,2604, 423,1578,2131,2067, 173,4542,1880,5083,5084,1583, 264, // 944 - 610,3696,4543,2444, 280, 154,5085,5086,5087,1739, 338,1282,3096, 693,2871,1411, // 960 -1074,3826,2445,5088,4544,5089,5090,1240, 952,2399,5091,2914,1538,2688, 685,1483, // 976 -4227,2475,1436, 953,4228,2055,4545, 671,2400, 79,4229,2446,3285, 608, 567,2689, // 992 -3469,4230,4231,1691, 393,1261,1792,2401,5092,4546,5093,5094,5095,5096,1383,1672, // 1008 -3827,3213,1464, 522,1119, 661,1150, 216, 675,4547,3991,1432,3574, 609,4548,2690, // 1024 -2402,5097,5098,5099,4232,3045, 0,5100,2476, 315, 231,2447, 301,3356,4549,2385, // 1040 -5101, 233,4233,3697,1819,4550,4551,5102, 96,1777,1315,2083,5103, 257,5104,1810, // 1056 -3698,2718,1139,1820,4234,2022,1124,2164,2791,1778,2659,5105,3097, 363,1655,3214, // 1072 -5106,2993,5107,5108,5109,3992,1567,3993, 718, 103,3215, 849,1443, 341,3357,2949, // 1088 -1484,5110,1712, 127, 67, 339,4235,2403, 679,1412, 821,5111,5112, 834, 738, 351, // 1104 -2994,2147, 846, 235,1497,1881, 418,1993,3828,2719, 186,1100,2148,2756,3575,1545, // 1120 -1355,2950,2872,1377, 583,3994,4236,2581,2995,5113,1298,3699,1078,2557,3700,2363, // 1136 - 78,3829,3830, 267,1289,2100,2002,1594,4237, 348, 369,1274,2197,2178,1838,4552, // 1152 -1821,2830,3701,2757,2288,2003,4553,2951,2758, 144,3358, 882,4554,3995,2759,3470, // 1168 -4555,2915,5114,4238,1726, 320,5115,3996,3046, 788,2996,5116,2831,1774,1327,2873, // 1184 -3997,2832,5117,1306,4556,2004,1700,3831,3576,2364,2660, 787,2023, 506, 824,3702, // 1200 - 534, 323,4557,1044,3359,2024,1901, 946,3471,5118,1779,1500,1678,5119,1882,4558, // 1216 - 165, 243,4559,3703,2528, 123, 683,4239, 764,4560, 36,3998,1793, 589,2916, 816, // 1232 - 626,1667,3047,2237,1639,1555,1622,3832,3999,5120,4000,2874,1370,1228,1933, 891, // 1248 -2084,2917, 304,4240,5121, 292,2997,2720,3577, 691,2101,4241,1115,4561, 118, 662, // 1264 -5122, 611,1156, 854,2386,1316,2875, 2, 386, 515,2918,5123,5124,3286, 868,2238, // 1280 -1486, 855,2661, 785,2216,3048,5125,1040,3216,3578,5126,3146, 448,5127,1525,5128, // 1296 -2165,4562,5129,3833,5130,4242,2833,3579,3147, 503, 818,4001,3148,1568, 814, 676, // 1312 -1444, 306,1749,5131,3834,1416,1030, 197,1428, 805,2834,1501,4563,5132,5133,5134, // 1328 -1994,5135,4564,5136,5137,2198, 13,2792,3704,2998,3149,1229,1917,5138,3835,2132, // 1344 -5139,4243,4565,2404,3580,5140,2217,1511,1727,1120,5141,5142, 646,3836,2448, 307, // 1360 -5143,5144,1595,3217,5145,5146,5147,3705,1113,1356,4002,1465,2529,2530,5148, 519, // 1376 -5149, 128,2133, 92,2289,1980,5150,4003,1512, 342,3150,2199,5151,2793,2218,1981, // 1392 -3360,4244, 290,1656,1317, 789, 827,2365,5152,3837,4566, 562, 581,4004,5153, 401, // 1408 -4567,2252, 94,4568,5154,1399,2794,5155,1463,2025,4569,3218,1944,5156, 828,1105, // 1424 -4245,1262,1394,5157,4246, 605,4570,5158,1784,2876,5159,2835, 819,2102, 578,2200, // 1440 -2952,5160,1502, 436,3287,4247,3288,2836,4005,2919,3472,3473,5161,2721,2320,5162, // 1456 -5163,2337,2068, 23,4571, 193, 826,3838,2103, 699,1630,4248,3098, 390,1794,1064, // 1472 -3581,5164,1579,3099,3100,1400,5165,4249,1839,1640,2877,5166,4572,4573, 137,4250, // 1488 - 598,3101,1967, 780, 104, 974,2953,5167, 278, 899, 253, 402, 572, 504, 493,1339, // 1504 -5168,4006,1275,4574,2582,2558,5169,3706,3049,3102,2253, 565,1334,2722, 863, 41, // 1520 -5170,5171,4575,5172,1657,2338, 19, 463,2760,4251, 606,5173,2999,3289,1087,2085, // 1536 -1323,2662,3000,5174,1631,1623,1750,4252,2691,5175,2878, 791,2723,2663,2339, 232, // 1552 -2421,5176,3001,1498,5177,2664,2630, 755,1366,3707,3290,3151,2026,1609, 119,1918, // 1568 -3474, 862,1026,4253,5178,4007,3839,4576,4008,4577,2265,1952,2477,5179,1125, 817, // 1584 -4254,4255,4009,1513,1766,2041,1487,4256,3050,3291,2837,3840,3152,5180,5181,1507, // 1600 -5182,2692, 733, 40,1632,1106,2879, 345,4257, 841,2531, 230,4578,3002,1847,3292, // 1616 -3475,5183,1263, 986,3476,5184, 735, 879, 254,1137, 857, 622,1300,1180,1388,1562, // 1632 -4010,4011,2954, 967,2761,2665,1349, 592,2134,1692,3361,3003,1995,4258,1679,4012, // 1648 -1902,2188,5185, 739,3708,2724,1296,1290,5186,4259,2201,2202,1922,1563,2605,2559, // 1664 -1871,2762,3004,5187, 435,5188, 343,1108, 596, 17,1751,4579,2239,3477,3709,5189, // 1680 -4580, 294,3582,2955,1693, 477, 979, 281,2042,3583, 643,2043,3710,2631,2795,2266, // 1696 -1031,2340,2135,2303,3584,4581, 367,1249,2560,5190,3585,5191,4582,1283,3362,2005, // 1712 - 240,1762,3363,4583,4584, 836,1069,3153, 474,5192,2149,2532, 268,3586,5193,3219, // 1728 -1521,1284,5194,1658,1546,4260,5195,3587,3588,5196,4261,3364,2693,1685,4262, 961, // 1744 -1673,2632, 190,2006,2203,3841,4585,4586,5197, 570,2504,3711,1490,5198,4587,2633, // 1760 -3293,1957,4588, 584,1514, 396,1045,1945,5199,4589,1968,2449,5200,5201,4590,4013, // 1776 - 619,5202,3154,3294, 215,2007,2796,2561,3220,4591,3221,4592, 763,4263,3842,4593, // 1792 -5203,5204,1958,1767,2956,3365,3712,1174, 452,1477,4594,3366,3155,5205,2838,1253, // 1808 -2387,2189,1091,2290,4264, 492,5206, 638,1169,1825,2136,1752,4014, 648, 926,1021, // 1824 -1324,4595, 520,4596, 997, 847,1007, 892,4597,3843,2267,1872,3713,2405,1785,4598, // 1840 -1953,2957,3103,3222,1728,4265,2044,3714,4599,2008,1701,3156,1551, 30,2268,4266, // 1856 -5207,2027,4600,3589,5208, 501,5209,4267, 594,3478,2166,1822,3590,3479,3591,3223, // 1872 - 829,2839,4268,5210,1680,3157,1225,4269,5211,3295,4601,4270,3158,2341,5212,4602, // 1888 -4271,5213,4015,4016,5214,1848,2388,2606,3367,5215,4603, 374,4017, 652,4272,4273, // 1904 - 375,1140, 798,5216,5217,5218,2366,4604,2269, 546,1659, 138,3051,2450,4605,5219, // 1920 -2254, 612,1849, 910, 796,3844,1740,1371, 825,3845,3846,5220,2920,2562,5221, 692, // 1936 - 444,3052,2634, 801,4606,4274,5222,1491, 244,1053,3053,4275,4276, 340,5223,4018, // 1952 -1041,3005, 293,1168, 87,1357,5224,1539, 959,5225,2240, 721, 694,4277,3847, 219, // 1968 -1478, 644,1417,3368,2666,1413,1401,1335,1389,4019,5226,5227,3006,2367,3159,1826, // 1984 - 730,1515, 184,2840, 66,4607,5228,1660,2958, 246,3369, 378,1457, 226,3480, 975, // 2000 -4020,2959,1264,3592, 674, 696,5229, 163,5230,1141,2422,2167, 713,3593,3370,4608, // 2016 -4021,5231,5232,1186, 15,5233,1079,1070,5234,1522,3224,3594, 276,1050,2725, 758, // 2032 -1126, 653,2960,3296,5235,2342, 889,3595,4022,3104,3007, 903,1250,4609,4023,3481, // 2048 -3596,1342,1681,1718, 766,3297, 286, 89,2961,3715,5236,1713,5237,2607,3371,3008, // 2064 -5238,2962,2219,3225,2880,5239,4610,2505,2533, 181, 387,1075,4024, 731,2190,3372, // 2080 -5240,3298, 310, 313,3482,2304, 770,4278, 54,3054, 189,4611,3105,3848,4025,5241, // 2096 -1230,1617,1850, 355,3597,4279,4612,3373, 111,4280,3716,1350,3160,3483,3055,4281, // 2112 -2150,3299,3598,5242,2797,4026,4027,3009, 722,2009,5243,1071, 247,1207,2343,2478, // 2128 -1378,4613,2010, 864,1437,1214,4614, 373,3849,1142,2220, 667,4615, 442,2763,2563, // 2144 -3850,4028,1969,4282,3300,1840, 837, 170,1107, 934,1336,1883,5244,5245,2119,4283, // 2160 -2841, 743,1569,5246,4616,4284, 582,2389,1418,3484,5247,1803,5248, 357,1395,1729, // 2176 -3717,3301,2423,1564,2241,5249,3106,3851,1633,4617,1114,2086,4285,1532,5250, 482, // 2192 -2451,4618,5251,5252,1492, 833,1466,5253,2726,3599,1641,2842,5254,1526,1272,3718, // 2208 -4286,1686,1795, 416,2564,1903,1954,1804,5255,3852,2798,3853,1159,2321,5256,2881, // 2224 -4619,1610,1584,3056,2424,2764, 443,3302,1163,3161,5257,5258,4029,5259,4287,2506, // 2240 -3057,4620,4030,3162,2104,1647,3600,2011,1873,4288,5260,4289, 431,3485,5261, 250, // 2256 - 97, 81,4290,5262,1648,1851,1558, 160, 848,5263, 866, 740,1694,5264,2204,2843, // 2272 -3226,4291,4621,3719,1687, 950,2479, 426, 469,3227,3720,3721,4031,5265,5266,1188, // 2288 - 424,1996, 861,3601,4292,3854,2205,2694, 168,1235,3602,4293,5267,2087,1674,4622, // 2304 -3374,3303, 220,2565,1009,5268,3855, 670,3010, 332,1208, 717,5269,5270,3603,2452, // 2320 -4032,3375,5271, 513,5272,1209,2882,3376,3163,4623,1080,5273,5274,5275,5276,2534, // 2336 -3722,3604, 815,1587,4033,4034,5277,3605,3486,3856,1254,4624,1328,3058,1390,4035, // 2352 -1741,4036,3857,4037,5278, 236,3858,2453,3304,5279,5280,3723,3859,1273,3860,4625, // 2368 -5281, 308,5282,4626, 245,4627,1852,2480,1307,2583, 430, 715,2137,2454,5283, 270, // 2384 - 199,2883,4038,5284,3606,2727,1753, 761,1754, 725,1661,1841,4628,3487,3724,5285, // 2400 -5286, 587, 14,3305, 227,2608, 326, 480,2270, 943,2765,3607, 291, 650,1884,5287, // 2416 -1702,1226, 102,1547, 62,3488, 904,4629,3489,1164,4294,5288,5289,1224,1548,2766, // 2432 - 391, 498,1493,5290,1386,1419,5291,2056,1177,4630, 813, 880,1081,2368, 566,1145, // 2448 -4631,2291,1001,1035,2566,2609,2242, 394,1286,5292,5293,2069,5294, 86,1494,1730, // 2464 -4039, 491,1588, 745, 897,2963, 843,3377,4040,2767,2884,3306,1768, 998,2221,2070, // 2480 - 397,1827,1195,1970,3725,3011,3378, 284,5295,3861,2507,2138,2120,1904,5296,4041, // 2496 -2151,4042,4295,1036,3490,1905, 114,2567,4296, 209,1527,5297,5298,2964,2844,2635, // 2512 -2390,2728,3164, 812,2568,5299,3307,5300,1559, 737,1885,3726,1210, 885, 28,2695, // 2528 -3608,3862,5301,4297,1004,1780,4632,5302, 346,1982,2222,2696,4633,3863,1742, 797, // 2544 -1642,4043,1934,1072,1384,2152, 896,4044,3308,3727,3228,2885,3609,5303,2569,1959, // 2560 -4634,2455,1786,5304,5305,5306,4045,4298,1005,1308,3728,4299,2729,4635,4636,1528, // 2576 -2610, 161,1178,4300,1983, 987,4637,1101,4301, 631,4046,1157,3229,2425,1343,1241, // 2592 -1016,2243,2570, 372, 877,2344,2508,1160, 555,1935, 911,4047,5307, 466,1170, 169, // 2608 -1051,2921,2697,3729,2481,3012,1182,2012,2571,1251,2636,5308, 992,2345,3491,1540, // 2624 -2730,1201,2071,2406,1997,2482,5309,4638, 528,1923,2191,1503,1874,1570,2369,3379, // 2640 -3309,5310, 557,1073,5311,1828,3492,2088,2271,3165,3059,3107, 767,3108,2799,4639, // 2656 -1006,4302,4640,2346,1267,2179,3730,3230, 778,4048,3231,2731,1597,2667,5312,4641, // 2672 -5313,3493,5314,5315,5316,3310,2698,1433,3311, 131, 95,1504,4049, 723,4303,3166, // 2688 -1842,3610,2768,2192,4050,2028,2105,3731,5317,3013,4051,1218,5318,3380,3232,4052, // 2704 -4304,2584, 248,1634,3864, 912,5319,2845,3732,3060,3865, 654, 53,5320,3014,5321, // 2720 -1688,4642, 777,3494,1032,4053,1425,5322, 191, 820,2121,2846, 971,4643, 931,3233, // 2736 - 135, 664, 783,3866,1998, 772,2922,1936,4054,3867,4644,2923,3234, 282,2732, 640, // 2752 -1372,3495,1127, 922, 325,3381,5323,5324, 711,2045,5325,5326,4055,2223,2800,1937, // 2768 -4056,3382,2224,2255,3868,2305,5327,4645,3869,1258,3312,4057,3235,2139,2965,4058, // 2784 -4059,5328,2225, 258,3236,4646, 101,1227,5329,3313,1755,5330,1391,3314,5331,2924, // 2800 -2057, 893,5332,5333,5334,1402,4305,2347,5335,5336,3237,3611,5337,5338, 878,1325, // 2816 -1781,2801,4647, 259,1385,2585, 744,1183,2272,4648,5339,4060,2509,5340, 684,1024, // 2832 -4306,5341, 472,3612,3496,1165,3315,4061,4062, 322,2153, 881, 455,1695,1152,1340, // 2848 - 660, 554,2154,4649,1058,4650,4307, 830,1065,3383,4063,4651,1924,5342,1703,1919, // 2864 -5343, 932,2273, 122,5344,4652, 947, 677,5345,3870,2637, 297,1906,1925,2274,4653, // 2880 -2322,3316,5346,5347,4308,5348,4309, 84,4310, 112, 989,5349, 547,1059,4064, 701, // 2896 -3613,1019,5350,4311,5351,3497, 942, 639, 457,2306,2456, 993,2966, 407, 851, 494, // 2912 -4654,3384, 927,5352,1237,5353,2426,3385, 573,4312, 680, 921,2925,1279,1875, 285, // 2928 - 790,1448,1984, 719,2168,5354,5355,4655,4065,4066,1649,5356,1541, 563,5357,1077, // 2944 -5358,3386,3061,3498, 511,3015,4067,4068,3733,4069,1268,2572,3387,3238,4656,4657, // 2960 -5359, 535,1048,1276,1189,2926,2029,3167,1438,1373,2847,2967,1134,2013,5360,4313, // 2976 -1238,2586,3109,1259,5361, 700,5362,2968,3168,3734,4314,5363,4315,1146,1876,1907, // 2992 -4658,2611,4070, 781,2427, 132,1589, 203, 147, 273,2802,2407, 898,1787,2155,4071, // 3008 -4072,5364,3871,2803,5365,5366,4659,4660,5367,3239,5368,1635,3872, 965,5369,1805, // 3024 -2699,1516,3614,1121,1082,1329,3317,4073,1449,3873, 65,1128,2848,2927,2769,1590, // 3040 -3874,5370,5371, 12,2668, 45, 976,2587,3169,4661, 517,2535,1013,1037,3240,5372, // 3056 -3875,2849,5373,3876,5374,3499,5375,2612, 614,1999,2323,3877,3110,2733,2638,5376, // 3072 -2588,4316, 599,1269,5377,1811,3735,5378,2700,3111, 759,1060, 489,1806,3388,3318, // 3088 -1358,5379,5380,2391,1387,1215,2639,2256, 490,5381,5382,4317,1759,2392,2348,5383, // 3104 -4662,3878,1908,4074,2640,1807,3241,4663,3500,3319,2770,2349, 874,5384,5385,3501, // 3120 -3736,1859, 91,2928,3737,3062,3879,4664,5386,3170,4075,2669,5387,3502,1202,1403, // 3136 -3880,2969,2536,1517,2510,4665,3503,2511,5388,4666,5389,2701,1886,1495,1731,4076, // 3152 -2370,4667,5390,2030,5391,5392,4077,2702,1216, 237,2589,4318,2324,4078,3881,4668, // 3168 -4669,2703,3615,3504, 445,4670,5393,5394,5395,5396,2771, 61,4079,3738,1823,4080, // 3184 -5397, 687,2046, 935, 925, 405,2670, 703,1096,1860,2734,4671,4081,1877,1367,2704, // 3200 -3389, 918,2106,1782,2483, 334,3320,1611,1093,4672, 564,3171,3505,3739,3390, 945, // 3216 -2641,2058,4673,5398,1926, 872,4319,5399,3506,2705,3112, 349,4320,3740,4082,4674, // 3232 -3882,4321,3741,2156,4083,4675,4676,4322,4677,2408,2047, 782,4084, 400, 251,4323, // 3248 -1624,5400,5401, 277,3742, 299,1265, 476,1191,3883,2122,4324,4325,1109, 205,5402, // 3264 -2590,1000,2157,3616,1861,5403,5404,5405,4678,5406,4679,2573, 107,2484,2158,4085, // 3280 -3507,3172,5407,1533, 541,1301, 158, 753,4326,2886,3617,5408,1696, 370,1088,4327, // 3296 -4680,3618, 579, 327, 440, 162,2244, 269,1938,1374,3508, 968,3063, 56,1396,3113, // 3312 -2107,3321,3391,5409,1927,2159,4681,3016,5410,3619,5411,5412,3743,4682,2485,5413, // 3328 -2804,5414,1650,4683,5415,2613,5416,5417,4086,2671,3392,1149,3393,4087,3884,4088, // 3344 -5418,1076, 49,5419, 951,3242,3322,3323, 450,2850, 920,5420,1812,2805,2371,4328, // 3360 -1909,1138,2372,3885,3509,5421,3243,4684,1910,1147,1518,2428,4685,3886,5422,4686, // 3376 -2393,2614, 260,1796,3244,5423,5424,3887,3324, 708,5425,3620,1704,5426,3621,1351, // 3392 -1618,3394,3017,1887, 944,4329,3395,4330,3064,3396,4331,5427,3744, 422, 413,1714, // 3408 -3325, 500,2059,2350,4332,2486,5428,1344,1911, 954,5429,1668,5430,5431,4089,2409, // 3424 -4333,3622,3888,4334,5432,2307,1318,2512,3114, 133,3115,2887,4687, 629, 31,2851, // 3440 -2706,3889,4688, 850, 949,4689,4090,2970,1732,2089,4335,1496,1853,5433,4091, 620, // 3456 -3245, 981,1242,3745,3397,1619,3746,1643,3326,2140,2457,1971,1719,3510,2169,5434, // 3472 -3246,5435,5436,3398,1829,5437,1277,4690,1565,2048,5438,1636,3623,3116,5439, 869, // 3488 -2852, 655,3890,3891,3117,4092,3018,3892,1310,3624,4691,5440,5441,5442,1733, 558, // 3504 -4692,3747, 335,1549,3065,1756,4336,3748,1946,3511,1830,1291,1192, 470,2735,2108, // 3520 -2806, 913,1054,4093,5443,1027,5444,3066,4094,4693, 982,2672,3399,3173,3512,3247, // 3536 -3248,1947,2807,5445, 571,4694,5446,1831,5447,3625,2591,1523,2429,5448,2090, 984, // 3552 -4695,3749,1960,5449,3750, 852, 923,2808,3513,3751, 969,1519, 999,2049,2325,1705, // 3568 -5450,3118, 615,1662, 151, 597,4095,2410,2326,1049, 275,4696,3752,4337, 568,3753, // 3584 -3626,2487,4338,3754,5451,2430,2275, 409,3249,5452,1566,2888,3514,1002, 769,2853, // 3600 - 194,2091,3174,3755,2226,3327,4339, 628,1505,5453,5454,1763,2180,3019,4096, 521, // 3616 -1161,2592,1788,2206,2411,4697,4097,1625,4340,4341, 412, 42,3119, 464,5455,2642, // 3632 -4698,3400,1760,1571,2889,3515,2537,1219,2207,3893,2643,2141,2373,4699,4700,3328, // 3648 -1651,3401,3627,5456,5457,3628,2488,3516,5458,3756,5459,5460,2276,2092, 460,5461, // 3664 -4701,5462,3020, 962, 588,3629, 289,3250,2644,1116, 52,5463,3067,1797,5464,5465, // 3680 -5466,1467,5467,1598,1143,3757,4342,1985,1734,1067,4702,1280,3402, 465,4703,1572, // 3696 - 510,5468,1928,2245,1813,1644,3630,5469,4704,3758,5470,5471,2673,1573,1534,5472, // 3712 -5473, 536,1808,1761,3517,3894,3175,2645,5474,5475,5476,4705,3518,2929,1912,2809, // 3728 -5477,3329,1122, 377,3251,5478, 360,5479,5480,4343,1529, 551,5481,2060,3759,1769, // 3744 -2431,5482,2930,4344,3330,3120,2327,2109,2031,4706,1404, 136,1468,1479, 672,1171, // 3760 -3252,2308, 271,3176,5483,2772,5484,2050, 678,2736, 865,1948,4707,5485,2014,4098, // 3776 -2971,5486,2737,2227,1397,3068,3760,4708,4709,1735,2931,3403,3631,5487,3895, 509, // 3792 -2854,2458,2890,3896,5488,5489,3177,3178,4710,4345,2538,4711,2309,1166,1010, 552, // 3808 - 681,1888,5490,5491,2972,2973,4099,1287,1596,1862,3179, 358, 453, 736, 175, 478, // 3824 -1117, 905,1167,1097,5492,1854,1530,5493,1706,5494,2181,3519,2292,3761,3520,3632, // 3840 -4346,2093,4347,5495,3404,1193,2489,4348,1458,2193,2208,1863,1889,1421,3331,2932, // 3856 -3069,2182,3521, 595,2123,5496,4100,5497,5498,4349,1707,2646, 223,3762,1359, 751, // 3872 -3121, 183,3522,5499,2810,3021, 419,2374, 633, 704,3897,2394, 241,5500,5501,5502, // 3888 - 838,3022,3763,2277,2773,2459,3898,1939,2051,4101,1309,3122,2246,1181,5503,1136, // 3904 -2209,3899,2375,1446,4350,2310,4712,5504,5505,4351,1055,2615, 484,3764,5506,4102, // 3920 - 625,4352,2278,3405,1499,4353,4103,5507,4104,4354,3253,2279,2280,3523,5508,5509, // 3936 -2774, 808,2616,3765,3406,4105,4355,3123,2539, 526,3407,3900,4356, 955,5510,1620, // 3952 -4357,2647,2432,5511,1429,3766,1669,1832, 994, 928,5512,3633,1260,5513,5514,5515, // 3968 -1949,2293, 741,2933,1626,4358,2738,2460, 867,1184, 362,3408,1392,5516,5517,4106, // 3984 -4359,1770,1736,3254,2934,4713,4714,1929,2707,1459,1158,5518,3070,3409,2891,1292, // 4000 -1930,2513,2855,3767,1986,1187,2072,2015,2617,4360,5519,2574,2514,2170,3768,2490, // 4016 -3332,5520,3769,4715,5521,5522, 666,1003,3023,1022,3634,4361,5523,4716,1814,2257, // 4032 - 574,3901,1603, 295,1535, 705,3902,4362, 283, 858, 417,5524,5525,3255,4717,4718, // 4048 -3071,1220,1890,1046,2281,2461,4107,1393,1599, 689,2575, 388,4363,5526,2491, 802, // 4064 -5527,2811,3903,2061,1405,2258,5528,4719,3904,2110,1052,1345,3256,1585,5529, 809, // 4080 -5530,5531,5532, 575,2739,3524, 956,1552,1469,1144,2328,5533,2329,1560,2462,3635, // 4096 -3257,4108, 616,2210,4364,3180,2183,2294,5534,1833,5535,3525,4720,5536,1319,3770, // 4112 -3771,1211,3636,1023,3258,1293,2812,5537,5538,5539,3905, 607,2311,3906, 762,2892, // 4128 -1439,4365,1360,4721,1485,3072,5540,4722,1038,4366,1450,2062,2648,4367,1379,4723, // 4144 -2593,5541,5542,4368,1352,1414,2330,2935,1172,5543,5544,3907,3908,4724,1798,1451, // 4160 -5545,5546,5547,5548,2936,4109,4110,2492,2351, 411,4111,4112,3637,3333,3124,4725, // 4176 -1561,2674,1452,4113,1375,5549,5550, 47,2974, 316,5551,1406,1591,2937,3181,5552, // 4192 -1025,2142,3125,3182, 354,2740, 884,2228,4369,2412, 508,3772, 726,3638, 996,2433, // 4208 -3639, 729,5553, 392,2194,1453,4114,4726,3773,5554,5555,2463,3640,2618,1675,2813, // 4224 - 919,2352,2975,2353,1270,4727,4115, 73,5556,5557, 647,5558,3259,2856,2259,1550, // 4240 -1346,3024,5559,1332, 883,3526,5560,5561,5562,5563,3334,2775,5564,1212, 831,1347, // 4256 -4370,4728,2331,3909,1864,3073, 720,3910,4729,4730,3911,5565,4371,5566,5567,4731, // 4272 -5568,5569,1799,4732,3774,2619,4733,3641,1645,2376,4734,5570,2938, 669,2211,2675, // 4288 -2434,5571,2893,5572,5573,1028,3260,5574,4372,2413,5575,2260,1353,5576,5577,4735, // 4304 -3183, 518,5578,4116,5579,4373,1961,5580,2143,4374,5581,5582,3025,2354,2355,3912, // 4320 - 516,1834,1454,4117,2708,4375,4736,2229,2620,1972,1129,3642,5583,2776,5584,2976, // 4336 -1422, 577,1470,3026,1524,3410,5585,5586, 432,4376,3074,3527,5587,2594,1455,2515, // 4352 -2230,1973,1175,5588,1020,2741,4118,3528,4737,5589,2742,5590,1743,1361,3075,3529, // 4368 -2649,4119,4377,4738,2295, 895, 924,4378,2171, 331,2247,3076, 166,1627,3077,1098, // 4384 -5591,1232,2894,2231,3411,4739, 657, 403,1196,2377, 542,3775,3412,1600,4379,3530, // 4400 -5592,4740,2777,3261, 576, 530,1362,4741,4742,2540,2676,3776,4120,5593, 842,3913, // 4416 -5594,2814,2032,1014,4121, 213,2709,3413, 665, 621,4380,5595,3777,2939,2435,5596, // 4432 -2436,3335,3643,3414,4743,4381,2541,4382,4744,3644,1682,4383,3531,1380,5597, 724, // 4448 -2282, 600,1670,5598,1337,1233,4745,3126,2248,5599,1621,4746,5600, 651,4384,5601, // 4464 -1612,4385,2621,5602,2857,5603,2743,2312,3078,5604, 716,2464,3079, 174,1255,2710, // 4480 -4122,3645, 548,1320,1398, 728,4123,1574,5605,1891,1197,3080,4124,5606,3081,3082, // 4496 -3778,3646,3779, 747,5607, 635,4386,4747,5608,5609,5610,4387,5611,5612,4748,5613, // 4512 -3415,4749,2437, 451,5614,3780,2542,2073,4388,2744,4389,4125,5615,1764,4750,5616, // 4528 -4390, 350,4751,2283,2395,2493,5617,4391,4126,2249,1434,4127, 488,4752, 458,4392, // 4544 -4128,3781, 771,1330,2396,3914,2576,3184,2160,2414,1553,2677,3185,4393,5618,2494, // 4560 -2895,2622,1720,2711,4394,3416,4753,5619,2543,4395,5620,3262,4396,2778,5621,2016, // 4576 -2745,5622,1155,1017,3782,3915,5623,3336,2313, 201,1865,4397,1430,5624,4129,5625, // 4592 -5626,5627,5628,5629,4398,1604,5630, 414,1866, 371,2595,4754,4755,3532,2017,3127, // 4608 -4756,1708, 960,4399, 887, 389,2172,1536,1663,1721,5631,2232,4130,2356,2940,1580, // 4624 -5632,5633,1744,4757,2544,4758,4759,5634,4760,5635,2074,5636,4761,3647,3417,2896, // 4640 -4400,5637,4401,2650,3418,2815, 673,2712,2465, 709,3533,4131,3648,4402,5638,1148, // 4656 - 502, 634,5639,5640,1204,4762,3649,1575,4763,2623,3783,5641,3784,3128, 948,3263, // 4672 - 121,1745,3916,1110,5642,4403,3083,2516,3027,4132,3785,1151,1771,3917,1488,4133, // 4688 -1987,5643,2438,3534,5644,5645,2094,5646,4404,3918,1213,1407,2816, 531,2746,2545, // 4704 -3264,1011,1537,4764,2779,4405,3129,1061,5647,3786,3787,1867,2897,5648,2018, 120, // 4720 -4406,4407,2063,3650,3265,2314,3919,2678,3419,1955,4765,4134,5649,3535,1047,2713, // 4736 -1266,5650,1368,4766,2858, 649,3420,3920,2546,2747,1102,2859,2679,5651,5652,2000, // 4752 -5653,1111,3651,2977,5654,2495,3921,3652,2817,1855,3421,3788,5655,5656,3422,2415, // 4768 -2898,3337,3266,3653,5657,2577,5658,3654,2818,4135,1460, 856,5659,3655,5660,2899, // 4784 -2978,5661,2900,3922,5662,4408, 632,2517, 875,3923,1697,3924,2296,5663,5664,4767, // 4800 -3028,1239, 580,4768,4409,5665, 914, 936,2075,1190,4136,1039,2124,5666,5667,5668, // 4816 -5669,3423,1473,5670,1354,4410,3925,4769,2173,3084,4137, 915,3338,4411,4412,3339, // 4832 -1605,1835,5671,2748, 398,3656,4413,3926,4138, 328,1913,2860,4139,3927,1331,4414, // 4848 -3029, 937,4415,5672,3657,4140,4141,3424,2161,4770,3425, 524, 742, 538,3085,1012, // 4864 -5673,5674,3928,2466,5675, 658,1103, 225,3929,5676,5677,4771,5678,4772,5679,3267, // 4880 -1243,5680,4142, 963,2250,4773,5681,2714,3658,3186,5682,5683,2596,2332,5684,4774, // 4896 -5685,5686,5687,3536, 957,3426,2547,2033,1931,2941,2467, 870,2019,3659,1746,2780, // 4912 -2781,2439,2468,5688,3930,5689,3789,3130,3790,3537,3427,3791,5690,1179,3086,5691, // 4928 -3187,2378,4416,3792,2548,3188,3131,2749,4143,5692,3428,1556,2549,2297, 977,2901, // 4944 -2034,4144,1205,3429,5693,1765,3430,3189,2125,1271, 714,1689,4775,3538,5694,2333, // 4960 -3931, 533,4417,3660,2184, 617,5695,2469,3340,3539,2315,5696,5697,3190,5698,5699, // 4976 -3932,1988, 618, 427,2651,3540,3431,5700,5701,1244,1690,5702,2819,4418,4776,5703, // 4992 -3541,4777,5704,2284,1576, 473,3661,4419,3432, 972,5705,3662,5706,3087,5707,5708, // 5008 -4778,4779,5709,3793,4145,4146,5710, 153,4780, 356,5711,1892,2902,4420,2144, 408, // 5024 - 803,2357,5712,3933,5713,4421,1646,2578,2518,4781,4782,3934,5714,3935,4422,5715, // 5040 -2416,3433, 752,5716,5717,1962,3341,2979,5718, 746,3030,2470,4783,4423,3794, 698, // 5056 -4784,1893,4424,3663,2550,4785,3664,3936,5719,3191,3434,5720,1824,1302,4147,2715, // 5072 -3937,1974,4425,5721,4426,3192, 823,1303,1288,1236,2861,3542,4148,3435, 774,3938, // 5088 -5722,1581,4786,1304,2862,3939,4787,5723,2440,2162,1083,3268,4427,4149,4428, 344, // 5104 -1173, 288,2316, 454,1683,5724,5725,1461,4788,4150,2597,5726,5727,4789, 985, 894, // 5120 -5728,3436,3193,5729,1914,2942,3795,1989,5730,2111,1975,5731,4151,5732,2579,1194, // 5136 - 425,5733,4790,3194,1245,3796,4429,5734,5735,2863,5736, 636,4791,1856,3940, 760, // 5152 -1800,5737,4430,2212,1508,4792,4152,1894,1684,2298,5738,5739,4793,4431,4432,2213, // 5168 - 479,5740,5741, 832,5742,4153,2496,5743,2980,2497,3797, 990,3132, 627,1815,2652, // 5184 -4433,1582,4434,2126,2112,3543,4794,5744, 799,4435,3195,5745,4795,2113,1737,3031, // 5200 -1018, 543, 754,4436,3342,1676,4796,4797,4154,4798,1489,5746,3544,5747,2624,2903, // 5216 -4155,5748,5749,2981,5750,5751,5752,5753,3196,4799,4800,2185,1722,5754,3269,3270, // 5232 -1843,3665,1715, 481, 365,1976,1857,5755,5756,1963,2498,4801,5757,2127,3666,3271, // 5248 - 433,1895,2064,2076,5758, 602,2750,5759,5760,5761,5762,5763,3032,1628,3437,5764, // 5264 -3197,4802,4156,2904,4803,2519,5765,2551,2782,5766,5767,5768,3343,4804,2905,5769, // 5280 -4805,5770,2864,4806,4807,1221,2982,4157,2520,5771,5772,5773,1868,1990,5774,5775, // 5296 -5776,1896,5777,5778,4808,1897,4158, 318,5779,2095,4159,4437,5780,5781, 485,5782, // 5312 - 938,3941, 553,2680, 116,5783,3942,3667,5784,3545,2681,2783,3438,3344,2820,5785, // 5328 -3668,2943,4160,1747,2944,2983,5786,5787, 207,5788,4809,5789,4810,2521,5790,3033, // 5344 - 890,3669,3943,5791,1878,3798,3439,5792,2186,2358,3440,1652,5793,5794,5795, 941, // 5360 -2299, 208,3546,4161,2020, 330,4438,3944,2906,2499,3799,4439,4811,5796,5797,5798, // 5376 //last 512 - -/*************************************************************************************** - *Everything below is of no interest for detection purpose * - *************************************************************************************** - -2522,1613,4812,5799,3345,3945,2523,5800,4162,5801,1637,4163,2471,4813,3946,5802, // 5392 -2500,3034,3800,5803,5804,2195,4814,5805,2163,5806,5807,5808,5809,5810,5811,5812, // 5408 -5813,5814,5815,5816,5817,5818,5819,5820,5821,5822,5823,5824,5825,5826,5827,5828, // 5424 -5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840,5841,5842,5843,5844, // 5440 -5845,5846,5847,5848,5849,5850,5851,5852,5853,5854,5855,5856,5857,5858,5859,5860, // 5456 -5861,5862,5863,5864,5865,5866,5867,5868,5869,5870,5871,5872,5873,5874,5875,5876, // 5472 -5877,5878,5879,5880,5881,5882,5883,5884,5885,5886,5887,5888,5889,5890,5891,5892, // 5488 -5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904,5905,5906,5907,5908, // 5504 -5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920,5921,5922,5923,5924, // 5520 -5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936,5937,5938,5939,5940, // 5536 -5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952,5953,5954,5955,5956, // 5552 -5957,5958,5959,5960,5961,5962,5963,5964,5965,5966,5967,5968,5969,5970,5971,5972, // 5568 -5973,5974,5975,5976,5977,5978,5979,5980,5981,5982,5983,5984,5985,5986,5987,5988, // 5584 -5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000,6001,6002,6003,6004, // 5600 -6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016,6017,6018,6019,6020, // 5616 -6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032,6033,6034,6035,6036, // 5632 -6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048,6049,6050,6051,6052, // 5648 -6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064,6065,6066,6067,6068, // 5664 -6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080,6081,6082,6083,6084, // 5680 -6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096,6097,6098,6099,6100, // 5696 -6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112,6113,6114,6115,6116, // 5712 -6117,6118,6119,6120,6121,6122,6123,6124,6125,6126,6127,6128,6129,6130,6131,6132, // 5728 -6133,6134,6135,6136,6137,6138,6139,6140,6141,6142,6143,6144,6145,6146,6147,6148, // 5744 -6149,6150,6151,6152,6153,6154,6155,6156,6157,6158,6159,6160,6161,6162,6163,6164, // 5760 -6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6176,6177,6178,6179,6180, // 5776 -6181,6182,6183,6184,6185,6186,6187,6188,6189,6190,6191,6192,6193,6194,6195,6196, // 5792 -6197,6198,6199,6200,6201,6202,6203,6204,6205,6206,6207,6208,6209,6210,6211,6212, // 5808 -6213,6214,6215,6216,6217,6218,6219,6220,6221,6222,6223,3670,6224,6225,6226,6227, // 5824 -6228,6229,6230,6231,6232,6233,6234,6235,6236,6237,6238,6239,6240,6241,6242,6243, // 5840 -6244,6245,6246,6247,6248,6249,6250,6251,6252,6253,6254,6255,6256,6257,6258,6259, // 5856 -6260,6261,6262,6263,6264,6265,6266,6267,6268,6269,6270,6271,6272,6273,6274,6275, // 5872 -6276,6277,6278,6279,6280,6281,6282,6283,6284,6285,4815,6286,6287,6288,6289,6290, // 5888 -6291,6292,4816,6293,6294,6295,6296,6297,6298,6299,6300,6301,6302,6303,6304,6305, // 5904 -6306,6307,6308,6309,6310,6311,4817,4818,6312,6313,6314,6315,6316,6317,6318,4819, // 5920 -6319,6320,6321,6322,6323,6324,6325,6326,6327,6328,6329,6330,6331,6332,6333,6334, // 5936 -6335,6336,6337,4820,6338,6339,6340,6341,6342,6343,6344,6345,6346,6347,6348,6349, // 5952 -6350,6351,6352,6353,6354,6355,6356,6357,6358,6359,6360,6361,6362,6363,6364,6365, // 5968 -6366,6367,6368,6369,6370,6371,6372,6373,6374,6375,6376,6377,6378,6379,6380,6381, // 5984 -6382,6383,6384,6385,6386,6387,6388,6389,6390,6391,6392,6393,6394,6395,6396,6397, // 6000 -6398,6399,6400,6401,6402,6403,6404,6405,6406,6407,6408,6409,6410,3441,6411,6412, // 6016 -6413,6414,6415,6416,6417,6418,6419,6420,6421,6422,6423,6424,6425,4440,6426,6427, // 6032 -6428,6429,6430,6431,6432,6433,6434,6435,6436,6437,6438,6439,6440,6441,6442,6443, // 6048 -6444,6445,6446,6447,6448,6449,6450,6451,6452,6453,6454,4821,6455,6456,6457,6458, // 6064 -6459,6460,6461,6462,6463,6464,6465,6466,6467,6468,6469,6470,6471,6472,6473,6474, // 6080 -6475,6476,6477,3947,3948,6478,6479,6480,6481,3272,4441,6482,6483,6484,6485,4442, // 6096 -6486,6487,6488,6489,6490,6491,6492,6493,6494,6495,6496,4822,6497,6498,6499,6500, // 6112 -6501,6502,6503,6504,6505,6506,6507,6508,6509,6510,6511,6512,6513,6514,6515,6516, // 6128 -6517,6518,6519,6520,6521,6522,6523,6524,6525,6526,6527,6528,6529,6530,6531,6532, // 6144 -6533,6534,6535,6536,6537,6538,6539,6540,6541,6542,6543,6544,6545,6546,6547,6548, // 6160 -6549,6550,6551,6552,6553,6554,6555,6556,2784,6557,4823,6558,6559,6560,6561,6562, // 6176 -6563,6564,6565,6566,6567,6568,6569,3949,6570,6571,6572,4824,6573,6574,6575,6576, // 6192 -6577,6578,6579,6580,6581,6582,6583,4825,6584,6585,6586,3950,2785,6587,6588,6589, // 6208 -6590,6591,6592,6593,6594,6595,6596,6597,6598,6599,6600,6601,6602,6603,6604,6605, // 6224 -6606,6607,6608,6609,6610,6611,6612,4826,6613,6614,6615,4827,6616,6617,6618,6619, // 6240 -6620,6621,6622,6623,6624,6625,4164,6626,6627,6628,6629,6630,6631,6632,6633,6634, // 6256 -3547,6635,4828,6636,6637,6638,6639,6640,6641,6642,3951,2984,6643,6644,6645,6646, // 6272 -6647,6648,6649,4165,6650,4829,6651,6652,4830,6653,6654,6655,6656,6657,6658,6659, // 6288 -6660,6661,6662,4831,6663,6664,6665,6666,6667,6668,6669,6670,6671,4166,6672,4832, // 6304 -3952,6673,6674,6675,6676,4833,6677,6678,6679,4167,6680,6681,6682,3198,6683,6684, // 6320 -6685,6686,6687,6688,6689,6690,6691,6692,6693,6694,6695,6696,6697,4834,6698,6699, // 6336 -6700,6701,6702,6703,6704,6705,6706,6707,6708,6709,6710,6711,6712,6713,6714,6715, // 6352 -6716,6717,6718,6719,6720,6721,6722,6723,6724,6725,6726,6727,6728,6729,6730,6731, // 6368 -6732,6733,6734,4443,6735,6736,6737,6738,6739,6740,6741,6742,6743,6744,6745,4444, // 6384 -6746,6747,6748,6749,6750,6751,6752,6753,6754,6755,6756,6757,6758,6759,6760,6761, // 6400 -6762,6763,6764,6765,6766,6767,6768,6769,6770,6771,6772,6773,6774,6775,6776,6777, // 6416 -6778,6779,6780,6781,4168,6782,6783,3442,6784,6785,6786,6787,6788,6789,6790,6791, // 6432 -4169,6792,6793,6794,6795,6796,6797,6798,6799,6800,6801,6802,6803,6804,6805,6806, // 6448 -6807,6808,6809,6810,6811,4835,6812,6813,6814,4445,6815,6816,4446,6817,6818,6819, // 6464 -6820,6821,6822,6823,6824,6825,6826,6827,6828,6829,6830,6831,6832,6833,6834,6835, // 6480 -3548,6836,6837,6838,6839,6840,6841,6842,6843,6844,6845,6846,4836,6847,6848,6849, // 6496 -6850,6851,6852,6853,6854,3953,6855,6856,6857,6858,6859,6860,6861,6862,6863,6864, // 6512 -6865,6866,6867,6868,6869,6870,6871,6872,6873,6874,6875,6876,6877,3199,6878,6879, // 6528 -6880,6881,6882,4447,6883,6884,6885,6886,6887,6888,6889,6890,6891,6892,6893,6894, // 6544 -6895,6896,6897,6898,6899,6900,6901,6902,6903,6904,4170,6905,6906,6907,6908,6909, // 6560 -6910,6911,6912,6913,6914,6915,6916,6917,6918,6919,6920,6921,6922,6923,6924,6925, // 6576 -6926,6927,4837,6928,6929,6930,6931,6932,6933,6934,6935,6936,3346,6937,6938,4838, // 6592 -6939,6940,6941,4448,6942,6943,6944,6945,6946,4449,6947,6948,6949,6950,6951,6952, // 6608 -6953,6954,6955,6956,6957,6958,6959,6960,6961,6962,6963,6964,6965,6966,6967,6968, // 6624 -6969,6970,6971,6972,6973,6974,6975,6976,6977,6978,6979,6980,6981,6982,6983,6984, // 6640 -6985,6986,6987,6988,6989,6990,6991,6992,6993,6994,3671,6995,6996,6997,6998,4839, // 6656 -6999,7000,7001,7002,3549,7003,7004,7005,7006,7007,7008,7009,7010,7011,7012,7013, // 6672 -7014,7015,7016,7017,7018,7019,7020,7021,7022,7023,7024,7025,7026,7027,7028,7029, // 6688 -7030,4840,7031,7032,7033,7034,7035,7036,7037,7038,4841,7039,7040,7041,7042,7043, // 6704 -7044,7045,7046,7047,7048,7049,7050,7051,7052,7053,7054,7055,7056,7057,7058,7059, // 6720 -7060,7061,7062,7063,7064,7065,7066,7067,7068,7069,7070,2985,7071,7072,7073,7074, // 6736 -7075,7076,7077,7078,7079,7080,4842,7081,7082,7083,7084,7085,7086,7087,7088,7089, // 6752 -7090,7091,7092,7093,7094,7095,7096,7097,7098,7099,7100,7101,7102,7103,7104,7105, // 6768 -7106,7107,7108,7109,7110,7111,7112,7113,7114,7115,7116,7117,7118,4450,7119,7120, // 6784 -7121,7122,7123,7124,7125,7126,7127,7128,7129,7130,7131,7132,7133,7134,7135,7136, // 6800 -7137,7138,7139,7140,7141,7142,7143,4843,7144,7145,7146,7147,7148,7149,7150,7151, // 6816 -7152,7153,7154,7155,7156,7157,7158,7159,7160,7161,7162,7163,7164,7165,7166,7167, // 6832 -7168,7169,7170,7171,7172,7173,7174,7175,7176,7177,7178,7179,7180,7181,7182,7183, // 6848 -7184,7185,7186,7187,7188,4171,4172,7189,7190,7191,7192,7193,7194,7195,7196,7197, // 6864 -7198,7199,7200,7201,7202,7203,7204,7205,7206,7207,7208,7209,7210,7211,7212,7213, // 6880 -7214,7215,7216,7217,7218,7219,7220,7221,7222,7223,7224,7225,7226,7227,7228,7229, // 6896 -7230,7231,7232,7233,7234,7235,7236,7237,7238,7239,7240,7241,7242,7243,7244,7245, // 6912 -7246,7247,7248,7249,7250,7251,7252,7253,7254,7255,7256,7257,7258,7259,7260,7261, // 6928 -7262,7263,7264,7265,7266,7267,7268,7269,7270,7271,7272,7273,7274,7275,7276,7277, // 6944 -7278,7279,7280,7281,7282,7283,7284,7285,7286,7287,7288,7289,7290,7291,7292,7293, // 6960 -7294,7295,7296,4844,7297,7298,7299,7300,7301,7302,7303,7304,7305,7306,7307,7308, // 6976 -7309,7310,7311,7312,7313,7314,7315,7316,4451,7317,7318,7319,7320,7321,7322,7323, // 6992 -7324,7325,7326,7327,7328,7329,7330,7331,7332,7333,7334,7335,7336,7337,7338,7339, // 7008 -7340,7341,7342,7343,7344,7345,7346,7347,7348,7349,7350,7351,7352,7353,4173,7354, // 7024 -7355,4845,7356,7357,7358,7359,7360,7361,7362,7363,7364,7365,7366,7367,7368,7369, // 7040 -7370,7371,7372,7373,7374,7375,7376,7377,7378,7379,7380,7381,7382,7383,7384,7385, // 7056 -7386,7387,7388,4846,7389,7390,7391,7392,7393,7394,7395,7396,7397,7398,7399,7400, // 7072 -7401,7402,7403,7404,7405,3672,7406,7407,7408,7409,7410,7411,7412,7413,7414,7415, // 7088 -7416,7417,7418,7419,7420,7421,7422,7423,7424,7425,7426,7427,7428,7429,7430,7431, // 7104 -7432,7433,7434,7435,7436,7437,7438,7439,7440,7441,7442,7443,7444,7445,7446,7447, // 7120 -7448,7449,7450,7451,7452,7453,4452,7454,3200,7455,7456,7457,7458,7459,7460,7461, // 7136 -7462,7463,7464,7465,7466,7467,7468,7469,7470,7471,7472,7473,7474,4847,7475,7476, // 7152 -7477,3133,7478,7479,7480,7481,7482,7483,7484,7485,7486,7487,7488,7489,7490,7491, // 7168 -7492,7493,7494,7495,7496,7497,7498,7499,7500,7501,7502,3347,7503,7504,7505,7506, // 7184 -7507,7508,7509,7510,7511,7512,7513,7514,7515,7516,7517,7518,7519,7520,7521,4848, // 7200 -7522,7523,7524,7525,7526,7527,7528,7529,7530,7531,7532,7533,7534,7535,7536,7537, // 7216 -7538,7539,7540,7541,7542,7543,7544,7545,7546,7547,7548,7549,3801,4849,7550,7551, // 7232 -7552,7553,7554,7555,7556,7557,7558,7559,7560,7561,7562,7563,7564,7565,7566,7567, // 7248 -7568,7569,3035,7570,7571,7572,7573,7574,7575,7576,7577,7578,7579,7580,7581,7582, // 7264 -7583,7584,7585,7586,7587,7588,7589,7590,7591,7592,7593,7594,7595,7596,7597,7598, // 7280 -7599,7600,7601,7602,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614, // 7296 -7615,7616,4850,7617,7618,3802,7619,7620,7621,7622,7623,7624,7625,7626,7627,7628, // 7312 -7629,7630,7631,7632,4851,7633,7634,7635,7636,7637,7638,7639,7640,7641,7642,7643, // 7328 -7644,7645,7646,7647,7648,7649,7650,7651,7652,7653,7654,7655,7656,7657,7658,7659, // 7344 -7660,7661,7662,7663,7664,7665,7666,7667,7668,7669,7670,4453,7671,7672,7673,7674, // 7360 -7675,7676,7677,7678,7679,7680,7681,7682,7683,7684,7685,7686,7687,7688,7689,7690, // 7376 -7691,7692,7693,7694,7695,7696,7697,3443,7698,7699,7700,7701,7702,4454,7703,7704, // 7392 -7705,7706,7707,7708,7709,7710,7711,7712,7713,2472,7714,7715,7716,7717,7718,7719, // 7408 -7720,7721,7722,7723,7724,7725,7726,7727,7728,7729,7730,7731,3954,7732,7733,7734, // 7424 -7735,7736,7737,7738,7739,7740,7741,7742,7743,7744,7745,7746,7747,7748,7749,7750, // 7440 -3134,7751,7752,4852,7753,7754,7755,4853,7756,7757,7758,7759,7760,4174,7761,7762, // 7456 -7763,7764,7765,7766,7767,7768,7769,7770,7771,7772,7773,7774,7775,7776,7777,7778, // 7472 -7779,7780,7781,7782,7783,7784,7785,7786,7787,7788,7789,7790,7791,7792,7793,7794, // 7488 -7795,7796,7797,7798,7799,7800,7801,7802,7803,7804,7805,4854,7806,7807,7808,7809, // 7504 -7810,7811,7812,7813,7814,7815,7816,7817,7818,7819,7820,7821,7822,7823,7824,7825, // 7520 -4855,7826,7827,7828,7829,7830,7831,7832,7833,7834,7835,7836,7837,7838,7839,7840, // 7536 -7841,7842,7843,7844,7845,7846,7847,3955,7848,7849,7850,7851,7852,7853,7854,7855, // 7552 -7856,7857,7858,7859,7860,3444,7861,7862,7863,7864,7865,7866,7867,7868,7869,7870, // 7568 -7871,7872,7873,7874,7875,7876,7877,7878,7879,7880,7881,7882,7883,7884,7885,7886, // 7584 -7887,7888,7889,7890,7891,4175,7892,7893,7894,7895,7896,4856,4857,7897,7898,7899, // 7600 -7900,2598,7901,7902,7903,7904,7905,7906,7907,7908,4455,7909,7910,7911,7912,7913, // 7616 -7914,3201,7915,7916,7917,7918,7919,7920,7921,4858,7922,7923,7924,7925,7926,7927, // 7632 -7928,7929,7930,7931,7932,7933,7934,7935,7936,7937,7938,7939,7940,7941,7942,7943, // 7648 -7944,7945,7946,7947,7948,7949,7950,7951,7952,7953,7954,7955,7956,7957,7958,7959, // 7664 -7960,7961,7962,7963,7964,7965,7966,7967,7968,7969,7970,7971,7972,7973,7974,7975, // 7680 -7976,7977,7978,7979,7980,7981,4859,7982,7983,7984,7985,7986,7987,7988,7989,7990, // 7696 -7991,7992,7993,7994,7995,7996,4860,7997,7998,7999,8000,8001,8002,8003,8004,8005, // 7712 -8006,8007,8008,8009,8010,8011,8012,8013,8014,8015,8016,4176,8017,8018,8019,8020, // 7728 -8021,8022,8023,4861,8024,8025,8026,8027,8028,8029,8030,8031,8032,8033,8034,8035, // 7744 -8036,4862,4456,8037,8038,8039,8040,4863,8041,8042,8043,8044,8045,8046,8047,8048, // 7760 -8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8062,8063,8064, // 7776 -8065,8066,8067,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079,8080, // 7792 -8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,8093,8094,8095,8096, // 7808 -8097,8098,8099,4864,4177,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110, // 7824 -8111,8112,8113,8114,8115,8116,8117,8118,8119,8120,4178,8121,8122,8123,8124,8125, // 7840 -8126,8127,8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141, // 7856 -8142,8143,8144,8145,4865,4866,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155, // 7872 -8156,8157,8158,8159,8160,8161,8162,8163,8164,8165,4179,8166,8167,8168,8169,8170, // 7888 -8171,8172,8173,8174,8175,8176,8177,8178,8179,8180,8181,4457,8182,8183,8184,8185, // 7904 -8186,8187,8188,8189,8190,8191,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201, // 7920 -8202,8203,8204,8205,8206,8207,8208,8209,8210,8211,8212,8213,8214,8215,8216,8217, // 7936 -8218,8219,8220,8221,8222,8223,8224,8225,8226,8227,8228,8229,8230,8231,8232,8233, // 7952 -8234,8235,8236,8237,8238,8239,8240,8241,8242,8243,8244,8245,8246,8247,8248,8249, // 7968 -8250,8251,8252,8253,8254,8255,8256,3445,8257,8258,8259,8260,8261,8262,4458,8263, // 7984 -8264,8265,8266,8267,8268,8269,8270,8271,8272,4459,8273,8274,8275,8276,3550,8277, // 8000 -8278,8279,8280,8281,8282,8283,8284,8285,8286,8287,8288,8289,4460,8290,8291,8292, // 8016 -8293,8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,8304,8305,8306,8307,4867, // 8032 -8308,8309,8310,8311,8312,3551,8313,8314,8315,8316,8317,8318,8319,8320,8321,8322, // 8048 -8323,8324,8325,8326,4868,8327,8328,8329,8330,8331,8332,8333,8334,8335,8336,8337, // 8064 -8338,8339,8340,8341,8342,8343,8344,8345,8346,8347,8348,8349,8350,8351,8352,8353, // 8080 -8354,8355,8356,8357,8358,8359,8360,8361,8362,8363,4869,4461,8364,8365,8366,8367, // 8096 -8368,8369,8370,4870,8371,8372,8373,8374,8375,8376,8377,8378,8379,8380,8381,8382, // 8112 -8383,8384,8385,8386,8387,8388,8389,8390,8391,8392,8393,8394,8395,8396,8397,8398, // 8128 -8399,8400,8401,8402,8403,8404,8405,8406,8407,8408,8409,8410,4871,8411,8412,8413, // 8144 -8414,8415,8416,8417,8418,8419,8420,8421,8422,4462,8423,8424,8425,8426,8427,8428, // 8160 -8429,8430,8431,8432,8433,2986,8434,8435,8436,8437,8438,8439,8440,8441,8442,8443, // 8176 -8444,8445,8446,8447,8448,8449,8450,8451,8452,8453,8454,8455,8456,8457,8458,8459, // 8192 -8460,8461,8462,8463,8464,8465,8466,8467,8468,8469,8470,8471,8472,8473,8474,8475, // 8208 -8476,8477,8478,4180,8479,8480,8481,8482,8483,8484,8485,8486,8487,8488,8489,8490, // 8224 -8491,8492,8493,8494,8495,8496,8497,8498,8499,8500,8501,8502,8503,8504,8505,8506, // 8240 -8507,8508,8509,8510,8511,8512,8513,8514,8515,8516,8517,8518,8519,8520,8521,8522, // 8256 -8523,8524,8525,8526,8527,8528,8529,8530,8531,8532,8533,8534,8535,8536,8537,8538, // 8272 -8539,8540,8541,8542,8543,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554, // 8288 -8555,8556,8557,8558,8559,8560,8561,8562,8563,8564,4872,8565,8566,8567,8568,8569, // 8304 -8570,8571,8572,8573,4873,8574,8575,8576,8577,8578,8579,8580,8581,8582,8583,8584, // 8320 -8585,8586,8587,8588,8589,8590,8591,8592,8593,8594,8595,8596,8597,8598,8599,8600, // 8336 -8601,8602,8603,8604,8605,3803,8606,8607,8608,8609,8610,8611,8612,8613,4874,3804, // 8352 -8614,8615,8616,8617,8618,8619,8620,8621,3956,8622,8623,8624,8625,8626,8627,8628, // 8368 -8629,8630,8631,8632,8633,8634,8635,8636,8637,8638,2865,8639,8640,8641,8642,8643, // 8384 -8644,8645,8646,8647,8648,8649,8650,8651,8652,8653,8654,8655,8656,4463,8657,8658, // 8400 -8659,4875,4876,8660,8661,8662,8663,8664,8665,8666,8667,8668,8669,8670,8671,8672, // 8416 -8673,8674,8675,8676,8677,8678,8679,8680,8681,4464,8682,8683,8684,8685,8686,8687, // 8432 -8688,8689,8690,8691,8692,8693,8694,8695,8696,8697,8698,8699,8700,8701,8702,8703, // 8448 -8704,8705,8706,8707,8708,8709,2261,8710,8711,8712,8713,8714,8715,8716,8717,8718, // 8464 -8719,8720,8721,8722,8723,8724,8725,8726,8727,8728,8729,8730,8731,8732,8733,4181, // 8480 -8734,8735,8736,8737,8738,8739,8740,8741,8742,8743,8744,8745,8746,8747,8748,8749, // 8496 -8750,8751,8752,8753,8754,8755,8756,8757,8758,8759,8760,8761,8762,8763,4877,8764, // 8512 -8765,8766,8767,8768,8769,8770,8771,8772,8773,8774,8775,8776,8777,8778,8779,8780, // 8528 -8781,8782,8783,8784,8785,8786,8787,8788,4878,8789,4879,8790,8791,8792,4880,8793, // 8544 -8794,8795,8796,8797,8798,8799,8800,8801,4881,8802,8803,8804,8805,8806,8807,8808, // 8560 -8809,8810,8811,8812,8813,8814,8815,3957,8816,8817,8818,8819,8820,8821,8822,8823, // 8576 -8824,8825,8826,8827,8828,8829,8830,8831,8832,8833,8834,8835,8836,8837,8838,8839, // 8592 -8840,8841,8842,8843,8844,8845,8846,8847,4882,8848,8849,8850,8851,8852,8853,8854, // 8608 -8855,8856,8857,8858,8859,8860,8861,8862,8863,8864,8865,8866,8867,8868,8869,8870, // 8624 -8871,8872,8873,8874,8875,8876,8877,8878,8879,8880,8881,8882,8883,8884,3202,8885, // 8640 -8886,8887,8888,8889,8890,8891,8892,8893,8894,8895,8896,8897,8898,8899,8900,8901, // 8656 -8902,8903,8904,8905,8906,8907,8908,8909,8910,8911,8912,8913,8914,8915,8916,8917, // 8672 -8918,8919,8920,8921,8922,8923,8924,4465,8925,8926,8927,8928,8929,8930,8931,8932, // 8688 -4883,8933,8934,8935,8936,8937,8938,8939,8940,8941,8942,8943,2214,8944,8945,8946, // 8704 -8947,8948,8949,8950,8951,8952,8953,8954,8955,8956,8957,8958,8959,8960,8961,8962, // 8720 -8963,8964,8965,4884,8966,8967,8968,8969,8970,8971,8972,8973,8974,8975,8976,8977, // 8736 -8978,8979,8980,8981,8982,8983,8984,8985,8986,8987,8988,8989,8990,8991,8992,4885, // 8752 -8993,8994,8995,8996,8997,8998,8999,9000,9001,9002,9003,9004,9005,9006,9007,9008, // 8768 -9009,9010,9011,9012,9013,9014,9015,9016,9017,9018,9019,9020,9021,4182,9022,9023, // 8784 -9024,9025,9026,9027,9028,9029,9030,9031,9032,9033,9034,9035,9036,9037,9038,9039, // 8800 -9040,9041,9042,9043,9044,9045,9046,9047,9048,9049,9050,9051,9052,9053,9054,9055, // 8816 -9056,9057,9058,9059,9060,9061,9062,9063,4886,9064,9065,9066,9067,9068,9069,4887, // 8832 -9070,9071,9072,9073,9074,9075,9076,9077,9078,9079,9080,9081,9082,9083,9084,9085, // 8848 -9086,9087,9088,9089,9090,9091,9092,9093,9094,9095,9096,9097,9098,9099,9100,9101, // 8864 -9102,9103,9104,9105,9106,9107,9108,9109,9110,9111,9112,9113,9114,9115,9116,9117, // 8880 -9118,9119,9120,9121,9122,9123,9124,9125,9126,9127,9128,9129,9130,9131,9132,9133, // 8896 -9134,9135,9136,9137,9138,9139,9140,9141,3958,9142,9143,9144,9145,9146,9147,9148, // 8912 -9149,9150,9151,4888,9152,9153,9154,9155,9156,9157,9158,9159,9160,9161,9162,9163, // 8928 -9164,9165,9166,9167,9168,9169,9170,9171,9172,9173,9174,9175,4889,9176,9177,9178, // 8944 -9179,9180,9181,9182,9183,9184,9185,9186,9187,9188,9189,9190,9191,9192,9193,9194, // 8960 -9195,9196,9197,9198,9199,9200,9201,9202,9203,4890,9204,9205,9206,9207,9208,9209, // 8976 -9210,9211,9212,9213,9214,9215,9216,9217,9218,9219,9220,9221,9222,4466,9223,9224, // 8992 -9225,9226,9227,9228,9229,9230,9231,9232,9233,9234,9235,9236,9237,9238,9239,9240, // 9008 -9241,9242,9243,9244,9245,4891,9246,9247,9248,9249,9250,9251,9252,9253,9254,9255, // 9024 -9256,9257,4892,9258,9259,9260,9261,4893,4894,9262,9263,9264,9265,9266,9267,9268, // 9040 -9269,9270,9271,9272,9273,4467,9274,9275,9276,9277,9278,9279,9280,9281,9282,9283, // 9056 -9284,9285,3673,9286,9287,9288,9289,9290,9291,9292,9293,9294,9295,9296,9297,9298, // 9072 -9299,9300,9301,9302,9303,9304,9305,9306,9307,9308,9309,9310,9311,9312,9313,9314, // 9088 -9315,9316,9317,9318,9319,9320,9321,9322,4895,9323,9324,9325,9326,9327,9328,9329, // 9104 -9330,9331,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345, // 9120 -9346,9347,4468,9348,9349,9350,9351,9352,9353,9354,9355,9356,9357,9358,9359,9360, // 9136 -9361,9362,9363,9364,9365,9366,9367,9368,9369,9370,9371,9372,9373,4896,9374,4469, // 9152 -9375,9376,9377,9378,9379,4897,9380,9381,9382,9383,9384,9385,9386,9387,9388,9389, // 9168 -9390,9391,9392,9393,9394,9395,9396,9397,9398,9399,9400,9401,9402,9403,9404,9405, // 9184 -9406,4470,9407,2751,9408,9409,3674,3552,9410,9411,9412,9413,9414,9415,9416,9417, // 9200 -9418,9419,9420,9421,4898,9422,9423,9424,9425,9426,9427,9428,9429,3959,9430,9431, // 9216 -9432,9433,9434,9435,9436,4471,9437,9438,9439,9440,9441,9442,9443,9444,9445,9446, // 9232 -9447,9448,9449,9450,3348,9451,9452,9453,9454,9455,9456,9457,9458,9459,9460,9461, // 9248 -9462,9463,9464,9465,9466,9467,9468,9469,9470,9471,9472,4899,9473,9474,9475,9476, // 9264 -9477,4900,9478,9479,9480,9481,9482,9483,9484,9485,9486,9487,9488,3349,9489,9490, // 9280 -9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9503,9504,9505,9506, // 9296 -9507,9508,9509,9510,9511,9512,9513,9514,9515,9516,9517,9518,9519,9520,4901,9521, // 9312 -9522,9523,9524,9525,9526,4902,9527,9528,9529,9530,9531,9532,9533,9534,9535,9536, // 9328 -9537,9538,9539,9540,9541,9542,9543,9544,9545,9546,9547,9548,9549,9550,9551,9552, // 9344 -9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568, // 9360 -9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9581,9582,9583,9584, // 9376 -3805,9585,9586,9587,9588,9589,9590,9591,9592,9593,9594,9595,9596,9597,9598,9599, // 9392 -9600,9601,9602,4903,9603,9604,9605,9606,9607,4904,9608,9609,9610,9611,9612,9613, // 9408 -9614,4905,9615,9616,9617,9618,9619,9620,9621,9622,9623,9624,9625,9626,9627,9628, // 9424 -9629,9630,9631,9632,4906,9633,9634,9635,9636,9637,9638,9639,9640,9641,9642,9643, // 9440 -4907,9644,9645,9646,9647,9648,9649,9650,9651,9652,9653,9654,9655,9656,9657,9658, // 9456 -9659,9660,9661,9662,9663,9664,9665,9666,9667,9668,9669,9670,9671,9672,4183,9673, // 9472 -9674,9675,9676,9677,4908,9678,9679,9680,9681,4909,9682,9683,9684,9685,9686,9687, // 9488 -9688,9689,9690,4910,9691,9692,9693,3675,9694,9695,9696,2945,9697,9698,9699,9700, // 9504 -9701,9702,9703,9704,9705,4911,9706,9707,9708,9709,9710,9711,9712,9713,9714,9715, // 9520 -9716,9717,9718,9719,9720,9721,9722,9723,9724,9725,9726,9727,9728,9729,9730,9731, // 9536 -9732,9733,9734,9735,4912,9736,9737,9738,9739,9740,4913,9741,9742,9743,9744,9745, // 9552 -9746,9747,9748,9749,9750,9751,9752,9753,9754,9755,9756,9757,9758,4914,9759,9760, // 9568 -9761,9762,9763,9764,9765,9766,9767,9768,9769,9770,9771,9772,9773,9774,9775,9776, // 9584 -9777,9778,9779,9780,9781,9782,4915,9783,9784,9785,9786,9787,9788,9789,9790,9791, // 9600 -9792,9793,4916,9794,9795,9796,9797,9798,9799,9800,9801,9802,9803,9804,9805,9806, // 9616 -9807,9808,9809,9810,9811,9812,9813,9814,9815,9816,9817,9818,9819,9820,9821,9822, // 9632 -9823,9824,9825,9826,9827,9828,9829,9830,9831,9832,9833,9834,9835,9836,9837,9838, // 9648 -9839,9840,9841,9842,9843,9844,9845,9846,9847,9848,9849,9850,9851,9852,9853,9854, // 9664 -9855,9856,9857,9858,9859,9860,9861,9862,9863,9864,9865,9866,9867,9868,4917,9869, // 9680 -9870,9871,9872,9873,9874,9875,9876,9877,9878,9879,9880,9881,9882,9883,9884,9885, // 9696 -9886,9887,9888,9889,9890,9891,9892,4472,9893,9894,9895,9896,9897,3806,9898,9899, // 9712 -9900,9901,9902,9903,9904,9905,9906,9907,9908,9909,9910,9911,9912,9913,9914,4918, // 9728 -9915,9916,9917,4919,9918,9919,9920,9921,4184,9922,9923,9924,9925,9926,9927,9928, // 9744 -9929,9930,9931,9932,9933,9934,9935,9936,9937,9938,9939,9940,9941,9942,9943,9944, // 9760 -9945,9946,4920,9947,9948,9949,9950,9951,9952,9953,9954,9955,4185,9956,9957,9958, // 9776 -9959,9960,9961,9962,9963,9964,9965,4921,9966,9967,9968,4473,9969,9970,9971,9972, // 9792 -9973,9974,9975,9976,9977,4474,9978,9979,9980,9981,9982,9983,9984,9985,9986,9987, // 9808 -9988,9989,9990,9991,9992,9993,9994,9995,9996,9997,9998,9999,10000,10001,10002,10003, // 9824 -10004,10005,10006,10007,10008,10009,10010,10011,10012,10013,10014,10015,10016,10017,10018,10019, // 9840 -10020,10021,4922,10022,4923,10023,10024,10025,10026,10027,10028,10029,10030,10031,10032,10033, // 9856 -10034,10035,10036,10037,10038,10039,10040,10041,10042,10043,10044,10045,10046,10047,10048,4924, // 9872 -10049,10050,10051,10052,10053,10054,10055,10056,10057,10058,10059,10060,10061,10062,10063,10064, // 9888 -10065,10066,10067,10068,10069,10070,10071,10072,10073,10074,10075,10076,10077,10078,10079,10080, // 9904 -10081,10082,10083,10084,10085,10086,10087,4475,10088,10089,10090,10091,10092,10093,10094,10095, // 9920 -10096,10097,4476,10098,10099,10100,10101,10102,10103,10104,10105,10106,10107,10108,10109,10110, // 9936 -10111,2174,10112,10113,10114,10115,10116,10117,10118,10119,10120,10121,10122,10123,10124,10125, // 9952 -10126,10127,10128,10129,10130,10131,10132,10133,10134,10135,10136,10137,10138,10139,10140,3807, // 9968 -4186,4925,10141,10142,10143,10144,10145,10146,10147,4477,4187,10148,10149,10150,10151,10152, // 9984 -10153,4188,10154,10155,10156,10157,10158,10159,10160,10161,4926,10162,10163,10164,10165,10166, //10000 -10167,10168,10169,10170,10171,10172,10173,10174,10175,10176,10177,10178,10179,10180,10181,10182, //10016 -10183,10184,10185,10186,10187,10188,10189,10190,10191,10192,3203,10193,10194,10195,10196,10197, //10032 -10198,10199,10200,4478,10201,10202,10203,10204,4479,10205,10206,10207,10208,10209,10210,10211, //10048 -10212,10213,10214,10215,10216,10217,10218,10219,10220,10221,10222,10223,10224,10225,10226,10227, //10064 -10228,10229,10230,10231,10232,10233,10234,4927,10235,10236,10237,10238,10239,10240,10241,10242, //10080 -10243,10244,10245,10246,10247,10248,10249,10250,10251,10252,10253,10254,10255,10256,10257,10258, //10096 -10259,10260,10261,10262,10263,10264,10265,10266,10267,10268,10269,10270,10271,10272,10273,4480, //10112 -4928,4929,10274,10275,10276,10277,10278,10279,10280,10281,10282,10283,10284,10285,10286,10287, //10128 -10288,10289,10290,10291,10292,10293,10294,10295,10296,10297,10298,10299,10300,10301,10302,10303, //10144 -10304,10305,10306,10307,10308,10309,10310,10311,10312,10313,10314,10315,10316,10317,10318,10319, //10160 -10320,10321,10322,10323,10324,10325,10326,10327,10328,10329,10330,10331,10332,10333,10334,4930, //10176 -10335,10336,10337,10338,10339,10340,10341,10342,4931,10343,10344,10345,10346,10347,10348,10349, //10192 -10350,10351,10352,10353,10354,10355,3088,10356,2786,10357,10358,10359,10360,4189,10361,10362, //10208 -10363,10364,10365,10366,10367,10368,10369,10370,10371,10372,10373,10374,10375,4932,10376,10377, //10224 -10378,10379,10380,10381,10382,10383,10384,10385,10386,10387,10388,10389,10390,10391,10392,4933, //10240 -10393,10394,10395,4934,10396,10397,10398,10399,10400,10401,10402,10403,10404,10405,10406,10407, //10256 -10408,10409,10410,10411,10412,3446,10413,10414,10415,10416,10417,10418,10419,10420,10421,10422, //10272 -10423,4935,10424,10425,10426,10427,10428,10429,10430,4936,10431,10432,10433,10434,10435,10436, //10288 -10437,10438,10439,10440,10441,10442,10443,4937,10444,10445,10446,10447,4481,10448,10449,10450, //10304 -10451,10452,10453,10454,10455,10456,10457,10458,10459,10460,10461,10462,10463,10464,10465,10466, //10320 -10467,10468,10469,10470,10471,10472,10473,10474,10475,10476,10477,10478,10479,10480,10481,10482, //10336 -10483,10484,10485,10486,10487,10488,10489,10490,10491,10492,10493,10494,10495,10496,10497,10498, //10352 -10499,10500,10501,10502,10503,10504,10505,4938,10506,10507,10508,10509,10510,2552,10511,10512, //10368 -10513,10514,10515,10516,3447,10517,10518,10519,10520,10521,10522,10523,10524,10525,10526,10527, //10384 -10528,10529,10530,10531,10532,10533,10534,10535,10536,10537,10538,10539,10540,10541,10542,10543, //10400 -4482,10544,4939,10545,10546,10547,10548,10549,10550,10551,10552,10553,10554,10555,10556,10557, //10416 -10558,10559,10560,10561,10562,10563,10564,10565,10566,10567,3676,4483,10568,10569,10570,10571, //10432 -10572,3448,10573,10574,10575,10576,10577,10578,10579,10580,10581,10582,10583,10584,10585,10586, //10448 -10587,10588,10589,10590,10591,10592,10593,10594,10595,10596,10597,10598,10599,10600,10601,10602, //10464 -10603,10604,10605,10606,10607,10608,10609,10610,10611,10612,10613,10614,10615,10616,10617,10618, //10480 -10619,10620,10621,10622,10623,10624,10625,10626,10627,4484,10628,10629,10630,10631,10632,4940, //10496 -10633,10634,10635,10636,10637,10638,10639,10640,10641,10642,10643,10644,10645,10646,10647,10648, //10512 -10649,10650,10651,10652,10653,10654,10655,10656,4941,10657,10658,10659,2599,10660,10661,10662, //10528 -10663,10664,10665,10666,3089,10667,10668,10669,10670,10671,10672,10673,10674,10675,10676,10677, //10544 -10678,10679,10680,4942,10681,10682,10683,10684,10685,10686,10687,10688,10689,10690,10691,10692, //10560 -10693,10694,10695,10696,10697,4485,10698,10699,10700,10701,10702,10703,10704,4943,10705,3677, //10576 -10706,10707,10708,10709,10710,10711,10712,4944,10713,10714,10715,10716,10717,10718,10719,10720, //10592 -10721,10722,10723,10724,10725,10726,10727,10728,4945,10729,10730,10731,10732,10733,10734,10735, //10608 -10736,10737,10738,10739,10740,10741,10742,10743,10744,10745,10746,10747,10748,10749,10750,10751, //10624 -10752,10753,10754,10755,10756,10757,10758,10759,10760,10761,4946,10762,10763,10764,10765,10766, //10640 -10767,4947,4948,10768,10769,10770,10771,10772,10773,10774,10775,10776,10777,10778,10779,10780, //10656 -10781,10782,10783,10784,10785,10786,10787,10788,10789,10790,10791,10792,10793,10794,10795,10796, //10672 -10797,10798,10799,10800,10801,10802,10803,10804,10805,10806,10807,10808,10809,10810,10811,10812, //10688 -10813,10814,10815,10816,10817,10818,10819,10820,10821,10822,10823,10824,10825,10826,10827,10828, //10704 -10829,10830,10831,10832,10833,10834,10835,10836,10837,10838,10839,10840,10841,10842,10843,10844, //10720 -10845,10846,10847,10848,10849,10850,10851,10852,10853,10854,10855,10856,10857,10858,10859,10860, //10736 -10861,10862,10863,10864,10865,10866,10867,10868,10869,10870,10871,10872,10873,10874,10875,10876, //10752 -10877,10878,4486,10879,10880,10881,10882,10883,10884,10885,4949,10886,10887,10888,10889,10890, //10768 -10891,10892,10893,10894,10895,10896,10897,10898,10899,10900,10901,10902,10903,10904,10905,10906, //10784 -10907,10908,10909,10910,10911,10912,10913,10914,10915,10916,10917,10918,10919,4487,10920,10921, //10800 -10922,10923,10924,10925,10926,10927,10928,10929,10930,10931,10932,4950,10933,10934,10935,10936, //10816 -10937,10938,10939,10940,10941,10942,10943,10944,10945,10946,10947,10948,10949,4488,10950,10951, //10832 -10952,10953,10954,10955,10956,10957,10958,10959,4190,10960,10961,10962,10963,10964,10965,10966, //10848 -10967,10968,10969,10970,10971,10972,10973,10974,10975,10976,10977,10978,10979,10980,10981,10982, //10864 -10983,10984,10985,10986,10987,10988,10989,10990,10991,10992,10993,10994,10995,10996,10997,10998, //10880 -10999,11000,11001,11002,11003,11004,11005,11006,3960,11007,11008,11009,11010,11011,11012,11013, //10896 -11014,11015,11016,11017,11018,11019,11020,11021,11022,11023,11024,11025,11026,11027,11028,11029, //10912 -11030,11031,11032,4951,11033,11034,11035,11036,11037,11038,11039,11040,11041,11042,11043,11044, //10928 -11045,11046,11047,4489,11048,11049,11050,11051,4952,11052,11053,11054,11055,11056,11057,11058, //10944 -4953,11059,11060,11061,11062,11063,11064,11065,11066,11067,11068,11069,11070,11071,4954,11072, //10960 -11073,11074,11075,11076,11077,11078,11079,11080,11081,11082,11083,11084,11085,11086,11087,11088, //10976 -11089,11090,11091,11092,11093,11094,11095,11096,11097,11098,11099,11100,11101,11102,11103,11104, //10992 -11105,11106,11107,11108,11109,11110,11111,11112,11113,11114,11115,3808,11116,11117,11118,11119, //11008 -11120,11121,11122,11123,11124,11125,11126,11127,11128,11129,11130,11131,11132,11133,11134,4955, //11024 -11135,11136,11137,11138,11139,11140,11141,11142,11143,11144,11145,11146,11147,11148,11149,11150, //11040 -11151,11152,11153,11154,11155,11156,11157,11158,11159,11160,11161,4956,11162,11163,11164,11165, //11056 -11166,11167,11168,11169,11170,11171,11172,11173,11174,11175,11176,11177,11178,11179,11180,4957, //11072 -11181,11182,11183,11184,11185,11186,4958,11187,11188,11189,11190,11191,11192,11193,11194,11195, //11088 -11196,11197,11198,11199,11200,3678,11201,11202,11203,11204,11205,11206,4191,11207,11208,11209, //11104 -11210,11211,11212,11213,11214,11215,11216,11217,11218,11219,11220,11221,11222,11223,11224,11225, //11120 -11226,11227,11228,11229,11230,11231,11232,11233,11234,11235,11236,11237,11238,11239,11240,11241, //11136 -11242,11243,11244,11245,11246,11247,11248,11249,11250,11251,4959,11252,11253,11254,11255,11256, //11152 -11257,11258,11259,11260,11261,11262,11263,11264,11265,11266,11267,11268,11269,11270,11271,11272, //11168 -11273,11274,11275,11276,11277,11278,11279,11280,11281,11282,11283,11284,11285,11286,11287,11288, //11184 -11289,11290,11291,11292,11293,11294,11295,11296,11297,11298,11299,11300,11301,11302,11303,11304, //11200 -11305,11306,11307,11308,11309,11310,11311,11312,11313,11314,3679,11315,11316,11317,11318,4490, //11216 -11319,11320,11321,11322,11323,11324,11325,11326,11327,11328,11329,11330,11331,11332,11333,11334, //11232 -11335,11336,11337,11338,11339,11340,11341,11342,11343,11344,11345,11346,11347,4960,11348,11349, //11248 -11350,11351,11352,11353,11354,11355,11356,11357,11358,11359,11360,11361,11362,11363,11364,11365, //11264 -11366,11367,11368,11369,11370,11371,11372,11373,11374,11375,11376,11377,3961,4961,11378,11379, //11280 -11380,11381,11382,11383,11384,11385,11386,11387,11388,11389,11390,11391,11392,11393,11394,11395, //11296 -11396,11397,4192,11398,11399,11400,11401,11402,11403,11404,11405,11406,11407,11408,11409,11410, //11312 -11411,4962,11412,11413,11414,11415,11416,11417,11418,11419,11420,11421,11422,11423,11424,11425, //11328 -11426,11427,11428,11429,11430,11431,11432,11433,11434,11435,11436,11437,11438,11439,11440,11441, //11344 -11442,11443,11444,11445,11446,11447,11448,11449,11450,11451,11452,11453,11454,11455,11456,11457, //11360 -11458,11459,11460,11461,11462,11463,11464,11465,11466,11467,11468,11469,4963,11470,11471,4491, //11376 -11472,11473,11474,11475,4964,11476,11477,11478,11479,11480,11481,11482,11483,11484,11485,11486, //11392 -11487,11488,11489,11490,11491,11492,4965,11493,11494,11495,11496,11497,11498,11499,11500,11501, //11408 -11502,11503,11504,11505,11506,11507,11508,11509,11510,11511,11512,11513,11514,11515,11516,11517, //11424 -11518,11519,11520,11521,11522,11523,11524,11525,11526,11527,11528,11529,3962,11530,11531,11532, //11440 -11533,11534,11535,11536,11537,11538,11539,11540,11541,11542,11543,11544,11545,11546,11547,11548, //11456 -11549,11550,11551,11552,11553,11554,11555,11556,11557,11558,11559,11560,11561,11562,11563,11564, //11472 -4193,4194,11565,11566,11567,11568,11569,11570,11571,11572,11573,11574,11575,11576,11577,11578, //11488 -11579,11580,11581,11582,11583,11584,11585,11586,11587,11588,11589,11590,11591,4966,4195,11592, //11504 -11593,11594,11595,11596,11597,11598,11599,11600,11601,11602,11603,11604,3090,11605,11606,11607, //11520 -11608,11609,11610,4967,11611,11612,11613,11614,11615,11616,11617,11618,11619,11620,11621,11622, //11536 -11623,11624,11625,11626,11627,11628,11629,11630,11631,11632,11633,11634,11635,11636,11637,11638, //11552 -11639,11640,11641,11642,11643,11644,11645,11646,11647,11648,11649,11650,11651,11652,11653,11654, //11568 -11655,11656,11657,11658,11659,11660,11661,11662,11663,11664,11665,11666,11667,11668,11669,11670, //11584 -11671,11672,11673,11674,4968,11675,11676,11677,11678,11679,11680,11681,11682,11683,11684,11685, //11600 -11686,11687,11688,11689,11690,11691,11692,11693,3809,11694,11695,11696,11697,11698,11699,11700, //11616 -11701,11702,11703,11704,11705,11706,11707,11708,11709,11710,11711,11712,11713,11714,11715,11716, //11632 -11717,11718,3553,11719,11720,11721,11722,11723,11724,11725,11726,11727,11728,11729,11730,4969, //11648 -11731,11732,11733,11734,11735,11736,11737,11738,11739,11740,4492,11741,11742,11743,11744,11745, //11664 -11746,11747,11748,11749,11750,11751,11752,4970,11753,11754,11755,11756,11757,11758,11759,11760, //11680 -11761,11762,11763,11764,11765,11766,11767,11768,11769,11770,11771,11772,11773,11774,11775,11776, //11696 -11777,11778,11779,11780,11781,11782,11783,11784,11785,11786,11787,11788,11789,11790,4971,11791, //11712 -11792,11793,11794,11795,11796,11797,4972,11798,11799,11800,11801,11802,11803,11804,11805,11806, //11728 -11807,11808,11809,11810,4973,11811,11812,11813,11814,11815,11816,11817,11818,11819,11820,11821, //11744 -11822,11823,11824,11825,11826,11827,11828,11829,11830,11831,11832,11833,11834,3680,3810,11835, //11760 -11836,4974,11837,11838,11839,11840,11841,11842,11843,11844,11845,11846,11847,11848,11849,11850, //11776 -11851,11852,11853,11854,11855,11856,11857,11858,11859,11860,11861,11862,11863,11864,11865,11866, //11792 -11867,11868,11869,11870,11871,11872,11873,11874,11875,11876,11877,11878,11879,11880,11881,11882, //11808 -11883,11884,4493,11885,11886,11887,11888,11889,11890,11891,11892,11893,11894,11895,11896,11897, //11824 -11898,11899,11900,11901,11902,11903,11904,11905,11906,11907,11908,11909,11910,11911,11912,11913, //11840 -11914,11915,4975,11916,11917,11918,11919,11920,11921,11922,11923,11924,11925,11926,11927,11928, //11856 -11929,11930,11931,11932,11933,11934,11935,11936,11937,11938,11939,11940,11941,11942,11943,11944, //11872 -11945,11946,11947,11948,11949,4976,11950,11951,11952,11953,11954,11955,11956,11957,11958,11959, //11888 -11960,11961,11962,11963,11964,11965,11966,11967,11968,11969,11970,11971,11972,11973,11974,11975, //11904 -11976,11977,11978,11979,11980,11981,11982,11983,11984,11985,11986,11987,4196,11988,11989,11990, //11920 -11991,11992,4977,11993,11994,11995,11996,11997,11998,11999,12000,12001,12002,12003,12004,12005, //11936 -12006,12007,12008,12009,12010,12011,12012,12013,12014,12015,12016,12017,12018,12019,12020,12021, //11952 -12022,12023,12024,12025,12026,12027,12028,12029,12030,12031,12032,12033,12034,12035,12036,12037, //11968 -12038,12039,12040,12041,12042,12043,12044,12045,12046,12047,12048,12049,12050,12051,12052,12053, //11984 -12054,12055,12056,12057,12058,12059,12060,12061,4978,12062,12063,12064,12065,12066,12067,12068, //12000 -12069,12070,12071,12072,12073,12074,12075,12076,12077,12078,12079,12080,12081,12082,12083,12084, //12016 -12085,12086,12087,12088,12089,12090,12091,12092,12093,12094,12095,12096,12097,12098,12099,12100, //12032 -12101,12102,12103,12104,12105,12106,12107,12108,12109,12110,12111,12112,12113,12114,12115,12116, //12048 -12117,12118,12119,12120,12121,12122,12123,4979,12124,12125,12126,12127,12128,4197,12129,12130, //12064 -12131,12132,12133,12134,12135,12136,12137,12138,12139,12140,12141,12142,12143,12144,12145,12146, //12080 -12147,12148,12149,12150,12151,12152,12153,12154,4980,12155,12156,12157,12158,12159,12160,4494, //12096 -12161,12162,12163,12164,3811,12165,12166,12167,12168,12169,4495,12170,12171,4496,12172,12173, //12112 -12174,12175,12176,3812,12177,12178,12179,12180,12181,12182,12183,12184,12185,12186,12187,12188, //12128 -12189,12190,12191,12192,12193,12194,12195,12196,12197,12198,12199,12200,12201,12202,12203,12204, //12144 -12205,12206,12207,12208,12209,12210,12211,12212,12213,12214,12215,12216,12217,12218,12219,12220, //12160 -12221,4981,12222,12223,12224,12225,12226,12227,12228,12229,12230,12231,12232,12233,12234,12235, //12176 -4982,12236,12237,12238,12239,12240,12241,12242,12243,12244,12245,4983,12246,12247,12248,12249, //12192 -4984,12250,12251,12252,12253,12254,12255,12256,12257,12258,12259,12260,12261,12262,12263,12264, //12208 -4985,12265,4497,12266,12267,12268,12269,12270,12271,12272,12273,12274,12275,12276,12277,12278, //12224 -12279,12280,12281,12282,12283,12284,12285,12286,12287,4986,12288,12289,12290,12291,12292,12293, //12240 -12294,12295,12296,2473,12297,12298,12299,12300,12301,12302,12303,12304,12305,12306,12307,12308, //12256 -12309,12310,12311,12312,12313,12314,12315,12316,12317,12318,12319,3963,12320,12321,12322,12323, //12272 -12324,12325,12326,12327,12328,12329,12330,12331,12332,4987,12333,12334,12335,12336,12337,12338, //12288 -12339,12340,12341,12342,12343,12344,12345,12346,12347,12348,12349,12350,12351,12352,12353,12354, //12304 -12355,12356,12357,12358,12359,3964,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369, //12320 -12370,3965,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384, //12336 -12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400, //12352 -12401,12402,12403,12404,12405,12406,12407,12408,4988,12409,12410,12411,12412,12413,12414,12415, //12368 -12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431, //12384 -12432,12433,12434,12435,12436,12437,12438,3554,12439,12440,12441,12442,12443,12444,12445,12446, //12400 -12447,12448,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462, //12416 -12463,12464,4989,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477, //12432 -12478,12479,12480,4990,12481,12482,12483,12484,12485,12486,12487,12488,12489,4498,12490,12491, //12448 -12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507, //12464 -12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523, //12480 -12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,12535,12536,12537,12538,12539, //12496 -12540,12541,12542,12543,12544,12545,12546,12547,12548,12549,12550,12551,4991,12552,12553,12554, //12512 -12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570, //12528 -12571,12572,12573,12574,12575,12576,12577,12578,3036,12579,12580,12581,12582,12583,3966,12584, //12544 -12585,12586,12587,12588,12589,12590,12591,12592,12593,12594,12595,12596,12597,12598,12599,12600, //12560 -12601,12602,12603,12604,12605,12606,12607,12608,12609,12610,12611,12612,12613,12614,12615,12616, //12576 -12617,12618,12619,12620,12621,12622,12623,12624,12625,12626,12627,12628,12629,12630,12631,12632, //12592 -12633,12634,12635,12636,12637,12638,12639,12640,12641,12642,12643,12644,12645,12646,4499,12647, //12608 -12648,12649,12650,12651,12652,12653,12654,12655,12656,12657,12658,12659,12660,12661,12662,12663, //12624 -12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12674,12675,12676,12677,12678,12679, //12640 -12680,12681,12682,12683,12684,12685,12686,12687,12688,12689,12690,12691,12692,12693,12694,12695, //12656 -12696,12697,12698,4992,12699,12700,12701,12702,12703,12704,12705,12706,12707,12708,12709,12710, //12672 -12711,12712,12713,12714,12715,12716,12717,12718,12719,12720,12721,12722,12723,12724,12725,12726, //12688 -12727,12728,12729,12730,12731,12732,12733,12734,12735,12736,12737,12738,12739,12740,12741,12742, //12704 -12743,12744,12745,12746,12747,12748,12749,12750,12751,12752,12753,12754,12755,12756,12757,12758, //12720 -12759,12760,12761,12762,12763,12764,12765,12766,12767,12768,12769,12770,12771,12772,12773,12774, //12736 -12775,12776,12777,12778,4993,2175,12779,12780,12781,12782,12783,12784,12785,12786,4500,12787, //12752 -12788,12789,12790,12791,12792,12793,12794,12795,12796,12797,12798,12799,12800,12801,12802,12803, //12768 -12804,12805,12806,12807,12808,12809,12810,12811,12812,12813,12814,12815,12816,12817,12818,12819, //12784 -12820,12821,12822,12823,12824,12825,12826,4198,3967,12827,12828,12829,12830,12831,12832,12833, //12800 -12834,12835,12836,12837,12838,12839,12840,12841,12842,12843,12844,12845,12846,12847,12848,12849, //12816 -12850,12851,12852,12853,12854,12855,12856,12857,12858,12859,12860,12861,4199,12862,12863,12864, //12832 -12865,12866,12867,12868,12869,12870,12871,12872,12873,12874,12875,12876,12877,12878,12879,12880, //12848 -12881,12882,12883,12884,12885,12886,12887,4501,12888,12889,12890,12891,12892,12893,12894,12895, //12864 -12896,12897,12898,12899,12900,12901,12902,12903,12904,12905,12906,12907,12908,12909,12910,12911, //12880 -12912,4994,12913,12914,12915,12916,12917,12918,12919,12920,12921,12922,12923,12924,12925,12926, //12896 -12927,12928,12929,12930,12931,12932,12933,12934,12935,12936,12937,12938,12939,12940,12941,12942, //12912 -12943,12944,12945,12946,12947,12948,12949,12950,12951,12952,12953,12954,12955,12956,1772,12957, //12928 -12958,12959,12960,12961,12962,12963,12964,12965,12966,12967,12968,12969,12970,12971,12972,12973, //12944 -12974,12975,12976,12977,12978,12979,12980,12981,12982,12983,12984,12985,12986,12987,12988,12989, //12960 -12990,12991,12992,12993,12994,12995,12996,12997,4502,12998,4503,12999,13000,13001,13002,13003, //12976 -4504,13004,13005,13006,13007,13008,13009,13010,13011,13012,13013,13014,13015,13016,13017,13018, //12992 -13019,13020,13021,13022,13023,13024,13025,13026,13027,13028,13029,3449,13030,13031,13032,13033, //13008 -13034,13035,13036,13037,13038,13039,13040,13041,13042,13043,13044,13045,13046,13047,13048,13049, //13024 -13050,13051,13052,13053,13054,13055,13056,13057,13058,13059,13060,13061,13062,13063,13064,13065, //13040 -13066,13067,13068,13069,13070,13071,13072,13073,13074,13075,13076,13077,13078,13079,13080,13081, //13056 -13082,13083,13084,13085,13086,13087,13088,13089,13090,13091,13092,13093,13094,13095,13096,13097, //13072 -13098,13099,13100,13101,13102,13103,13104,13105,13106,13107,13108,13109,13110,13111,13112,13113, //13088 -13114,13115,13116,13117,13118,3968,13119,4995,13120,13121,13122,13123,13124,13125,13126,13127, //13104 -4505,13128,13129,13130,13131,13132,13133,13134,4996,4506,13135,13136,13137,13138,13139,4997, //13120 -13140,13141,13142,13143,13144,13145,13146,13147,13148,13149,13150,13151,13152,13153,13154,13155, //13136 -13156,13157,13158,13159,4998,13160,13161,13162,13163,13164,13165,13166,13167,13168,13169,13170, //13152 -13171,13172,13173,13174,13175,13176,4999,13177,13178,13179,13180,13181,13182,13183,13184,13185, //13168 -13186,13187,13188,13189,13190,13191,13192,13193,13194,13195,13196,13197,13198,13199,13200,13201, //13184 -13202,13203,13204,13205,13206,5000,13207,13208,13209,13210,13211,13212,13213,13214,13215,13216, //13200 -13217,13218,13219,13220,13221,13222,13223,13224,13225,13226,13227,4200,5001,13228,13229,13230, //13216 -13231,13232,13233,13234,13235,13236,13237,13238,13239,13240,3969,13241,13242,13243,13244,3970, //13232 -13245,13246,13247,13248,13249,13250,13251,13252,13253,13254,13255,13256,13257,13258,13259,13260, //13248 -13261,13262,13263,13264,13265,13266,13267,13268,3450,13269,13270,13271,13272,13273,13274,13275, //13264 -13276,5002,13277,13278,13279,13280,13281,13282,13283,13284,13285,13286,13287,13288,13289,13290, //13280 -13291,13292,13293,13294,13295,13296,13297,13298,13299,13300,13301,13302,3813,13303,13304,13305, //13296 -13306,13307,13308,13309,13310,13311,13312,13313,13314,13315,13316,13317,13318,13319,13320,13321, //13312 -13322,13323,13324,13325,13326,13327,13328,4507,13329,13330,13331,13332,13333,13334,13335,13336, //13328 -13337,13338,13339,13340,13341,5003,13342,13343,13344,13345,13346,13347,13348,13349,13350,13351, //13344 -13352,13353,13354,13355,13356,13357,13358,13359,13360,13361,13362,13363,13364,13365,13366,13367, //13360 -5004,13368,13369,13370,13371,13372,13373,13374,13375,13376,13377,13378,13379,13380,13381,13382, //13376 -13383,13384,13385,13386,13387,13388,13389,13390,13391,13392,13393,13394,13395,13396,13397,13398, //13392 -13399,13400,13401,13402,13403,13404,13405,13406,13407,13408,13409,13410,13411,13412,13413,13414, //13408 -13415,13416,13417,13418,13419,13420,13421,13422,13423,13424,13425,13426,13427,13428,13429,13430, //13424 -13431,13432,4508,13433,13434,13435,4201,13436,13437,13438,13439,13440,13441,13442,13443,13444, //13440 -13445,13446,13447,13448,13449,13450,13451,13452,13453,13454,13455,13456,13457,5005,13458,13459, //13456 -13460,13461,13462,13463,13464,13465,13466,13467,13468,13469,13470,4509,13471,13472,13473,13474, //13472 -13475,13476,13477,13478,13479,13480,13481,13482,13483,13484,13485,13486,13487,13488,13489,13490, //13488 -13491,13492,13493,13494,13495,13496,13497,13498,13499,13500,13501,13502,13503,13504,13505,13506, //13504 -13507,13508,13509,13510,13511,13512,13513,13514,13515,13516,13517,13518,13519,13520,13521,13522, //13520 -13523,13524,13525,13526,13527,13528,13529,13530,13531,13532,13533,13534,13535,13536,13537,13538, //13536 -13539,13540,13541,13542,13543,13544,13545,13546,13547,13548,13549,13550,13551,13552,13553,13554, //13552 -13555,13556,13557,13558,13559,13560,13561,13562,13563,13564,13565,13566,13567,13568,13569,13570, //13568 -13571,13572,13573,13574,13575,13576,13577,13578,13579,13580,13581,13582,13583,13584,13585,13586, //13584 -13587,13588,13589,13590,13591,13592,13593,13594,13595,13596,13597,13598,13599,13600,13601,13602, //13600 -13603,13604,13605,13606,13607,13608,13609,13610,13611,13612,13613,13614,13615,13616,13617,13618, //13616 -13619,13620,13621,13622,13623,13624,13625,13626,13627,13628,13629,13630,13631,13632,13633,13634, //13632 -13635,13636,13637,13638,13639,13640,13641,13642,5006,13643,13644,13645,13646,13647,13648,13649, //13648 -13650,13651,5007,13652,13653,13654,13655,13656,13657,13658,13659,13660,13661,13662,13663,13664, //13664 -13665,13666,13667,13668,13669,13670,13671,13672,13673,13674,13675,13676,13677,13678,13679,13680, //13680 -13681,13682,13683,13684,13685,13686,13687,13688,13689,13690,13691,13692,13693,13694,13695,13696, //13696 -13697,13698,13699,13700,13701,13702,13703,13704,13705,13706,13707,13708,13709,13710,13711,13712, //13712 -13713,13714,13715,13716,13717,13718,13719,13720,13721,13722,13723,13724,13725,13726,13727,13728, //13728 -13729,13730,13731,13732,13733,13734,13735,13736,13737,13738,13739,13740,13741,13742,13743,13744, //13744 -13745,13746,13747,13748,13749,13750,13751,13752,13753,13754,13755,13756,13757,13758,13759,13760, //13760 -13761,13762,13763,13764,13765,13766,13767,13768,13769,13770,13771,13772,13773,13774,3273,13775, //13776 -13776,13777,13778,13779,13780,13781,13782,13783,13784,13785,13786,13787,13788,13789,13790,13791, //13792 -13792,13793,13794,13795,13796,13797,13798,13799,13800,13801,13802,13803,13804,13805,13806,13807, //13808 -13808,13809,13810,13811,13812,13813,13814,13815,13816,13817,13818,13819,13820,13821,13822,13823, //13824 -13824,13825,13826,13827,13828,13829,13830,13831,13832,13833,13834,13835,13836,13837,13838,13839, //13840 -13840,13841,13842,13843,13844,13845,13846,13847,13848,13849,13850,13851,13852,13853,13854,13855, //13856 -13856,13857,13858,13859,13860,13861,13862,13863,13864,13865,13866,13867,13868,13869,13870,13871, //13872 -13872,13873,13874,13875,13876,13877,13878,13879,13880,13881,13882,13883,13884,13885,13886,13887, //13888 -13888,13889,13890,13891,13892,13893,13894,13895,13896,13897,13898,13899,13900,13901,13902,13903, //13904 -13904,13905,13906,13907,13908,13909,13910,13911,13912,13913,13914,13915,13916,13917,13918,13919, //13920 -13920,13921,13922,13923,13924,13925,13926,13927,13928,13929,13930,13931,13932,13933,13934,13935, //13936 -13936,13937,13938,13939,13940,13941,13942,13943,13944,13945,13946,13947,13948,13949,13950,13951, //13952 -13952,13953,13954,13955,13956,13957,13958,13959,13960,13961,13962,13963,13964,13965,13966,13967, //13968 -13968,13969,13970,13971,13972, //13973 -****************************************************************************************/ -}; diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/CMakeLists.txt b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/CMakeLists.txt deleted file mode 100644 index 0b26a3b..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/CMakeLists.txt +++ /dev/null @@ -1,106 +0,0 @@ - -set( - UCHARDET_HEADERS - uchardet.h -) - -set( - UCHARDET_SOURCES - CharDistribution.cpp - JpCntx.cpp - LangBulgarianModel.cpp - LangCyrillicModel.cpp - LangGreekModel.cpp - LangHungarianModel.cpp - LangHebrewModel.cpp - LangThaiModel.cpp - nsHebrewProber.cpp - nsCharSetProber.cpp - nsBig5Prober.cpp - nsEUCJPProber.cpp - nsEUCKRProber.cpp - nsEUCTWProber.cpp - nsEscCharsetProber.cpp - nsEscSM.cpp - nsGB2312Prober.cpp - nsMBCSGroupProber.cpp - nsMBCSSM.cpp - nsSBCSGroupProber.cpp - nsSBCharSetProber.cpp - nsSJISProber.cpp - nsUTF8Prober.cpp - nsLatin1Prober.cpp - nsUniversalDetector.cpp - uchardet.cpp -) - -set (UCHARDET_TARGET libuchardet) -set (UCHARDET_STATIC_TARGET libuchardet_static) - -add_definitions( - -DPKGDATADIR="${DIR_SHARE_OPENCC}" - -DLOCALEDIR="${DIR_SHARE_LOCALE}" - -DVERSION="${UCHARDET_VERSION}" - -DPACKAGE_NAME="${PACKAGE_NAME}" - -Wall -) - -add_library( - ${UCHARDET_TARGET} - SHARED - ${UCHARDET_SOURCES} -) - -add_library( - ${UCHARDET_STATIC_TARGET} - STATIC - ${UCHARDET_SOURCES} -) - -set_target_properties( - ${UCHARDET_TARGET} - ${UCHARDET_STATIC_TARGET} - PROPERTIES - LINKER_LANGUAGE - CXX - OUTPUT_NAME - uchardet - VERSION - 0.0.0 - SOVERSION - 0 -) - -if (CMAKE_BUILD_TYPE MATCHES Debug) - add_definitions( - -O0 - -g3 - ) -endif (CMAKE_BUILD_TYPE MATCHES Debug) - -if (NOT WIN32) -install( - TARGETS - ${UCHARDET_TARGET} - LIBRARY DESTINATION - ${DIR_LIBRARY} -) -endif (NOT WIN32) - -install( - TARGETS - ${UCHARDET_STATIC_TARGET} - ARCHIVE DESTINATION - ${DIR_LIBRARY_STATIC} -) - -install( - FILES - ${UCHARDET_HEADERS} - DESTINATION - ${DIR_INCLUDE}/uchardet -) - -include(symbols.cmake) - -add_subdirectory(tools) diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/CharDistribution.cpp b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/CharDistribution.cpp deleted file mode 100644 index 488d9bc..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/CharDistribution.cpp +++ /dev/null @@ -1,109 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is Mozilla Communicator client code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#include "CharDistribution.h" - -#include "JISFreq.tab" -#include "Big5Freq.tab" -#include "EUCKRFreq.tab" -#include "EUCTWFreq.tab" -#include "GB2312Freq.tab" - -#define SURE_YES 0.99f -#define SURE_NO 0.01f - -//return confidence base on received data -float CharDistributionAnalysis::GetConfidence(void) -{ - //if we didn't receive any character in our consideration range, or the - // number of frequent characters is below the minimum threshold, return - // negative answer - if (mTotalChars <= 0 || mFreqChars <= mDataThreshold) - return SURE_NO; - - if (mTotalChars != mFreqChars) { - float r = mFreqChars / ((mTotalChars - mFreqChars) * mTypicalDistributionRatio); - - if (r < SURE_YES) - return r; - } - //normalize confidence, (we don't want to be 100% sure) - return SURE_YES; -} - -EUCTWDistributionAnalysis::EUCTWDistributionAnalysis() -{ - mCharToFreqOrder = EUCTWCharToFreqOrder; - mTableSize = EUCTW_TABLE_SIZE; - mTypicalDistributionRatio = EUCTW_TYPICAL_DISTRIBUTION_RATIO; -} - -EUCKRDistributionAnalysis::EUCKRDistributionAnalysis() -{ - mCharToFreqOrder = EUCKRCharToFreqOrder; - mTableSize = EUCKR_TABLE_SIZE; - mTypicalDistributionRatio = EUCKR_TYPICAL_DISTRIBUTION_RATIO; -} - -GB2312DistributionAnalysis::GB2312DistributionAnalysis() -{ - mCharToFreqOrder = GB2312CharToFreqOrder; - mTableSize = GB2312_TABLE_SIZE; - mTypicalDistributionRatio = GB2312_TYPICAL_DISTRIBUTION_RATIO; -} - -Big5DistributionAnalysis::Big5DistributionAnalysis() -{ - mCharToFreqOrder = Big5CharToFreqOrder; - mTableSize = BIG5_TABLE_SIZE; - mTypicalDistributionRatio = BIG5_TYPICAL_DISTRIBUTION_RATIO; -} - -SJISDistributionAnalysis::SJISDistributionAnalysis() -{ - mCharToFreqOrder = JISCharToFreqOrder; - mTableSize = JIS_TABLE_SIZE; - mTypicalDistributionRatio = JIS_TYPICAL_DISTRIBUTION_RATIO; -} - -EUCJPDistributionAnalysis::EUCJPDistributionAnalysis() -{ - mCharToFreqOrder = JISCharToFreqOrder; - mTableSize = JIS_TABLE_SIZE; - mTypicalDistributionRatio = JIS_TYPICAL_DISTRIBUTION_RATIO; -} - diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/CharDistribution.h b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/CharDistribution.h deleted file mode 100644 index 945b9ac..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/CharDistribution.h +++ /dev/null @@ -1,242 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is Mozilla Communicator client code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#ifndef CharDistribution_h__ -#define CharDistribution_h__ - -#include "nscore.h" - -#define ENOUGH_DATA_THRESHOLD 1024 - -#define MINIMUM_DATA_THRESHOLD 4 - -class CharDistributionAnalysis -{ -public: - CharDistributionAnalysis() {Reset(PR_FALSE);} - - //feed a block of data and do distribution analysis - void HandleData(const char* /*aBuf*/, PRUint32 /*aLen*/) {} - - //Feed a character with known length - void HandleOneChar(const char* aStr, PRUint32 aCharLen) - { - PRInt32 order; - - //we only care about 2-bytes character in our distribution analysis - order = (aCharLen == 2) ? GetOrder(aStr) : -1; - - if (order >= 0) - { - mTotalChars++; - //order is valid - if ((PRUint32)order < mTableSize) - { - if (512 > mCharToFreqOrder[order]) - mFreqChars++; - } - } - } - - //return confidence base on existing data - float GetConfidence(void); - - //Reset analyser, clear any state - void Reset(PRBool aIsPreferredLanguage) - { - mDone = PR_FALSE; - mTotalChars = 0; - mFreqChars = 0; - mDataThreshold = aIsPreferredLanguage ? 0 : MINIMUM_DATA_THRESHOLD; - } - - //This function is for future extension. Caller can use this function to control - //analyser's behavior - void SetOpion(){} - - //It is not necessary to receive all data to draw conclusion. For charset detection, - // certain amount of data is enough - PRBool GotEnoughData() {return mTotalChars > ENOUGH_DATA_THRESHOLD;} - -protected: - //we do not handle character base on its original encoding string, but - //convert this encoding string to a number, here called order. - //This allow multiple encoding of a language to share one frequency table - virtual PRInt32 GetOrder(const char* /*str*/) {return -1;} - - //If this flag is set to PR_TRUE, detection is done and conclusion has been made - PRBool mDone; - - //The number of characters whose frequency order is less than 512 - PRUint32 mFreqChars; - - //Total character encounted. - PRUint32 mTotalChars; - - //Number of hi-byte characters needed to trigger detection - PRUint32 mDataThreshold; - - //Mapping table to get frequency order from char order (get from GetOrder()) - const PRInt16 *mCharToFreqOrder; - - //Size of above table - PRUint32 mTableSize; - - //This is a constant value varies from language to language, it is used in - //calculating confidence. See my paper for further detail. - float mTypicalDistributionRatio; -}; - - -class EUCTWDistributionAnalysis: public CharDistributionAnalysis -{ -public: - EUCTWDistributionAnalysis(); -protected: - - //for euc-TW encoding, we are interested - // first byte range: 0xc4 -- 0xfe - // second byte range: 0xa1 -- 0xfe - //no validation needed here. State machine has done that - PRInt32 GetOrder(const char* str) - { if ((unsigned char)*str >= (unsigned char)0xc4) - return 94*((unsigned char)str[0]-(unsigned char)0xc4) + (unsigned char)str[1] - (unsigned char)0xa1; - else - return -1; - } -}; - - -class EUCKRDistributionAnalysis : public CharDistributionAnalysis -{ -public: - EUCKRDistributionAnalysis(); -protected: - //for euc-KR encoding, we are interested - // first byte range: 0xb0 -- 0xfe - // second byte range: 0xa1 -- 0xfe - //no validation needed here. State machine has done that - PRInt32 GetOrder(const char* str) - { if ((unsigned char)*str >= (unsigned char)0xb0) - return 94*((unsigned char)str[0]-(unsigned char)0xb0) + (unsigned char)str[1] - (unsigned char)0xa1; - else - return -1; - } -}; - -class GB2312DistributionAnalysis : public CharDistributionAnalysis -{ -public: - GB2312DistributionAnalysis(); -protected: - //for GB2312 encoding, we are interested - // first byte range: 0xb0 -- 0xfe - // second byte range: 0xa1 -- 0xfe - //no validation needed here. State machine has done that - PRInt32 GetOrder(const char* str) - { if ((unsigned char)*str >= (unsigned char)0xb0 && (unsigned char)str[1] >= (unsigned char)0xa1) - return 94*((unsigned char)str[0]-(unsigned char)0xb0) + (unsigned char)str[1] - (unsigned char)0xa1; - else - return -1; - } -}; - - -class Big5DistributionAnalysis : public CharDistributionAnalysis -{ -public: - Big5DistributionAnalysis(); -protected: - //for big5 encoding, we are interested - // first byte range: 0xa4 -- 0xfe - // second byte range: 0x40 -- 0x7e , 0xa1 -- 0xfe - //no validation needed here. State machine has done that - PRInt32 GetOrder(const char* str) - { if ((unsigned char)*str >= (unsigned char)0xa4) - if ((unsigned char)str[1] >= (unsigned char)0xa1) - return 157*((unsigned char)str[0]-(unsigned char)0xa4) + (unsigned char)str[1] - (unsigned char)0xa1 +63; - else - return 157*((unsigned char)str[0]-(unsigned char)0xa4) + (unsigned char)str[1] - (unsigned char)0x40; - else - return -1; - } -}; - -class SJISDistributionAnalysis : public CharDistributionAnalysis -{ -public: - SJISDistributionAnalysis(); -protected: - //for sjis encoding, we are interested - // first byte range: 0x81 -- 0x9f , 0xe0 -- 0xfe - // second byte range: 0x40 -- 0x7e, 0x81 -- oxfe - //no validation needed here. State machine has done that - PRInt32 GetOrder(const char* str) - { - PRInt32 order; - if ((unsigned char)*str >= (unsigned char)0x81 && (unsigned char)*str <= (unsigned char)0x9f) - order = 188 * ((unsigned char)str[0]-(unsigned char)0x81); - else if ((unsigned char)*str >= (unsigned char)0xe0 && (unsigned char)*str <= (unsigned char)0xef) - order = 188 * ((unsigned char)str[0]-(unsigned char)0xe0 + 31); - else - return -1; - order += (unsigned char)*(str+1) - 0x40; - if ((unsigned char)str[1] > (unsigned char)0x7f) - order--; - return order; - } -}; - -class EUCJPDistributionAnalysis : public CharDistributionAnalysis -{ -public: - EUCJPDistributionAnalysis(); -protected: - //for euc-JP encoding, we are interested - // first byte range: 0xa0 -- 0xfe - // second byte range: 0xa1 -- 0xfe - //no validation needed here. State machine has done that - PRInt32 GetOrder(const char* str) - { if ((unsigned char)*str >= (unsigned char)0xa0) - return 94*((unsigned char)str[0]-(unsigned char)0xa1) + (unsigned char)str[1] - (unsigned char)0xa1; - else - return -1; - } -}; - -#endif //CharDistribution_h__ - diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/EUCKRFreq.tab b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/EUCKRFreq.tab deleted file mode 100644 index d2c5047..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/EUCKRFreq.tab +++ /dev/null @@ -1,614 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is Mozilla Communicator client code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -//Sampling from about 20M text materials include literature and computer technology - -/****************************************************************************** - * 128 --> 0.79 - * 256 --> 0.92 - * 512 --> 0.986 - * 1024 --> 0.99944 - * 2048 --> 0.99999 - * - * Idea Distribution Ratio = 0.98653 / (1-0.98653) = 73.24 - * Random Distribution Ration = 512 / (2350-512) = 0.279. - * - * Typical Distribution Ratio - *****************************************************************************/ - -#define EUCKR_TYPICAL_DISTRIBUTION_RATIO (float) 6.0 - -#define EUCKR_TABLE_SIZE 2352 - -//Char to FreqOrder table , -static const PRInt16 EUCKRCharToFreqOrder[] = -{ - 13, 130, 120,1396, 481,1719,1720, 328, 609, 212,1721, 707, 400, 299,1722, 87, -1397,1723, 104, 536,1117,1203,1724,1267, 685,1268, 508,1725,1726,1727,1728,1398, -1399,1729,1730,1731, 141, 621, 326,1057, 368,1732, 267, 488, 20,1733,1269,1734, - 945,1400,1735, 47, 904,1270,1736,1737, 773, 248,1738, 409, 313, 786, 429,1739, - 116, 987, 813,1401, 683, 75,1204, 145,1740,1741,1742,1743, 16, 847, 667, 622, - 708,1744,1745,1746, 966, 787, 304, 129,1747, 60, 820, 123, 676,1748,1749,1750, -1751, 617,1752, 626,1753,1754,1755,1756, 653,1757,1758,1759,1760,1761,1762, 856, - 344,1763,1764,1765,1766, 89, 401, 418, 806, 905, 848,1767,1768,1769, 946,1205, - 709,1770,1118,1771, 241,1772,1773,1774,1271,1775, 569,1776, 999,1777,1778,1779, -1780, 337, 751,1058, 28, 628, 254,1781, 177, 906, 270, 349, 891,1079,1782, 19, -1783, 379,1784, 315,1785, 629, 754,1402, 559,1786, 636, 203,1206,1787, 710, 567, -1788, 935, 814,1789,1790,1207, 766, 528,1791,1792,1208,1793,1794,1795,1796,1797, -1403,1798,1799, 533,1059,1404,1405,1156,1406, 936, 884,1080,1800, 351,1801,1802, -1803,1804,1805, 801,1806,1807,1808,1119,1809,1157, 714, 474,1407,1810, 298, 899, - 885,1811,1120, 802,1158,1812, 892,1813,1814,1408, 659,1815,1816,1121,1817,1818, -1819,1820,1821,1822, 319,1823, 594, 545,1824, 815, 937,1209,1825,1826, 573,1409, -1022,1827,1210,1828,1829,1830,1831,1832,1833, 556, 722, 807,1122,1060,1834, 697, -1835, 900, 557, 715,1836,1410, 540,1411, 752,1159, 294, 597,1211, 976, 803, 770, -1412,1837,1838, 39, 794,1413, 358,1839, 371, 925,1840, 453, 661, 788, 531, 723, - 544,1023,1081, 869, 91,1841, 392, 430, 790, 602,1414, 677,1082, 457,1415,1416, -1842,1843, 475, 327,1024,1417, 795, 121,1844, 733, 403,1418,1845,1846,1847, 300, - 119, 711,1212, 627,1848,1272, 207,1849,1850, 796,1213, 382,1851, 519,1852,1083, - 893,1853,1854,1855, 367, 809, 487, 671,1856, 663,1857,1858, 956, 471, 306, 857, -1859,1860,1160,1084,1861,1862,1863,1864,1865,1061,1866,1867,1868,1869,1870,1871, - 282, 96, 574,1872, 502,1085,1873,1214,1874, 907,1875,1876, 827, 977,1419,1420, -1421, 268,1877,1422,1878,1879,1880, 308,1881, 2, 537,1882,1883,1215,1884,1885, - 127, 791,1886,1273,1423,1887, 34, 336, 404, 643,1888, 571, 654, 894, 840,1889, - 0, 886,1274, 122, 575, 260, 908, 938,1890,1275, 410, 316,1891,1892, 100,1893, -1894,1123, 48,1161,1124,1025,1895, 633, 901,1276,1896,1897, 115, 816,1898, 317, -1899, 694,1900, 909, 734,1424, 572, 866,1425, 691, 85, 524,1010, 543, 394, 841, -1901,1902,1903,1026,1904,1905,1906,1907,1908,1909, 30, 451, 651, 988, 310,1910, -1911,1426, 810,1216, 93,1912,1913,1277,1217,1914, 858, 759, 45, 58, 181, 610, - 269,1915,1916, 131,1062, 551, 443,1000, 821,1427, 957, 895,1086,1917,1918, 375, -1919, 359,1920, 687,1921, 822,1922, 293,1923,1924, 40, 662, 118, 692, 29, 939, - 887, 640, 482, 174,1925, 69,1162, 728,1428, 910,1926,1278,1218,1279, 386, 870, - 217, 854,1163, 823,1927,1928,1929,1930, 834,1931, 78,1932, 859,1933,1063,1934, -1935,1936,1937, 438,1164, 208, 595,1938,1939,1940,1941,1219,1125,1942, 280, 888, -1429,1430,1220,1431,1943,1944,1945,1946,1947,1280, 150, 510,1432,1948,1949,1950, -1951,1952,1953,1954,1011,1087,1955,1433,1043,1956, 881,1957, 614, 958,1064,1065, -1221,1958, 638,1001, 860, 967, 896,1434, 989, 492, 553,1281,1165,1959,1282,1002, -1283,1222,1960,1961,1962,1963, 36, 383, 228, 753, 247, 454,1964, 876, 678,1965, -1966,1284, 126, 464, 490, 835, 136, 672, 529, 940,1088,1435, 473,1967,1968, 467, - 50, 390, 227, 587, 279, 378, 598, 792, 968, 240, 151, 160, 849, 882,1126,1285, - 639,1044, 133, 140, 288, 360, 811, 563,1027, 561, 142, 523,1969,1970,1971, 7, - 103, 296, 439, 407, 506, 634, 990,1972,1973,1974,1975, 645,1976,1977,1978,1979, -1980,1981, 236,1982,1436,1983,1984,1089, 192, 828, 618, 518,1166, 333,1127,1985, - 818,1223,1986,1987,1988,1989,1990,1991,1992,1993, 342,1128,1286, 746, 842,1994, -1995, 560, 223,1287, 98, 8, 189, 650, 978,1288,1996,1437,1997, 17, 345, 250, - 423, 277, 234, 512, 226, 97, 289, 42, 167,1998, 201,1999,2000, 843, 836, 824, - 532, 338, 783,1090, 182, 576, 436,1438,1439, 527, 500,2001, 947, 889,2002,2003, -2004,2005, 262, 600, 314, 447,2006, 547,2007, 693, 738,1129,2008, 71,1440, 745, - 619, 688,2009, 829,2010,2011, 147,2012, 33, 948,2013,2014, 74, 224,2015, 61, - 191, 918, 399, 637,2016,1028,1130, 257, 902,2017,2018,2019,2020,2021,2022,2023, -2024,2025,2026, 837,2027,2028,2029,2030, 179, 874, 591, 52, 724, 246,2031,2032, -2033,2034,1167, 969,2035,1289, 630, 605, 911,1091,1168,2036,2037,2038,1441, 912, -2039, 623,2040,2041, 253,1169,1290,2042,1442, 146, 620, 611, 577, 433,2043,1224, - 719,1170, 959, 440, 437, 534, 84, 388, 480,1131, 159, 220, 198, 679,2044,1012, - 819,1066,1443, 113,1225, 194, 318,1003,1029,2045,2046,2047,2048,1067,2049,2050, -2051,2052,2053, 59, 913, 112,2054, 632,2055, 455, 144, 739,1291,2056, 273, 681, - 499,2057, 448,2058,2059, 760,2060,2061, 970, 384, 169, 245,1132,2062,2063, 414, -1444,2064,2065, 41, 235,2066, 157, 252, 877, 568, 919, 789, 580,2067, 725,2068, -2069,1292,2070,2071,1445,2072,1446,2073,2074, 55, 588, 66,1447, 271,1092,2075, -1226,2076, 960,1013, 372,2077,2078,2079,2080,2081,1293,2082,2083,2084,2085, 850, -2086,2087,2088,2089,2090, 186,2091,1068, 180,2092,2093,2094, 109,1227, 522, 606, -2095, 867,1448,1093, 991,1171, 926, 353,1133,2096, 581,2097,2098,2099,1294,1449, -1450,2100, 596,1172,1014,1228,2101,1451,1295,1173,1229,2102,2103,1296,1134,1452, - 949,1135,2104,2105,1094,1453,1454,1455,2106,1095,2107,2108,2109,2110,2111,2112, -2113,2114,2115,2116,2117, 804,2118,2119,1230,1231, 805,1456, 405,1136,2120,2121, -2122,2123,2124, 720, 701,1297, 992,1457, 927,1004,2125,2126,2127,2128,2129,2130, - 22, 417,2131, 303,2132, 385,2133, 971, 520, 513,2134,1174, 73,1096, 231, 274, - 962,1458, 673,2135,1459,2136, 152,1137,2137,2138,2139,2140,1005,1138,1460,1139, -2141,2142,2143,2144, 11, 374, 844,2145, 154,1232, 46,1461,2146, 838, 830, 721, -1233, 106,2147, 90, 428, 462, 578, 566,1175, 352,2148,2149, 538,1234, 124,1298, -2150,1462, 761, 565,2151, 686,2152, 649,2153, 72, 173,2154, 460, 415,2155,1463, -2156,1235, 305,2157,2158,2159,2160,2161,2162, 579,2163,2164,2165,2166,2167, 747, -2168,2169,2170,2171,1464, 669,2172,2173,2174,2175,2176,1465,2177, 23, 530, 285, -2178, 335, 729,2179, 397,2180,2181,2182,1030,2183,2184, 698,2185,2186, 325,2187, -2188, 369,2189, 799,1097,1015, 348,2190,1069, 680,2191, 851,1466,2192,2193, 10, -2194, 613, 424,2195, 979, 108, 449, 589, 27, 172, 81,1031, 80, 774, 281, 350, -1032, 525, 301, 582,1176,2196, 674,1045,2197,2198,1467, 730, 762,2199,2200,2201, -2202,1468,2203, 993,2204,2205, 266,1070, 963,1140,2206,2207,2208, 664,1098, 972, -2209,2210,2211,1177,1469,1470, 871,2212,2213,2214,2215,2216,1471,2217,2218,2219, -2220,2221,2222,2223,2224,2225,2226,2227,1472,1236,2228,2229,2230,2231,2232,2233, -2234,2235,1299,2236,2237, 200,2238, 477, 373,2239,2240, 731, 825, 777,2241,2242, -2243, 521, 486, 548,2244,2245,2246,1473,1300, 53, 549, 137, 875, 76, 158,2247, -1301,1474, 469, 396,1016, 278, 712,2248, 321, 442, 503, 767, 744, 941,1237,1178, -1475,2249, 82, 178,1141,1179, 973,2250,1302,2251, 297,2252,2253, 570,2254,2255, -2256, 18, 450, 206,2257, 290, 292,1142,2258, 511, 162, 99, 346, 164, 735,2259, -1476,1477, 4, 554, 343, 798,1099,2260,1100,2261, 43, 171,1303, 139, 215,2262, -2263, 717, 775,2264,1033, 322, 216,2265, 831,2266, 149,2267,1304,2268,2269, 702, -1238, 135, 845, 347, 309,2270, 484,2271, 878, 655, 238,1006,1478,2272, 67,2273, - 295,2274,2275, 461,2276, 478, 942, 412,2277,1034,2278,2279,2280, 265,2281, 541, -2282,2283,2284,2285,2286, 70, 852,1071,2287,2288,2289,2290, 21, 56, 509, 117, - 432,2291,2292, 331, 980, 552,1101, 148, 284, 105, 393,1180,1239, 755,2293, 187, -2294,1046,1479,2295, 340,2296, 63,1047, 230,2297,2298,1305, 763,1306, 101, 800, - 808, 494,2299,2300,2301, 903,2302, 37,1072, 14, 5,2303, 79, 675,2304, 312, -2305,2306,2307,2308,2309,1480, 6,1307,2310,2311,2312, 1, 470, 35, 24, 229, -2313, 695, 210, 86, 778, 15, 784, 592, 779, 32, 77, 855, 964,2314, 259,2315, - 501, 380,2316,2317, 83, 981, 153, 689,1308,1481,1482,1483,2318,2319, 716,1484, -2320,2321,2322,2323,2324,2325,1485,2326,2327, 128, 57, 68, 261,1048, 211, 170, -1240, 31,2328, 51, 435, 742,2329,2330,2331, 635,2332, 264, 456,2333,2334,2335, - 425,2336,1486, 143, 507, 263, 943,2337, 363, 920,1487, 256,1488,1102, 243, 601, -1489,2338,2339,2340,2341,2342,2343,2344, 861,2345,2346,2347,2348,2349,2350, 395, -2351,1490,1491, 62, 535, 166, 225,2352,2353, 668, 419,1241, 138, 604, 928,2354, -1181,2355,1492,1493,2356,2357,2358,1143,2359, 696,2360, 387, 307,1309, 682, 476, -2361,2362, 332, 12, 222, 156,2363, 232,2364, 641, 276, 656, 517,1494,1495,1035, - 416, 736,1496,2365,1017, 586,2366,2367,2368,1497,2369, 242,2370,2371,2372,1498, -2373, 965, 713,2374,2375,2376,2377, 740, 982,1499, 944,1500,1007,2378,2379,1310, -1501,2380,2381,2382, 785, 329,2383,2384,1502,2385,2386,2387, 932,2388,1503,2389, -2390,2391,2392,1242,2393,2394,2395,2396,2397, 994, 950,2398,2399,2400,2401,1504, -1311,2402,2403,2404,2405,1049, 749,2406,2407, 853, 718,1144,1312,2408,1182,1505, -2409,2410, 255, 516, 479, 564, 550, 214,1506,1507,1313, 413, 239, 444, 339,1145, -1036,1508,1509,1314,1037,1510,1315,2411,1511,2412,2413,2414, 176, 703, 497, 624, - 593, 921, 302,2415, 341, 165,1103,1512,2416,1513,2417,2418,2419, 376,2420, 700, -2421,2422,2423, 258, 768,1316,2424,1183,2425, 995, 608,2426,2427,2428,2429, 221, -2430,2431,2432,2433,2434,2435,2436,2437, 195, 323, 726, 188, 897, 983,1317, 377, - 644,1050, 879,2438, 452,2439,2440,2441,2442,2443,2444, 914,2445,2446,2447,2448, - 915, 489,2449,1514,1184,2450,2451, 515, 64, 427, 495,2452, 583,2453, 483, 485, -1038, 562, 213,1515, 748, 666,2454,2455,2456,2457, 334,2458, 780, 996,1008, 705, -1243,2459,2460,2461,2462,2463, 114,2464, 493,1146, 366, 163,1516, 961,1104,2465, - 291,2466,1318,1105,2467,1517, 365,2468, 355, 951,1244,2469,1319,2470, 631,2471, -2472, 218,1320, 364, 320, 756,1518,1519,1321,1520,1322,2473,2474,2475,2476, 997, -2477,2478,2479,2480, 665,1185,2481, 916,1521,2482,2483,2484, 584, 684,2485,2486, - 797,2487,1051,1186,2488,2489,2490,1522,2491,2492, 370,2493,1039,1187, 65,2494, - 434, 205, 463,1188,2495, 125, 812, 391, 402, 826, 699, 286, 398, 155, 781, 771, - 585,2496, 590, 505,1073,2497, 599, 244, 219, 917,1018, 952, 646,1523,2498,1323, -2499,2500, 49, 984, 354, 741,2501, 625,2502,1324,2503,1019, 190, 357, 757, 491, - 95, 782, 868,2504,2505,2506,2507,2508,2509, 134,1524,1074, 422,1525, 898,2510, - 161,2511,2512,2513,2514, 769,2515,1526,2516,2517, 411,1325,2518, 472,1527,2519, -2520,2521,2522,2523,2524, 985,2525,2526,2527,2528,2529,2530, 764,2531,1245,2532, -2533, 25, 204, 311,2534, 496,2535,1052,2536,2537,2538,2539,2540,2541,2542, 199, - 704, 504, 468, 758, 657,1528, 196, 44, 839,1246, 272, 750,2543, 765, 862,2544, -2545,1326,2546, 132, 615, 933,2547, 732,2548,2549,2550,1189,1529,2551, 283,1247, -1053, 607, 929,2552,2553,2554, 930, 183, 872, 616,1040,1147,2555,1148,1020, 441, - 249,1075,2556,2557,2558, 466, 743,2559,2560,2561, 92, 514, 426, 420, 526,2562, -2563,2564,2565,2566,2567,2568, 185,2569,2570,2571,2572, 776,1530, 658,2573, 362, -2574, 361, 922,1076, 793,2575,2576,2577,2578,2579,2580,1531, 251,2581,2582,2583, -2584,1532, 54, 612, 237,1327,2585,2586, 275, 408, 647, 111,2587,1533,1106, 465, - 3, 458, 9, 38,2588, 107, 110, 890, 209, 26, 737, 498,2589,1534,2590, 431, - 202, 88,1535, 356, 287,1107, 660,1149,2591, 381,1536, 986,1150, 445,1248,1151, - 974,2592,2593, 846,2594, 446, 953, 184,1249,1250, 727,2595, 923, 193, 883,2596, -2597,2598, 102, 324, 539, 817,2599, 421,1041,2600, 832,2601, 94, 175, 197, 406, -2602, 459,2603,2604,2605,2606,2607, 330, 555,2608,2609,2610, 706,1108, 389,2611, -2612,2613,2614, 233,2615, 833, 558, 931, 954,1251,2616,2617,1537, 546,2618,2619, -1009,2620,2621,2622,1538, 690,1328,2623, 955,2624,1539,2625,2626, 772,2627,2628, -2629,2630,2631, 924, 648, 863, 603,2632,2633, 934,1540, 864, 865,2634, 642,1042, - 670,1190,2635,2636,2637,2638, 168,2639, 652, 873, 542,1054,1541,2640,2641,2642, //512, 256 - -/*************************************************************************************** - *Everything below is of no interest for detection purpose * - *************************************************************************************** - -2643,2644,2645,2646,2647,2648,2649,2650,2651,2652,2653,2654,2655,2656,2657,2658, -2659,2660,2661,2662,2663,2664,2665,2666,2667,2668,2669,2670,2671,2672,2673,2674, -2675,2676,2677,2678,2679,2680,2681,2682,2683,2684,2685,2686,2687,2688,2689,2690, -2691,2692,2693,2694,2695,2696,2697,2698,2699,1542, 880,2700,2701,2702,2703,2704, -2705,2706,2707,2708,2709,2710,2711,2712,2713,2714,2715,2716,2717,2718,2719,2720, -2721,2722,2723,2724,2725,1543,2726,2727,2728,2729,2730,2731,2732,1544,2733,2734, -2735,2736,2737,2738,2739,2740,2741,2742,2743,2744,2745,2746,2747,2748,2749,2750, -2751,2752,2753,2754,1545,2755,2756,2757,2758,2759,2760,2761,2762,2763,2764,2765, -2766,1546,2767,1547,2768,2769,2770,2771,2772,2773,2774,2775,2776,2777,2778,2779, -2780,2781,2782,2783,2784,2785,2786,1548,2787,2788,2789,1109,2790,2791,2792,2793, -2794,2795,2796,2797,2798,2799,2800,2801,2802,2803,2804,2805,2806,2807,2808,2809, -2810,2811,2812,1329,2813,2814,2815,2816,2817,2818,2819,2820,2821,2822,2823,2824, -2825,2826,2827,2828,2829,2830,2831,2832,2833,2834,2835,2836,2837,2838,2839,2840, -2841,2842,2843,2844,2845,2846,2847,2848,2849,2850,2851,2852,2853,2854,2855,2856, -1549,2857,2858,2859,2860,1550,2861,2862,1551,2863,2864,2865,2866,2867,2868,2869, -2870,2871,2872,2873,2874,1110,1330,2875,2876,2877,2878,2879,2880,2881,2882,2883, -2884,2885,2886,2887,2888,2889,2890,2891,2892,2893,2894,2895,2896,2897,2898,2899, -2900,2901,2902,2903,2904,2905,2906,2907,2908,2909,2910,2911,2912,2913,2914,2915, -2916,2917,2918,2919,2920,2921,2922,2923,2924,2925,2926,2927,2928,2929,2930,1331, -2931,2932,2933,2934,2935,2936,2937,2938,2939,2940,2941,2942,2943,1552,2944,2945, -2946,2947,2948,2949,2950,2951,2952,2953,2954,2955,2956,2957,2958,2959,2960,2961, -2962,2963,2964,1252,2965,2966,2967,2968,2969,2970,2971,2972,2973,2974,2975,2976, -2977,2978,2979,2980,2981,2982,2983,2984,2985,2986,2987,2988,2989,2990,2991,2992, -2993,2994,2995,2996,2997,2998,2999,3000,3001,3002,3003,3004,3005,3006,3007,3008, -3009,3010,3011,3012,1553,3013,3014,3015,3016,3017,1554,3018,1332,3019,3020,3021, -3022,3023,3024,3025,3026,3027,3028,3029,3030,3031,3032,3033,3034,3035,3036,3037, -3038,3039,3040,3041,3042,3043,3044,3045,3046,3047,3048,3049,3050,1555,3051,3052, -3053,1556,1557,3054,3055,3056,3057,3058,3059,3060,3061,3062,3063,3064,3065,3066, -3067,1558,3068,3069,3070,3071,3072,3073,3074,3075,3076,1559,3077,3078,3079,3080, -3081,3082,3083,1253,3084,3085,3086,3087,3088,3089,3090,3091,3092,3093,3094,3095, -3096,3097,3098,3099,3100,3101,3102,3103,3104,3105,3106,3107,3108,1152,3109,3110, -3111,3112,3113,1560,3114,3115,3116,3117,1111,3118,3119,3120,3121,3122,3123,3124, -3125,3126,3127,3128,3129,3130,3131,3132,3133,3134,3135,3136,3137,3138,3139,3140, -3141,3142,3143,3144,3145,3146,3147,3148,3149,3150,3151,3152,3153,3154,3155,3156, -3157,3158,3159,3160,3161,3162,3163,3164,3165,3166,3167,3168,3169,3170,3171,3172, -3173,3174,3175,3176,1333,3177,3178,3179,3180,3181,3182,3183,3184,3185,3186,3187, -3188,3189,1561,3190,3191,1334,3192,3193,3194,3195,3196,3197,3198,3199,3200,3201, -3202,3203,3204,3205,3206,3207,3208,3209,3210,3211,3212,3213,3214,3215,3216,3217, -3218,3219,3220,3221,3222,3223,3224,3225,3226,3227,3228,3229,3230,3231,3232,3233, -3234,1562,3235,3236,3237,3238,3239,3240,3241,3242,3243,3244,3245,3246,3247,3248, -3249,3250,3251,3252,3253,3254,3255,3256,3257,3258,3259,3260,3261,3262,3263,3264, -3265,3266,3267,3268,3269,3270,3271,3272,3273,3274,3275,3276,3277,1563,3278,3279, -3280,3281,3282,3283,3284,3285,3286,3287,3288,3289,3290,3291,3292,3293,3294,3295, -3296,3297,3298,3299,3300,3301,3302,3303,3304,3305,3306,3307,3308,3309,3310,3311, -3312,3313,3314,3315,3316,3317,3318,3319,3320,3321,3322,3323,3324,3325,3326,3327, -3328,3329,3330,3331,3332,3333,3334,3335,3336,3337,3338,3339,3340,3341,3342,3343, -3344,3345,3346,3347,3348,3349,3350,3351,3352,3353,3354,3355,3356,3357,3358,3359, -3360,3361,3362,3363,3364,1335,3365,3366,3367,3368,3369,3370,3371,3372,3373,3374, -3375,3376,3377,3378,3379,3380,3381,3382,3383,3384,3385,3386,3387,1336,3388,3389, -3390,3391,3392,3393,3394,3395,3396,3397,3398,3399,3400,3401,3402,3403,3404,3405, -3406,3407,3408,3409,3410,3411,3412,3413,3414,1337,3415,3416,3417,3418,3419,1338, -3420,3421,3422,1564,1565,3423,3424,3425,3426,3427,3428,3429,3430,3431,1254,3432, -3433,3434,1339,3435,3436,3437,3438,3439,1566,3440,3441,3442,3443,3444,3445,3446, -3447,3448,3449,3450,3451,3452,3453,3454,1255,3455,3456,3457,3458,3459,1567,1191, -3460,1568,1569,3461,3462,3463,1570,3464,3465,3466,3467,3468,1571,3469,3470,3471, -3472,3473,1572,3474,3475,3476,3477,3478,3479,3480,3481,3482,3483,3484,3485,3486, -1340,3487,3488,3489,3490,3491,3492,1021,3493,3494,3495,3496,3497,3498,1573,3499, -1341,3500,3501,3502,3503,3504,3505,3506,3507,3508,3509,3510,3511,1342,3512,3513, -3514,3515,3516,1574,1343,3517,3518,3519,1575,3520,1576,3521,3522,3523,3524,3525, -3526,3527,3528,3529,3530,3531,3532,3533,3534,3535,3536,3537,3538,3539,3540,3541, -3542,3543,3544,3545,3546,3547,3548,3549,3550,3551,3552,3553,3554,3555,3556,3557, -3558,3559,3560,3561,3562,3563,3564,3565,3566,3567,3568,3569,3570,3571,3572,3573, -3574,3575,3576,3577,3578,3579,3580,1577,3581,3582,1578,3583,3584,3585,3586,3587, -3588,3589,3590,3591,3592,3593,3594,3595,3596,3597,3598,3599,3600,3601,3602,3603, -3604,1579,3605,3606,3607,3608,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618, -3619,3620,3621,3622,3623,3624,3625,3626,3627,3628,3629,1580,3630,3631,1581,3632, -3633,3634,3635,3636,3637,3638,3639,3640,3641,3642,3643,3644,3645,3646,3647,3648, -3649,3650,3651,3652,3653,3654,3655,3656,1582,3657,3658,3659,3660,3661,3662,3663, -3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3674,3675,3676,3677,3678,3679, -3680,3681,3682,3683,3684,3685,3686,3687,3688,3689,3690,3691,3692,3693,3694,3695, -3696,3697,3698,3699,3700,1192,3701,3702,3703,3704,1256,3705,3706,3707,3708,1583, -1257,3709,3710,3711,3712,3713,3714,3715,3716,1584,3717,3718,3719,3720,3721,3722, -3723,3724,3725,3726,3727,3728,3729,3730,3731,3732,3733,3734,3735,3736,3737,3738, -3739,3740,3741,3742,3743,3744,3745,1344,3746,3747,3748,3749,3750,3751,3752,3753, -3754,3755,3756,1585,3757,3758,3759,3760,3761,3762,3763,3764,3765,3766,1586,3767, -3768,3769,3770,3771,3772,3773,3774,3775,3776,3777,3778,1345,3779,3780,3781,3782, -3783,3784,3785,3786,3787,3788,3789,3790,3791,3792,3793,3794,3795,1346,1587,3796, -3797,1588,3798,3799,3800,3801,3802,3803,3804,3805,3806,1347,3807,3808,3809,3810, -3811,1589,3812,3813,3814,3815,3816,3817,3818,3819,3820,3821,1590,3822,3823,1591, -1348,3824,3825,3826,3827,3828,3829,3830,1592,3831,3832,1593,3833,3834,3835,3836, -3837,3838,3839,3840,3841,3842,3843,3844,1349,3845,3846,3847,3848,3849,3850,3851, -3852,3853,3854,3855,3856,3857,3858,1594,3859,3860,3861,3862,3863,3864,3865,3866, -3867,3868,3869,1595,3870,3871,3872,3873,1596,3874,3875,3876,3877,3878,3879,3880, -3881,3882,3883,3884,3885,3886,1597,3887,3888,3889,3890,3891,3892,3893,3894,3895, -1598,3896,3897,3898,1599,1600,3899,1350,3900,1351,3901,3902,1352,3903,3904,3905, -3906,3907,3908,3909,3910,3911,3912,3913,3914,3915,3916,3917,3918,3919,3920,3921, -3922,3923,3924,1258,3925,3926,3927,3928,3929,3930,3931,1193,3932,1601,3933,3934, -3935,3936,3937,3938,3939,3940,3941,3942,3943,1602,3944,3945,3946,3947,3948,1603, -3949,3950,3951,3952,3953,3954,3955,3956,3957,3958,3959,3960,3961,3962,3963,3964, -3965,1604,3966,3967,3968,3969,3970,3971,3972,3973,3974,3975,3976,3977,1353,3978, -3979,3980,3981,3982,3983,3984,3985,3986,3987,3988,3989,3990,3991,1354,3992,3993, -3994,3995,3996,3997,3998,3999,4000,4001,4002,4003,4004,4005,4006,4007,4008,4009, -4010,4011,4012,4013,4014,4015,4016,4017,4018,4019,4020,4021,4022,4023,1355,4024, -4025,4026,4027,4028,4029,4030,4031,4032,4033,4034,4035,4036,4037,4038,4039,4040, -1605,4041,4042,4043,4044,4045,4046,4047,4048,4049,4050,4051,4052,4053,4054,4055, -4056,4057,4058,4059,4060,1606,4061,4062,4063,4064,1607,4065,4066,4067,4068,4069, -4070,4071,4072,4073,4074,4075,4076,1194,4077,4078,1608,4079,4080,4081,4082,4083, -4084,4085,4086,4087,1609,4088,4089,4090,4091,4092,4093,4094,4095,4096,4097,4098, -4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,1259,4109,4110,4111,4112,4113, -4114,4115,4116,4117,4118,4119,4120,4121,4122,4123,4124,1195,4125,4126,4127,1610, -4128,4129,4130,4131,4132,4133,4134,4135,4136,4137,1356,4138,4139,4140,4141,4142, -4143,4144,1611,4145,4146,4147,4148,4149,4150,4151,4152,4153,4154,4155,4156,4157, -4158,4159,4160,4161,4162,4163,4164,4165,4166,4167,4168,4169,4170,4171,4172,4173, -4174,4175,4176,4177,4178,4179,4180,4181,4182,4183,4184,4185,4186,4187,4188,4189, -4190,4191,4192,4193,4194,4195,4196,4197,4198,4199,4200,4201,4202,4203,4204,4205, -4206,4207,4208,4209,4210,4211,4212,4213,4214,4215,4216,4217,4218,4219,1612,4220, -4221,4222,4223,4224,4225,4226,4227,1357,4228,1613,4229,4230,4231,4232,4233,4234, -4235,4236,4237,4238,4239,4240,4241,4242,4243,1614,4244,4245,4246,4247,4248,4249, -4250,4251,4252,4253,4254,4255,4256,4257,4258,4259,4260,4261,4262,4263,4264,4265, -4266,4267,4268,4269,4270,1196,1358,4271,4272,4273,4274,4275,4276,4277,4278,4279, -4280,4281,4282,4283,4284,4285,4286,4287,1615,4288,4289,4290,4291,4292,4293,4294, -4295,4296,4297,4298,4299,4300,4301,4302,4303,4304,4305,4306,4307,4308,4309,4310, -4311,4312,4313,4314,4315,4316,4317,4318,4319,4320,4321,4322,4323,4324,4325,4326, -4327,4328,4329,4330,4331,4332,4333,4334,1616,4335,4336,4337,4338,4339,4340,4341, -4342,4343,4344,4345,4346,4347,4348,4349,4350,4351,4352,4353,4354,4355,4356,4357, -4358,4359,4360,1617,4361,4362,4363,4364,4365,1618,4366,4367,4368,4369,4370,4371, -4372,4373,4374,4375,4376,4377,4378,4379,4380,4381,4382,4383,4384,4385,4386,4387, -4388,4389,4390,4391,4392,4393,4394,4395,4396,4397,4398,4399,4400,4401,4402,4403, -4404,4405,4406,4407,4408,4409,4410,4411,4412,4413,4414,4415,4416,1619,4417,4418, -4419,4420,4421,4422,4423,4424,4425,1112,4426,4427,4428,4429,4430,1620,4431,4432, -4433,4434,4435,4436,4437,4438,4439,4440,4441,4442,1260,1261,4443,4444,4445,4446, -4447,4448,4449,4450,4451,4452,4453,4454,4455,1359,4456,4457,4458,4459,4460,4461, -4462,4463,4464,4465,1621,4466,4467,4468,4469,4470,4471,4472,4473,4474,4475,4476, -4477,4478,4479,4480,4481,4482,4483,4484,4485,4486,4487,4488,4489,1055,4490,4491, -4492,4493,4494,4495,4496,4497,4498,4499,4500,4501,4502,4503,4504,4505,4506,4507, -4508,4509,4510,4511,4512,4513,4514,4515,4516,4517,4518,1622,4519,4520,4521,1623, -4522,4523,4524,4525,4526,4527,4528,4529,4530,4531,4532,4533,4534,4535,1360,4536, -4537,4538,4539,4540,4541,4542,4543, 975,4544,4545,4546,4547,4548,4549,4550,4551, -4552,4553,4554,4555,4556,4557,4558,4559,4560,4561,4562,4563,4564,4565,4566,4567, -4568,4569,4570,4571,1624,4572,4573,4574,4575,4576,1625,4577,4578,4579,4580,4581, -4582,4583,4584,1626,4585,4586,4587,4588,4589,4590,4591,4592,4593,4594,4595,1627, -4596,4597,4598,4599,4600,4601,4602,4603,4604,4605,4606,4607,4608,4609,4610,4611, -4612,4613,4614,4615,1628,4616,4617,4618,4619,4620,4621,4622,4623,4624,4625,4626, -4627,4628,4629,4630,4631,4632,4633,4634,4635,4636,4637,4638,4639,4640,4641,4642, -4643,4644,4645,4646,4647,4648,4649,1361,4650,4651,4652,4653,4654,4655,4656,4657, -4658,4659,4660,4661,1362,4662,4663,4664,4665,4666,4667,4668,4669,4670,4671,4672, -4673,4674,4675,4676,4677,4678,4679,4680,4681,4682,1629,4683,4684,4685,4686,4687, -1630,4688,4689,4690,4691,1153,4692,4693,4694,1113,4695,4696,4697,4698,4699,4700, -4701,4702,4703,4704,4705,4706,4707,4708,4709,4710,4711,1197,4712,4713,4714,4715, -4716,4717,4718,4719,4720,4721,4722,4723,4724,4725,4726,4727,4728,4729,4730,4731, -4732,4733,4734,4735,1631,4736,1632,4737,4738,4739,4740,4741,4742,4743,4744,1633, -4745,4746,4747,4748,4749,1262,4750,4751,4752,4753,4754,1363,4755,4756,4757,4758, -4759,4760,4761,4762,4763,4764,4765,4766,4767,4768,1634,4769,4770,4771,4772,4773, -4774,4775,4776,4777,4778,1635,4779,4780,4781,4782,4783,4784,4785,4786,4787,4788, -4789,1636,4790,4791,4792,4793,4794,4795,4796,4797,4798,4799,4800,4801,4802,4803, -4804,4805,4806,1637,4807,4808,4809,1638,4810,4811,4812,4813,4814,4815,4816,4817, -4818,1639,4819,4820,4821,4822,4823,4824,4825,4826,4827,4828,4829,4830,4831,4832, -4833,1077,4834,4835,4836,4837,4838,4839,4840,4841,4842,4843,4844,4845,4846,4847, -4848,4849,4850,4851,4852,4853,4854,4855,4856,4857,4858,4859,4860,4861,4862,4863, -4864,4865,4866,4867,4868,4869,4870,4871,4872,4873,4874,4875,4876,4877,4878,4879, -4880,4881,4882,4883,1640,4884,4885,1641,4886,4887,4888,4889,4890,4891,4892,4893, -4894,4895,4896,4897,4898,4899,4900,4901,4902,4903,4904,4905,4906,4907,4908,4909, -4910,4911,1642,4912,4913,4914,1364,4915,4916,4917,4918,4919,4920,4921,4922,4923, -4924,4925,4926,4927,4928,4929,4930,4931,1643,4932,4933,4934,4935,4936,4937,4938, -4939,4940,4941,4942,4943,4944,4945,4946,4947,4948,4949,4950,4951,4952,4953,4954, -4955,4956,4957,4958,4959,4960,4961,4962,4963,4964,4965,4966,4967,4968,4969,4970, -4971,4972,4973,4974,4975,4976,4977,4978,4979,4980,1644,4981,4982,4983,4984,1645, -4985,4986,1646,4987,4988,4989,4990,4991,4992,4993,4994,4995,4996,4997,4998,4999, -5000,5001,5002,5003,5004,5005,1647,5006,1648,5007,5008,5009,5010,5011,5012,1078, -5013,5014,5015,5016,5017,5018,5019,5020,5021,5022,5023,5024,5025,5026,5027,5028, -1365,5029,5030,5031,5032,5033,5034,5035,5036,5037,5038,5039,1649,5040,5041,5042, -5043,5044,5045,1366,5046,5047,5048,5049,5050,5051,5052,5053,5054,5055,1650,5056, -5057,5058,5059,5060,5061,5062,5063,5064,5065,5066,5067,5068,5069,5070,5071,5072, -5073,5074,5075,5076,5077,1651,5078,5079,5080,5081,5082,5083,5084,5085,5086,5087, -5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102,5103, -5104,5105,5106,5107,5108,5109,5110,1652,5111,5112,5113,5114,5115,5116,5117,5118, -1367,5119,5120,5121,5122,5123,5124,5125,5126,5127,5128,5129,1653,5130,5131,5132, -5133,5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146,5147,5148, -5149,1368,5150,1654,5151,1369,5152,5153,5154,5155,5156,5157,5158,5159,5160,5161, -5162,5163,5164,5165,5166,5167,5168,5169,5170,5171,5172,5173,5174,5175,5176,5177, -5178,1370,5179,5180,5181,5182,5183,5184,5185,5186,5187,5188,5189,5190,5191,5192, -5193,5194,5195,5196,5197,5198,1655,5199,5200,5201,5202,1656,5203,5204,5205,5206, -1371,5207,1372,5208,5209,5210,5211,1373,5212,5213,1374,5214,5215,5216,5217,5218, -5219,5220,5221,5222,5223,5224,5225,5226,5227,5228,5229,5230,5231,5232,5233,5234, -5235,5236,5237,5238,5239,5240,5241,5242,5243,5244,5245,5246,5247,1657,5248,5249, -5250,5251,1658,1263,5252,5253,5254,5255,5256,1375,5257,5258,5259,5260,5261,5262, -5263,5264,5265,5266,5267,5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278, -5279,5280,5281,5282,5283,1659,5284,5285,5286,5287,5288,5289,5290,5291,5292,5293, -5294,5295,5296,5297,5298,5299,5300,1660,5301,5302,5303,5304,5305,5306,5307,5308, -5309,5310,5311,5312,5313,5314,5315,5316,5317,5318,5319,5320,5321,1376,5322,5323, -5324,5325,5326,5327,5328,5329,5330,5331,5332,5333,1198,5334,5335,5336,5337,5338, -5339,5340,5341,5342,5343,1661,5344,5345,5346,5347,5348,5349,5350,5351,5352,5353, -5354,5355,5356,5357,5358,5359,5360,5361,5362,5363,5364,5365,5366,5367,5368,5369, -5370,5371,5372,5373,5374,5375,5376,5377,5378,5379,5380,5381,5382,5383,5384,5385, -5386,5387,5388,5389,5390,5391,5392,5393,5394,5395,5396,5397,5398,1264,5399,5400, -5401,5402,5403,5404,5405,5406,5407,5408,5409,5410,5411,5412,1662,5413,5414,5415, -5416,1663,5417,5418,5419,5420,5421,5422,5423,5424,5425,5426,5427,5428,5429,5430, -5431,5432,5433,5434,5435,5436,5437,5438,1664,5439,5440,5441,5442,5443,5444,5445, -5446,5447,5448,5449,5450,5451,5452,5453,5454,5455,5456,5457,5458,5459,5460,5461, -5462,5463,5464,5465,5466,5467,5468,5469,5470,5471,5472,5473,5474,5475,5476,5477, -5478,1154,5479,5480,5481,5482,5483,5484,5485,1665,5486,5487,5488,5489,5490,5491, -5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504,5505,5506,5507, -5508,5509,5510,5511,5512,5513,5514,5515,5516,5517,5518,5519,5520,5521,5522,5523, -5524,5525,5526,5527,5528,5529,5530,5531,5532,5533,5534,5535,5536,5537,5538,5539, -5540,5541,5542,5543,5544,5545,5546,5547,5548,1377,5549,5550,5551,5552,5553,5554, -5555,5556,5557,5558,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568,5569,5570, -1114,5571,5572,5573,5574,5575,5576,5577,5578,5579,5580,5581,5582,5583,5584,5585, -5586,5587,5588,5589,5590,5591,5592,1378,5593,5594,5595,5596,5597,5598,5599,5600, -5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,1379,5615, -5616,5617,5618,5619,5620,5621,5622,5623,5624,5625,5626,5627,5628,5629,5630,5631, -5632,5633,5634,1380,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646, -5647,5648,5649,1381,1056,5650,5651,5652,5653,5654,5655,5656,5657,5658,5659,5660, -1666,5661,5662,5663,5664,5665,5666,5667,5668,1667,5669,1668,5670,5671,5672,5673, -5674,5675,5676,5677,5678,1155,5679,5680,5681,5682,5683,5684,5685,5686,5687,5688, -5689,5690,5691,5692,5693,5694,5695,5696,5697,5698,1669,5699,5700,5701,5702,5703, -5704,5705,1670,5706,5707,5708,5709,5710,1671,5711,5712,5713,5714,1382,5715,5716, -5717,5718,5719,5720,5721,5722,5723,5724,5725,1672,5726,5727,1673,1674,5728,5729, -5730,5731,5732,5733,5734,5735,5736,1675,5737,5738,5739,5740,5741,5742,5743,5744, -1676,5745,5746,5747,5748,5749,5750,5751,1383,5752,5753,5754,5755,5756,5757,5758, -5759,5760,5761,5762,5763,5764,5765,5766,5767,5768,1677,5769,5770,5771,5772,5773, -1678,5774,5775,5776, 998,5777,5778,5779,5780,5781,5782,5783,5784,5785,1384,5786, -5787,5788,5789,5790,5791,5792,5793,5794,5795,5796,5797,5798,5799,5800,1679,5801, -5802,5803,1115,1116,5804,5805,5806,5807,5808,5809,5810,5811,5812,5813,5814,5815, -5816,5817,5818,5819,5820,5821,5822,5823,5824,5825,5826,5827,5828,5829,5830,5831, -5832,5833,5834,5835,5836,5837,5838,5839,5840,5841,5842,5843,5844,5845,5846,5847, -5848,5849,5850,5851,5852,5853,5854,5855,1680,5856,5857,5858,5859,5860,5861,5862, -5863,5864,1681,5865,5866,5867,1682,5868,5869,5870,5871,5872,5873,5874,5875,5876, -5877,5878,5879,1683,5880,1684,5881,5882,5883,5884,1685,5885,5886,5887,5888,5889, -5890,5891,5892,5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904,5905, -5906,5907,1686,5908,5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920, -5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,1687, -5936,5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951, -5952,1688,1689,5953,1199,5954,5955,5956,5957,5958,5959,5960,5961,1690,5962,5963, -5964,5965,5966,5967,5968,5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979, -5980,5981,1385,5982,1386,5983,5984,5985,5986,5987,5988,5989,5990,5991,5992,5993, -5994,5995,5996,5997,5998,5999,6000,6001,6002,6003,6004,6005,6006,6007,6008,6009, -6010,6011,6012,6013,6014,6015,6016,6017,6018,6019,6020,6021,6022,6023,6024,6025, -6026,6027,1265,6028,6029,1691,6030,6031,6032,6033,6034,6035,6036,6037,6038,6039, -6040,6041,6042,6043,6044,6045,6046,6047,6048,6049,6050,6051,6052,6053,6054,6055, -6056,6057,6058,6059,6060,6061,6062,6063,6064,6065,6066,6067,6068,6069,6070,6071, -6072,6073,6074,6075,6076,6077,6078,6079,6080,6081,6082,6083,6084,1692,6085,6086, -6087,6088,6089,6090,6091,6092,6093,6094,6095,6096,6097,6098,6099,6100,6101,6102, -6103,6104,6105,6106,6107,6108,6109,6110,6111,6112,6113,6114,6115,6116,6117,6118, -6119,6120,6121,6122,6123,6124,6125,6126,6127,6128,6129,6130,6131,1693,6132,6133, -6134,6135,6136,1694,6137,6138,6139,6140,6141,1695,6142,6143,6144,6145,6146,6147, -6148,6149,6150,6151,6152,6153,6154,6155,6156,6157,6158,6159,6160,6161,6162,6163, -6164,6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6176,6177,6178,6179, -6180,6181,6182,6183,6184,6185,1696,6186,6187,6188,6189,6190,6191,6192,6193,6194, -6195,6196,6197,6198,6199,6200,6201,6202,6203,6204,6205,6206,6207,6208,6209,6210, -6211,6212,6213,6214,6215,6216,6217,6218,6219,1697,6220,6221,6222,6223,6224,6225, -6226,6227,6228,6229,6230,6231,6232,6233,6234,6235,6236,6237,6238,6239,6240,6241, -6242,6243,6244,6245,6246,6247,6248,6249,6250,6251,6252,6253,1698,6254,6255,6256, -6257,6258,6259,6260,6261,6262,6263,1200,6264,6265,6266,6267,6268,6269,6270,6271, //1024 -6272,6273,6274,6275,6276,6277,6278,6279,6280,6281,6282,6283,6284,6285,6286,6287, -6288,6289,6290,6291,6292,6293,6294,6295,6296,6297,6298,6299,6300,6301,6302,1699, -6303,6304,1700,6305,6306,6307,6308,6309,6310,6311,6312,6313,6314,6315,6316,6317, -6318,6319,6320,6321,6322,6323,6324,6325,6326,6327,6328,6329,6330,6331,6332,6333, -6334,6335,6336,6337,6338,6339,1701,6340,6341,6342,6343,6344,1387,6345,6346,6347, -6348,6349,6350,6351,6352,6353,6354,6355,6356,6357,6358,6359,6360,6361,6362,6363, -6364,6365,6366,6367,6368,6369,6370,6371,6372,6373,6374,6375,6376,6377,6378,6379, -6380,6381,6382,6383,6384,6385,6386,6387,6388,6389,6390,6391,6392,6393,6394,6395, -6396,6397,6398,6399,6400,6401,6402,6403,6404,6405,6406,6407,6408,6409,6410,6411, -6412,6413,1702,6414,6415,6416,6417,6418,6419,6420,6421,6422,1703,6423,6424,6425, -6426,6427,6428,6429,6430,6431,6432,6433,6434,6435,6436,6437,6438,1704,6439,6440, -6441,6442,6443,6444,6445,6446,6447,6448,6449,6450,6451,6452,6453,6454,6455,6456, -6457,6458,6459,6460,6461,6462,6463,6464,6465,6466,6467,6468,6469,6470,6471,6472, -6473,6474,6475,6476,6477,6478,6479,6480,6481,6482,6483,6484,6485,6486,6487,6488, -6489,6490,6491,6492,6493,6494,6495,6496,6497,6498,6499,6500,6501,6502,6503,1266, -6504,6505,6506,6507,6508,6509,6510,6511,6512,6513,6514,6515,6516,6517,6518,6519, -6520,6521,6522,6523,6524,6525,6526,6527,6528,6529,6530,6531,6532,6533,6534,6535, -6536,6537,6538,6539,6540,6541,6542,6543,6544,6545,6546,6547,6548,6549,6550,6551, -1705,1706,6552,6553,6554,6555,6556,6557,6558,6559,6560,6561,6562,6563,6564,6565, -6566,6567,6568,6569,6570,6571,6572,6573,6574,6575,6576,6577,6578,6579,6580,6581, -6582,6583,6584,6585,6586,6587,6588,6589,6590,6591,6592,6593,6594,6595,6596,6597, -6598,6599,6600,6601,6602,6603,6604,6605,6606,6607,6608,6609,6610,6611,6612,6613, -6614,6615,6616,6617,6618,6619,6620,6621,6622,6623,6624,6625,6626,6627,6628,6629, -6630,6631,6632,6633,6634,6635,6636,6637,1388,6638,6639,6640,6641,6642,6643,6644, -1707,6645,6646,6647,6648,6649,6650,6651,6652,6653,6654,6655,6656,6657,6658,6659, -6660,6661,6662,6663,1708,6664,6665,6666,6667,6668,6669,6670,6671,6672,6673,6674, -1201,6675,6676,6677,6678,6679,6680,6681,6682,6683,6684,6685,6686,6687,6688,6689, -6690,6691,6692,6693,6694,6695,6696,6697,6698,6699,6700,6701,6702,6703,6704,6705, -6706,6707,6708,6709,6710,6711,6712,6713,6714,6715,6716,6717,6718,6719,6720,6721, -6722,6723,6724,6725,1389,6726,6727,6728,6729,6730,6731,6732,6733,6734,6735,6736, -1390,1709,6737,6738,6739,6740,6741,6742,1710,6743,6744,6745,6746,1391,6747,6748, -6749,6750,6751,6752,6753,6754,6755,6756,6757,1392,6758,6759,6760,6761,6762,6763, -6764,6765,6766,6767,6768,6769,6770,6771,6772,6773,6774,6775,6776,6777,6778,6779, -6780,1202,6781,6782,6783,6784,6785,6786,6787,6788,6789,6790,6791,6792,6793,6794, -6795,6796,6797,6798,6799,6800,6801,6802,6803,6804,6805,6806,6807,6808,6809,1711, -6810,6811,6812,6813,6814,6815,6816,6817,6818,6819,6820,6821,6822,6823,6824,6825, -6826,6827,6828,6829,6830,6831,6832,6833,6834,6835,6836,1393,6837,6838,6839,6840, -6841,6842,6843,6844,6845,6846,6847,6848,6849,6850,6851,6852,6853,6854,6855,6856, -6857,6858,6859,6860,6861,6862,6863,6864,6865,6866,6867,6868,6869,6870,6871,6872, -6873,6874,6875,6876,6877,6878,6879,6880,6881,6882,6883,6884,6885,6886,6887,6888, -6889,6890,6891,6892,6893,6894,6895,6896,6897,6898,6899,6900,6901,6902,1712,6903, -6904,6905,6906,6907,6908,6909,6910,1713,6911,6912,6913,6914,6915,6916,6917,6918, -6919,6920,6921,6922,6923,6924,6925,6926,6927,6928,6929,6930,6931,6932,6933,6934, -6935,6936,6937,6938,6939,6940,6941,6942,6943,6944,6945,6946,6947,6948,6949,6950, -6951,6952,6953,6954,6955,6956,6957,6958,6959,6960,6961,6962,6963,6964,6965,6966, -6967,6968,6969,6970,6971,6972,6973,6974,1714,6975,6976,6977,6978,6979,6980,6981, -6982,6983,6984,6985,6986,6987,6988,1394,6989,6990,6991,6992,6993,6994,6995,6996, -6997,6998,6999,7000,1715,7001,7002,7003,7004,7005,7006,7007,7008,7009,7010,7011, -7012,7013,7014,7015,7016,7017,7018,7019,7020,7021,7022,7023,7024,7025,7026,7027, -7028,1716,7029,7030,7031,7032,7033,7034,7035,7036,7037,7038,7039,7040,7041,7042, -7043,7044,7045,7046,7047,7048,7049,7050,7051,7052,7053,7054,7055,7056,7057,7058, -7059,7060,7061,7062,7063,7064,7065,7066,7067,7068,7069,7070,7071,7072,7073,7074, -7075,7076,7077,7078,7079,7080,7081,7082,7083,7084,7085,7086,7087,7088,7089,7090, -7091,7092,7093,7094,7095,7096,7097,7098,7099,7100,7101,7102,7103,7104,7105,7106, -7107,7108,7109,7110,7111,7112,7113,7114,7115,7116,7117,7118,7119,7120,7121,7122, -7123,7124,7125,7126,7127,7128,7129,7130,7131,7132,7133,7134,7135,7136,7137,7138, -7139,7140,7141,7142,7143,7144,7145,7146,7147,7148,7149,7150,7151,7152,7153,7154, -7155,7156,7157,7158,7159,7160,7161,7162,7163,7164,7165,7166,7167,7168,7169,7170, -7171,7172,7173,7174,7175,7176,7177,7178,7179,7180,7181,7182,7183,7184,7185,7186, -7187,7188,7189,7190,7191,7192,7193,7194,7195,7196,7197,7198,7199,7200,7201,7202, -7203,7204,7205,7206,7207,1395,7208,7209,7210,7211,7212,7213,1717,7214,7215,7216, -7217,7218,7219,7220,7221,7222,7223,7224,7225,7226,7227,7228,7229,7230,7231,7232, -7233,7234,7235,7236,7237,7238,7239,7240,7241,7242,7243,7244,7245,7246,7247,7248, -7249,7250,7251,7252,7253,7254,7255,7256,7257,7258,7259,7260,7261,7262,7263,7264, -7265,7266,7267,7268,7269,7270,7271,7272,7273,7274,7275,7276,7277,7278,7279,7280, -7281,7282,7283,7284,7285,7286,7287,7288,7289,7290,7291,7292,7293,7294,7295,7296, -7297,7298,7299,7300,7301,7302,7303,7304,7305,7306,7307,7308,7309,7310,7311,7312, -7313,1718,7314,7315,7316,7317,7318,7319,7320,7321,7322,7323,7324,7325,7326,7327, -7328,7329,7330,7331,7332,7333,7334,7335,7336,7337,7338,7339,7340,7341,7342,7343, -7344,7345,7346,7347,7348,7349,7350,7351,7352,7353,7354,7355,7356,7357,7358,7359, -7360,7361,7362,7363,7364,7365,7366,7367,7368,7369,7370,7371,7372,7373,7374,7375, -7376,7377,7378,7379,7380,7381,7382,7383,7384,7385,7386,7387,7388,7389,7390,7391, -7392,7393,7394,7395,7396,7397,7398,7399,7400,7401,7402,7403,7404,7405,7406,7407, -7408,7409,7410,7411,7412,7413,7414,7415,7416,7417,7418,7419,7420,7421,7422,7423, -7424,7425,7426,7427,7428,7429,7430,7431,7432,7433,7434,7435,7436,7437,7438,7439, -7440,7441,7442,7443,7444,7445,7446,7447,7448,7449,7450,7451,7452,7453,7454,7455, -7456,7457,7458,7459,7460,7461,7462,7463,7464,7465,7466,7467,7468,7469,7470,7471, -7472,7473,7474,7475,7476,7477,7478,7479,7480,7481,7482,7483,7484,7485,7486,7487, -7488,7489,7490,7491,7492,7493,7494,7495,7496,7497,7498,7499,7500,7501,7502,7503, -7504,7505,7506,7507,7508,7509,7510,7511,7512,7513,7514,7515,7516,7517,7518,7519, -7520,7521,7522,7523,7524,7525,7526,7527,7528,7529,7530,7531,7532,7533,7534,7535, -7536,7537,7538,7539,7540,7541,7542,7543,7544,7545,7546,7547,7548,7549,7550,7551, -7552,7553,7554,7555,7556,7557,7558,7559,7560,7561,7562,7563,7564,7565,7566,7567, -7568,7569,7570,7571,7572,7573,7574,7575,7576,7577,7578,7579,7580,7581,7582,7583, -7584,7585,7586,7587,7588,7589,7590,7591,7592,7593,7594,7595,7596,7597,7598,7599, -7600,7601,7602,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614,7615, -7616,7617,7618,7619,7620,7621,7622,7623,7624,7625,7626,7627,7628,7629,7630,7631, -7632,7633,7634,7635,7636,7637,7638,7639,7640,7641,7642,7643,7644,7645,7646,7647, -7648,7649,7650,7651,7652,7653,7654,7655,7656,7657,7658,7659,7660,7661,7662,7663, -7664,7665,7666,7667,7668,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679, -7680,7681,7682,7683,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695, -7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711, -7712,7713,7714,7715,7716,7717,7718,7719,7720,7721,7722,7723,7724,7725,7726,7727, -7728,7729,7730,7731,7732,7733,7734,7735,7736,7737,7738,7739,7740,7741,7742,7743, -7744,7745,7746,7747,7748,7749,7750,7751,7752,7753,7754,7755,7756,7757,7758,7759, -7760,7761,7762,7763,7764,7765,7766,7767,7768,7769,7770,7771,7772,7773,7774,7775, -7776,7777,7778,7779,7780,7781,7782,7783,7784,7785,7786,7787,7788,7789,7790,7791, -7792,7793,7794,7795,7796,7797,7798,7799,7800,7801,7802,7803,7804,7805,7806,7807, -7808,7809,7810,7811,7812,7813,7814,7815,7816,7817,7818,7819,7820,7821,7822,7823, -7824,7825,7826,7827,7828,7829,7830,7831,7832,7833,7834,7835,7836,7837,7838,7839, -7840,7841,7842,7843,7844,7845,7846,7847,7848,7849,7850,7851,7852,7853,7854,7855, -7856,7857,7858,7859,7860,7861,7862,7863,7864,7865,7866,7867,7868,7869,7870,7871, -7872,7873,7874,7875,7876,7877,7878,7879,7880,7881,7882,7883,7884,7885,7886,7887, -7888,7889,7890,7891,7892,7893,7894,7895,7896,7897,7898,7899,7900,7901,7902,7903, -7904,7905,7906,7907,7908,7909,7910,7911,7912,7913,7914,7915,7916,7917,7918,7919, -7920,7921,7922,7923,7924,7925,7926,7927,7928,7929,7930,7931,7932,7933,7934,7935, -7936,7937,7938,7939,7940,7941,7942,7943,7944,7945,7946,7947,7948,7949,7950,7951, -7952,7953,7954,7955,7956,7957,7958,7959,7960,7961,7962,7963,7964,7965,7966,7967, -7968,7969,7970,7971,7972,7973,7974,7975,7976,7977,7978,7979,7980,7981,7982,7983, -7984,7985,7986,7987,7988,7989,7990,7991,7992,7993,7994,7995,7996,7997,7998,7999, -8000,8001,8002,8003,8004,8005,8006,8007,8008,8009,8010,8011,8012,8013,8014,8015, -8016,8017,8018,8019,8020,8021,8022,8023,8024,8025,8026,8027,8028,8029,8030,8031, -8032,8033,8034,8035,8036,8037,8038,8039,8040,8041,8042,8043,8044,8045,8046,8047, -8048,8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8062,8063, -8064,8065,8066,8067,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079, -8080,8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,8093,8094,8095, -8096,8097,8098,8099,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110,8111, -8112,8113,8114,8115,8116,8117,8118,8119,8120,8121,8122,8123,8124,8125,8126,8127, -8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141,8142,8143, -8144,8145,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155,8156,8157,8158,8159, -8160,8161,8162,8163,8164,8165,8166,8167,8168,8169,8170,8171,8172,8173,8174,8175, -8176,8177,8178,8179,8180,8181,8182,8183,8184,8185,8186,8187,8188,8189,8190,8191, -8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8203,8204,8205,8206,8207, -8208,8209,8210,8211,8212,8213,8214,8215,8216,8217,8218,8219,8220,8221,8222,8223, -8224,8225,8226,8227,8228,8229,8230,8231,8232,8233,8234,8235,8236,8237,8238,8239, -8240,8241,8242,8243,8244,8245,8246,8247,8248,8249,8250,8251,8252,8253,8254,8255, -8256,8257,8258,8259,8260,8261,8262,8263,8264,8265,8266,8267,8268,8269,8270,8271, -8272,8273,8274,8275,8276,8277,8278,8279,8280,8281,8282,8283,8284,8285,8286,8287, -8288,8289,8290,8291,8292,8293,8294,8295,8296,8297,8298,8299,8300,8301,8302,8303, -8304,8305,8306,8307,8308,8309,8310,8311,8312,8313,8314,8315,8316,8317,8318,8319, -8320,8321,8322,8323,8324,8325,8326,8327,8328,8329,8330,8331,8332,8333,8334,8335, -8336,8337,8338,8339,8340,8341,8342,8343,8344,8345,8346,8347,8348,8349,8350,8351, -8352,8353,8354,8355,8356,8357,8358,8359,8360,8361,8362,8363,8364,8365,8366,8367, -8368,8369,8370,8371,8372,8373,8374,8375,8376,8377,8378,8379,8380,8381,8382,8383, -8384,8385,8386,8387,8388,8389,8390,8391,8392,8393,8394,8395,8396,8397,8398,8399, -8400,8401,8402,8403,8404,8405,8406,8407,8408,8409,8410,8411,8412,8413,8414,8415, -8416,8417,8418,8419,8420,8421,8422,8423,8424,8425,8426,8427,8428,8429,8430,8431, -8432,8433,8434,8435,8436,8437,8438,8439,8440,8441,8442,8443,8444,8445,8446,8447, -8448,8449,8450,8451,8452,8453,8454,8455,8456,8457,8458,8459,8460,8461,8462,8463, -8464,8465,8466,8467,8468,8469,8470,8471,8472,8473,8474,8475,8476,8477,8478,8479, -8480,8481,8482,8483,8484,8485,8486,8487,8488,8489,8490,8491,8492,8493,8494,8495, -8496,8497,8498,8499,8500,8501,8502,8503,8504,8505,8506,8507,8508,8509,8510,8511, -8512,8513,8514,8515,8516,8517,8518,8519,8520,8521,8522,8523,8524,8525,8526,8527, -8528,8529,8530,8531,8532,8533,8534,8535,8536,8537,8538,8539,8540,8541,8542,8543, -8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554,8555,8556,8557,8558,8559, -8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8570,8571,8572,8573,8574,8575, -8576,8577,8578,8579,8580,8581,8582,8583,8584,8585,8586,8587,8588,8589,8590,8591, -8592,8593,8594,8595,8596,8597,8598,8599,8600,8601,8602,8603,8604,8605,8606,8607, -8608,8609,8610,8611,8612,8613,8614,8615,8616,8617,8618,8619,8620,8621,8622,8623, -8624,8625,8626,8627,8628,8629,8630,8631,8632,8633,8634,8635,8636,8637,8638,8639, -8640,8641,8642,8643,8644,8645,8646,8647,8648,8649,8650,8651,8652,8653,8654,8655, -8656,8657,8658,8659,8660,8661,8662,8663,8664,8665,8666,8667,8668,8669,8670,8671, -8672,8673,8674,8675,8676,8677,8678,8679,8680,8681,8682,8683,8684,8685,8686,8687, -8688,8689,8690,8691,8692,8693,8694,8695,8696,8697,8698,8699,8700,8701,8702,8703, -8704,8705,8706,8707,8708,8709,8710,8711,8712,8713,8714,8715,8716,8717,8718,8719, -8720,8721,8722,8723,8724,8725,8726,8727,8728,8729,8730,8731,8732,8733,8734,8735, -8736,8737,8738,8739,8740,8741 -****************************************************************************************/ -}; - diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/EUCTWFreq.tab b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/EUCTWFreq.tab deleted file mode 100644 index 3a189ae..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/EUCTWFreq.tab +++ /dev/null @@ -1,447 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is Mozilla Communicator client code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -// EUCTW frequency table -// Converted from big5 work -// by Taiwan's Mandarin Promotion Council -// <http://www.edu.tw:81/mandr/> - - -/****************************************************************************** - * 128 --> 0.42261 - * 256 --> 0.57851 - * 512 --> 0.74851 - * 1024 --> 0.89384 - * 2048 --> 0.97583 - * - * Idea Distribution Ratio = 0.74851/(1-0.74851) =2.98 - * Random Distribution Ration = 512/(5401-512)=0.105 - * - * Typical Distribution Ratio about 25% of Ideal one, still much higher than RDR - *****************************************************************************/ - -#define EUCTW_TYPICAL_DISTRIBUTION_RATIO (float)0.75 - -//Char to FreqOrder table , -#define EUCTW_TABLE_SIZE 8102 - -static const PRInt16 EUCTWCharToFreqOrder[] = -{ - 1,1800,1506, 255,1431, 198, 9, 82, 6,7310, 177, 202,3615,1256,2808, 110, // 2742 -3735, 33,3241, 261, 76, 44,2113, 16,2931,2184,1176, 659,3868, 26,3404,2643, // 2758 -1198,3869,3313,4060, 410,2211, 302, 590, 361,1963, 8, 204, 58,4296,7311,1931, // 2774 - 63,7312,7313, 317,1614, 75, 222, 159,4061,2412,1480,7314,3500,3068, 224,2809, // 2790 -3616, 3, 10,3870,1471, 29,2774,1135,2852,1939, 873, 130,3242,1123, 312,7315, // 2806 -4297,2051, 507, 252, 682,7316, 142,1914, 124, 206,2932, 34,3501,3173, 64, 604, // 2822 -7317,2494,1976,1977, 155,1990, 645, 641,1606,7318,3405, 337, 72, 406,7319, 80, // 2838 - 630, 238,3174,1509, 263, 939,1092,2644, 756,1440,1094,3406, 449, 69,2969, 591, // 2854 - 179,2095, 471, 115,2034,1843, 60, 50,2970, 134, 806,1868, 734,2035,3407, 180, // 2870 - 995,1607, 156, 537,2893, 688,7320, 319,1305, 779,2144, 514,2374, 298,4298, 359, // 2886 -2495, 90,2707,1338, 663, 11, 906,1099,2545, 20,2436, 182, 532,1716,7321, 732, // 2902 -1376,4062,1311,1420,3175, 25,2312,1056, 113, 399, 382,1949, 242,3408,2467, 529, // 2918 -3243, 475,1447,3617,7322, 117, 21, 656, 810,1297,2295,2329,3502,7323, 126,4063, // 2934 - 706, 456, 150, 613,4299, 71,1118,2036,4064, 145,3069, 85, 835, 486,2114,1246, // 2950 -1426, 428, 727,1285,1015, 800, 106, 623, 303,1281,7324,2127,2354, 347,3736, 221, // 2966 -3503,3110,7325,1955,1153,4065, 83, 296,1199,3070, 192, 624, 93,7326, 822,1897, // 2982 -2810,3111, 795,2064, 991,1554,1542,1592, 27, 43,2853, 859, 139,1456, 860,4300, // 2998 - 437, 712,3871, 164,2392,3112, 695, 211,3017,2096, 195,3872,1608,3504,3505,3618, // 3014 -3873, 234, 811,2971,2097,3874,2229,1441,3506,1615,2375, 668,2076,1638, 305, 228, // 3030 -1664,4301, 467, 415,7327, 262,2098,1593, 239, 108, 300, 200,1033, 512,1247,2077, // 3046 -7328,7329,2173,3176,3619,2673, 593, 845,1062,3244, 88,1723,2037,3875,1950, 212, // 3062 - 266, 152, 149, 468,1898,4066,4302, 77, 187,7330,3018, 37, 5,2972,7331,3876, // 3078 -7332,7333, 39,2517,4303,2894,3177,2078, 55, 148, 74,4304, 545, 483,1474,1029, // 3094 -1665, 217,1869,1531,3113,1104,2645,4067, 24, 172,3507, 900,3877,3508,3509,4305, // 3110 - 32,1408,2811,1312, 329, 487,2355,2247,2708, 784,2674, 4,3019,3314,1427,1788, // 3126 - 188, 109, 499,7334,3620,1717,1789, 888,1217,3020,4306,7335,3510,7336,3315,1520, // 3142 -3621,3878, 196,1034, 775,7337,7338, 929,1815, 249, 439, 38,7339,1063,7340, 794, // 3158 -3879,1435,2296, 46, 178,3245,2065,7341,2376,7342, 214,1709,4307, 804, 35, 707, // 3174 - 324,3622,1601,2546, 140, 459,4068,7343,7344,1365, 839, 272, 978,2257,2572,3409, // 3190 -2128,1363,3623,1423, 697, 100,3071, 48, 70,1231, 495,3114,2193,7345,1294,7346, // 3206 -2079, 462, 586,1042,3246, 853, 256, 988, 185,2377,3410,1698, 434,1084,7347,3411, // 3222 - 314,2615,2775,4308,2330,2331, 569,2280, 637,1816,2518, 757,1162,1878,1616,3412, // 3238 - 287,1577,2115, 768,4309,1671,2854,3511,2519,1321,3737, 909,2413,7348,4069, 933, // 3254 -3738,7349,2052,2356,1222,4310, 765,2414,1322, 786,4311,7350,1919,1462,1677,2895, // 3270 -1699,7351,4312,1424,2437,3115,3624,2590,3316,1774,1940,3413,3880,4070, 309,1369, // 3286 -1130,2812, 364,2230,1653,1299,3881,3512,3882,3883,2646, 525,1085,3021, 902,2000, // 3302 -1475, 964,4313, 421,1844,1415,1057,2281, 940,1364,3116, 376,4314,4315,1381, 7, // 3318 -2520, 983,2378, 336,1710,2675,1845, 321,3414, 559,1131,3022,2742,1808,1132,1313, // 3334 - 265,1481,1857,7352, 352,1203,2813,3247, 167,1089, 420,2814, 776, 792,1724,3513, // 3350 -4071,2438,3248,7353,4072,7354, 446, 229, 333,2743, 901,3739,1200,1557,4316,2647, // 3366 -1920, 395,2744,2676,3740,4073,1835, 125, 916,3178,2616,4317,7355,7356,3741,7357, // 3382 -7358,7359,4318,3117,3625,1133,2547,1757,3415,1510,2313,1409,3514,7360,2145, 438, // 3398 -2591,2896,2379,3317,1068, 958,3023, 461, 311,2855,2677,4074,1915,3179,4075,1978, // 3414 - 383, 750,2745,2617,4076, 274, 539, 385,1278,1442,7361,1154,1964, 384, 561, 210, // 3430 - 98,1295,2548,3515,7362,1711,2415,1482,3416,3884,2897,1257, 129,7363,3742, 642, // 3446 - 523,2776,2777,2648,7364, 141,2231,1333, 68, 176, 441, 876, 907,4077, 603,2592, // 3462 - 710, 171,3417, 404, 549, 18,3118,2393,1410,3626,1666,7365,3516,4319,2898,4320, // 3478 -7366,2973, 368,7367, 146, 366, 99, 871,3627,1543, 748, 807,1586,1185, 22,2258, // 3494 - 379,3743,3180,7368,3181, 505,1941,2618,1991,1382,2314,7369, 380,2357, 218, 702, // 3510 -1817,1248,3418,3024,3517,3318,3249,7370,2974,3628, 930,3250,3744,7371, 59,7372, // 3526 - 585, 601,4078, 497,3419,1112,1314,4321,1801,7373,1223,1472,2174,7374, 749,1836, // 3542 - 690,1899,3745,1772,3885,1476, 429,1043,1790,2232,2116, 917,4079, 447,1086,1629, // 3558 -7375, 556,7376,7377,2020,1654, 844,1090, 105, 550, 966,1758,2815,1008,1782, 686, // 3574 -1095,7378,2282, 793,1602,7379,3518,2593,4322,4080,2933,2297,4323,3746, 980,2496, // 3590 - 544, 353, 527,4324, 908,2678,2899,7380, 381,2619,1942,1348,7381,1341,1252, 560, // 3606 -3072,7382,3420,2856,7383,2053, 973, 886,2080, 143,4325,7384,7385, 157,3886, 496, // 3622 -4081, 57, 840, 540,2038,4326,4327,3421,2117,1445, 970,2259,1748,1965,2081,4082, // 3638 -3119,1234,1775,3251,2816,3629, 773,1206,2129,1066,2039,1326,3887,1738,1725,4083, // 3654 - 279,3120, 51,1544,2594, 423,1578,2130,2066, 173,4328,1879,7386,7387,1583, 264, // 3670 - 610,3630,4329,2439, 280, 154,7388,7389,7390,1739, 338,1282,3073, 693,2857,1411, // 3686 -1074,3747,2440,7391,4330,7392,7393,1240, 952,2394,7394,2900,1538,2679, 685,1483, // 3702 -4084,2468,1436, 953,4085,2054,4331, 671,2395, 79,4086,2441,3252, 608, 567,2680, // 3718 -3422,4087,4088,1691, 393,1261,1791,2396,7395,4332,7396,7397,7398,7399,1383,1672, // 3734 -3748,3182,1464, 522,1119, 661,1150, 216, 675,4333,3888,1432,3519, 609,4334,2681, // 3750 -2397,7400,7401,7402,4089,3025, 0,7403,2469, 315, 231,2442, 301,3319,4335,2380, // 3766 -7404, 233,4090,3631,1818,4336,4337,7405, 96,1776,1315,2082,7406, 257,7407,1809, // 3782 -3632,2709,1139,1819,4091,2021,1124,2163,2778,1777,2649,7408,3074, 363,1655,3183, // 3798 -7409,2975,7410,7411,7412,3889,1567,3890, 718, 103,3184, 849,1443, 341,3320,2934, // 3814 -1484,7413,1712, 127, 67, 339,4092,2398, 679,1412, 821,7414,7415, 834, 738, 351, // 3830 -2976,2146, 846, 235,1497,1880, 418,1992,3749,2710, 186,1100,2147,2746,3520,1545, // 3846 -1355,2935,2858,1377, 583,3891,4093,2573,2977,7416,1298,3633,1078,2549,3634,2358, // 3862 - 78,3750,3751, 267,1289,2099,2001,1594,4094, 348, 369,1274,2194,2175,1837,4338, // 3878 -1820,2817,3635,2747,2283,2002,4339,2936,2748, 144,3321, 882,4340,3892,2749,3423, // 3894 -4341,2901,7417,4095,1726, 320,7418,3893,3026, 788,2978,7419,2818,1773,1327,2859, // 3910 -3894,2819,7420,1306,4342,2003,1700,3752,3521,2359,2650, 787,2022, 506, 824,3636, // 3926 - 534, 323,4343,1044,3322,2023,1900, 946,3424,7421,1778,1500,1678,7422,1881,4344, // 3942 - 165, 243,4345,3637,2521, 123, 683,4096, 764,4346, 36,3895,1792, 589,2902, 816, // 3958 - 626,1667,3027,2233,1639,1555,1622,3753,3896,7423,3897,2860,1370,1228,1932, 891, // 3974 -2083,2903, 304,4097,7424, 292,2979,2711,3522, 691,2100,4098,1115,4347, 118, 662, // 3990 -7425, 611,1156, 854,2381,1316,2861, 2, 386, 515,2904,7426,7427,3253, 868,2234, // 4006 -1486, 855,2651, 785,2212,3028,7428,1040,3185,3523,7429,3121, 448,7430,1525,7431, // 4022 -2164,4348,7432,3754,7433,4099,2820,3524,3122, 503, 818,3898,3123,1568, 814, 676, // 4038 -1444, 306,1749,7434,3755,1416,1030, 197,1428, 805,2821,1501,4349,7435,7436,7437, // 4054 -1993,7438,4350,7439,7440,2195, 13,2779,3638,2980,3124,1229,1916,7441,3756,2131, // 4070 -7442,4100,4351,2399,3525,7443,2213,1511,1727,1120,7444,7445, 646,3757,2443, 307, // 4086 -7446,7447,1595,3186,7448,7449,7450,3639,1113,1356,3899,1465,2522,2523,7451, 519, // 4102 -7452, 128,2132, 92,2284,1979,7453,3900,1512, 342,3125,2196,7454,2780,2214,1980, // 4118 -3323,7455, 290,1656,1317, 789, 827,2360,7456,3758,4352, 562, 581,3901,7457, 401, // 4134 -4353,2248, 94,4354,1399,2781,7458,1463,2024,4355,3187,1943,7459, 828,1105,4101, // 4150 -1262,1394,7460,4102, 605,4356,7461,1783,2862,7462,2822, 819,2101, 578,2197,2937, // 4166 -7463,1502, 436,3254,4103,3255,2823,3902,2905,3425,3426,7464,2712,2315,7465,7466, // 4182 -2332,2067, 23,4357, 193, 826,3759,2102, 699,1630,4104,3075, 390,1793,1064,3526, // 4198 -7467,1579,3076,3077,1400,7468,4105,1838,1640,2863,7469,4358,4359, 137,4106, 598, // 4214 -3078,1966, 780, 104, 974,2938,7470, 278, 899, 253, 402, 572, 504, 493,1339,7471, // 4230 -3903,1275,4360,2574,2550,7472,3640,3029,3079,2249, 565,1334,2713, 863, 41,7473, // 4246 -7474,4361,7475,1657,2333, 19, 463,2750,4107, 606,7476,2981,3256,1087,2084,1323, // 4262 -2652,2982,7477,1631,1623,1750,4108,2682,7478,2864, 791,2714,2653,2334, 232,2416, // 4278 -7479,2983,1498,7480,2654,2620, 755,1366,3641,3257,3126,2025,1609, 119,1917,3427, // 4294 - 862,1026,4109,7481,3904,3760,4362,3905,4363,2260,1951,2470,7482,1125, 817,4110, // 4310 -4111,3906,1513,1766,2040,1487,4112,3030,3258,2824,3761,3127,7483,7484,1507,7485, // 4326 -2683, 733, 40,1632,1106,2865, 345,4113, 841,2524, 230,4364,2984,1846,3259,3428, // 4342 -7486,1263, 986,3429,7487, 735, 879, 254,1137, 857, 622,1300,1180,1388,1562,3907, // 4358 -3908,2939, 967,2751,2655,1349, 592,2133,1692,3324,2985,1994,4114,1679,3909,1901, // 4374 -2185,7488, 739,3642,2715,1296,1290,7489,4115,2198,2199,1921,1563,2595,2551,1870, // 4390 -2752,2986,7490, 435,7491, 343,1108, 596, 17,1751,4365,2235,3430,3643,7492,4366, // 4406 - 294,3527,2940,1693, 477, 979, 281,2041,3528, 643,2042,3644,2621,2782,2261,1031, // 4422 -2335,2134,2298,3529,4367, 367,1249,2552,7493,3530,7494,4368,1283,3325,2004, 240, // 4438 -1762,3326,4369,4370, 836,1069,3128, 474,7495,2148,2525, 268,3531,7496,3188,1521, // 4454 -1284,7497,1658,1546,4116,7498,3532,3533,7499,4117,3327,2684,1685,4118, 961,1673, // 4470 -2622, 190,2005,2200,3762,4371,4372,7500, 570,2497,3645,1490,7501,4373,2623,3260, // 4486 -1956,4374, 584,1514, 396,1045,1944,7502,4375,1967,2444,7503,7504,4376,3910, 619, // 4502 -7505,3129,3261, 215,2006,2783,2553,3189,4377,3190,4378, 763,4119,3763,4379,7506, // 4518 -7507,1957,1767,2941,3328,3646,1174, 452,1477,4380,3329,3130,7508,2825,1253,2382, // 4534 -2186,1091,2285,4120, 492,7509, 638,1169,1824,2135,1752,3911, 648, 926,1021,1324, // 4550 -4381, 520,4382, 997, 847,1007, 892,4383,3764,2262,1871,3647,7510,2400,1784,4384, // 4566 -1952,2942,3080,3191,1728,4121,2043,3648,4385,2007,1701,3131,1551, 30,2263,4122, // 4582 -7511,2026,4386,3534,7512, 501,7513,4123, 594,3431,2165,1821,3535,3432,3536,3192, // 4598 - 829,2826,4124,7514,1680,3132,1225,4125,7515,3262,4387,4126,3133,2336,7516,4388, // 4614 -4127,7517,3912,3913,7518,1847,2383,2596,3330,7519,4389, 374,3914, 652,4128,4129, // 4630 - 375,1140, 798,7520,7521,7522,2361,4390,2264, 546,1659, 138,3031,2445,4391,7523, // 4646 -2250, 612,1848, 910, 796,3765,1740,1371, 825,3766,3767,7524,2906,2554,7525, 692, // 4662 - 444,3032,2624, 801,4392,4130,7526,1491, 244,1053,3033,4131,4132, 340,7527,3915, // 4678 -1041,2987, 293,1168, 87,1357,7528,1539, 959,7529,2236, 721, 694,4133,3768, 219, // 4694 -1478, 644,1417,3331,2656,1413,1401,1335,1389,3916,7530,7531,2988,2362,3134,1825, // 4710 - 730,1515, 184,2827, 66,4393,7532,1660,2943, 246,3332, 378,1457, 226,3433, 975, // 4726 -3917,2944,1264,3537, 674, 696,7533, 163,7534,1141,2417,2166, 713,3538,3333,4394, // 4742 -3918,7535,7536,1186, 15,7537,1079,1070,7538,1522,3193,3539, 276,1050,2716, 758, // 4758 -1126, 653,2945,3263,7539,2337, 889,3540,3919,3081,2989, 903,1250,4395,3920,3434, // 4774 -3541,1342,1681,1718, 766,3264, 286, 89,2946,3649,7540,1713,7541,2597,3334,2990, // 4790 -7542,2947,2215,3194,2866,7543,4396,2498,2526, 181, 387,1075,3921, 731,2187,3335, // 4806 -7544,3265, 310, 313,3435,2299, 770,4134, 54,3034, 189,4397,3082,3769,3922,7545, // 4822 -1230,1617,1849, 355,3542,4135,4398,3336, 111,4136,3650,1350,3135,3436,3035,4137, // 4838 -2149,3266,3543,7546,2784,3923,3924,2991, 722,2008,7547,1071, 247,1207,2338,2471, // 4854 -1378,4399,2009, 864,1437,1214,4400, 373,3770,1142,2216, 667,4401, 442,2753,2555, // 4870 -3771,3925,1968,4138,3267,1839, 837, 170,1107, 934,1336,1882,7548,7549,2118,4139, // 4886 -2828, 743,1569,7550,4402,4140, 582,2384,1418,3437,7551,1802,7552, 357,1395,1729, // 4902 -3651,3268,2418,1564,2237,7553,3083,3772,1633,4403,1114,2085,4141,1532,7554, 482, // 4918 -2446,4404,7555,7556,1492, 833,1466,7557,2717,3544,1641,2829,7558,1526,1272,3652, // 4934 -4142,1686,1794, 416,2556,1902,1953,1803,7559,3773,2785,3774,1159,2316,7560,2867, // 4950 -4405,1610,1584,3036,2419,2754, 443,3269,1163,3136,7561,7562,3926,7563,4143,2499, // 4966 -3037,4406,3927,3137,2103,1647,3545,2010,1872,4144,7564,4145, 431,3438,7565, 250, // 4982 - 97, 81,4146,7566,1648,1850,1558, 160, 848,7567, 866, 740,1694,7568,2201,2830, // 4998 -3195,4147,4407,3653,1687, 950,2472, 426, 469,3196,3654,3655,3928,7569,7570,1188, // 5014 - 424,1995, 861,3546,4148,3775,2202,2685, 168,1235,3547,4149,7571,2086,1674,4408, // 5030 -3337,3270, 220,2557,1009,7572,3776, 670,2992, 332,1208, 717,7573,7574,3548,2447, // 5046 -3929,3338,7575, 513,7576,1209,2868,3339,3138,4409,1080,7577,7578,7579,7580,2527, // 5062 -3656,3549, 815,1587,3930,3931,7581,3550,3439,3777,1254,4410,1328,3038,1390,3932, // 5078 -1741,3933,3778,3934,7582, 236,3779,2448,3271,7583,7584,3657,3780,1273,3781,4411, // 5094 -7585, 308,7586,4412, 245,4413,1851,2473,1307,2575, 430, 715,2136,2449,7587, 270, // 5110 - 199,2869,3935,7588,3551,2718,1753, 761,1754, 725,1661,1840,4414,3440,3658,7589, // 5126 -7590, 587, 14,3272, 227,2598, 326, 480,2265, 943,2755,3552, 291, 650,1883,7591, // 5142 -1702,1226, 102,1547, 62,3441, 904,4415,3442,1164,4150,7592,7593,1224,1548,2756, // 5158 - 391, 498,1493,7594,1386,1419,7595,2055,1177,4416, 813, 880,1081,2363, 566,1145, // 5174 -4417,2286,1001,1035,2558,2599,2238, 394,1286,7596,7597,2068,7598, 86,1494,1730, // 5190 -3936, 491,1588, 745, 897,2948, 843,3340,3937,2757,2870,3273,1768, 998,2217,2069, // 5206 - 397,1826,1195,1969,3659,2993,3341, 284,7599,3782,2500,2137,2119,1903,7600,3938, // 5222 -2150,3939,4151,1036,3443,1904, 114,2559,4152, 209,1527,7601,7602,2949,2831,2625, // 5238 -2385,2719,3139, 812,2560,7603,3274,7604,1559, 737,1884,3660,1210, 885, 28,2686, // 5254 -3553,3783,7605,4153,1004,1779,4418,7606, 346,1981,2218,2687,4419,3784,1742, 797, // 5270 -1642,3940,1933,1072,1384,2151, 896,3941,3275,3661,3197,2871,3554,7607,2561,1958, // 5286 -4420,2450,1785,7608,7609,7610,3942,4154,1005,1308,3662,4155,2720,4421,4422,1528, // 5302 -2600, 161,1178,4156,1982, 987,4423,1101,4157, 631,3943,1157,3198,2420,1343,1241, // 5318 -1016,2239,2562, 372, 877,2339,2501,1160, 555,1934, 911,3944,7611, 466,1170, 169, // 5334 -1051,2907,2688,3663,2474,2994,1182,2011,2563,1251,2626,7612, 992,2340,3444,1540, // 5350 -2721,1201,2070,2401,1996,2475,7613,4424, 528,1922,2188,1503,1873,1570,2364,3342, // 5366 -3276,7614, 557,1073,7615,1827,3445,2087,2266,3140,3039,3084, 767,3085,2786,4425, // 5382 -1006,4158,4426,2341,1267,2176,3664,3199, 778,3945,3200,2722,1597,2657,7616,4427, // 5398 -7617,3446,7618,7619,7620,3277,2689,1433,3278, 131, 95,1504,3946, 723,4159,3141, // 5414 -1841,3555,2758,2189,3947,2027,2104,3665,7621,2995,3948,1218,7622,3343,3201,3949, // 5430 -4160,2576, 248,1634,3785, 912,7623,2832,3666,3040,3786, 654, 53,7624,2996,7625, // 5446 -1688,4428, 777,3447,1032,3950,1425,7626, 191, 820,2120,2833, 971,4429, 931,3202, // 5462 - 135, 664, 783,3787,1997, 772,2908,1935,3951,3788,4430,2909,3203, 282,2723, 640, // 5478 -1372,3448,1127, 922, 325,3344,7627,7628, 711,2044,7629,7630,3952,2219,2787,1936, // 5494 -3953,3345,2220,2251,3789,2300,7631,4431,3790,1258,3279,3954,3204,2138,2950,3955, // 5510 -3956,7632,2221, 258,3205,4432, 101,1227,7633,3280,1755,7634,1391,3281,7635,2910, // 5526 -2056, 893,7636,7637,7638,1402,4161,2342,7639,7640,3206,3556,7641,7642, 878,1325, // 5542 -1780,2788,4433, 259,1385,2577, 744,1183,2267,4434,7643,3957,2502,7644, 684,1024, // 5558 -4162,7645, 472,3557,3449,1165,3282,3958,3959, 322,2152, 881, 455,1695,1152,1340, // 5574 - 660, 554,2153,4435,1058,4436,4163, 830,1065,3346,3960,4437,1923,7646,1703,1918, // 5590 -7647, 932,2268, 122,7648,4438, 947, 677,7649,3791,2627, 297,1905,1924,2269,4439, // 5606 -2317,3283,7650,7651,4164,7652,4165, 84,4166, 112, 989,7653, 547,1059,3961, 701, // 5622 -3558,1019,7654,4167,7655,3450, 942, 639, 457,2301,2451, 993,2951, 407, 851, 494, // 5638 -4440,3347, 927,7656,1237,7657,2421,3348, 573,4168, 680, 921,2911,1279,1874, 285, // 5654 - 790,1448,1983, 719,2167,7658,7659,4441,3962,3963,1649,7660,1541, 563,7661,1077, // 5670 -7662,3349,3041,3451, 511,2997,3964,3965,3667,3966,1268,2564,3350,3207,4442,4443, // 5686 -7663, 535,1048,1276,1189,2912,2028,3142,1438,1373,2834,2952,1134,2012,7664,4169, // 5702 -1238,2578,3086,1259,7665, 700,7666,2953,3143,3668,4170,7667,4171,1146,1875,1906, // 5718 -4444,2601,3967, 781,2422, 132,1589, 203, 147, 273,2789,2402, 898,1786,2154,3968, // 5734 -3969,7668,3792,2790,7669,7670,4445,4446,7671,3208,7672,1635,3793, 965,7673,1804, // 5750 -2690,1516,3559,1121,1082,1329,3284,3970,1449,3794, 65,1128,2835,2913,2759,1590, // 5766 -3795,7674,7675, 12,2658, 45, 976,2579,3144,4447, 517,2528,1013,1037,3209,7676, // 5782 -3796,2836,7677,3797,7678,3452,7679,2602, 614,1998,2318,3798,3087,2724,2628,7680, // 5798 -2580,4172, 599,1269,7681,1810,3669,7682,2691,3088, 759,1060, 489,1805,3351,3285, // 5814 -1358,7683,7684,2386,1387,1215,2629,2252, 490,7685,7686,4173,1759,2387,2343,7687, // 5830 -4448,3799,1907,3971,2630,1806,3210,4449,3453,3286,2760,2344, 874,7688,7689,3454, // 5846 -3670,1858, 91,2914,3671,3042,3800,4450,7690,3145,3972,2659,7691,3455,1202,1403, // 5862 -3801,2954,2529,1517,2503,4451,3456,2504,7692,4452,7693,2692,1885,1495,1731,3973, // 5878 -2365,4453,7694,2029,7695,7696,3974,2693,1216, 237,2581,4174,2319,3975,3802,4454, // 5894 -4455,2694,3560,3457, 445,4456,7697,7698,7699,7700,2761, 61,3976,3672,1822,3977, // 5910 -7701, 687,2045, 935, 925, 405,2660, 703,1096,1859,2725,4457,3978,1876,1367,2695, // 5926 -3352, 918,2105,1781,2476, 334,3287,1611,1093,4458, 564,3146,3458,3673,3353, 945, // 5942 -2631,2057,4459,7702,1925, 872,4175,7703,3459,2696,3089, 349,4176,3674,3979,4460, // 5958 -3803,4177,3675,2155,3980,4461,4462,4178,4463,2403,2046, 782,3981, 400, 251,4179, // 5974 -1624,7704,7705, 277,3676, 299,1265, 476,1191,3804,2121,4180,4181,1109, 205,7706, // 5990 -2582,1000,2156,3561,1860,7707,7708,7709,4464,7710,4465,2565, 107,2477,2157,3982, // 6006 -3460,3147,7711,1533, 541,1301, 158, 753,4182,2872,3562,7712,1696, 370,1088,4183, // 6022 -4466,3563, 579, 327, 440, 162,2240, 269,1937,1374,3461, 968,3043, 56,1396,3090, // 6038 -2106,3288,3354,7713,1926,2158,4467,2998,7714,3564,7715,7716,3677,4468,2478,7717, // 6054 -2791,7718,1650,4469,7719,2603,7720,7721,3983,2661,3355,1149,3356,3984,3805,3985, // 6070 -7722,1076, 49,7723, 951,3211,3289,3290, 450,2837, 920,7724,1811,2792,2366,4184, // 6086 -1908,1138,2367,3806,3462,7725,3212,4470,1909,1147,1518,2423,4471,3807,7726,4472, // 6102 -2388,2604, 260,1795,3213,7727,7728,3808,3291, 708,7729,3565,1704,7730,3566,1351, // 6118 -1618,3357,2999,1886, 944,4185,3358,4186,3044,3359,4187,7731,3678, 422, 413,1714, // 6134 -3292, 500,2058,2345,4188,2479,7732,1344,1910, 954,7733,1668,7734,7735,3986,2404, // 6150 -4189,3567,3809,4190,7736,2302,1318,2505,3091, 133,3092,2873,4473, 629, 31,2838, // 6166 -2697,3810,4474, 850, 949,4475,3987,2955,1732,2088,4191,1496,1852,7737,3988, 620, // 6182 -3214, 981,1242,3679,3360,1619,3680,1643,3293,2139,2452,1970,1719,3463,2168,7738, // 6198 -3215,7739,7740,3361,1828,7741,1277,4476,1565,2047,7742,1636,3568,3093,7743, 869, // 6214 -2839, 655,3811,3812,3094,3989,3000,3813,1310,3569,4477,7744,7745,7746,1733, 558, // 6230 -4478,3681, 335,1549,3045,1756,4192,3682,1945,3464,1829,1291,1192, 470,2726,2107, // 6246 -2793, 913,1054,3990,7747,1027,7748,3046,3991,4479, 982,2662,3362,3148,3465,3216, // 6262 -3217,1946,2794,7749, 571,4480,7750,1830,7751,3570,2583,1523,2424,7752,2089, 984, // 6278 -4481,3683,1959,7753,3684, 852, 923,2795,3466,3685, 969,1519, 999,2048,2320,1705, // 6294 -7754,3095, 615,1662, 151, 597,3992,2405,2321,1049, 275,4482,3686,4193, 568,3687, // 6310 -3571,2480,4194,3688,7755,2425,2270, 409,3218,7756,1566,2874,3467,1002, 769,2840, // 6326 - 194,2090,3149,3689,2222,3294,4195, 628,1505,7757,7758,1763,2177,3001,3993, 521, // 6342 -1161,2584,1787,2203,2406,4483,3994,1625,4196,4197, 412, 42,3096, 464,7759,2632, // 6358 -4484,3363,1760,1571,2875,3468,2530,1219,2204,3814,2633,2140,2368,4485,4486,3295, // 6374 -1651,3364,3572,7760,7761,3573,2481,3469,7762,3690,7763,7764,2271,2091, 460,7765, // 6390 -4487,7766,3002, 962, 588,3574, 289,3219,2634,1116, 52,7767,3047,1796,7768,7769, // 6406 -7770,1467,7771,1598,1143,3691,4198,1984,1734,1067,4488,1280,3365, 465,4489,1572, // 6422 - 510,7772,1927,2241,1812,1644,3575,7773,4490,3692,7774,7775,2663,1573,1534,7776, // 6438 -7777,4199, 536,1807,1761,3470,3815,3150,2635,7778,7779,7780,4491,3471,2915,1911, // 6454 -2796,7781,3296,1122, 377,3220,7782, 360,7783,7784,4200,1529, 551,7785,2059,3693, // 6470 -1769,2426,7786,2916,4201,3297,3097,2322,2108,2030,4492,1404, 136,1468,1479, 672, // 6486 -1171,3221,2303, 271,3151,7787,2762,7788,2049, 678,2727, 865,1947,4493,7789,2013, // 6502 -3995,2956,7790,2728,2223,1397,3048,3694,4494,4495,1735,2917,3366,3576,7791,3816, // 6518 - 509,2841,2453,2876,3817,7792,7793,3152,3153,4496,4202,2531,4497,2304,1166,1010, // 6534 - 552, 681,1887,7794,7795,2957,2958,3996,1287,1596,1861,3154, 358, 453, 736, 175, // 6550 - 478,1117, 905,1167,1097,7796,1853,1530,7797,1706,7798,2178,3472,2287,3695,3473, // 6566 -3577,4203,2092,4204,7799,3367,1193,2482,4205,1458,2190,2205,1862,1888,1421,3298, // 6582 -2918,3049,2179,3474, 595,2122,7800,3997,7801,7802,4206,1707,2636, 223,3696,1359, // 6598 - 751,3098, 183,3475,7803,2797,3003, 419,2369, 633, 704,3818,2389, 241,7804,7805, // 6614 -7806, 838,3004,3697,2272,2763,2454,3819,1938,2050,3998,1309,3099,2242,1181,7807, // 6630 -1136,2206,3820,2370,1446,4207,2305,4498,7808,7809,4208,1055,2605, 484,3698,7810, // 6646 -3999, 625,4209,2273,3368,1499,4210,4000,7811,4001,4211,3222,2274,2275,3476,7812, // 6662 -7813,2764, 808,2606,3699,3369,4002,4212,3100,2532, 526,3370,3821,4213, 955,7814, // 6678 -1620,4214,2637,2427,7815,1429,3700,1669,1831, 994, 928,7816,3578,1260,7817,7818, // 6694 -7819,1948,2288, 741,2919,1626,4215,2729,2455, 867,1184, 362,3371,1392,7820,7821, // 6710 -4003,4216,1770,1736,3223,2920,4499,4500,1928,2698,1459,1158,7822,3050,3372,2877, // 6726 -1292,1929,2506,2842,3701,1985,1187,2071,2014,2607,4217,7823,2566,2507,2169,3702, // 6742 -2483,3299,7824,3703,4501,7825,7826, 666,1003,3005,1022,3579,4218,7827,4502,1813, // 6758 -2253, 574,3822,1603, 295,1535, 705,3823,4219, 283, 858, 417,7828,7829,3224,4503, // 6774 -4504,3051,1220,1889,1046,2276,2456,4004,1393,1599, 689,2567, 388,4220,7830,2484, // 6790 - 802,7831,2798,3824,2060,1405,2254,7832,4505,3825,2109,1052,1345,3225,1585,7833, // 6806 - 809,7834,7835,7836, 575,2730,3477, 956,1552,1469,1144,2323,7837,2324,1560,2457, // 6822 -3580,3226,4005, 616,2207,3155,2180,2289,7838,1832,7839,3478,4506,7840,1319,3704, // 6838 -3705,1211,3581,1023,3227,1293,2799,7841,7842,7843,3826, 607,2306,3827, 762,2878, // 6854 -1439,4221,1360,7844,1485,3052,7845,4507,1038,4222,1450,2061,2638,4223,1379,4508, // 6870 -2585,7846,7847,4224,1352,1414,2325,2921,1172,7848,7849,3828,3829,7850,1797,1451, // 6886 -7851,7852,7853,7854,2922,4006,4007,2485,2346, 411,4008,4009,3582,3300,3101,4509, // 6902 -1561,2664,1452,4010,1375,7855,7856, 47,2959, 316,7857,1406,1591,2923,3156,7858, // 6918 -1025,2141,3102,3157, 354,2731, 884,2224,4225,2407, 508,3706, 726,3583, 996,2428, // 6934 -3584, 729,7859, 392,2191,1453,4011,4510,3707,7860,7861,2458,3585,2608,1675,2800, // 6950 - 919,2347,2960,2348,1270,4511,4012, 73,7862,7863, 647,7864,3228,2843,2255,1550, // 6966 -1346,3006,7865,1332, 883,3479,7866,7867,7868,7869,3301,2765,7870,1212, 831,1347, // 6982 -4226,4512,2326,3830,1863,3053, 720,3831,4513,4514,3832,7871,4227,7872,7873,4515, // 6998 -7874,7875,1798,4516,3708,2609,4517,3586,1645,2371,7876,7877,2924, 669,2208,2665, // 7014 -2429,7878,2879,7879,7880,1028,3229,7881,4228,2408,7882,2256,1353,7883,7884,4518, // 7030 -3158, 518,7885,4013,7886,4229,1960,7887,2142,4230,7888,7889,3007,2349,2350,3833, // 7046 - 516,1833,1454,4014,2699,4231,4519,2225,2610,1971,1129,3587,7890,2766,7891,2961, // 7062 -1422, 577,1470,3008,1524,3373,7892,7893, 432,4232,3054,3480,7894,2586,1455,2508, // 7078 -2226,1972,1175,7895,1020,2732,4015,3481,4520,7896,2733,7897,1743,1361,3055,3482, // 7094 -2639,4016,4233,4521,2290, 895, 924,4234,2170, 331,2243,3056, 166,1627,3057,1098, // 7110 -7898,1232,2880,2227,3374,4522, 657, 403,1196,2372, 542,3709,3375,1600,4235,3483, // 7126 -7899,4523,2767,3230, 576, 530,1362,7900,4524,2533,2666,3710,4017,7901, 842,3834, // 7142 -7902,2801,2031,1014,4018, 213,2700,3376, 665, 621,4236,7903,3711,2925,2430,7904, // 7158 -2431,3302,3588,3377,7905,4237,2534,4238,4525,3589,1682,4239,3484,1380,7906, 724, // 7174 -2277, 600,1670,7907,1337,1233,4526,3103,2244,7908,1621,4527,7909, 651,4240,7910, // 7190 -1612,4241,2611,7911,2844,7912,2734,2307,3058,7913, 716,2459,3059, 174,1255,2701, // 7206 -4019,3590, 548,1320,1398, 728,4020,1574,7914,1890,1197,3060,4021,7915,3061,3062, // 7222 -3712,3591,3713, 747,7916, 635,4242,4528,7917,7918,7919,4243,7920,7921,4529,7922, // 7238 -3378,4530,2432, 451,7923,3714,2535,2072,4244,2735,4245,4022,7924,1764,4531,7925, // 7254 -4246, 350,7926,2278,2390,2486,7927,4247,4023,2245,1434,4024, 488,4532, 458,4248, // 7270 -4025,3715, 771,1330,2391,3835,2568,3159,2159,2409,1553,2667,3160,4249,7928,2487, // 7286 -2881,2612,1720,2702,4250,3379,4533,7929,2536,4251,7930,3231,4252,2768,7931,2015, // 7302 -2736,7932,1155,1017,3716,3836,7933,3303,2308, 201,1864,4253,1430,7934,4026,7935, // 7318 -7936,7937,7938,7939,4254,1604,7940, 414,1865, 371,2587,4534,4535,3485,2016,3104, // 7334 -4536,1708, 960,4255, 887, 389,2171,1536,1663,1721,7941,2228,4027,2351,2926,1580, // 7350 -7942,7943,7944,1744,7945,2537,4537,4538,7946,4539,7947,2073,7948,7949,3592,3380, // 7366 -2882,4256,7950,4257,2640,3381,2802, 673,2703,2460, 709,3486,4028,3593,4258,7951, // 7382 -1148, 502, 634,7952,7953,1204,4540,3594,1575,4541,2613,3717,7954,3718,3105, 948, // 7398 -3232, 121,1745,3837,1110,7955,4259,3063,2509,3009,4029,3719,1151,1771,3838,1488, // 7414 -4030,1986,7956,2433,3487,7957,7958,2093,7959,4260,3839,1213,1407,2803, 531,2737, // 7430 -2538,3233,1011,1537,7960,2769,4261,3106,1061,7961,3720,3721,1866,2883,7962,2017, // 7446 - 120,4262,4263,2062,3595,3234,2309,3840,2668,3382,1954,4542,7963,7964,3488,1047, // 7462 -2704,1266,7965,1368,4543,2845, 649,3383,3841,2539,2738,1102,2846,2669,7966,7967, // 7478 -1999,7968,1111,3596,2962,7969,2488,3842,3597,2804,1854,3384,3722,7970,7971,3385, // 7494 -2410,2884,3304,3235,3598,7972,2569,7973,3599,2805,4031,1460, 856,7974,3600,7975, // 7510 -2885,2963,7976,2886,3843,7977,4264, 632,2510, 875,3844,1697,3845,2291,7978,7979, // 7526 -4544,3010,1239, 580,4545,4265,7980, 914, 936,2074,1190,4032,1039,2123,7981,7982, // 7542 -7983,3386,1473,7984,1354,4266,3846,7985,2172,3064,4033, 915,3305,4267,4268,3306, // 7558 -1605,1834,7986,2739, 398,3601,4269,3847,4034, 328,1912,2847,4035,3848,1331,4270, // 7574 -3011, 937,4271,7987,3602,4036,4037,3387,2160,4546,3388, 524, 742, 538,3065,1012, // 7590 -7988,7989,3849,2461,7990, 658,1103, 225,3850,7991,7992,4547,7993,4548,7994,3236, // 7606 -1243,7995,4038, 963,2246,4549,7996,2705,3603,3161,7997,7998,2588,2327,7999,4550, // 7622 -8000,8001,8002,3489,3307, 957,3389,2540,2032,1930,2927,2462, 870,2018,3604,1746, // 7638 -2770,2771,2434,2463,8003,3851,8004,3723,3107,3724,3490,3390,3725,8005,1179,3066, // 7654 -8006,3162,2373,4272,3726,2541,3163,3108,2740,4039,8007,3391,1556,2542,2292, 977, // 7670 -2887,2033,4040,1205,3392,8008,1765,3393,3164,2124,1271,1689, 714,4551,3491,8009, // 7686 -2328,3852, 533,4273,3605,2181, 617,8010,2464,3308,3492,2310,8011,8012,3165,8013, // 7702 -8014,3853,1987, 618, 427,2641,3493,3394,8015,8016,1244,1690,8017,2806,4274,4552, // 7718 -8018,3494,8019,8020,2279,1576, 473,3606,4275,3395, 972,8021,3607,8022,3067,8023, // 7734 -8024,4553,4554,8025,3727,4041,4042,8026, 153,4555, 356,8027,1891,2888,4276,2143, // 7750 - 408, 803,2352,8028,3854,8029,4277,1646,2570,2511,4556,4557,3855,8030,3856,4278, // 7766 -8031,2411,3396, 752,8032,8033,1961,2964,8034, 746,3012,2465,8035,4279,3728, 698, // 7782 -4558,1892,4280,3608,2543,4559,3609,3857,8036,3166,3397,8037,1823,1302,4043,2706, // 7798 -3858,1973,4281,8038,4282,3167, 823,1303,1288,1236,2848,3495,4044,3398, 774,3859, // 7814 -8039,1581,4560,1304,2849,3860,4561,8040,2435,2161,1083,3237,4283,4045,4284, 344, // 7830 -1173, 288,2311, 454,1683,8041,8042,1461,4562,4046,2589,8043,8044,4563, 985, 894, // 7846 -8045,3399,3168,8046,1913,2928,3729,1988,8047,2110,1974,8048,4047,8049,2571,1194, // 7862 - 425,8050,4564,3169,1245,3730,4285,8051,8052,2850,8053, 636,4565,1855,3861, 760, // 7878 -1799,8054,4286,2209,1508,4566,4048,1893,1684,2293,8055,8056,8057,4287,4288,2210, // 7894 - 479,8058,8059, 832,8060,4049,2489,8061,2965,2490,3731, 990,3109, 627,1814,2642, // 7910 -4289,1582,4290,2125,2111,3496,4567,8062, 799,4291,3170,8063,4568,2112,1737,3013, // 7926 -1018, 543, 754,4292,3309,1676,4569,4570,4050,8064,1489,8065,3497,8066,2614,2889, // 7942 -4051,8067,8068,2966,8069,8070,8071,8072,3171,4571,4572,2182,1722,8073,3238,3239, // 7958 -1842,3610,1715, 481, 365,1975,1856,8074,8075,1962,2491,4573,8076,2126,3611,3240, // 7974 - 433,1894,2063,2075,8077, 602,2741,8078,8079,8080,8081,8082,3014,1628,3400,8083, // 7990 -3172,4574,4052,2890,4575,2512,8084,2544,2772,8085,8086,8087,3310,4576,2891,8088, // 8006 -4577,8089,2851,4578,4579,1221,2967,4053,2513,8090,8091,8092,1867,1989,8093,8094, // 8022 -8095,1895,8096,8097,4580,1896,4054, 318,8098,2094,4055,4293,8099,8100, 485,8101, // 8038 - 938,3862, 553,2670, 116,8102,3863,3612,8103,3498,2671,2773,3401,3311,2807,8104, // 8054 -3613,2929,4056,1747,2930,2968,8105,8106, 207,8107,8108,2672,4581,2514,8109,3015, // 8070 - 890,3614,3864,8110,1877,3732,3402,8111,2183,2353,3403,1652,8112,8113,8114, 941, // 8086 -2294, 208,3499,4057,2019, 330,4294,3865,2892,2492,3733,4295,8115,8116,8117,8118, // 8102 - -/*************************************************************************************** - *Everything below is of no interest for detection purpose * - *************************************************************************************** - -2515,1613,4582,8119,3312,3866,2516,8120,4058,8121,1637,4059,2466,4583,3867,8122, // 8118 -2493,3016,3734,8123,8124,2192,8125,8126,2162,8127,8128,8129,8130,8131,8132,8133, // 8134 -8134,8135,8136,8137,8138,8139,8140,8141,8142,8143,8144,8145,8146,8147,8148,8149, // 8150 -8150,8151,8152,8153,8154,8155,8156,8157,8158,8159,8160,8161,8162,8163,8164,8165, // 8166 -8166,8167,8168,8169,8170,8171,8172,8173,8174,8175,8176,8177,8178,8179,8180,8181, // 8182 -8182,8183,8184,8185,8186,8187,8188,8189,8190,8191,8192,8193,8194,8195,8196,8197, // 8198 -8198,8199,8200,8201,8202,8203,8204,8205,8206,8207,8208,8209,8210,8211,8212,8213, // 8214 -8214,8215,8216,8217,8218,8219,8220,8221,8222,8223,8224,8225,8226,8227,8228,8229, // 8230 -8230,8231,8232,8233,8234,8235,8236,8237,8238,8239,8240,8241,8242,8243,8244,8245, // 8246 -8246,8247,8248,8249,8250,8251,8252,8253,8254,8255,8256,8257,8258,8259,8260,8261, // 8262 -8262,8263,8264,8265,8266,8267,8268,8269,8270,8271,8272,8273,8274,8275,8276,8277, // 8278 -8278,8279,8280,8281,8282,8283,8284,8285,8286,8287,8288,8289,8290,8291,8292,8293, // 8294 -8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,8304,8305,8306,8307,8308,8309, // 8310 -8310,8311,8312,8313,8314,8315,8316,8317,8318,8319,8320,8321,8322,8323,8324,8325, // 8326 -8326,8327,8328,8329,8330,8331,8332,8333,8334,8335,8336,8337,8338,8339,8340,8341, // 8342 -8342,8343,8344,8345,8346,8347,8348,8349,8350,8351,8352,8353,8354,8355,8356,8357, // 8358 -8358,8359,8360,8361,8362,8363,8364,8365,8366,8367,8368,8369,8370,8371,8372,8373, // 8374 -8374,8375,8376,8377,8378,8379,8380,8381,8382,8383,8384,8385,8386,8387,8388,8389, // 8390 -8390,8391,8392,8393,8394,8395,8396,8397,8398,8399,8400,8401,8402,8403,8404,8405, // 8406 -8406,8407,8408,8409,8410,8411,8412,8413,8414,8415,8416,8417,8418,8419,8420,8421, // 8422 -8422,8423,8424,8425,8426,8427,8428,8429,8430,8431,8432,8433,8434,8435,8436,8437, // 8438 -8438,8439,8440,8441,8442,8443,8444,8445,8446,8447,8448,8449,8450,8451,8452,8453, // 8454 -8454,8455,8456,8457,8458,8459,8460,8461,8462,8463,8464,8465,8466,8467,8468,8469, // 8470 -8470,8471,8472,8473,8474,8475,8476,8477,8478,8479,8480,8481,8482,8483,8484,8485, // 8486 -8486,8487,8488,8489,8490,8491,8492,8493,8494,8495,8496,8497,8498,8499,8500,8501, // 8502 -8502,8503,8504,8505,8506,8507,8508,8509,8510,8511,8512,8513,8514,8515,8516,8517, // 8518 -8518,8519,8520,8521,8522,8523,8524,8525,8526,8527,8528,8529,8530,8531,8532,8533, // 8534 -8534,8535,8536,8537,8538,8539,8540,8541,8542,8543,8544,8545,8546,8547,8548,8549, // 8550 -8550,8551,8552,8553,8554,8555,8556,8557,8558,8559,8560,8561,8562,8563,8564,8565, // 8566 -8566,8567,8568,8569,8570,8571,8572,8573,8574,8575,8576,8577,8578,8579,8580,8581, // 8582 -8582,8583,8584,8585,8586,8587,8588,8589,8590,8591,8592,8593,8594,8595,8596,8597, // 8598 -8598,8599,8600,8601,8602,8603,8604,8605,8606,8607,8608,8609,8610,8611,8612,8613, // 8614 -8614,8615,8616,8617,8618,8619,8620,8621,8622,8623,8624,8625,8626,8627,8628,8629, // 8630 -8630,8631,8632,8633,8634,8635,8636,8637,8638,8639,8640,8641,8642,8643,8644,8645, // 8646 -8646,8647,8648,8649,8650,8651,8652,8653,8654,8655,8656,8657,8658,8659,8660,8661, // 8662 -8662,8663,8664,8665,8666,8667,8668,8669,8670,8671,8672,8673,8674,8675,8676,8677, // 8678 -8678,8679,8680,8681,8682,8683,8684,8685,8686,8687,8688,8689,8690,8691,8692,8693, // 8694 -8694,8695,8696,8697,8698,8699,8700,8701,8702,8703,8704,8705,8706,8707,8708,8709, // 8710 -8710,8711,8712,8713,8714,8715,8716,8717,8718,8719,8720,8721,8722,8723,8724,8725, // 8726 -8726,8727,8728,8729,8730,8731,8732,8733,8734,8735,8736,8737,8738,8739,8740,8741, // 8742 //13973 -****************************************************************************************/ -}; - diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/GB2312Freq.tab b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/GB2312Freq.tab deleted file mode 100644 index aee12ca..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/GB2312Freq.tab +++ /dev/null @@ -1,491 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is Mozilla Communicator client code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -//GB2312 most frequently used character table - -//Char to FreqOrder table , from hz6763 - -/****************************************************************************** - * 512 --> 0.79 -- 0.79 - * 1024 --> 0.92 -- 0.13 - * 2048 --> 0.98 -- 0.06 - * 6768 --> 1.00 -- 0.02 - * - * Idea Distribution Ratio = 0.79135/(1-0.79135) = 3.79 - * Random Distribution Ration = 512 / (3755 - 512) = 0.157 - * - * Typical Distribution Ratio about 25% of Ideal one, still much higher that RDR - *****************************************************************************/ - -#define GB2312_TYPICAL_DISTRIBUTION_RATIO (float)0.9 - -#define GB2312_TABLE_SIZE 3760 - -static const PRInt16 GB2312CharToFreqOrder[] = -{ -1671, 749,1443,2364,3924,3807,2330,3921,1704,3463,2691,1511,1515, 572,3191,2205, -2361, 224,2558, 479,1711, 963,3162, 440,4060,1905,2966,2947,3580,2647,3961,3842, -2204, 869,4207, 970,2678,5626,2944,2956,1479,4048, 514,3595, 588,1346,2820,3409, - 249,4088,1746,1873,2047,1774, 581,1813, 358,1174,3590,1014,1561,4844,2245, 670, -1636,3112, 889,1286, 953, 556,2327,3060,1290,3141, 613, 185,3477,1367, 850,3820, -1715,2428,2642,2303,2732,3041,2562,2648,3566,3946,1349, 388,3098,2091,1360,3585, - 152,1687,1539, 738,1559, 59,1232,2925,2267,1388,1249,1741,1679,2960, 151,1566, -1125,1352,4271, 924,4296, 385,3166,4459, 310,1245,2850, 70,3285,2729,3534,3575, -2398,3298,3466,1960,2265, 217,3647, 864,1909,2084,4401,2773,1010,3269,5152, 853, -3051,3121,1244,4251,1895, 364,1499,1540,2313,1180,3655,2268, 562, 715,2417,3061, - 544, 336,3768,2380,1752,4075, 950, 280,2425,4382, 183,2759,3272, 333,4297,2155, -1688,2356,1444,1039,4540, 736,1177,3349,2443,2368,2144,2225, 565, 196,1482,3406, - 927,1335,4147, 692, 878,1311,1653,3911,3622,1378,4200,1840,2969,3149,2126,1816, -2534,1546,2393,2760, 737,2494, 13, 447, 245,2747, 38,2765,2129,2589,1079, 606, - 360, 471,3755,2890, 404, 848, 699,1785,1236, 370,2221,1023,3746,2074,2026,2023, -2388,1581,2119, 812,1141,3091,2536,1519, 804,2053, 406,1596,1090, 784, 548,4414, -1806,2264,2936,1100, 343,4114,5096, 622,3358, 743,3668,1510,1626,5020,3567,2513, -3195,4115,5627,2489,2991, 24,2065,2697,1087,2719, 48,1634, 315, 68, 985,2052, - 198,2239,1347,1107,1439, 597,2366,2172, 871,3307, 919,2487,2790,1867, 236,2570, -1413,3794, 906,3365,3381,1701,1982,1818,1524,2924,1205, 616,2586,2072,2004, 575, - 253,3099, 32,1365,1182, 197,1714,2454,1201, 554,3388,3224,2748, 756,2587, 250, -2567,1507,1517,3529,1922,2761,2337,3416,1961,1677,2452,2238,3153, 615, 911,1506, -1474,2495,1265,1906,2749,3756,3280,2161, 898,2714,1759,3450,2243,2444, 563, 26, -3286,2266,3769,3344,2707,3677, 611,1402, 531,1028,2871,4548,1375, 261,2948, 835, -1190,4134, 353, 840,2684,1900,3082,1435,2109,1207,1674, 329,1872,2781,4055,2686, -2104, 608,3318,2423,2957,2768,1108,3739,3512,3271,3985,2203,1771,3520,1418,2054, -1681,1153, 225,1627,2929, 162,2050,2511,3687,1954, 124,1859,2431,1684,3032,2894, - 585,4805,3969,2869,2704,2088,2032,2095,3656,2635,4362,2209, 256, 518,2042,2105, -3777,3657, 643,2298,1148,1779, 190, 989,3544, 414, 11,2135,2063,2979,1471, 403, -3678, 126, 770,1563, 671,2499,3216,2877, 600,1179, 307,2805,4937,1268,1297,2694, - 252,4032,1448,1494,1331,1394, 127,2256, 222,1647,1035,1481,3056,1915,1048, 873, -3651, 210, 33,1608,2516, 200,1520, 415, 102, 0,3389,1287, 817, 91,3299,2940, - 836,1814, 549,2197,1396,1669,2987,3582,2297,2848,4528,1070, 687, 20,1819, 121, -1552,1364,1461,1968,2617,3540,2824,2083, 177, 948,4938,2291, 110,4549,2066, 648, -3359,1755,2110,2114,4642,4845,1693,3937,3308,1257,1869,2123, 208,1804,3159,2992, -2531,2549,3361,2418,1350,2347,2800,2568,1291,2036,2680, 72, 842,1990, 212,1233, -1154,1586, 75,2027,3410,4900,1823,1337,2710,2676, 728,2810,1522,3026,4995, 157, - 755,1050,4022, 710, 785,1936,2194,2085,1406,2777,2400, 150,1250,4049,1206, 807, -1910, 534, 529,3309,1721,1660, 274, 39,2827, 661,2670,1578, 925,3248,3815,1094, -4278,4901,4252, 41,1150,3747,2572,2227,4501,3658,4902,3813,3357,3617,2884,2258, - 887, 538,4187,3199,1294,2439,3042,2329,2343,2497,1255, 107, 543,1527, 521,3478, -3568, 194,5062, 15, 961,3870,1241,1192,2664, 66,5215,3260,2111,1295,1127,2152, -3805,4135, 901,1164,1976, 398,1278, 530,1460, 748, 904,1054,1966,1426, 53,2909, - 509, 523,2279,1534, 536,1019, 239,1685, 460,2353, 673,1065,2401,3600,4298,2272, -1272,2363, 284,1753,3679,4064,1695, 81, 815,2677,2757,2731,1386, 859, 500,4221, -2190,2566, 757,1006,2519,2068,1166,1455, 337,2654,3203,1863,1682,1914,3025,1252, -1409,1366, 847, 714,2834,2038,3209, 964,2970,1901, 885,2553,1078,1756,3049, 301, -1572,3326, 688,2130,1996,2429,1805,1648,2930,3421,2750,3652,3088, 262,1158,1254, - 389,1641,1812, 526,1719, 923,2073,1073,1902, 468, 489,4625,1140, 857,2375,3070, -3319,2863, 380, 116,1328,2693,1161,2244, 273,1212,1884,2769,3011,1775,1142, 461, -3066,1200,2147,2212, 790, 702,2695,4222,1601,1058, 434,2338,5153,3640, 67,2360, -4099,2502, 618,3472,1329, 416,1132, 830,2782,1807,2653,3211,3510,1662, 192,2124, - 296,3979,1739,1611,3684, 23, 118, 324, 446,1239,1225, 293,2520,3814,3795,2535, -3116, 17,1074, 467,2692,2201, 387,2922, 45,1326,3055,1645,3659,2817, 958, 243, -1903,2320,1339,2825,1784,3289, 356, 576, 865,2315,2381,3377,3916,1088,3122,1713, -1655, 935, 628,4689,1034,1327, 441, 800, 720, 894,1979,2183,1528,5289,2702,1071, -4046,3572,2399,1571,3281, 79, 761,1103, 327, 134, 758,1899,1371,1615, 879, 442, - 215,2605,2579, 173,2048,2485,1057,2975,3317,1097,2253,3801,4263,1403,1650,2946, - 814,4968,3487,1548,2644,1567,1285, 2, 295,2636, 97, 946,3576, 832, 141,4257, -3273, 760,3821,3521,3156,2607, 949,1024,1733,1516,1803,1920,2125,2283,2665,3180, -1501,2064,3560,2171,1592, 803,3518,1416, 732,3897,4258,1363,1362,2458, 119,1427, - 602,1525,2608,1605,1639,3175, 694,3064, 10, 465, 76,2000,4846,4208, 444,3781, -1619,3353,2206,1273,3796, 740,2483, 320,1723,2377,3660,2619,1359,1137,1762,1724, -2345,2842,1850,1862, 912, 821,1866, 612,2625,1735,2573,3369,1093, 844, 89, 937, - 930,1424,3564,2413,2972,1004,3046,3019,2011, 711,3171,1452,4178, 428, 801,1943, - 432, 445,2811, 206,4136,1472, 730, 349, 73, 397,2802,2547, 998,1637,1167, 789, - 396,3217, 154,1218, 716,1120,1780,2819,4826,1931,3334,3762,2139,1215,2627, 552, -3664,3628,3232,1405,2383,3111,1356,2652,3577,3320,3101,1703, 640,1045,1370,1246, -4996, 371,1575,2436,1621,2210, 984,4033,1734,2638, 16,4529, 663,2755,3255,1451, -3917,2257,1253,1955,2234,1263,2951, 214,1229, 617, 485, 359,1831,1969, 473,2310, - 750,2058, 165, 80,2864,2419, 361,4344,2416,2479,1134, 796,3726,1266,2943, 860, -2715, 938, 390,2734,1313,1384, 248, 202, 877,1064,2854, 522,3907, 279,1602, 297, -2357, 395,3740, 137,2075, 944,4089,2584,1267,3802, 62,1533,2285, 178, 176, 780, -2440, 201,3707, 590, 478,1560,4354,2117,1075, 30, 74,4643,4004,1635,1441,2745, - 776,2596, 238,1077,1692,1912,2844, 605, 499,1742,3947, 241,3053, 980,1749, 936, -2640,4511,2582, 515,1543,2162,5322,2892,2993, 890,2148,1924, 665,1827,3581,1032, - 968,3163, 339,1044,1896, 270, 583,1791,1720,4367,1194,3488,3669, 43,2523,1657, - 163,2167, 290,1209,1622,3378, 550, 634,2508,2510, 695,2634,2384,2512,1476,1414, - 220,1469,2341,2138,2852,3183,2900,4939,2865,3502,1211,3680, 854,3227,1299,2976, -3172, 186,2998,1459, 443,1067,3251,1495, 321,1932,3054, 909, 753,1410,1828, 436, -2441,1119,1587,3164,2186,1258, 227, 231,1425,1890,3200,3942, 247, 959, 725,5254, -2741, 577,2158,2079, 929, 120, 174, 838,2813, 591,1115, 417,2024, 40,3240,1536, -1037, 291,4151,2354, 632,1298,2406,2500,3535,1825,1846,3451, 205,1171, 345,4238, - 18,1163, 811, 685,2208,1217, 425,1312,1508,1175,4308,2552,1033, 587,1381,3059, -2984,3482, 340,1316,4023,3972, 792,3176, 519, 777,4690, 918, 933,4130,2981,3741, - 90,3360,2911,2200,5184,4550, 609,3079,2030, 272,3379,2736, 363,3881,1130,1447, - 286, 779, 357,1169,3350,3137,1630,1220,2687,2391, 747,1277,3688,2618,2682,2601, -1156,3196,5290,4034,3102,1689,3596,3128, 874, 219,2783, 798, 508,1843,2461, 269, -1658,1776,1392,1913,2983,3287,2866,2159,2372, 829,4076, 46,4253,2873,1889,1894, - 915,1834,1631,2181,2318, 298, 664,2818,3555,2735, 954,3228,3117, 527,3511,2173, - 681,2712,3033,2247,2346,3467,1652, 155,2164,3382, 113,1994, 450, 899, 494, 994, -1237,2958,1875,2336,1926,3727, 545,1577,1550, 633,3473, 204,1305,3072,2410,1956, -2471, 707,2134, 841,2195,2196,2663,3843,1026,4940, 990,3252,4997, 368,1092, 437, -3212,3258,1933,1829, 675,2977,2893, 412, 943,3723,4644,3294,3283,2230,2373,5154, -2389,2241,2661,2323,1404,2524, 593, 787, 677,3008,1275,2059, 438,2709,2609,2240, -2269,2246,1446, 36,1568,1373,3892,1574,2301,1456,3962, 693,2276,5216,2035,1143, -2720,1919,1797,1811,2763,4137,2597,1830,1699,1488,1198,2090, 424,1694, 312,3634, -3390,4179,3335,2252,1214, 561,1059,3243,2295,2561, 975,5155,2321,2751,3772, 472, -1537,3282,3398,1047,2077,2348,2878,1323,3340,3076, 690,2906, 51, 369, 170,3541, -1060,2187,2688,3670,2541,1083,1683, 928,3918, 459, 109,4427, 599,3744,4286, 143, -2101,2730,2490, 82,1588,3036,2121, 281,1860, 477,4035,1238,2812,3020,2716,3312, -1530,2188,2055,1317, 843, 636,1808,1173,3495, 649, 181,1002, 147,3641,1159,2414, -3750,2289,2795, 813,3123,2610,1136,4368, 5,3391,4541,2174, 420, 429,1728, 754, -1228,2115,2219, 347,2223,2733, 735,1518,3003,2355,3134,1764,3948,3329,1888,2424, -1001,1234,1972,3321,3363,1672,1021,1450,1584, 226, 765, 655,2526,3404,3244,2302, -3665, 731, 594,2184, 319,1576, 621, 658,2656,4299,2099,3864,1279,2071,2598,2739, - 795,3086,3699,3908,1707,2352,2402,1382,3136,2475,1465,4847,3496,3865,1085,3004, -2591,1084, 213,2287,1963,3565,2250, 822, 793,4574,3187,1772,1789,3050, 595,1484, -1959,2770,1080,2650, 456, 422,2996, 940,3322,4328,4345,3092,2742, 965,2784, 739, -4124, 952,1358,2498,2949,2565, 332,2698,2378, 660,2260,2473,4194,3856,2919, 535, -1260,2651,1208,1428,1300,1949,1303,2942, 433,2455,2450,1251,1946, 614,1269, 641, -1306,1810,2737,3078,2912, 564,2365,1419,1415,1497,4460,2367,2185,1379,3005,1307, -3218,2175,1897,3063, 682,1157,4040,4005,1712,1160,1941,1399, 394, 402,2952,1573, -1151,2986,2404, 862, 299,2033,1489,3006, 346, 171,2886,3401,1726,2932, 168,2533, - 47,2507,1030,3735,1145,3370,1395,1318,1579,3609,4560,2857,4116,1457,2529,1965, - 504,1036,2690,2988,2405, 745,5871, 849,2397,2056,3081, 863,2359,3857,2096, 99, -1397,1769,2300,4428,1643,3455,1978,1757,3718,1440, 35,4879,3742,1296,4228,2280, - 160,5063,1599,2013, 166, 520,3479,1646,3345,3012, 490,1937,1545,1264,2182,2505, -1096,1188,1369,1436,2421,1667,2792,2460,1270,2122, 727,3167,2143, 806,1706,1012, -1800,3037, 960,2218,1882, 805, 139,2456,1139,1521, 851,1052,3093,3089, 342,2039, - 744,5097,1468,1502,1585,2087, 223, 939, 326,2140,2577, 892,2481,1623,4077, 982, -3708, 135,2131, 87,2503,3114,2326,1106, 876,1616, 547,2997,2831,2093,3441,4530, -4314, 9,3256,4229,4148, 659,1462,1986,1710,2046,2913,2231,4090,4880,5255,3392, -3274,1368,3689,4645,1477, 705,3384,3635,1068,1529,2941,1458,3782,1509, 100,1656, -2548, 718,2339, 408,1590,2780,3548,1838,4117,3719,1345,3530, 717,3442,2778,3220, -2898,1892,4590,3614,3371,2043,1998,1224,3483, 891, 635, 584,2559,3355, 733,1766, -1729,1172,3789,1891,2307, 781,2982,2271,1957,1580,5773,2633,2005,4195,3097,1535, -3213,1189,1934,5693,3262, 586,3118,1324,1598, 517,1564,2217,1868,1893,4445,3728, -2703,3139,1526,1787,1992,3882,2875,1549,1199,1056,2224,1904,2711,5098,4287, 338, -1993,3129,3489,2689,1809,2815,1997, 957,1855,3898,2550,3275,3057,1105,1319, 627, -1505,1911,1883,3526, 698,3629,3456,1833,1431, 746, 77,1261,2017,2296,1977,1885, - 125,1334,1600, 525,1798,1109,2222,1470,1945, 559,2236,1186,3443,2476,1929,1411, -2411,3135,1777,3372,2621,1841,1613,3229, 668,1430,1839,2643,2916, 195,1989,2671, -2358,1387, 629,3205,2293,5256,4439, 123,1310, 888,1879,4300,3021,3605,1003,1162, -3192,2910,2010, 140,2395,2859, 55,1082,2012,2901, 662, 419,2081,1438, 680,2774, -4654,3912,1620,1731,1625,5035,4065,2328, 512,1344, 802,5443,2163,2311,2537, 524, -3399, 98,1155,2103,1918,2606,3925,2816,1393,2465,1504,3773,2177,3963,1478,4346, - 180,1113,4655,3461,2028,1698, 833,2696,1235,1322,1594,4408,3623,3013,3225,2040, -3022, 541,2881, 607,3632,2029,1665,1219, 639,1385,1686,1099,2803,3231,1938,3188, -2858, 427, 676,2772,1168,2025, 454,3253,2486,3556, 230,1950, 580, 791,1991,1280, -1086,1974,2034, 630, 257,3338,2788,4903,1017, 86,4790, 966,2789,1995,1696,1131, - 259,3095,4188,1308, 179,1463,5257, 289,4107,1248, 42,3413,1725,2288, 896,1947, - 774,4474,4254, 604,3430,4264, 392,2514,2588, 452, 237,1408,3018, 988,4531,1970, -3034,3310, 540,2370,1562,1288,2990, 502,4765,1147, 4,1853,2708, 207, 294,2814, -4078,2902,2509, 684, 34,3105,3532,2551, 644, 709,2801,2344, 573,1727,3573,3557, -2021,1081,3100,4315,2100,3681, 199,2263,1837,2385, 146,3484,1195,2776,3949, 997, -1939,3973,1008,1091,1202,1962,1847,1149,4209,5444,1076, 493, 117,5400,2521, 972, -1490,2934,1796,4542,2374,1512,2933,2657, 413,2888,1135,2762,2314,2156,1355,2369, - 766,2007,2527,2170,3124,2491,2593,2632,4757,2437, 234,3125,3591,1898,1750,1376, -1942,3468,3138, 570,2127,2145,3276,4131, 962, 132,1445,4196, 19, 941,3624,3480, -3366,1973,1374,4461,3431,2629, 283,2415,2275, 808,2887,3620,2112,2563,1353,3610, - 955,1089,3103,1053, 96, 88,4097, 823,3808,1583, 399, 292,4091,3313, 421,1128, - 642,4006, 903,2539,1877,2082, 596, 29,4066,1790, 722,2157, 130, 995,1569, 769, -1485, 464, 513,2213, 288,1923,1101,2453,4316, 133, 486,2445, 50, 625, 487,2207, - 57, 423, 481,2962, 159,3729,1558, 491, 303, 482, 501, 240,2837, 112,3648,2392, -1783, 362, 8,3433,3422, 610,2793,3277,1390,1284,1654, 21,3823, 734, 367, 623, - 193, 287, 374,1009,1483, 816, 476, 313,2255,2340,1262,2150,2899,1146,2581, 782, -2116,1659,2018,1880, 255,3586,3314,1110,2867,2137,2564, 986,2767,5185,2006, 650, - 158, 926, 762, 881,3157,2717,2362,3587, 306,3690,3245,1542,3077,2427,1691,2478, -2118,2985,3490,2438, 539,2305, 983, 129,1754, 355,4201,2386, 827,2923, 104,1773, -2838,2771, 411,2905,3919, 376, 767, 122,1114, 828,2422,1817,3506, 266,3460,1007, -1609,4998, 945,2612,4429,2274, 726,1247,1964,2914,2199,2070,4002,4108, 657,3323, -1422, 579, 455,2764,4737,1222,2895,1670, 824,1223,1487,2525, 558, 861,3080, 598, -2659,2515,1967, 752,2583,2376,2214,4180, 977, 704,2464,4999,2622,4109,1210,2961, - 819,1541, 142,2284, 44, 418, 457,1126,3730,4347,4626,1644,1876,3671,1864, 302, -1063,5694, 624, 723,1984,3745,1314,1676,2488,1610,1449,3558,3569,2166,2098, 409, -1011,2325,3704,2306, 818,1732,1383,1824,1844,3757, 999,2705,3497,1216,1423,2683, -2426,2954,2501,2726,2229,1475,2554,5064,1971,1794,1666,2014,1343, 783, 724, 191, -2434,1354,2220,5065,1763,2752,2472,4152, 131, 175,2885,3434, 92,1466,4920,2616, -3871,3872,3866, 128,1551,1632, 669,1854,3682,4691,4125,1230, 188,2973,3290,1302, -1213, 560,3266, 917, 763,3909,3249,1760, 868,1958, 764,1782,2097, 145,2277,3774, -4462, 64,1491,3062, 971,2132,3606,2442, 221,1226,1617, 218, 323,1185,3207,3147, - 571, 619,1473,1005,1744,2281, 449,1887,2396,3685, 275, 375,3816,1743,3844,3731, - 845,1983,2350,4210,1377, 773, 967,3499,3052,3743,2725,4007,1697,1022,3943,1464, -3264,2855,2722,1952,1029,2839,2467, 84,4383,2215, 820,1391,2015,2448,3672, 377, -1948,2168, 797,2545,3536,2578,2645, 94,2874,1678, 405,1259,3071, 771, 546,1315, - 470,1243,3083, 895,2468, 981, 969,2037, 846,4181, 653,1276,2928, 14,2594, 557, -3007,2474, 156, 902,1338,1740,2574, 537,2518, 973,2282,2216,2433,1928, 138,2903, -1293,2631,1612, 646,3457, 839,2935, 111, 496,2191,2847, 589,3186, 149,3994,2060, -4031,2641,4067,3145,1870, 37,3597,2136,1025,2051,3009,3383,3549,1121,1016,3261, -1301, 251,2446,2599,2153, 872,3246, 637, 334,3705, 831, 884, 921,3065,3140,4092, -2198,1944, 246,2964, 108,2045,1152,1921,2308,1031, 203,3173,4170,1907,3890, 810, -1401,2003,1690, 506, 647,1242,2828,1761,1649,3208,2249,1589,3709,2931,5156,1708, - 498, 666,2613, 834,3817,1231, 184,2851,1124, 883,3197,2261,3710,1765,1553,2658, -1178,2639,2351, 93,1193, 942,2538,2141,4402, 235,1821, 870,1591,2192,1709,1871, -3341,1618,4126,2595,2334, 603, 651, 69, 701, 268,2662,3411,2555,1380,1606, 503, - 448, 254,2371,2646, 574,1187,2309,1770, 322,2235,1292,1801, 305, 566,1133, 229, -2067,2057, 706, 167, 483,2002,2672,3295,1820,3561,3067, 316, 378,2746,3452,1112, - 136,1981, 507,1651,2917,1117, 285,4591, 182,2580,3522,1304, 335,3303,1835,2504, -1795,1792,2248, 674,1018,2106,2449,1857,2292,2845, 976,3047,1781,2600,2727,1389, -1281, 52,3152, 153, 265,3950, 672,3485,3951,4463, 430,1183, 365, 278,2169, 27, -1407,1336,2304, 209,1340,1730,2202,1852,2403,2883, 979,1737,1062, 631,2829,2542, -3876,2592, 825,2086,2226,3048,3625, 352,1417,3724, 542, 991, 431,1351,3938,1861, -2294, 826,1361,2927,3142,3503,1738, 463,2462,2723, 582,1916,1595,2808, 400,3845, -3891,2868,3621,2254, 58,2492,1123, 910,2160,2614,1372,1603,1196,1072,3385,1700, -3267,1980, 696, 480,2430, 920, 799,1570,2920,1951,2041,4047,2540,1321,4223,2469, -3562,2228,1271,2602, 401,2833,3351,2575,5157, 907,2312,1256, 410, 263,3507,1582, - 996, 678,1849,2316,1480, 908,3545,2237, 703,2322, 667,1826,2849,1531,2604,2999, -2407,3146,2151,2630,1786,3711, 469,3542, 497,3899,2409, 858, 837,4446,3393,1274, - 786, 620,1845,2001,3311, 484, 308,3367,1204,1815,3691,2332,1532,2557,1842,2020, -2724,1927,2333,4440, 567, 22,1673,2728,4475,1987,1858,1144,1597, 101,1832,3601, - 12, 974,3783,4391, 951,1412, 1,3720, 453,4608,4041, 528,1041,1027,3230,2628, -1129, 875,1051,3291,1203,2262,1069,2860,2799,2149,2615,3278, 144,1758,3040, 31, - 475,1680, 366,2685,3184, 311,1642,4008,2466,5036,1593,1493,2809, 216,1420,1668, - 233, 304,2128,3284, 232,1429,1768,1040,2008,3407,2740,2967,2543, 242,2133, 778, -1565,2022,2620, 505,2189,2756,1098,2273, 372,1614, 708, 553,2846,2094,2278, 169, -3626,2835,4161, 228,2674,3165, 809,1454,1309, 466,1705,1095, 900,3423, 880,2667, -3751,5258,2317,3109,2571,4317,2766,1503,1342, 866,4447,1118, 63,2076, 314,1881, -1348,1061, 172, 978,3515,1747, 532, 511,3970, 6, 601, 905,2699,3300,1751, 276, -1467,3725,2668, 65,4239,2544,2779,2556,1604, 578,2451,1802, 992,2331,2624,1320, -3446, 713,1513,1013, 103,2786,2447,1661, 886,1702, 916, 654,3574,2031,1556, 751, -2178,2821,2179,1498,1538,2176, 271, 914,2251,2080,1325, 638,1953,2937,3877,2432, -2754, 95,3265,1716, 260,1227,4083, 775, 106,1357,3254, 426,1607, 555,2480, 772, -1985, 244,2546, 474, 495,1046,2611,1851,2061, 71,2089,1675,2590, 742,3758,2843, -3222,1433, 267,2180,2576,2826,2233,2092,3913,2435, 956,1745,3075, 856,2113,1116, - 451, 3,1988,2896,1398, 993,2463,1878,2049,1341,2718,2721,2870,2108, 712,2904, -4363,2753,2324, 277,2872,2349,2649, 384, 987, 435, 691,3000, 922, 164,3939, 652, -1500,1184,4153,2482,3373,2165,4848,2335,3775,3508,3154,2806,2830,1554,2102,1664, -2530,1434,2408, 893,1547,2623,3447,2832,2242,2532,3169,2856,3223,2078, 49,3770, -3469, 462, 318, 656,2259,3250,3069, 679,1629,2758, 344,1138,1104,3120,1836,1283, -3115,2154,1437,4448, 934, 759,1999, 794,2862,1038, 533,2560,1722,2342, 855,2626, -1197,1663,4476,3127, 85,4240,2528, 25,1111,1181,3673, 407,3470,4561,2679,2713, - 768,1925,2841,3986,1544,1165, 932, 373,1240,2146,1930,2673, 721,4766, 354,4333, - 391,2963, 187, 61,3364,1442,1102, 330,1940,1767, 341,3809,4118, 393,2496,2062, -2211, 105, 331, 300, 439, 913,1332, 626, 379,3304,1557, 328, 689,3952, 309,1555, - 931, 317,2517,3027, 325, 569, 686,2107,3084, 60,1042,1333,2794, 264,3177,4014, -1628, 258,3712, 7,4464,1176,1043,1778, 683, 114,1975, 78,1492, 383,1886, 510, - 386, 645,5291,2891,2069,3305,4138,3867,2939,2603,2493,1935,1066,1848,3588,1015, -1282,1289,4609, 697,1453,3044,2666,3611,1856,2412, 54, 719,1330, 568,3778,2459, -1748, 788, 492, 551,1191,1000, 488,3394,3763, 282,1799, 348,2016,1523,3155,2390, -1049, 382,2019,1788,1170, 729,2968,3523, 897,3926,2785,2938,3292, 350,2319,3238, -1718,1717,2655,3453,3143,4465, 161,2889,2980,2009,1421, 56,1908,1640,2387,2232, -1917,1874,2477,4921, 148, 83,3438, 592,4245,2882,1822,1055, 741, 115,1496,1624, - 381,1638,4592,1020, 516,3214, 458, 947,4575,1432, 211,1514,2926,1865,2142, 189, - 852,1221,1400,1486, 882,2299,4036, 351, 28,1122, 700,6479,6480,6481,6482,6483, //last 512 - -/*************************************************************************************** - *Everything below is of no interest for detection purpose * - *************************************************************************************** - -5508,6484,3900,3414,3974,4441,4024,3537,4037,5628,5099,3633,6485,3148,6486,3636, -5509,3257,5510,5973,5445,5872,4941,4403,3174,4627,5873,6276,2286,4230,5446,5874, -5122,6102,6103,4162,5447,5123,5323,4849,6277,3980,3851,5066,4246,5774,5067,6278, -3001,2807,5695,3346,5775,5974,5158,5448,6487,5975,5976,5776,3598,6279,5696,4806, -4211,4154,6280,6488,6489,6490,6281,4212,5037,3374,4171,6491,4562,4807,4722,4827, -5977,6104,4532,4079,5159,5324,5160,4404,3858,5359,5875,3975,4288,4610,3486,4512, -5325,3893,5360,6282,6283,5560,2522,4231,5978,5186,5449,2569,3878,6284,5401,3578, -4415,6285,4656,5124,5979,2506,4247,4449,3219,3417,4334,4969,4329,6492,4576,4828, -4172,4416,4829,5402,6286,3927,3852,5361,4369,4830,4477,4867,5876,4173,6493,6105, -4657,6287,6106,5877,5450,6494,4155,4868,5451,3700,5629,4384,6288,6289,5878,3189, -4881,6107,6290,6495,4513,6496,4692,4515,4723,5100,3356,6497,6291,3810,4080,5561, -3570,4430,5980,6498,4355,5697,6499,4724,6108,6109,3764,4050,5038,5879,4093,3226, -6292,5068,5217,4693,3342,5630,3504,4831,4377,4466,4309,5698,4431,5777,6293,5778, -4272,3706,6110,5326,3752,4676,5327,4273,5403,4767,5631,6500,5699,5880,3475,5039, -6294,5562,5125,4348,4301,4482,4068,5126,4593,5700,3380,3462,5981,5563,3824,5404, -4970,5511,3825,4738,6295,6501,5452,4516,6111,5881,5564,6502,6296,5982,6503,4213, -4163,3454,6504,6112,4009,4450,6113,4658,6297,6114,3035,6505,6115,3995,4904,4739, -4563,4942,4110,5040,3661,3928,5362,3674,6506,5292,3612,4791,5565,4149,5983,5328, -5259,5021,4725,4577,4564,4517,4364,6298,5405,4578,5260,4594,4156,4157,5453,3592, -3491,6507,5127,5512,4709,4922,5984,5701,4726,4289,6508,4015,6116,5128,4628,3424, -4241,5779,6299,4905,6509,6510,5454,5702,5780,6300,4365,4923,3971,6511,5161,3270, -3158,5985,4100, 867,5129,5703,6117,5363,3695,3301,5513,4467,6118,6512,5455,4232, -4242,4629,6513,3959,4478,6514,5514,5329,5986,4850,5162,5566,3846,4694,6119,5456, -4869,5781,3779,6301,5704,5987,5515,4710,6302,5882,6120,4392,5364,5705,6515,6121, -6516,6517,3736,5988,5457,5989,4695,2457,5883,4551,5782,6303,6304,6305,5130,4971, -6122,5163,6123,4870,3263,5365,3150,4871,6518,6306,5783,5069,5706,3513,3498,4409, -5330,5632,5366,5458,5459,3991,5990,4502,3324,5991,5784,3696,4518,5633,4119,6519, -4630,5634,4417,5707,4832,5992,3418,6124,5993,5567,4768,5218,6520,4595,3458,5367, -6125,5635,6126,4202,6521,4740,4924,6307,3981,4069,4385,6308,3883,2675,4051,3834, -4302,4483,5568,5994,4972,4101,5368,6309,5164,5884,3922,6127,6522,6523,5261,5460, -5187,4164,5219,3538,5516,4111,3524,5995,6310,6311,5369,3181,3386,2484,5188,3464, -5569,3627,5708,6524,5406,5165,4677,4492,6312,4872,4851,5885,4468,5996,6313,5709, -5710,6128,2470,5886,6314,5293,4882,5785,3325,5461,5101,6129,5711,5786,6525,4906, -6526,6527,4418,5887,5712,4808,2907,3701,5713,5888,6528,3765,5636,5331,6529,6530, -3593,5889,3637,4943,3692,5714,5787,4925,6315,6130,5462,4405,6131,6132,6316,5262, -6531,6532,5715,3859,5716,5070,4696,5102,3929,5788,3987,4792,5997,6533,6534,3920, -4809,5000,5998,6535,2974,5370,6317,5189,5263,5717,3826,6536,3953,5001,4883,3190, -5463,5890,4973,5999,4741,6133,6134,3607,5570,6000,4711,3362,3630,4552,5041,6318, -6001,2950,2953,5637,4646,5371,4944,6002,2044,4120,3429,6319,6537,5103,4833,6538, -6539,4884,4647,3884,6003,6004,4758,3835,5220,5789,4565,5407,6540,6135,5294,4697, -4852,6320,6321,3206,4907,6541,6322,4945,6542,6136,6543,6323,6005,4631,3519,6544, -5891,6545,5464,3784,5221,6546,5571,4659,6547,6324,6137,5190,6548,3853,6549,4016, -4834,3954,6138,5332,3827,4017,3210,3546,4469,5408,5718,3505,4648,5790,5131,5638, -5791,5465,4727,4318,6325,6326,5792,4553,4010,4698,3439,4974,3638,4335,3085,6006, -5104,5042,5166,5892,5572,6327,4356,4519,5222,5573,5333,5793,5043,6550,5639,5071, -4503,6328,6139,6551,6140,3914,3901,5372,6007,5640,4728,4793,3976,3836,4885,6552, -4127,6553,4451,4102,5002,6554,3686,5105,6555,5191,5072,5295,4611,5794,5296,6556, -5893,5264,5894,4975,5466,5265,4699,4976,4370,4056,3492,5044,4886,6557,5795,4432, -4769,4357,5467,3940,4660,4290,6141,4484,4770,4661,3992,6329,4025,4662,5022,4632, -4835,4070,5297,4663,4596,5574,5132,5409,5895,6142,4504,5192,4664,5796,5896,3885, -5575,5797,5023,4810,5798,3732,5223,4712,5298,4084,5334,5468,6143,4052,4053,4336, -4977,4794,6558,5335,4908,5576,5224,4233,5024,4128,5469,5225,4873,6008,5045,4729, -4742,4633,3675,4597,6559,5897,5133,5577,5003,5641,5719,6330,6560,3017,2382,3854, -4406,4811,6331,4393,3964,4946,6561,2420,3722,6562,4926,4378,3247,1736,4442,6332, -5134,6333,5226,3996,2918,5470,4319,4003,4598,4743,4744,4485,3785,3902,5167,5004, -5373,4394,5898,6144,4874,1793,3997,6334,4085,4214,5106,5642,4909,5799,6009,4419, -4189,3330,5899,4165,4420,5299,5720,5227,3347,6145,4081,6335,2876,3930,6146,3293, -3786,3910,3998,5900,5300,5578,2840,6563,5901,5579,6147,3531,5374,6564,6565,5580, -4759,5375,6566,6148,3559,5643,6336,6010,5517,6337,6338,5721,5902,3873,6011,6339, -6567,5518,3868,3649,5722,6568,4771,4947,6569,6149,4812,6570,2853,5471,6340,6341, -5644,4795,6342,6012,5723,6343,5724,6013,4349,6344,3160,6150,5193,4599,4514,4493, -5168,4320,6345,4927,3666,4745,5169,5903,5005,4928,6346,5725,6014,4730,4203,5046, -4948,3395,5170,6015,4150,6016,5726,5519,6347,5047,3550,6151,6348,4197,4310,5904, -6571,5581,2965,6152,4978,3960,4291,5135,6572,5301,5727,4129,4026,5905,4853,5728, -5472,6153,6349,4533,2700,4505,5336,4678,3583,5073,2994,4486,3043,4554,5520,6350, -6017,5800,4487,6351,3931,4103,5376,6352,4011,4321,4311,4190,5136,6018,3988,3233, -4350,5906,5645,4198,6573,5107,3432,4191,3435,5582,6574,4139,5410,6353,5411,3944, -5583,5074,3198,6575,6354,4358,6576,5302,4600,5584,5194,5412,6577,6578,5585,5413, -5303,4248,5414,3879,4433,6579,4479,5025,4854,5415,6355,4760,4772,3683,2978,4700, -3797,4452,3965,3932,3721,4910,5801,6580,5195,3551,5907,3221,3471,3029,6019,3999, -5908,5909,5266,5267,3444,3023,3828,3170,4796,5646,4979,4259,6356,5647,5337,3694, -6357,5648,5338,4520,4322,5802,3031,3759,4071,6020,5586,4836,4386,5048,6581,3571, -4679,4174,4949,6154,4813,3787,3402,3822,3958,3215,3552,5268,4387,3933,4950,4359, -6021,5910,5075,3579,6358,4234,4566,5521,6359,3613,5049,6022,5911,3375,3702,3178, -4911,5339,4521,6582,6583,4395,3087,3811,5377,6023,6360,6155,4027,5171,5649,4421, -4249,2804,6584,2270,6585,4000,4235,3045,6156,5137,5729,4140,4312,3886,6361,4330, -6157,4215,6158,3500,3676,4929,4331,3713,4930,5912,4265,3776,3368,5587,4470,4855, -3038,4980,3631,6159,6160,4132,4680,6161,6362,3923,4379,5588,4255,6586,4121,6587, -6363,4649,6364,3288,4773,4774,6162,6024,6365,3543,6588,4274,3107,3737,5050,5803, -4797,4522,5589,5051,5730,3714,4887,5378,4001,4523,6163,5026,5522,4701,4175,2791, -3760,6589,5473,4224,4133,3847,4814,4815,4775,3259,5416,6590,2738,6164,6025,5304, -3733,5076,5650,4816,5590,6591,6165,6592,3934,5269,6593,3396,5340,6594,5804,3445, -3602,4042,4488,5731,5732,3525,5591,4601,5196,6166,6026,5172,3642,4612,3202,4506, -4798,6366,3818,5108,4303,5138,5139,4776,3332,4304,2915,3415,4434,5077,5109,4856, -2879,5305,4817,6595,5913,3104,3144,3903,4634,5341,3133,5110,5651,5805,6167,4057, -5592,2945,4371,5593,6596,3474,4182,6367,6597,6168,4507,4279,6598,2822,6599,4777, -4713,5594,3829,6169,3887,5417,6170,3653,5474,6368,4216,2971,5228,3790,4579,6369, -5733,6600,6601,4951,4746,4555,6602,5418,5475,6027,3400,4665,5806,6171,4799,6028, -5052,6172,3343,4800,4747,5006,6370,4556,4217,5476,4396,5229,5379,5477,3839,5914, -5652,5807,4714,3068,4635,5808,6173,5342,4192,5078,5419,5523,5734,6174,4557,6175, -4602,6371,6176,6603,5809,6372,5735,4260,3869,5111,5230,6029,5112,6177,3126,4681, -5524,5915,2706,3563,4748,3130,6178,4018,5525,6604,6605,5478,4012,4837,6606,4534, -4193,5810,4857,3615,5479,6030,4082,3697,3539,4086,5270,3662,4508,4931,5916,4912, -5811,5027,3888,6607,4397,3527,3302,3798,2775,2921,2637,3966,4122,4388,4028,4054, -1633,4858,5079,3024,5007,3982,3412,5736,6608,3426,3236,5595,3030,6179,3427,3336, -3279,3110,6373,3874,3039,5080,5917,5140,4489,3119,6374,5812,3405,4494,6031,4666, -4141,6180,4166,6032,5813,4981,6609,5081,4422,4982,4112,3915,5653,3296,3983,6375, -4266,4410,5654,6610,6181,3436,5082,6611,5380,6033,3819,5596,4535,5231,5306,5113, -6612,4952,5918,4275,3113,6613,6376,6182,6183,5814,3073,4731,4838,5008,3831,6614, -4888,3090,3848,4280,5526,5232,3014,5655,5009,5737,5420,5527,6615,5815,5343,5173, -5381,4818,6616,3151,4953,6617,5738,2796,3204,4360,2989,4281,5739,5174,5421,5197, -3132,5141,3849,5142,5528,5083,3799,3904,4839,5480,2880,4495,3448,6377,6184,5271, -5919,3771,3193,6034,6035,5920,5010,6036,5597,6037,6378,6038,3106,5422,6618,5423, -5424,4142,6619,4889,5084,4890,4313,5740,6620,3437,5175,5307,5816,4199,5198,5529, -5817,5199,5656,4913,5028,5344,3850,6185,2955,5272,5011,5818,4567,4580,5029,5921, -3616,5233,6621,6622,6186,4176,6039,6379,6380,3352,5200,5273,2908,5598,5234,3837, -5308,6623,6624,5819,4496,4323,5309,5201,6625,6626,4983,3194,3838,4167,5530,5922, -5274,6381,6382,3860,3861,5599,3333,4292,4509,6383,3553,5481,5820,5531,4778,6187, -3955,3956,4324,4389,4218,3945,4325,3397,2681,5923,4779,5085,4019,5482,4891,5382, -5383,6040,4682,3425,5275,4094,6627,5310,3015,5483,5657,4398,5924,3168,4819,6628, -5925,6629,5532,4932,4613,6041,6630,4636,6384,4780,4204,5658,4423,5821,3989,4683, -5822,6385,4954,6631,5345,6188,5425,5012,5384,3894,6386,4490,4104,6632,5741,5053, -6633,5823,5926,5659,5660,5927,6634,5235,5742,5824,4840,4933,4820,6387,4859,5928, -4955,6388,4143,3584,5825,5346,5013,6635,5661,6389,5014,5484,5743,4337,5176,5662, -6390,2836,6391,3268,6392,6636,6042,5236,6637,4158,6638,5744,5663,4471,5347,3663, -4123,5143,4293,3895,6639,6640,5311,5929,5826,3800,6189,6393,6190,5664,5348,3554, -3594,4749,4603,6641,5385,4801,6043,5827,4183,6642,5312,5426,4761,6394,5665,6191, -4715,2669,6643,6644,5533,3185,5427,5086,5930,5931,5386,6192,6044,6645,4781,4013, -5745,4282,4435,5534,4390,4267,6045,5746,4984,6046,2743,6193,3501,4087,5485,5932, -5428,4184,4095,5747,4061,5054,3058,3862,5933,5600,6646,5144,3618,6395,3131,5055, -5313,6396,4650,4956,3855,6194,3896,5202,4985,4029,4225,6195,6647,5828,5486,5829, -3589,3002,6648,6397,4782,5276,6649,6196,6650,4105,3803,4043,5237,5830,6398,4096, -3643,6399,3528,6651,4453,3315,4637,6652,3984,6197,5535,3182,3339,6653,3096,2660, -6400,6654,3449,5934,4250,4236,6047,6401,5831,6655,5487,3753,4062,5832,6198,6199, -6656,3766,6657,3403,4667,6048,6658,4338,2897,5833,3880,2797,3780,4326,6659,5748, -5015,6660,5387,4351,5601,4411,6661,3654,4424,5935,4339,4072,5277,4568,5536,6402, -6662,5238,6663,5349,5203,6200,5204,6201,5145,4536,5016,5056,4762,5834,4399,4957, -6202,6403,5666,5749,6664,4340,6665,5936,5177,5667,6666,6667,3459,4668,6404,6668, -6669,4543,6203,6670,4276,6405,4480,5537,6671,4614,5205,5668,6672,3348,2193,4763, -6406,6204,5937,5602,4177,5669,3419,6673,4020,6205,4443,4569,5388,3715,3639,6407, -6049,4058,6206,6674,5938,4544,6050,4185,4294,4841,4651,4615,5488,6207,6408,6051, -5178,3241,3509,5835,6208,4958,5836,4341,5489,5278,6209,2823,5538,5350,5206,5429, -6675,4638,4875,4073,3516,4684,4914,4860,5939,5603,5389,6052,5057,3237,5490,3791, -6676,6409,6677,4821,4915,4106,5351,5058,4243,5539,4244,5604,4842,4916,5239,3028, -3716,5837,5114,5605,5390,5940,5430,6210,4332,6678,5540,4732,3667,3840,6053,4305, -3408,5670,5541,6410,2744,5240,5750,6679,3234,5606,6680,5607,5671,3608,4283,4159, -4400,5352,4783,6681,6411,6682,4491,4802,6211,6412,5941,6413,6414,5542,5751,6683, -4669,3734,5942,6684,6415,5943,5059,3328,4670,4144,4268,6685,6686,6687,6688,4372, -3603,6689,5944,5491,4373,3440,6416,5543,4784,4822,5608,3792,4616,5838,5672,3514, -5391,6417,4892,6690,4639,6691,6054,5673,5839,6055,6692,6056,5392,6212,4038,5544, -5674,4497,6057,6693,5840,4284,5675,4021,4545,5609,6418,4454,6419,6213,4113,4472, -5314,3738,5087,5279,4074,5610,4959,4063,3179,4750,6058,6420,6214,3476,4498,4716, -5431,4960,4685,6215,5241,6694,6421,6216,6695,5841,5945,6422,3748,5946,5179,3905, -5752,5545,5947,4374,6217,4455,6423,4412,6218,4803,5353,6696,3832,5280,6219,4327, -4702,6220,6221,6059,4652,5432,6424,3749,4751,6425,5753,4986,5393,4917,5948,5030, -5754,4861,4733,6426,4703,6697,6222,4671,5949,4546,4961,5180,6223,5031,3316,5281, -6698,4862,4295,4934,5207,3644,6427,5842,5950,6428,6429,4570,5843,5282,6430,6224, -5088,3239,6060,6699,5844,5755,6061,6431,2701,5546,6432,5115,5676,4039,3993,3327, -4752,4425,5315,6433,3941,6434,5677,4617,4604,3074,4581,6225,5433,6435,6226,6062, -4823,5756,5116,6227,3717,5678,4717,5845,6436,5679,5846,6063,5847,6064,3977,3354, -6437,3863,5117,6228,5547,5394,4499,4524,6229,4605,6230,4306,4500,6700,5951,6065, -3693,5952,5089,4366,4918,6701,6231,5548,6232,6702,6438,4704,5434,6703,6704,5953, -4168,6705,5680,3420,6706,5242,4407,6066,3812,5757,5090,5954,4672,4525,3481,5681, -4618,5395,5354,5316,5955,6439,4962,6707,4526,6440,3465,4673,6067,6441,5682,6708, -5435,5492,5758,5683,4619,4571,4674,4804,4893,4686,5493,4753,6233,6068,4269,6442, -6234,5032,4705,5146,5243,5208,5848,6235,6443,4963,5033,4640,4226,6236,5849,3387, -6444,6445,4436,4437,5850,4843,5494,4785,4894,6709,4361,6710,5091,5956,3331,6237, -4987,5549,6069,6711,4342,3517,4473,5317,6070,6712,6071,4706,6446,5017,5355,6713, -6714,4988,5436,6447,4734,5759,6715,4735,4547,4456,4754,6448,5851,6449,6450,3547, -5852,5318,6451,6452,5092,4205,6716,6238,4620,4219,5611,6239,6072,4481,5760,5957, -5958,4059,6240,6453,4227,4537,6241,5761,4030,4186,5244,5209,3761,4457,4876,3337, -5495,5181,6242,5959,5319,5612,5684,5853,3493,5854,6073,4169,5613,5147,4895,6074, -5210,6717,5182,6718,3830,6243,2798,3841,6075,6244,5855,5614,3604,4606,5496,5685, -5118,5356,6719,6454,5960,5357,5961,6720,4145,3935,4621,5119,5962,4261,6721,6455, -4786,5963,4375,4582,6245,6246,6247,6076,5437,4877,5856,3376,4380,6248,4160,6722, -5148,6456,5211,6457,6723,4718,6458,6724,6249,5358,4044,3297,6459,6250,5857,5615, -5497,5245,6460,5498,6725,6251,6252,5550,3793,5499,2959,5396,6461,6462,4572,5093, -5500,5964,3806,4146,6463,4426,5762,5858,6077,6253,4755,3967,4220,5965,6254,4989, -5501,6464,4352,6726,6078,4764,2290,5246,3906,5438,5283,3767,4964,2861,5763,5094, -6255,6256,4622,5616,5859,5860,4707,6727,4285,4708,4824,5617,6257,5551,4787,5212, -4965,4935,4687,6465,6728,6466,5686,6079,3494,4413,2995,5247,5966,5618,6729,5967, -5764,5765,5687,5502,6730,6731,6080,5397,6467,4990,6258,6732,4538,5060,5619,6733, -4719,5688,5439,5018,5149,5284,5503,6734,6081,4607,6259,5120,3645,5861,4583,6260, -4584,4675,5620,4098,5440,6261,4863,2379,3306,4585,5552,5689,4586,5285,6735,4864, -6736,5286,6082,6737,4623,3010,4788,4381,4558,5621,4587,4896,3698,3161,5248,4353, -4045,6262,3754,5183,4588,6738,6263,6739,6740,5622,3936,6741,6468,6742,6264,5095, -6469,4991,5968,6743,4992,6744,6083,4897,6745,4256,5766,4307,3108,3968,4444,5287, -3889,4343,6084,4510,6085,4559,6086,4898,5969,6746,5623,5061,4919,5249,5250,5504, -5441,6265,5320,4878,3242,5862,5251,3428,6087,6747,4237,5624,5442,6266,5553,4539, -6748,2585,3533,5398,4262,6088,5150,4736,4438,6089,6267,5505,4966,6749,6268,6750, -6269,5288,5554,3650,6090,6091,4624,6092,5690,6751,5863,4270,5691,4277,5555,5864, -6752,5692,4720,4865,6470,5151,4688,4825,6753,3094,6754,6471,3235,4653,6755,5213, -5399,6756,3201,4589,5865,4967,6472,5866,6473,5019,3016,6757,5321,4756,3957,4573, -6093,4993,5767,4721,6474,6758,5625,6759,4458,6475,6270,6760,5556,4994,5214,5252, -6271,3875,5768,6094,5034,5506,4376,5769,6761,2120,6476,5253,5770,6762,5771,5970, -3990,5971,5557,5558,5772,6477,6095,2787,4641,5972,5121,6096,6097,6272,6763,3703, -5867,5507,6273,4206,6274,4789,6098,6764,3619,3646,3833,3804,2394,3788,4936,3978, -4866,4899,6099,6100,5559,6478,6765,3599,5868,6101,5869,5870,6275,6766,4527,6767, -*******************************************************************************/ -}; - - diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/JISFreq.tab b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/JISFreq.tab deleted file mode 100644 index 715321f..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/JISFreq.tab +++ /dev/null @@ -1,589 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is Mozilla Communicator client code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -//Sampling from about 20M text materials include literature and computer technology - -// Japanese frequency table, applied to both S-JIS and EUC-JP -//They are sorted in order. - -/****************************************************************************** - * 128 --> 0.77094 - * 256 --> 0.85710 - * 512 --> 0.92635 - * 1024 --> 0.97130 - * 2048 --> 0.99431 - * - * Idea Distribution Ratio = 0.92635 / (1-0.92635) = 12.58 - * Random Distribution Ration = 512 / (2965+62+83+86-512) = 0.191 - * - * Typical Distribution Ratio, 25% of IDR - *****************************************************************************/ - -#define JIS_TYPICAL_DISTRIBUTION_RATIO (float) 3.0 - - -//Char to FreqOrder table , -#define JIS_TABLE_SIZE 4368 - -static const PRInt16 JISCharToFreqOrder[] = -{ - 40, 1, 6, 182, 152, 180, 295,2127, 285, 381,3295,4304,3068,4606,3165,3510, // 16 -3511,1822,2785,4607,1193,2226,5070,4608, 171,2996,1247, 18, 179,5071, 856,1661, // 32 -1262,5072, 619, 127,3431,3512,3230,1899,1700, 232, 228,1294,1298, 284, 283,2041, // 48 -2042,1061,1062, 48, 49, 44, 45, 433, 434,1040,1041, 996, 787,2997,1255,4305, // 64 -2108,4609,1684,1648,5073,5074,5075,5076,5077,5078,3687,5079,4610,5080,3927,3928, // 80 -5081,3296,3432, 290,2285,1471,2187,5082,2580,2825,1303,2140,1739,1445,2691,3375, // 96 -1691,3297,4306,4307,4611, 452,3376,1182,2713,3688,3069,4308,5083,5084,5085,5086, // 112 -5087,5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102, // 128 -5103,5104,5105,5106,5107,5108,5109,5110,5111,5112,4097,5113,5114,5115,5116,5117, // 144 -5118,5119,5120,5121,5122,5123,5124,5125,5126,5127,5128,5129,5130,5131,5132,5133, // 160 -5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146,5147,5148,5149, // 176 -5150,5151,5152,4612,5153,5154,5155,5156,5157,5158,5159,5160,5161,5162,5163,5164, // 192 -5165,5166,5167,5168,5169,5170,5171,5172,5173,5174,5175,1472, 598, 618, 820,1205, // 208 -1309,1412,1858,1307,1692,5176,5177,5178,5179,5180,5181,5182,1142,1452,1234,1172, // 224 -1875,2043,2149,1793,1382,2973, 925,2404,1067,1241, 960,1377,2935,1491, 919,1217, // 240 -1865,2030,1406,1499,2749,4098,5183,5184,5185,5186,5187,5188,2561,4099,3117,1804, // 256 -2049,3689,4309,3513,1663,5189,3166,3118,3298,1587,1561,3433,5190,3119,1625,2998, // 272 -3299,4613,1766,3690,2786,4614,5191,5192,5193,5194,2161, 26,3377, 2,3929, 20, // 288 -3691, 47,4100, 50, 17, 16, 35, 268, 27, 243, 42, 155, 24, 154, 29, 184, // 304 - 4, 91, 14, 92, 53, 396, 33, 289, 9, 37, 64, 620, 21, 39, 321, 5, // 320 - 12, 11, 52, 13, 3, 208, 138, 0, 7, 60, 526, 141, 151,1069, 181, 275, // 336 -1591, 83, 132,1475, 126, 331, 829, 15, 69, 160, 59, 22, 157, 55,1079, 312, // 352 - 109, 38, 23, 25, 10, 19, 79,5195, 61, 382,1124, 8, 30,5196,5197,5198, // 368 -5199,5200,5201,5202,5203,5204,5205,5206, 89, 62, 74, 34,2416, 112, 139, 196, // 384 - 271, 149, 84, 607, 131, 765, 46, 88, 153, 683, 76, 874, 101, 258, 57, 80, // 400 - 32, 364, 121,1508, 169,1547, 68, 235, 145,2999, 41, 360,3027, 70, 63, 31, // 416 - 43, 259, 262,1383, 99, 533, 194, 66, 93, 846, 217, 192, 56, 106, 58, 565, // 432 - 280, 272, 311, 256, 146, 82, 308, 71, 100, 128, 214, 655, 110, 261, 104,1140, // 448 - 54, 51, 36, 87, 67,3070, 185,2618,2936,2020, 28,1066,2390,2059,5207,5208, // 464 -5209,5210,5211,5212,5213,5214,5215,5216,4615,5217,5218,5219,5220,5221,5222,5223, // 480 -5224,5225,5226,5227,5228,5229,5230,5231,5232,5233,5234,5235,5236,3514,5237,5238, // 496 -5239,5240,5241,5242,5243,5244,2297,2031,4616,4310,3692,5245,3071,5246,3598,5247, // 512 -4617,3231,3515,5248,4101,4311,4618,3808,4312,4102,5249,4103,4104,3599,5250,5251, // 528 -5252,5253,5254,5255,5256,5257,5258,5259,5260,5261,5262,5263,5264,5265,5266,5267, // 544 -5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278,5279,5280,5281,5282,5283, // 560 -5284,5285,5286,5287,5288,5289,5290,5291,5292,5293,5294,5295,5296,5297,5298,5299, // 576 -5300,5301,5302,5303,5304,5305,5306,5307,5308,5309,5310,5311,5312,5313,5314,5315, // 592 -5316,5317,5318,5319,5320,5321,5322,5323,5324,5325,5326,5327,5328,5329,5330,5331, // 608 -5332,5333,5334,5335,5336,5337,5338,5339,5340,5341,5342,5343,5344,5345,5346,5347, // 624 -5348,5349,5350,5351,5352,5353,5354,5355,5356,5357,5358,5359,5360,5361,5362,5363, // 640 -5364,5365,5366,5367,5368,5369,5370,5371,5372,5373,5374,5375,5376,5377,5378,5379, // 656 -5380,5381, 363, 642,2787,2878,2788,2789,2316,3232,2317,3434,2011, 165,1942,3930, // 672 -3931,3932,3933,5382,4619,5383,4620,5384,5385,5386,5387,5388,5389,5390,5391,5392, // 688 -5393,5394,5395,5396,5397,5398,5399,5400,5401,5402,5403,5404,5405,5406,5407,5408, // 704 -5409,5410,5411,5412,5413,5414,5415,5416,5417,5418,5419,5420,5421,5422,5423,5424, // 720 -5425,5426,5427,5428,5429,5430,5431,5432,5433,5434,5435,5436,5437,5438,5439,5440, // 736 -5441,5442,5443,5444,5445,5446,5447,5448,5449,5450,5451,5452,5453,5454,5455,5456, // 752 -5457,5458,5459,5460,5461,5462,5463,5464,5465,5466,5467,5468,5469,5470,5471,5472, // 768 -5473,5474,5475,5476,5477,5478,5479,5480,5481,5482,5483,5484,5485,5486,5487,5488, // 784 -5489,5490,5491,5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504, // 800 -5505,5506,5507,5508,5509,5510,5511,5512,5513,5514,5515,5516,5517,5518,5519,5520, // 816 -5521,5522,5523,5524,5525,5526,5527,5528,5529,5530,5531,5532,5533,5534,5535,5536, // 832 -5537,5538,5539,5540,5541,5542,5543,5544,5545,5546,5547,5548,5549,5550,5551,5552, // 848 -5553,5554,5555,5556,5557,5558,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568, // 864 -5569,5570,5571,5572,5573,5574,5575,5576,5577,5578,5579,5580,5581,5582,5583,5584, // 880 -5585,5586,5587,5588,5589,5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600, // 896 -5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,5615,5616, // 912 -5617,5618,5619,5620,5621,5622,5623,5624,5625,5626,5627,5628,5629,5630,5631,5632, // 928 -5633,5634,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646,5647,5648, // 944 -5649,5650,5651,5652,5653,5654,5655,5656,5657,5658,5659,5660,5661,5662,5663,5664, // 960 -5665,5666,5667,5668,5669,5670,5671,5672,5673,5674,5675,5676,5677,5678,5679,5680, // 976 -5681,5682,5683,5684,5685,5686,5687,5688,5689,5690,5691,5692,5693,5694,5695,5696, // 992 -5697,5698,5699,5700,5701,5702,5703,5704,5705,5706,5707,5708,5709,5710,5711,5712, // 1008 -5713,5714,5715,5716,5717,5718,5719,5720,5721,5722,5723,5724,5725,5726,5727,5728, // 1024 -5729,5730,5731,5732,5733,5734,5735,5736,5737,5738,5739,5740,5741,5742,5743,5744, // 1040 -5745,5746,5747,5748,5749,5750,5751,5752,5753,5754,5755,5756,5757,5758,5759,5760, // 1056 -5761,5762,5763,5764,5765,5766,5767,5768,5769,5770,5771,5772,5773,5774,5775,5776, // 1072 -5777,5778,5779,5780,5781,5782,5783,5784,5785,5786,5787,5788,5789,5790,5791,5792, // 1088 -5793,5794,5795,5796,5797,5798,5799,5800,5801,5802,5803,5804,5805,5806,5807,5808, // 1104 -5809,5810,5811,5812,5813,5814,5815,5816,5817,5818,5819,5820,5821,5822,5823,5824, // 1120 -5825,5826,5827,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840, // 1136 -5841,5842,5843,5844,5845,5846,5847,5848,5849,5850,5851,5852,5853,5854,5855,5856, // 1152 -5857,5858,5859,5860,5861,5862,5863,5864,5865,5866,5867,5868,5869,5870,5871,5872, // 1168 -5873,5874,5875,5876,5877,5878,5879,5880,5881,5882,5883,5884,5885,5886,5887,5888, // 1184 -5889,5890,5891,5892,5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904, // 1200 -5905,5906,5907,5908,5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920, // 1216 -5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936, // 1232 -5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952, // 1248 -5953,5954,5955,5956,5957,5958,5959,5960,5961,5962,5963,5964,5965,5966,5967,5968, // 1264 -5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5982,5983,5984, // 1280 -5985,5986,5987,5988,5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000, // 1296 -6001,6002,6003,6004,6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016, // 1312 -6017,6018,6019,6020,6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032, // 1328 -6033,6034,6035,6036,6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048, // 1344 -6049,6050,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064, // 1360 -6065,6066,6067,6068,6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080, // 1376 -6081,6082,6083,6084,6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096, // 1392 -6097,6098,6099,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112, // 1408 -6113,6114,2044,2060,4621, 997,1235, 473,1186,4622, 920,3378,6115,6116, 379,1108, // 1424 -4313,2657,2735,3934,6117,3809, 636,3233, 573,1026,3693,3435,2974,3300,2298,4105, // 1440 - 854,2937,2463, 393,2581,2417, 539, 752,1280,2750,2480, 140,1161, 440, 708,1569, // 1456 - 665,2497,1746,1291,1523,3000, 164,1603, 847,1331, 537,1997, 486, 508,1693,2418, // 1472 -1970,2227, 878,1220, 299,1030, 969, 652,2751, 624,1137,3301,2619, 65,3302,2045, // 1488 -1761,1859,3120,1930,3694,3516, 663,1767, 852, 835,3695, 269, 767,2826,2339,1305, // 1504 - 896,1150, 770,1616,6118, 506,1502,2075,1012,2519, 775,2520,2975,2340,2938,4314, // 1520 -3028,2086,1224,1943,2286,6119,3072,4315,2240,1273,1987,3935,1557, 175, 597, 985, // 1536 -3517,2419,2521,1416,3029, 585, 938,1931,1007,1052,1932,1685,6120,3379,4316,4623, // 1552 - 804, 599,3121,1333,2128,2539,1159,1554,2032,3810, 687,2033,2904, 952, 675,1467, // 1568 -3436,6121,2241,1096,1786,2440,1543,1924, 980,1813,2228, 781,2692,1879, 728,1918, // 1584 -3696,4624, 548,1950,4625,1809,1088,1356,3303,2522,1944, 502, 972, 373, 513,2827, // 1600 - 586,2377,2391,1003,1976,1631,6122,2464,1084, 648,1776,4626,2141, 324, 962,2012, // 1616 -2177,2076,1384, 742,2178,1448,1173,1810, 222, 102, 301, 445, 125,2420, 662,2498, // 1632 - 277, 200,1476,1165,1068, 224,2562,1378,1446, 450,1880, 659, 791, 582,4627,2939, // 1648 -3936,1516,1274, 555,2099,3697,1020,1389,1526,3380,1762,1723,1787,2229, 412,2114, // 1664 -1900,2392,3518, 512,2597, 427,1925,2341,3122,1653,1686,2465,2499, 697, 330, 273, // 1680 - 380,2162, 951, 832, 780, 991,1301,3073, 965,2270,3519, 668,2523,2636,1286, 535, // 1696 -1407, 518, 671, 957,2658,2378, 267, 611,2197,3030,6123, 248,2299, 967,1799,2356, // 1712 - 850,1418,3437,1876,1256,1480,2828,1718,6124,6125,1755,1664,2405,6126,4628,2879, // 1728 -2829, 499,2179, 676,4629, 557,2329,2214,2090, 325,3234, 464, 811,3001, 992,2342, // 1744 -2481,1232,1469, 303,2242, 466,1070,2163, 603,1777,2091,4630,2752,4631,2714, 322, // 1760 -2659,1964,1768, 481,2188,1463,2330,2857,3600,2092,3031,2421,4632,2318,2070,1849, // 1776 -2598,4633,1302,2254,1668,1701,2422,3811,2905,3032,3123,2046,4106,1763,1694,4634, // 1792 -1604, 943,1724,1454, 917, 868,2215,1169,2940, 552,1145,1800,1228,1823,1955, 316, // 1808 -1080,2510, 361,1807,2830,4107,2660,3381,1346,1423,1134,4108,6127, 541,1263,1229, // 1824 -1148,2540, 545, 465,1833,2880,3438,1901,3074,2482, 816,3937, 713,1788,2500, 122, // 1840 -1575, 195,1451,2501,1111,6128, 859, 374,1225,2243,2483,4317, 390,1033,3439,3075, // 1856 -2524,1687, 266, 793,1440,2599, 946, 779, 802, 507, 897,1081, 528,2189,1292, 711, // 1872 -1866,1725,1167,1640, 753, 398,2661,1053, 246, 348,4318, 137,1024,3440,1600,2077, // 1888 -2129, 825,4319, 698, 238, 521, 187,2300,1157,2423,1641,1605,1464,1610,1097,2541, // 1904 -1260,1436, 759,2255,1814,2150, 705,3235, 409,2563,3304, 561,3033,2005,2564, 726, // 1920 -1956,2343,3698,4109, 949,3812,3813,3520,1669, 653,1379,2525, 881,2198, 632,2256, // 1936 -1027, 778,1074, 733,1957, 514,1481,2466, 554,2180, 702,3938,1606,1017,1398,6129, // 1952 -1380,3521, 921, 993,1313, 594, 449,1489,1617,1166, 768,1426,1360, 495,1794,3601, // 1968 -1177,3602,1170,4320,2344, 476, 425,3167,4635,3168,1424, 401,2662,1171,3382,1998, // 1984 -1089,4110, 477,3169, 474,6130,1909, 596,2831,1842, 494, 693,1051,1028,1207,3076, // 2000 - 606,2115, 727,2790,1473,1115, 743,3522, 630, 805,1532,4321,2021, 366,1057, 838, // 2016 - 684,1114,2142,4322,2050,1492,1892,1808,2271,3814,2424,1971,1447,1373,3305,1090, // 2032 -1536,3939,3523,3306,1455,2199, 336, 369,2331,1035, 584,2393, 902, 718,2600,6131, // 2048 -2753, 463,2151,1149,1611,2467, 715,1308,3124,1268, 343,1413,3236,1517,1347,2663, // 2064 -2093,3940,2022,1131,1553,2100,2941,1427,3441,2942,1323,2484,6132,1980, 872,2368, // 2080 -2441,2943, 320,2369,2116,1082, 679,1933,3941,2791,3815, 625,1143,2023, 422,2200, // 2096 -3816,6133, 730,1695, 356,2257,1626,2301,2858,2637,1627,1778, 937, 883,2906,2693, // 2112 -3002,1769,1086, 400,1063,1325,3307,2792,4111,3077, 456,2345,1046, 747,6134,1524, // 2128 - 884,1094,3383,1474,2164,1059, 974,1688,2181,2258,1047, 345,1665,1187, 358, 875, // 2144 -3170, 305, 660,3524,2190,1334,1135,3171,1540,1649,2542,1527, 927, 968,2793, 885, // 2160 -1972,1850, 482, 500,2638,1218,1109,1085,2543,1654,2034, 876, 78,2287,1482,1277, // 2176 - 861,1675,1083,1779, 724,2754, 454, 397,1132,1612,2332, 893, 672,1237, 257,2259, // 2192 -2370, 135,3384, 337,2244, 547, 352, 340, 709,2485,1400, 788,1138,2511, 540, 772, // 2208 -1682,2260,2272,2544,2013,1843,1902,4636,1999,1562,2288,4637,2201,1403,1533, 407, // 2224 - 576,3308,1254,2071, 978,3385, 170, 136,1201,3125,2664,3172,2394, 213, 912, 873, // 2240 -3603,1713,2202, 699,3604,3699, 813,3442, 493, 531,1054, 468,2907,1483, 304, 281, // 2256 -4112,1726,1252,2094, 339,2319,2130,2639, 756,1563,2944, 748, 571,2976,1588,2425, // 2272 -2715,1851,1460,2426,1528,1392,1973,3237, 288,3309, 685,3386, 296, 892,2716,2216, // 2288 -1570,2245, 722,1747,2217, 905,3238,1103,6135,1893,1441,1965, 251,1805,2371,3700, // 2304 -2601,1919,1078, 75,2182,1509,1592,1270,2640,4638,2152,6136,3310,3817, 524, 706, // 2320 -1075, 292,3818,1756,2602, 317, 98,3173,3605,3525,1844,2218,3819,2502, 814, 567, // 2336 - 385,2908,1534,6137, 534,1642,3239, 797,6138,1670,1529, 953,4323, 188,1071, 538, // 2352 - 178, 729,3240,2109,1226,1374,2000,2357,2977, 731,2468,1116,2014,2051,6139,1261, // 2368 -1593, 803,2859,2736,3443, 556, 682, 823,1541,6140,1369,2289,1706,2794, 845, 462, // 2384 -2603,2665,1361, 387, 162,2358,1740, 739,1770,1720,1304,1401,3241,1049, 627,1571, // 2400 -2427,3526,1877,3942,1852,1500, 431,1910,1503, 677, 297,2795, 286,1433,1038,1198, // 2416 -2290,1133,1596,4113,4639,2469,1510,1484,3943,6141,2442, 108, 712,4640,2372, 866, // 2432 -3701,2755,3242,1348, 834,1945,1408,3527,2395,3243,1811, 824, 994,1179,2110,1548, // 2448 -1453, 790,3003, 690,4324,4325,2832,2909,3820,1860,3821, 225,1748, 310, 346,1780, // 2464 -2470, 821,1993,2717,2796, 828, 877,3528,2860,2471,1702,2165,2910,2486,1789, 453, // 2480 - 359,2291,1676, 73,1164,1461,1127,3311, 421, 604, 314,1037, 589, 116,2487, 737, // 2496 - 837,1180, 111, 244, 735,6142,2261,1861,1362, 986, 523, 418, 581,2666,3822, 103, // 2512 - 855, 503,1414,1867,2488,1091, 657,1597, 979, 605,1316,4641,1021,2443,2078,2001, // 2528 -1209, 96, 587,2166,1032, 260,1072,2153, 173, 94, 226,3244, 819,2006,4642,4114, // 2544 -2203, 231,1744, 782, 97,2667, 786,3387, 887, 391, 442,2219,4326,1425,6143,2694, // 2560 - 633,1544,1202, 483,2015, 592,2052,1958,2472,1655, 419, 129,4327,3444,3312,1714, // 2576 -1257,3078,4328,1518,1098, 865,1310,1019,1885,1512,1734, 469,2444, 148, 773, 436, // 2592 -1815,1868,1128,1055,4329,1245,2756,3445,2154,1934,1039,4643, 579,1238, 932,2320, // 2608 - 353, 205, 801, 115,2428, 944,2321,1881, 399,2565,1211, 678, 766,3944, 335,2101, // 2624 -1459,1781,1402,3945,2737,2131,1010, 844, 981,1326,1013, 550,1816,1545,2620,1335, // 2640 -1008, 371,2881, 936,1419,1613,3529,1456,1395,2273,1834,2604,1317,2738,2503, 416, // 2656 -1643,4330, 806,1126, 229, 591,3946,1314,1981,1576,1837,1666, 347,1790, 977,3313, // 2672 - 764,2861,1853, 688,2429,1920,1462, 77, 595, 415,2002,3034, 798,1192,4115,6144, // 2688 -2978,4331,3035,2695,2582,2072,2566, 430,2430,1727, 842,1396,3947,3702, 613, 377, // 2704 - 278, 236,1417,3388,3314,3174, 757,1869, 107,3530,6145,1194, 623,2262, 207,1253, // 2720 -2167,3446,3948, 492,1117,1935, 536,1838,2757,1246,4332, 696,2095,2406,1393,1572, // 2736 -3175,1782, 583, 190, 253,1390,2230, 830,3126,3389, 934,3245,1703,1749,2979,1870, // 2752 -2545,1656,2204, 869,2346,4116,3176,1817, 496,1764,4644, 942,1504, 404,1903,1122, // 2768 -1580,3606,2945,1022, 515, 372,1735, 955,2431,3036,6146,2797,1110,2302,2798, 617, // 2784 -6147, 441, 762,1771,3447,3607,3608,1904, 840,3037, 86, 939,1385, 572,1370,2445, // 2800 -1336, 114,3703, 898, 294, 203,3315, 703,1583,2274, 429, 961,4333,1854,1951,3390, // 2816 -2373,3704,4334,1318,1381, 966,1911,2322,1006,1155, 309, 989, 458,2718,1795,1372, // 2832 -1203, 252,1689,1363,3177, 517,1936, 168,1490, 562, 193,3823,1042,4117,1835, 551, // 2848 - 470,4645, 395, 489,3448,1871,1465,2583,2641, 417,1493, 279,1295, 511,1236,1119, // 2864 - 72,1231,1982,1812,3004, 871,1564, 984,3449,1667,2696,2096,4646,2347,2833,1673, // 2880 -3609, 695,3246,2668, 807,1183,4647, 890, 388,2333,1801,1457,2911,1765,1477,1031, // 2896 -3316,3317,1278,3391,2799,2292,2526, 163,3450,4335,2669,1404,1802,6148,2323,2407, // 2912 -1584,1728,1494,1824,1269, 298, 909,3318,1034,1632, 375, 776,1683,2061, 291, 210, // 2928 -1123, 809,1249,1002,2642,3038, 206,1011,2132, 144, 975, 882,1565, 342, 667, 754, // 2944 -1442,2143,1299,2303,2062, 447, 626,2205,1221,2739,2912,1144,1214,2206,2584, 760, // 2960 -1715, 614, 950,1281,2670,2621, 810, 577,1287,2546,4648, 242,2168, 250,2643, 691, // 2976 - 123,2644, 647, 313,1029, 689,1357,2946,1650, 216, 771,1339,1306, 808,2063, 549, // 2992 - 913,1371,2913,2914,6149,1466,1092,1174,1196,1311,2605,2396,1783,1796,3079, 406, // 3008 -2671,2117,3949,4649, 487,1825,2220,6150,2915, 448,2348,1073,6151,2397,1707, 130, // 3024 - 900,1598, 329, 176,1959,2527,1620,6152,2275,4336,3319,1983,2191,3705,3610,2155, // 3040 -3706,1912,1513,1614,6153,1988, 646, 392,2304,1589,3320,3039,1826,1239,1352,1340, // 3056 -2916, 505,2567,1709,1437,2408,2547, 906,6154,2672, 384,1458,1594,1100,1329, 710, // 3072 - 423,3531,2064,2231,2622,1989,2673,1087,1882, 333, 841,3005,1296,2882,2379, 580, // 3088 -1937,1827,1293,2585, 601, 574, 249,1772,4118,2079,1120, 645, 901,1176,1690, 795, // 3104 -2207, 478,1434, 516,1190,1530, 761,2080, 930,1264, 355, 435,1552, 644,1791, 987, // 3120 - 220,1364,1163,1121,1538, 306,2169,1327,1222, 546,2645, 218, 241, 610,1704,3321, // 3136 -1984,1839,1966,2528, 451,6155,2586,3707,2568, 907,3178, 254,2947, 186,1845,4650, // 3152 - 745, 432,1757, 428,1633, 888,2246,2221,2489,3611,2118,1258,1265, 956,3127,1784, // 3168 -4337,2490, 319, 510, 119, 457,3612, 274,2035,2007,4651,1409,3128, 970,2758, 590, // 3184 -2800, 661,2247,4652,2008,3950,1420,1549,3080,3322,3951,1651,1375,2111, 485,2491, // 3200 -1429,1156,6156,2548,2183,1495, 831,1840,2529,2446, 501,1657, 307,1894,3247,1341, // 3216 - 666, 899,2156,1539,2549,1559, 886, 349,2208,3081,2305,1736,3824,2170,2759,1014, // 3232 -1913,1386, 542,1397,2948, 490, 368, 716, 362, 159, 282,2569,1129,1658,1288,1750, // 3248 -2674, 276, 649,2016, 751,1496, 658,1818,1284,1862,2209,2087,2512,3451, 622,2834, // 3264 - 376, 117,1060,2053,1208,1721,1101,1443, 247,1250,3179,1792,3952,2760,2398,3953, // 3280 -6157,2144,3708, 446,2432,1151,2570,3452,2447,2761,2835,1210,2448,3082, 424,2222, // 3296 -1251,2449,2119,2836, 504,1581,4338, 602, 817, 857,3825,2349,2306, 357,3826,1470, // 3312 -1883,2883, 255, 958, 929,2917,3248, 302,4653,1050,1271,1751,2307,1952,1430,2697, // 3328 -2719,2359, 354,3180, 777, 158,2036,4339,1659,4340,4654,2308,2949,2248,1146,2232, // 3344 -3532,2720,1696,2623,3827,6158,3129,1550,2698,1485,1297,1428, 637, 931,2721,2145, // 3360 - 914,2550,2587, 81,2450, 612, 827,2646,1242,4655,1118,2884, 472,1855,3181,3533, // 3376 -3534, 569,1353,2699,1244,1758,2588,4119,2009,2762,2171,3709,1312,1531,6159,1152, // 3392 -1938, 134,1830, 471,3710,2276,1112,1535,3323,3453,3535, 982,1337,2950, 488, 826, // 3408 - 674,1058,1628,4120,2017, 522,2399, 211, 568,1367,3454, 350, 293,1872,1139,3249, // 3424 -1399,1946,3006,1300,2360,3324, 588, 736,6160,2606, 744, 669,3536,3828,6161,1358, // 3440 - 199, 723, 848, 933, 851,1939,1505,1514,1338,1618,1831,4656,1634,3613, 443,2740, // 3456 -3829, 717,1947, 491,1914,6162,2551,1542,4121,1025,6163,1099,1223, 198,3040,2722, // 3472 - 370, 410,1905,2589, 998,1248,3182,2380, 519,1449,4122,1710, 947, 928,1153,4341, // 3488 -2277, 344,2624,1511, 615, 105, 161,1212,1076,1960,3130,2054,1926,1175,1906,2473, // 3504 - 414,1873,2801,6164,2309, 315,1319,3325, 318,2018,2146,2157, 963, 631, 223,4342, // 3520 -4343,2675, 479,3711,1197,2625,3712,2676,2361,6165,4344,4123,6166,2451,3183,1886, // 3536 -2184,1674,1330,1711,1635,1506, 799, 219,3250,3083,3954,1677,3713,3326,2081,3614, // 3552 -1652,2073,4657,1147,3041,1752, 643,1961, 147,1974,3955,6167,1716,2037, 918,3007, // 3568 -1994, 120,1537, 118, 609,3184,4345, 740,3455,1219, 332,1615,3830,6168,1621,2980, // 3584 -1582, 783, 212, 553,2350,3714,1349,2433,2082,4124, 889,6169,2310,1275,1410, 973, // 3600 - 166,1320,3456,1797,1215,3185,2885,1846,2590,2763,4658, 629, 822,3008, 763, 940, // 3616 -1990,2862, 439,2409,1566,1240,1622, 926,1282,1907,2764, 654,2210,1607, 327,1130, // 3632 -3956,1678,1623,6170,2434,2192, 686, 608,3831,3715, 903,3957,3042,6171,2741,1522, // 3648 -1915,1105,1555,2552,1359, 323,3251,4346,3457, 738,1354,2553,2311,2334,1828,2003, // 3664 -3832,1753,2351,1227,6172,1887,4125,1478,6173,2410,1874,1712,1847, 520,1204,2607, // 3680 - 264,4659, 836,2677,2102, 600,4660,3833,2278,3084,6174,4347,3615,1342, 640, 532, // 3696 - 543,2608,1888,2400,2591,1009,4348,1497, 341,1737,3616,2723,1394, 529,3252,1321, // 3712 - 983,4661,1515,2120, 971,2592, 924, 287,1662,3186,4349,2700,4350,1519, 908,1948, // 3728 -2452, 156, 796,1629,1486,2223,2055, 694,4126,1259,1036,3392,1213,2249,2742,1889, // 3744 -1230,3958,1015, 910, 408, 559,3617,4662, 746, 725, 935,4663,3959,3009,1289, 563, // 3760 - 867,4664,3960,1567,2981,2038,2626, 988,2263,2381,4351, 143,2374, 704,1895,6175, // 3776 -1188,3716,2088, 673,3085,2362,4352, 484,1608,1921,2765,2918, 215, 904,3618,3537, // 3792 - 894, 509, 976,3043,2701,3961,4353,2837,2982, 498,6176,6177,1102,3538,1332,3393, // 3808 -1487,1636,1637, 233, 245,3962, 383, 650, 995,3044, 460,1520,1206,2352, 749,3327, // 3824 - 530, 700, 389,1438,1560,1773,3963,2264, 719,2951,2724,3834, 870,1832,1644,1000, // 3840 - 839,2474,3717, 197,1630,3394, 365,2886,3964,1285,2133, 734, 922, 818,1106, 732, // 3856 - 480,2083,1774,3458, 923,2279,1350, 221,3086, 85,2233,2234,3835,1585,3010,2147, // 3872 -1387,1705,2382,1619,2475, 133, 239,2802,1991,1016,2084,2383, 411,2838,1113, 651, // 3888 -1985,1160,3328, 990,1863,3087,1048,1276,2647, 265,2627,1599,3253,2056, 150, 638, // 3904 -2019, 656, 853, 326,1479, 680,1439,4354,1001,1759, 413,3459,3395,2492,1431, 459, // 3920 -4355,1125,3329,2265,1953,1450,2065,2863, 849, 351,2678,3131,3254,3255,1104,1577, // 3936 - 227,1351,1645,2453,2193,1421,2887, 812,2121, 634, 95,2435, 201,2312,4665,1646, // 3952 -1671,2743,1601,2554,2702,2648,2280,1315,1366,2089,3132,1573,3718,3965,1729,1189, // 3968 - 328,2679,1077,1940,1136, 558,1283, 964,1195, 621,2074,1199,1743,3460,3619,1896, // 3984 -1916,1890,3836,2952,1154,2112,1064, 862, 378,3011,2066,2113,2803,1568,2839,6178, // 4000 -3088,2919,1941,1660,2004,1992,2194, 142, 707,1590,1708,1624,1922,1023,1836,1233, // 4016 -1004,2313, 789, 741,3620,6179,1609,2411,1200,4127,3719,3720,4666,2057,3721, 593, // 4032 -2840, 367,2920,1878,6180,3461,1521, 628,1168, 692,2211,2649, 300, 720,2067,2571, // 4048 -2953,3396, 959,2504,3966,3539,3462,1977, 701,6181, 954,1043, 800, 681, 183,3722, // 4064 -1803,1730,3540,4128,2103, 815,2314, 174, 467, 230,2454,1093,2134, 755,3541,3397, // 4080 -1141,1162,6182,1738,2039, 270,3256,2513,1005,1647,2185,3837, 858,1679,1897,1719, // 4096 -2954,2324,1806, 402, 670, 167,4129,1498,2158,2104, 750,6183, 915, 189,1680,1551, // 4112 - 455,4356,1501,2455, 405,1095,2955, 338,1586,1266,1819, 570, 641,1324, 237,1556, // 4128 -2650,1388,3723,6184,1368,2384,1343,1978,3089,2436, 879,3724, 792,1191, 758,3012, // 4144 -1411,2135,1322,4357, 240,4667,1848,3725,1574,6185, 420,3045,1546,1391, 714,4358, // 4160 -1967, 941,1864, 863, 664, 426, 560,1731,2680,1785,2864,1949,2363, 403,3330,1415, // 4176 -1279,2136,1697,2335, 204, 721,2097,3838, 90,6186,2085,2505, 191,3967, 124,2148, // 4192 -1376,1798,1178,1107,1898,1405, 860,4359,1243,1272,2375,2983,1558,2456,1638, 113, // 4208 -3621, 578,1923,2609, 880, 386,4130, 784,2186,2266,1422,2956,2172,1722, 497, 263, // 4224 -2514,1267,2412,2610, 177,2703,3542, 774,1927,1344, 616,1432,1595,1018, 172,4360, // 4240 -2325, 911,4361, 438,1468,3622, 794,3968,2024,2173,1681,1829,2957, 945, 895,3090, // 4256 - 575,2212,2476, 475,2401,2681, 785,2744,1745,2293,2555,1975,3133,2865, 394,4668, // 4272 -3839, 635,4131, 639, 202,1507,2195,2766,1345,1435,2572,3726,1908,1184,1181,2457, // 4288 -3727,3134,4362, 843,2611, 437, 916,4669, 234, 769,1884,3046,3047,3623, 833,6187, // 4304 -1639,2250,2402,1355,1185,2010,2047, 999, 525,1732,1290,1488,2612, 948,1578,3728, // 4320 -2413,2477,1216,2725,2159, 334,3840,1328,3624,2921,1525,4132, 564,1056, 891,4363, // 4336 -1444,1698,2385,2251,3729,1365,2281,2235,1717,6188, 864,3841,2515, 444, 527,2767, // 4352 -2922,3625, 544, 461,6189, 566, 209,2437,3398,2098,1065,2068,3331,3626,3257,2137, // 4368 //last 512 - -/*************************************************************************************** - *Everything below is of no interest for detection purpose * - *************************************************************************************** - -2138,2122,3730,2888,1995,1820,1044,6190,6191,6192,6193,6194,6195,6196,6197,6198, // 4384 -6199,6200,6201,6202,6203,6204,6205,4670,6206,6207,6208,6209,6210,6211,6212,6213, // 4400 -6214,6215,6216,6217,6218,6219,6220,6221,6222,6223,6224,6225,6226,6227,6228,6229, // 4416 -6230,6231,6232,6233,6234,6235,6236,6237,3187,6238,6239,3969,6240,6241,6242,6243, // 4432 -6244,4671,6245,6246,4672,6247,6248,4133,6249,6250,4364,6251,2923,2556,2613,4673, // 4448 -4365,3970,6252,6253,6254,6255,4674,6256,6257,6258,2768,2353,4366,4675,4676,3188, // 4464 -4367,3463,6259,4134,4677,4678,6260,2267,6261,3842,3332,4368,3543,6262,6263,6264, // 4480 -3013,1954,1928,4135,4679,6265,6266,2478,3091,6267,4680,4369,6268,6269,1699,6270, // 4496 -3544,4136,4681,6271,4137,6272,4370,2804,6273,6274,2593,3971,3972,4682,6275,2236, // 4512 -4683,6276,6277,4684,6278,6279,4138,3973,4685,6280,6281,3258,6282,6283,6284,6285, // 4528 -3974,4686,2841,3975,6286,6287,3545,6288,6289,4139,4687,4140,6290,4141,6291,4142, // 4544 -6292,6293,3333,6294,6295,6296,4371,6297,3399,6298,6299,4372,3976,6300,6301,6302, // 4560 -4373,6303,6304,3843,3731,6305,4688,4374,6306,6307,3259,2294,6308,3732,2530,4143, // 4576 -6309,4689,6310,6311,6312,3048,6313,6314,4690,3733,2237,6315,6316,2282,3334,6317, // 4592 -6318,3844,6319,6320,4691,6321,3400,4692,6322,4693,6323,3049,6324,4375,6325,3977, // 4608 -6326,6327,6328,3546,6329,4694,3335,6330,4695,4696,6331,6332,6333,6334,4376,3978, // 4624 -6335,4697,3979,4144,6336,3980,4698,6337,6338,6339,6340,6341,4699,4700,4701,6342, // 4640 -6343,4702,6344,6345,4703,6346,6347,4704,6348,4705,4706,3135,6349,4707,6350,4708, // 4656 -6351,4377,6352,4709,3734,4145,6353,2506,4710,3189,6354,3050,4711,3981,6355,3547, // 4672 -3014,4146,4378,3735,2651,3845,3260,3136,2224,1986,6356,3401,6357,4712,2594,3627, // 4688 -3137,2573,3736,3982,4713,3628,4714,4715,2682,3629,4716,6358,3630,4379,3631,6359, // 4704 -6360,6361,3983,6362,6363,6364,6365,4147,3846,4717,6366,6367,3737,2842,6368,4718, // 4720 -2628,6369,3261,6370,2386,6371,6372,3738,3984,4719,3464,4720,3402,6373,2924,3336, // 4736 -4148,2866,6374,2805,3262,4380,2704,2069,2531,3138,2806,2984,6375,2769,6376,4721, // 4752 -4722,3403,6377,6378,3548,6379,6380,2705,3092,1979,4149,2629,3337,2889,6381,3338, // 4768 -4150,2557,3339,4381,6382,3190,3263,3739,6383,4151,4723,4152,2558,2574,3404,3191, // 4784 -6384,6385,4153,6386,4724,4382,6387,6388,4383,6389,6390,4154,6391,4725,3985,6392, // 4800 -3847,4155,6393,6394,6395,6396,6397,3465,6398,4384,6399,6400,6401,6402,6403,6404, // 4816 -4156,6405,6406,6407,6408,2123,6409,6410,2326,3192,4726,6411,6412,6413,6414,4385, // 4832 -4157,6415,6416,4158,6417,3093,3848,6418,3986,6419,6420,3849,6421,6422,6423,4159, // 4848 -6424,6425,4160,6426,3740,6427,6428,6429,6430,3987,6431,4727,6432,2238,6433,6434, // 4864 -4386,3988,6435,6436,3632,6437,6438,2843,6439,6440,6441,6442,3633,6443,2958,6444, // 4880 -6445,3466,6446,2364,4387,3850,6447,4388,2959,3340,6448,3851,6449,4728,6450,6451, // 4896 -3264,4729,6452,3193,6453,4389,4390,2706,3341,4730,6454,3139,6455,3194,6456,3051, // 4912 -2124,3852,1602,4391,4161,3853,1158,3854,4162,3989,4392,3990,4731,4732,4393,2040, // 4928 -4163,4394,3265,6457,2807,3467,3855,6458,6459,6460,3991,3468,4733,4734,6461,3140, // 4944 -2960,6462,4735,6463,6464,6465,6466,4736,4737,4738,4739,6467,6468,4164,2403,3856, // 4960 -6469,6470,2770,2844,6471,4740,6472,6473,6474,6475,6476,6477,6478,3195,6479,4741, // 4976 -4395,6480,2867,6481,4742,2808,6482,2493,4165,6483,6484,6485,6486,2295,4743,6487, // 4992 -6488,6489,3634,6490,6491,6492,6493,6494,6495,6496,2985,4744,6497,6498,4745,6499, // 5008 -6500,2925,3141,4166,6501,6502,4746,6503,6504,4747,6505,6506,6507,2890,6508,6509, // 5024 -6510,6511,6512,6513,6514,6515,6516,6517,6518,6519,3469,4167,6520,6521,6522,4748, // 5040 -4396,3741,4397,4749,4398,3342,2125,4750,6523,4751,4752,4753,3052,6524,2961,4168, // 5056 -6525,4754,6526,4755,4399,2926,4169,6527,3857,6528,4400,4170,6529,4171,6530,6531, // 5072 -2595,6532,6533,6534,6535,3635,6536,6537,6538,6539,6540,6541,6542,4756,6543,6544, // 5088 -6545,6546,6547,6548,4401,6549,6550,6551,6552,4402,3405,4757,4403,6553,6554,6555, // 5104 -4172,3742,6556,6557,6558,3992,3636,6559,6560,3053,2726,6561,3549,4173,3054,4404, // 5120 -6562,6563,3993,4405,3266,3550,2809,4406,6564,6565,6566,4758,4759,6567,3743,6568, // 5136 -4760,3744,4761,3470,6569,6570,6571,4407,6572,3745,4174,6573,4175,2810,4176,3196, // 5152 -4762,6574,4177,6575,6576,2494,2891,3551,6577,6578,3471,6579,4408,6580,3015,3197, // 5168 -6581,3343,2532,3994,3858,6582,3094,3406,4409,6583,2892,4178,4763,4410,3016,4411, // 5184 -6584,3995,3142,3017,2683,6585,4179,6586,6587,4764,4412,6588,6589,4413,6590,2986, // 5200 -6591,2962,3552,6592,2963,3472,6593,6594,4180,4765,6595,6596,2225,3267,4414,6597, // 5216 -3407,3637,4766,6598,6599,3198,6600,4415,6601,3859,3199,6602,3473,4767,2811,4416, // 5232 -1856,3268,3200,2575,3996,3997,3201,4417,6603,3095,2927,6604,3143,6605,2268,6606, // 5248 -3998,3860,3096,2771,6607,6608,3638,2495,4768,6609,3861,6610,3269,2745,4769,4181, // 5264 -3553,6611,2845,3270,6612,6613,6614,3862,6615,6616,4770,4771,6617,3474,3999,4418, // 5280 -4419,6618,3639,3344,6619,4772,4182,6620,2126,6621,6622,6623,4420,4773,6624,3018, // 5296 -6625,4774,3554,6626,4183,2025,3746,6627,4184,2707,6628,4421,4422,3097,1775,4185, // 5312 -3555,6629,6630,2868,6631,6632,4423,6633,6634,4424,2414,2533,2928,6635,4186,2387, // 5328 -6636,4775,6637,4187,6638,1891,4425,3202,3203,6639,6640,4776,6641,3345,6642,6643, // 5344 -3640,6644,3475,3346,3641,4000,6645,3144,6646,3098,2812,4188,3642,3204,6647,3863, // 5360 -3476,6648,3864,6649,4426,4001,6650,6651,6652,2576,6653,4189,4777,6654,6655,6656, // 5376 -2846,6657,3477,3205,4002,6658,4003,6659,3347,2252,6660,6661,6662,4778,6663,6664, // 5392 -6665,6666,6667,6668,6669,4779,4780,2048,6670,3478,3099,6671,3556,3747,4004,6672, // 5408 -6673,6674,3145,4005,3748,6675,6676,6677,6678,6679,3408,6680,6681,6682,6683,3206, // 5424 -3207,6684,6685,4781,4427,6686,4782,4783,4784,6687,6688,6689,4190,6690,6691,3479, // 5440 -6692,2746,6693,4428,6694,6695,6696,6697,6698,6699,4785,6700,6701,3208,2727,6702, // 5456 -3146,6703,6704,3409,2196,6705,4429,6706,6707,6708,2534,1996,6709,6710,6711,2747, // 5472 -6712,6713,6714,4786,3643,6715,4430,4431,6716,3557,6717,4432,4433,6718,6719,6720, // 5488 -6721,3749,6722,4006,4787,6723,6724,3644,4788,4434,6725,6726,4789,2772,6727,6728, // 5504 -6729,6730,6731,2708,3865,2813,4435,6732,6733,4790,4791,3480,6734,6735,6736,6737, // 5520 -4436,3348,6738,3410,4007,6739,6740,4008,6741,6742,4792,3411,4191,6743,6744,6745, // 5536 -6746,6747,3866,6748,3750,6749,6750,6751,6752,6753,6754,6755,3867,6756,4009,6757, // 5552 -4793,4794,6758,2814,2987,6759,6760,6761,4437,6762,6763,6764,6765,3645,6766,6767, // 5568 -3481,4192,6768,3751,6769,6770,2174,6771,3868,3752,6772,6773,6774,4193,4795,4438, // 5584 -3558,4796,4439,6775,4797,6776,6777,4798,6778,4799,3559,4800,6779,6780,6781,3482, // 5600 -6782,2893,6783,6784,4194,4801,4010,6785,6786,4440,6787,4011,6788,6789,6790,6791, // 5616 -6792,6793,4802,6794,6795,6796,4012,6797,6798,6799,6800,3349,4803,3483,6801,4804, // 5632 -4195,6802,4013,6803,6804,4196,6805,4014,4015,6806,2847,3271,2848,6807,3484,6808, // 5648 -6809,6810,4441,6811,4442,4197,4443,3272,4805,6812,3412,4016,1579,6813,6814,4017, // 5664 -6815,3869,6816,2964,6817,4806,6818,6819,4018,3646,6820,6821,4807,4019,4020,6822, // 5680 -6823,3560,6824,6825,4021,4444,6826,4198,6827,6828,4445,6829,6830,4199,4808,6831, // 5696 -6832,6833,3870,3019,2458,6834,3753,3413,3350,6835,4809,3871,4810,3561,4446,6836, // 5712 -6837,4447,4811,4812,6838,2459,4448,6839,4449,6840,6841,4022,3872,6842,4813,4814, // 5728 -6843,6844,4815,4200,4201,4202,6845,4023,6846,6847,4450,3562,3873,6848,6849,4816, // 5744 -4817,6850,4451,4818,2139,6851,3563,6852,6853,3351,6854,6855,3352,4024,2709,3414, // 5760 -4203,4452,6856,4204,6857,6858,3874,3875,6859,6860,4819,6861,6862,6863,6864,4453, // 5776 -3647,6865,6866,4820,6867,6868,6869,6870,4454,6871,2869,6872,6873,4821,6874,3754, // 5792 -6875,4822,4205,6876,6877,6878,3648,4206,4455,6879,4823,6880,4824,3876,6881,3055, // 5808 -4207,6882,3415,6883,6884,6885,4208,4209,6886,4210,3353,6887,3354,3564,3209,3485, // 5824 -2652,6888,2728,6889,3210,3755,6890,4025,4456,6891,4825,6892,6893,6894,6895,4211, // 5840 -6896,6897,6898,4826,6899,6900,4212,6901,4827,6902,2773,3565,6903,4828,6904,6905, // 5856 -6906,6907,3649,3650,6908,2849,3566,6909,3567,3100,6910,6911,6912,6913,6914,6915, // 5872 -4026,6916,3355,4829,3056,4457,3756,6917,3651,6918,4213,3652,2870,6919,4458,6920, // 5888 -2438,6921,6922,3757,2774,4830,6923,3356,4831,4832,6924,4833,4459,3653,2507,6925, // 5904 -4834,2535,6926,6927,3273,4027,3147,6928,3568,6929,6930,6931,4460,6932,3877,4461, // 5920 -2729,3654,6933,6934,6935,6936,2175,4835,2630,4214,4028,4462,4836,4215,6937,3148, // 5936 -4216,4463,4837,4838,4217,6938,6939,2850,4839,6940,4464,6941,6942,6943,4840,6944, // 5952 -4218,3274,4465,6945,6946,2710,6947,4841,4466,6948,6949,2894,6950,6951,4842,6952, // 5968 -4219,3057,2871,6953,6954,6955,6956,4467,6957,2711,6958,6959,6960,3275,3101,4843, // 5984 -6961,3357,3569,6962,4844,6963,6964,4468,4845,3570,6965,3102,4846,3758,6966,4847, // 6000 -3878,4848,4849,4029,6967,2929,3879,4850,4851,6968,6969,1733,6970,4220,6971,6972, // 6016 -6973,6974,6975,6976,4852,6977,6978,6979,6980,6981,6982,3759,6983,6984,6985,3486, // 6032 -3487,6986,3488,3416,6987,6988,6989,6990,6991,6992,6993,6994,6995,6996,6997,4853, // 6048 -6998,6999,4030,7000,7001,3211,7002,7003,4221,7004,7005,3571,4031,7006,3572,7007, // 6064 -2614,4854,2577,7008,7009,2965,3655,3656,4855,2775,3489,3880,4222,4856,3881,4032, // 6080 -3882,3657,2730,3490,4857,7010,3149,7011,4469,4858,2496,3491,4859,2283,7012,7013, // 6096 -7014,2365,4860,4470,7015,7016,3760,7017,7018,4223,1917,7019,7020,7021,4471,7022, // 6112 -2776,4472,7023,7024,7025,7026,4033,7027,3573,4224,4861,4034,4862,7028,7029,1929, // 6128 -3883,4035,7030,4473,3058,7031,2536,3761,3884,7032,4036,7033,2966,2895,1968,4474, // 6144 -3276,4225,3417,3492,4226,2105,7034,7035,1754,2596,3762,4227,4863,4475,3763,4864, // 6160 -3764,2615,2777,3103,3765,3658,3418,4865,2296,3766,2815,7036,7037,7038,3574,2872, // 6176 -3277,4476,7039,4037,4477,7040,7041,4038,7042,7043,7044,7045,7046,7047,2537,7048, // 6192 -7049,7050,7051,7052,7053,7054,4478,7055,7056,3767,3659,4228,3575,7057,7058,4229, // 6208 -7059,7060,7061,3660,7062,3212,7063,3885,4039,2460,7064,7065,7066,7067,7068,7069, // 6224 -7070,7071,7072,7073,7074,4866,3768,4867,7075,7076,7077,7078,4868,3358,3278,2653, // 6240 -7079,7080,4479,3886,7081,7082,4869,7083,7084,7085,7086,7087,7088,2538,7089,7090, // 6256 -7091,4040,3150,3769,4870,4041,2896,3359,4230,2930,7092,3279,7093,2967,4480,3213, // 6272 -4481,3661,7094,7095,7096,7097,7098,7099,7100,7101,7102,2461,3770,7103,7104,4231, // 6288 -3151,7105,7106,7107,4042,3662,7108,7109,4871,3663,4872,4043,3059,7110,7111,7112, // 6304 -3493,2988,7113,4873,7114,7115,7116,3771,4874,7117,7118,4232,4875,7119,3576,2336, // 6320 -4876,7120,4233,3419,4044,4877,4878,4482,4483,4879,4484,4234,7121,3772,4880,1045, // 6336 -3280,3664,4881,4882,7122,7123,7124,7125,4883,7126,2778,7127,4485,4486,7128,4884, // 6352 -3214,3887,7129,7130,3215,7131,4885,4045,7132,7133,4046,7134,7135,7136,7137,7138, // 6368 -7139,7140,7141,7142,7143,4235,7144,4886,7145,7146,7147,4887,7148,7149,7150,4487, // 6384 -4047,4488,7151,7152,4888,4048,2989,3888,7153,3665,7154,4049,7155,7156,7157,7158, // 6400 -7159,7160,2931,4889,4890,4489,7161,2631,3889,4236,2779,7162,7163,4891,7164,3060, // 6416 -7165,1672,4892,7166,4893,4237,3281,4894,7167,7168,3666,7169,3494,7170,7171,4050, // 6432 -7172,7173,3104,3360,3420,4490,4051,2684,4052,7174,4053,7175,7176,7177,2253,4054, // 6448 -7178,7179,4895,7180,3152,3890,3153,4491,3216,7181,7182,7183,2968,4238,4492,4055, // 6464 -7184,2990,7185,2479,7186,7187,4493,7188,7189,7190,7191,7192,4896,7193,4897,2969, // 6480 -4494,4898,7194,3495,7195,7196,4899,4495,7197,3105,2731,7198,4900,7199,7200,7201, // 6496 -4056,7202,3361,7203,7204,4496,4901,4902,7205,4497,7206,7207,2315,4903,7208,4904, // 6512 -7209,4905,2851,7210,7211,3577,7212,3578,4906,7213,4057,3667,4907,7214,4058,2354, // 6528 -3891,2376,3217,3773,7215,7216,7217,7218,7219,4498,7220,4908,3282,2685,7221,3496, // 6544 -4909,2632,3154,4910,7222,2337,7223,4911,7224,7225,7226,4912,4913,3283,4239,4499, // 6560 -7227,2816,7228,7229,7230,7231,7232,7233,7234,4914,4500,4501,7235,7236,7237,2686, // 6576 -7238,4915,7239,2897,4502,7240,4503,7241,2516,7242,4504,3362,3218,7243,7244,7245, // 6592 -4916,7246,7247,4505,3363,7248,7249,7250,7251,3774,4506,7252,7253,4917,7254,7255, // 6608 -3284,2991,4918,4919,3219,3892,4920,3106,3497,4921,7256,7257,7258,4922,7259,4923, // 6624 -3364,4507,4508,4059,7260,4240,3498,7261,7262,4924,7263,2992,3893,4060,3220,7264, // 6640 -7265,7266,7267,7268,7269,4509,3775,7270,2817,7271,4061,4925,4510,3776,7272,4241, // 6656 -4511,3285,7273,7274,3499,7275,7276,7277,4062,4512,4926,7278,3107,3894,7279,7280, // 6672 -4927,7281,4513,7282,7283,3668,7284,7285,4242,4514,4243,7286,2058,4515,4928,4929, // 6688 -4516,7287,3286,4244,7288,4517,7289,7290,7291,3669,7292,7293,4930,4931,4932,2355, // 6704 -4933,7294,2633,4518,7295,4245,7296,7297,4519,7298,7299,4520,4521,4934,7300,4246, // 6720 -4522,7301,7302,7303,3579,7304,4247,4935,7305,4936,7306,7307,7308,7309,3777,7310, // 6736 -4523,7311,7312,7313,4248,3580,7314,4524,3778,4249,7315,3581,7316,3287,7317,3221, // 6752 -7318,4937,7319,7320,7321,7322,7323,7324,4938,4939,7325,4525,7326,7327,7328,4063, // 6768 -7329,7330,4940,7331,7332,4941,7333,4526,7334,3500,2780,1741,4942,2026,1742,7335, // 6784 -7336,3582,4527,2388,7337,7338,7339,4528,7340,4250,4943,7341,7342,7343,4944,7344, // 6800 -7345,7346,3020,7347,4945,7348,7349,7350,7351,3895,7352,3896,4064,3897,7353,7354, // 6816 -7355,4251,7356,7357,3898,7358,3779,7359,3780,3288,7360,7361,4529,7362,4946,4530, // 6832 -2027,7363,3899,4531,4947,3222,3583,7364,4948,7365,7366,7367,7368,4949,3501,4950, // 6848 -3781,4951,4532,7369,2517,4952,4252,4953,3155,7370,4954,4955,4253,2518,4533,7371, // 6864 -7372,2712,4254,7373,7374,7375,3670,4956,3671,7376,2389,3502,4065,7377,2338,7378, // 6880 -7379,7380,7381,3061,7382,4957,7383,7384,7385,7386,4958,4534,7387,7388,2993,7389, // 6896 -3062,7390,4959,7391,7392,7393,4960,3108,4961,7394,4535,7395,4962,3421,4536,7396, // 6912 -4963,7397,4964,1857,7398,4965,7399,7400,2176,3584,4966,7401,7402,3422,4537,3900, // 6928 -3585,7403,3782,7404,2852,7405,7406,7407,4538,3783,2654,3423,4967,4539,7408,3784, // 6944 -3586,2853,4540,4541,7409,3901,7410,3902,7411,7412,3785,3109,2327,3903,7413,7414, // 6960 -2970,4066,2932,7415,7416,7417,3904,3672,3424,7418,4542,4543,4544,7419,4968,7420, // 6976 -7421,4255,7422,7423,7424,7425,7426,4067,7427,3673,3365,4545,7428,3110,2559,3674, // 6992 -7429,7430,3156,7431,7432,3503,7433,3425,4546,7434,3063,2873,7435,3223,4969,4547, // 7008 -4548,2898,4256,4068,7436,4069,3587,3786,2933,3787,4257,4970,4971,3788,7437,4972, // 7024 -3064,7438,4549,7439,7440,7441,7442,7443,4973,3905,7444,2874,7445,7446,7447,7448, // 7040 -3021,7449,4550,3906,3588,4974,7450,7451,3789,3675,7452,2578,7453,4070,7454,7455, // 7056 -7456,4258,3676,7457,4975,7458,4976,4259,3790,3504,2634,4977,3677,4551,4260,7459, // 7072 -7460,7461,7462,3907,4261,4978,7463,7464,7465,7466,4979,4980,7467,7468,2213,4262, // 7088 -7469,7470,7471,3678,4981,7472,2439,7473,4263,3224,3289,7474,3908,2415,4982,7475, // 7104 -4264,7476,4983,2655,7477,7478,2732,4552,2854,2875,7479,7480,4265,7481,4553,4984, // 7120 -7482,7483,4266,7484,3679,3366,3680,2818,2781,2782,3367,3589,4554,3065,7485,4071, // 7136 -2899,7486,7487,3157,2462,4072,4555,4073,4985,4986,3111,4267,2687,3368,4556,4074, // 7152 -3791,4268,7488,3909,2783,7489,2656,1962,3158,4557,4987,1963,3159,3160,7490,3112, // 7168 -4988,4989,3022,4990,4991,3792,2855,7491,7492,2971,4558,7493,7494,4992,7495,7496, // 7184 -7497,7498,4993,7499,3426,4559,4994,7500,3681,4560,4269,4270,3910,7501,4075,4995, // 7200 -4271,7502,7503,4076,7504,4996,7505,3225,4997,4272,4077,2819,3023,7506,7507,2733, // 7216 -4561,7508,4562,7509,3369,3793,7510,3590,2508,7511,7512,4273,3113,2994,2616,7513, // 7232 -7514,7515,7516,7517,7518,2820,3911,4078,2748,7519,7520,4563,4998,7521,7522,7523, // 7248 -7524,4999,4274,7525,4564,3682,2239,4079,4565,7526,7527,7528,7529,5000,7530,7531, // 7264 -5001,4275,3794,7532,7533,7534,3066,5002,4566,3161,7535,7536,4080,7537,3162,7538, // 7280 -7539,4567,7540,7541,7542,7543,7544,7545,5003,7546,4568,7547,7548,7549,7550,7551, // 7296 -7552,7553,7554,7555,7556,5004,7557,7558,7559,5005,7560,3795,7561,4569,7562,7563, // 7312 -7564,2821,3796,4276,4277,4081,7565,2876,7566,5006,7567,7568,2900,7569,3797,3912, // 7328 -7570,7571,7572,4278,7573,7574,7575,5007,7576,7577,5008,7578,7579,4279,2934,7580, // 7344 -7581,5009,7582,4570,7583,4280,7584,7585,7586,4571,4572,3913,7587,4573,3505,7588, // 7360 -5010,7589,7590,7591,7592,3798,4574,7593,7594,5011,7595,4281,7596,7597,7598,4282, // 7376 -5012,7599,7600,5013,3163,7601,5014,7602,3914,7603,7604,2734,4575,4576,4577,7605, // 7392 -7606,7607,7608,7609,3506,5015,4578,7610,4082,7611,2822,2901,2579,3683,3024,4579, // 7408 -3507,7612,4580,7613,3226,3799,5016,7614,7615,7616,7617,7618,7619,7620,2995,3290, // 7424 -7621,4083,7622,5017,7623,7624,7625,7626,7627,4581,3915,7628,3291,7629,5018,7630, // 7440 -7631,7632,7633,4084,7634,7635,3427,3800,7636,7637,4582,7638,5019,4583,5020,7639, // 7456 -3916,7640,3801,5021,4584,4283,7641,7642,3428,3591,2269,7643,2617,7644,4585,3592, // 7472 -7645,4586,2902,7646,7647,3227,5022,7648,4587,7649,4284,7650,7651,7652,4588,2284, // 7488 -7653,5023,7654,7655,7656,4589,5024,3802,7657,7658,5025,3508,4590,7659,7660,7661, // 7504 -1969,5026,7662,7663,3684,1821,2688,7664,2028,2509,4285,7665,2823,1841,7666,2689, // 7520 -3114,7667,3917,4085,2160,5027,5028,2972,7668,5029,7669,7670,7671,3593,4086,7672, // 7536 -4591,4087,5030,3803,7673,7674,7675,7676,7677,7678,7679,4286,2366,4592,4593,3067, // 7552 -2328,7680,7681,4594,3594,3918,2029,4287,7682,5031,3919,3370,4288,4595,2856,7683, // 7568 -3509,7684,7685,5032,5033,7686,7687,3804,2784,7688,7689,7690,7691,3371,7692,7693, // 7584 -2877,5034,7694,7695,3920,4289,4088,7696,7697,7698,5035,7699,5036,4290,5037,5038, // 7600 -5039,7700,7701,7702,5040,5041,3228,7703,1760,7704,5042,3229,4596,2106,4089,7705, // 7616 -4597,2824,5043,2107,3372,7706,4291,4090,5044,7707,4091,7708,5045,3025,3805,4598, // 7632 -4292,4293,4294,3373,7709,4599,7710,5046,7711,7712,5047,5048,3806,7713,7714,7715, // 7648 -5049,7716,7717,7718,7719,4600,5050,7720,7721,7722,5051,7723,4295,3429,7724,7725, // 7664 -7726,7727,3921,7728,3292,5052,4092,7729,7730,7731,7732,7733,7734,7735,5053,5054, // 7680 -7736,7737,7738,7739,3922,3685,7740,7741,7742,7743,2635,5055,7744,5056,4601,7745, // 7696 -7746,2560,7747,7748,7749,7750,3923,7751,7752,7753,7754,7755,4296,2903,7756,7757, // 7712 -7758,7759,7760,3924,7761,5057,4297,7762,7763,5058,4298,7764,4093,7765,7766,5059, // 7728 -3925,7767,7768,7769,7770,7771,7772,7773,7774,7775,7776,3595,7777,4299,5060,4094, // 7744 -7778,3293,5061,7779,7780,4300,7781,7782,4602,7783,3596,7784,7785,3430,2367,7786, // 7760 -3164,5062,5063,4301,7787,7788,4095,5064,5065,7789,3374,3115,7790,7791,7792,7793, // 7776 -7794,7795,7796,3597,4603,7797,7798,3686,3116,3807,5066,7799,7800,5067,7801,7802, // 7792 -4604,4302,5068,4303,4096,7803,7804,3294,7805,7806,5069,4605,2690,7807,3026,7808, // 7808 -7809,7810,7811,7812,7813,7814,7815,7816,7817,7818,7819,7820,7821,7822,7823,7824, // 7824 -7825,7826,7827,7828,7829,7830,7831,7832,7833,7834,7835,7836,7837,7838,7839,7840, // 7840 -7841,7842,7843,7844,7845,7846,7847,7848,7849,7850,7851,7852,7853,7854,7855,7856, // 7856 -7857,7858,7859,7860,7861,7862,7863,7864,7865,7866,7867,7868,7869,7870,7871,7872, // 7872 -7873,7874,7875,7876,7877,7878,7879,7880,7881,7882,7883,7884,7885,7886,7887,7888, // 7888 -7889,7890,7891,7892,7893,7894,7895,7896,7897,7898,7899,7900,7901,7902,7903,7904, // 7904 -7905,7906,7907,7908,7909,7910,7911,7912,7913,7914,7915,7916,7917,7918,7919,7920, // 7920 -7921,7922,7923,7924,3926,7925,7926,7927,7928,7929,7930,7931,7932,7933,7934,7935, // 7936 -7936,7937,7938,7939,7940,7941,7942,7943,7944,7945,7946,7947,7948,7949,7950,7951, // 7952 -7952,7953,7954,7955,7956,7957,7958,7959,7960,7961,7962,7963,7964,7965,7966,7967, // 7968 -7968,7969,7970,7971,7972,7973,7974,7975,7976,7977,7978,7979,7980,7981,7982,7983, // 7984 -7984,7985,7986,7987,7988,7989,7990,7991,7992,7993,7994,7995,7996,7997,7998,7999, // 8000 -8000,8001,8002,8003,8004,8005,8006,8007,8008,8009,8010,8011,8012,8013,8014,8015, // 8016 -8016,8017,8018,8019,8020,8021,8022,8023,8024,8025,8026,8027,8028,8029,8030,8031, // 8032 -8032,8033,8034,8035,8036,8037,8038,8039,8040,8041,8042,8043,8044,8045,8046,8047, // 8048 -8048,8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8062,8063, // 8064 -8064,8065,8066,8067,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079, // 8080 -8080,8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,8093,8094,8095, // 8096 -8096,8097,8098,8099,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110,8111, // 8112 -8112,8113,8114,8115,8116,8117,8118,8119,8120,8121,8122,8123,8124,8125,8126,8127, // 8128 -8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141,8142,8143, // 8144 -8144,8145,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155,8156,8157,8158,8159, // 8160 -8160,8161,8162,8163,8164,8165,8166,8167,8168,8169,8170,8171,8172,8173,8174,8175, // 8176 -8176,8177,8178,8179,8180,8181,8182,8183,8184,8185,8186,8187,8188,8189,8190,8191, // 8192 -8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8203,8204,8205,8206,8207, // 8208 -8208,8209,8210,8211,8212,8213,8214,8215,8216,8217,8218,8219,8220,8221,8222,8223, // 8224 -8224,8225,8226,8227,8228,8229,8230,8231,8232,8233,8234,8235,8236,8237,8238,8239, // 8240 -8240,8241,8242,8243,8244,8245,8246,8247,8248,8249,8250,8251,8252,8253,8254,8255, // 8256 -8256,8257,8258,8259,8260,8261,8262,8263,8264,8265,8266,8267,8268,8269,8270,8271, // 8272 -****************************************************************************************/ - -}; - diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/JpCntx.cpp b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/JpCntx.cpp deleted file mode 100644 index 3f74fb4..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/JpCntx.cpp +++ /dev/null @@ -1,230 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is Mozilla Communicator client code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#include "nscore.h" -#include "JpCntx.h" - -//This is hiragana 2-char sequence table, the number in each cell represents its frequency category -const PRUint8 jp2CharContext[83][83] = -{ -{ 0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,}, -{ 2,4,0,4,0,3,0,4,0,3,4,4,4,2,4,3,3,4,3,2,3,3,4,2,3,3,3,2,4,1,4,3,3,1,5,4,3,4,3,4,3,5,3,0,3,5,4,2,0,3,1,0,3,3,0,3,3,0,1,1,0,4,3,0,3,3,0,4,0,2,0,3,5,5,5,5,4,0,4,1,0,3,4,}, -{ 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,}, -{ 0,4,0,5,0,5,0,4,0,4,5,4,4,3,5,3,5,1,5,3,4,3,4,4,3,4,3,3,4,3,5,4,4,3,5,5,3,5,5,5,3,5,5,3,4,5,5,3,1,3,2,0,3,4,0,4,2,0,4,2,1,5,3,2,3,5,0,4,0,2,0,5,4,4,5,4,5,0,4,0,0,4,4,}, -{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,}, -{ 0,3,0,4,0,3,0,3,0,4,5,4,3,3,3,3,4,3,5,4,4,3,5,4,4,3,4,3,4,4,4,4,5,3,4,4,3,4,5,5,4,5,5,1,4,5,4,3,0,3,3,1,3,3,0,4,4,0,3,3,1,5,3,3,3,5,0,4,0,3,0,4,4,3,4,3,3,0,4,1,1,3,4,}, -{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,}, -{ 0,4,0,3,0,3,0,4,0,3,4,4,3,2,2,1,2,1,3,1,3,3,3,3,3,4,3,1,3,3,5,3,3,0,4,3,0,5,4,3,3,5,4,4,3,4,4,5,0,1,2,0,1,2,0,2,2,0,1,0,0,5,2,2,1,4,0,3,0,1,0,4,4,3,5,4,3,0,2,1,0,4,3,}, -{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,}, -{ 0,3,0,5,0,4,0,2,1,4,4,2,4,1,4,2,4,2,4,3,3,3,4,3,3,3,3,1,4,2,3,3,3,1,4,4,1,1,1,4,3,3,2,0,2,4,3,2,0,3,3,0,3,1,1,0,0,0,3,3,0,4,2,2,3,4,0,4,0,3,0,4,4,5,3,4,4,0,3,0,0,1,4,}, -{ 1,4,0,4,0,4,0,4,0,3,5,4,4,3,4,3,5,4,3,3,4,3,5,4,4,4,4,3,4,2,4,3,3,1,5,4,3,2,4,5,4,5,5,4,4,5,4,4,0,3,2,2,3,3,0,4,3,1,3,2,1,4,3,3,4,5,0,3,0,2,0,4,5,5,4,5,4,0,4,0,0,5,4,}, -{ 0,5,0,5,0,4,0,3,0,4,4,3,4,3,3,3,4,0,4,4,4,3,4,3,4,3,3,1,4,2,4,3,4,0,5,4,1,4,5,4,4,5,3,2,4,3,4,3,2,4,1,3,3,3,2,3,2,0,4,3,3,4,3,3,3,4,0,4,0,3,0,4,5,4,4,4,3,0,4,1,0,1,3,}, -{ 0,3,1,4,0,3,0,2,0,3,4,4,3,1,4,2,3,3,4,3,4,3,4,3,4,4,3,2,3,1,5,4,4,1,4,4,3,5,4,4,3,5,5,4,3,4,4,3,1,2,3,1,2,2,0,3,2,0,3,1,0,5,3,3,3,4,3,3,3,3,4,4,4,4,5,4,2,0,3,3,2,4,3,}, -{ 0,2,0,3,0,1,0,1,0,0,3,2,0,0,2,0,1,0,2,1,3,3,3,1,2,3,1,0,1,0,4,2,1,1,3,3,0,4,3,3,1,4,3,3,0,3,3,2,0,0,0,0,1,0,0,2,0,0,0,0,0,4,1,0,2,3,2,2,2,1,3,3,3,4,4,3,2,0,3,1,0,3,3,}, -{ 0,4,0,4,0,3,0,3,0,4,4,4,3,3,3,3,3,3,4,3,4,2,4,3,4,3,3,2,4,3,4,5,4,1,4,5,3,5,4,5,3,5,4,0,3,5,5,3,1,3,3,2,2,3,0,3,4,1,3,3,2,4,3,3,3,4,0,4,0,3,0,4,5,4,4,5,3,0,4,1,0,3,4,}, -{ 0,2,0,3,0,3,0,0,0,2,2,2,1,0,1,0,0,0,3,0,3,0,3,0,1,3,1,0,3,1,3,3,3,1,3,3,3,0,1,3,1,3,4,0,0,3,1,1,0,3,2,0,0,0,0,1,3,0,1,0,0,3,3,2,0,3,0,0,0,0,0,3,4,3,4,3,3,0,3,0,0,2,3,}, -{ 2,3,0,3,0,2,0,1,0,3,3,4,3,1,3,1,1,1,3,1,4,3,4,3,3,3,0,0,3,1,5,4,3,1,4,3,2,5,5,4,4,4,4,3,3,4,4,4,0,2,1,1,3,2,0,1,2,0,0,1,0,4,1,3,3,3,0,3,0,1,0,4,4,4,5,5,3,0,2,0,0,4,4,}, -{ 0,2,0,1,0,3,1,3,0,2,3,3,3,0,3,1,0,0,3,0,3,2,3,1,3,2,1,1,0,0,4,2,1,0,2,3,1,4,3,2,0,4,4,3,1,3,1,3,0,1,0,0,1,0,0,0,1,0,0,0,0,4,1,1,1,2,0,3,0,0,0,3,4,2,4,3,2,0,1,0,0,3,3,}, -{ 0,1,0,4,0,5,0,4,0,2,4,4,2,3,3,2,3,3,5,3,3,3,4,3,4,2,3,0,4,3,3,3,4,1,4,3,2,1,5,5,3,4,5,1,3,5,4,2,0,3,3,0,1,3,0,4,2,0,1,3,1,4,3,3,3,3,0,3,0,1,0,3,4,4,4,5,5,0,3,0,1,4,5,}, -{ 0,2,0,3,0,3,0,0,0,2,3,1,3,0,4,0,1,1,3,0,3,4,3,2,3,1,0,3,3,2,3,1,3,0,2,3,0,2,1,4,1,2,2,0,0,3,3,0,0,2,0,0,0,1,0,0,0,0,2,2,0,3,2,1,3,3,0,2,0,2,0,0,3,3,1,2,4,0,3,0,2,2,3,}, -{ 2,4,0,5,0,4,0,4,0,2,4,4,4,3,4,3,3,3,1,2,4,3,4,3,4,4,5,0,3,3,3,3,2,0,4,3,1,4,3,4,1,4,4,3,3,4,4,3,1,2,3,0,4,2,0,4,1,0,3,3,0,4,3,3,3,4,0,4,0,2,0,3,5,3,4,5,2,0,3,0,0,4,5,}, -{ 0,3,0,4,0,1,0,1,0,1,3,2,2,1,3,0,3,0,2,0,2,0,3,0,2,0,0,0,1,0,1,1,0,0,3,1,0,0,0,4,0,3,1,0,2,1,3,0,0,0,0,0,0,3,0,0,0,0,0,0,0,4,2,2,3,1,0,3,0,0,0,1,4,4,4,3,0,0,4,0,0,1,4,}, -{ 1,4,1,5,0,3,0,3,0,4,5,4,4,3,5,3,3,4,4,3,4,1,3,3,3,3,2,1,4,1,5,4,3,1,4,4,3,5,4,4,3,5,4,3,3,4,4,4,0,3,3,1,2,3,0,3,1,0,3,3,0,5,4,4,4,4,4,4,3,3,5,4,4,3,3,5,4,0,3,2,0,4,4,}, -{ 0,2,0,3,0,1,0,0,0,1,3,3,3,2,4,1,3,0,3,1,3,0,2,2,1,1,0,0,2,0,4,3,1,0,4,3,0,4,4,4,1,4,3,1,1,3,3,1,0,2,0,0,1,3,0,0,0,0,2,0,0,4,3,2,4,3,5,4,3,3,3,4,3,3,4,3,3,0,2,1,0,3,3,}, -{ 0,2,0,4,0,3,0,2,0,2,5,5,3,4,4,4,4,1,4,3,3,0,4,3,4,3,1,3,3,2,4,3,0,3,4,3,0,3,4,4,2,4,4,0,4,5,3,3,2,2,1,1,1,2,0,1,5,0,3,3,2,4,3,3,3,4,0,3,0,2,0,4,4,3,5,5,0,0,3,0,2,3,3,}, -{ 0,3,0,4,0,3,0,1,0,3,4,3,3,1,3,3,3,0,3,1,3,0,4,3,3,1,1,0,3,0,3,3,0,0,4,4,0,1,5,4,3,3,5,0,3,3,4,3,0,2,0,1,1,1,0,1,3,0,1,2,1,3,3,2,3,3,0,3,0,1,0,1,3,3,4,4,1,0,1,2,2,1,3,}, -{ 0,1,0,4,0,4,0,3,0,1,3,3,3,2,3,1,1,0,3,0,3,3,4,3,2,4,2,0,1,0,4,3,2,0,4,3,0,5,3,3,2,4,4,4,3,3,3,4,0,1,3,0,0,1,0,0,1,0,0,0,0,4,2,3,3,3,0,3,0,0,0,4,4,4,5,3,2,0,3,3,0,3,5,}, -{ 0,2,0,3,0,0,0,3,0,1,3,0,2,0,0,0,1,0,3,1,1,3,3,0,0,3,0,0,3,0,2,3,1,0,3,1,0,3,3,2,0,4,2,2,0,2,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,2,1,2,0,1,0,1,0,0,0,1,3,1,2,0,0,0,1,0,0,1,4,}, -{ 0,3,0,3,0,5,0,1,0,2,4,3,1,3,3,2,1,1,5,2,1,0,5,1,2,0,0,0,3,3,2,2,3,2,4,3,0,0,3,3,1,3,3,0,2,5,3,4,0,3,3,0,1,2,0,2,2,0,3,2,0,2,2,3,3,3,0,2,0,1,0,3,4,4,2,5,4,0,3,0,0,3,5,}, -{ 0,3,0,3,0,3,0,1,0,3,3,3,3,0,3,0,2,0,2,1,1,0,2,0,1,0,0,0,2,1,0,0,1,0,3,2,0,0,3,3,1,2,3,1,0,3,3,0,0,1,0,0,0,0,0,2,0,0,0,0,0,2,3,1,2,3,0,3,0,1,0,3,2,1,0,4,3,0,1,1,0,3,3,}, -{ 0,4,0,5,0,3,0,3,0,4,5,5,4,3,5,3,4,3,5,3,3,2,5,3,4,4,4,3,4,3,4,5,5,3,4,4,3,4,4,5,4,4,4,3,4,5,5,4,2,3,4,2,3,4,0,3,3,1,4,3,2,4,3,3,5,5,0,3,0,3,0,5,5,5,5,4,4,0,4,0,1,4,4,}, -{ 0,4,0,4,0,3,0,3,0,3,5,4,4,2,3,2,5,1,3,2,5,1,4,2,3,2,3,3,4,3,3,3,3,2,5,4,1,3,3,5,3,4,4,0,4,4,3,1,1,3,1,0,2,3,0,2,3,0,3,0,0,4,3,1,3,4,0,3,0,2,0,4,4,4,3,4,5,0,4,0,0,3,4,}, -{ 0,3,0,3,0,3,1,2,0,3,4,4,3,3,3,0,2,2,4,3,3,1,3,3,3,1,1,0,3,1,4,3,2,3,4,4,2,4,4,4,3,4,4,3,2,4,4,3,1,3,3,1,3,3,0,4,1,0,2,2,1,4,3,2,3,3,5,4,3,3,5,4,4,3,3,0,4,0,3,2,2,4,4,}, -{ 0,2,0,1,0,0,0,0,0,1,2,1,3,0,0,0,0,0,2,0,1,2,1,0,0,1,0,0,0,0,3,0,0,1,0,1,1,3,1,0,0,0,1,1,0,1,1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,1,1,2,2,0,3,4,0,0,0,1,1,0,0,1,0,0,0,0,0,1,1,}, -{ 0,1,0,0,0,1,0,0,0,0,4,0,4,1,4,0,3,0,4,0,3,0,4,0,3,0,3,0,4,1,5,1,4,0,0,3,0,5,0,5,2,0,1,0,0,0,2,1,4,0,1,3,0,0,3,0,0,3,1,1,4,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,}, -{ 1,4,0,5,0,3,0,2,0,3,5,4,4,3,4,3,5,3,4,3,3,0,4,3,3,3,3,3,3,2,4,4,3,1,3,4,4,5,4,4,3,4,4,1,3,5,4,3,3,3,1,2,2,3,3,1,3,1,3,3,3,5,3,3,4,5,0,3,0,3,0,3,4,3,4,4,3,0,3,0,2,4,3,}, -{ 0,1,0,4,0,0,0,0,0,1,4,0,4,1,4,2,4,0,3,0,1,0,1,0,0,0,0,0,2,0,3,1,1,1,0,3,0,0,0,1,2,1,0,0,1,1,1,1,0,1,0,0,0,1,0,0,3,0,0,0,0,3,2,0,2,2,0,1,0,0,0,2,3,2,3,3,0,0,0,0,2,1,0,}, -{ 0,5,1,5,0,3,0,3,0,5,4,4,5,1,5,3,3,0,4,3,4,3,5,3,4,3,3,2,4,3,4,3,3,0,3,3,1,4,4,3,4,4,4,3,4,5,5,3,2,3,1,1,3,3,1,3,1,1,3,3,2,4,5,3,3,5,0,4,0,3,0,4,4,3,5,3,3,0,3,4,0,4,3,}, -{ 0,5,0,5,0,3,0,2,0,4,4,3,5,2,4,3,3,3,4,4,4,3,5,3,5,3,3,1,4,0,4,3,3,0,3,3,0,4,4,4,4,5,4,3,3,5,5,3,2,3,1,2,3,2,0,1,0,0,3,2,2,4,4,3,1,5,0,4,0,3,0,4,3,1,3,2,1,0,3,3,0,3,3,}, -{ 0,4,0,5,0,5,0,4,0,4,5,5,5,3,4,3,3,2,5,4,4,3,5,3,5,3,4,0,4,3,4,4,3,2,4,4,3,4,5,4,4,5,5,0,3,5,5,4,1,3,3,2,3,3,1,3,1,0,4,3,1,4,4,3,4,5,0,4,0,2,0,4,3,4,4,3,3,0,4,0,0,5,5,}, -{ 0,4,0,4,0,5,0,1,1,3,3,4,4,3,4,1,3,0,5,1,3,0,3,1,3,1,1,0,3,0,3,3,4,0,4,3,0,4,4,4,3,4,4,0,3,5,4,1,0,3,0,0,2,3,0,3,1,0,3,1,0,3,2,1,3,5,0,3,0,1,0,3,2,3,3,4,4,0,2,2,0,4,4,}, -{ 2,4,0,5,0,4,0,3,0,4,5,5,4,3,5,3,5,3,5,3,5,2,5,3,4,3,3,4,3,4,5,3,2,1,5,4,3,2,3,4,5,3,4,1,2,5,4,3,0,3,3,0,3,2,0,2,3,0,4,1,0,3,4,3,3,5,0,3,0,1,0,4,5,5,5,4,3,0,4,2,0,3,5,}, -{ 0,5,0,4,0,4,0,2,0,5,4,3,4,3,4,3,3,3,4,3,4,2,5,3,5,3,4,1,4,3,4,4,4,0,3,5,0,4,4,4,4,5,3,1,3,4,5,3,3,3,3,3,3,3,0,2,2,0,3,3,2,4,3,3,3,5,3,4,1,3,3,5,3,2,0,0,0,0,4,3,1,3,3,}, -{ 0,1,0,3,0,3,0,1,0,1,3,3,3,2,3,3,3,0,3,0,0,0,3,1,3,0,0,0,2,2,2,3,0,0,3,2,0,1,2,4,1,3,3,0,0,3,3,3,0,1,0,0,2,1,0,0,3,0,3,1,0,3,0,0,1,3,0,2,0,1,0,3,3,1,3,3,0,0,1,1,0,3,3,}, -{ 0,2,0,3,0,2,1,4,0,2,2,3,1,1,3,1,1,0,2,0,3,1,2,3,1,3,0,0,1,0,4,3,2,3,3,3,1,4,2,3,3,3,3,1,0,3,1,4,0,1,1,0,1,2,0,1,1,0,1,1,0,3,1,3,2,2,0,1,0,0,0,2,3,3,3,1,0,0,0,0,0,2,3,}, -{ 0,5,0,4,0,5,0,2,0,4,5,5,3,3,4,3,3,1,5,4,4,2,4,4,4,3,4,2,4,3,5,5,4,3,3,4,3,3,5,5,4,5,5,1,3,4,5,3,1,4,3,1,3,3,0,3,3,1,4,3,1,4,5,3,3,5,0,4,0,3,0,5,3,3,1,4,3,0,4,0,1,5,3,}, -{ 0,5,0,5,0,4,0,2,0,4,4,3,4,3,3,3,3,3,5,4,4,4,4,4,4,5,3,3,5,2,4,4,4,3,4,4,3,3,4,4,5,5,3,3,4,3,4,3,3,4,3,3,3,3,1,2,2,1,4,3,3,5,4,4,3,4,0,4,0,3,0,4,4,4,4,4,1,0,4,2,0,2,4,}, -{ 0,4,0,4,0,3,0,1,0,3,5,2,3,0,3,0,2,1,4,2,3,3,4,1,4,3,3,2,4,1,3,3,3,0,3,3,0,0,3,3,3,5,3,3,3,3,3,2,0,2,0,0,2,0,0,2,0,0,1,0,0,3,1,2,2,3,0,3,0,2,0,4,4,3,3,4,1,0,3,0,0,2,4,}, -{ 0,0,0,4,0,0,0,0,0,0,1,0,1,0,2,0,0,0,0,0,1,0,2,0,1,0,0,0,0,0,3,1,3,0,3,2,0,0,0,1,0,3,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,0,2,0,0,0,0,0,0,2,}, -{ 0,2,1,3,0,2,0,2,0,3,3,3,3,1,3,1,3,3,3,3,3,3,4,2,2,1,2,1,4,0,4,3,1,3,3,3,2,4,3,5,4,3,3,3,3,3,3,3,0,1,3,0,2,0,0,1,0,0,1,0,0,4,2,0,2,3,0,3,3,0,3,3,4,2,3,1,4,0,1,2,0,2,3,}, -{ 0,3,0,3,0,1,0,3,0,2,3,3,3,0,3,1,2,0,3,3,2,3,3,2,3,2,3,1,3,0,4,3,2,0,3,3,1,4,3,3,2,3,4,3,1,3,3,1,1,0,1,1,0,1,0,1,0,1,0,0,0,4,1,1,0,3,0,3,1,0,2,3,3,3,3,3,1,0,0,2,0,3,3,}, -{ 0,0,0,0,0,0,0,0,0,0,3,0,2,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,0,3,0,3,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,2,0,2,3,0,0,0,0,0,0,0,0,3,}, -{ 0,2,0,3,1,3,0,3,0,2,3,3,3,1,3,1,3,1,3,1,3,3,3,1,3,0,2,3,1,1,4,3,3,2,3,3,1,2,2,4,1,3,3,0,1,4,2,3,0,1,3,0,3,0,0,1,3,0,2,0,0,3,3,2,1,3,0,3,0,2,0,3,4,4,4,3,1,0,3,0,0,3,3,}, -{ 0,2,0,1,0,2,0,0,0,1,3,2,2,1,3,0,1,1,3,0,3,2,3,1,2,0,2,0,1,1,3,3,3,0,3,3,1,1,2,3,2,3,3,1,2,3,2,0,0,1,0,0,0,0,0,0,3,0,1,0,0,2,1,2,1,3,0,3,0,0,0,3,4,4,4,3,2,0,2,0,0,2,4,}, -{ 0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,3,1,0,0,0,0,0,0,0,3,}, -{ 0,3,0,3,0,2,0,3,0,3,3,3,2,3,2,2,2,0,3,1,3,3,3,2,3,3,0,0,3,0,3,2,2,0,2,3,1,4,3,4,3,3,2,3,1,5,4,4,0,3,1,2,1,3,0,3,1,1,2,0,2,3,1,3,1,3,0,3,0,1,0,3,3,4,4,2,1,0,2,1,0,2,4,}, -{ 0,1,0,3,0,1,0,2,0,1,4,2,5,1,4,0,2,0,2,1,3,1,4,0,2,1,0,0,2,1,4,1,1,0,3,3,0,5,1,3,2,3,3,1,0,3,2,3,0,1,0,0,0,0,0,0,1,0,0,0,0,4,0,1,0,3,0,2,0,1,0,3,3,3,4,3,3,0,0,0,0,2,3,}, -{ 0,0,0,1,0,0,0,0,0,0,2,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,0,1,0,0,0,0,0,3,}, -{ 0,1,0,3,0,4,0,3,0,2,4,3,1,0,3,2,2,1,3,1,2,2,3,1,1,1,2,1,3,0,1,2,0,1,3,2,1,3,0,5,5,1,0,0,1,3,2,1,0,3,0,0,1,0,0,0,0,0,3,4,0,1,1,1,3,2,0,2,0,1,0,2,3,3,1,2,3,0,1,0,1,0,4,}, -{ 0,0,0,1,0,3,0,3,0,2,2,1,0,0,4,0,3,0,3,1,3,0,3,0,3,0,1,0,3,0,3,1,3,0,3,3,0,0,1,2,1,1,1,0,1,2,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,2,2,1,2,0,0,2,0,0,0,0,2,3,3,3,3,0,0,0,0,1,4,}, -{ 0,0,0,3,0,3,0,0,0,0,3,1,1,0,3,0,1,0,2,0,1,0,0,0,0,0,0,0,1,0,3,0,2,0,2,3,0,0,2,2,3,1,2,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,2,0,0,0,0,2,3,}, -{ 2,4,0,5,0,5,0,4,0,3,4,3,3,3,4,3,3,3,4,3,4,4,5,4,5,5,5,2,3,0,5,5,4,1,5,4,3,1,5,4,3,4,4,3,3,4,3,3,0,3,2,0,2,3,0,3,0,0,3,3,0,5,3,2,3,3,0,3,0,3,0,3,4,5,4,5,3,0,4,3,0,3,4,}, -{ 0,3,0,3,0,3,0,3,0,3,3,4,3,2,3,2,3,0,4,3,3,3,3,3,3,3,3,0,3,2,4,3,3,1,3,4,3,4,4,4,3,4,4,3,2,4,4,1,0,2,0,0,1,1,0,2,0,0,3,1,0,5,3,2,1,3,0,3,0,1,2,4,3,2,4,3,3,0,3,2,0,4,4,}, -{ 0,3,0,3,0,1,0,0,0,1,4,3,3,2,3,1,3,1,4,2,3,2,4,2,3,4,3,0,2,2,3,3,3,0,3,3,3,0,3,4,1,3,3,0,3,4,3,3,0,1,1,0,1,0,0,0,4,0,3,0,0,3,1,2,1,3,0,4,0,1,0,4,3,3,4,3,3,0,2,0,0,3,3,}, -{ 0,3,0,4,0,1,0,3,0,3,4,3,3,0,3,3,3,1,3,1,3,3,4,3,3,3,0,0,3,1,5,3,3,1,3,3,2,5,4,3,3,4,5,3,2,5,3,4,0,1,0,0,0,0,0,2,0,0,1,1,0,4,2,2,1,3,0,3,0,2,0,4,4,3,5,3,2,0,1,1,0,3,4,}, -{ 0,5,0,4,0,5,0,2,0,4,4,3,3,2,3,3,3,1,4,3,4,1,5,3,4,3,4,0,4,2,4,3,4,1,5,4,0,4,4,4,4,5,4,1,3,5,4,2,1,4,1,1,3,2,0,3,1,0,3,2,1,4,3,3,3,4,0,4,0,3,0,4,4,4,3,3,3,0,4,2,0,3,4,}, -{ 1,4,0,4,0,3,0,1,0,3,3,3,1,1,3,3,2,2,3,3,1,0,3,2,2,1,2,0,3,1,2,1,2,0,3,2,0,2,2,3,3,4,3,0,3,3,1,2,0,1,1,3,1,2,0,0,3,0,1,1,0,3,2,2,3,3,0,3,0,0,0,2,3,3,4,3,3,0,1,0,0,1,4,}, -{ 0,4,0,4,0,4,0,0,0,3,4,4,3,1,4,2,3,2,3,3,3,1,4,3,4,0,3,0,4,2,3,3,2,2,5,4,2,1,3,4,3,4,3,1,3,3,4,2,0,2,1,0,3,3,0,0,2,0,3,1,0,4,4,3,4,3,0,4,0,1,0,2,4,4,4,4,4,0,3,2,0,3,3,}, -{ 0,0,0,1,0,4,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,3,2,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,2,}, -{ 0,2,0,3,0,4,0,4,0,1,3,3,3,0,4,0,2,1,2,1,1,1,2,0,3,1,1,0,1,0,3,1,0,0,3,3,2,0,1,1,0,0,0,0,0,1,0,2,0,2,2,0,3,1,0,0,1,0,1,1,0,1,2,0,3,0,0,0,0,1,0,0,3,3,4,3,1,0,1,0,3,0,2,}, -{ 0,0,0,3,0,5,0,0,0,0,1,0,2,0,3,1,0,1,3,0,0,0,2,0,0,0,1,0,0,0,1,1,0,0,4,0,0,0,2,3,0,1,4,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,0,3,0,0,0,0,0,3,}, -{ 0,2,0,5,0,5,0,1,0,2,4,3,3,2,5,1,3,2,3,3,3,0,4,1,2,0,3,0,4,0,2,2,1,1,5,3,0,0,1,4,2,3,2,0,3,3,3,2,0,2,4,1,1,2,0,1,1,0,3,1,0,1,3,1,2,3,0,2,0,0,0,1,3,5,4,4,4,0,3,0,0,1,3,}, -{ 0,4,0,5,0,4,0,4,0,4,5,4,3,3,4,3,3,3,4,3,4,4,5,3,4,5,4,2,4,2,3,4,3,1,4,4,1,3,5,4,4,5,5,4,4,5,5,5,2,3,3,1,4,3,1,3,3,0,3,3,1,4,3,4,4,4,0,3,0,4,0,3,3,4,4,5,0,0,4,3,0,4,5,}, -{ 0,4,0,4,0,3,0,3,0,3,4,4,4,3,3,2,4,3,4,3,4,3,5,3,4,3,2,1,4,2,4,4,3,1,3,4,2,4,5,5,3,4,5,4,1,5,4,3,0,3,2,2,3,2,1,3,1,0,3,3,3,5,3,3,3,5,4,4,2,3,3,4,3,3,3,2,1,0,3,2,1,4,3,}, -{ 0,4,0,5,0,4,0,3,0,3,5,5,3,2,4,3,4,0,5,4,4,1,4,4,4,3,3,3,4,3,5,5,2,3,3,4,1,2,5,5,3,5,5,2,3,5,5,4,0,3,2,0,3,3,1,1,5,1,4,1,0,4,3,2,3,5,0,4,0,3,0,5,4,3,4,3,0,0,4,1,0,4,4,}, -{ 1,3,0,4,0,2,0,2,0,2,5,5,3,3,3,3,3,0,4,2,3,4,4,4,3,4,0,0,3,4,5,4,3,3,3,3,2,5,5,4,5,5,5,4,3,5,5,5,1,3,1,0,1,0,0,3,2,0,4,2,0,5,2,3,2,4,1,3,0,3,0,4,5,4,5,4,3,0,4,2,0,5,4,}, -{ 0,3,0,4,0,5,0,3,0,3,4,4,3,2,3,2,3,3,3,3,3,2,4,3,3,2,2,0,3,3,3,3,3,1,3,3,3,0,4,4,3,4,4,1,1,4,4,2,0,3,1,0,1,1,0,4,1,0,2,3,1,3,3,1,3,4,0,3,0,1,0,3,1,3,0,0,1,0,2,0,0,4,4,}, -{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,}, -{ 0,3,0,3,0,2,0,3,0,1,5,4,3,3,3,1,4,2,1,2,3,4,4,2,4,4,5,0,3,1,4,3,4,0,4,3,3,3,2,3,2,5,3,4,3,2,2,3,0,0,3,0,2,1,0,1,2,0,0,0,0,2,1,1,3,1,0,2,0,4,0,3,4,4,4,5,2,0,2,0,0,1,3,}, -{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,0,1,1,0,0,0,4,2,1,1,0,1,0,3,2,0,0,3,1,1,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,1,0,0,0,2,0,0,0,1,4,0,4,2,1,0,0,0,0,0,1,}, -{ 0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,3,1,0,0,0,2,0,2,1,0,0,1,2,1,0,1,1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,1,3,1,0,0,0,0,0,1,0,0,2,1,0,0,0,0,0,0,0,0,2,}, -{ 0,4,0,4,0,4,0,3,0,4,4,3,4,2,4,3,2,0,4,4,4,3,5,3,5,3,3,2,4,2,4,3,4,3,1,4,0,2,3,4,4,4,3,3,3,4,4,4,3,4,1,3,4,3,2,1,2,1,3,3,3,4,4,3,3,5,0,4,0,3,0,4,3,3,3,2,1,0,3,0,0,3,3,}, -{ 0,4,0,3,0,3,0,3,0,3,5,5,3,3,3,3,4,3,4,3,3,3,4,4,4,3,3,3,3,4,3,5,3,3,1,3,2,4,5,5,5,5,4,3,4,5,5,3,2,2,3,3,3,3,2,3,3,1,2,3,2,4,3,3,3,4,0,4,0,2,0,4,3,2,2,1,2,0,3,0,0,4,1,}, -}; - -#define MINIMUM_DATA_THRESHOLD 4 - -void JapaneseContextAnalysis::HandleData(const char* aBuf, PRUint32 aLen) -{ - PRUint32 charLen; - PRInt32 order; - PRUint32 i; - - if (mDone) - return; - - //The buffer we got is byte oriented, and a character may span in more than one - //buffers. In case the last one or two byte in last buffer is not complete, we - //record how many byte needed to complete that character and skip these bytes here. - //We can choose to record those bytes as well and analyse the character once it - //is complete, but since a character will not make much difference, by simply skipping - //this character will simply our logic and improve performance. - for (i = mNeedToSkipCharNum; i < aLen; ) - { - order = GetOrder(aBuf+i, &charLen); - i+= charLen; - if (i > aLen){ - mNeedToSkipCharNum = i - aLen; - mLastCharOrder = -1; - } - else - { - if (order != -1 && mLastCharOrder != -1) - { - mTotalRel ++; - if (mTotalRel > MAX_REL_THRESHOLD) - { - mDone = PR_TRUE; - break; - } - mRelSample[jp2CharContext[mLastCharOrder][order]]++; - } - mLastCharOrder = order; - } - } - - return; -} - -void JapaneseContextAnalysis::Reset(PRBool aIsPreferredLanguage) -{ - mTotalRel = 0; - for (PRUint32 i = 0; i < NUM_OF_CATEGORY; i++) - mRelSample[i] = 0; - mNeedToSkipCharNum = 0; - mLastCharOrder = -1; - mDone = PR_FALSE; - mDataThreshold = aIsPreferredLanguage ? 0 : MINIMUM_DATA_THRESHOLD; -} -#define DONT_KNOW (float)-1 - -float JapaneseContextAnalysis::GetConfidence(void) -{ - //This is just one way to calculate confidence. It works well for me. - if (mTotalRel > mDataThreshold) - return ((float)(mTotalRel - mRelSample[0]))/mTotalRel; - else - return (float)DONT_KNOW; -} - - -PRInt32 SJISContextAnalysis::GetOrder(const char* str, PRUint32 *charLen) -{ - //find out current char's byte length - if (((unsigned char)*str >= (unsigned char)0x81 && (unsigned char)*str <= (unsigned char)0x9f) || - ((unsigned char)*str >= (unsigned char)0xe0 && (unsigned char)*str <= (unsigned char)0xfc)) - *charLen = 2; - else - *charLen = 1; - - //return its order if it is hiragana - if (*str == '\202' && - (unsigned char)*(str+1) >= (unsigned char)0x9f && - (unsigned char)*(str+1) <= (unsigned char)0xf1) - return (unsigned char)*(str+1) - (unsigned char)0x9f; - return -1; -} - -PRInt32 EUCJPContextAnalysis::GetOrder(const char* str, PRUint32 *charLen) -{ - //find out current char's byte length - if ((unsigned char)*str == (unsigned char)0x8e || - ((unsigned char)*str >= (unsigned char)0xa1 && - (unsigned char)*str <= (unsigned char)0xfe)) - *charLen = 2; - else if ((unsigned char)*str == (unsigned char)0x8f) - *charLen = 3; - else - *charLen = 1; - - //return its order if it is hiragana - if ((unsigned char)*str == (unsigned char)0xa4 && - (unsigned char)*(str+1) >= (unsigned char)0xa1 && - (unsigned char)*(str+1) <= (unsigned char)0xf3) - return (unsigned char)*(str+1) - (unsigned char)0xa1; - return -1; -} diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/JpCntx.h b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/JpCntx.h deleted file mode 100644 index fe8fcb8..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/JpCntx.h +++ /dev/null @@ -1,140 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is Mozilla Communicator client code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#ifndef __JPCNTX_H__ -#define __JPCNTX_H__ - -#define NUM_OF_CATEGORY 6 - -#include "nscore.h" - -#define ENOUGH_REL_THRESHOLD 100 -#define MAX_REL_THRESHOLD 1000 - -//hiragana frequency category table -extern const PRUint8 jp2CharContext[83][83]; - -class JapaneseContextAnalysis -{ -public: - JapaneseContextAnalysis() {Reset(PR_FALSE);} - - void HandleData(const char* aBuf, PRUint32 aLen); - - void HandleOneChar(const char* aStr, PRUint32 aCharLen) - { - PRInt32 order; - - //if we received enough data, stop here - if (mTotalRel > MAX_REL_THRESHOLD) mDone = PR_TRUE; - if (mDone) return; - - //Only 2-bytes characters are of our interest - order = (aCharLen == 2) ? GetOrder(aStr) : -1; - if (order != -1 && mLastCharOrder != -1) - { - mTotalRel++; - //count this sequence to its category counter - mRelSample[jp2CharContext[mLastCharOrder][order]]++; - } - mLastCharOrder = order; - } - - float GetConfidence(void); - void Reset(PRBool aIsPreferredLanguage); - void SetOpion(){} - PRBool GotEnoughData() {return mTotalRel > ENOUGH_REL_THRESHOLD;} - -protected: - virtual PRInt32 GetOrder(const char* str, PRUint32 *charLen) = 0; - virtual PRInt32 GetOrder(const char* str) = 0; - - //category counters, each integer counts sequences in its category - PRUint32 mRelSample[NUM_OF_CATEGORY]; - - //total sequence received - PRUint32 mTotalRel; - - //Number of sequences needed to trigger detection - PRUint32 mDataThreshold; - - //The order of previous char - PRInt32 mLastCharOrder; - - //if last byte in current buffer is not the last byte of a character, we - //need to know how many byte to skip in next buffer. - PRUint32 mNeedToSkipCharNum; - - //If this flag is set to PR_TRUE, detection is done and conclusion has been made - PRBool mDone; -}; - - -class SJISContextAnalysis : public JapaneseContextAnalysis -{ - //SJISContextAnalysis(){}; -protected: - PRInt32 GetOrder(const char* str, PRUint32 *charLen); - - PRInt32 GetOrder(const char* str) - { - //We only interested in Hiragana, so first byte is '\202' - if (*str == '\202' && - (unsigned char)*(str+1) >= (unsigned char)0x9f && - (unsigned char)*(str+1) <= (unsigned char)0xf1) - return (unsigned char)*(str+1) - (unsigned char)0x9f; - return -1; - } -}; - -class EUCJPContextAnalysis : public JapaneseContextAnalysis -{ -protected: - PRInt32 GetOrder(const char* str, PRUint32 *charLen); - PRInt32 GetOrder(const char* str) - //We only interested in Hiragana, so first byte is '\244' - { - if (*str == '\244' && - (unsigned char)*(str+1) >= (unsigned char)0xa1 && - (unsigned char)*(str+1) <= (unsigned char)0xf3) - return (unsigned char)*(str+1) - (unsigned char)0xa1; - return -1; - } -}; - -#endif /* __JPCNTX_H__ */ - diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/LangBulgarianModel.cpp b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/LangBulgarianModel.cpp deleted file mode 100644 index 0f73282..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/LangBulgarianModel.cpp +++ /dev/null @@ -1,245 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is Mozilla Communicator client code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#include "nsSBCharSetProber.h" -/**************************************************************** -255: Control characters that usually does not exist in any text -254: Carriage/Return -253: symbol (punctuation) that does not belong to word -252: 0 - 9 - -*****************************************************************/ - -//Character Mapping Table: -//this talbe is modified base on win1251BulgarianCharToOrderMap, so -//only number <64 is sure valid - -static const unsigned char Latin5_BulgarianCharToOrderMap[] = -{ -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, //00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //10 -+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, //20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, //30 -253, 77, 90, 99,100, 72,109,107,101, 79,185, 81,102, 76, 94, 82, //40 -110,186,108, 91, 74,119, 84, 96,111,187,115,253,253,253,253,253, //50 -253, 65, 69, 70, 66, 63, 68,112,103, 92,194,104, 95, 86, 87, 71, //60 -116,195, 85, 93, 97,113,196,197,198,199,200,253,253,253,253,253, //70 -194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209, //80 -210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225, //90 - 81,226,227,228,229,230,105,231,232,233,234,235,236, 45,237,238, //a0 - 31, 32, 35, 43, 37, 44, 55, 47, 40, 59, 33, 46, 38, 36, 41, 30, //b0 - 39, 28, 34, 51, 48, 49, 53, 50, 54, 57, 61,239, 67,240, 60, 56, //c0 - 1, 18, 9, 20, 11, 3, 23, 15, 2, 26, 12, 10, 14, 6, 4, 13, //d0 - 7, 8, 5, 19, 29, 25, 22, 21, 27, 24, 17, 75, 52,241, 42, 16, //e0 - 62,242,243,244, 58,245, 98,246,247,248,249,250,251, 91,252,253, //f0 -}; - -static const unsigned char win1251BulgarianCharToOrderMap[] = -{ -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, //00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //10 -+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, //20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, //30 -253, 77, 90, 99,100, 72,109,107,101, 79,185, 81,102, 76, 94, 82, //40 -110,186,108, 91, 74,119, 84, 96,111,187,115,253,253,253,253,253, //50 -253, 65, 69, 70, 66, 63, 68,112,103, 92,194,104, 95, 86, 87, 71, //60 -116,195, 85, 93, 97,113,196,197,198,199,200,253,253,253,253,253, //70 -206,207,208,209,210,211,212,213,120,214,215,216,217,218,219,220, //80 -221, 78, 64, 83,121, 98,117,105,222,223,224,225,226,227,228,229, //90 - 88,230,231,232,233,122, 89,106,234,235,236,237,238, 45,239,240, //a0 - 73, 80,118,114,241,242,243,244,245, 62, 58,246,247,248,249,250, //b0 - 31, 32, 35, 43, 37, 44, 55, 47, 40, 59, 33, 46, 38, 36, 41, 30, //c0 - 39, 28, 34, 51, 48, 49, 53, 50, 54, 57, 61,251, 67,252, 60, 56, //d0 - 1, 18, 9, 20, 11, 3, 23, 15, 2, 26, 12, 10, 14, 6, 4, 13, //e0 - 7, 8, 5, 19, 29, 25, 22, 21, 27, 24, 17, 75, 52,253, 42, 16, //f0 -}; - -//Model Table: -//total sequences: 100% -//first 512 sequences: 96.9392% -//first 1024 sequences:3.0618% -//rest sequences: 0.2992% -//negative sequences: 0.0020% -static const PRUint8 BulgarianLangModel[] = -{ -0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,2,3,3,3,3,3, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,2,2,3,2,2,1,2,2, -3,1,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,3,3,3,3,3,3,3,0,3,0,1, -0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,3,3,3,3,3,3,3,0,3,1,0, -0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,2,3,3,3,3,3,3,3,3,0,3,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,1,3,2,3,3,3,3,3,3,3,3,0,3,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,1,3,3,3,3,2,2,2,1,1,2,0,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,2,3,2,2,3,3,1,1,2,3,3,2,3,3,3,3,2,1,2,0,2,0,3,0,0, -0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,1,3,3,3,3,3,2,3,2,3,3,3,3,3,2,3,3,1,3,0,3,0,2,0,0, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,3,1,3,3,2,3,3,3,1,3,3,2,3,2,2,2,0,0,2,0,2,0,2,0,0, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,3,3,0,3,3,3,2,2,3,3,3,1,2,2,3,2,1,1,2,0,2,0,0,0,0, -1,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,2,3,3,1,2,3,2,2,2,3,3,3,3,3,2,2,3,1,2,0,2,1,2,0,0, -0,0,0,0,0,0,0,0,0,0,3,0,0,1,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,1,3,3,3,3,3,2,3,3,3,2,3,3,2,3,2,2,2,3,1,2,0,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,3,3,3,3,1,1,1,2,2,1,3,1,3,2,2,3,0,0,1,0,1,0,1,0,0, -0,0,0,1,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,2,2,3,2,2,3,1,2,1,1,1,2,3,1,3,1,2,2,0,1,1,1,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,1,3,2,2,3,3,1,2,3,1,1,3,3,3,3,1,2,2,1,1,1,0,2,0,2,0,1, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,2,3,3,3,2,2,1,1,2,0,2,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,0,1,2,1,3,3,2,3,3,3,3,3,2,3,2,1,0,3,1,2,1,2,1,2,3,2,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,1,1,2,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,1,3,3,2,3,3,2,2,2,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,3,3,3,3,0,3,3,3,3,3,2,1,1,2,1,3,3,0,3,1,1,1,1,3,2,0,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,1,1,3,1,3,3,2,3,2,2,2,3,0,2,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,2,3,3,2,2,3,2,1,1,1,1,1,3,1,3,1,1,0,0,0,1,0,0,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,2,3,2,0,3,2,0,3,0,2,0,0,2,1,3,1,0,0,1,0,0,0,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,2,1,1,1,1,2,1,1,2,1,1,1,2,2,1,2,1,1,1,0,1,1,0,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,2,1,3,1,1,2,1,3,2,1,1,0,1,2,3,2,1,1,1,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,3,3,3,3,2,2,1,0,1,0,0,1,0,0,0,2,1,0,3,0,0,1,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,2,3,2,3,3,1,3,2,1,1,1,2,1,1,2,1,3,0,1,0,0,0,1,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,1,2,2,3,3,2,3,2,2,2,3,1,2,2,1,1,2,1,1,2,2,0,1,1,0,1,0,2,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,2,1,3,1,0,2,2,1,3,2,1,0,0,2,0,2,0,1,0,0,0,0,0,0,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,1,2,0,2,3,1,2,3,2,0,1,3,1,2,1,1,1,0,0,1,0,0,2,2,2,3, -2,2,2,2,1,2,1,1,2,2,1,1,2,0,1,1,1,0,0,1,1,0,0,1,1,0,0,0,1,1,0,1, -3,3,3,3,3,2,1,2,2,1,2,0,2,0,1,0,1,2,1,2,1,1,0,0,0,1,0,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, -3,3,2,3,3,1,1,3,1,0,3,2,1,0,0,0,1,2,0,2,0,1,0,0,0,1,0,1,2,1,2,2, -1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,0,1,2,1,1,1,0,0,0,0,0,1,1,0,0, -3,1,0,1,0,2,3,2,2,2,3,2,2,2,2,2,1,0,2,1,2,1,1,1,0,1,2,1,2,2,2,1, -1,1,2,2,2,2,1,2,1,1,0,1,2,1,2,2,2,1,1,1,0,1,1,1,1,2,0,1,0,0,0,0, -2,3,2,3,3,0,0,2,1,0,2,1,0,0,0,0,2,3,0,2,0,0,0,0,0,1,0,0,2,0,1,2, -2,1,2,1,2,2,1,1,1,2,1,1,1,0,1,2,2,1,1,1,1,1,0,1,1,1,0,0,1,2,0,0, -3,3,2,2,3,0,2,3,1,1,2,0,0,0,1,0,0,2,0,2,0,0,0,1,0,1,0,1,2,0,2,2, -1,1,1,1,2,1,0,1,2,2,2,1,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0, -2,3,2,3,3,0,0,3,0,1,1,0,1,0,0,0,2,2,1,2,0,0,0,0,0,0,0,0,2,0,1,2, -2,2,1,1,1,1,1,2,2,2,1,0,2,0,1,0,1,0,0,1,0,1,0,0,1,0,0,0,0,1,0,0, -3,3,3,3,2,2,2,2,2,0,2,1,1,1,1,2,1,2,1,1,0,2,0,1,0,1,0,0,2,0,1,2, -1,1,1,1,1,1,1,2,2,1,1,0,2,0,1,0,2,0,0,1,1,1,0,0,2,0,0,0,1,1,0,0, -2,3,3,3,3,1,0,0,0,0,0,0,0,0,0,0,2,0,0,1,1,0,0,0,0,0,0,1,2,0,1,2, -2,2,2,1,1,2,1,1,2,2,2,1,2,0,1,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,0,0, -2,3,3,3,3,0,2,2,0,2,1,0,0,0,1,1,1,2,0,2,0,0,0,3,0,0,0,0,2,0,2,2, -1,1,1,2,1,2,1,1,2,2,2,1,2,0,1,1,1,0,1,1,1,1,0,2,1,0,0,0,1,1,0,0, -2,3,3,3,3,0,2,1,0,0,2,0,0,0,0,0,1,2,0,2,0,0,0,0,0,0,0,0,2,0,1,2, -1,1,1,2,1,1,1,1,2,2,2,0,1,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0, -3,3,2,2,3,0,1,0,1,0,0,0,0,0,0,0,1,1,0,3,0,0,0,0,0,0,0,0,1,0,2,2, -1,1,1,1,1,2,1,1,2,2,1,2,2,1,0,1,1,1,1,1,0,1,0,0,1,0,0,0,1,1,0,0, -3,1,0,1,0,2,2,2,2,3,2,1,1,1,2,3,0,0,1,0,2,1,1,0,1,1,1,1,2,1,1,1, -1,2,2,1,2,1,2,2,1,1,0,1,2,1,2,2,1,1,1,0,0,1,1,1,2,1,0,1,0,0,0,0, -2,1,0,1,0,3,1,2,2,2,2,1,2,2,1,1,1,0,2,1,2,2,1,1,2,1,1,0,2,1,1,1, -1,2,2,2,2,2,2,2,1,2,0,1,1,0,2,1,1,1,1,1,0,0,1,1,1,1,0,1,0,0,0,0, -2,1,1,1,1,2,2,2,2,1,2,2,2,1,2,2,1,1,2,1,2,3,2,2,1,1,1,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,3,2,0,1,2,0,1,2,1,1,0,1,0,1,2,1,2,0,0,0,1,1,0,0,0,1,0,0,2, -1,1,0,0,1,1,0,1,1,1,1,0,2,0,1,1,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0, -2,0,0,0,0,1,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,2,1,1,1, -1,2,2,2,2,1,1,2,1,2,1,1,1,0,2,1,2,1,1,1,0,2,1,1,1,1,0,1,0,0,0,0, -3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0, -1,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,3,2,0,0,0,0,1,0,0,0,0,0,0,1,1,0,2,0,0,0,0,0,0,0,0,1,0,1,2, -1,1,1,1,1,1,0,0,2,2,2,2,2,0,1,1,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0,1, -2,3,1,2,1,0,1,1,0,2,2,2,0,0,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,0,1,2, -1,1,1,1,2,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0, -2,2,2,2,2,0,0,2,0,0,2,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,2,0,2,2, -1,1,1,1,1,0,0,1,2,1,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, -1,2,2,2,2,0,0,2,0,1,1,0,0,0,1,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,1,1, -0,0,0,1,1,1,1,1,1,1,1,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -1,2,2,3,2,0,0,1,0,0,1,0,0,0,0,0,0,1,0,2,0,0,0,1,0,0,0,0,0,0,0,2, -1,1,0,0,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, -2,1,2,2,2,1,2,1,2,2,1,1,2,1,1,1,0,1,1,1,1,2,0,1,0,1,1,1,1,0,1,1, -1,1,2,1,1,1,1,1,1,0,0,1,2,1,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0, -1,0,0,1,3,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,2,1,0,0,1,0,2,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,2,0,0,1, -0,2,0,1,0,0,1,1,2,0,1,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, -1,2,2,2,2,0,1,1,0,2,1,0,1,1,1,0,0,1,0,2,0,1,0,0,0,0,0,0,0,0,0,1, -0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,2,2,0,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1, -0,1,0,1,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, -2,0,1,0,0,1,2,1,1,1,1,1,1,2,2,1,0,0,1,0,1,0,0,0,0,1,1,1,1,0,0,0, -1,1,2,1,1,1,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,1,2,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1, -0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0, -0,1,1,0,1,1,1,0,0,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0, -1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,2,0,0,2,0,1,0,0,1,0,0,1, -1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0, -1,1,1,1,1,1,1,2,0,0,0,0,0,0,2,1,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -}; - -const SequenceModel Latin5BulgarianModel = -{ - Latin5_BulgarianCharToOrderMap, - BulgarianLangModel, - (float)0.969392, - PR_FALSE, - "ISO-8859-5" -}; - -const SequenceModel Win1251BulgarianModel = -{ - win1251BulgarianCharToOrderMap, - BulgarianLangModel, - (float)0.969392, - PR_FALSE, - "windows-1251" -}; diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/LangCyrillicModel.cpp b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/LangCyrillicModel.cpp deleted file mode 100644 index d8e73e8..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/LangCyrillicModel.cpp +++ /dev/null @@ -1,355 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is Mozilla Communicator client code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#include "nsSBCharSetProber.h" - - - -//KOI8-R language model -//Character Mapping Table: -static const unsigned char KOI8R_CharToOrderMap[] = -{ -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, //00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //10 -+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, //20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, //30 -253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, //40 -155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, //50 -253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, //60 - 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, //70 -191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, //80 -207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, //90 -223,224,225, 68,226,227,228,229,230,231,232,233,234,235,236,237, //a0 -238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253, //b0 - 27, 3, 21, 28, 13, 2, 39, 19, 26, 4, 23, 11, 8, 12, 5, 1, //c0 - 15, 16, 9, 7, 6, 14, 24, 10, 17, 18, 20, 25, 30, 29, 22, 54, //d0 - 59, 37, 44, 58, 41, 48, 53, 46, 55, 42, 60, 36, 49, 38, 31, 34, //e0 - 35, 43, 45, 32, 40, 52, 56, 33, 61, 62, 51, 57, 47, 63, 50, 70, //f0 -}; - -static const unsigned char win1251_CharToOrderMap[] = -{ -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, //00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //10 -+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, //20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, //30 -253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, //40 -155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, //50 -253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, //60 - 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, //70 -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,220,221,222, -223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238, -239,240,241,242,243,244,245,246, 68,247,248,249,250,251,252,253, - 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, - 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, - 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, - 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16, -}; - -static const unsigned char latin5_CharToOrderMap[] = -{ -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, //00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //10 -+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, //20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, //30 -253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, //40 -155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, //50 -253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, //60 - 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, //70 -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,220,221,222, -223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238, - 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, - 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, - 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, - 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16, -239, 68,240,241,242,243,244,245,246,247,248,249,250,251,252,255, -}; - -static const unsigned char macCyrillic_CharToOrderMap[] = -{ -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, //00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //10 -+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, //20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, //30 -253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, //40 -155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, //50 -253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, //60 - 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, //70 - 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, - 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, -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,220,221,222, -223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238, -239,240,241,242,243,244,245,246,247,248,249,250,251,252, 68, 16, - 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, - 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27,255, -}; - -static const unsigned char IBM855_CharToOrderMap[] = -{ -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, //00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //10 -+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, //20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, //30 -253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, //40 -155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, //50 -253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, //60 - 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, //70 -191,192,193,194, 68,195,196,197,198,199,200,201,202,203,204,205, -206,207,208,209,210,211,212,213,214,215,216,217, 27, 59, 54, 70, - 3, 37, 21, 44, 28, 58, 13, 41, 2, 48, 39, 53, 19, 46,218,219, -220,221,222,223,224, 26, 55, 4, 42,225,226,227,228, 23, 60,229, -230,231,232,233,234,235, 11, 36,236,237,238,239,240,241,242,243, - 8, 49, 12, 38, 5, 31, 1, 34, 15,244,245,246,247, 35, 16,248, - 43, 9, 45, 7, 32, 6, 40, 14, 52, 24, 56, 10, 33, 17, 61,249, -250, 18, 62, 20, 51, 25, 57, 30, 47, 29, 63, 22, 50,251,252,255, -}; - -static const unsigned char IBM866_CharToOrderMap[] = -{ -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, //00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //10 -+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, //20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, //30 -253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, //40 -155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, //50 -253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, //60 - 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, //70 - 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, - 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, - 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, -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,220,221,222, -223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238, - 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16, -239, 68,240,241,242,243,244,245,246,247,248,249,250,251,252,255, -}; - -//Model Table: -//total sequences: 100% -//first 512 sequences: 97.6601% -//first 1024 sequences: 2.3389% -//rest sequences: 0.1237% -//negative sequences: 0.0009% -static const PRUint8 RussianLangModel[] = -{ -0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,3,3,3,3,1,3,3,3,2,3,2,3,3, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,2,2,2,2,2,0,0,2, -3,3,3,2,3,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,3,2,3,2,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,2,2,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,2,3,3,1,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,2,1, -0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,2,1, -0,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,2,2,2,3,1,3,3,1,3,3,3,3,2,2,3,0,2,2,2,3,3,2,1,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,3,3,3,3,3,2,2,3,2,3,3,3,2,1,2,2,0,1,2,2,2,2,2,2,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,0,2,2,3,3,2,1,2,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,3,3,1,2,3,2,2,3,2,3,3,3,3,2,2,3,0,3,2,2,3,1,1,1,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,2,3,3,3,3,2,2,2,0,3,3,3,2,2,2,2,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,2,3,2,3,3,3,3,3,3,2,3,2,2,0,1,3,2,1,2,2,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,2,1,1,3,0,1,1,1,1,2,1,1,0,2,2,2,1,2,0,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,3,3,2,2,2,2,1,3,2,3,2,3,2,1,2,2,0,1,1,2,1,2,1,2,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,3,3,3,2,2,2,2,0,2,2,2,2,3,1,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -3,2,3,2,2,3,3,3,3,3,3,3,3,3,1,3,2,0,0,3,3,3,3,2,3,3,3,3,2,3,2,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,3,3,3,3,3,2,2,3,3,0,2,1,0,3,2,3,2,3,0,0,1,2,0,0,1,0,1,2,1,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,3,0,2,3,3,3,3,2,3,3,3,3,1,2,2,0,0,2,3,2,2,2,3,2,3,2,2,3,0,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,2,3,0,2,3,2,3,0,1,2,3,3,2,0,2,3,0,0,2,3,2,2,0,1,3,1,3,2,2,1,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,3,0,2,3,3,3,3,3,3,3,3,2,1,3,2,0,0,2,2,3,3,3,2,3,3,0,2,2,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,2,3,3,2,2,2,3,3,0,0,1,1,1,1,1,2,0,0,1,1,1,1,0,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,0,3,2,3,3,2,3,2,0,2,1,0,1,1,0,1,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,3,3,3,2,2,2,2,3,1,3,2,3,1,1,2,1,0,2,2,2,2,1,3,1,0, -0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -2,2,3,3,3,3,3,1,2,2,1,3,1,0,3,0,0,3,0,0,0,1,1,0,1,2,1,0,0,0,0,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,2,2,1,1,3,3,3,2,2,1,2,2,3,1,1,2,0,0,2,2,1,3,0,0,2,1,1,2,1,1,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,2,3,3,3,3,1,2,2,2,1,2,1,3,3,1,1,2,1,2,1,2,2,0,2,0,0,1,1,0,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,3,3,3,3,3,2,1,3,2,2,3,2,0,3,2,0,3,0,1,0,1,1,0,0,1,1,1,1,0,1,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,2,3,3,3,2,2,2,3,3,1,2,1,2,1,0,1,0,1,1,0,1,0,0,2,1,1,1,0,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, -3,1,1,2,1,2,3,3,2,2,1,2,2,3,0,2,1,0,0,2,2,3,2,1,2,2,2,2,2,3,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,1,1,0,1,1,2,2,1,1,3,0,0,1,3,1,1,1,0,0,0,1,0,1,1,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,1,3,3,3,2,0,0,0,2,1,0,1,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,0,1,0,0,2,3,2,2,2,1,2,2,2,1,2,1,0,0,1,1,1,0,2,0,1,1,1,0,0,1,1, -1,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0, -2,3,3,3,3,0,0,0,0,1,0,0,0,0,3,0,1,2,1,0,0,0,0,0,0,0,1,1,0,0,1,1, -1,0,1,0,1,2,0,0,1,1,2,1,0,1,1,1,1,0,1,1,1,1,0,1,0,0,1,0,0,1,1,0, -2,2,3,2,2,2,3,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,0,1,1,1,0,2,1, -1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,0,1,1,0, -3,3,3,2,2,2,2,3,2,2,1,1,2,2,2,2,1,1,3,1,2,1,2,0,0,1,1,0,1,0,2,1, -1,1,1,1,1,2,1,0,1,1,1,1,0,1,0,0,1,1,0,0,1,0,1,0,0,1,0,0,0,1,1,0, -2,0,0,1,0,3,2,2,2,2,1,2,1,2,1,2,0,0,0,2,1,2,2,1,1,2,2,0,1,1,0,2, -1,1,1,1,1,0,1,1,1,2,1,1,1,2,1,0,1,2,1,1,1,1,0,1,1,1,0,0,1,0,0,1, -1,3,2,2,2,1,1,1,2,3,0,0,0,0,2,0,2,2,1,0,0,0,0,0,0,1,0,0,0,0,1,1, -1,0,1,1,0,1,0,1,1,0,1,1,0,2,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0, -2,3,2,3,2,1,2,2,2,2,1,0,0,0,2,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,2,1, -1,1,2,1,0,2,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0, -3,0,0,1,0,2,2,2,3,2,2,2,2,2,2,2,0,0,0,2,1,2,1,1,1,2,2,0,0,0,1,2, -1,1,1,1,1,0,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,0,1, -2,3,2,3,3,2,0,1,1,1,0,0,1,0,2,0,1,1,3,1,0,0,0,0,0,0,0,1,0,0,2,1, -1,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,1,0, -2,3,3,3,3,1,2,2,2,2,0,1,1,0,2,1,1,1,2,1,0,1,1,0,0,1,0,1,0,0,2,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,3,3,3,2,0,0,1,1,2,2,1,0,0,2,0,1,1,3,0,0,1,0,0,0,0,0,1,0,1,2,1, -1,1,2,0,1,1,1,0,1,0,1,1,0,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,0,1,1,0, -1,3,2,3,2,1,0,0,2,2,2,0,1,0,2,0,1,1,1,0,1,0,0,0,3,0,1,1,0,0,2,1, -1,1,1,0,1,1,0,0,0,0,1,1,0,1,0,0,2,1,1,0,1,0,0,0,1,0,1,0,0,1,1,0, -3,1,2,1,1,2,2,2,2,2,2,1,2,2,1,1,0,0,0,2,2,2,0,0,0,1,2,1,0,1,0,1, -2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,2,1,1,1,0,1,0,1,1,0,1,1,1,0,0,1, -3,0,0,0,0,2,0,1,1,1,1,1,1,1,0,1,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,1, -1,1,0,0,1,0,0,0,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1, -1,3,3,2,2,0,0,0,2,2,0,0,0,1,2,0,1,1,2,0,0,0,0,0,0,0,0,1,0,0,2,1, -0,1,1,0,0,1,1,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0, -2,3,2,3,2,0,0,0,0,1,1,0,0,0,2,0,2,0,2,0,0,0,0,0,1,0,0,1,0,0,1,1, -1,1,2,0,1,2,1,0,1,1,2,1,1,1,1,1,2,1,1,0,1,0,0,1,1,1,1,1,0,1,1,0, -1,3,2,2,2,1,0,0,2,2,1,0,1,2,2,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,1, -0,0,1,1,0,1,1,0,0,1,1,0,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,1,0,2,3,1,2,2,2,2,2,2,1,1,0,0,0,1,0,1,0,2,1,1,1,0,0,0,0,1, -1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0, -2,0,2,0,0,1,0,3,2,1,2,1,2,2,0,1,0,0,0,2,1,0,0,2,1,1,1,1,0,2,0,2, -2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,0,1,1,1,1,0,0,0,1,1,1,1,0,1,0,0,1, -1,2,2,2,2,1,0,0,1,0,0,0,0,0,2,0,1,1,1,1,0,0,0,0,1,0,1,2,0,0,2,0, -1,0,1,1,1,2,1,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,1,0,0,1,0,1,1,0, -2,1,2,2,2,0,3,0,1,1,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0, -1,2,2,3,2,2,0,0,1,1,2,0,1,2,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1, -0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0, -2,2,1,1,2,1,2,2,2,2,2,1,2,2,0,1,0,0,0,1,2,2,2,1,2,1,1,1,1,1,2,1, -1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1,1,1,0,1,1,0,0,1, -1,2,2,2,2,0,1,0,2,2,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0, -0,0,1,0,0,1,0,0,0,0,1,0,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,2,2,2,2,0,0,0,2,2,2,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1, -0,1,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,2,2,2,2,0,0,0,0,1,0,0,1,1,2,0,0,0,0,1,0,1,0,0,1,0,0,2,0,0,0,1, -0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, -1,2,2,2,1,1,2,0,2,1,1,1,1,0,2,2,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1, -0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -1,0,2,1,2,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0, -0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0, -1,0,0,0,0,2,0,1,2,1,0,1,1,1,0,1,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,1, -0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1, -2,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -1,1,1,0,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -1,1,0,1,1,0,1,0,1,0,0,0,0,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,1,0,0,0, -0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0, -}; - - -const SequenceModel Koi8rModel = -{ - KOI8R_CharToOrderMap, - RussianLangModel, - (float)0.976601, - PR_FALSE, - "KOI8-R" -}; - -const SequenceModel Win1251Model = -{ - win1251_CharToOrderMap, - RussianLangModel, - (float)0.976601, - PR_FALSE, - "windows-1251" -}; - -const SequenceModel Latin5Model = -{ - latin5_CharToOrderMap, - RussianLangModel, - (float)0.976601, - PR_FALSE, - "ISO-8859-5" -}; - -const SequenceModel MacCyrillicModel = -{ - macCyrillic_CharToOrderMap, - RussianLangModel, - (float)0.976601, - PR_FALSE, - "x-mac-cyrillic" -}; - -const SequenceModel Ibm866Model = -{ - IBM866_CharToOrderMap, - RussianLangModel, - (float)0.976601, - PR_FALSE, - "IBM866" -}; - -const SequenceModel Ibm855Model = -{ - IBM855_CharToOrderMap, - RussianLangModel, - (float)0.976601, - PR_FALSE, - "IBM855" -}; diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/LangGreekModel.cpp b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/LangGreekModel.cpp deleted file mode 100644 index 30c65dc..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/LangGreekModel.cpp +++ /dev/null @@ -1,244 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is Mozilla Communicator client code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#include "nsSBCharSetProber.h" -/**************************************************************** -255: Control characters that usually does not exist in any text -254: Carriage/Return -253: symbol (punctuation) that does not belong to word -252: 0 - 9 - -*****************************************************************/ - -//Character Mapping Table: -static const unsigned char Latin7_CharToOrderMap[] = -{ -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, //00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //10 -+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, //20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, //30 -253, 82,100,104, 94, 98,101,116,102,111,187,117, 92, 88,113, 85, //40 - 79,118,105, 83, 67,114,119, 95, 99,109,188,253,253,253,253,253, //50 -253, 72, 70, 80, 81, 60, 96, 93, 89, 68,120, 97, 77, 86, 69, 55, //60 - 78,115, 65, 66, 58, 76,106,103, 87,107,112,253,253,253,253,253, //70 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //80 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //90 -+253,233, 90,253,253,253,253,253,253,253,253,253,253, 74,253,253, //a0 -253,253,253,253,247,248, 61, 36, 46, 71, 73,253, 54,253,108,123, //b0 -110, 31, 51, 43, 41, 34, 91, 40, 52, 47, 44, 53, 38, 49, 59, 39, //c0 - 35, 48,250, 37, 33, 45, 56, 50, 84, 57,120,121, 17, 18, 22, 15, //d0 -124, 1, 29, 20, 21, 3, 32, 13, 25, 5, 11, 16, 10, 6, 30, 4, //e0 - 9, 8, 14, 7, 2, 12, 28, 23, 42, 24, 64, 75, 19, 26, 27,253, //f0 -}; - - - -static const unsigned char win1253_CharToOrderMap[] = -{ -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, //00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //10 -+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, //20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, //30 -253, 82,100,104, 94, 98,101,116,102,111,187,117, 92, 88,113, 85, //40 - 79,118,105, 83, 67,114,119, 95, 99,109,188,253,253,253,253,253, //50 -253, 72, 70, 80, 81, 60, 96, 93, 89, 68,120, 97, 77, 86, 69, 55, //60 - 78,115, 65, 66, 58, 76,106,103, 87,107,112,253,253,253,253,253, //70 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //80 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //90 -+253,233, 61,253,253,253,253,253,253,253,253,253,253, 74,253,253, //a0 -253,253,253,253,247,253,253, 36, 46, 71, 73,253, 54,253,108,123, //b0 -110, 31, 51, 43, 41, 34, 91, 40, 52, 47, 44, 53, 38, 49, 59, 39, //c0 - 35, 48,250, 37, 33, 45, 56, 50, 84, 57,120,121, 17, 18, 22, 15, //d0 -124, 1, 29, 20, 21, 3, 32, 13, 25, 5, 11, 16, 10, 6, 30, 4, //e0 - 9, 8, 14, 7, 2, 12, 28, 23, 42, 24, 64, 75, 19, 26, 27,253, //f0 -}; - -//Model Table: -//total sequences: 100% -//first 512 sequences: 98.2851% -//first 1024 sequences:1.7001% -//rest sequences: 0.0359% -//negative sequences: 0.0148% -static const PRUint8 GreekLangModel[] = -{ -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,3,2,2,3,3,3,3,3,3,3,3,1,3,3,3,0,2,2,3,3,0,3,0,3,2,0,3,3,3,0, -3,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,0,3,3,0,3,2,3,3,0,3,2,3,3,3,0,0,3,0,3,0,3,3,2,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0, -0,2,3,2,2,3,3,3,3,3,3,3,3,0,3,3,3,3,0,2,3,3,0,3,3,3,3,2,3,3,3,0, -2,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,0,2,1,3,3,3,3,2,3,3,2,3,3,2,0, -0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,0,3,3,3,3,3,3,0,3,3,0,3,3,3,3,3,3,3,3,3,3,0,3,2,3,3,0, -2,0,1,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,2,3,0,0,0,0,3,3,0,3,1,3,3,3,0,3,3,0,3,3,3,3,0,0,0,0, -2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,0,3,0,3,3,3,3,3,0,3,2,2,2,3,0,2,3,3,3,3,3,2,3,3,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,3,2,2,2,3,3,3,3,0,3,1,3,3,3,3,2,3,3,3,3,3,3,3,2,2,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,2,0,3,0,0,0,3,3,2,3,3,3,3,3,0,0,3,2,3,0,2,3,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,0,3,3,3,3,0,0,3,3,0,2,3,0,3,0,3,3,3,0,0,3,0,3,0,2,2,3,3,0,0, -0,0,1,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,2,0,3,2,3,3,3,3,0,3,3,3,3,3,0,3,3,2,3,2,3,3,2,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,2,3,2,3,3,3,3,3,3,0,2,3,2,3,2,2,2,3,2,3,3,2,3,0,2,2,2,3,0, -2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,3,0,0,0,3,3,3,2,3,3,0,0,3,0,3,0,0,0,3,2,0,3,0,3,0,0,2,0,2,0, -0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,0,3,3,3,3,3,3,0,3,3,0,3,0,0,0,3,3,0,3,3,3,0,0,1,2,3,0, -3,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,2,0,0,3,2,2,3,3,0,3,3,3,3,3,2,1,3,0,3,2,3,3,2,1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,3,3,0,2,3,3,3,3,3,3,0,0,3,0,3,0,0,0,3,3,0,3,2,3,0,0,3,3,3,0, -3,0,0,0,2,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,0,3,3,3,3,3,3,0,0,3,0,3,0,0,0,3,2,0,3,2,3,0,0,3,2,3,0, -2,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,3,1,2,2,3,3,3,3,3,3,0,2,3,0,3,0,0,0,3,3,0,3,0,2,0,0,2,3,1,0, -2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,0,3,3,3,3,0,3,0,3,3,2,3,0,3,3,3,3,3,3,0,3,3,3,0,2,3,0,0,3,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,0,3,3,3,0,0,3,0,0,0,3,3,0,3,0,2,3,3,0,0,3,0,3,0,3,3,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,3,0,0,0,3,3,3,3,3,3,0,0,3,0,2,0,0,0,3,3,0,3,0,3,0,0,2,0,2,0, -0,0,0,0,1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,3,0,3,0,2,0,3,2,0,3,2,3,2,3,0,0,3,2,3,2,3,3,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,3,0,0,2,3,3,3,3,3,0,0,0,3,0,2,1,0,0,3,2,2,2,0,3,0,0,2,2,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,0,3,3,3,2,0,3,0,3,0,3,3,0,2,1,2,3,3,0,0,3,0,3,0,3,3,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,2,3,3,3,0,3,3,3,3,3,3,0,2,3,0,3,0,0,0,2,1,0,2,2,3,0,0,2,2,2,0, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,3,0,0,2,3,3,3,2,3,0,0,1,3,0,2,0,0,0,0,3,0,1,0,2,0,0,1,1,1,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,1,0,3,0,0,0,3,2,0,3,2,3,3,3,0,0,3,0,3,2,2,2,1,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,0,3,3,3,0,0,3,0,0,0,0,2,0,2,3,3,2,2,2,2,3,0,2,0,2,2,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,2,0,0,0,0,0,0,2,3,0,2,0,2,3,2,0,0,3,0,3,0,3,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,3,2,3,3,2,2,3,0,2,0,3,0,0,0,2,0,0,0,0,1,2,0,2,0,2,0, -0,2,0,2,0,2,2,0,0,1,0,2,2,2,0,2,2,2,0,2,2,2,0,0,2,0,0,1,0,0,0,0, -0,2,0,3,3,2,0,0,0,0,0,0,1,3,0,2,0,2,2,2,0,0,2,0,3,0,0,2,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,0,2,3,2,0,2,2,0,2,0,2,2,0,2,0,2,2,2,0,0,0,0,0,0,2,3,0,0,0,2, -0,1,2,0,0,0,0,2,2,0,0,0,2,1,0,2,2,0,0,0,0,0,0,1,0,2,0,0,0,0,0,0, -0,0,2,1,0,2,3,2,2,3,2,3,2,0,0,3,3,3,0,0,3,2,0,0,0,1,1,0,2,0,2,2, -0,2,0,2,0,2,2,0,0,2,0,2,2,2,0,2,2,2,2,0,0,2,0,0,0,2,0,1,0,0,0,0, -0,3,0,3,3,2,2,0,3,0,0,0,2,2,0,2,2,2,1,2,0,0,1,2,2,0,0,3,0,0,0,2, -0,1,2,0,0,0,1,2,0,0,0,0,0,0,0,2,2,0,1,0,0,2,0,0,0,2,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,2,3,3,2,2,0,0,0,2,0,2,3,3,0,2,0,0,0,0,0,0,2,2,2,0,2,2,0,2,0,2, -0,2,2,0,0,2,2,2,2,1,0,0,2,2,0,2,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0, -0,2,0,3,2,3,0,0,0,3,0,0,2,2,0,2,0,2,2,2,0,0,2,0,0,0,0,0,0,0,0,2, -0,0,2,2,0,0,2,2,2,0,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,2,0,0,3,2,0,2,2,2,2,2,0,0,0,2,0,0,0,0,2,0,1,0,0,2,0,1,0,0,0, -0,2,2,2,0,2,2,0,1,2,0,2,2,2,0,2,2,2,2,1,2,2,0,0,2,0,0,0,0,0,0,0, -0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, -0,2,0,2,0,2,2,0,0,0,0,1,2,1,0,0,2,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,3,2,3,0,0,2,0,0,0,2,2,0,2,0,0,0,1,0,0,2,0,2,0,2,2,0,0,0,0, -0,0,2,0,0,0,0,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0, -0,2,2,3,2,2,0,0,0,0,0,0,1,3,0,2,0,2,2,0,0,0,1,0,2,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,2,0,2,0,3,2,0,2,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -0,0,2,0,0,0,0,1,1,0,0,2,1,2,0,2,2,0,1,0,0,1,0,0,0,2,0,0,0,0,0,0, -0,3,0,2,2,2,0,0,2,0,0,0,2,0,0,0,2,3,0,2,0,0,0,0,0,0,2,2,0,0,0,2, -0,1,2,0,0,0,1,2,2,1,0,0,0,2,0,0,2,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,2,1,2,0,2,2,0,2,0,0,2,0,0,0,0,1,2,1,0,2,1,0,0,0,0,0,0,0,0,0,0, -0,0,2,0,0,0,3,1,2,2,0,2,0,0,0,0,2,0,0,0,2,0,0,3,0,0,0,0,2,2,2,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,2,1,0,2,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,2, -0,2,2,0,0,2,2,2,2,2,0,1,2,0,0,0,2,2,0,1,0,2,0,0,2,2,0,0,0,0,0,0, -0,0,0,0,1,0,0,0,0,0,0,0,3,0,0,2,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,2, -0,1,2,0,0,0,0,2,2,1,0,1,0,1,0,2,2,2,1,0,0,0,0,0,0,1,0,0,0,0,0,0, -0,2,0,1,2,0,0,0,0,0,0,0,0,0,0,2,0,0,2,2,0,0,0,0,1,0,0,0,0,0,0,2, -0,2,2,0,0,0,0,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,0, -0,2,2,2,2,0,0,0,3,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,1, -0,0,2,0,0,0,0,1,2,0,0,0,0,0,0,2,2,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0, -0,2,0,2,2,2,0,0,2,0,0,0,0,0,0,0,2,2,2,0,0,0,2,0,0,0,0,0,0,0,0,2, -0,0,1,0,0,0,0,2,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0, -0,3,0,2,0,0,0,0,0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,2, -0,0,2,0,0,0,0,2,2,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,2,0,2,2,1,0,0,0,0,0,0,2,0,0,2,0,2,2,2,0,0,0,0,0,0,2,0,0,0,0,2, -0,0,2,0,0,2,0,2,2,0,0,0,0,2,0,2,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0, -0,0,3,0,0,0,2,2,0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,0,0,0, -0,2,2,2,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1, -0,0,0,0,0,0,0,2,1,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, -0,2,0,0,0,2,0,0,0,0,0,1,0,0,0,0,2,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,2,0,0,0, -0,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,2,0,2,0,0,0, -0,0,0,0,0,0,0,0,2,1,0,0,0,0,0,0,2,0,0,0,1,2,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -}; - -const SequenceModel Latin7Model = -{ - Latin7_CharToOrderMap, - GreekLangModel, - (float)0.982851, - PR_FALSE, - "ISO-8859-7" -}; - -const SequenceModel Win1253Model = -{ - win1253_CharToOrderMap, - GreekLangModel, - (float)0.982851, - PR_FALSE, - "windows-1253" -}; diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/LangHebrewModel.cpp b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/LangHebrewModel.cpp deleted file mode 100644 index a4e10ad..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/LangHebrewModel.cpp +++ /dev/null @@ -1,219 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is Mozilla Universal charset detector code. - * - * The Initial Developer of the Original Code is - * Simon Montagu <smontagu@smontagu.org> - * Portions created by the Initial Developer are Copyright (C) 2005 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * Shoshannah Forbes <xslf@xslf.com> - * Shy Shalom <shooshX@gmail.com> - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#include "nsSBCharSetProber.h" - - -/**************************************************************** -255: Control characters that usually does not exist in any text -254: Carriage/Return -253: symbol (punctuation) that does not belong to word -252: 0 - 9 - -*****************************************************************/ - -//Windows-1255 language model -//Character Mapping Table: -static const unsigned char win1255_CharToOrderMap[] = -{ -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, //00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //10 -+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, //20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, //30 -253, 69, 91, 79, 80, 92, 89, 97, 90, 68,111,112, 82, 73, 95, 85, //40 - 78,121, 86, 71, 67,102,107, 84,114,103,115,253,253,253,253,253, //50 -253, 50, 74, 60, 61, 42, 76, 70, 64, 53,105, 93, 56, 65, 54, 49, //60 - 66,110, 51, 43, 44, 63, 81, 77, 98, 75,108,253,253,253,253,253, //70 -124,202,203,204,205, 40, 58,206,207,208,209,210,211,212,213,214, -215, 83, 52, 47, 46, 72, 32, 94,216,113,217,109,218,219,220,221, - 34,116,222,118,100,223,224,117,119,104,125,225,226, 87, 99,227, -106,122,123,228, 55,229,230,101,231,232,120,233, 48, 39, 57,234, - 30, 59, 41, 88, 33, 37, 36, 31, 29, 35,235, 62, 28,236,126,237, -238, 38, 45,239,240,241,242,243,127,244,245,246,247,248,249,250, - 9, 8, 20, 16, 3, 2, 24, 14, 22, 1, 25, 15, 4, 11, 6, 23, - 12, 19, 13, 26, 18, 27, 21, 17, 7, 10, 5,251,252,128, 96,253, -}; - -//Model Table: -//total sequences: 100% -//first 512 sequences: 98.4004% -//first 1024 sequences: 1.5981% -//rest sequences: 0.087% -//negative sequences: 0.0015% -static const PRUint8 HebrewLangModel[] = -{ -0,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,3,2,1,2,0,1,0,0, -3,0,3,1,0,0,1,3,2,0,1,1,2,0,2,2,2,1,1,1,1,2,1,1,1,2,0,0,2,2,0,1, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2, -1,2,1,2,1,2,0,0,2,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2, -1,2,1,3,1,1,0,0,2,0,0,0,1,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,0,1,2,2,1,3, -1,2,1,1,2,2,0,0,2,2,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,3,2, -1,2,1,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,2,2,3,2,2,2,1,2,2,2,2, -1,2,1,1,2,2,0,1,2,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,0,2,2,2,2,2, -0,2,0,2,2,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,0,2,2,2, -0,2,1,2,2,2,0,0,2,1,0,0,0,0,1,0,1,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,1,2,3,2,2,2, -1,2,1,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0, -3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,1,0,2,0,2, -0,2,1,2,2,2,0,0,1,2,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,2,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,2,2,3,2,1,2,1,1,1, -0,1,1,1,1,1,3,0,1,0,0,0,0,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,0, -0,0,1,0,0,0,0,0,2,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2, -0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,2,3,3,3,2,1,2,3,3,2,3,3,3,3,2,3,2,1,2,0,2,1,2, -0,2,0,2,2,2,0,0,1,2,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0, -3,3,3,3,3,3,3,3,3,2,3,3,3,1,2,2,3,3,2,3,2,3,2,2,3,1,2,2,0,2,2,2, -0,2,1,2,2,2,0,0,1,2,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,2,2,3,3,3,3,1,3,2,2,2, -0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,2,3,2,2,2,1,2,2,0,2,2,2,2, -0,2,0,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,1,3,2,3,3,2,3,3,2,2,1,2,2,2,2,2,2, -0,2,1,2,1,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,2,3,2,3,3,2,3,3,3,3,2,3,2,3,3,3,3,3,2,2,2,2,2,2,2,1, -0,2,0,1,2,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,2,1,2,3,3,3,3,3,3,3,2,3,2,3,2,1,2,3,0,2,1,2,2, -0,2,1,1,2,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2,0, -3,3,3,3,3,3,3,3,3,2,3,3,3,3,2,1,3,1,2,2,2,1,2,3,3,1,2,1,2,2,2,2, -0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,0,2,3,3,3,1,3,3,3,1,2,2,2,2,1,1,2,2,2,2,2,2, -0,2,0,1,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,2,3,3,3,2,2,3,3,3,2,1,2,3,2,3,2,2,2,2,1,2,1,1,1,2,2, -0,2,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0, -1,0,1,0,0,0,0,0,2,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,2,3,3,2,3,1,2,2,2,2,3,2,3,1,1,2,2,1,2,2,1,1,0,2,2,2,2, -0,1,0,1,2,2,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, -3,0,0,1,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,2,0, -0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,1,0,1,0,1,1,0,1,1,0,0,0,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, -3,2,2,1,2,2,2,2,2,2,2,1,2,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,0,3,3,3, -0,3,0,2,2,2,2,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,1,1,1,2,0,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,0,0,0,0,0, -0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,3,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,0,2,1,0, -0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, -0,3,1,1,2,2,2,2,2,1,2,2,2,1,1,2,2,2,2,2,2,2,1,2,2,1,0,1,1,1,1,0, -0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,2,1,1,1,1,2,1,1,2,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0, -0,0,2,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,0,0, -2,1,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,1,2,1,2,1,1,1,1,0,0,0,0, -0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,2,1,2,2,2,2,2,2,2,2,2,2,1,2,1,2,1,1,2,1,1,1,2,1,2,1,2,0,1,0,1, -0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,1,2,2,2,1,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,2,1,2,1,1,0,1,0,1, -0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,1,2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2, -0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,1,1,1,1,1,1,1,0,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,2,0,1,1,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,0,1,1,0,0, -0,1,1,1,2,1,2,2,2,0,2,0,2,0,1,1,2,1,1,1,1,2,1,0,1,1,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,1,0,0,0,0,0,1,0,1,2,2,0,1,0,0,1,1,2,2,1,2,0,2,0,0,0,1,2,0,1, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,2,0,2,1,2,0,2,0,0,1,1,1,1,1,1,0,1,0,0,0,1,0,0,1, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,1,0,0,0,0,0,1,0,2,1,1,0,1,0,0,1,1,1,2,2,0,0,1,0,0,0,1,0,0,1, -1,1,2,1,0,1,1,1,0,1,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,2,2,1, -0,2,0,1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,1,0,0,1,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,1,1,1,1,1,1,1,1,2,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,1, -2,0,1,0,1,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,2,1,1,2,0,1,0,0,0,1,1,0,1, -1,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,0,0,2,1,1,2,0,2,0,0,0,1,1,0,1, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,2,1,1,0,1,0,0,2,2,1,2,1,1,0,1,0,0,0,1,1,0,1, -2,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,2,2,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,1,0,1, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,2,2,0,0,0,0,2,1,1,1,0,2,1,1,0,0,0,2,1,0,1, -1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,1,1,0,2,1,1,0,1,0,0,0,1,1,0,1, -2,2,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,2,1,1,0,1,0,0,1,1,0,1,2,1,0,2,0,0,0,1,1,0,1, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0, -0,1,0,0,2,0,2,1,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,1,1,1,0,1,0,0,1,0,0,0,1,0,0,1, -1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,2,1,1,1,1,1,0,1,0,0,0,0,1,0,1, -0,1,1,1,2,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,2,1,0,0,0,0,0,1,1,1,1,1,0,1,0,0,0,1,1,0,0, -}; - -const SequenceModel Win1255Model = -{ - win1255_CharToOrderMap, - HebrewLangModel, - (float)0.984004, - PR_FALSE, - "windows-1255" -}; - diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/LangHungarianModel.cpp b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/LangHungarianModel.cpp deleted file mode 100644 index 3af2f58..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/LangHungarianModel.cpp +++ /dev/null @@ -1,242 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is Mozilla Communicator client code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#include "nsSBCharSetProber.h" -/**************************************************************** -255: Control characters that usually does not exist in any text -254: Carriage/Return -253: symbol (punctuation) that does not belong to word -252: 0 - 9 - -*****************************************************************/ - -//Character Mapping Table: -static const unsigned char Latin2_HungarianCharToOrderMap[] = -{ -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, //00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //10 -+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, //20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, //30 -253, 28, 40, 54, 45, 32, 50, 49, 38, 39, 53, 36, 41, 34, 35, 47, - 46, 71, 43, 33, 37, 57, 48, 64, 68, 55, 52,253,253,253,253,253, -253, 2, 18, 26, 17, 1, 27, 12, 20, 9, 22, 7, 6, 13, 4, 8, - 23, 67, 10, 5, 3, 21, 19, 65, 62, 16, 11,253,253,253,253,253, -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, 75,198,199,200,201,202,203,204,205, - 79,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220, -221, 51, 81,222, 78,223,224,225,226, 44,227,228,229, 61,230,231, -232,233,234, 58,235, 66, 59,236,237,238, 60, 69, 63,239,240,241, - 82, 14, 74,242, 70, 80,243, 72,244, 15, 83, 77, 84, 30, 76, 85, -245,246,247, 25, 73, 42, 24,248,249,250, 31, 56, 29,251,252,253, -}; - -static const unsigned char win1250HungarianCharToOrderMap[] = -{ -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, //00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //10 -+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, //20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, //30 -253, 28, 40, 54, 45, 32, 50, 49, 38, 39, 53, 36, 41, 34, 35, 47, - 46, 72, 43, 33, 37, 57, 48, 64, 68, 55, 52,253,253,253,253,253, -253, 2, 18, 26, 17, 1, 27, 12, 20, 9, 22, 7, 6, 13, 4, 8, - 23, 67, 10, 5, 3, 21, 19, 65, 62, 16, 11,253,253,253,253,253, -161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176, -177,178,179,180, 78,181, 69,182,183,184,185,186,187,188,189,190, -191,192,193,194,195,196,197, 76,198,199,200,201,202,203,204,205, - 81,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220, -221, 51, 83,222, 80,223,224,225,226, 44,227,228,229, 61,230,231, -232,233,234, 58,235, 66, 59,236,237,238, 60, 70, 63,239,240,241, - 84, 14, 75,242, 71, 82,243, 73,244, 15, 85, 79, 86, 30, 77, 87, -245,246,247, 25, 74, 42, 24,248,249,250, 31, 56, 29,251,252,253, -}; - -//Model Table: -//total sequences: 100% -//first 512 sequences: 94.7368% -//first 1024 sequences:5.2623% -//rest sequences: 0.8894% -//negative sequences: 0.0009% -static const PRUint8 HungarianLangModel[] = -{ -0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, -3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,2,2,3,3,1,1,2,2,2,2,2,1,2, -3,2,2,3,3,3,3,3,2,3,3,3,3,3,3,1,2,3,3,3,3,2,3,3,1,1,3,3,0,1,1,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0, -3,2,1,3,3,3,3,3,2,3,3,3,3,3,1,1,2,3,3,3,3,3,3,3,1,1,3,2,0,1,1,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,1,1,2,3,3,3,1,3,3,3,3,3,1,3,3,2,2,0,3,2,3, -0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,3,3,3,2,3,3,2,3,3,3,3,3,2,3,3,2,2,3,2,3,2,0,3,2,2, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0, -3,3,3,3,3,3,2,3,3,3,3,3,2,3,3,3,1,2,3,2,2,3,1,2,3,3,2,2,0,3,3,3, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,2,3,3,3,3,2,3,3,3,3,0,2,3,2, -0,0,0,1,1,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,1,1,1,3,3,2,1,3,2,2,3,2,1,3,2,2,1,0,3,3,1, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,2,2,3,3,3,3,3,1,2,3,3,3,3,1,2,1,3,3,3,3,2,2,3,1,1,3,2,0,1,1,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,2,1,3,3,3,3,3,2,2,1,3,3,3,0,1,1,2, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,3,3,3,2,0,3,2,3, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,1,0, -3,3,3,3,3,3,2,3,3,3,2,3,2,3,3,3,1,3,2,2,2,3,1,1,3,3,1,1,0,3,3,2, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,2,3,3,3,2,3,2,3,3,3,2,3,3,3,3,3,1,2,3,2,2,0,2,2,2, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,2,2,2,3,1,3,3,2,2,1,3,3,3,1,1,3,1,2,3,2,3,2,2,2,1,0,2,2,2, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0, -3,1,1,3,3,3,3,3,1,2,3,3,3,3,1,2,1,3,3,3,2,2,3,2,1,0,3,2,0,1,1,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,1,3,3,3,3,3,1,2,3,3,3,3,1,1,0,3,3,3,3,0,2,3,0,0,2,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,2,3,3,2,2,2,2,3,3,0,1,2,3,2,3,2,2,3,2,1,2,0,2,2,2, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0, -3,3,3,3,3,3,1,2,3,3,3,2,1,2,3,3,2,2,2,3,2,3,3,1,3,3,1,1,0,2,3,2, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,1,2,2,2,2,3,3,3,1,1,1,3,3,1,1,3,1,1,3,2,1,2,3,1,1,0,2,2,2, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,2,1,2,1,1,3,3,1,1,1,1,3,3,1,1,2,2,1,2,1,1,2,2,1,1,0,2,2,1, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,1,1,2,1,1,3,3,1,0,1,1,3,3,2,0,1,1,2,3,1,0,2,2,1,0,0,1,3,2, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,2,1,3,3,3,3,3,1,2,3,2,3,3,2,1,1,3,2,3,2,1,2,2,0,1,2,1,0,0,1,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,3,3,3,2,2,2,2,3,1,2,2,1,1,3,3,0,3,2,1,2,3,2,1,3,3,1,1,0,2,1,3, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,2,2,2,3,2,3,3,3,2,1,1,3,3,1,1,1,2,2,3,2,3,2,2,2,1,0,2,2,1, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -1,0,0,3,3,3,3,3,0,0,3,3,2,3,0,0,0,2,3,3,1,0,1,2,0,0,1,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,2,3,3,3,3,3,1,2,3,3,2,2,1,1,0,3,3,2,2,1,2,2,1,0,2,2,0,1,1,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,2,2,1,3,1,2,3,3,2,2,1,1,2,2,1,1,1,1,3,2,1,1,1,1,2,1,0,1,2,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0, -2,3,3,1,1,1,1,1,3,3,3,0,1,1,3,3,1,1,1,1,1,2,2,0,3,1,1,2,0,2,1,1, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,1,0,1,2,1,2,2,0,1,2,3,1,2,0,0,0,2,1,1,1,1,1,2,0,0,1,1,0,0,0,0, -1,2,1,2,2,2,1,2,1,2,0,2,0,2,2,1,1,2,1,1,2,1,1,1,0,1,0,0,0,1,1,0, -1,1,1,2,3,2,3,3,0,1,2,2,3,1,0,1,0,2,1,2,2,0,1,1,0,0,1,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,3,3,2,2,1,0,0,3,2,3,2,0,0,0,1,1,3,0,0,1,1,0,0,2,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,1,2,2,3,3,1,0,1,3,2,3,1,1,1,0,1,1,1,1,1,3,1,0,0,2,2,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,1,1,2,2,2,1,0,1,2,3,3,2,0,0,0,2,1,1,1,2,1,1,1,0,1,1,1,0,0,0, -1,2,2,2,2,2,1,1,1,2,0,2,1,1,1,1,1,2,1,1,1,1,1,1,0,1,1,1,0,0,1,1, -3,2,2,1,0,0,1,1,2,2,0,3,0,1,2,1,1,0,0,1,1,1,0,1,1,1,1,0,2,1,1,1, -2,2,1,1,1,2,1,2,1,1,1,1,1,1,1,2,1,1,1,2,3,1,1,1,1,1,1,1,1,1,0,1, -2,3,3,0,1,0,0,0,3,3,1,0,0,1,2,2,1,0,0,0,0,2,0,0,1,1,1,0,2,1,1,1, -2,1,1,1,1,1,1,2,1,1,0,1,1,0,1,1,1,0,1,2,1,1,0,1,1,1,1,1,1,1,0,1, -2,3,3,0,1,0,0,0,2,2,0,0,0,0,1,2,2,0,0,0,0,1,0,0,1,1,0,0,2,0,1,0, -2,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,0,1,1,1,1,1,0,1, -3,2,2,0,1,0,1,0,2,3,2,0,0,1,2,2,1,0,0,1,1,1,0,0,2,1,0,1,2,2,1,1, -2,1,1,1,1,1,1,2,1,1,1,1,1,1,0,2,1,0,1,1,0,1,1,1,0,1,1,2,1,1,0,1, -2,2,2,0,0,1,0,0,2,2,1,1,0,0,2,1,1,0,0,0,1,2,0,0,2,1,0,0,2,1,1,1, -2,1,1,1,1,2,1,2,1,1,1,2,2,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,0,1, -1,2,3,0,0,0,1,0,3,2,1,0,0,1,2,1,1,0,0,0,0,2,1,0,1,1,0,0,2,1,2,1, -1,1,0,0,0,1,0,1,1,1,1,1,2,0,0,1,0,0,0,2,0,0,1,1,1,1,1,1,1,1,0,1, -3,0,0,2,1,2,2,1,0,0,2,1,2,2,0,0,0,2,1,1,1,0,1,1,0,0,1,1,2,0,0,0, -1,2,1,2,2,1,1,2,1,2,0,1,1,1,1,1,1,1,1,1,2,1,1,0,0,1,1,1,1,0,0,1, -1,3,2,0,0,0,1,0,2,2,2,0,0,0,2,2,1,0,0,0,0,3,1,1,1,1,0,0,2,1,1,1, -2,1,0,1,1,1,0,1,1,1,1,1,1,1,0,2,1,0,0,1,0,1,1,0,1,1,1,1,1,1,0,1, -2,3,2,0,0,0,1,0,2,2,0,0,0,0,2,1,1,0,0,0,0,2,1,0,1,1,0,0,2,1,1,0, -2,1,1,1,1,2,1,2,1,2,0,1,1,1,0,2,1,1,1,2,1,1,1,1,0,1,1,1,1,1,0,1, -3,1,1,2,2,2,3,2,1,1,2,2,1,1,0,1,0,2,2,1,1,1,1,1,0,0,1,1,0,1,1,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,0,0,0,0,0,2,2,0,0,0,0,2,2,1,0,0,0,1,1,0,0,1,2,0,0,2,1,1,1, -2,2,1,1,1,2,1,2,1,1,0,1,1,1,1,2,1,1,1,2,1,1,1,1,0,1,2,1,1,1,0,1, -1,0,0,1,2,3,2,1,0,0,2,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,1,0,0,0,0,0, -1,2,1,2,1,2,1,1,1,2,0,2,1,1,1,0,1,2,0,0,1,1,1,0,0,0,0,0,0,0,0,0, -2,3,2,0,0,0,0,0,1,1,2,1,0,0,1,1,1,0,0,0,0,2,0,0,1,1,0,0,2,1,1,1, -2,1,1,1,1,1,1,2,1,0,1,1,1,1,0,2,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,1, -1,2,2,0,1,1,1,0,2,2,2,0,0,0,3,2,1,0,0,0,1,1,0,0,1,1,0,1,1,1,0,0, -1,1,0,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,0,0,1,1,1,0,1,0,1, -2,1,0,2,1,1,2,2,1,1,2,1,1,1,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0, -1,2,2,2,2,2,1,1,1,2,0,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,1,0, -1,2,3,0,0,0,1,0,2,2,0,0,0,0,2,2,0,0,0,0,0,1,0,0,1,0,0,0,2,0,1,0, -2,1,1,1,1,1,0,2,0,0,0,1,2,1,1,1,1,0,1,2,0,1,0,1,0,1,1,1,0,1,0,1, -2,2,2,0,0,0,1,0,2,1,2,0,0,0,1,1,2,0,0,0,0,1,0,0,1,1,0,0,2,1,0,1, -2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,0,1,1,1,1,1,0,1, -1,2,2,0,0,0,1,0,2,2,2,0,0,0,1,1,0,0,0,0,0,1,1,0,2,0,0,1,1,1,0,1, -1,0,1,1,1,1,1,1,0,1,1,1,1,0,0,1,0,0,1,1,0,1,0,1,1,1,1,1,0,0,0,1, -1,0,0,1,0,1,2,1,0,0,1,1,1,2,0,0,0,1,1,0,1,0,1,1,0,0,1,0,0,0,0,0, -0,2,1,2,1,1,1,1,1,2,0,2,0,1,1,0,1,2,1,0,1,1,1,0,0,0,0,0,0,1,0,0, -2,1,1,0,1,2,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,0,0,2,1,0,1, -2,2,1,1,1,1,1,2,1,1,0,1,1,1,1,2,1,1,1,2,1,1,0,1,0,1,1,1,1,1,0,1, -1,2,2,0,0,0,0,0,1,1,0,0,0,0,2,1,0,0,0,0,0,2,0,0,2,2,0,0,2,0,0,1, -2,1,1,1,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1, -1,1,2,0,0,3,1,0,2,1,1,1,0,0,1,1,1,0,0,0,1,1,0,0,0,1,0,0,1,0,1,0, -1,2,1,0,1,1,1,2,1,1,0,1,1,1,1,1,0,0,0,1,1,1,1,1,0,1,0,0,0,1,0,0, -2,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,2,0,0,0, -2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,1,1,0,0,1,1,1,1,1,0,1, -2,1,1,1,2,1,1,1,0,1,1,2,1,0,0,0,0,1,1,1,1,0,1,0,0,0,0,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,1,0,1,1,1,1,1,0,0,1,1,2,1,0,0,0,1,1,0,0,0,1,1,0,0,1,0,1,0,0,0, -1,2,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0, -2,0,0,0,1,1,1,1,0,0,1,1,0,0,0,0,0,1,1,1,2,0,0,1,0,0,1,0,1,0,0,0, -0,1,1,1,1,1,1,1,1,2,0,1,1,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0, -1,0,0,1,1,1,1,1,0,0,2,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0, -0,1,1,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0, -1,0,0,1,1,1,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -0,1,1,1,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0, -0,0,0,1,0,0,0,0,0,0,1,1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,1,1,1,0,1,0,0,1,1,0,1,0,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0, -2,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,0,1,0,0,1,0,1,0,1,1,1,0,0,1,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0, -0,1,1,1,1,1,1,0,1,1,0,1,0,1,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0, -}; - -const SequenceModel Latin2HungarianModel = -{ - Latin2_HungarianCharToOrderMap, - HungarianLangModel, - (float)0.947368, - PR_TRUE, - "ISO-8859-2" -}; - -const SequenceModel Win1250HungarianModel = -{ - win1250HungarianCharToOrderMap, - HungarianLangModel, - (float)0.947368, - PR_TRUE, - "windows-1250" -}; diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/LangThaiModel.cpp b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/LangThaiModel.cpp deleted file mode 100644 index 8145ffa..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/LangThaiModel.cpp +++ /dev/null @@ -1,221 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is Mozilla Communicator client code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#include "nsSBCharSetProber.h" - - -/**************************************************************** -255: Control characters that usually does not exist in any text -254: Carriage/Return -253: symbol (punctuation) that does not belong to word -252: 0 - 9 - -*****************************************************************/ - -//The following result for thai was collected from a limited sample (1M). - -//Character Mapping Table: -static const unsigned char TIS620CharToOrderMap[] = -{ -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, //00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //10 -+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, //20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, //30 -253,182,106,107,100,183,184,185,101, 94,186,187,108,109,110,111, //40 -188,189,190, 89, 95,112,113,191,192,193,194,253,253,253,253,253, //50 -253, 64, 72, 73,114, 74,115,116,102, 81,201,117, 90,103, 78, 82, //60 - 96,202, 91, 79, 84,104,105, 97, 98, 92,203,253,253,253,253,253, //70 -209,210,211,212,213, 88,214,215,216,217,218,219,220,118,221,222, -223,224, 99, 85, 83,225,226,227,228,229,230,231,232,233,234,235, -236, 5, 30,237, 24,238, 75, 8, 26, 52, 34, 51,119, 47, 58, 57, - 49, 53, 55, 43, 20, 19, 44, 14, 48, 3, 17, 25, 39, 62, 31, 54, - 45, 9, 16, 2, 61, 15,239, 12, 42, 46, 18, 21, 76, 4, 66, 63, - 22, 10, 1, 36, 23, 13, 40, 27, 32, 35, 86,240,241,242,243,244, - 11, 28, 41, 29, 33,245, 50, 37, 6, 7, 67, 77, 38, 93,246,247, - 68, 56, 59, 65, 69, 60, 70, 80, 71, 87,248,249,250,251,252,253, -}; - - - - -//Model Table: -//total sequences: 100% -//first 512 sequences: 92.6386% -//first 1024 sequences:7.3177% -//rest sequences: 1.0230% -//negative sequences: 0.0436% -static const PRUint8 ThaiLangModel[] = -{ -0,1,3,3,3,3,0,0,3,3,0,3,3,0,3,3,3,3,3,3,3,3,0,0,3,3,3,0,3,3,3,3, -0,3,3,0,0,0,1,3,0,3,3,2,3,3,0,1,2,3,3,3,3,0,2,0,2,0,0,3,2,1,2,2, -3,0,3,3,2,3,0,0,3,3,0,3,3,0,3,3,3,3,3,3,3,3,3,0,3,2,3,0,2,2,2,3, -0,2,3,0,0,0,0,1,0,1,2,3,1,1,3,2,2,0,1,1,0,0,1,0,0,0,0,0,0,0,1,1, -3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,2,3,2,3,3,2,2,2, -3,1,2,3,0,3,3,2,2,1,2,3,3,1,2,0,1,3,0,1,0,0,1,0,0,0,0,0,0,0,1,1, -3,3,2,2,3,3,3,3,1,2,3,3,3,3,3,2,2,2,2,3,3,2,2,3,3,2,2,3,2,3,2,2, -3,3,1,2,3,1,2,2,3,3,1,0,2,1,0,0,3,1,2,1,0,0,1,0,0,0,0,0,0,1,0,1, -3,3,3,3,3,3,2,2,3,3,3,3,2,3,2,2,3,3,2,2,3,2,2,2,2,1,1,3,1,2,1,1, -3,2,1,0,2,1,0,1,0,1,1,0,1,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0, -3,3,3,2,3,2,3,3,2,2,3,2,3,3,2,3,1,1,2,3,2,2,2,3,2,2,2,2,2,1,2,1, -2,2,1,1,3,3,2,1,0,1,2,2,0,1,3,0,0,0,1,1,0,0,0,0,0,2,3,0,0,2,1,1, -3,3,2,3,3,2,0,0,3,3,0,3,3,0,2,2,3,1,2,2,1,1,1,0,2,2,2,0,2,2,1,1, -0,2,1,0,2,0,0,2,0,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0, -3,3,2,3,3,2,0,0,3,3,0,2,3,0,2,1,2,2,2,2,1,2,0,0,2,2,2,0,2,2,1,1, -0,2,1,0,2,0,0,2,0,1,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0, -3,3,2,3,2,3,2,0,2,2,1,3,2,1,3,2,1,2,3,2,2,3,0,2,3,2,2,1,2,2,2,2, -1,2,2,0,0,0,0,2,0,1,2,0,1,1,1,0,1,0,3,1,1,0,0,0,0,0,0,0,0,0,1,0, -3,3,2,3,3,2,3,2,2,2,3,2,2,3,2,2,1,2,3,2,2,3,1,3,2,2,2,3,2,2,2,3, -3,2,1,3,0,1,1,1,0,2,1,1,1,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,2,0,0, -1,0,0,3,0,3,3,3,3,3,0,0,3,0,2,2,3,3,3,3,3,0,0,0,1,1,3,0,0,0,0,2, -0,0,1,0,0,0,0,0,0,0,2,3,0,0,0,3,0,2,0,0,0,0,0,3,0,0,0,0,0,0,0,0, -2,0,3,3,3,3,0,0,2,3,0,0,3,0,3,3,2,3,3,3,3,3,0,0,3,3,3,0,0,0,3,3, -0,0,3,0,0,0,0,2,0,0,2,1,1,3,0,0,1,0,0,2,3,0,1,0,0,0,0,0,0,0,1,0, -3,3,3,3,2,3,3,3,3,3,3,3,1,2,1,3,3,2,2,1,2,2,2,3,1,1,2,0,2,1,2,1, -2,2,1,0,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0, -3,0,2,1,2,3,3,3,0,2,0,2,2,0,2,1,3,2,2,1,2,1,0,0,2,2,1,0,2,1,2,2, -0,1,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,2,1,3,3,1,1,3,0,2,3,1,1,3,2,1,1,2,0,2,2,3,2,1,1,1,1,1,2, -3,0,0,1,3,1,2,1,2,0,3,0,0,0,1,0,3,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0, -3,3,1,1,3,2,3,3,3,1,3,2,1,3,2,1,3,2,2,2,2,1,3,3,1,2,1,3,1,2,3,0, -2,1,1,3,2,2,2,1,2,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2, -3,3,2,3,2,3,3,2,3,2,3,2,3,3,2,1,0,3,2,2,2,1,2,2,2,1,2,2,1,2,1,1, -2,2,2,3,0,1,3,1,1,1,1,0,1,1,0,2,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,2,3,2,2,1,1,3,2,3,2,3,2,0,3,2,2,1,2,0,2,2,2,1,2,2,2,2,1, -3,2,1,2,2,1,0,2,0,1,0,0,1,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,2,3,1,2,3,3,2,2,3,0,1,1,2,0,3,3,2,2,3,0,1,1,3,0,0,0,0, -3,1,0,3,3,0,2,0,2,1,0,0,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,2,3,2,3,3,0,1,3,1,1,2,1,2,1,1,3,1,1,0,2,3,1,1,1,1,1,1,1,1, -3,1,1,2,2,2,2,1,1,1,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -3,2,2,1,1,2,1,3,3,2,3,2,2,3,2,2,3,1,2,2,1,2,0,3,2,1,2,2,2,2,2,1, -3,2,1,2,2,2,1,1,1,1,0,0,1,1,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,1,3,3,0,2,1,0,3,2,0,0,3,1,0,1,1,0,1,0,0,0,0,0,1, -1,0,0,1,0,3,2,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,2,2,2,3,0,0,1,3,0,3,2,0,3,2,2,3,3,3,3,3,1,0,2,2,2,0,2,2,1,2, -0,2,3,0,0,0,0,1,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -3,0,2,3,1,3,3,2,3,3,0,3,3,0,3,2,2,3,2,3,3,3,0,0,2,2,3,0,1,1,1,3, -0,0,3,0,0,0,2,2,0,1,3,0,1,2,2,2,3,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1, -3,2,3,3,2,0,3,3,2,2,3,1,3,2,1,3,2,0,1,2,2,0,2,3,2,1,0,3,0,0,0,0, -3,0,0,2,3,1,3,0,0,3,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,3,2,2,2,1,2,0,1,3,1,1,3,1,3,0,0,2,1,1,1,1,2,1,1,1,0,2,1,0,1, -1,2,0,0,0,3,1,1,0,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,0,3,1,0,0,0,1,0, -3,3,3,3,2,2,2,2,2,1,3,1,1,1,2,0,1,1,2,1,2,1,3,2,0,0,3,1,1,1,1,1, -3,1,0,2,3,0,0,0,3,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,2,3,0,3,3,0,2,0,0,0,0,0,0,0,3,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,2,3,1,3,0,0,1,2,0,0,2,0,3,3,2,3,3,3,2,3,0,0,2,2,2,0,0,0,2,2, -0,0,1,0,0,0,0,3,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -0,0,0,3,0,2,0,0,0,0,0,0,0,0,0,0,1,2,3,1,3,3,0,0,1,0,3,0,0,0,0,0, -0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,1,2,3,1,2,3,1,0,3,0,2,2,1,0,2,1,1,2,0,1,0,0,1,1,1,1,0,1,0,0, -1,0,0,0,0,1,1,0,3,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,2,1,0,1,1,1,3,1,2,2,2,2,2,2,1,1,1,1,0,3,1,0,1,3,1,1,1,1, -1,1,0,2,0,1,3,1,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,1, -3,0,2,2,1,3,3,2,3,3,0,1,1,0,2,2,1,2,1,3,3,1,0,0,3,2,0,0,0,0,2,1, -0,1,0,0,0,0,1,2,0,1,1,3,1,1,2,2,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, -0,0,3,0,0,1,0,0,0,3,0,0,3,0,3,1,0,1,1,1,3,2,0,0,0,3,0,0,0,0,2,0, -0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0, -3,3,1,3,2,1,3,3,1,2,2,0,1,2,1,0,1,2,0,0,0,0,0,3,0,0,0,3,0,0,0,0, -3,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,1,2,0,3,3,3,2,2,0,1,1,0,1,3,0,0,0,2,2,0,0,0,0,3,1,0,1,0,0,0, -0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,2,3,1,2,0,0,2,1,0,3,1,0,1,2,0,1,1,1,1,3,0,0,3,1,1,0,2,2,1,1, -0,2,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,0,3,1,2,0,0,2,2,0,1,2,0,1,0,1,3,1,2,1,0,0,0,2,0,3,0,0,0,1,0, -0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,1,1,2,2,0,0,0,2,0,2,1,0,1,1,0,1,1,1,2,1,0,0,1,1,1,0,2,1,1,1, -0,1,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1, -0,0,0,2,0,1,3,1,1,1,1,0,0,0,0,3,2,0,1,0,0,0,1,2,0,0,0,1,0,0,0,0, -0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,3,3,3,3,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,2,3,2,2,0,0,0,1,0,0,0,0,2,3,2,1,2,2,3,0,0,0,2,3,1,0,0,0,1,1, -0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0, -3,3,2,2,0,1,0,0,0,0,2,0,2,0,1,0,0,0,1,1,0,0,0,2,1,0,1,0,1,1,0,0, -0,1,0,2,0,0,1,0,3,0,1,0,0,0,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,1,0,0,1,0,0,0,0,0,1,1,2,0,0,0,0,1,0,0,1,3,1,0,0,0,0,1,1,0,0, -0,1,0,0,0,0,3,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0, -3,3,1,1,1,1,2,3,0,0,2,1,1,1,1,1,0,2,1,1,0,0,0,2,1,0,1,2,1,1,0,1, -2,1,0,3,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,3,1,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1, -0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,2,0,0,0,0,0,0,1,2,1,0,1,1,0,2,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,2,0,0,0,1,3,0,1,0,0,0,2,0,0,0,0,0,0,0,1,2,0,0,0,0,0, -3,3,0,0,1,1,2,0,0,1,2,1,0,1,1,1,0,1,1,0,0,2,1,1,0,1,0,0,1,1,1,0, -0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,1,0,0,0,0,1,0,0,0,0,3,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0, -2,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,3,0,0,1,1,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,1,0,1,2,0,1,2,0,0,1,1,0,2,0,1,0,0,1,0,0,0,0,1,0,0,0,2,0,0,0,0, -1,0,0,1,0,1,1,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,1,0,0,0,0,0,0,0,1,1,0,1,1,0,2,1,3,0,0,0,0,1,1,0,0,0,0,0,0,0,3, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,0,1,0,1,0,0,2,0,0,2,0,0,1,1,2,0,0,1,1,0,0,0,1,0,0,0,1,1,0,0,0, -1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,1,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,3,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,0,0, -1,0,0,0,0,0,0,0,0,1,0,0,0,0,2,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,1,1,0,0,2,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -}; - - -const SequenceModel TIS620ThaiModel = -{ - TIS620CharToOrderMap, - ThaiLangModel, - (float)0.926386, - PR_FALSE, - "TIS-620" -}; diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsBig5Prober.cpp b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsBig5Prober.cpp deleted file mode 100644 index 7a85abb..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsBig5Prober.cpp +++ /dev/null @@ -1,88 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#include "nsBig5Prober.h" - -void nsBig5Prober::Reset(void) -{ - mCodingSM->Reset(); - mState = eDetecting; - mDistributionAnalyser.Reset(mIsPreferredLanguage); -} - -nsProbingState nsBig5Prober::HandleData(const char* aBuf, PRUint32 aLen) -{ - nsSMState codingState; - - for (PRUint32 i = 0; i < aLen; i++) - { - codingState = mCodingSM->NextState(aBuf[i]); - if (codingState == eItsMe) - { - mState = eFoundIt; - break; - } - if (codingState == eStart) - { - PRUint32 charLen = mCodingSM->GetCurrentCharLen(); - - if (i == 0) - { - mLastChar[1] = aBuf[0]; - mDistributionAnalyser.HandleOneChar(mLastChar, charLen); - } - else - mDistributionAnalyser.HandleOneChar(aBuf+i-1, charLen); - } - } - - mLastChar[0] = aBuf[aLen-1]; - - if (mState == eDetecting) - if (mDistributionAnalyser.GotEnoughData() && GetConfidence() > SHORTCUT_THRESHOLD) - mState = eFoundIt; - - return mState; -} - -float nsBig5Prober::GetConfidence(void) -{ - float distribCf = mDistributionAnalyser.GetConfidence(); - - return (float)distribCf; -} - diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsBig5Prober.h b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsBig5Prober.h deleted file mode 100644 index 5ae3576..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsBig5Prober.h +++ /dev/null @@ -1,74 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#ifndef nsBig5Prober_h__ -#define nsBig5Prober_h__ - -#include "nsCharSetProber.h" -#include "nsCodingStateMachine.h" -#include "CharDistribution.h" - -class nsBig5Prober: public nsCharSetProber { -public: - nsBig5Prober(PRBool aIsPreferredLanguage) - :mIsPreferredLanguage(aIsPreferredLanguage) - {mCodingSM = new nsCodingStateMachine(&Big5SMModel); - Reset();} - virtual ~nsBig5Prober(void){delete mCodingSM;} - nsProbingState HandleData(const char* aBuf, PRUint32 aLen); - const char* GetCharSetName() {return "Big5";} - nsProbingState GetState(void) {return mState;} - void Reset(void); - float GetConfidence(void); - void SetOpion() {} - -protected: - void GetDistribution(PRUint32 aCharLen, const char* aStr); - - nsCodingStateMachine* mCodingSM; - nsProbingState mState; - - //Big5ContextAnalysis mContextAnalyser; - Big5DistributionAnalysis mDistributionAnalyser; - char mLastChar[2]; - PRBool mIsPreferredLanguage; - -}; - - -#endif /* nsBig5Prober_h__ */ - diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsCharSetProber.cpp b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsCharSetProber.cpp deleted file mode 100644 index 0429dd1..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsCharSetProber.cpp +++ /dev/null @@ -1,125 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is Mozilla Universal charset detector code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 2001 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * Shy Shalom <shooshX@gmail.com> - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#include "nsCharSetProber.h" -#include "prmem.h" - -//This filter applies to all scripts which do not use English characters -PRBool nsCharSetProber::FilterWithoutEnglishLetters(const char* aBuf, PRUint32 aLen, char** newBuf, PRUint32& newLen) -{ - char *newptr; - char *prevPtr, *curPtr; - - PRBool meetMSB = PR_FALSE; - newptr = *newBuf = (char*)PR_Malloc(aLen); - if (!newptr) - return PR_FALSE; - - for (curPtr = prevPtr = (char*)aBuf; curPtr < aBuf+aLen; curPtr++) - { - if (*curPtr & 0x80) - { - meetMSB = PR_TRUE; - } - else if (*curPtr < 'A' || (*curPtr > 'Z' && *curPtr < 'a') || *curPtr > 'z') - { - //current char is a symbol, most likely a punctuation. we treat it as segment delimiter - if (meetMSB && curPtr > prevPtr) - //this segment contains more than single symbol, and it has upper ASCII, we need to keep it - { - while (prevPtr < curPtr) *newptr++ = *prevPtr++; - prevPtr++; - *newptr++ = ' '; - meetMSB = PR_FALSE; - } - else //ignore current segment. (either because it is just a symbol or just an English word) - prevPtr = curPtr+1; - } - } - if (meetMSB && curPtr > prevPtr) - while (prevPtr < curPtr) *newptr++ = *prevPtr++; - - newLen = newptr - *newBuf; - - return PR_TRUE; -} - -//This filter applies to all scripts which contain both English characters and upper ASCII characters. -PRBool nsCharSetProber::FilterWithEnglishLetters(const char* aBuf, PRUint32 aLen, char** newBuf, PRUint32& newLen) -{ - //do filtering to reduce load to probers - char *newptr; - char *prevPtr, *curPtr; - PRBool isInTag = PR_FALSE; - - newptr = *newBuf = (char*)PR_Malloc(aLen); - if (!newptr) - return PR_FALSE; - - for (curPtr = prevPtr = (char*)aBuf; curPtr < aBuf+aLen; curPtr++) - { - if (*curPtr == '>') - isInTag = PR_FALSE; - else if (*curPtr == '<') - isInTag = PR_TRUE; - - if (!(*curPtr & 0x80) && - (*curPtr < 'A' || (*curPtr > 'Z' && *curPtr < 'a') || *curPtr > 'z') ) - { - if (curPtr > prevPtr && !isInTag) // Current segment contains more than just a symbol - // and it is not inside a tag, keep it. - { - while (prevPtr < curPtr) *newptr++ = *prevPtr++; - prevPtr++; - *newptr++ = ' '; - } - else - prevPtr = curPtr+1; - } - } - - // If the current segment contains more than just a symbol - // and it is not inside a tag then keep it. - if (!isInTag) - while (prevPtr < curPtr) - *newptr++ = *prevPtr++; - - newLen = newptr - *newBuf; - - return PR_TRUE; -} diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsCharSetProber.h b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsCharSetProber.h deleted file mode 100644 index c078ccf..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsCharSetProber.h +++ /dev/null @@ -1,76 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is Mozilla Universal charset detector code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 2001 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * Shy Shalom <shooshX@gmail.com> - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ -#ifndef nsCharSetProber_h__ -#define nsCharSetProber_h__ - -#include "nscore.h" - -//#define DEBUG_chardet // Uncomment this for debug dump. - -typedef enum { - eDetecting = 0, //We are still detecting, no sure answer yet, but caller can ask for confidence. - eFoundIt = 1, //That's a positive answer - eNotMe = 2 //Negative answer -} nsProbingState; - -#define SHORTCUT_THRESHOLD (float)0.95 - -class nsCharSetProber { -public: - virtual ~nsCharSetProber() {} - virtual const char* GetCharSetName() = 0; - virtual nsProbingState HandleData(const char* aBuf, PRUint32 aLen) = 0; - virtual nsProbingState GetState(void) = 0; - virtual void Reset(void) = 0; - virtual float GetConfidence(void) = 0; - virtual void SetOpion() = 0; - -#ifdef DEBUG_chardet - virtual void DumpStatus() {}; -#endif - - // Helper functions used in the Latin1 and Group probers. - // both functions Allocate a new buffer for newBuf. This buffer should be - // freed by the caller using PR_FREEIF. - // Both functions return PR_FALSE in case of memory allocation failure. - static PRBool FilterWithoutEnglishLetters(const char* aBuf, PRUint32 aLen, char** newBuf, PRUint32& newLen); - static PRBool FilterWithEnglishLetters(const char* aBuf, PRUint32 aLen, char** newBuf, PRUint32& newLen); - -}; - -#endif /* nsCharSetProber_h__ */ diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsCodingStateMachine.h b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsCodingStateMachine.h deleted file mode 100644 index 819f9ab..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsCodingStateMachine.h +++ /dev/null @@ -1,104 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ -#ifndef nsCodingStateMachine_h__ -#define nsCodingStateMachine_h__ - -#include "nsPkgInt.h" - -typedef enum { - eStart = 0, - eError = 1, - eItsMe = 2 -} nsSMState; - -#define GETCLASS(c) GETFROMPCK(((unsigned char)(c)), mModel->classTable) - -//state machine model -typedef struct -{ - nsPkgInt classTable; - PRUint32 classFactor; - nsPkgInt stateTable; - const PRUint32* charLenTable; - const char* name; -} SMModel; - -class nsCodingStateMachine { -public: - nsCodingStateMachine(const SMModel* sm) : mModel(sm) { mCurrentState = eStart; } - nsSMState NextState(char c){ - //for each byte we get its class , if it is first byte, we also get byte length - PRUint32 byteCls = GETCLASS(c); - if (mCurrentState == eStart) - { - mCurrentBytePos = 0; - mCurrentCharLen = mModel->charLenTable[byteCls]; - } - //from byte's class and stateTable, we get its next state - mCurrentState=(nsSMState)GETFROMPCK(mCurrentState*(mModel->classFactor)+byteCls, - mModel->stateTable); - mCurrentBytePos++; - return mCurrentState; - } - PRUint32 GetCurrentCharLen(void) {return mCurrentCharLen;} - void Reset(void) {mCurrentState = eStart;} - const char * GetCodingStateMachine() {return mModel->name;} - -protected: - nsSMState mCurrentState; - PRUint32 mCurrentCharLen; - PRUint32 mCurrentBytePos; - - const SMModel *mModel; -}; - -extern const SMModel UTF8SMModel; -extern const SMModel Big5SMModel; -extern const SMModel EUCJPSMModel; -extern const SMModel EUCKRSMModel; -extern const SMModel EUCTWSMModel; -extern const SMModel GB18030SMModel; -extern const SMModel SJISSMModel; - - -extern const SMModel HZSMModel; -extern const SMModel ISO2022CNSMModel; -extern const SMModel ISO2022JPSMModel; -extern const SMModel ISO2022KRSMModel; - -#endif /* nsCodingStateMachine_h__ */ - diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsEUCJPProber.cpp b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsEUCJPProber.cpp deleted file mode 100644 index 54861b3..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsEUCJPProber.cpp +++ /dev/null @@ -1,99 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -// for japanese encoding, obeserve characteristic: -// 1, kana character (or hankaku?) often have hight frequency of appereance -// 2, kana character often exist in group -// 3, certain combination of kana is never used in japanese language - -#include "nsEUCJPProber.h" - -void nsEUCJPProber::Reset(void) -{ - mCodingSM->Reset(); - mState = eDetecting; - mContextAnalyser.Reset(mIsPreferredLanguage); - mDistributionAnalyser.Reset(mIsPreferredLanguage); -} - -nsProbingState nsEUCJPProber::HandleData(const char* aBuf, PRUint32 aLen) -{ - nsSMState codingState; - - for (PRUint32 i = 0; i < aLen; i++) - { - codingState = mCodingSM->NextState(aBuf[i]); - if (codingState == eItsMe) - { - mState = eFoundIt; - break; - } - if (codingState == eStart) - { - PRUint32 charLen = mCodingSM->GetCurrentCharLen(); - - if (i == 0) - { - mLastChar[1] = aBuf[0]; - mContextAnalyser.HandleOneChar(mLastChar, charLen); - mDistributionAnalyser.HandleOneChar(mLastChar, charLen); - } - else - { - mContextAnalyser.HandleOneChar(aBuf+i-1, charLen); - mDistributionAnalyser.HandleOneChar(aBuf+i-1, charLen); - } - } - } - - mLastChar[0] = aBuf[aLen-1]; - - if (mState == eDetecting) - if (mContextAnalyser.GotEnoughData() && GetConfidence() > SHORTCUT_THRESHOLD) - mState = eFoundIt; - - return mState; -} - -float nsEUCJPProber::GetConfidence(void) -{ - float contxtCf = mContextAnalyser.GetConfidence(); - float distribCf = mDistributionAnalyser.GetConfidence(); - - return (contxtCf > distribCf ? contxtCf : distribCf); -} - diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsEUCJPProber.h b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsEUCJPProber.h deleted file mode 100644 index a7a2f51..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsEUCJPProber.h +++ /dev/null @@ -1,78 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -// for S-JIS encoding, obeserve characteristic: -// 1, kana character (or hankaku?) often have hight frequency of appereance -// 2, kana character often exist in group -// 3, certain combination of kana is never used in japanese language - -#ifndef nsEUCJPProber_h__ -#define nsEUCJPProber_h__ - -#include "nsCharSetProber.h" -#include "nsCodingStateMachine.h" -#include "JpCntx.h" -#include "CharDistribution.h" - -class nsEUCJPProber: public nsCharSetProber { -public: - nsEUCJPProber(PRBool aIsPreferredLanguage) - :mIsPreferredLanguage(aIsPreferredLanguage) - {mCodingSM = new nsCodingStateMachine(&EUCJPSMModel); - Reset();} - virtual ~nsEUCJPProber(void){delete mCodingSM;} - nsProbingState HandleData(const char* aBuf, PRUint32 aLen); - const char* GetCharSetName() {return "EUC-JP";} - nsProbingState GetState(void) {return mState;} - void Reset(void); - float GetConfidence(void); - void SetOpion() {} - -protected: - nsCodingStateMachine* mCodingSM; - nsProbingState mState; - - EUCJPContextAnalysis mContextAnalyser; - EUCJPDistributionAnalysis mDistributionAnalyser; - - char mLastChar[2]; - PRBool mIsPreferredLanguage; -}; - - -#endif /* nsEUCJPProber_h__ */ - diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsEUCKRProber.cpp b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsEUCKRProber.cpp deleted file mode 100644 index 3632f1f..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsEUCKRProber.cpp +++ /dev/null @@ -1,91 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#include "nsEUCKRProber.h" - -void nsEUCKRProber::Reset(void) -{ - mCodingSM->Reset(); - mState = eDetecting; - mDistributionAnalyser.Reset(mIsPreferredLanguage); - //mContextAnalyser.Reset(); -} - -nsProbingState nsEUCKRProber::HandleData(const char* aBuf, PRUint32 aLen) -{ - nsSMState codingState; - - for (PRUint32 i = 0; i < aLen; i++) - { - codingState = mCodingSM->NextState(aBuf[i]); - if (codingState == eItsMe) - { - mState = eFoundIt; - break; - } - if (codingState == eStart) - { - PRUint32 charLen = mCodingSM->GetCurrentCharLen(); - - if (i == 0) - { - mLastChar[1] = aBuf[0]; - mDistributionAnalyser.HandleOneChar(mLastChar, charLen); - } - else - mDistributionAnalyser.HandleOneChar(aBuf+i-1, charLen); - } - } - - mLastChar[0] = aBuf[aLen-1]; - - if (mState == eDetecting) - if (mDistributionAnalyser.GotEnoughData() && GetConfidence() > SHORTCUT_THRESHOLD) - mState = eFoundIt; -// else -// mDistributionAnalyser.HandleData(aBuf, aLen); - - return mState; -} - -float nsEUCKRProber::GetConfidence(void) -{ - float distribCf = mDistributionAnalyser.GetConfidence(); - - return (float)distribCf; -} - diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsEUCKRProber.h b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsEUCKRProber.h deleted file mode 100644 index 8e09984..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsEUCKRProber.h +++ /dev/null @@ -1,75 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#ifndef nsEUCKRProber_h__ -#define nsEUCKRProber_h__ - -#include "nsCharSetProber.h" -#include "nsCodingStateMachine.h" -#include "CharDistribution.h" - -class nsEUCKRProber: public nsCharSetProber { -public: - nsEUCKRProber(PRBool aIsPreferredLanguage) - :mIsPreferredLanguage(aIsPreferredLanguage) - {mCodingSM = new nsCodingStateMachine(&EUCKRSMModel); - Reset(); - } - virtual ~nsEUCKRProber(void){delete mCodingSM;} - nsProbingState HandleData(const char* aBuf, PRUint32 aLen); - const char* GetCharSetName() {return "EUC-KR";} - nsProbingState GetState(void) {return mState;} - void Reset(void); - float GetConfidence(void); - void SetOpion() {} - -protected: - void GetDistribution(PRUint32 aCharLen, const char* aStr); - - nsCodingStateMachine* mCodingSM; - nsProbingState mState; - - //EUCKRContextAnalysis mContextAnalyser; - EUCKRDistributionAnalysis mDistributionAnalyser; - char mLastChar[2]; - PRBool mIsPreferredLanguage; - -}; - - -#endif /* nsEUCKRProber_h__ */ - diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsEUCTWProber.cpp b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsEUCTWProber.cpp deleted file mode 100644 index a06e074..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsEUCTWProber.cpp +++ /dev/null @@ -1,91 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#include "nsEUCTWProber.h" - -void nsEUCTWProber::Reset(void) -{ - mCodingSM->Reset(); - mState = eDetecting; - mDistributionAnalyser.Reset(mIsPreferredLanguage); - //mContextAnalyser.Reset(); -} - -nsProbingState nsEUCTWProber::HandleData(const char* aBuf, PRUint32 aLen) -{ - nsSMState codingState; - - for (PRUint32 i = 0; i < aLen; i++) - { - codingState = mCodingSM->NextState(aBuf[i]); - if (codingState == eItsMe) - { - mState = eFoundIt; - break; - } - if (codingState == eStart) - { - PRUint32 charLen = mCodingSM->GetCurrentCharLen(); - - if (i == 0) - { - mLastChar[1] = aBuf[0]; - mDistributionAnalyser.HandleOneChar(mLastChar, charLen); - } - else - mDistributionAnalyser.HandleOneChar(aBuf+i-1, charLen); - } - } - - mLastChar[0] = aBuf[aLen-1]; - - if (mState == eDetecting) - if (mDistributionAnalyser.GotEnoughData() && GetConfidence() > SHORTCUT_THRESHOLD) - mState = eFoundIt; -// else -// mDistributionAnalyser.HandleData(aBuf, aLen); - - return mState; -} - -float nsEUCTWProber::GetConfidence(void) -{ - float distribCf = mDistributionAnalyser.GetConfidence(); - - return (float)distribCf; -} - diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsEUCTWProber.h b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsEUCTWProber.h deleted file mode 100644 index 911d50b..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsEUCTWProber.h +++ /dev/null @@ -1,74 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#ifndef nsEUCTWProber_h__ -#define nsEUCTWProber_h__ - -#include "nsCharSetProber.h" -#include "nsCodingStateMachine.h" -#include "CharDistribution.h" - -class nsEUCTWProber: public nsCharSetProber { -public: - nsEUCTWProber(PRBool aIsPreferredLanguage) - :mIsPreferredLanguage(aIsPreferredLanguage) - {mCodingSM = new nsCodingStateMachine(&EUCTWSMModel); - Reset();} - virtual ~nsEUCTWProber(void){delete mCodingSM;} - nsProbingState HandleData(const char* aBuf, PRUint32 aLen); - const char* GetCharSetName() {return "x-euc-tw";} - nsProbingState GetState(void) {return mState;} - void Reset(void); - float GetConfidence(void); - void SetOpion() {} - -protected: - void GetDistribution(PRUint32 aCharLen, const char* aStr); - - nsCodingStateMachine* mCodingSM; - nsProbingState mState; - - //EUCTWContextAnalysis mContextAnalyser; - EUCTWDistributionAnalysis mDistributionAnalyser; - char mLastChar[2]; - PRBool mIsPreferredLanguage; - -}; - - -#endif /* nsEUCTWProber_h__ */ - diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsEscCharsetProber.cpp b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsEscCharsetProber.cpp deleted file mode 100644 index 464c753..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsEscCharsetProber.cpp +++ /dev/null @@ -1,101 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - - -#include "nsEscCharsetProber.h" -#include "nsUniversalDetector.h" - -nsEscCharSetProber::nsEscCharSetProber(PRUint32 aLanguageFilter) -{ - for (PRUint32 i = 0; i < NUM_OF_ESC_CHARSETS; i++) - mCodingSM[i] = nsnull; - if (aLanguageFilter & NS_FILTER_CHINESE_SIMPLIFIED) - { - mCodingSM[0] = new nsCodingStateMachine(&HZSMModel); - mCodingSM[1] = new nsCodingStateMachine(&ISO2022CNSMModel); - } - if (aLanguageFilter & NS_FILTER_JAPANESE) - mCodingSM[2] = new nsCodingStateMachine(&ISO2022JPSMModel); - if (aLanguageFilter & NS_FILTER_KOREAN) - mCodingSM[3] = new nsCodingStateMachine(&ISO2022KRSMModel); - mActiveSM = NUM_OF_ESC_CHARSETS; - mState = eDetecting; - mDetectedCharset = nsnull; -} - -nsEscCharSetProber::~nsEscCharSetProber(void) -{ - for (PRUint32 i = 0; i < NUM_OF_ESC_CHARSETS; i++) - delete mCodingSM[i]; -} - -void nsEscCharSetProber::Reset(void) -{ - mState = eDetecting; - for (PRUint32 i = 0; i < NUM_OF_ESC_CHARSETS; i++) - if (mCodingSM[i]) - mCodingSM[i]->Reset(); - mActiveSM = NUM_OF_ESC_CHARSETS; - mDetectedCharset = nsnull; -} - -nsProbingState nsEscCharSetProber::HandleData(const char* aBuf, PRUint32 aLen) -{ - nsSMState codingState; - PRInt32 j; - PRUint32 i; - - for ( i = 0; i < aLen && mState == eDetecting; i++) - { - for (j = mActiveSM-1; j>= 0; j--) - { - if (mCodingSM[j]) - { - codingState = mCodingSM[j]->NextState(aBuf[i]); - if (codingState == eItsMe) - { - mState = eFoundIt; - mDetectedCharset = mCodingSM[j]->GetCodingStateMachine(); - return mState; - } - } - } - } - - return mState; -} - diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsEscCharsetProber.h b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsEscCharsetProber.h deleted file mode 100644 index 4b648e0..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsEscCharsetProber.h +++ /dev/null @@ -1,67 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#ifndef nsEscCharSetProber_h__ -#define nsEscCharSetProber_h__ - -#include "nsCharSetProber.h" -#include "nsCodingStateMachine.h" - -#define NUM_OF_ESC_CHARSETS 4 - -class nsEscCharSetProber: public nsCharSetProber { -public: - nsEscCharSetProber(PRUint32 aLanguageFilter); - virtual ~nsEscCharSetProber(void); - nsProbingState HandleData(const char* aBuf, PRUint32 aLen); - const char* GetCharSetName() {return mDetectedCharset;} - nsProbingState GetState(void) {return mState;} - void Reset(void); - float GetConfidence(void){return (float)0.99;} - void SetOpion() {} - -protected: - void GetDistribution(PRUint32 aCharLen, const char* aStr); - - nsCodingStateMachine* mCodingSM[NUM_OF_ESC_CHARSETS] ; - PRUint32 mActiveSM; - nsProbingState mState; - const char * mDetectedCharset; -}; - -#endif /* nsEscCharSetProber_h__ */ - diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsEscSM.cpp b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsEscSM.cpp deleted file mode 100644 index eed1b7c..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsEscSM.cpp +++ /dev/null @@ -1,263 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ -#include "nsCodingStateMachine.h" - -static const PRUint32 HZ_cls[ 256 / 8 ] = { -PCK4BITS(1,0,0,0,0,0,0,0), // 00 - 07 -PCK4BITS(0,0,0,0,0,0,0,0), // 08 - 0f -PCK4BITS(0,0,0,0,0,0,0,0), // 10 - 17 -PCK4BITS(0,0,0,1,0,0,0,0), // 18 - 1f -PCK4BITS(0,0,0,0,0,0,0,0), // 20 - 27 -PCK4BITS(0,0,0,0,0,0,0,0), // 28 - 2f -PCK4BITS(0,0,0,0,0,0,0,0), // 30 - 37 -PCK4BITS(0,0,0,0,0,0,0,0), // 38 - 3f -PCK4BITS(0,0,0,0,0,0,0,0), // 40 - 47 -PCK4BITS(0,0,0,0,0,0,0,0), // 48 - 4f -PCK4BITS(0,0,0,0,0,0,0,0), // 50 - 57 -PCK4BITS(0,0,0,0,0,0,0,0), // 58 - 5f -PCK4BITS(0,0,0,0,0,0,0,0), // 60 - 67 -PCK4BITS(0,0,0,0,0,0,0,0), // 68 - 6f -PCK4BITS(0,0,0,0,0,0,0,0), // 70 - 77 -PCK4BITS(0,0,0,4,0,5,2,0), // 78 - 7f -PCK4BITS(1,1,1,1,1,1,1,1), // 80 - 87 -PCK4BITS(1,1,1,1,1,1,1,1), // 88 - 8f -PCK4BITS(1,1,1,1,1,1,1,1), // 90 - 97 -PCK4BITS(1,1,1,1,1,1,1,1), // 98 - 9f -PCK4BITS(1,1,1,1,1,1,1,1), // a0 - a7 -PCK4BITS(1,1,1,1,1,1,1,1), // a8 - af -PCK4BITS(1,1,1,1,1,1,1,1), // b0 - b7 -PCK4BITS(1,1,1,1,1,1,1,1), // b8 - bf -PCK4BITS(1,1,1,1,1,1,1,1), // c0 - c7 -PCK4BITS(1,1,1,1,1,1,1,1), // c8 - cf -PCK4BITS(1,1,1,1,1,1,1,1), // d0 - d7 -PCK4BITS(1,1,1,1,1,1,1,1), // d8 - df -PCK4BITS(1,1,1,1,1,1,1,1), // e0 - e7 -PCK4BITS(1,1,1,1,1,1,1,1), // e8 - ef -PCK4BITS(1,1,1,1,1,1,1,1), // f0 - f7 -PCK4BITS(1,1,1,1,1,1,1,1) // f8 - ff -}; - - -static const PRUint32 HZ_st [ 6] = { -PCK4BITS(eStart,eError, 3,eStart,eStart,eStart,eError,eError),//00-07 -PCK4BITS(eError,eError,eError,eError,eItsMe,eItsMe,eItsMe,eItsMe),//08-0f -PCK4BITS(eItsMe,eItsMe,eError,eError,eStart,eStart, 4,eError),//10-17 -PCK4BITS( 5,eError, 6,eError, 5, 5, 4,eError),//18-1f -PCK4BITS( 4,eError, 4, 4, 4,eError, 4,eError),//20-27 -PCK4BITS( 4,eItsMe,eStart,eStart,eStart,eStart,eStart,eStart) //28-2f -}; - -static const PRUint32 HZCharLenTable[] = {0, 0, 0, 0, 0, 0}; - -const SMModel HZSMModel = { - {eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, HZ_cls }, - 6, - {eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, HZ_st }, - HZCharLenTable, - "HZ-GB-2312", -}; - - -static const PRUint32 ISO2022CN_cls [ 256 / 8 ] = { -PCK4BITS(2,0,0,0,0,0,0,0), // 00 - 07 -PCK4BITS(0,0,0,0,0,0,0,0), // 08 - 0f -PCK4BITS(0,0,0,0,0,0,0,0), // 10 - 17 -PCK4BITS(0,0,0,1,0,0,0,0), // 18 - 1f -PCK4BITS(0,0,0,0,0,0,0,0), // 20 - 27 -PCK4BITS(0,3,0,0,0,0,0,0), // 28 - 2f -PCK4BITS(0,0,0,0,0,0,0,0), // 30 - 37 -PCK4BITS(0,0,0,0,0,0,0,0), // 38 - 3f -PCK4BITS(0,0,0,4,0,0,0,0), // 40 - 47 -PCK4BITS(0,0,0,0,0,0,0,0), // 48 - 4f -PCK4BITS(0,0,0,0,0,0,0,0), // 50 - 57 -PCK4BITS(0,0,0,0,0,0,0,0), // 58 - 5f -PCK4BITS(0,0,0,0,0,0,0,0), // 60 - 67 -PCK4BITS(0,0,0,0,0,0,0,0), // 68 - 6f -PCK4BITS(0,0,0,0,0,0,0,0), // 70 - 77 -PCK4BITS(0,0,0,0,0,0,0,0), // 78 - 7f -PCK4BITS(2,2,2,2,2,2,2,2), // 80 - 87 -PCK4BITS(2,2,2,2,2,2,2,2), // 88 - 8f -PCK4BITS(2,2,2,2,2,2,2,2), // 90 - 97 -PCK4BITS(2,2,2,2,2,2,2,2), // 98 - 9f -PCK4BITS(2,2,2,2,2,2,2,2), // a0 - a7 -PCK4BITS(2,2,2,2,2,2,2,2), // a8 - af -PCK4BITS(2,2,2,2,2,2,2,2), // b0 - b7 -PCK4BITS(2,2,2,2,2,2,2,2), // b8 - bf -PCK4BITS(2,2,2,2,2,2,2,2), // c0 - c7 -PCK4BITS(2,2,2,2,2,2,2,2), // c8 - cf -PCK4BITS(2,2,2,2,2,2,2,2), // d0 - d7 -PCK4BITS(2,2,2,2,2,2,2,2), // d8 - df -PCK4BITS(2,2,2,2,2,2,2,2), // e0 - e7 -PCK4BITS(2,2,2,2,2,2,2,2), // e8 - ef -PCK4BITS(2,2,2,2,2,2,2,2), // f0 - f7 -PCK4BITS(2,2,2,2,2,2,2,2) // f8 - ff -}; - - -static const PRUint32 ISO2022CN_st [ 8] = { -PCK4BITS(eStart, 3,eError,eStart,eStart,eStart,eStart,eStart),//00-07 -PCK4BITS(eStart,eError,eError,eError,eError,eError,eError,eError),//08-0f -PCK4BITS(eError,eError,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe),//10-17 -PCK4BITS(eItsMe,eItsMe,eItsMe,eError,eError,eError, 4,eError),//18-1f -PCK4BITS(eError,eError,eError,eItsMe,eError,eError,eError,eError),//20-27 -PCK4BITS( 5, 6,eError,eError,eError,eError,eError,eError),//28-2f -PCK4BITS(eError,eError,eError,eItsMe,eError,eError,eError,eError),//30-37 -PCK4BITS(eError,eError,eError,eError,eError,eItsMe,eError,eStart) //38-3f -}; - -static const PRUint32 ISO2022CNCharLenTable[] = {0, 0, 0, 0, 0, 0, 0, 0, 0}; - -const SMModel ISO2022CNSMModel = { - {eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, ISO2022CN_cls }, - 9, - {eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, ISO2022CN_st }, - ISO2022CNCharLenTable, - "ISO-2022-CN", -}; - -static const PRUint32 ISO2022JP_cls [ 256 / 8 ] = { -PCK4BITS(2,0,0,0,0,0,0,0), // 00 - 07 -PCK4BITS(0,0,0,0,0,0,2,2), // 08 - 0f -PCK4BITS(0,0,0,0,0,0,0,0), // 10 - 17 -PCK4BITS(0,0,0,1,0,0,0,0), // 18 - 1f -PCK4BITS(0,0,0,0,7,0,0,0), // 20 - 27 -PCK4BITS(3,0,0,0,0,0,0,0), // 28 - 2f -PCK4BITS(0,0,0,0,0,0,0,0), // 30 - 37 -PCK4BITS(0,0,0,0,0,0,0,0), // 38 - 3f -PCK4BITS(6,0,4,0,8,0,0,0), // 40 - 47 -PCK4BITS(0,9,5,0,0,0,0,0), // 48 - 4f -PCK4BITS(0,0,0,0,0,0,0,0), // 50 - 57 -PCK4BITS(0,0,0,0,0,0,0,0), // 58 - 5f -PCK4BITS(0,0,0,0,0,0,0,0), // 60 - 67 -PCK4BITS(0,0,0,0,0,0,0,0), // 68 - 6f -PCK4BITS(0,0,0,0,0,0,0,0), // 70 - 77 -PCK4BITS(0,0,0,0,0,0,0,0), // 78 - 7f -PCK4BITS(2,2,2,2,2,2,2,2), // 80 - 87 -PCK4BITS(2,2,2,2,2,2,2,2), // 88 - 8f -PCK4BITS(2,2,2,2,2,2,2,2), // 90 - 97 -PCK4BITS(2,2,2,2,2,2,2,2), // 98 - 9f -PCK4BITS(2,2,2,2,2,2,2,2), // a0 - a7 -PCK4BITS(2,2,2,2,2,2,2,2), // a8 - af -PCK4BITS(2,2,2,2,2,2,2,2), // b0 - b7 -PCK4BITS(2,2,2,2,2,2,2,2), // b8 - bf -PCK4BITS(2,2,2,2,2,2,2,2), // c0 - c7 -PCK4BITS(2,2,2,2,2,2,2,2), // c8 - cf -PCK4BITS(2,2,2,2,2,2,2,2), // d0 - d7 -PCK4BITS(2,2,2,2,2,2,2,2), // d8 - df -PCK4BITS(2,2,2,2,2,2,2,2), // e0 - e7 -PCK4BITS(2,2,2,2,2,2,2,2), // e8 - ef -PCK4BITS(2,2,2,2,2,2,2,2), // f0 - f7 -PCK4BITS(2,2,2,2,2,2,2,2) // f8 - ff -}; - - -static const PRUint32 ISO2022JP_st [ 9] = { -PCK4BITS(eStart, 3,eError,eStart,eStart,eStart,eStart,eStart),//00-07 -PCK4BITS(eStart,eStart,eError,eError,eError,eError,eError,eError),//08-0f -PCK4BITS(eError,eError,eError,eError,eItsMe,eItsMe,eItsMe,eItsMe),//10-17 -PCK4BITS(eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eError,eError),//18-1f -PCK4BITS(eError, 5,eError,eError,eError, 4,eError,eError),//20-27 -PCK4BITS(eError,eError,eError, 6,eItsMe,eError,eItsMe,eError),//28-2f -PCK4BITS(eError,eError,eError,eError,eError,eError,eItsMe,eItsMe),//30-37 -PCK4BITS(eError,eError,eError,eItsMe,eError,eError,eError,eError),//38-3f -PCK4BITS(eError,eError,eError,eError,eItsMe,eError,eStart,eStart) //40-47 -}; - -static const PRUint32 ISO2022JPCharLenTable[] = {0, 0, 0, 0, 0, 0, 0, 0}; - -const SMModel ISO2022JPSMModel = { - {eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, ISO2022JP_cls }, - 10, - {eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, ISO2022JP_st }, - ISO2022JPCharLenTable, - "ISO-2022-JP", -}; - -static const PRUint32 ISO2022KR_cls [ 256 / 8 ] = { -PCK4BITS(2,0,0,0,0,0,0,0), // 00 - 07 -PCK4BITS(0,0,0,0,0,0,0,0), // 08 - 0f -PCK4BITS(0,0,0,0,0,0,0,0), // 10 - 17 -PCK4BITS(0,0,0,1,0,0,0,0), // 18 - 1f -PCK4BITS(0,0,0,0,3,0,0,0), // 20 - 27 -PCK4BITS(0,4,0,0,0,0,0,0), // 28 - 2f -PCK4BITS(0,0,0,0,0,0,0,0), // 30 - 37 -PCK4BITS(0,0,0,0,0,0,0,0), // 38 - 3f -PCK4BITS(0,0,0,5,0,0,0,0), // 40 - 47 -PCK4BITS(0,0,0,0,0,0,0,0), // 48 - 4f -PCK4BITS(0,0,0,0,0,0,0,0), // 50 - 57 -PCK4BITS(0,0,0,0,0,0,0,0), // 58 - 5f -PCK4BITS(0,0,0,0,0,0,0,0), // 60 - 67 -PCK4BITS(0,0,0,0,0,0,0,0), // 68 - 6f -PCK4BITS(0,0,0,0,0,0,0,0), // 70 - 77 -PCK4BITS(0,0,0,0,0,0,0,0), // 78 - 7f -PCK4BITS(2,2,2,2,2,2,2,2), // 80 - 87 -PCK4BITS(2,2,2,2,2,2,2,2), // 88 - 8f -PCK4BITS(2,2,2,2,2,2,2,2), // 90 - 97 -PCK4BITS(2,2,2,2,2,2,2,2), // 98 - 9f -PCK4BITS(2,2,2,2,2,2,2,2), // a0 - a7 -PCK4BITS(2,2,2,2,2,2,2,2), // a8 - af -PCK4BITS(2,2,2,2,2,2,2,2), // b0 - b7 -PCK4BITS(2,2,2,2,2,2,2,2), // b8 - bf -PCK4BITS(2,2,2,2,2,2,2,2), // c0 - c7 -PCK4BITS(2,2,2,2,2,2,2,2), // c8 - cf -PCK4BITS(2,2,2,2,2,2,2,2), // d0 - d7 -PCK4BITS(2,2,2,2,2,2,2,2), // d8 - df -PCK4BITS(2,2,2,2,2,2,2,2), // e0 - e7 -PCK4BITS(2,2,2,2,2,2,2,2), // e8 - ef -PCK4BITS(2,2,2,2,2,2,2,2), // f0 - f7 -PCK4BITS(2,2,2,2,2,2,2,2) // f8 - ff -}; - - -static const PRUint32 ISO2022KR_st [ 5] = { -PCK4BITS(eStart, 3,eError,eStart,eStart,eStart,eError,eError),//00-07 -PCK4BITS(eError,eError,eError,eError,eItsMe,eItsMe,eItsMe,eItsMe),//08-0f -PCK4BITS(eItsMe,eItsMe,eError,eError,eError, 4,eError,eError),//10-17 -PCK4BITS(eError,eError,eError,eError, 5,eError,eError,eError),//18-1f -PCK4BITS(eError,eError,eError,eItsMe,eStart,eStart,eStart,eStart) //20-27 -}; - -static const PRUint32 ISO2022KRCharLenTable[] = {0, 0, 0, 0, 0, 0}; - -const SMModel ISO2022KRSMModel = { - {eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, ISO2022KR_cls }, - 6, - {eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, ISO2022KR_st }, - ISO2022KRCharLenTable, - "ISO-2022-KR", -}; - diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsGB2312Prober.cpp b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsGB2312Prober.cpp deleted file mode 100644 index b6d469c..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsGB2312Prober.cpp +++ /dev/null @@ -1,96 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -// for S-JIS encoding, obeserve characteristic: -// 1, kana character (or hankaku?) often have hight frequency of appereance -// 2, kana character often exist in group -// 3, certain combination of kana is never used in japanese language - -#include "nsGB2312Prober.h" - -void nsGB18030Prober::Reset(void) -{ - mCodingSM->Reset(); - mState = eDetecting; - mDistributionAnalyser.Reset(mIsPreferredLanguage); - //mContextAnalyser.Reset(); -} - -nsProbingState nsGB18030Prober::HandleData(const char* aBuf, PRUint32 aLen) -{ - nsSMState codingState; - - for (PRUint32 i = 0; i < aLen; i++) - { - codingState = mCodingSM->NextState(aBuf[i]); - if (codingState == eItsMe) - { - mState = eFoundIt; - break; - } - if (codingState == eStart) - { - PRUint32 charLen = mCodingSM->GetCurrentCharLen(); - - if (i == 0) - { - mLastChar[1] = aBuf[0]; - mDistributionAnalyser.HandleOneChar(mLastChar, charLen); - } - else - mDistributionAnalyser.HandleOneChar(aBuf+i-1, charLen); - } - } - - mLastChar[0] = aBuf[aLen-1]; - - if (mState == eDetecting) - if (mDistributionAnalyser.GotEnoughData() && GetConfidence() > SHORTCUT_THRESHOLD) - mState = eFoundIt; -// else -// mDistributionAnalyser.HandleData(aBuf, aLen); - - return mState; -} - -float nsGB18030Prober::GetConfidence(void) -{ - float distribCf = mDistributionAnalyser.GetConfidence(); - - return (float)distribCf; -} - diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsGB2312Prober.h b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsGB2312Prober.h deleted file mode 100644 index 4bdac3b..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsGB2312Prober.h +++ /dev/null @@ -1,76 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#ifndef nsGB2312Prober_h__ -#define nsGB2312Prober_h__ - -#include "nsCharSetProber.h" -#include "nsCodingStateMachine.h" -#include "CharDistribution.h" - -// We use gb18030 to replace gb2312, because 18030 is a superset. - -class nsGB18030Prober: public nsCharSetProber { -public: - nsGB18030Prober(PRBool aIsPreferredLanguage) - :mIsPreferredLanguage(aIsPreferredLanguage) - {mCodingSM = new nsCodingStateMachine(&GB18030SMModel); - Reset();} - virtual ~nsGB18030Prober(void){delete mCodingSM;} - nsProbingState HandleData(const char* aBuf, PRUint32 aLen); - const char* GetCharSetName() {return "gb18030";} - nsProbingState GetState(void) {return mState;} - void Reset(void); - float GetConfidence(void); - void SetOpion() {} - -protected: - void GetDistribution(PRUint32 aCharLen, const char* aStr); - - nsCodingStateMachine* mCodingSM; - nsProbingState mState; - - //GB2312ContextAnalysis mContextAnalyser; - GB2312DistributionAnalysis mDistributionAnalyser; - char mLastChar[2]; - PRBool mIsPreferredLanguage; - -}; - - -#endif /* nsGB2312Prober_h__ */ - diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsHebrewProber.cpp b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsHebrewProber.cpp deleted file mode 100644 index b148ce3..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsHebrewProber.cpp +++ /dev/null @@ -1,194 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is Mozilla Universal charset detector code. - * - * The Initial Developer of the Original Code is - * Shy Shalom <shooshX@gmail.com> - * Portions created by the Initial Developer are Copyright (C) 2005 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#include "nsHebrewProber.h" -#include <stdio.h> - -// windows-1255 / ISO-8859-8 code points of interest -#define FINAL_KAF ('\xea') -#define NORMAL_KAF ('\xeb') -#define FINAL_MEM ('\xed') -#define NORMAL_MEM ('\xee') -#define FINAL_NUN ('\xef') -#define NORMAL_NUN ('\xf0') -#define FINAL_PE ('\xf3') -#define NORMAL_PE ('\xf4') -#define FINAL_TSADI ('\xf5') -#define NORMAL_TSADI ('\xf6') - -// Minimum Visual vs Logical final letter score difference. -// If the difference is below this, don't rely solely on the final letter score distance. -#define MIN_FINAL_CHAR_DISTANCE (5) - -// Minimum Visual vs Logical model score difference. -// If the difference is below this, don't rely at all on the model score distance. -#define MIN_MODEL_DISTANCE (0.01) - -#define VISUAL_HEBREW_NAME ("ISO-8859-8") -#define LOGICAL_HEBREW_NAME ("windows-1255") - -PRBool nsHebrewProber::isFinal(char c) -{ - return ((c == FINAL_KAF) || (c == FINAL_MEM) || (c == FINAL_NUN) || (c == FINAL_PE) || (c == FINAL_TSADI)); -} - -PRBool nsHebrewProber::isNonFinal(char c) -{ - return ((c == NORMAL_KAF) || (c == NORMAL_MEM) || (c == NORMAL_NUN) || (c == NORMAL_PE)); - // The normal Tsadi is not a good Non-Final letter due to words like - // 'lechotet' (to chat) containing an apostrophe after the tsadi. This - // apostrophe is converted to a space in FilterWithoutEnglishLetters causing - // the Non-Final tsadi to appear at an end of a word even though this is not - // the case in the original text. - // The letters Pe and Kaf rarely display a related behavior of not being a - // good Non-Final letter. Words like 'Pop', 'Winamp' and 'Mubarak' for - // example legally end with a Non-Final Pe or Kaf. However, the benefit of - // these letters as Non-Final letters outweighs the damage since these words - // are quite rare. -} - -/** HandleData - * Final letter analysis for logical-visual decision. - * Look for evidence that the received buffer is either logical Hebrew or - * visual Hebrew. - * The following cases are checked: - * 1) A word longer than 1 letter, ending with a final letter. This is an - * indication that the text is laid out "naturally" since the final letter - * really appears at the end. +1 for logical score. - * 2) A word longer than 1 letter, ending with a Non-Final letter. In normal - * Hebrew, words ending with Kaf, Mem, Nun, Pe or Tsadi, should not end with - * the Non-Final form of that letter. Exceptions to this rule are mentioned - * above in isNonFinal(). This is an indication that the text is laid out - * backwards. +1 for visual score - * 3) A word longer than 1 letter, starting with a final letter. Final letters - * should not appear at the beginning of a word. This is an indication that - * the text is laid out backwards. +1 for visual score. - * - * The visual score and logical score are accumulated throughout the text and - * are finally checked against each other in GetCharSetName(). - * No checking for final letters in the middle of words is done since that case - * is not an indication for either Logical or Visual text. - * - * The input buffer should not contain any white spaces that are not (' ') - * or any low-ascii punctuation marks. - */ -nsProbingState nsHebrewProber::HandleData(const char* aBuf, PRUint32 aLen) -{ - // Both model probers say it's not them. No reason to continue. - if (GetState() == eNotMe) - return eNotMe; - - const char *curPtr, *endPtr = aBuf+aLen; - char cur; - - for (curPtr = (char*)aBuf; curPtr < endPtr; ++curPtr) - { - cur = *curPtr; - if (cur == ' ') // We stand on a space - a word just ended - { - if (mBeforePrev != ' ') // *(curPtr-2) was not a space so prev is not a 1 letter word - { - if (isFinal(mPrev)) // case (1) [-2:not space][-1:final letter][cur:space] - ++mFinalCharLogicalScore; - else if (isNonFinal(mPrev)) // case (2) [-2:not space][-1:Non-Final letter][cur:space] - ++mFinalCharVisualScore; - } - } - else // Not standing on a space - { - if ((mBeforePrev == ' ') && (isFinal(mPrev)) && (cur != ' ')) // case (3) [-2:space][-1:final letter][cur:not space] - ++mFinalCharVisualScore; - } - mBeforePrev = mPrev; - mPrev = cur; - } - - // Forever detecting, till the end or until both model probers return eNotMe (handled above). - return eDetecting; -} - -// Make the decision: is it Logical or Visual? -const char* nsHebrewProber::GetCharSetName() -{ - // If the final letter score distance is dominant enough, rely on it. - PRInt32 finalsub = mFinalCharLogicalScore - mFinalCharVisualScore; - if (finalsub >= MIN_FINAL_CHAR_DISTANCE) - return LOGICAL_HEBREW_NAME; - if (finalsub <= -(MIN_FINAL_CHAR_DISTANCE)) - return VISUAL_HEBREW_NAME; - - // It's not dominant enough, try to rely on the model scores instead. - float modelsub = mLogicalProb->GetConfidence() - mVisualProb->GetConfidence(); - if (modelsub > MIN_MODEL_DISTANCE) - return LOGICAL_HEBREW_NAME; - if (modelsub < -(MIN_MODEL_DISTANCE)) - return VISUAL_HEBREW_NAME; - - // Still no good, back to final letter distance, maybe it'll save the day. - if (finalsub < 0) - return VISUAL_HEBREW_NAME; - - // (finalsub > 0 - Logical) or (don't know what to do) default to Logical. - return LOGICAL_HEBREW_NAME; -} - - -void nsHebrewProber::Reset(void) -{ - mFinalCharLogicalScore = 0; - mFinalCharVisualScore = 0; - - // mPrev and mBeforePrev are initialized to space in order to simulate a word - // delimiter at the beginning of the data - mPrev = ' '; - mBeforePrev = ' '; -} - -nsProbingState nsHebrewProber::GetState(void) -{ - // Remain active as long as any of the model probers are active. - if ((mLogicalProb->GetState() == eNotMe) && (mVisualProb->GetState() == eNotMe)) - return eNotMe; - return eDetecting; -} - -#ifdef DEBUG_chardet -void nsHebrewProber::DumpStatus() -{ - printf(" HEB: %d - %d [Logical-Visual score]\r\n", mFinalCharLogicalScore, mFinalCharVisualScore); -} -#endif diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsHebrewProber.h b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsHebrewProber.h deleted file mode 100644 index eedfed4..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsHebrewProber.h +++ /dev/null @@ -1,176 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is Mozilla Universal charset detector code. - * - * The Initial Developer of the Original Code is - * Shy Shalom <shooshX@gmail.com> - * Portions created by the Initial Developer are Copyright (C) 2005 - * the Initial Developer: All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#ifndef nsHebrewProber_h__ -#define nsHebrewProber_h__ - -#include "nsSBCharSetProber.h" - -// This prober doesn't actually recognize a language or a charset. -// It is a helper prober for the use of the Hebrew model probers -class nsHebrewProber: public nsCharSetProber -{ -public: - nsHebrewProber(void) :mLogicalProb(0), mVisualProb(0) { Reset(); } - - virtual ~nsHebrewProber(void) {} - virtual nsProbingState HandleData(const char* aBuf, PRUint32 aLen); - virtual const char* GetCharSetName(); - virtual void Reset(void); - - virtual nsProbingState GetState(void); - - virtual float GetConfidence(void) { return (float)0.0; } - virtual void SetOpion() {} - - void SetModelProbers(nsCharSetProber *logicalPrb, nsCharSetProber *visualPrb) - { mLogicalProb = logicalPrb; mVisualProb = visualPrb; } - -#ifdef DEBUG_chardet - virtual void DumpStatus(); -#endif - -protected: - static PRBool isFinal(char c); - static PRBool isNonFinal(char c); - - PRInt32 mFinalCharLogicalScore, mFinalCharVisualScore; - - // The two last characters seen in the previous buffer. - char mPrev, mBeforePrev; - - // These probers are owned by the group prober. - nsCharSetProber *mLogicalProb, *mVisualProb; -}; - -/** - * ** General ideas of the Hebrew charset recognition ** - * - * Four main charsets exist in Hebrew: - * "ISO-8859-8" - Visual Hebrew - * "windows-1255" - Logical Hebrew - * "ISO-8859-8-I" - Logical Hebrew - * "x-mac-hebrew" - ?? Logical Hebrew ?? - * - * Both "ISO" charsets use a completely identical set of code points, whereas - * "windows-1255" and "x-mac-hebrew" are two different proper supersets of - * these code points. windows-1255 defines additional characters in the range - * 0x80-0x9F as some misc punctuation marks as well as some Hebrew-specific - * diacritics and additional 'Yiddish' ligature letters in the range 0xc0-0xd6. - * x-mac-hebrew defines similar additional code points but with a different - * mapping. - * - * As far as an average Hebrew text with no diacritics is concerned, all four - * charsets are identical with respect to code points. Meaning that for the - * main Hebrew alphabet, all four map the same values to all 27 Hebrew letters - * (including final letters). - * - * The dominant difference between these charsets is their directionality. - * "Visual" directionality means that the text is ordered as if the renderer is - * not aware of a BIDI rendering algorithm. The renderer sees the text and - * draws it from left to right. The text itself when ordered naturally is read - * backwards. A buffer of Visual Hebrew generally looks like so: - * "[last word of first line spelled backwards] [whole line ordered backwards - * and spelled backwards] [first word of first line spelled backwards] - * [end of line] [last word of second line] ... etc' " - * adding punctuation marks, numbers and English text to visual text is - * naturally also "visual" and from left to right. - * - * "Logical" directionality means the text is ordered "naturally" according to - * the order it is read. It is the responsibility of the renderer to display - * the text from right to left. A BIDI algorithm is used to place general - * punctuation marks, numbers and English text in the text. - * - * Texts in x-mac-hebrew are almost impossible to find on the Internet. From - * what little evidence I could find, it seems that its general directionality - * is Logical. - * - * To sum up all of the above, the Hebrew probing mechanism knows about two - * charsets: - * Visual Hebrew - "ISO-8859-8" - backwards text - Words and sentences are - * backwards while line order is natural. For charset recognition purposes - * the line order is unimportant (In fact, for this implementation, even - * word order is unimportant). - * Logical Hebrew - "windows-1255" - normal, naturally ordered text. - * - * "ISO-8859-8-I" is a subset of windows-1255 and doesn't need to be - * specifically identified. - * "x-mac-hebrew" is also identified as windows-1255. A text in x-mac-hebrew - * that contain special punctuation marks or diacritics is displayed with - * some unconverted characters showing as question marks. This problem might - * be corrected using another model prober for x-mac-hebrew. Due to the fact - * that x-mac-hebrew texts are so rare, writing another model prober isn't - * worth the effort and performance hit. - * - * *** The Prober *** - * - * The prober is divided between two nsSBCharSetProbers and an nsHebrewProber, - * all of which are managed, created, fed data, inquired and deleted by the - * nsSBCSGroupProber. The two nsSBCharSetProbers identify that the text is in - * fact some kind of Hebrew, Logical or Visual. The final decision about which - * one is it is made by the nsHebrewProber by combining final-letter scores - * with the scores of the two nsSBCharSetProbers to produce a final answer. - * - * The nsSBCSGroupProber is responsible for stripping the original text of HTML - * tags, English characters, numbers, low-ASCII punctuation characters, spaces - * and new lines. It reduces any sequence of such characters to a single space. - * The buffer fed to each prober in the SBCS group prober is pure text in - * high-ASCII. - * The two nsSBCharSetProbers (model probers) share the same language model: - * Win1255Model. - * The first nsSBCharSetProber uses the model normally as any other - * nsSBCharSetProber does, to recognize windows-1255, upon which this model was - * built. The second nsSBCharSetProber is told to make the pair-of-letter - * lookup in the language model backwards. This in practice exactly simulates - * a visual Hebrew model using the windows-1255 logical Hebrew model. - * - * The nsHebrewProber is not using any language model. All it does is look for - * final-letter evidence suggesting the text is either logical Hebrew or visual - * Hebrew. Disjointed from the model probers, the results of the nsHebrewProber - * alone are meaningless. nsHebrewProber always returns 0.00 as confidence - * since it never identifies a charset by itself. Instead, the pointer to the - * nsHebrewProber is passed to the model probers as a helper "Name Prober". - * When the Group prober receives a positive identification from any prober, - * it asks for the name of the charset identified. If the prober queried is a - * Hebrew model prober, the model prober forwards the call to the - * nsHebrewProber to make the final decision. In the nsHebrewProber, the - * decision is made according to the final-letters scores maintained and Both - * model probers scores. The answer is returned in the form of the name of the - * charset identified, either "windows-1255" or "ISO-8859-8". - * - */ -#endif /* nsHebrewProber_h__ */ diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsLatin1Prober.cpp b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsLatin1Prober.cpp deleted file mode 100644 index 7694ef7..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsLatin1Prober.cpp +++ /dev/null @@ -1,182 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is Mozilla Universal charset detector code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 2001 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * Shy Shalom <shooshX@gmail.com> - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#include "nsLatin1Prober.h" -#include "prmem.h" -#include <stdio.h> - -#define UDF 0 // undefined -#define OTH 1 //other -#define ASC 2 // ascii capital letter -#define ASS 3 // ascii small letter -#define ACV 4 // accent capital vowel -#define ACO 5 // accent capital other -#define ASV 6 // accent small vowel -#define ASO 7 // accent small other -#define CLASS_NUM 8 // total classes - -static const unsigned char Latin1_CharToClass[] = -{ - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, // 00 - 07 - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, // 08 - 0F - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, // 10 - 17 - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, // 18 - 1F - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, // 20 - 27 - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, // 28 - 2F - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, // 30 - 37 - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, // 38 - 3F - OTH, ASC, ASC, ASC, ASC, ASC, ASC, ASC, // 40 - 47 - ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, // 48 - 4F - ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, // 50 - 57 - ASC, ASC, ASC, OTH, OTH, OTH, OTH, OTH, // 58 - 5F - OTH, ASS, ASS, ASS, ASS, ASS, ASS, ASS, // 60 - 67 - ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, // 68 - 6F - ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, // 70 - 77 - ASS, ASS, ASS, OTH, OTH, OTH, OTH, OTH, // 78 - 7F - OTH, UDF, OTH, ASO, OTH, OTH, OTH, OTH, // 80 - 87 - OTH, OTH, ACO, OTH, ACO, UDF, ACO, UDF, // 88 - 8F - UDF, OTH, OTH, OTH, OTH, OTH, OTH, OTH, // 90 - 97 - OTH, OTH, ASO, OTH, ASO, UDF, ASO, ACO, // 98 - 9F - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, // A0 - A7 - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, // A8 - AF - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, // B0 - B7 - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, // B8 - BF - ACV, ACV, ACV, ACV, ACV, ACV, ACO, ACO, // C0 - C7 - ACV, ACV, ACV, ACV, ACV, ACV, ACV, ACV, // C8 - CF - ACO, ACO, ACV, ACV, ACV, ACV, ACV, OTH, // D0 - D7 - ACV, ACV, ACV, ACV, ACV, ACO, ACO, ACO, // D8 - DF - ASV, ASV, ASV, ASV, ASV, ASV, ASO, ASO, // E0 - E7 - ASV, ASV, ASV, ASV, ASV, ASV, ASV, ASV, // E8 - EF - ASO, ASO, ASV, ASV, ASV, ASV, ASV, OTH, // F0 - F7 - ASV, ASV, ASV, ASV, ASV, ASO, ASO, ASO, // F8 - FF -}; - - -/* 0 : illegal - 1 : very unlikely - 2 : normal - 3 : very likely -*/ -static const unsigned char Latin1ClassModel[] = -{ -/* UDF OTH ASC ASS ACV ACO ASV ASO */ -/*UDF*/ 0, 0, 0, 0, 0, 0, 0, 0, -/*OTH*/ 0, 3, 3, 3, 3, 3, 3, 3, -/*ASC*/ 0, 3, 3, 3, 3, 3, 3, 3, -/*ASS*/ 0, 3, 3, 3, 1, 1, 3, 3, -/*ACV*/ 0, 3, 3, 3, 1, 2, 1, 2, -/*ACO*/ 0, 3, 3, 3, 3, 3, 3, 3, -/*ASV*/ 0, 3, 1, 3, 1, 1, 1, 3, -/*ASO*/ 0, 3, 1, 3, 1, 1, 3, 3, -}; - -void nsLatin1Prober::Reset(void) -{ - mState = eDetecting; - mLastCharClass = OTH; - for (int i = 0; i < FREQ_CAT_NUM; i++) - mFreqCounter[i] = 0; -} - - -nsProbingState nsLatin1Prober::HandleData(const char* aBuf, PRUint32 aLen) -{ - char *newBuf1 = 0; - PRUint32 newLen1 = 0; - - if (!FilterWithEnglishLetters(aBuf, aLen, &newBuf1, newLen1)) { - newBuf1 = (char*)aBuf; - newLen1 = aLen; - } - - unsigned char charClass; - unsigned char freq; - for (PRUint32 i = 0; i < newLen1; i++) - { - charClass = Latin1_CharToClass[(unsigned char)newBuf1[i]]; - freq = Latin1ClassModel[mLastCharClass*CLASS_NUM + charClass]; - if (freq == 0) { - mState = eNotMe; - break; - } - mFreqCounter[freq]++; - mLastCharClass = charClass; - } - - if (newBuf1 != aBuf) - PR_FREEIF(newBuf1); - - return mState; -} - -float nsLatin1Prober::GetConfidence(void) -{ - if (mState == eNotMe) - return 0.01f; - - float confidence; - PRUint32 total = 0; - for (PRInt32 i = 0; i < FREQ_CAT_NUM; i++) - total += mFreqCounter[i]; - - if(!total) - confidence = 0.0f; - else - { - confidence = mFreqCounter[3]*1.0f / total; - confidence -= mFreqCounter[1]*20.0f/total; - } - - if (confidence < 0.0f) - confidence = 0.0f; - - // lower the confidence of latin1 so that other more accurate detector - // can take priority. - confidence *= 0.50f; - - return confidence; -} - -#ifdef DEBUG_chardet -void nsLatin1Prober::DumpStatus() -{ - printf(" Latin1Prober: %1.3f [%s]\r\n", GetConfidence(), GetCharSetName()); -} -#endif - - diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsLatin1Prober.h b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsLatin1Prober.h deleted file mode 100644 index 5145e96..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsLatin1Prober.h +++ /dev/null @@ -1,70 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is Mozilla Universal charset detector code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 2001 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * Shy Shalom <shooshX@gmail.com> - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#ifndef nsLatin1Prober_h__ -#define nsLatin1Prober_h__ - -#include "nsCharSetProber.h" - -#define FREQ_CAT_NUM 4 - -class nsLatin1Prober: public nsCharSetProber { -public: - nsLatin1Prober(void){Reset();} - virtual ~nsLatin1Prober(void){} - nsProbingState HandleData(const char* aBuf, PRUint32 aLen); - const char* GetCharSetName() {return "windows-1252";} - nsProbingState GetState(void) {return mState;} - void Reset(void); - float GetConfidence(void); - void SetOpion() {} - -#ifdef DEBUG_chardet - virtual void DumpStatus(); -#endif - -protected: - - nsProbingState mState; - char mLastCharClass; - PRUint32 mFreqCounter[FREQ_CAT_NUM]; -}; - - -#endif /* nsLatin1Prober_h__ */ - diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsMBCSGroupProber.cpp b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsMBCSGroupProber.cpp deleted file mode 100644 index f161165..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsMBCSGroupProber.cpp +++ /dev/null @@ -1,230 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is Mozilla Universal charset detector code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 2001 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * Shy Shalom <shooshX@gmail.com> - * Proofpoint, Inc. - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ -#include <stdio.h> - -#include "nsMBCSGroupProber.h" -#include "nsUniversalDetector.h" - -#if defined(DEBUG_chardet) || defined(DEBUG_jgmyers) -const char *ProberName[] = -{ - "UTF8", - "SJIS", - "EUCJP", - "GB18030", - "EUCKR", - "Big5", - "EUCTW", -}; - -#endif - -nsMBCSGroupProber::nsMBCSGroupProber(PRUint32 aLanguageFilter) -{ - for (PRUint32 i = 0; i < NUM_OF_PROBERS; i++) - mProbers[i] = nsnull; - - mProbers[0] = new nsUTF8Prober(); - if (aLanguageFilter & NS_FILTER_JAPANESE) - { - mProbers[1] = new nsSJISProber(aLanguageFilter == NS_FILTER_JAPANESE); - mProbers[2] = new nsEUCJPProber(aLanguageFilter == NS_FILTER_JAPANESE); - } - if (aLanguageFilter & NS_FILTER_CHINESE_SIMPLIFIED) - mProbers[3] = new nsGB18030Prober(aLanguageFilter == NS_FILTER_CHINESE_SIMPLIFIED); - if (aLanguageFilter & NS_FILTER_KOREAN) - mProbers[4] = new nsEUCKRProber(aLanguageFilter == NS_FILTER_KOREAN); - if (aLanguageFilter & NS_FILTER_CHINESE_TRADITIONAL) - { - mProbers[5] = new nsBig5Prober(aLanguageFilter == NS_FILTER_CHINESE_TRADITIONAL); - mProbers[6] = new nsEUCTWProber(aLanguageFilter == NS_FILTER_CHINESE_TRADITIONAL); - } - Reset(); -} - -nsMBCSGroupProber::~nsMBCSGroupProber() -{ - for (PRUint32 i = 0; i < NUM_OF_PROBERS; i++) - { - delete mProbers[i]; - } -} - -const char* nsMBCSGroupProber::GetCharSetName() -{ - if (mBestGuess == -1) - { - GetConfidence(); - if (mBestGuess == -1) - mBestGuess = 0; - } - return mProbers[mBestGuess]->GetCharSetName(); -} - -void nsMBCSGroupProber::Reset(void) -{ - mActiveNum = 0; - for (PRUint32 i = 0; i < NUM_OF_PROBERS; i++) - { - if (mProbers[i]) - { - mProbers[i]->Reset(); - mIsActive[i] = PR_TRUE; - ++mActiveNum; - } - else - mIsActive[i] = PR_FALSE; - } - mBestGuess = -1; - mState = eDetecting; - mKeepNext = 0; -} - -nsProbingState nsMBCSGroupProber::HandleData(const char* aBuf, PRUint32 aLen) -{ - nsProbingState st; - PRUint32 start = 0; - PRUint32 keepNext = mKeepNext; - - //do filtering to reduce load to probers - for (PRUint32 pos = 0; pos < aLen; ++pos) - { - if (aBuf[pos] & 0x80) - { - if (!keepNext) - start = pos; - keepNext = 2; - } - else if (keepNext) - { - if (--keepNext == 0) - { - for (PRUint32 i = 0; i < NUM_OF_PROBERS; i++) - { - if (!mIsActive[i]) - continue; - st = mProbers[i]->HandleData(aBuf + start, pos + 1 - start); - if (st == eFoundIt) - { - mBestGuess = i; - mState = eFoundIt; - return mState; - } - } - } - } - } - - if (keepNext) { - for (PRUint32 i = 0; i < NUM_OF_PROBERS; i++) - { - if (!mIsActive[i]) - continue; - st = mProbers[i]->HandleData(aBuf + start, aLen - start); - if (st == eFoundIt) - { - mBestGuess = i; - mState = eFoundIt; - return mState; - } - } - } - mKeepNext = keepNext; - - return mState; -} - -float nsMBCSGroupProber::GetConfidence(void) -{ - PRUint32 i; - float bestConf = 0.0, cf; - - switch (mState) - { - case eFoundIt: - return (float)0.99; - case eNotMe: - return (float)0.01; - default: - for (i = 0; i < NUM_OF_PROBERS; i++) - { - if (!mIsActive[i]) - continue; - cf = mProbers[i]->GetConfidence(); - if (bestConf < cf) - { - bestConf = cf; - mBestGuess = i; - } - } - } - return bestConf; -} - -#ifdef DEBUG_chardet -void nsMBCSGroupProber::DumpStatus() -{ - PRUint32 i; - float cf; - - GetConfidence(); - for (i = 0; i < NUM_OF_PROBERS; i++) - { - if (!mIsActive[i]) - printf(" MBCS inactive: [%s] (confidence is too low).\r\n", ProberName[i]); - else - { - cf = mProbers[i]->GetConfidence(); - printf(" MBCS %1.3f: [%s]\r\n", cf, ProberName[i]); - } - } -} -#endif - -#ifdef DEBUG_jgmyers -void nsMBCSGroupProber::GetDetectorState(nsUniversalDetector::DetectorState (&states)[nsUniversalDetector::NumDetectors], PRUint32 &offset) -{ - for (PRUint32 i = 0; i < NUM_OF_PROBERS; ++i) { - states[offset].name = ProberName[i]; - states[offset].isActive = mIsActive[i]; - states[offset].confidence = mIsActive[i] ? mProbers[i]->GetConfidence() : 0.0; - ++offset; - } -} -#endif /* DEBUG_jgmyers */ diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsMBCSGroupProber.h b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsMBCSGroupProber.h deleted file mode 100644 index c4e9964..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsMBCSGroupProber.h +++ /dev/null @@ -1,80 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * Proofpoint, Inc. - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#ifndef nsMBCSGroupProber_h__ -#define nsMBCSGroupProber_h__ - -#include "nsSJISProber.h" -#include "nsUTF8Prober.h" -#include "nsEUCJPProber.h" -#include "nsGB2312Prober.h" -#include "nsEUCKRProber.h" -#include "nsBig5Prober.h" -#include "nsEUCTWProber.h" - -#define NUM_OF_PROBERS 7 - -class nsMBCSGroupProber: public nsCharSetProber { -public: - nsMBCSGroupProber(PRUint32 aLanguageFilter); - virtual ~nsMBCSGroupProber(); - nsProbingState HandleData(const char* aBuf, PRUint32 aLen); - const char* GetCharSetName(); - nsProbingState GetState(void) {return mState;} - void Reset(void); - float GetConfidence(void); - void SetOpion() {} - -#ifdef DEBUG_chardet - void DumpStatus(); -#endif -#ifdef DEBUG_jgmyers - void GetDetectorState(nsUniversalDetector::DetectorState (&states)[nsUniversalDetector::NumDetectors], PRUint32 &offset); -#endif - -protected: - nsProbingState mState; - nsCharSetProber* mProbers[NUM_OF_PROBERS]; - PRBool mIsActive[NUM_OF_PROBERS]; - PRInt32 mBestGuess; - PRUint32 mActiveNum; - PRUint32 mKeepNext; -}; - -#endif /* nsMBCSGroupProber_h__ */ - diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsMBCSSM.cpp b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsMBCSSM.cpp deleted file mode 100644 index 584e931..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsMBCSSM.cpp +++ /dev/null @@ -1,513 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ -#include "nsCodingStateMachine.h" - -/* -Modification from frank tang's original work: -. 0x00 is allowed as a legal character. Since some web pages contains this char in - text stream. -*/ - -// BIG5 - -static const PRUint32 BIG5_cls [ 256 / 8 ] = { -//PCK4BITS(0,1,1,1,1,1,1,1), // 00 - 07 -PCK4BITS(1,1,1,1,1,1,1,1), // 00 - 07 //allow 0x00 as legal value -PCK4BITS(1,1,1,1,1,1,0,0), // 08 - 0f -PCK4BITS(1,1,1,1,1,1,1,1), // 10 - 17 -PCK4BITS(1,1,1,0,1,1,1,1), // 18 - 1f -PCK4BITS(1,1,1,1,1,1,1,1), // 20 - 27 -PCK4BITS(1,1,1,1,1,1,1,1), // 28 - 2f -PCK4BITS(1,1,1,1,1,1,1,1), // 30 - 37 -PCK4BITS(1,1,1,1,1,1,1,1), // 38 - 3f -PCK4BITS(2,2,2,2,2,2,2,2), // 40 - 47 -PCK4BITS(2,2,2,2,2,2,2,2), // 48 - 4f -PCK4BITS(2,2,2,2,2,2,2,2), // 50 - 57 -PCK4BITS(2,2,2,2,2,2,2,2), // 58 - 5f -PCK4BITS(2,2,2,2,2,2,2,2), // 60 - 67 -PCK4BITS(2,2,2,2,2,2,2,2), // 68 - 6f -PCK4BITS(2,2,2,2,2,2,2,2), // 70 - 77 -PCK4BITS(2,2,2,2,2,2,2,1), // 78 - 7f -PCK4BITS(4,4,4,4,4,4,4,4), // 80 - 87 -PCK4BITS(4,4,4,4,4,4,4,4), // 88 - 8f -PCK4BITS(4,4,4,4,4,4,4,4), // 90 - 97 -PCK4BITS(4,4,4,4,4,4,4,4), // 98 - 9f -PCK4BITS(4,3,3,3,3,3,3,3), // a0 - a7 -PCK4BITS(3,3,3,3,3,3,3,3), // a8 - af -PCK4BITS(3,3,3,3,3,3,3,3), // b0 - b7 -PCK4BITS(3,3,3,3,3,3,3,3), // b8 - bf -PCK4BITS(3,3,3,3,3,3,3,3), // c0 - c7 -PCK4BITS(3,3,3,3,3,3,3,3), // c8 - cf -PCK4BITS(3,3,3,3,3,3,3,3), // d0 - d7 -PCK4BITS(3,3,3,3,3,3,3,3), // d8 - df -PCK4BITS(3,3,3,3,3,3,3,3), // e0 - e7 -PCK4BITS(3,3,3,3,3,3,3,3), // e8 - ef -PCK4BITS(3,3,3,3,3,3,3,3), // f0 - f7 -PCK4BITS(3,3,3,3,3,3,3,0) // f8 - ff -}; - - -static const PRUint32 BIG5_st [ 3] = { -PCK4BITS(eError,eStart,eStart, 3,eError,eError,eError,eError),//00-07 -PCK4BITS(eError,eError,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eError),//08-0f -PCK4BITS(eError,eStart,eStart,eStart,eStart,eStart,eStart,eStart) //10-17 -}; - -static const PRUint32 Big5CharLenTable[] = {0, 1, 1, 2, 0}; - -SMModel const Big5SMModel = { - {eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, BIG5_cls }, - 5, - {eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, BIG5_st }, - Big5CharLenTable, - "Big5", -}; - -static const PRUint32 EUCJP_cls [ 256 / 8 ] = { -//PCK4BITS(5,4,4,4,4,4,4,4), // 00 - 07 -PCK4BITS(4,4,4,4,4,4,4,4), // 00 - 07 -PCK4BITS(4,4,4,4,4,4,5,5), // 08 - 0f -PCK4BITS(4,4,4,4,4,4,4,4), // 10 - 17 -PCK4BITS(4,4,4,5,4,4,4,4), // 18 - 1f -PCK4BITS(4,4,4,4,4,4,4,4), // 20 - 27 -PCK4BITS(4,4,4,4,4,4,4,4), // 28 - 2f -PCK4BITS(4,4,4,4,4,4,4,4), // 30 - 37 -PCK4BITS(4,4,4,4,4,4,4,4), // 38 - 3f -PCK4BITS(4,4,4,4,4,4,4,4), // 40 - 47 -PCK4BITS(4,4,4,4,4,4,4,4), // 48 - 4f -PCK4BITS(4,4,4,4,4,4,4,4), // 50 - 57 -PCK4BITS(4,4,4,4,4,4,4,4), // 58 - 5f -PCK4BITS(4,4,4,4,4,4,4,4), // 60 - 67 -PCK4BITS(4,4,4,4,4,4,4,4), // 68 - 6f -PCK4BITS(4,4,4,4,4,4,4,4), // 70 - 77 -PCK4BITS(4,4,4,4,4,4,4,4), // 78 - 7f -PCK4BITS(5,5,5,5,5,5,5,5), // 80 - 87 -PCK4BITS(5,5,5,5,5,5,1,3), // 88 - 8f -PCK4BITS(5,5,5,5,5,5,5,5), // 90 - 97 -PCK4BITS(5,5,5,5,5,5,5,5), // 98 - 9f -PCK4BITS(5,2,2,2,2,2,2,2), // a0 - a7 -PCK4BITS(2,2,2,2,2,2,2,2), // a8 - af -PCK4BITS(2,2,2,2,2,2,2,2), // b0 - b7 -PCK4BITS(2,2,2,2,2,2,2,2), // b8 - bf -PCK4BITS(2,2,2,2,2,2,2,2), // c0 - c7 -PCK4BITS(2,2,2,2,2,2,2,2), // c8 - cf -PCK4BITS(2,2,2,2,2,2,2,2), // d0 - d7 -PCK4BITS(2,2,2,2,2,2,2,2), // d8 - df -PCK4BITS(0,0,0,0,0,0,0,0), // e0 - e7 -PCK4BITS(0,0,0,0,0,0,0,0), // e8 - ef -PCK4BITS(0,0,0,0,0,0,0,0), // f0 - f7 -PCK4BITS(0,0,0,0,0,0,0,5) // f8 - ff -}; - - -static const PRUint32 EUCJP_st [ 5] = { -PCK4BITS( 3, 4, 3, 5,eStart,eError,eError,eError),//00-07 -PCK4BITS(eError,eError,eError,eError,eItsMe,eItsMe,eItsMe,eItsMe),//08-0f -PCK4BITS(eItsMe,eItsMe,eStart,eError,eStart,eError,eError,eError),//10-17 -PCK4BITS(eError,eError,eStart,eError,eError,eError, 3,eError),//18-1f -PCK4BITS( 3,eError,eError,eError,eStart,eStart,eStart,eStart) //20-27 -}; - -static const PRUint32 EUCJPCharLenTable[] = {2, 2, 2, 3, 1, 0}; - -const SMModel EUCJPSMModel = { - {eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, EUCJP_cls }, - 6, - {eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, EUCJP_st }, - EUCJPCharLenTable, - "EUC-JP", -}; - -static const PRUint32 EUCKR_cls [ 256 / 8 ] = { -//PCK4BITS(0,1,1,1,1,1,1,1), // 00 - 07 -PCK4BITS(1,1,1,1,1,1,1,1), // 00 - 07 -PCK4BITS(1,1,1,1,1,1,0,0), // 08 - 0f -PCK4BITS(1,1,1,1,1,1,1,1), // 10 - 17 -PCK4BITS(1,1,1,0,1,1,1,1), // 18 - 1f -PCK4BITS(1,1,1,1,1,1,1,1), // 20 - 27 -PCK4BITS(1,1,1,1,1,1,1,1), // 28 - 2f -PCK4BITS(1,1,1,1,1,1,1,1), // 30 - 37 -PCK4BITS(1,1,1,1,1,1,1,1), // 38 - 3f -PCK4BITS(1,1,1,1,1,1,1,1), // 40 - 47 -PCK4BITS(1,1,1,1,1,1,1,1), // 48 - 4f -PCK4BITS(1,1,1,1,1,1,1,1), // 50 - 57 -PCK4BITS(1,1,1,1,1,1,1,1), // 58 - 5f -PCK4BITS(1,1,1,1,1,1,1,1), // 60 - 67 -PCK4BITS(1,1,1,1,1,1,1,1), // 68 - 6f -PCK4BITS(1,1,1,1,1,1,1,1), // 70 - 77 -PCK4BITS(1,1,1,1,1,1,1,1), // 78 - 7f -PCK4BITS(0,0,0,0,0,0,0,0), // 80 - 87 -PCK4BITS(0,0,0,0,0,0,0,0), // 88 - 8f -PCK4BITS(0,0,0,0,0,0,0,0), // 90 - 97 -PCK4BITS(0,0,0,0,0,0,0,0), // 98 - 9f -PCK4BITS(0,2,2,2,2,2,2,2), // a0 - a7 -PCK4BITS(2,2,2,2,2,3,3,3), // a8 - af -PCK4BITS(2,2,2,2,2,2,2,2), // b0 - b7 -PCK4BITS(2,2,2,2,2,2,2,2), // b8 - bf -PCK4BITS(2,2,2,2,2,2,2,2), // c0 - c7 -PCK4BITS(2,3,2,2,2,2,2,2), // c8 - cf -PCK4BITS(2,2,2,2,2,2,2,2), // d0 - d7 -PCK4BITS(2,2,2,2,2,2,2,2), // d8 - df -PCK4BITS(2,2,2,2,2,2,2,2), // e0 - e7 -PCK4BITS(2,2,2,2,2,2,2,2), // e8 - ef -PCK4BITS(2,2,2,2,2,2,2,2), // f0 - f7 -PCK4BITS(2,2,2,2,2,2,2,0) // f8 - ff -}; - - -static const PRUint32 EUCKR_st [ 2] = { -PCK4BITS(eError,eStart, 3,eError,eError,eError,eError,eError),//00-07 -PCK4BITS(eItsMe,eItsMe,eItsMe,eItsMe,eError,eError,eStart,eStart) //08-0f -}; - -static const PRUint32 EUCKRCharLenTable[] = {0, 1, 2, 0}; - -const SMModel EUCKRSMModel = { - {eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, EUCKR_cls }, - 4, - {eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, EUCKR_st }, - EUCKRCharLenTable, - "EUC-KR", -}; - -static const PRUint32 EUCTW_cls [ 256 / 8 ] = { -//PCK4BITS(0,2,2,2,2,2,2,2), // 00 - 07 -PCK4BITS(2,2,2,2,2,2,2,2), // 00 - 07 -PCK4BITS(2,2,2,2,2,2,0,0), // 08 - 0f -PCK4BITS(2,2,2,2,2,2,2,2), // 10 - 17 -PCK4BITS(2,2,2,0,2,2,2,2), // 18 - 1f -PCK4BITS(2,2,2,2,2,2,2,2), // 20 - 27 -PCK4BITS(2,2,2,2,2,2,2,2), // 28 - 2f -PCK4BITS(2,2,2,2,2,2,2,2), // 30 - 37 -PCK4BITS(2,2,2,2,2,2,2,2), // 38 - 3f -PCK4BITS(2,2,2,2,2,2,2,2), // 40 - 47 -PCK4BITS(2,2,2,2,2,2,2,2), // 48 - 4f -PCK4BITS(2,2,2,2,2,2,2,2), // 50 - 57 -PCK4BITS(2,2,2,2,2,2,2,2), // 58 - 5f -PCK4BITS(2,2,2,2,2,2,2,2), // 60 - 67 -PCK4BITS(2,2,2,2,2,2,2,2), // 68 - 6f -PCK4BITS(2,2,2,2,2,2,2,2), // 70 - 77 -PCK4BITS(2,2,2,2,2,2,2,2), // 78 - 7f -PCK4BITS(0,0,0,0,0,0,0,0), // 80 - 87 -PCK4BITS(0,0,0,0,0,0,6,0), // 88 - 8f -PCK4BITS(0,0,0,0,0,0,0,0), // 90 - 97 -PCK4BITS(0,0,0,0,0,0,0,0), // 98 - 9f -PCK4BITS(0,3,4,4,4,4,4,4), // a0 - a7 -PCK4BITS(5,5,1,1,1,1,1,1), // a8 - af -PCK4BITS(1,1,1,1,1,1,1,1), // b0 - b7 -PCK4BITS(1,1,1,1,1,1,1,1), // b8 - bf -PCK4BITS(1,1,3,1,3,3,3,3), // c0 - c7 -PCK4BITS(3,3,3,3,3,3,3,3), // c8 - cf -PCK4BITS(3,3,3,3,3,3,3,3), // d0 - d7 -PCK4BITS(3,3,3,3,3,3,3,3), // d8 - df -PCK4BITS(3,3,3,3,3,3,3,3), // e0 - e7 -PCK4BITS(3,3,3,3,3,3,3,3), // e8 - ef -PCK4BITS(3,3,3,3,3,3,3,3), // f0 - f7 -PCK4BITS(3,3,3,3,3,3,3,0) // f8 - ff -}; - - -static const PRUint32 EUCTW_st [ 6] = { -PCK4BITS(eError,eError,eStart, 3, 3, 3, 4,eError),//00-07 -PCK4BITS(eError,eError,eError,eError,eError,eError,eItsMe,eItsMe),//08-0f -PCK4BITS(eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eError,eStart,eError),//10-17 -PCK4BITS(eStart,eStart,eStart,eError,eError,eError,eError,eError),//18-1f -PCK4BITS( 5,eError,eError,eError,eStart,eError,eStart,eStart),//20-27 -PCK4BITS(eStart,eError,eStart,eStart,eStart,eStart,eStart,eStart) //28-2f -}; - -static const PRUint32 EUCTWCharLenTable[] = {0, 0, 1, 2, 2, 2, 3}; - -const SMModel EUCTWSMModel = { - {eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, EUCTW_cls }, - 7, - {eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, EUCTW_st }, - EUCTWCharLenTable, - "x-euc-tw", -}; - -/* obsolete GB2312 by gb18030 -static PRUint32 GB2312_cls [ 256 / 8 ] = { -//PCK4BITS(0,1,1,1,1,1,1,1), // 00 - 07 -PCK4BITS(1,1,1,1,1,1,1,1), // 00 - 07 -PCK4BITS(1,1,1,1,1,1,0,0), // 08 - 0f -PCK4BITS(1,1,1,1,1,1,1,1), // 10 - 17 -PCK4BITS(1,1,1,0,1,1,1,1), // 18 - 1f -PCK4BITS(1,1,1,1,1,1,1,1), // 20 - 27 -PCK4BITS(1,1,1,1,1,1,1,1), // 28 - 2f -PCK4BITS(1,1,1,1,1,1,1,1), // 30 - 37 -PCK4BITS(1,1,1,1,1,1,1,1), // 38 - 3f -PCK4BITS(1,1,1,1,1,1,1,1), // 40 - 47 -PCK4BITS(1,1,1,1,1,1,1,1), // 48 - 4f -PCK4BITS(1,1,1,1,1,1,1,1), // 50 - 57 -PCK4BITS(1,1,1,1,1,1,1,1), // 58 - 5f -PCK4BITS(1,1,1,1,1,1,1,1), // 60 - 67 -PCK4BITS(1,1,1,1,1,1,1,1), // 68 - 6f -PCK4BITS(1,1,1,1,1,1,1,1), // 70 - 77 -PCK4BITS(1,1,1,1,1,1,1,1), // 78 - 7f -PCK4BITS(1,0,0,0,0,0,0,0), // 80 - 87 -PCK4BITS(0,0,0,0,0,0,0,0), // 88 - 8f -PCK4BITS(0,0,0,0,0,0,0,0), // 90 - 97 -PCK4BITS(0,0,0,0,0,0,0,0), // 98 - 9f -PCK4BITS(0,2,2,2,2,2,2,2), // a0 - a7 -PCK4BITS(2,2,3,3,3,3,3,3), // a8 - af -PCK4BITS(2,2,2,2,2,2,2,2), // b0 - b7 -PCK4BITS(2,2,2,2,2,2,2,2), // b8 - bf -PCK4BITS(2,2,2,2,2,2,2,2), // c0 - c7 -PCK4BITS(2,2,2,2,2,2,2,2), // c8 - cf -PCK4BITS(2,2,2,2,2,2,2,2), // d0 - d7 -PCK4BITS(2,2,2,2,2,2,2,2), // d8 - df -PCK4BITS(2,2,2,2,2,2,2,2), // e0 - e7 -PCK4BITS(2,2,2,2,2,2,2,2), // e8 - ef -PCK4BITS(2,2,2,2,2,2,2,2), // f0 - f7 -PCK4BITS(2,2,2,2,2,2,2,0) // f8 - ff -}; - - -static PRUint32 GB2312_st [ 2] = { -PCK4BITS(eError,eStart, 3,eError,eError,eError,eError,eError),//00-07 -PCK4BITS(eItsMe,eItsMe,eItsMe,eItsMe,eError,eError,eStart,eStart) //08-0f -}; - -static const PRUint32 GB2312CharLenTable[] = {0, 1, 2, 0}; - -SMModel GB2312SMModel = { - {eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, GB2312_cls }, - 4, - {eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, GB2312_st }, - GB2312CharLenTable, - "GB2312", -}; -*/ - -// the following state machine data was created by perl script in -// intl/chardet/tools. It should be the same as in PSM detector. -static const PRUint32 GB18030_cls [ 256 / 8 ] = { -PCK4BITS(1,1,1,1,1,1,1,1), // 00 - 07 -PCK4BITS(1,1,1,1,1,1,0,0), // 08 - 0f -PCK4BITS(1,1,1,1,1,1,1,1), // 10 - 17 -PCK4BITS(1,1,1,0,1,1,1,1), // 18 - 1f -PCK4BITS(1,1,1,1,1,1,1,1), // 20 - 27 -PCK4BITS(1,1,1,1,1,1,1,1), // 28 - 2f -PCK4BITS(3,3,3,3,3,3,3,3), // 30 - 37 -PCK4BITS(3,3,1,1,1,1,1,1), // 38 - 3f -PCK4BITS(2,2,2,2,2,2,2,2), // 40 - 47 -PCK4BITS(2,2,2,2,2,2,2,2), // 48 - 4f -PCK4BITS(2,2,2,2,2,2,2,2), // 50 - 57 -PCK4BITS(2,2,2,2,2,2,2,2), // 58 - 5f -PCK4BITS(2,2,2,2,2,2,2,2), // 60 - 67 -PCK4BITS(2,2,2,2,2,2,2,2), // 68 - 6f -PCK4BITS(2,2,2,2,2,2,2,2), // 70 - 77 -PCK4BITS(2,2,2,2,2,2,2,4), // 78 - 7f -PCK4BITS(5,6,6,6,6,6,6,6), // 80 - 87 -PCK4BITS(6,6,6,6,6,6,6,6), // 88 - 8f -PCK4BITS(6,6,6,6,6,6,6,6), // 90 - 97 -PCK4BITS(6,6,6,6,6,6,6,6), // 98 - 9f -PCK4BITS(6,6,6,6,6,6,6,6), // a0 - a7 -PCK4BITS(6,6,6,6,6,6,6,6), // a8 - af -PCK4BITS(6,6,6,6,6,6,6,6), // b0 - b7 -PCK4BITS(6,6,6,6,6,6,6,6), // b8 - bf -PCK4BITS(6,6,6,6,6,6,6,6), // c0 - c7 -PCK4BITS(6,6,6,6,6,6,6,6), // c8 - cf -PCK4BITS(6,6,6,6,6,6,6,6), // d0 - d7 -PCK4BITS(6,6,6,6,6,6,6,6), // d8 - df -PCK4BITS(6,6,6,6,6,6,6,6), // e0 - e7 -PCK4BITS(6,6,6,6,6,6,6,6), // e8 - ef -PCK4BITS(6,6,6,6,6,6,6,6), // f0 - f7 -PCK4BITS(6,6,6,6,6,6,6,0) // f8 - ff -}; - - -static const PRUint32 GB18030_st [ 6] = { -PCK4BITS(eError,eStart,eStart,eStart,eStart,eStart, 3,eError),//00-07 -PCK4BITS(eError,eError,eError,eError,eError,eError,eItsMe,eItsMe),//08-0f -PCK4BITS(eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eError,eError,eStart),//10-17 -PCK4BITS( 4,eError,eStart,eStart,eError,eError,eError,eError),//18-1f -PCK4BITS(eError,eError, 5,eError,eError,eError,eItsMe,eError),//20-27 -PCK4BITS(eError,eError,eStart,eStart,eStart,eStart,eStart,eStart) //28-2f -}; - -// To be accurate, the length of class 6 can be either 2 or 4. -// But it is not necessary to discriminate between the two since -// it is used for frequency analysis only, and we are validing -// each code range there as well. So it is safe to set it to be -// 2 here. -static const PRUint32 GB18030CharLenTable[] = {0, 1, 1, 1, 1, 1, 2}; - -const SMModel GB18030SMModel = { - {eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, GB18030_cls }, - 7, - {eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, GB18030_st }, - GB18030CharLenTable, - "GB18030", -}; - -// sjis - -static const PRUint32 SJIS_cls [ 256 / 8 ] = { -//PCK4BITS(0,1,1,1,1,1,1,1), // 00 - 07 -PCK4BITS(1,1,1,1,1,1,1,1), // 00 - 07 -PCK4BITS(1,1,1,1,1,1,0,0), // 08 - 0f -PCK4BITS(1,1,1,1,1,1,1,1), // 10 - 17 -PCK4BITS(1,1,1,0,1,1,1,1), // 18 - 1f -PCK4BITS(1,1,1,1,1,1,1,1), // 20 - 27 -PCK4BITS(1,1,1,1,1,1,1,1), // 28 - 2f -PCK4BITS(1,1,1,1,1,1,1,1), // 30 - 37 -PCK4BITS(1,1,1,1,1,1,1,1), // 38 - 3f -PCK4BITS(2,2,2,2,2,2,2,2), // 40 - 47 -PCK4BITS(2,2,2,2,2,2,2,2), // 48 - 4f -PCK4BITS(2,2,2,2,2,2,2,2), // 50 - 57 -PCK4BITS(2,2,2,2,2,2,2,2), // 58 - 5f -PCK4BITS(2,2,2,2,2,2,2,2), // 60 - 67 -PCK4BITS(2,2,2,2,2,2,2,2), // 68 - 6f -PCK4BITS(2,2,2,2,2,2,2,2), // 70 - 77 -PCK4BITS(2,2,2,2,2,2,2,1), // 78 - 7f -PCK4BITS(3,3,3,3,3,3,3,3), // 80 - 87 -PCK4BITS(3,3,3,3,3,3,3,3), // 88 - 8f -PCK4BITS(3,3,3,3,3,3,3,3), // 90 - 97 -PCK4BITS(3,3,3,3,3,3,3,3), // 98 - 9f -//0xa0 is illegal in sjis encoding, but some pages does -//contain such byte. We need to be more error forgiven. -PCK4BITS(2,2,2,2,2,2,2,2), // a0 - a7 -PCK4BITS(2,2,2,2,2,2,2,2), // a8 - af -PCK4BITS(2,2,2,2,2,2,2,2), // b0 - b7 -PCK4BITS(2,2,2,2,2,2,2,2), // b8 - bf -PCK4BITS(2,2,2,2,2,2,2,2), // c0 - c7 -PCK4BITS(2,2,2,2,2,2,2,2), // c8 - cf -PCK4BITS(2,2,2,2,2,2,2,2), // d0 - d7 -PCK4BITS(2,2,2,2,2,2,2,2), // d8 - df -PCK4BITS(3,3,3,3,3,3,3,3), // e0 - e7 -PCK4BITS(3,3,3,3,3,4,4,4), // e8 - ef -PCK4BITS(4,4,4,4,4,4,4,4), // f0 - f7 -PCK4BITS(4,4,4,4,4,0,0,0) // f8 - ff -}; - - -static const PRUint32 SJIS_st [ 3] = { -PCK4BITS(eError,eStart,eStart, 3,eError,eError,eError,eError),//00-07 -PCK4BITS(eError,eError,eError,eError,eItsMe,eItsMe,eItsMe,eItsMe),//08-0f -PCK4BITS(eItsMe,eItsMe,eError,eError,eStart,eStart,eStart,eStart) //10-17 -}; - -static const PRUint32 SJISCharLenTable[] = {0, 1, 1, 2, 0, 0}; - -const SMModel SJISSMModel = { - {eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, SJIS_cls }, - 6, - {eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, SJIS_st }, - SJISCharLenTable, - "Shift_JIS", -}; - - -static const PRUint32 UTF8_cls [ 256 / 8 ] = { -//PCK4BITS(0,1,1,1,1,1,1,1), // 00 - 07 -PCK4BITS(1,1,1,1,1,1,1,1), // 00 - 07 //allow 0x00 as a legal value -PCK4BITS(1,1,1,1,1,1,0,0), // 08 - 0f -PCK4BITS(1,1,1,1,1,1,1,1), // 10 - 17 -PCK4BITS(1,1,1,0,1,1,1,1), // 18 - 1f -PCK4BITS(1,1,1,1,1,1,1,1), // 20 - 27 -PCK4BITS(1,1,1,1,1,1,1,1), // 28 - 2f -PCK4BITS(1,1,1,1,1,1,1,1), // 30 - 37 -PCK4BITS(1,1,1,1,1,1,1,1), // 38 - 3f -PCK4BITS(1,1,1,1,1,1,1,1), // 40 - 47 -PCK4BITS(1,1,1,1,1,1,1,1), // 48 - 4f -PCK4BITS(1,1,1,1,1,1,1,1), // 50 - 57 -PCK4BITS(1,1,1,1,1,1,1,1), // 58 - 5f -PCK4BITS(1,1,1,1,1,1,1,1), // 60 - 67 -PCK4BITS(1,1,1,1,1,1,1,1), // 68 - 6f -PCK4BITS(1,1,1,1,1,1,1,1), // 70 - 77 -PCK4BITS(1,1,1,1,1,1,1,1), // 78 - 7f -PCK4BITS(2,2,2,2,3,3,3,3), // 80 - 87 -PCK4BITS(4,4,4,4,4,4,4,4), // 88 - 8f -PCK4BITS(4,4,4,4,4,4,4,4), // 90 - 97 -PCK4BITS(4,4,4,4,4,4,4,4), // 98 - 9f -PCK4BITS(5,5,5,5,5,5,5,5), // a0 - a7 -PCK4BITS(5,5,5,5,5,5,5,5), // a8 - af -PCK4BITS(5,5,5,5,5,5,5,5), // b0 - b7 -PCK4BITS(5,5,5,5,5,5,5,5), // b8 - bf -PCK4BITS(0,0,6,6,6,6,6,6), // c0 - c7 -PCK4BITS(6,6,6,6,6,6,6,6), // c8 - cf -PCK4BITS(6,6,6,6,6,6,6,6), // d0 - d7 -PCK4BITS(6,6,6,6,6,6,6,6), // d8 - df -PCK4BITS(7,8,8,8,8,8,8,8), // e0 - e7 -PCK4BITS(8,8,8,8,8,9,8,8), // e8 - ef -PCK4BITS(10,11,11,11,11,11,11,11), // f0 - f7 -PCK4BITS(12,13,13,13,14,15,0,0) // f8 - ff -}; - - -static const PRUint32 UTF8_st [ 26] = { -PCK4BITS(eError,eStart,eError,eError,eError,eError, 12, 10),//00-07 -PCK4BITS( 9, 11, 8, 7, 6, 5, 4, 3),//08-0f -PCK4BITS(eError,eError,eError,eError,eError,eError,eError,eError),//10-17 -PCK4BITS(eError,eError,eError,eError,eError,eError,eError,eError),//18-1f -PCK4BITS(eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe),//20-27 -PCK4BITS(eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe),//28-2f -PCK4BITS(eError,eError, 5, 5, 5, 5,eError,eError),//30-37 -PCK4BITS(eError,eError,eError,eError,eError,eError,eError,eError),//38-3f -PCK4BITS(eError,eError,eError, 5, 5, 5,eError,eError),//40-47 -PCK4BITS(eError,eError,eError,eError,eError,eError,eError,eError),//48-4f -PCK4BITS(eError,eError, 7, 7, 7, 7,eError,eError),//50-57 -PCK4BITS(eError,eError,eError,eError,eError,eError,eError,eError),//58-5f -PCK4BITS(eError,eError,eError,eError, 7, 7,eError,eError),//60-67 -PCK4BITS(eError,eError,eError,eError,eError,eError,eError,eError),//68-6f -PCK4BITS(eError,eError, 9, 9, 9, 9,eError,eError),//70-77 -PCK4BITS(eError,eError,eError,eError,eError,eError,eError,eError),//78-7f -PCK4BITS(eError,eError,eError,eError,eError, 9,eError,eError),//80-87 -PCK4BITS(eError,eError,eError,eError,eError,eError,eError,eError),//88-8f -PCK4BITS(eError,eError, 12, 12, 12, 12,eError,eError),//90-97 -PCK4BITS(eError,eError,eError,eError,eError,eError,eError,eError),//98-9f -PCK4BITS(eError,eError,eError,eError,eError, 12,eError,eError),//a0-a7 -PCK4BITS(eError,eError,eError,eError,eError,eError,eError,eError),//a8-af -PCK4BITS(eError,eError, 12, 12, 12,eError,eError,eError),//b0-b7 -PCK4BITS(eError,eError,eError,eError,eError,eError,eError,eError),//b8-bf -PCK4BITS(eError,eError,eStart,eStart,eStart,eStart,eError,eError),//c0-c7 -PCK4BITS(eError,eError,eError,eError,eError,eError,eError,eError) //c8-cf -}; - -static const PRUint32 UTF8CharLenTable[] = {0, 1, 0, 0, 0, 0, 2, 3, - 3, 3, 4, 4, 5, 5, 6, 6 }; - -const SMModel UTF8SMModel = { - {eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, UTF8_cls }, - 16, - {eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, UTF8_st }, - UTF8CharLenTable, - "UTF-8", -}; - diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsPkgInt.h b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsPkgInt.h deleted file mode 100644 index 3caa912..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsPkgInt.h +++ /dev/null @@ -1,89 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#ifndef nsPkgInt_h__ -#define nsPkgInt_h__ -#include "nscore.h" - -typedef enum { - eIdxSft4bits = 3, - eIdxSft8bits = 2, - eIdxSft16bits = 1 -} nsIdxSft; - -typedef enum { - eSftMsk4bits = 7, - eSftMsk8bits = 3, - eSftMsk16bits = 1 -} nsSftMsk; - -typedef enum { - eBitSft4bits = 2, - eBitSft8bits = 3, - eBitSft16bits = 4 -} nsBitSft; - -typedef enum { - eUnitMsk4bits = 0x0000000FL, - eUnitMsk8bits = 0x000000FFL, - eUnitMsk16bits = 0x0000FFFFL -} nsUnitMsk; - -typedef struct nsPkgInt { - nsIdxSft idxsft; - nsSftMsk sftmsk; - nsBitSft bitsft; - nsUnitMsk unitmsk; - const PRUint32* const data; -} nsPkgInt; - - -#define PCK16BITS(a,b) ((PRUint32)(((b) << 16) | (a))) - -#define PCK8BITS(a,b,c,d) PCK16BITS( ((PRUint32)(((b) << 8) | (a))), \ - ((PRUint32)(((d) << 8) | (c)))) - -#define PCK4BITS(a,b,c,d,e,f,g,h) PCK8BITS( ((PRUint32)(((b) << 4) | (a))), \ - ((PRUint32)(((d) << 4) | (c))), \ - ((PRUint32)(((f) << 4) | (e))), \ - ((PRUint32)(((h) << 4) | (g))) ) - -#define GETFROMPCK(i, c) \ - (((((c).data)[(i)>>(c).idxsft])>>(((i)&(c).sftmsk)<<(c).bitsft))&(c).unitmsk) - -#endif /* nsPkgInt_h__ */ - diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsSBCSGroupProber.cpp b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsSBCSGroupProber.cpp deleted file mode 100644 index d8fef87..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsSBCSGroupProber.cpp +++ /dev/null @@ -1,224 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is Mozilla Universal charset detector code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 2001 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * Shy Shalom <shooshX@gmail.com> - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#include <stdio.h> -#include "prmem.h" - -#include "nsSBCharSetProber.h" -#include "nsSBCSGroupProber.h" - -#include "nsHebrewProber.h" - -nsSBCSGroupProber::nsSBCSGroupProber() -{ - mProbers[0] = new nsSingleByteCharSetProber(&Win1251Model); - mProbers[1] = new nsSingleByteCharSetProber(&Koi8rModel); - mProbers[2] = new nsSingleByteCharSetProber(&Latin5Model); - mProbers[3] = new nsSingleByteCharSetProber(&MacCyrillicModel); - mProbers[4] = new nsSingleByteCharSetProber(&Ibm866Model); - mProbers[5] = new nsSingleByteCharSetProber(&Ibm855Model); - mProbers[6] = new nsSingleByteCharSetProber(&Latin7Model); - mProbers[7] = new nsSingleByteCharSetProber(&Win1253Model); - mProbers[8] = new nsSingleByteCharSetProber(&Latin5BulgarianModel); - mProbers[9] = new nsSingleByteCharSetProber(&Win1251BulgarianModel); - mProbers[10] = new nsSingleByteCharSetProber(&TIS620ThaiModel); - - nsHebrewProber *hebprober = new nsHebrewProber(); - // Notice: Any change in these indexes - 10,11,12 must be reflected - // in the code below as well. - mProbers[11] = hebprober; - mProbers[12] = new nsSingleByteCharSetProber(&Win1255Model, PR_FALSE, hebprober); // Logical Hebrew - mProbers[13] = new nsSingleByteCharSetProber(&Win1255Model, PR_TRUE, hebprober); // Visual Hebrew - // Tell the Hebrew prober about the logical and visual probers - if (mProbers[11] && mProbers[12] && mProbers[13]) // all are not null - { - hebprober->SetModelProbers(mProbers[12], mProbers[13]); - } - else // One or more is null. avoid any Hebrew probing, null them all - { - for (PRUint32 i = 11; i <= 13; ++i) - { - delete mProbers[i]; - mProbers[i] = 0; - } - } - - // disable latin2 before latin1 is available, otherwise all latin1 - // will be detected as latin2 because of their similarity. - //mProbers[10] = new nsSingleByteCharSetProber(&Latin2HungarianModel); - //mProbers[11] = new nsSingleByteCharSetProber(&Win1250HungarianModel); - - Reset(); -} - -nsSBCSGroupProber::~nsSBCSGroupProber() -{ - for (PRUint32 i = 0; i < NUM_OF_SBCS_PROBERS; i++) - { - delete mProbers[i]; - } -} - - -const char* nsSBCSGroupProber::GetCharSetName() -{ - //if we have no answer yet - if (mBestGuess == -1) - { - GetConfidence(); - //no charset seems positive - if (mBestGuess == -1) - //we will use default. - mBestGuess = 0; - } - return mProbers[mBestGuess]->GetCharSetName(); -} - -void nsSBCSGroupProber::Reset(void) -{ - mActiveNum = 0; - for (PRUint32 i = 0; i < NUM_OF_SBCS_PROBERS; i++) - { - if (mProbers[i]) // not null - { - mProbers[i]->Reset(); - mIsActive[i] = PR_TRUE; - ++mActiveNum; - } - else - mIsActive[i] = PR_FALSE; - } - mBestGuess = -1; - mState = eDetecting; -} - - -nsProbingState nsSBCSGroupProber::HandleData(const char* aBuf, PRUint32 aLen) -{ - nsProbingState st; - PRUint32 i; - char *newBuf1 = 0; - PRUint32 newLen1 = 0; - - //apply filter to original buffer, and we got new buffer back - //depend on what script it is, we will feed them the new buffer - //we got after applying proper filter - //this is done without any consideration to KeepEnglishLetters - //of each prober since as of now, there are no probers here which - //recognize languages with English characters. - if (!FilterWithoutEnglishLetters(aBuf, aLen, &newBuf1, newLen1)) - goto done; - - if (newLen1 == 0) - goto done; // Nothing to see here, move on. - - for (i = 0; i < NUM_OF_SBCS_PROBERS; i++) - { - if (!mIsActive[i]) - continue; - st = mProbers[i]->HandleData(newBuf1, newLen1); - if (st == eFoundIt) - { - mBestGuess = i; - mState = eFoundIt; - break; - } - else if (st == eNotMe) - { - mIsActive[i] = PR_FALSE; - mActiveNum--; - if (mActiveNum <= 0) - { - mState = eNotMe; - break; - } - } - } - -done: - PR_FREEIF(newBuf1); - - return mState; -} - -float nsSBCSGroupProber::GetConfidence(void) -{ - PRUint32 i; - float bestConf = 0.0, cf; - - switch (mState) - { - case eFoundIt: - return (float)0.99; //sure yes - case eNotMe: - return (float)0.01; //sure no - default: - for (i = 0; i < NUM_OF_SBCS_PROBERS; i++) - { - if (!mIsActive[i]) - continue; - cf = mProbers[i]->GetConfidence(); - if (bestConf < cf) - { - bestConf = cf; - mBestGuess = i; - } - } - } - return bestConf; -} - -#ifdef DEBUG_chardet -void nsSBCSGroupProber::DumpStatus() -{ - PRUint32 i; - float cf; - - cf = GetConfidence(); - printf(" SBCS Group Prober --------begin status \r\n"); - for (i = 0; i < NUM_OF_SBCS_PROBERS; i++) - { - if (!mIsActive[i]) - printf(" inactive: [%s] (i.e. confidence is too low).\r\n", mProbers[i]->GetCharSetName()); - else - mProbers[i]->DumpStatus(); - } - printf(" SBCS Group found best match [%s] confidence %f.\r\n", - mProbers[mBestGuess]->GetCharSetName(), cf); -} -#endif diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsSBCSGroupProber.h b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsSBCSGroupProber.h deleted file mode 100644 index cfbf7e1..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsSBCSGroupProber.h +++ /dev/null @@ -1,70 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is Mozilla Universal charset detector code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 2001 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * Shy Shalom <shooshX@gmail.com> - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#ifndef nsSBCSGroupProber_h__ -#define nsSBCSGroupProber_h__ - - -#define NUM_OF_SBCS_PROBERS 14 - -class nsCharSetProber; -class nsSBCSGroupProber: public nsCharSetProber { -public: - nsSBCSGroupProber(); - virtual ~nsSBCSGroupProber(); - nsProbingState HandleData(const char* aBuf, PRUint32 aLen); - const char* GetCharSetName(); - nsProbingState GetState(void) {return mState;} - void Reset(void); - float GetConfidence(void); - void SetOpion() {} - -#ifdef DEBUG_chardet - void DumpStatus(); -#endif - -protected: - nsProbingState mState; - nsCharSetProber* mProbers[NUM_OF_SBCS_PROBERS]; - PRBool mIsActive[NUM_OF_SBCS_PROBERS]; - PRInt32 mBestGuess; - PRUint32 mActiveNum; -}; - -#endif /* nsSBCSGroupProber_h__ */ - diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsSBCharSetProber.cpp b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsSBCharSetProber.cpp deleted file mode 100644 index 2a59fd7..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsSBCharSetProber.cpp +++ /dev/null @@ -1,126 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is Mozilla Universal charset detector code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 2001 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * Shy Shalom <shooshX@gmail.com> - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ -#include <stdio.h> -#include "nsSBCharSetProber.h" - -nsProbingState nsSingleByteCharSetProber::HandleData(const char* aBuf, PRUint32 aLen) -{ - unsigned char order; - - for (PRUint32 i = 0; i < aLen; i++) - { - order = mModel->charToOrderMap[(unsigned char)aBuf[i]]; - - if (order < SYMBOL_CAT_ORDER) - mTotalChar++; - if (order < SAMPLE_SIZE) - { - mFreqChar++; - - if (mLastOrder < SAMPLE_SIZE) - { - mTotalSeqs++; - if (!mReversed) - ++(mSeqCounters[mModel->precedenceMatrix[mLastOrder*SAMPLE_SIZE+order]]); - else // reverse the order of the letters in the lookup - ++(mSeqCounters[mModel->precedenceMatrix[order*SAMPLE_SIZE+mLastOrder]]); - } - } - mLastOrder = order; - } - - if (mState == eDetecting) - if (mTotalSeqs > SB_ENOUGH_REL_THRESHOLD) - { - float cf = GetConfidence(); - if (cf > POSITIVE_SHORTCUT_THRESHOLD) - mState = eFoundIt; - else if (cf < NEGATIVE_SHORTCUT_THRESHOLD) - mState = eNotMe; - } - - return mState; -} - -void nsSingleByteCharSetProber::Reset(void) -{ - mState = eDetecting; - mLastOrder = 255; - for (PRUint32 i = 0; i < NUMBER_OF_SEQ_CAT; i++) - mSeqCounters[i] = 0; - mTotalSeqs = 0; - mTotalChar = 0; - mFreqChar = 0; -} - -//#define NEGATIVE_APPROACH 1 - -float nsSingleByteCharSetProber::GetConfidence(void) -{ -#ifdef NEGATIVE_APPROACH - if (mTotalSeqs > 0) - if (mTotalSeqs > mSeqCounters[NEGATIVE_CAT]*10 ) - return ((float)(mTotalSeqs - mSeqCounters[NEGATIVE_CAT]*10))/mTotalSeqs * mFreqChar / mTotalChar; - return (float)0.01; -#else //POSITIVE_APPROACH - float r; - - if (mTotalSeqs > 0) { - r = ((float)1.0) * mSeqCounters[POSITIVE_CAT] / mTotalSeqs / mModel->mTypicalPositiveRatio; - r = r*mFreqChar/mTotalChar; - if (r >= (float)1.00) - r = (float)0.99; - return r; - } - return (float)0.01; -#endif -} - -const char* nsSingleByteCharSetProber::GetCharSetName() -{ - if (!mNameProber) - return mModel->charsetName; - return mNameProber->GetCharSetName(); -} - -#ifdef DEBUG_chardet -void nsSingleByteCharSetProber::DumpStatus() -{ - printf(" SBCS: %1.3f [%s]\r\n", GetConfidence(), GetCharSetName()); -} -#endif diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsSBCharSetProber.h b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsSBCharSetProber.h deleted file mode 100644 index d7180dc..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsSBCharSetProber.h +++ /dev/null @@ -1,125 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is Mozilla Universal charset detector code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 2001 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * Shy Shalom <shooshX@gmail.com> - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ -#ifndef nsSingleByteCharSetProber_h__ -#define nsSingleByteCharSetProber_h__ - -#include "nsCharSetProber.h" - -#define SAMPLE_SIZE 64 -#define SB_ENOUGH_REL_THRESHOLD 1024 -#define POSITIVE_SHORTCUT_THRESHOLD (float)0.95 -#define NEGATIVE_SHORTCUT_THRESHOLD (float)0.05 -#define SYMBOL_CAT_ORDER 250 -#define NUMBER_OF_SEQ_CAT 4 -#define POSITIVE_CAT (NUMBER_OF_SEQ_CAT-1) -#define NEGATIVE_CAT 0 - -typedef struct -{ - const unsigned char* const charToOrderMap; // [256] table use to find a char's order - const PRUint8* const precedenceMatrix; // [SAMPLE_SIZE][SAMPLE_SIZE]; table to find a 2-char sequence's frequency - float mTypicalPositiveRatio; // = freqSeqs / totalSeqs - PRBool keepEnglishLetter; // says if this script contains English characters (not implemented) - const char* const charsetName; -} SequenceModel; - - -class nsSingleByteCharSetProber : public nsCharSetProber{ -public: - nsSingleByteCharSetProber(const SequenceModel *model) - :mModel(model), mReversed(PR_FALSE), mNameProber(0) { Reset(); } - nsSingleByteCharSetProber(const SequenceModel *model, PRBool reversed, nsCharSetProber* nameProber) - :mModel(model), mReversed(reversed), mNameProber(nameProber) { Reset(); } - - virtual const char* GetCharSetName(); - virtual nsProbingState HandleData(const char* aBuf, PRUint32 aLen); - virtual nsProbingState GetState(void) {return mState;} - virtual void Reset(void); - virtual float GetConfidence(void); - virtual void SetOpion() {} - - // This feature is not implemented yet. any current language model - // contain this parameter as PR_FALSE. No one is looking at this - // parameter or calling this method. - // Moreover, the nsSBCSGroupProber which calls the HandleData of this - // prober has a hard-coded call to FilterWithoutEnglishLetters which gets rid - // of the English letters. - PRBool KeepEnglishLetters() {return mModel->keepEnglishLetter;} // (not implemented) - -#ifdef DEBUG_chardet - virtual void DumpStatus(); -#endif - -protected: - nsProbingState mState; - const SequenceModel* const mModel; - const PRBool mReversed; // PR_TRUE if we need to reverse every pair in the model lookup - - //char order of last character - unsigned char mLastOrder; - - PRUint32 mTotalSeqs; - PRUint32 mSeqCounters[NUMBER_OF_SEQ_CAT]; - - PRUint32 mTotalChar; - //characters that fall in our sampling range - PRUint32 mFreqChar; - - // Optional auxiliary prober for name decision. created and destroyed by the GroupProber - nsCharSetProber* mNameProber; - -}; - - -extern const SequenceModel Koi8rModel; -extern const SequenceModel Win1251Model; -extern const SequenceModel Latin5Model; -extern const SequenceModel MacCyrillicModel; -extern const SequenceModel Ibm866Model; -extern const SequenceModel Ibm855Model; -extern const SequenceModel Latin7Model; -extern const SequenceModel Win1253Model; -extern const SequenceModel Latin5BulgarianModel; -extern const SequenceModel Win1251BulgarianModel; -extern const SequenceModel Latin2HungarianModel; -extern const SequenceModel Win1250HungarianModel; -extern const SequenceModel Win1255Model; -extern const SequenceModel TIS620ThaiModel; - -#endif /* nsSingleByteCharSetProber_h__ */ - diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsSJISProber.cpp b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsSJISProber.cpp deleted file mode 100644 index c7842f6..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsSJISProber.cpp +++ /dev/null @@ -1,98 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -// for S-JIS encoding, obeserve characteristic: -// 1, kana character (or hankaku?) often have hight frequency of appereance -// 2, kana character often exist in group -// 3, certain combination of kana is never used in japanese language - -#include "nsSJISProber.h" - -void nsSJISProber::Reset(void) -{ - mCodingSM->Reset(); - mState = eDetecting; - mContextAnalyser.Reset(mIsPreferredLanguage); - mDistributionAnalyser.Reset(mIsPreferredLanguage); -} - -nsProbingState nsSJISProber::HandleData(const char* aBuf, PRUint32 aLen) -{ - nsSMState codingState; - - for (PRUint32 i = 0; i < aLen; i++) - { - codingState = mCodingSM->NextState(aBuf[i]); - if (codingState == eItsMe) - { - mState = eFoundIt; - break; - } - if (codingState == eStart) - { - PRUint32 charLen = mCodingSM->GetCurrentCharLen(); - if (i == 0) - { - mLastChar[1] = aBuf[0]; - mContextAnalyser.HandleOneChar(mLastChar+2-charLen, charLen); - mDistributionAnalyser.HandleOneChar(mLastChar, charLen); - } - else - { - mContextAnalyser.HandleOneChar(aBuf+i+1-charLen, charLen); - mDistributionAnalyser.HandleOneChar(aBuf+i-1, charLen); - } - } - } - - mLastChar[0] = aBuf[aLen-1]; - - if (mState == eDetecting) - if (mContextAnalyser.GotEnoughData() && GetConfidence() > SHORTCUT_THRESHOLD) - mState = eFoundIt; - - return mState; -} - -float nsSJISProber::GetConfidence(void) -{ - float contxtCf = mContextAnalyser.GetConfidence(); - float distribCf = mDistributionAnalyser.GetConfidence(); - - return (contxtCf > distribCf ? contxtCf : distribCf); -} - diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsSJISProber.h b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsSJISProber.h deleted file mode 100644 index 1efb6e3..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsSJISProber.h +++ /dev/null @@ -1,80 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -// for S-JIS encoding, obeserve characteristic: -// 1, kana character (or hankaku?) often have hight frequency of appereance -// 2, kana character often exist in group -// 3, certain combination of kana is never used in japanese language - -#ifndef nsSJISProber_h__ -#define nsSJISProber_h__ - -#include "nsCharSetProber.h" -#include "nsCodingStateMachine.h" -#include "JpCntx.h" -#include "CharDistribution.h" - - -class nsSJISProber: public nsCharSetProber { -public: - nsSJISProber(PRBool aIsPreferredLanguage) - :mIsPreferredLanguage(aIsPreferredLanguage) - {mCodingSM = new nsCodingStateMachine(&SJISSMModel); - Reset();} - virtual ~nsSJISProber(void){delete mCodingSM;} - nsProbingState HandleData(const char* aBuf, PRUint32 aLen); - const char* GetCharSetName() {return "Shift_JIS";} - nsProbingState GetState(void) {return mState;} - void Reset(void); - float GetConfidence(void); - void SetOpion() {} - -protected: - nsCodingStateMachine* mCodingSM; - nsProbingState mState; - - SJISContextAnalysis mContextAnalyser; - SJISDistributionAnalysis mDistributionAnalyser; - - char mLastChar[2]; - PRBool mIsPreferredLanguage; - -}; - - -#endif /* nsSJISProber_h__ */ - diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsUTF8Prober.cpp b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsUTF8Prober.cpp deleted file mode 100644 index ab8d9f7..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsUTF8Prober.cpp +++ /dev/null @@ -1,87 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#include "nsUTF8Prober.h" - -void nsUTF8Prober::Reset(void) -{ - mCodingSM->Reset(); - mNumOfMBChar = 0; - mState = eDetecting; -} - -nsProbingState nsUTF8Prober::HandleData(const char* aBuf, PRUint32 aLen) -{ - nsSMState codingState; - - for (PRUint32 i = 0; i < aLen; i++) - { - codingState = mCodingSM->NextState(aBuf[i]); - if (codingState == eItsMe) - { - mState = eFoundIt; - break; - } - if (codingState == eStart) - { - if (mCodingSM->GetCurrentCharLen() >= 2) - mNumOfMBChar++; - } - } - - if (mState == eDetecting) - if (GetConfidence() > SHORTCUT_THRESHOLD) - mState = eFoundIt; - return mState; -} - -#define ONE_CHAR_PROB (float)0.50 - -float nsUTF8Prober::GetConfidence(void) -{ - float unlike = (float)0.99; - - if (mNumOfMBChar < 6) - { - for (PRUint32 i = 0; i < mNumOfMBChar; i++) - unlike *= ONE_CHAR_PROB; - return (float)1.0 - unlike; - } - else - return (float)0.99; -} - diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsUTF8Prober.h b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsUTF8Prober.h deleted file mode 100644 index 21c91c4..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsUTF8Prober.h +++ /dev/null @@ -1,64 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#ifndef nsUTF8Prober_h__ -#define nsUTF8Prober_h__ - -#include "nsCharSetProber.h" -#include "nsCodingStateMachine.h" - -class nsUTF8Prober: public nsCharSetProber { -public: - nsUTF8Prober(){mNumOfMBChar = 0; - mCodingSM = new nsCodingStateMachine(&UTF8SMModel); - Reset(); } - virtual ~nsUTF8Prober(){delete mCodingSM;} - nsProbingState HandleData(const char* aBuf, PRUint32 aLen); - const char* GetCharSetName() {return "UTF-8";} - nsProbingState GetState(void) {return mState;} - void Reset(void); - float GetConfidence(void); - void SetOpion() {} - -protected: - nsCodingStateMachine* mCodingSM; - nsProbingState mState; - PRUint32 mNumOfMBChar; -}; - -#endif /* nsUTF8Prober_h__ */ - diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsUniversalDetector.cpp b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsUniversalDetector.cpp deleted file mode 100644 index 7af8f95..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsUniversalDetector.cpp +++ /dev/null @@ -1,280 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is Mozilla Universal charset detector code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 2001 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * Shy Shalom <shooshX@gmail.com> - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#include "nscore.h" - -#include "nsUniversalDetector.h" - -#include "nsMBCSGroupProber.h" -#include "nsSBCSGroupProber.h" -#include "nsEscCharsetProber.h" -#include "nsLatin1Prober.h" - -nsUniversalDetector::nsUniversalDetector(PRUint32 aLanguageFilter) -{ - mDone = PR_FALSE; - mBestGuess = -1; //illegal value as signal - mInTag = PR_FALSE; - mEscCharSetProber = nsnull; - - mStart = PR_TRUE; - mDetectedCharset = nsnull; - mGotData = PR_FALSE; - mInputState = ePureAscii; - mLastChar = '\0'; - mLanguageFilter = aLanguageFilter; - - PRUint32 i; - for (i = 0; i < NUM_OF_CHARSET_PROBERS; i++) - mCharSetProbers[i] = nsnull; -} - -nsUniversalDetector::~nsUniversalDetector() -{ - for (PRInt32 i = 0; i < NUM_OF_CHARSET_PROBERS; i++) - delete mCharSetProbers[i]; - - delete mEscCharSetProber; -} - -void -nsUniversalDetector::Reset() -{ - mDone = PR_FALSE; - mBestGuess = -1; //illegal value as signal - mInTag = PR_FALSE; - - mStart = PR_TRUE; - mDetectedCharset = nsnull; - mGotData = PR_FALSE; - mInputState = ePureAscii; - mLastChar = '\0'; - - if (mEscCharSetProber) - mEscCharSetProber->Reset(); - - PRUint32 i; - for (i = 0; i < NUM_OF_CHARSET_PROBERS; i++) - if (mCharSetProbers[i]) - mCharSetProbers[i]->Reset(); -} - -//--------------------------------------------------------------------- -#define SHORTCUT_THRESHOLD (float)0.95 -#define MINIMUM_THRESHOLD (float)0.20 - -nsresult nsUniversalDetector::HandleData(const char* aBuf, PRUint32 aLen) -{ - if(mDone) - return NS_OK; - - if (aLen > 0) - mGotData = PR_TRUE; - - //If the data starts with BOM, we know it is UTF - if (mStart) - { - mStart = PR_FALSE; - if (aLen > 2) - switch (aBuf[0]) - { - case '\xEF': - if (('\xBB' == aBuf[1]) && ('\xBF' == aBuf[2])) - // EF BB BF UTF-8 encoded BOM - mDetectedCharset = "UTF-8"; - break; - case '\xFE': - if ('\xFF' == aBuf[1]) - // FE FF UTF-16, big endian BOM - mDetectedCharset = "UTF-16"; - break; - case '\xFF': - if ('\xFE' == aBuf[1]) - // FF FE UTF-16, little endian BOM - mDetectedCharset = "UTF-16"; - break; - } // switch - - if (mDetectedCharset) - { - mDone = PR_TRUE; - return NS_OK; - } - } - - PRUint32 i; - for (i = 0; i < aLen; i++) - { - //other than 0xa0, if every othe character is ascii, the page is ascii - if (aBuf[i] & '\x80' && aBuf[i] != '\xA0') //Since many Ascii only page contains NBSP - { - //we got a non-ascii byte (high-byte) - if (mInputState != eHighbyte) - { - //adjust state - mInputState = eHighbyte; - - //kill mEscCharSetProber if it is active - if (mEscCharSetProber) { - delete mEscCharSetProber; - mEscCharSetProber = nsnull; - } - - //start multibyte and singlebyte charset prober - if (nsnull == mCharSetProbers[0]) - { - mCharSetProbers[0] = new nsMBCSGroupProber(mLanguageFilter); - if (nsnull == mCharSetProbers[0]) - return NS_ERROR_OUT_OF_MEMORY; - } - if (nsnull == mCharSetProbers[1] && - (mLanguageFilter & NS_FILTER_NON_CJK)) - { - mCharSetProbers[1] = new nsSBCSGroupProber; - if (nsnull == mCharSetProbers[1]) - return NS_ERROR_OUT_OF_MEMORY; - } - if (nsnull == mCharSetProbers[2]) - { - mCharSetProbers[2] = new nsLatin1Prober; - if (nsnull == mCharSetProbers[2]) - return NS_ERROR_OUT_OF_MEMORY; - } - } - } - else - { - //ok, just pure ascii so far - if ( ePureAscii == mInputState && - (aBuf[i] == '\033' || (aBuf[i] == '{' && mLastChar == '~')) ) - { - //found escape character or HZ "~{" - mInputState = eEscAscii; - } - mLastChar = aBuf[i]; - } - } - - nsProbingState st; - switch (mInputState) - { - case eEscAscii: - if (nsnull == mEscCharSetProber) { - mEscCharSetProber = new nsEscCharSetProber(mLanguageFilter); - if (nsnull == mEscCharSetProber) - return NS_ERROR_OUT_OF_MEMORY; - } - st = mEscCharSetProber->HandleData(aBuf, aLen); - if (st == eFoundIt) - { - mDone = PR_TRUE; - mDetectedCharset = mEscCharSetProber->GetCharSetName(); - } - break; - case eHighbyte: - for (i = 0; i < NUM_OF_CHARSET_PROBERS; i++) - { - if (mCharSetProbers[i]) - { - st = mCharSetProbers[i]->HandleData(aBuf, aLen); - if (st == eFoundIt) - { - mDone = PR_TRUE; - mDetectedCharset = mCharSetProbers[i]->GetCharSetName(); - return NS_OK; - } - } - } - break; - - default: //pure ascii - ;//do nothing here - } - return NS_OK; -} - - -//--------------------------------------------------------------------- -void nsUniversalDetector::DataEnd() -{ - if (!mGotData) - { - // we haven't got any data yet, return immediately - // caller program sometimes call DataEnd before anything has been sent to detector - return; - } - - if (mDetectedCharset) - { - mDone = PR_TRUE; - Report(mDetectedCharset); - return; - } - - switch (mInputState) - { - case eHighbyte: - { - float proberConfidence; - float maxProberConfidence = (float)0.0; - PRInt32 maxProber = 0; - - for (PRInt32 i = 0; i < NUM_OF_CHARSET_PROBERS; i++) - { - if (mCharSetProbers[i]) - { - proberConfidence = mCharSetProbers[i]->GetConfidence(); - if (proberConfidence > maxProberConfidence) - { - maxProberConfidence = proberConfidence; - maxProber = i; - } - } - } - //do not report anything because we are not confident of it, that's in fact a negative answer - if (maxProberConfidence > MINIMUM_THRESHOLD) - Report(mCharSetProbers[maxProber]->GetCharSetName()); - } - break; - case eEscAscii: - break; - default: - ; - } - return; -} diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsUniversalDetector.h b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsUniversalDetector.h deleted file mode 100644 index 525f722..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nsUniversalDetector.h +++ /dev/null @@ -1,89 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is Mozilla Communicator client code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#ifndef nsUniversalDetector_h__ -#define nsUniversalDetector_h__ - -class nsCharSetProber; - -#define NUM_OF_CHARSET_PROBERS 3 - -typedef enum { - ePureAscii = 0, - eEscAscii = 1, - eHighbyte = 2 -} nsInputState; - -#define NS_FILTER_CHINESE_SIMPLIFIED 0x01 -#define NS_FILTER_CHINESE_TRADITIONAL 0x02 -#define NS_FILTER_JAPANESE 0x04 -#define NS_FILTER_KOREAN 0x08 -#define NS_FILTER_NON_CJK 0x10 -#define NS_FILTER_ALL 0x1F -#define NS_FILTER_CHINESE (NS_FILTER_CHINESE_SIMPLIFIED | \ - NS_FILTER_CHINESE_TRADITIONAL) -#define NS_FILTER_CJK (NS_FILTER_CHINESE_SIMPLIFIED | \ - NS_FILTER_CHINESE_TRADITIONAL | \ - NS_FILTER_JAPANESE | \ - NS_FILTER_KOREAN) - -class nsUniversalDetector { -public: - nsUniversalDetector(PRUint32 aLanguageFilter); - virtual ~nsUniversalDetector(); - virtual nsresult HandleData(const char* aBuf, PRUint32 aLen); - virtual void DataEnd(void); - -protected: - virtual void Report(const char* aCharset) = 0; - virtual void Reset(); - nsInputState mInputState; - PRBool mDone; - PRBool mInTag; - PRBool mStart; - PRBool mGotData; - char mLastChar; - const char * mDetectedCharset; - PRInt32 mBestGuess; - PRUint32 mLanguageFilter; - - nsCharSetProber *mCharSetProbers[NUM_OF_CHARSET_PROBERS]; - nsCharSetProber *mEscCharSetProber; -}; - -#endif - diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nscore.h b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nscore.h deleted file mode 100644 index e0b5a72..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/nscore.h +++ /dev/null @@ -1,59 +0,0 @@ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is Mozilla Universal charset detector code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 2001 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * Kohei TAKETA <k-tak@void.in> - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ -#ifndef nsDummyCore_h__ -#define nsDummyCore_h__ - -typedef bool PRBool; -typedef int PRInt32; -typedef unsigned int PRUint32; -typedef short PRInt16; -typedef unsigned short PRUint16; -typedef signed char PRInt8; -typedef unsigned char PRUint8; - -#define PR_FALSE false -#define PR_TRUE true -#define nsnull 0 - - -enum nsresult -{ - NS_OK, - NS_ERROR_OUT_OF_MEMORY -}; - -#endif diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/prmem.h b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/prmem.h deleted file mode 100644 index 1485397..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/prmem.h +++ /dev/null @@ -1,49 +0,0 @@ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is Mozilla Universal charset detector code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 2001 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * Kohei TAKETA <k-tak@void.in> - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ -#ifndef nsDummyPrmem_h__ -#define nsDummyPrmem_h__ - -#include <stdlib.h> - -inline void* PR_Malloc(size_t len) -{ - return malloc(len); -} - -#define PR_FREEIF(p) if (p) free(p) - -#endif diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/symbols.cmake b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/symbols.cmake deleted file mode 100644 index 2aa4601..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/symbols.cmake +++ /dev/null @@ -1,38 +0,0 @@ -set( - UCHARDET_SYMBOLS - uchardet_new - uchardet_delete - uchardet_handle_data - uchardet_data_end - uchardet_reset - uchardet_get_charset -) - -set (LINK_FLAGS "") - -if (APPLE) - - # Create a symbols_list file for the darwin linker - string(REPLACE ";" "\n_" _symbols "${UCHARDET_SYMBOLS}") - set(_symbols_list "${CMAKE_CURRENT_BINARY_DIR}/symbols.list") - file(WRITE ${_symbols_list} "_${_symbols}\n") - set(LINK_FLAGS - "${LINK_FLAGS} -Wl,-exported_symbols_list,'${_symbols_list}'") - -elseif (CMAKE_C_COMPILER_ID STREQUAL GNU) - # Create a version script for GNU ld. - set(_symbols "{ global: ${UCHARDET_SYMBOLS}; local: *; };") - set(_version_script "${CMAKE_CURRENT_BINARY_DIR}/version.script") - file(WRITE ${_version_script} "${_symbols}\n") - - set(LINK_FLAGS "${LINK_FLAGS} -Wl,--version-script,'${_version_script}'") - -endif (APPLE) - -set_target_properties( - ${LIBUCHARDET_TARGET} - ${LIBUCHARDET_STATIC_TARGET} - PROPERTIES - LINK_FLAGS - "${LINK_FLAGS}" -) diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/tools/CMakeLists.txt b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/tools/CMakeLists.txt deleted file mode 100644 index 7ad3ff5..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/tools/CMakeLists.txt +++ /dev/null @@ -1,23 +0,0 @@ -set( - UCHARDET_SOURCES - uchardet.cpp -) - -add_executable( - uchardet - ${UCHARDET_SOURCES} -) - -target_link_libraries( - uchardet - ${UCHARDET_TARGET} -) - -install( - TARGETS - uchardet - RUNTIME - DESTINATION - ${DIR_BIN} -) - diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/tools/uchardet.cpp b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/tools/uchardet.cpp deleted file mode 100644 index b2b6bea..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/tools/uchardet.cpp +++ /dev/null @@ -1,141 +0,0 @@ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is Mozilla Universal charset detector code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 2001 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * BYVoid <byvoid.kcp@gmail.com> - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ -#include "../uchardet.h" -#include <cstdio> -#include <cstring> -#include <cstdlib> -#include <getopt.h> -#include <iostream> - -#ifndef VERSION -#define VERSION "Unknown" -#endif -#define BUFFER_SIZE 65536 - -char buffer[BUFFER_SIZE]; - -void detect(FILE * fp) -{ - uchardet_t handle = uchardet_new(); - - while (!feof(fp)) - { - size_t len = fread(buffer, 1, BUFFER_SIZE, fp); - int retval = uchardet_handle_data(handle, buffer, len); - if (retval != 0) - { - fprintf(stderr, "Handle data error.\n"); - exit(0); - } - } - uchardet_data_end(handle); - - const char * charset = uchardet_get_charset(handle); - if (*charset) - printf("%s\n", charset); - else - printf("ascii/unknown\n"); - - uchardet_delete(handle); -} - -void show_version() -{ - printf("\n"); - printf("uchardet Command Line Tool\n"); - printf("Version %s\n", VERSION); - printf("\n"); - printf("Author: %s\n", "BYVoid"); - printf("Bug Report: %s\n", "http://code.google.com/p/uchardet/issues/entry"); - printf("\n"); -} - -void show_usage() -{ - show_version(); - printf("Usage:\n"); - printf(" uchardet [Options] [File]\n"); - printf("\n"); - printf("Options:\n"); - printf(" -v, --version Print version and build information.\n"); - printf(" -h, --help Print this help.\n"); - printf("\n"); -} - -int main(int argc, char ** argv) -{ - static struct option longopts[] = - { - { "version", no_argument, NULL, 'v' }, - { "help", no_argument, NULL, 'h' }, - { 0, 0, 0, 0 }, - }; - - static int oc; - while((oc = getopt_long(argc, argv, "vh", longopts, NULL)) != -1) - { - switch (oc) - { - case 'v': - show_version(); - return 0; - case 'h': - show_usage(); - return 0; - case '?': - printf("Please use %s --help.\n", argv[0]); - return 1; - } - } - - FILE * f = stdin; - if (argc == 2) - { - f = fopen(argv[1], "r"); - if (f == NULL) - { - fprintf(stderr, "Cannot open file.\n"); - return 1; - } - } - - detect(f); - - fclose(f); - - return 0; -} diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/uchardet.cpp b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/uchardet.cpp deleted file mode 100644 index 74ab63c..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/uchardet.cpp +++ /dev/null @@ -1,105 +0,0 @@ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is Mozilla Universal charset detector code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 2001 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * BYVoid <byvoid.kcp@gmail.com> - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ -#include "uchardet.h" -#include "nscore.h" -#include "nsUniversalDetector.h" -#include <string> - -using std::string; - -class HandleUniversalDetector : public nsUniversalDetector -{ -protected: - string m_charset; - -public: - HandleUniversalDetector() - : nsUniversalDetector(NS_FILTER_ALL) - { - m_charset = ""; - } - - virtual ~HandleUniversalDetector() - {} - - virtual void Report(const char* charset) - { - m_charset = charset; - } - - virtual void Reset() - { - nsUniversalDetector::Reset(); - m_charset = ""; - } - - const char* GetCharset() const - { - return m_charset.c_str(); - } -}; - -uchardet_t uchardet_new() -{ - return reinterpret_cast<uchardet_t> (new HandleUniversalDetector()); -} - -void uchardet_delete(uchardet_t ud) -{ - delete reinterpret_cast<HandleUniversalDetector*>(ud); -} - -int uchardet_handle_data(uchardet_t ud, const char * data, size_t len) -{ - nsresult ret = reinterpret_cast<HandleUniversalDetector*>(ud)->HandleData(data, (PRUint32)len); - return (ret != NS_OK); -} - -void uchardet_data_end(uchardet_t ud) -{ - reinterpret_cast<HandleUniversalDetector*>(ud)->DataEnd(); -} - -void uchardet_reset(uchardet_t ud) -{ - reinterpret_cast<HandleUniversalDetector*>(ud)->Reset(); -} - -const char* uchardet_get_charset(uchardet_t ud) -{ - return reinterpret_cast<HandleUniversalDetector*>(ud)->GetCharset(); -} diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/uchardet.h b/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/uchardet.h deleted file mode 100644 index 533666a..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/src/uchardet.h +++ /dev/null @@ -1,92 +0,0 @@ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is Mozilla Universal charset detector code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 2001 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * BYVoid <byvoid.kcp@gmail.com> - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ -#ifndef ___UCHARDET_H___ -#define ___UCHARDET_H___ - -#ifdef __cplusplus -extern "C" { -#endif - -#include <stddef.h> - -typedef void * uchardet_t; - -/** - * Create an encoding detector. - * @return a handle of a instance of uchardet - */ -uchardet_t uchardet_new(); - -/** - * Delete an encoding detector. - * @param ud [in] handle of a instance of uchardet - */ -void uchardet_delete(uchardet_t ud); - -/** - * Feed data to an encoding detector. - * @param ud [in] handle of a instance of uchardet - * @param data [in] data - * @param len [in] number of byte of data - * @return non-zero number on failure. - */ -int uchardet_handle_data(uchardet_t ud, const char * data, size_t len); - -/** - * Notify an end of data to an encoding detctor. - * @param ud [in] handle of a instance of uchardet - */ -void uchardet_data_end(uchardet_t ud); - -/** - * Reset an encoding detector. - * @param ud [in] handle of a instance of uchardet - */ -void uchardet_reset(uchardet_t ud); - -/** - * Get the name of encoding that was detected. - * @param ud [in] handle of a instance of uchardet - * @return name of charset on success and "" on failure or pure ascii. - */ -const char * uchardet_get_charset(uchardet_t ud); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/test/big5.txt b/src/libcommuni/src/3rdparty/uchardet-0.0.1/test/big5.txt deleted file mode 100644 index 59db954..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/test/big5.txt +++ /dev/null @@ -1 +0,0 @@ -ÁcÅ餤¤åÁcÅ餤¤åÁcÅ餤¤åÁcÅ餤¤åÁcÅ餤¤åÁcÅ餤¤åÁcÅ餤¤åÁcÅ餤¤åÁcÅ餤¤åÁcÅ餤¤åÁcÅ餤¤åÁcÅ餤¤åÁcÅ餤¤åÁcÅ餤¤åÁcÅ餤¤åÁcÅ餤¤åÁcÅ餤¤å
\ No newline at end of file diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/test/gb18030.txt b/src/libcommuni/src/3rdparty/uchardet-0.0.1/test/gb18030.txt deleted file mode 100644 index 962df87..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/test/gb18030.txt +++ /dev/null @@ -1 +0,0 @@ -¼òÌåÖÐÎļòÌåÖÐÎļòÌåÖÐÎļòÌåÖÐÎļòÌåÖÐÎļòÌåÖÐÎļòÌåÖÐÎļòÌåÖÐÎļòÌåÖÐÎļòÌåÖÐÎļòÌåÖÐÎÄ
\ No newline at end of file diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/test/shift_jis.txt b/src/libcommuni/src/3rdparty/uchardet-0.0.1/test/shift_jis.txt deleted file mode 100644 index a580281..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/test/shift_jis.txt +++ /dev/null @@ -1 +0,0 @@ -“ú–{Œê“ú–{Œê“ú–{Œê“ú–{Œê“ú–{Œê“ú–{Œê“ú–{Œê“ú–{Œê“ú–{Œê“ú–{Œê“ú–{Œê“ú–{Œê“ú–{Œê“ú–{Œê“ú–{Œê“ú–{Œê“ú–{Œê“ú–{Œê“ú–{Œê diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/test/utf8.txt b/src/libcommuni/src/3rdparty/uchardet-0.0.1/test/utf8.txt deleted file mode 100644 index cd66b08..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/test/utf8.txt +++ /dev/null @@ -1 +0,0 @@ -æ±‰å—æ¼¢å—統一編碼è¬åœ‹ç¢¼ diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/uchardet.pc.in b/src/libcommuni/src/3rdparty/uchardet-0.0.1/uchardet.pc.in deleted file mode 100644 index 7e2e279..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/uchardet.pc.in +++ /dev/null @@ -1,11 +0,0 @@ -prefix=@DIR_PREFIX@ -exec_prefix=${prefix} -libdir=@DIR_LIBRARY@ -includedir=@DIR_INCLUDE@ - -Name: uchardet -Description: universalchardet -Version: @UCHARDET_VERSION@ -Requires: -Libs: -L${libdir} -luchardet -Cflags: -I${includedir}/uchardet diff --git a/src/libcommuni/src/3rdparty/uchardet-0.0.1/uchardet.pri b/src/libcommuni/src/3rdparty/uchardet-0.0.1/uchardet.pri deleted file mode 100644 index 6fcefa6..0000000 --- a/src/libcommuni/src/3rdparty/uchardet-0.0.1/uchardet.pri +++ /dev/null @@ -1,62 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -INCLUDEPATH += $$PWD/src -DEPENDPATH += $$PWD/src - -HEADERS += $$PWD/src/Big5Freq.tab -HEADERS += $$PWD/src/EUCKRFreq.tab -HEADERS += $$PWD/src/EUCTWFreq.tab -HEADERS += $$PWD/src/GB2312Freq.tab -HEADERS += $$PWD/src/JISFreq.tab - -HEADERS += $$PWD/src/CharDistribution.h -HEADERS += $$PWD/src/JpCntx.h -HEADERS += $$PWD/src/nsBig5Prober.h -HEADERS += $$PWD/src/nsCharSetProber.h -HEADERS += $$PWD/src/nsCodingStateMachine.h -HEADERS += $$PWD/src/nscore.h -HEADERS += $$PWD/src/nsEscCharsetProber.h -HEADERS += $$PWD/src/nsEUCJPProber.h -HEADERS += $$PWD/src/nsEUCKRProber.h -HEADERS += $$PWD/src/nsEUCTWProber.h -HEADERS += $$PWD/src/nsGB2312Prober.h -HEADERS += $$PWD/src/nsHebrewProber.h -HEADERS += $$PWD/src/nsLatin1Prober.h -HEADERS += $$PWD/src/nsMBCSGroupProber.h -HEADERS += $$PWD/src/nsPkgInt.h -HEADERS += $$PWD/src/nsSBCharSetProber.h -HEADERS += $$PWD/src/nsSBCSGroupProber.h -HEADERS += $$PWD/src/nsSJISProber.h -HEADERS += $$PWD/src/nsUniversalDetector.h -HEADERS += $$PWD/src/nsUTF8Prober.h -HEADERS += $$PWD/src/prmem.h -HEADERS += $$PWD/src/uchardet.h - -SOURCES += $$PWD/src/CharDistribution.cpp -SOURCES += $$PWD/src/JpCntx.cpp -SOURCES += $$PWD/src/LangBulgarianModel.cpp -SOURCES += $$PWD/src/LangCyrillicModel.cpp -SOURCES += $$PWD/src/LangGreekModel.cpp -SOURCES += $$PWD/src/LangHungarianModel.cpp -SOURCES += $$PWD/src/LangHebrewModel.cpp -SOURCES += $$PWD/src/LangThaiModel.cpp -SOURCES += $$PWD/src/nsHebrewProber.cpp -SOURCES += $$PWD/src/nsCharSetProber.cpp -SOURCES += $$PWD/src/nsBig5Prober.cpp -SOURCES += $$PWD/src/nsEUCJPProber.cpp -SOURCES += $$PWD/src/nsEUCKRProber.cpp -SOURCES += $$PWD/src/nsEUCTWProber.cpp -SOURCES += $$PWD/src/nsEscCharsetProber.cpp -SOURCES += $$PWD/src/nsEscSM.cpp -SOURCES += $$PWD/src/nsGB2312Prober.cpp -SOURCES += $$PWD/src/nsMBCSGroupProber.cpp -SOURCES += $$PWD/src/nsMBCSSM.cpp -SOURCES += $$PWD/src/nsSBCSGroupProber.cpp -SOURCES += $$PWD/src/nsSBCharSetProber.cpp -SOURCES += $$PWD/src/nsSJISProber.cpp -SOURCES += $$PWD/src/nsUTF8Prober.cpp -SOURCES += $$PWD/src/nsLatin1Prober.cpp -SOURCES += $$PWD/src/nsUniversalDetector.cpp -SOURCES += $$PWD/src/uchardet.cpp diff --git a/src/libcommuni/src/core/core.pri b/src/libcommuni/src/core/core.pri deleted file mode 100644 index 3d4a0b1..0000000 --- a/src/libcommuni/src/core/core.pri +++ /dev/null @@ -1,65 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -DEFINES += BUILD_IRC_CORE -QT += network - -INCDIR = $$PWD/../../include/IrcCore - -DEPENDPATH += $$PWD $$INCDIR -INCLUDEPATH += $$PWD $$INCDIR - -CONV_HEADERS = $$INCDIR/Irc -CONV_HEADERS += $$INCDIR/IrcCommand -CONV_HEADERS += $$INCDIR/IrcCommandFilter -CONV_HEADERS += $$INCDIR/IrcConnection -CONV_HEADERS += $$INCDIR/IrcCore -CONV_HEADERS += $$INCDIR/IrcGlobal -CONV_HEADERS += $$INCDIR/IrcMessage -CONV_HEADERS += $$INCDIR/IrcMessageFilter -CONV_HEADERS += $$INCDIR/IrcNetwork -CONV_HEADERS += $$INCDIR/IrcProtocol - -PUB_HEADERS = $$INCDIR/irc.h -PUB_HEADERS += $$INCDIR/irccommand.h -PUB_HEADERS += $$INCDIR/ircconnection.h -PUB_HEADERS += $$INCDIR/irccore.h -PUB_HEADERS += $$INCDIR/ircfilter.h -PUB_HEADERS += $$INCDIR/ircglobal.h -PUB_HEADERS += $$INCDIR/ircmessage.h -PUB_HEADERS += $$INCDIR/ircnetwork.h -PUB_HEADERS += $$INCDIR/ircprotocol.h - -PRIV_HEADERS = $$INCDIR/ircconnection_p.h -PRIV_HEADERS += $$INCDIR/ircmessage_p.h -PRIV_HEADERS += $$INCDIR/ircmessagebuilder_p.h -PRIV_HEADERS += $$INCDIR/ircmessagedecoder_p.h -PRIV_HEADERS += $$INCDIR/ircnetwork_p.h - -HEADERS += $$PUB_HEADERS -HEADERS += $$PRIV_HEADERS - -SOURCES += $$PWD/irc.cpp -SOURCES += $$PWD/irccommand.cpp -SOURCES += $$PWD/ircconnection.cpp -SOURCES += $$PWD/irccore.cpp -SOURCES += $$PWD/ircfilter.cpp -SOURCES += $$PWD/ircmessage.cpp -SOURCES += $$PWD/ircmessage_p.cpp -SOURCES += $$PWD/ircmessagebuilder.cpp -SOURCES += $$PWD/ircmessagedecoder.cpp -SOURCES += $$PWD/ircnetwork.cpp -SOURCES += $$PWD/ircprotocol.cpp - -include(../3rdparty/mozilla/mozilla.pri) - -CONFIG(icu, icu|no_icu) { - DEFINES += HAVE_ICU - SOURCES += $$PWD/ircmessagedecoder_icu.cpp - include(../3rdparty/icu/icu.pri) -} else { - DEFINES += HAVE_UCHARDET - SOURCES += $$PWD/ircmessagedecoder_uchardet.cpp - include(../3rdparty/uchardet-0.0.1/uchardet.pri) -} diff --git a/src/libcommuni/src/core/core.pro b/src/libcommuni/src/core/core.pro deleted file mode 100644 index a9a0c5a..0000000 --- a/src/libcommuni/src/core/core.pro +++ /dev/null @@ -1,8 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -IRC_MODULE = IrcCore -include(core.pri) -include(../module_build.pri) -include(../module_install.pri) diff --git a/src/libcommuni/src/core/irc.cpp b/src/libcommuni/src/core/irc.cpp deleted file mode 100644 index 5a51645..0000000 --- a/src/libcommuni/src/core/irc.cpp +++ /dev/null @@ -1,172 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "irc.h" -#include "irccore.h" -#include "irccommand.h" -#include "ircconnection.h" -#include "ircmessage_p.h" -#include <QMetaEnum> -#include <QDebug> - -IRC_BEGIN_NAMESPACE - -/*! - \file irc.h - \brief \#include <Irc> - */ - -/*! - \namespace Irc - \ingroup core - \brief Miscellaneous identifiers used throughout the library. - */ - -/*! - Returns the version number of Communi at run-time as a string (for example, "1.2.3"). - This may be a different version than the version the application was compiled against. - - \sa IRC_VERSION, IRC_VERSION_STR - */ -QString Irc::version() -{ - return QLatin1String(IRC_VERSION_STR); -} - -/*! - Returns the numeric \a code as a string or a null string if the code is unknown. - - \sa Irc::Code, IrcNumericMessage::code() - */ -QString Irc::codeToString(int code) -{ - const int index = Irc::staticMetaObject.indexOfEnumerator("Code"); - QMetaEnum enumerator = Irc::staticMetaObject.enumerator(index); - return QLatin1String(enumerator.valueToKey(code)); -} - -/*! - Returns the nick part of the specified \a prefix. - - Nick part of a prefix as specified in RFC 1459: - <pre> - <b><nick></b> [ '!' <ident> ] [ '@' <host> ] - </pre> - - \sa IrcMessage::prefix, IrcMessage::nick - */ -QString Irc::nickFromPrefix(const QString& prefix) -{ - QString nick; - IrcMessagePrivate::parsePrefix(prefix, &nick, 0, 0); - return nick; -} - -/*! - Returns the ident part of the specified \a prefix. - - Ident part of a prefix as specified in RFC 1459: - <pre> - <nick> [ '!' <b><ident></b> ] [ '@' <host> ] - </pre> - - \sa IrcMessage::prefix, IrcMessage::ident - */ -QString Irc::identFromPrefix(const QString& prefix) -{ - QString ident; - IrcMessagePrivate::parsePrefix(prefix, 0, &ident, 0); - return ident; -} - -/*! - Returns the host part of the specified \a prefix. - - Host part of a prefix as specified in RFC 1459: - <pre> - <nick> [ '!' <ident> ] [ '@' <b><host></b> ] - </pre> - - \sa IrcMessage::prefix, IrcMessage::host - */ -QString Irc::hostFromPrefix(const QString& prefix) -{ - QString host; - IrcMessagePrivate::parsePrefix(prefix, 0, 0, &host); - return host; -} - -/*! - \deprecated Use IrcCore::registerMetaTypes() instead. - */ -void Irc::registerMetaTypes() -{ - IrcCore::registerMetaTypes(); -} - -#ifndef QT_NO_DEBUG_STREAM -QDebug operator<<(QDebug debug, Irc::Code code) -{ - const int index = Irc::staticMetaObject.indexOfEnumerator("Code"); - QMetaEnum enumerator = Irc::staticMetaObject.enumerator(index); - const char* key = enumerator.valueToKey(code); - debug << (key ? key : "Unknown"); - return debug; -} - -QDebug operator<<(QDebug debug, Irc::DataRole role) -{ - const int index = Irc::staticMetaObject.indexOfEnumerator("DataRole"); - QMetaEnum enumerator = Irc::staticMetaObject.enumerator(index); - const char* key = enumerator.valueToKey(role); - debug << (key ? key : "Unknown"); - return debug; -} - -QDebug operator<<(QDebug debug, Irc::Color color) -{ - const int index = Irc::staticMetaObject.indexOfEnumerator("Color"); - QMetaEnum enumerator = Irc::staticMetaObject.enumerator(index); - const char* key = enumerator.valueToKey(color); - debug << (key ? key : "Unknown"); - return debug; -} - -QDebug operator<<(QDebug debug, Irc::SortMethod method) -{ - const int index = Irc::staticMetaObject.indexOfEnumerator("SortMethod"); - QMetaEnum enumerator = Irc::staticMetaObject.enumerator(index); - const char* key = enumerator.valueToKey(method); - debug << (key ? key : "Unknown"); - return debug; -} -#endif // QT_NO_DEBUG_STREAM - -#include "moc_irc.cpp" - -IRC_END_NAMESPACE diff --git a/src/libcommuni/src/core/irccommand.cpp b/src/libcommuni/src/core/irccommand.cpp deleted file mode 100644 index d7e9b30..0000000 --- a/src/libcommuni/src/core/irccommand.cpp +++ /dev/null @@ -1,851 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "irccommand.h" -#include "ircmessage.h" -#include <QTextCodec> -#include <QMetaEnum> -#include <QDebug> - -IRC_BEGIN_NAMESPACE - -/*! - \file irccommand.h - \brief \#include <IrcCommand> - */ - -/*! - \class IrcCommand irccommand.h <IrcCommand> - \ingroup core - \brief Provides the most common commands. - - The IrcCommand class supports the most common IRC commands out of the box, - and can be extended for custom commands as well. See IrcCommand::Type for - the list of built-in command types. IRC commands, as in IrcCommand instances, - are sent to the IRC server via IrcConnection::sendCommand(). - - \section creating-commands Creating commands - - It is recommended to create IrcCommand instances via static - IrcCommand::createXxx() methods. - - \warning IrcCommand instances must be allocated on the heap, since - IrcConnection::sendCommand() takes ownership of the command and deletes - it once it has been sent. - - \section custom-commands Custom commands - - A "custom command" here refers to command types not listed in IrcCommand::Type, - the list of built-in command types. There are two ways to send custom commands: - \li by passing the string representation of a command directly to - IrcConnection::sendRaw() or IrcConnection::sendData(), or - \li by subclassing IrcCommand and reimplementing - IrcCommand::toString(), which eventually creates the string representation - of the command. - - Example implementation of a custom command: - \code - class IrcServerCommand : public IrcCommand - { - Q_OBJECT - public: - explicit IrcServerCommand(QObject* parent = 0) : IrcCommand(parent) - { - } - - // provided for convenience, to ensure correct parameter order - static IrcCommand* create(const QString& serverName, int hopCount, const QString& info) - { - IrcCommand* command = new IrcServerCommand; - command->setParameters(QStringList() << serverName << QString::number(hopCount) << info); - return command; - } - - // reimplemented from IrcCommand::toString() - virtual toString() const - { - // SERVER <servername> <hopcount> <info> - return QString("SERVER %1 %2 %3").arg(params.value(0), params.value(1), params.value(2)); - } - }; - \endcode - - \sa IrcConnection::sendCommand(), IrcConnection::sendRaw(), IrcCommand::Type - */ - -/*! - \enum IrcCommand::Type - This enum describes the built-in command types. - */ - -/*! - \var IrcCommand::Admin - \brief An admin command (ADMIN) is used to query server admin info. - */ - -/*! - \var IrcCommand::Away - \brief An away command (AWAY) is used to set the away status. - */ - -/*! - \var IrcCommand::Capability - \brief A capability command (CAP) is used to manage connection capabilities. - */ - -/*! - \var IrcCommand::CtcpAction - \brief A CTCP action command is used to send an action message to channels and users. - */ - -/*! - \var IrcCommand::CtcpReply - \brief A CTCP reply command is used to send a reply to a request. - */ - -/*! - \var IrcCommand::CtcpRequest - \brief A CTCP request command is used to send a request. - */ - -/*! - \var IrcCommand::Custom - \brief A custom command - */ - -/*! - \var IrcCommand::Info - \brief An info command (INFO) is used to query server info. - */ - -/*! - \var IrcCommand::Invite - \brief An invite command (INVITE) is used to invite users to a channel. - */ - -/*! - \var IrcCommand::Join - \brief A join command (JOIN) is used to start listening a specific channel. - */ - -/*! - \var IrcCommand::Kick - \brief A kick command (KICK) is used to forcibly remove a user from a channel. - */ - -/*! - \var IrcCommand::Knock - \brief A knock command (KNOCK) is used to request channel invitation. - */ - -/*! - \var IrcCommand::List - \brief A list command (LIST) is used to list channels and their topics. - */ - -/*! - \var IrcCommand::Message - \brief A message command (PRIVMSG) is used to send private messages to channels and users. - */ - -/*! - \var IrcCommand::Mode - \brief A mode command (MODE) is used to change the mode of users and channels. - */ - -/*! - \var IrcCommand::Motd - \brief A message of the day command (MOTD) is used to query the message of the day. - */ - -/*! - \var IrcCommand::Names - \brief A names command (NAMES) is used to list all nicknames on a channel. - */ - -/*! - \var IrcCommand::Nick - \brief A nick command (NICK) is used to give user a nickname or change the previous one. - */ - -/*! - \var IrcCommand::Notice - \brief A notice command (NOTICE) is used to send notice messages to channels and users. - */ - -/*! - \var IrcCommand::Part - \brief A part command (PART) causes the client to be removed from the channel. - */ - -/*! - \var IrcCommand::Quit - \brief A quit command (QUIT) is used to end a client connection. - */ - -/*! - \var IrcCommand::Quote - \brief A quote command is used to send a raw message to the server. - */ - -/*! - \var IrcCommand::Stats - \brief A stats command (STATS) is used to query server statistics. - */ - -/*! - \var IrcCommand::Time - \brief A time command (TIME) is used to query local server time. - */ - -/*! - \var IrcCommand::Topic - \brief A topic command (TOPIC) is used to change or view the topic of a channel. - */ - -/*! - \var IrcCommand::Trace - \brief A trace command (TRACE) is used to trace the connection path to a target. - */ - -/*! - \var IrcCommand::Users - \brief A users command (USERS) is used to query server users. - */ - -/*! - \var IrcCommand::Version - \brief A version command (VERSION) is used to query user or server version. - */ - -/*! - \var IrcCommand::Who - \brief A who command (WHO) is used to generate a query which returns a list of matching users. - */ - -/*! - \var IrcCommand::Whois - \brief A whois command (WHOIS) is used to query information about a particular user. - */ - -/*! - \var IrcCommand::Whowas - \brief A whowas command (WHOWAS) is used to query information about a user that no longer exists. - */ - -#ifndef IRC_DOXYGEN -class IrcCommandPrivate -{ -public: - IrcCommandPrivate() : encoding("UTF-8") { } - - QString params(int index) const; - - IrcCommand::Type type; - QStringList parameters; - QByteArray encoding; - - static IrcCommand* createCommand(IrcCommand::Type type, const QStringList& parameters); -}; - -QString IrcCommandPrivate::params(int index) const -{ - return QStringList(parameters.mid(index)).join(QLatin1String(" ")); -} - -IrcCommand* IrcCommandPrivate::createCommand(IrcCommand::Type type, const QStringList& parameters) -{ - IrcCommand* command = new IrcCommand; - command->setType(type); - command->setParameters(parameters); - return command; -} -#endif // IRC_DOXYGEN - -/*! - Constructs a new IrcCommand with \a parent. - */ -IrcCommand::IrcCommand(QObject* parent) : QObject(parent), d_ptr(new IrcCommandPrivate) -{ - Q_D(IrcCommand); - d->type = Custom; -} - -/*! - Destructs the IRC command. - */ -IrcCommand::~IrcCommand() -{ -} - -/*! - This property holds the command type. - - \par Access functions: - \li IrcCommand::Type <b>type</b>() const - \li void <b>setType</b>(IrcCommand::Type type) - */ -IrcCommand::Type IrcCommand::type() const -{ - Q_D(const IrcCommand); - return d->type; -} - -void IrcCommand::setType(Type type) -{ - Q_D(IrcCommand); - d->type = type; -} - -/*! - This property holds the command parameters. - - \par Access functions: - \li QStringList <b>parameters</b>() const - \li void <b>setParameters</b>(const QStringList& parameters) - */ -QStringList IrcCommand::parameters() const -{ - Q_D(const IrcCommand); - return d->parameters; -} - -void IrcCommand::setParameters(const QStringList& parameters) -{ - Q_D(IrcCommand); - d->parameters = parameters; -} - -/*! - This property holds the encoding that is used when - sending the command via IrcConnection::sendCommand(). - - See QTextCodec::availableCodes() for the list of - supported encodings. The default value is \c "UTF-8". - - \par Access functions: - \li QByteArray <b>encoding</b>() const - \li void <b>setEncoding</b>(const QByteArray& encoding) - - \sa QTextCodec::availableCodecs() - */ -QByteArray IrcCommand::encoding() const -{ - Q_D(const IrcCommand); - return d->encoding; -} - -void IrcCommand::setEncoding(const QByteArray& encoding) -{ - Q_D(IrcCommand); - extern bool irc_is_supported_encoding(const QByteArray& encoding); // ircmessagedecoder.cpp - if (!irc_is_supported_encoding(encoding)) { - qWarning() << "IrcCommand::setEncoding(): unsupported encoding" << encoding; - return; - } - d->encoding = encoding; -} - -/*! - Returns the command as a string. - - Reimplement for custom commands. - \sa IrcCommand::Custom - */ -QString IrcCommand::toString() const -{ - Q_D(const IrcCommand); - const QString p0 = d->parameters.value(0); - const QString p1 = d->parameters.value(1); - const QString p2 = d->parameters.value(2); - - switch (d->type) { - case Admin: return QString("ADMIN %1").arg(p0); // server - case Away: return QString("AWAY :%1").arg(d->params(0)); // reason - case Capability: return QString("CAP %1 :%2").arg(p0, d->params(1)); // subcmd, caps - case CtcpAction: return QString("PRIVMSG %1 :\1ACTION %2\1").arg(p0, d->params(1)); // target, msg - case CtcpRequest: return QString("PRIVMSG %1 :\1%2\1").arg(p0, d->params(1)); // target, msg - case CtcpReply: return QString("NOTICE %1 :\1%2\1").arg(p0, d->params(1)); // target, msg - case Info: return QString("INFO %1").arg(p0); // server - case Invite: return QString("INVITE %1 %2").arg(p0, p1); // user, chan - case Join: return p1.isNull() ? QString("JOIN %1").arg(p0) : QString("JOIN %1 %2").arg(p0, p1); // chan, key - case Kick: return p2.isNull() ? QString("KICK %1 %2").arg(p0, p1) : QString("KICK %1 %2 :%3").arg(p0, p1, d->params(2)); // chan, user, reason - case Knock: return QString("KNOCK %1 %2").arg(p0, p1); // chan, msg - case List: return p1.isNull() ? QString("LIST %1").arg(p0) : QString("LIST %1 %2").arg(p0, p1); // chan, server - case Message: return QString("PRIVMSG %1 :%2").arg(p0, d->params(1)); // target, msg - case Mode: return QString("MODE ") + d->parameters.join(" "); // target, mode, arg - case Motd: return QString("MOTD %1").arg(p0); // server - case Names: return QString("NAMES %1").arg(p0); // chan - case Nick: return QString("NICK %1").arg(p0); // nick - case Notice: return QString("NOTICE %1 :%2").arg(p0, d->params(1)); // target, msg - case Part: return p1.isNull() ? QString("PART %1").arg(p0) : QString("PART %1 :%2").arg(p0, d->params(1)); // chan, reason - case Ping: return QString("PING %1").arg(p0); // argument - case Pong: return QString("PONG %1").arg(p0); // argument - case Quit: return QString("QUIT :%1").arg(d->params(0)); // reason - case Quote: return d->parameters.join(" "); - case Stats: return QString("STATS %1 %2").arg(p0, p1); // query, server - case Time: return QString("TIME %1").arg(p0); // server - case Topic: return p1.isNull() ? QString("TOPIC %1").arg(p0) : QString("TOPIC %1 :%2").arg(p0, d->params(1)); // chan, topic - case Trace: return QString("TRACE %1").arg(p0); // target - case Users: return QString("USERS %1").arg(p0); // server - case Version: return p0.isNull() ? QString("VERSION") : QString("PRIVMSG %1 :\1VERSION\1").arg(p0); // user - case Who: return QString("WHO %1").arg(p0); // user - case Whois: return QString("WHOIS %1 %1").arg(p0); // user - case Whowas: return QString("WHOWAS %1 %1").arg(p0); // user - - case Custom: qWarning("Reimplement IrcCommand::toString() for IrcCommand::Custom"); - default: return QString(); - } -} - -/*! - Creates a new message from this command for \a prefix and \a connection. - - Notice that IRC servers do not echo sent message commands back to the client. - This function is particularly useful for converting sent message commands as - messages for presentation purposes. - - \code - if (command->type() == IrcCommand::Message) { - IrcMessage* message = command->toMessage(connection->nickName(), connection); - receiveMessage(message); - message->deleteLater(); - } - \endcode - */ -IrcMessage* IrcCommand::toMessage(const QString& prefix, IrcConnection* connection) const -{ - return IrcMessage::fromData(":" + prefix.toUtf8() + " " + toString().toUtf8(), connection); -} - -/*! - Creates a new ADMIN command with type IrcCommand::Admin and optional parameter \a server. - - This command shows admin info for the specified \a server, - or the current server if not specified. - */ -IrcCommand* IrcCommand::createAdmin(const QString& server) -{ - return IrcCommandPrivate::createCommand(Admin, QStringList() << server); -} - -/*! - Creates a new AWAY command with type IrcCommand::Away and optional parameter \a reason. - - Provides the server with \a reason to automatically send in reply to a private - message directed at the user. If \a reason is omitted, the away status is removed. - */ -IrcCommand* IrcCommand::createAway(const QString& reason) -{ - return IrcCommandPrivate::createCommand(Away, QStringList() << reason); -} - -/*! - Creates a new capability command with type IrcCommand::Capability and parameters \a subCommand and a \a capability. - - Available subcommands are: LS, LIST, REQ, ACK, NAK, CLEAR and END. - */ -IrcCommand* IrcCommand::createCapability(const QString& subCommand, const QString& capability) -{ - return createCapability(subCommand, QStringList() << capability); -} - -/*! - Creates a new capability command with type IrcCommand::Capability and parameters \a subCommand and optional \a capabilities. - - Available subcommands are: LS, LIST, REQ, ACK, NAK, CLEAR and END. - */ -IrcCommand* IrcCommand::createCapability(const QString& subCommand, const QStringList& capabilities) -{ - return IrcCommandPrivate::createCommand(Capability, QStringList() << subCommand << capabilities.join(QLatin1String(" "))); -} - -/*! - Creates a new CTCP action command with type IrcCommand::CtcpAction and parameters \a target and \a action. - */ -IrcCommand* IrcCommand::createCtcpAction(const QString& target, const QString& action) -{ - return IrcCommandPrivate::createCommand(CtcpAction, QStringList() << target << action); -} - -/*! - Creates a new CTCP reply command with type IrcCommand::CtcpReply and parameters \a target and \a reply. - */ -IrcCommand* IrcCommand::createCtcpReply(const QString& target, const QString& reply) -{ - return IrcCommandPrivate::createCommand(CtcpReply, QStringList() << target << reply); -} - -/*! - Creates a new CTCP request command with type IrcCommand::CtcpRequest and parameters \a target and \a request. - */ -IrcCommand* IrcCommand::createCtcpRequest(const QString& target, const QString& request) -{ - return IrcCommandPrivate::createCommand(CtcpRequest, QStringList() << target << request); -} - -/*! - Creates a new INFO command with type IrcCommand::Info and optional parameter \a server. - - This command shows info for the specified \a server, - or the current server if not specified. - */ -IrcCommand* IrcCommand::createInfo(const QString& server) -{ - return IrcCommandPrivate::createCommand(Info, QStringList() << server); -} - -/*! - Creates a new INVITE command with type IrcCommand::Invite and parameters \a user and \a channel. - - This command invites \a user to the \a channel. The channel does not have to exist, but - if it does, only members of the channel are allowed to invite other clients. if the - channel mode +i (invite-only) is set, only channel operators may invite other clients. - */ -IrcCommand* IrcCommand::createInvite(const QString& user, const QString& channel) -{ - return IrcCommandPrivate::createCommand(Invite, QStringList() << user << channel); -} - -/*! - Creates a new JOIN command with type IrcCommand::Join and parameters \a channel and optional \a key. - - This command joins the \a channel using \a key if specified. - If the channel does not exist, it will be created. - */ -IrcCommand* IrcCommand::createJoin(const QString& channel, const QString& key) -{ - return IrcCommandPrivate::createCommand(Join, QStringList() << channel << key); -} - -/*! - This overload is provided for convenience. - */ -IrcCommand* IrcCommand::createJoin(const QStringList& channels, const QStringList& keys) -{ - return IrcCommandPrivate::createCommand(Join, QStringList() << channels.join(",") << keys.join(",")); -} - -/*! - Creates a new KICK command with type IrcCommand::Kick and parameters \a channel, \a user and optional \a reason. - - This command forcibly removes \a user from \a channel, - and may only be issued by channel operators. - */ -IrcCommand* IrcCommand::createKick(const QString& channel, const QString& user, const QString& reason) -{ - return IrcCommandPrivate::createCommand(Kick, QStringList() << channel << user << reason); -} - -/*! - Creates a new KNOCK command with type IrcCommand::Knock and parameters \a channel and optional \a message. - - This command sends an invitation request to a \a channel with an optional \a message. - - \note The command is not formally defined by an RFC, but is supported by most major IRC daemons. - Support is indicated in a RPL_ISUPPORT reply (numeric 005) with the KNOCK keyword. - */ -IrcCommand* IrcCommand::createKnock(const QString& channel, const QString& message) -{ - return IrcCommandPrivate::createCommand(Knock, QStringList() << channel << message); -} - -/*! - Creates a new LIST command with type IrcCommand::List and optional parameters \a channels and \a server. - - This command lists all channels on the server. If \a channels are given, it will list the channel topics. - If \a server is given, the command will be forwarded to \a server for evaluation. - */ -IrcCommand* IrcCommand::createList(const QStringList& channels, const QString& server) -{ - return IrcCommandPrivate::createCommand(List, QStringList() << channels.join(",") << server); -} - -/*! - Creates a new PRIVMSG command with type IrcCommand::Message and parameters \a target and \a message. - - This command sends \a message to \a target, which is usually a user or channel. - */ -IrcCommand* IrcCommand::createMessage(const QString& target, const QString& message) -{ - return IrcCommandPrivate::createCommand(Message, QStringList() << target << message); -} - -/*! - Creates a new MODE command with type IrcCommand::Mode and parameters \a target and optional \a mode and \a arg. - - This command is used to set both user and channel modes. - */ -IrcCommand* IrcCommand::createMode(const QString& target, const QString& mode, const QString& arg) -{ - return IrcCommandPrivate::createCommand(Mode, QStringList() << target << mode << arg); -} - -/*! - Creates a new MOTD command with type IrcCommand::Motd and optional parameter \a server. - - This command shows the message of the day on the specified \a server, - or the current server if not specified. - */ -IrcCommand* IrcCommand::createMotd(const QString& server) -{ - return IrcCommandPrivate::createCommand(Motd, QStringList() << server); -} - -/*! - Creates a new NAMES command with type IrcCommand::Names and parameter \a channel. - - This command lists all users on the \a channel, optionally limiting to the given \a server. - - If \a channel is omitted, all users are shown, grouped by channel name with - all users who are not on a channel being shown as part of channel "*". - If \a server is specified, the command is sent to \a server for evaluation. -*/ -IrcCommand* IrcCommand::createNames(const QString& channel, const QString& server) -{ - return IrcCommandPrivate::createCommand(Names, QStringList() << channel << server); -} - -/*! - This overload is provided for convenience. - */ -IrcCommand* IrcCommand::createNames(const QStringList& channels, const QString& server) -{ - return IrcCommandPrivate::createCommand(Names, QStringList() << channels.join(",") << server); -} - -/*! - Creates a new NICK command with type IrcCommand::Nick and parameter \a nick. - - This command allows a client to change their IRC nickname. - */ -IrcCommand* IrcCommand::createNick(const QString& nick) -{ - return IrcCommandPrivate::createCommand(Nick, QStringList() << nick); -} - -/*! - Creates a new NOTICE command with type IrcCommand::Notice and parameters \a target and \a message. - - This command sends \a notice to \a target, which is usually a user or channel. - - \note The command works similarly to PRIVMSG, except automatic replies must never be sent in reply to NOTICE messages. - */ -IrcCommand* IrcCommand::createNotice(const QString& target, const QString& message) -{ - return IrcCommandPrivate::createCommand(Notice, QStringList() << target << message); -} - -/*! - Creates a new PART command with type IrcCommand::Part and parameters \a channel and optional \a reason. - - This command causes the client to leave the specified channel. - */ -IrcCommand* IrcCommand::createPart(const QString& channel, const QString& reason) -{ - return IrcCommandPrivate::createCommand(Part, QStringList() << channel << reason); -} - -/*! - This overload is provided for convenience. - */ -IrcCommand* IrcCommand::createPart(const QStringList& channels, const QString& reason) -{ - return IrcCommandPrivate::createCommand(Part, QStringList() << channels.join(",") << reason); -} - -/*! - Creates a new PING command with type IrcCommand::Ping and \a argument. - */ -IrcCommand* IrcCommand::createPing(const QString& argument) -{ - return IrcCommandPrivate::createCommand(Ping, QStringList() << argument); -} - -/*! - Creates a new PONG command with type IrcCommand::Pong and \a argument. - */ -IrcCommand* IrcCommand::createPong(const QString& argument) -{ - return IrcCommandPrivate::createCommand(Pong, QStringList() << argument); -} - -/*! - Creates a new QUIT command with type IrcCommand::Quit and optional parameter \a reason. - */ -IrcCommand* IrcCommand::createQuit(const QString& reason) -{ - return IrcCommandPrivate::createCommand(Quit, QStringList() << reason); -} - -/*! - Creates a new QUOTE command with type IrcCommand::Quote and \a raw. - */ -IrcCommand* IrcCommand::createQuote(const QString& raw) -{ - return IrcCommandPrivate::createCommand(Quote, QStringList() << raw); -} - -/*! - Creates a new QUOTE command with type IrcCommand::Quote and \a parameters. - */ -IrcCommand* IrcCommand::createQuote(const QStringList& parameters) -{ - return IrcCommandPrivate::createCommand(Quote, parameters); -} - -/*! - Creates a new STATS command with type IrcCommand::Stats and parameters \a query and optional \a server. - - This command queries statistics about the specified \a server, - or the current server if not specified. - */ -IrcCommand* IrcCommand::createStats(const QString& query, const QString& server) -{ - return IrcCommandPrivate::createCommand(Stats, QStringList() << query << server); -} - -/*! - Creates a new TIME command with type IrcCommand::Time and optional parameter \a server. - - This command queries local time of the specified \a server, - or the current server if not specified. - */ -IrcCommand* IrcCommand::createTime(const QString& server) -{ - return IrcCommandPrivate::createCommand(Time, QStringList() << server); -} - -/*! - Creates a new TOPIC command with type IrcCommand::Topic and parameters \a channel and optional \a topic. - - This command allows the client to query or set the channel topic on \a channel. - If \a topic is given, it sets the channel topic to \a topic. - If channel mode +t is set, only a channel operator may set the topic. - */ -IrcCommand* IrcCommand::createTopic(const QString& channel, const QString& topic) -{ - return IrcCommandPrivate::createCommand(Topic, QStringList() << channel << topic); -} - -/*! - Creates a new TRACE command with type IrcCommand::Trace and optional parameter \a target. - - This command traces the connection path across the IRC network - to the current server or to a specific \a target (server or client) - in a similar method to traceroute. - */ -IrcCommand* IrcCommand::createTrace(const QString& target) -{ - return IrcCommandPrivate::createCommand(Trace, QStringList() << target); -} - -/*! - Creates a new USERS command with type IrcCommand::Users and optional parameter \a server. - - This command queries the users of the specified \a server, - or the current server if not specified. - */ -IrcCommand* IrcCommand::createUsers(const QString& server) -{ - return IrcCommandPrivate::createCommand(Users, QStringList() << server); -} - -/*! - Creates a new command with type IrcCommand::Version and optional parameter \a user. - - This command queries the version of the specified \a user's client (CTCP REQUEST VERSION), - or the current server (VERSION) if not specified. - */ -IrcCommand* IrcCommand::createVersion(const QString& user) -{ - return IrcCommandPrivate::createCommand(Version, QStringList() << user); -} - -/*! - Creates a new WHO command with type IrcCommand::Who and parameters \a mask and optional \a operators. - - This command returns a list of users who match \a mask, - optionally matching only IRC \a operators. - */ -IrcCommand* IrcCommand::createWho(const QString& mask, bool operators) -{ - return IrcCommandPrivate::createCommand(Who, QStringList() << mask << (operators ? "o" : "")); -} - -/*! - Creates a new WHOIS command with type IrcCommand::Whois and parameter \a user. - - This command returns information about \a user. - */ -IrcCommand* IrcCommand::createWhois(const QString& user) -{ - return IrcCommandPrivate::createCommand(Whois, QStringList() << user); -} - -/*! - Creates a new WHOWAS command with type IrcCommand::Whowas and parameters \a user and optional \a count. - - This command returns information about a \a user that is no longer online - (due to client disconnection, or nickname changes). If given, the server - will return information from the last \a count times the nickname has been used. - */ -IrcCommand* IrcCommand::createWhowas(const QString& user, int count) -{ - return IrcCommandPrivate::createCommand(Whowas, QStringList() << user << QString::number(count)); -} - -#ifndef QT_NO_DEBUG_STREAM -QDebug operator<<(QDebug debug, IrcCommand::Type type) -{ - const int index = IrcCommand::staticMetaObject.indexOfEnumerator("Type"); - QMetaEnum enumerator = IrcCommand::staticMetaObject.enumerator(index); - const char* key = enumerator.valueToKey(type); - debug << (key ? key : "Unknown"); - return debug; -} - -QDebug operator<<(QDebug debug, const IrcCommand* command) -{ - if (!command) - return debug << "IrcCommand(0x0) "; - debug.nospace() << command->metaObject()->className() << '(' << (void*) command; - if (!command->objectName().isEmpty()) - debug.nospace() << ", name=" << qPrintable(command->objectName()); - debug.nospace() << ", type=" << command->type(); - QString str = command->toString(); - if (!str.isEmpty()) - debug.nospace() << ", " << str.left(20); - debug.nospace() << ')'; - return debug.space(); -} -#endif // QT_NO_DEBUG_STREAM - -#include "moc_irccommand.cpp" - -IRC_END_NAMESPACE diff --git a/src/libcommuni/src/core/ircconnection.cpp b/src/libcommuni/src/core/ircconnection.cpp deleted file mode 100644 index 837aa16..0000000 --- a/src/libcommuni/src/core/ircconnection.cpp +++ /dev/null @@ -1,1508 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "ircconnection.h" -#include "ircconnection_p.h" -#include "ircnetwork_p.h" -#include "ircprotocol.h" -#include "ircnetwork.h" -#include "irccommand.h" -#include "ircmessage.h" -#include "ircfilter.h" -#include "irc.h" -#include <QLocale> -#include <QDateTime> -#include <QTcpSocket> -#include <QTextCodec> -#include <QStringList> -#include <QMetaObject> -#include <QMetaMethod> -#include <QMetaEnum> -#ifndef QT_NO_OPENSSL -#include <QSslSocket> -#include <QSslError> -#endif // QT_NO_OPENSSL -#include <QDataStream> -#include <QVariantMap> - -IRC_BEGIN_NAMESPACE - -/*! - \file ircconnection.h - \brief \#include <IrcConnection> - */ - -/*! - \class IrcConnection ircconnection.h IrcConnection - \ingroup core - \brief Provides means to establish a connection to an IRC server. - - \section connection-management Connection management - - Before \ref open() "opening" a connection, it must be first initialized - with \ref host, \ref userName, \ref nickName and \ref realName. - - The connection status may be queried at any time via status(). Also - \ref active "isActive()" and \ref connected "isConnected()" are provided - for convenience. In addition to the \ref status "statusChanged()" signal, - the most important statuses are informed via the following convenience - signals: - \li connecting() - - The connection is being established. - \li \ref connected "connected()" - - The IRC connection has been established, and the server is ready to receive commands. - \li disconnected() - - The connection has been lost. - - \section receiving-messages Receiving messages - - Whenever a message is received from the server, the messageReceived() - signal is emitted. Also message type specific signals are provided - for convenience. See messageReceived() and IrcMessage and its - subclasses for more details. - - \section sending-commands Sending commands - - Sending commands to a server is most conveniently done by creating - them via the various static \ref IrcCommand "IrcCommand::createXxx()" - methods and passing them to sendCommand(). Also sendData() is provided - for more low-level access. See IrcCommand for more details. - - \section example Example - - \code - IrcConnection* connection = new IrcConnection(this); - connect(connection, SIGNAL(messageReceived(IrcMessage*)), this, SLOT(onMessageReceived(IrcMessage*))); - connection->setHost("irc.server.com"); - connection->setUserName("me"); - connection->setNickName("myself"); - connection->setRealName("And I"); - connection->sendCommand(IrcCommand::createJoin("#mine")); - connection->open(); - \endcode - - \sa IrcNetwork, IrcMessage, IrcCommand - */ - -/*! - \enum IrcConnection::Status - This enum describes the connection status. - */ - -/*! - \var IrcConnection::Inactive - \brief The connection is inactive. - */ - -/*! - \var IrcConnection::Waiting - \brief The connection is waiting for a reconnect. - */ - -/*! - \var IrcConnection::Connecting - \brief The connection is being established. - */ - -/*! - \var IrcConnection::Connected - \brief The connection has been established. - */ - -/*! - \var IrcConnection::Closing - \brief The connection is being closed. - */ - -/*! - \var IrcConnection::Closed - \brief The connection has been closed. - */ - -/*! - \var IrcConnection::Error - \brief The connection has encountered an error. - */ - -/*! - \fn void IrcConnection::connecting() - - This signal is emitted when the connection is being established. - - The underlying \ref socket has connected, but the IRC handshake is - not yet finished and the server is not yet ready to receive commands. - */ - -/*! - \fn void IrcConnection::nickNameRequired(const QString& reserved, QString* alternate) - - This signal is emitted when the requested nick name is \a reserved - and an \a alternate nick name should be provided. - - An alternate nick name may be set via the provided argument, by changing - the \ref nickName property, or by sending a nick command directly. - - \sa IrcCommand::createNick(), Irc::ERR_NICKNAMEINUSE, Irc::ERR_NICKCOLLISION - */ - -/*! - \fn void IrcConnection::channelKeyRequired(const QString& channel, QString* key) - - This signal is emitted when joining a \a channel requires a \a key. - The key may be set via the provided argument, or by sending a new - join command directly. - - \sa IrcCommand::createJoin(), Irc::ERR_BADCHANNELKEY - */ - -/*! - \fn void IrcConnection::disconnected() - - This signal is emitted when the connection has been lost. - */ - -/*! - \fn void IrcConnection::socketError(QAbstractSocket::SocketError error) - - This signal is emitted when a \ref socket \a error occurs. - - \sa QAbstractSocket::error() - */ - -/*! - \fn void IrcConnection::socketStateChanged(QAbstractSocket::SocketState state) - - This signal is emitted when the \a state of the underlying \ref socket changes. - - \sa QAbstractSocket::stateChanged() - */ - -/*! - \since 3.2 - \fn void IrcConnection::secureError() - - This signal is emitted when SSL socket error occurs. - - Either QSslSocket::sslErrors() was emitted, or the remote host closed - the connection without QSslSocket::sslErrors() being emitted meaning - that the server is not SSL-enabled. - */ - -/*! - \fn void IrcConnection::messageReceived(IrcMessage* message) - - This signal is emitted when a \a message is received. - - In addition, message type specific signals are provided for convenience: - \li void <b>capabilityMessageReceived</b>(\ref IrcCapabilityMessage* message) - \li void <b>errorMessageReceived</b>(\ref IrcErrorMessage* message) - \li void <b>inviteMessageReceived</b>(\ref IrcInviteMessage* message) - \li void <b>joinMessageReceived</b>(\ref IrcJoinMessage* message) - \li void <b>kickMessageReceived</b>(\ref IrcKickMessage* message) - \li void <b>modeMessageReceived</b>(\ref IrcModeMessage* message) - \li void <b>namesMessageReceived</b>(\ref IrcNamesMessage* message) - \li void <b>nickMessageReceived</b>(\ref IrcNickMessage* message) - \li void <b>noticeMessageReceived</b>(\ref IrcNoticeMessage* message) - \li void <b>numericMessageReceived</b>(\ref IrcNumericMessage* message) - \li void <b>motdMessageReceived</b>(\ref IrcMotdMessage* message) - \li void <b>partMessageReceived</b>(\ref IrcPartMessage* message) - \li void <b>pingMessageReceived</b>(\ref IrcPingMessage* message) - \li void <b>pongMessageReceived</b>(\ref IrcPongMessage* message) - \li void <b>privateMessageReceived</b>(\ref IrcPrivateMessage* message) - \li void <b>quitMessageReceived</b>(\ref IrcQuitMessage* message) - \li void <b>topicMessageReceived</b>(\ref IrcTopicMessage* message) - */ - -#ifndef IRC_DOXYGEN -template<typename T> -static void irc_debug(IrcConnection* connection, const char* msg, const T& arg) -{ - static bool dbg = qgetenv("IRC_DEBUG").toInt(); - if (dbg) { - const QString desc = QString::fromLatin1("IrcConnection(%1)").arg(connection->displayName()); - qDebug() << qPrintable(desc) << msg << arg; - } -} - -IrcConnectionPrivate::IrcConnectionPrivate() : - q_ptr(0), - encoding("ISO-8859-15"), - network(0), - protocol(0), - socket(0), - host(), - port(6667), - userName(), - nickName(), - realName(), - enabled(true), - status(IrcConnection::Inactive), - sslErrors(false), - closed(false) -{ -} - -void IrcConnectionPrivate::init(IrcConnection* connection) -{ - q_ptr = connection; - network = IrcNetworkPrivate::create(connection); - connection->setSocket(new QTcpSocket(connection)); - connection->setProtocol(new IrcProtocol(connection)); - QObject::connect(&reconnecter, SIGNAL(timeout()), connection, SLOT(_irc_reconnect())); -} - -void IrcConnectionPrivate::_irc_connected() -{ - Q_Q(IrcConnection); - closed = false; - sslErrors = false; - emit q->connecting(); - if (q->isSecure()) - QMetaObject::invokeMethod(socket, "startClientEncryption"); - protocol->open(); -} - -void IrcConnectionPrivate::_irc_disconnected() -{ - Q_Q(IrcConnection); - protocol->close(); - emit q->disconnected(); - if (enabled && !sslErrors && (status != IrcConnection::Closed || !closed) && !reconnecter.isActive() && reconnecter.interval() > 0) { - reconnecter.start(); - setStatus(IrcConnection::Waiting); - } -} - -void IrcConnectionPrivate::_irc_error(QAbstractSocket::SocketError error) -{ - Q_Q(IrcConnection); - if (!closed && !sslErrors && error == QAbstractSocket::RemoteHostClosedError && q->isSecure()) { - irc_debug(q, "SSL error:", "no SSL available"); - setStatus(IrcConnection::Error); - sslErrors = true; - emit q->secureError(); - } else if (!closed || (error != QAbstractSocket::RemoteHostClosedError && error != QAbstractSocket::UnknownSocketError)) { - irc_debug(q, "socket error:", error); - emit q->socketError(error); - setStatus(IrcConnection::Error); - } -} - -void IrcConnectionPrivate::_irc_sslErrors() -{ - Q_Q(IrcConnection); - QStringList errors; -#ifndef QT_NO_OPENSSL - QSslSocket* ssl = qobject_cast<QSslSocket*>(socket); - if (ssl) { - foreach (const QSslError& error, ssl->sslErrors()) - errors += error.errorString(); - } -#endif - irc_debug(q, "SSL handshake errors:", errors); - sslErrors = true; - emit q->secureError(); -} - -void IrcConnectionPrivate::_irc_state(QAbstractSocket::SocketState state) -{ - Q_Q(IrcConnection); - switch (state) { - case QAbstractSocket::UnconnectedState: - if (closed) - setStatus(IrcConnection::Closed); - break; - case QAbstractSocket::ClosingState: - if (status != IrcConnection::Error) - setStatus(IrcConnection::Closing); - break; - case QAbstractSocket::HostLookupState: - case QAbstractSocket::ConnectingState: - case QAbstractSocket::ConnectedState: - default: - setStatus(IrcConnection::Connecting); - break; - } - emit q->socketStateChanged(state); -} - -void IrcConnectionPrivate::_irc_reconnect() -{ - Q_Q(IrcConnection); - if (!q->isActive()) { - reconnecter.stop(); - q->open(); - } -} - -void IrcConnectionPrivate::_irc_readData() -{ - protocol->read(); -} - -void IrcConnectionPrivate::_irc_filterDestroyed(QObject* filter) -{ - messageFilters.removeAll(filter); - commandFilters.removeAll(filter); -} - -void IrcConnectionPrivate::setNick(const QString& nick) -{ - Q_Q(IrcConnection); - if (nickName != nick) { - nickName = nick; - emit q->nickNameChanged(nick); - } -} - -void IrcConnectionPrivate::setStatus(IrcConnection::Status value) -{ - Q_Q(IrcConnection); - if (status != value) { - const bool wasConnected = q->isConnected(); - status = value; - emit q->statusChanged(value); - - if (!wasConnected && q->isConnected()) { - emit q->connected(); - foreach (IrcCommand* cmd, pendingCommands) - q->sendCommand(cmd); - pendingCommands.clear(); - } - irc_debug(q, "status:", status); - } -} - -void IrcConnectionPrivate::setInfo(const QHash<QString, QString>& info) -{ - Q_Q(IrcConnection); - const QString oldName = q->displayName(); - IrcNetworkPrivate* priv = IrcNetworkPrivate::get(network); - priv->setInfo(info); - const QString newName = q->displayName(); - if (oldName != newName) - emit q->displayNameChanged(newName); -} - -void IrcConnectionPrivate::receiveMessage(IrcMessage* msg) -{ - Q_Q(IrcConnection); - bool filtered = false; - for (int i = messageFilters.count() - 1; !filtered && i >= 0; --i) { - IrcMessageFilter* filter = qobject_cast<IrcMessageFilter*>(messageFilters.at(i)); - if (filter) - filtered |= filter->messageFilter(msg); - } - - if (!filtered) { - emit q->messageReceived(msg); - - switch (msg->type()) { - case IrcMessage::Nick: - emit q->nickMessageReceived(static_cast<IrcNickMessage*>(msg)); - break; - case IrcMessage::Quit: - emit q->quitMessageReceived(static_cast<IrcQuitMessage*>(msg)); - break; - case IrcMessage::Join: - emit q->joinMessageReceived(static_cast<IrcJoinMessage*>(msg)); - break; - case IrcMessage::Part: - emit q->partMessageReceived(static_cast<IrcPartMessage*>(msg)); - break; - case IrcMessage::Topic: - emit q->topicMessageReceived(static_cast<IrcTopicMessage*>(msg)); - break; - case IrcMessage::WhoReply: - emit q->whoReplyMessageReceived(static_cast<IrcWhoReplyMessage*>(msg)); - break; - case IrcMessage::Invite: - emit q->inviteMessageReceived(static_cast<IrcInviteMessage*>(msg)); - break; - case IrcMessage::Kick: - emit q->kickMessageReceived(static_cast<IrcKickMessage*>(msg)); - break; - case IrcMessage::Mode: - emit q->modeMessageReceived(static_cast<IrcModeMessage*>(msg)); - break; - case IrcMessage::Private: - emit q->privateMessageReceived(static_cast<IrcPrivateMessage*>(msg)); - break; - case IrcMessage::Notice: - emit q->noticeMessageReceived(static_cast<IrcNoticeMessage*>(msg)); - break; - case IrcMessage::Ping: - emit q->pingMessageReceived(static_cast<IrcPingMessage*>(msg)); - break; - case IrcMessage::Pong: - emit q->pongMessageReceived(static_cast<IrcPongMessage*>(msg)); - break; - case IrcMessage::Error: - emit q->errorMessageReceived(static_cast<IrcErrorMessage*>(msg)); - break; - case IrcMessage::Numeric: - emit q->numericMessageReceived(static_cast<IrcNumericMessage*>(msg)); - break; - case IrcMessage::Capability: - emit q->capabilityMessageReceived(static_cast<IrcCapabilityMessage*>(msg)); - break; - case IrcMessage::Motd: - emit q->motdMessageReceived(static_cast<IrcMotdMessage*>(msg)); - break; - case IrcMessage::Names: - emit q->namesMessageReceived(static_cast<IrcNamesMessage*>(msg)); - break; - case IrcMessage::Unknown: - default: - break; - } - } - msg->deleteLater(); -} - -IrcCommand* IrcConnectionPrivate::createCtcpReply(IrcPrivateMessage* request) -{ - Q_Q(IrcConnection); - IrcCommand* reply = 0; - const QMetaObject* metaObject = q->metaObject(); - int idx = metaObject->indexOfMethod("createCtcpReply(QVariant)"); - if (idx != -1) { - // QML: QVariant createCtcpReply(QVariant) - QVariant ret; - QMetaMethod method = metaObject->method(idx); - method.invoke(q, Q_RETURN_ARG(QVariant, ret), Q_ARG(QVariant, QVariant::fromValue(request))); - reply = ret.value<IrcCommand*>(); - } else { - // C++: IrcCommand* createCtcpReply(IrcPrivateMessage*) - idx = metaObject->indexOfMethod("createCtcpReply(IrcPrivateMessage*)"); - QMetaMethod method = metaObject->method(idx); - method.invoke(q, Q_RETURN_ARG(IrcCommand*, reply), Q_ARG(IrcPrivateMessage*, request)); - } - return reply; -} -#endif // IRC_DOXYGEN - -/*! - Constructs a new IRC connection with \a parent. - */ -IrcConnection::IrcConnection(QObject* parent) : QObject(parent), d_ptr(new IrcConnectionPrivate) -{ - Q_D(IrcConnection); - d->init(this); -} - -/*! - Constructs a new IRC connection with \a host and \a parent. - */ -IrcConnection::IrcConnection(const QString& host, QObject* parent) : QObject(parent), d_ptr(new IrcConnectionPrivate) -{ - Q_D(IrcConnection); - d->init(this); - setHost(host); -} - -/*! - Destructs the IRC connection. - */ -IrcConnection::~IrcConnection() -{ - close(); - emit destroyed(this); -} - -/*! - This property holds the FALLBACK encoding for received messages. - - The fallback encoding is used when the message is detected not - to be valid \c UTF-8 and the consequent auto-detection of message - encoding fails. See QTextCodec::availableCodecs() for the list of - supported encodings. - - The default value is \c ISO-8859-15. - - \par Access functions: - \li QByteArray <b>encoding</b>() const - \li void <b>setEncoding</b>(const QByteArray& encoding) - - \sa QTextCodec::availableCodecs(), QTextCodec::codecForLocale() - */ -QByteArray IrcConnection::encoding() const -{ - Q_D(const IrcConnection); - return d->encoding; -} - -void IrcConnection::setEncoding(const QByteArray& encoding) -{ - Q_D(IrcConnection); - extern bool irc_is_supported_encoding(const QByteArray& encoding); // ircmessagedecoder.cpp - if (!irc_is_supported_encoding(encoding)) { - qWarning() << "IrcConnection::setEncoding(): unsupported encoding" << encoding; - return; - } - d->encoding = encoding; -} - -/*! - This property holds the server host. - - \par Access functions: - \li QString <b>host</b>() const - \li void <b>setHost</b>(const QString& host) - - \par Notifier signal: - \li void <b>hostChanged</b>(const QString& host) - */ -QString IrcConnection::host() const -{ - Q_D(const IrcConnection); - return d->host; -} - -void IrcConnection::setHost(const QString& host) -{ - Q_D(IrcConnection); - if (d->host != host) { - if (isActive()) - qWarning("IrcConnection::setHost() has no effect until re-connect"); - const QString oldName = displayName(); - d->host = host; - emit hostChanged(host); - const QString newName = displayName(); - if (oldName != newName) - emit displayNameChanged(newName); - } -} - -/*! - This property holds the server port. - - The default value is \c 6667. - - \par Access functions: - \li int <b>port</b>() const - \li void <b>setPort</b>(int port) - - \par Notifier signal: - \li void <b>portChanged</b>(int port) - */ -int IrcConnection::port() const -{ - Q_D(const IrcConnection); - return d->port; -} - -void IrcConnection::setPort(int port) -{ - Q_D(IrcConnection); - if (d->port != port) { - if (isActive()) - qWarning("IrcConnection::setPort() has no effect until re-connect"); - d->port = port; - emit portChanged(port); - } -} - -/*! - This property holds the user name. - - \note Changing the user name has no effect until the connection is re-established. - - \par Access functions: - \li QString <b>userName</b>() const - \li void <b>setUserName</b>(const QString& name) - - \par Notifier signal: - \li void <b>userNameChanged</b>(const QString& name) - */ -QString IrcConnection::userName() const -{ - Q_D(const IrcConnection); - return d->userName; -} - -void IrcConnection::setUserName(const QString& name) -{ - Q_D(IrcConnection); - QString user = name.split(" ", QString::SkipEmptyParts).value(0).trimmed(); - if (d->userName != user) { - if (isActive()) - qWarning("IrcConnection::setUserName() has no effect until re-connect"); - d->userName = user; - emit userNameChanged(user); - } -} - -/*! - This property holds the nick name. - - \par Access functions: - \li QString <b>nickName</b>() const - \li void <b>setNickName</b>(const QString& name) - - \par Notifier signal: - \li void <b>nickNameChanged</b>(const QString& name) - */ -QString IrcConnection::nickName() const -{ - Q_D(const IrcConnection); - return d->nickName; -} - -void IrcConnection::setNickName(const QString& name) -{ - Q_D(IrcConnection); - QString nick = name.split(" ", QString::SkipEmptyParts).value(0).trimmed(); - if (d->nickName != nick) { - if (isActive()) - sendCommand(IrcCommand::createNick(nick)); - else - d->setNick(nick); - } -} - -/*! - This property holds the real name. - - \note Changing the real name has no effect until the connection is re-established. - - \par Access functions: - \li QString <b>realName</b>() const - \li void <b>setRealName</b>(const QString& name) - - \par Notifier signal: - \li void <b>realNameChanged</b>(const QString& name) - */ -QString IrcConnection::realName() const -{ - Q_D(const IrcConnection); - return d->realName; -} - -void IrcConnection::setRealName(const QString& name) -{ - Q_D(IrcConnection); - if (d->realName != name) { - if (isActive()) - qWarning("IrcConnection::setRealName() has no effect until re-connect"); - d->realName = name; - emit realNameChanged(name); - } -} - -/*! - This property holds the password. - - \par Access functions: - \li QString <b>password</b>() const - \li void <b>setPassword</b>(const QString& password) - - \par Notifier signal: - \li void <b>passwordChanged</b>(const QString& password) - */ -QString IrcConnection::password() const -{ - Q_D(const IrcConnection); - return d->password; -} - -void IrcConnection::setPassword(const QString& password) -{ - Q_D(IrcConnection); - if (d->password != password) { - if (isActive()) - qWarning("IrcConnection::setPassword() has no effect until re-connect"); - d->password = password; - emit passwordChanged(password); - } -} - -/*! - This property holds the display name. - - Unless explicitly set, display name resolves to IrcNetwork::name - or IrcConnection::host while the former is not known. - - \par Access functions: - \li QString <b>displayName</b>() const - \li void <b>setDisplayName</b>(const QString& name) - - \par Notifier signal: - \li void <b>displayNameChanged</b>(const QString& name) - */ -QString IrcConnection::displayName() const -{ - Q_D(const IrcConnection); - QString name = d->displayName; - if (name.isEmpty()) - name = d->network->name(); - if (name.isEmpty()) - name = d->host; - return name; -} - -void IrcConnection::setDisplayName(const QString& name) -{ - Q_D(IrcConnection); - if (d->displayName != name) { - d->displayName = name; - emit displayNameChanged(name); - } -} - -/*! - \since 3.1 - - This property holds arbitrary user data. - - \par Access functions: - \li QVariantMap <b>userData</b>() const - \li void <b>setUserData</b>(const QVariantMap& data) - - \par Notifier signal: - \li void <b>userDataChanged</b>(const QVariantMap& data) - */ -QVariantMap IrcConnection::userData() const -{ - Q_D(const IrcConnection); - return d->userData; -} - -void IrcConnection::setUserData(const QVariantMap& data) -{ - Q_D(IrcConnection); - if (d->userData != data) { - d->userData = data; - emit userDataChanged(data); - } -} - -/*! - \property Status IrcConnection::status - This property holds the connection status. - - \par Access function: - \li Status <b>status</b>() const - - \par Notifier signal: - \li void <b>statusChanged</b>(Status status) - */ -IrcConnection::Status IrcConnection::status() const -{ - Q_D(const IrcConnection); - return d->status; -} - -/*! - \property bool IrcConnection::active - This property holds whether the connection is active. - - The connection is considered active when its either connecting, connected or closing. - - \par Access function: - \li bool <b>isActive</b>() const - */ -bool IrcConnection::isActive() const -{ - Q_D(const IrcConnection); - return d->status == Connecting || d->status == Connected || d->status == Closing; -} - -/*! - \property bool IrcConnection::connected - This property holds whether the connection has been established. - - The connection has been established when the welcome message - has been received and the server is ready to receive commands. - - \sa Irc::RPL_WELCOME - - \par Access function: - \li bool <b>isConnected</b>() const - - \par Notifier signal: - \li void <b>connected</b>() - */ -bool IrcConnection::isConnected() const -{ - Q_D(const IrcConnection); - return d->status == Connected; -} - -/*! - \property bool IrcConnection::enabled - This property holds whether the connection is enabled. - - The default value is \c true. - - When set to \c false, a disabled connection does nothing when open() is called. - - \par Access functions: - \li bool <b>isEnabled</b>() const - \li void <b>setEnabled</b>(bool enabled) [slot] - \li void <b>setDisabled</b>(bool disabled) [slot] - - \par Notifier signal: - \li void <b>enabledChanged</b>(bool enabled) - */ -bool IrcConnection::isEnabled() const -{ - Q_D(const IrcConnection); - return d->enabled; -} - -void IrcConnection::setEnabled(bool enabled) -{ - Q_D(IrcConnection); - if (d->enabled != enabled) { - d->enabled = enabled; - emit enabledChanged(enabled); - } -} - -void IrcConnection::setDisabled(bool disabled) -{ - setEnabled(!disabled); -} - -/*! - \property int IrcConnection::reconnectDelay - This property holds the reconnect delay in seconds. - - A positive (greater than zero) value enables automatic reconnect. - When the connection is lost due to a socket error, IrcConnection - will automatically attempt to reconnect after the specified delay. - - The default value is \c 0 (automatic reconnect disabled). - - \par Access functions: - \li int <b>reconnectDelay</b>() const - \li void <b>setReconnectDelay</b>(int seconds) - - \par Notifier signal: - \li void <b>reconnectDelayChanged</b>(int seconds) - */ -int IrcConnection::reconnectDelay() const -{ - Q_D(const IrcConnection); - return d->reconnecter.interval() / 1000; -} - -void IrcConnection::setReconnectDelay(int seconds) -{ - Q_D(IrcConnection); - const int interval = qMax(0, seconds) * 1000; - if (d->reconnecter.interval() != interval) { - d->reconnecter.setInterval(interval); - emit reconnectDelayChanged(interval); - } -} - -/*! - This property holds the socket. The default value is an instance of QTcpSocket. - - The previously set socket is deleted if its parent is \c this. - - \note IrcConnection supports QSslSocket in the way that it automatically - calls QSslSocket::startClientEncryption() while connecting. - - \par Access functions: - \li \ref QAbstractSocket* <b>socket</b>() const - \li void <b>setSocket</b>(\ref QAbstractSocket* socket) - - \sa IrcConnection::secure - */ -QAbstractSocket* IrcConnection::socket() const -{ - Q_D(const IrcConnection); - return d->socket; -} - -void IrcConnection::setSocket(QAbstractSocket* socket) -{ - Q_D(IrcConnection); - if (d->socket != socket) { - if (d->socket) { - d->socket->disconnect(this); - if (d->socket->parent() == this) - d->socket->deleteLater(); - } - - d->socket = socket; - if (socket) { - connect(socket, SIGNAL(connected()), this, SLOT(_irc_connected())); - connect(socket, SIGNAL(disconnected()), this, SLOT(_irc_disconnected())); - connect(socket, SIGNAL(readyRead()), this, SLOT(_irc_readData())); - connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(_irc_error(QAbstractSocket::SocketError))); - connect(socket, SIGNAL(stateChanged(QAbstractSocket::SocketState)), this, SLOT(_irc_state(QAbstractSocket::SocketState))); - if (isSecure()) - connect(socket, SIGNAL(sslErrors(QList<QSslError>)), this, SLOT(_irc_sslErrors())); - } - } -} - -/*! - \property bool IrcConnection::secure - This property holds whether the socket is an SSL socket. - - This property is provided for convenience. Calling - \code - connection->setSecure(true); - \endcode - - is equivalent to: - - \code - QSslSocket* socket = new QSslSocket(socket); - socket->setPeerVerifyMode(QSslSocket::QueryPeer); - connection->setSocket(socket); - \endcode - - \note IrcConnection does not handle SSL errors, see - QSslSocket::sslErrors() for more details on the subject. - - \par Access functions: - \li bool <b>isSecure</b>() const - \li void <b>setSecure</b>(bool secure) - - \par Notifier signal: - \li void <b>secureChanged</b>(bool secure) - - \sa secureSupported, IrcConnection::socket - */ -bool IrcConnection::isSecure() const -{ -#ifdef QT_NO_OPENSSL - return false; -#else - return qobject_cast<QSslSocket*>(socket()); -#endif // QT_NO_OPENSSL -} - -void IrcConnection::setSecure(bool secure) -{ -#ifdef QT_NO_OPENSSL - if (secure) { - qWarning("IrcConnection::setSecure(): the Qt build does not support SSL"); - return; - } -#else - if (secure && !QSslSocket::supportsSsl()) { - qWarning("IrcConnection::setSecure(): the platform does not support SSL - try installing OpenSSL"); - return; - } - - QSslSocket* sslSocket = qobject_cast<QSslSocket*>(socket()); - if (secure && !sslSocket) { - sslSocket = new QSslSocket(this); - sslSocket->setPeerVerifyMode(QSslSocket::QueryPeer); - setSocket(sslSocket); - emit secureChanged(true); - } else if (!secure && sslSocket) { - setSocket(new QTcpSocket(this)); - emit secureChanged(false); - } -#endif // !QT_NO_OPENSSL -} - -/*! - \since 3.2 - \property bool IrcConnection::secureSupported - This property holds whether SSL is supported. - - The value may be \c false for the following reasons: - \li Qt was built without SSL support (\c QT_NO_SSL is defined), or - \li The platform does not support SSL (QSslSocket::supportsSsl() returns \c false). - - \par Access function: - \li static bool <b>isSecureSupported</b>() - - \sa secure, QSslSocket::supportsSsl() - */ - -bool IrcConnection::isSecureSupported() -{ -#ifdef QT_NO_OPENSSL - return false; -#else - return QSslSocket::supportsSsl(); -#endif -} - -/*! - This property holds the used SASL (Simple Authentication and Security Layer) mechanism. - - \par Access functions: - \li QString <b>saslMechanism</b>() const - \li void <b>setSaslMechanism</b>(const QString& mechanism) - - \par Notifier signal: - \li void <b>saslMechanismChanged</b>(const QString& mechanism) - - \sa supportedSaslMechanisms - */ -QString IrcConnection::saslMechanism() const -{ - Q_D(const IrcConnection); - return d->saslMechanism; -} - -void IrcConnection::setSaslMechanism(const QString& mechanism) -{ - Q_D(IrcConnection); - if (!mechanism.isEmpty() && !supportedSaslMechanisms().contains(mechanism.toUpper())) { - qWarning("IrcConnection::setSaslMechanism(): unsupported mechanism: '%s'", qPrintable(mechanism)); - return; - } - if (d->saslMechanism != mechanism) { - if (isActive()) - qWarning("IrcConnection::setSaslMechanism() has no effect until re-connect"); - d->saslMechanism = mechanism.toUpper(); - emit saslMechanismChanged(mechanism); - } -} - -/*! - This property holds the list of supported SASL (Simple Authentication and Security Layer) mechanisms. - - \par Access function: - \li static QStringList <b>supportedSaslMechanisms</b>() - - \sa saslMechanism - */ -QStringList IrcConnection::supportedSaslMechanisms() -{ - return QStringList() << QLatin1String("PLAIN"); -} - -/*! - This property holds the network information. - - \par Access function: - \li IrcNetwork* <b>network</b>() const - */ -IrcNetwork* IrcConnection::network() const -{ - Q_D(const IrcConnection); - return d->network; -} - -/*! - Opens a connection to the server. - - The function does nothing when the connection is already \ref active - or explicitly \ref enabled "disabled". - - \note The function merely outputs a warnings and returns immediately if - either \ref host, \ref userName, \ref nickName or \ref realName is empty. - */ -void IrcConnection::open() -{ - Q_D(IrcConnection); - if (d->host.isEmpty()) { - qWarning("IrcConnection::open(): host is empty!"); - return; - } - if (d->userName.isEmpty()) { - qWarning("IrcConnection::open(): userName is empty!"); - return; - } - if (d->nickName.isEmpty()) { - qWarning("IrcConnection::open(): nickName is empty!"); - return; - } - if (d->realName.isEmpty()) { - qWarning("IrcConnection::open(): realName is empty!"); - return; - } - if (d->enabled && d->socket && !isActive()) - d->socket->connectToHost(d->host, d->port); -} - -/*! - Immediately closes the connection to the server. - - Calling close() makes the connection close immediately and thus might lead to - "remote host closed the connection". In order to quit gracefully, call quit() - first. This function attempts to flush the underlying socket, but this does - not guarantee that the server ever receives the QUIT command if the connection - is closed immediately after sending the command. In order to ensure a graceful - quit, let the server handle closing the connection. - - C++ example: - \code - connection->quit(reason); - QTimer::singleShot(timeout, connection, SLOT(deleteLater())); - \endcode - - QML example: - \code - connection.quit(reason); - connection.destroy(timeout); - \endcode - - \sa quit() - */ -void IrcConnection::close() -{ - Q_D(IrcConnection); - if (d->socket) { - d->closed = true; - d->socket->flush(); - d->socket->abort(); - d->socket->disconnectFromHost(); - if (d->socket->state() == QAbstractSocket::UnconnectedState) - d->setStatus(Closed); - d->reconnecter.stop(); - } -} - -/*! - Sends a quit command with an optionally specified \a reason. - - This method is provided for convenience. It is equal to: - \code - IrcCommand* command = IrcCommand::createQuit(reason); - connection->sendCommand(command); - \endcode - - \sa IrcCommand::createQuit() - */ -void IrcConnection::quit(const QString& reason) -{ - sendCommand(IrcCommand::createQuit(reason)); -} - -/*! - Sends a \a command to the server. - - If the connection is not active, the \a command is queued and sent - later when the connection has been established. - - \note If the command has a valid parent, it is an indication that - the caller of this method is be responsible for freeing the command. - If the command does not have a valid parent (like the commands - created via various IrcCommand::createXxx() methods) the connection - will take ownership of the command and delete it once it has been - sent. Thus, the command must have been allocated on the heap and - it is not safe to access the command after it has been sent. - - \sa sendData() - */ -bool IrcConnection::sendCommand(IrcCommand* command) -{ - Q_D(IrcConnection); - bool res = false; - if (command) { - bool filtered = false; - for (int i = d->commandFilters.count() - 1; !filtered && i >= 0; --i) { - QObject* filter = d->commandFilters.at(i); - IrcCommandFilter* commandFilter = qobject_cast<IrcCommandFilter*>(filter); - if (commandFilter && !d->activeCommandFilters.contains(filter)) { - d->activeCommandFilters.push(filter); - filtered |= commandFilter->commandFilter(command); - d->activeCommandFilters.pop(); - } - } - if (filtered) - return false; - - if (isActive()) { - QTextCodec* codec = QTextCodec::codecForName(command->encoding()); - Q_ASSERT(codec); - res = sendData(codec->fromUnicode(command->toString())); - if (!command->parent()) - command->deleteLater(); - } else { - Q_D(IrcConnection); - d->pendingCommands += command; - } - } - return res; -} - -/*! - Sends raw \a data to the server. - - \sa sendCommand() - */ -bool IrcConnection::sendData(const QByteArray& data) -{ - Q_D(IrcConnection); - if (d->socket) { - static bool dbg = qgetenv("IRC_DEBUG").toInt(); - if (dbg) qDebug() << "->" << data; - if (!d->closed && data.length() >= 4) { - const QByteArray cmd = data.left(5).toUpper(); - if (cmd.startsWith("QUIT") && (data.length() == 4 || QChar(data.at(4)).isSpace())) - d->closed = true; - } - return d->protocol->write(data); - } - return false; -} - -/*! - Sends raw \a message to the server using UTF-8 encoding. - - \sa sendData(), sendCommand() - */ -bool IrcConnection::sendRaw(const QString& message) -{ - return sendData(message.toUtf8()); -} - -/*! - Installs a message \a filter on the connection. The \a filter must implement the IrcMessageFilter interface. - - A message filter receives all messages that are sent to the connection. The filter - receives messages via the \ref IrcMessageFilter::messageFilter() "messageFilter()" - function. The function must return \c true if the message should be filtered, - (i.e. stopped); otherwise it must return \c false. - - If multiple message filters are installed on the same connection, the filter - that was installed last is activated first. - - \sa removeMessageFilter() - */ -void IrcConnection::installMessageFilter(QObject* filter) -{ - Q_D(IrcConnection); - IrcMessageFilter* msgFilter = qobject_cast<IrcMessageFilter*>(filter); - if (msgFilter) { - d->messageFilters += filter; - connect(filter, SIGNAL(destroyed(QObject*)), this, SLOT(_irc_filterDestroyed(QObject*)), Qt::UniqueConnection); - } -} - -/*! - Removes a message \a filter from the connection. - - The request is ignored if such message filter has not been installed. - All message filters for a connection are automatically removed - when the connection is destroyed. - - \sa installMessageFilter() - */ -void IrcConnection::removeMessageFilter(QObject* filter) -{ - Q_D(IrcConnection); - IrcMessageFilter* msgFilter = qobject_cast<IrcMessageFilter*>(filter); - if (msgFilter) { - d->messageFilters.removeAll(filter); - disconnect(filter, SIGNAL(destroyed(QObject*)), this, SLOT(_irc_filterDestroyed(QObject*))); - } -} - -/*! - Installs a command \a filter on the connection. The \a filter must implement the IrcCommandFilter interface. - - A command filter receives all commands that are sent from the connection. The filter - receives commands via the \ref IrcCommandFilter::commandFilter() "commandFilter()" - function. The function must return \c true if the command should be filtered, - (i.e. stopped); otherwise it must return \c false. - - If multiple command filters are installed on the same connection, the filter - that was installed last is activated first. - - \sa removeCommandFilter() - */ -void IrcConnection::installCommandFilter(QObject* filter) -{ - Q_D(IrcConnection); - IrcCommandFilter* cmdFilter = qobject_cast<IrcCommandFilter*>(filter); - if (cmdFilter) { - d->commandFilters += filter; - connect(filter, SIGNAL(destroyed(QObject*)), this, SLOT(_irc_filterDestroyed(QObject*)), Qt::UniqueConnection); - } -} - -/*! - Removes a command \a filter from the connection. - - The request is ignored if such command filter has not been installed. - All command filters for a connection are automatically removed when - the connection is destroyed. - - \sa installCommandFilter() - */ -void IrcConnection::removeCommandFilter(QObject* filter) -{ - Q_D(IrcConnection); - IrcCommandFilter* cmdFilter = qobject_cast<IrcCommandFilter*>(filter); - if (cmdFilter) { - d->commandFilters.removeAll(filter); - disconnect(filter, SIGNAL(destroyed(QObject*)), this, SLOT(_irc_filterDestroyed(QObject*))); - } -} - -/*! - \since 3.1 - - Saves the state of the connection. The \a version number is stored as part of the state data. - - To restore the saved state, pass the return value and \a version number to restoreState(). - */ -QByteArray IrcConnection::saveState(int version) const -{ - QVariantMap args; - args.insert("version", version); - args.insert("host", host()); - args.insert("port", port()); - args.insert("userName", userName()); - args.insert("nickName", nickName()); - args.insert("realName", realName()); - args.insert("password", password()); - args.insert("displayName", displayName()); - args.insert("userData", userData()); - args.insert("encoding", encoding()); - args.insert("enabled", isEnabled()); - args.insert("reconnectDelay", reconnectDelay()); - args.insert("secure", isSecure()); - args.insert("saslMechanism", saslMechanism()); - - QByteArray state; - QDataStream out(&state, QIODevice::WriteOnly); - out << args; - return state; -} - -/*! - \since 3.1 - - Restores the \a state of the connection. The \a version number is compared with that stored in \a state. - If they do not match, the connection state is left unchanged, and this function returns \c false; otherwise, - the state is restored, and \c true is returned. - - \sa saveState() - */ -bool IrcConnection::restoreState(const QByteArray& state, int version) -{ - if (isActive()) - return false; - - QVariantMap args; - QDataStream in(state); - in >> args; - if (in.status() != QDataStream::Ok || args.value("version", -1).toInt() != version) - return false; - - setHost(args.value("host", host()).toString()); - setPort(args.value("port", port()).toInt()); - setUserName(args.value("userName", userName()).toString()); - setNickName(args.value("nickName", nickName()).toString()); - setRealName(args.value("realName", realName()).toString()); - setPassword(args.value("password", password()).toString()); - setDisplayName(args.value("displayName").toString()); - setUserData(args.value("userData", userData()).toMap()); - setEncoding(args.value("encoding", encoding()).toByteArray()); - setEnabled(args.value("enabled", isEnabled()).toBool()); - setReconnectDelay(args.value("reconnectDelay", reconnectDelay()).toInt()); - setSecure(args.value("secure", isSecure()).toBool()); - setSaslMechanism(args.value("saslMechanism", saslMechanism()).toString()); - return true; -} - -/*! - Creates a reply command for the CTCP \a request. - - The default implementation handles the following CTCP requests: CLIENTINFO, PING, SOURCE, TIME and VERSION. - - Reimplement this function in order to alter or omit the default replies. - */ -IrcCommand* IrcConnection::createCtcpReply(IrcPrivateMessage* request) const -{ - QString reply; - QString type = request->content().split(" ", QString::SkipEmptyParts).value(0).toUpper(); - if (type == "PING") - reply = request->content(); - else if (type == "TIME") - reply = QLatin1String("TIME ") + QLocale().toString(QDateTime::currentDateTime(), QLocale::ShortFormat); - else if (type == "VERSION") - reply = QLatin1String("VERSION Using libcommuni ") + Irc::version() + QLatin1String(" - http://communi.github.com"); - else if (type == "SOURCE") - reply = QLatin1String("SOURCE http://communi.github.com"); - else if (type == "CLIENTINFO") - reply = QLatin1String("CLIENTINFO PING SOURCE TIME VERSION"); - if (!reply.isEmpty()) - return IrcCommand::createCtcpReply(request->nick(), reply); - return 0; -} - -/*! - \since 3.2 - - This property holds the protocol. - - The previously set protocol is deleted if its parent is \c this. - - \par Access functions: - \li \ref IrcProtocol* <b>protocol</b>() const - \li void <b>setProtocol</b>(\ref IrcProtocol* protocol) - */ -IrcProtocol* IrcConnection::protocol() const -{ - Q_D(const IrcConnection); - return d->protocol; -} - -void IrcConnection::setProtocol(IrcProtocol* proto) -{ - Q_D(IrcConnection); - if (d->protocol != proto) { - if (d->protocol && d->protocol->parent() == this) - delete d->protocol; - d->protocol = proto; - } -} - -#ifndef QT_NO_DEBUG_STREAM -QDebug operator<<(QDebug debug, IrcConnection::Status status) -{ - const int index = IrcConnection::staticMetaObject.indexOfEnumerator("Status"); - QMetaEnum enumerator = IrcConnection::staticMetaObject.enumerator(index); - const char* key = enumerator.valueToKey(status); - debug << (key ? key : "Unknown"); - return debug; -} - -QDebug operator<<(QDebug debug, const IrcConnection* connection) -{ - if (!connection) - return debug << "IrcConnection(0x0) "; - debug.nospace() << connection->metaObject()->className() << '(' << (void*) connection; - if (!connection->displayName().isEmpty()) - debug.nospace() << ", " << qPrintable(connection->displayName()); - debug.nospace() << ')'; - return debug.space(); -} -#endif // QT_NO_DEBUG_STREAM - -#include "moc_ircconnection.cpp" - -IRC_END_NAMESPACE diff --git a/src/libcommuni/src/core/irccore.cpp b/src/libcommuni/src/core/irccore.cpp deleted file mode 100644 index f6453c8..0000000 --- a/src/libcommuni/src/core/irccore.cpp +++ /dev/null @@ -1,90 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "irccore.h" - -IRC_BEGIN_NAMESPACE - -/*! - \file irccore.h - \brief \#include <IrcCore> - */ - -/*! - \namespace IrcCore - \ingroup core - \brief Module meta-type registration. - */ - -namespace IrcCore { - - /*! - Registers IrcCore types to the %Qt meta-system. - - \sa IrcModel::registerMetaTypes(), IrcUtil::registerMetaTypes(), qRegisterMetaType() - */ - void registerMetaTypes() - { - qRegisterMetaType<Irc::Color>("Irc::Color"); - qRegisterMetaType<Irc::DataRole>("Irc::DataRole"); - qRegisterMetaType<Irc::SortMethod>("Irc::SortMethod"); - qRegisterMetaType<Irc::Code>("Irc::Code"); - - qRegisterMetaType<IrcConnection*>("IrcConnection*"); - qRegisterMetaType<IrcConnection::Status>("IrcConnection::Status"); - - qRegisterMetaType<IrcNetwork*>("IrcNetwork*"); - - qRegisterMetaType<IrcCommand*>("IrcCommand*"); - qRegisterMetaType<IrcCommand::Type>("IrcCommand::Type"); - - qRegisterMetaType<IrcMessage*>("IrcMessage*"); - qRegisterMetaType<IrcMessage::Type>("IrcMessage::Type"); - - qRegisterMetaType<IrcCapabilityMessage*>("IrcCapabilityMessage*"); - qRegisterMetaType<IrcErrorMessage*>("IrcErrorMessage*"); - qRegisterMetaType<IrcInviteMessage*>("IrcInviteMessage*"); - qRegisterMetaType<IrcJoinMessage*>("IrcJoinMessage*"); - qRegisterMetaType<IrcKickMessage*>("IrcKickMessage*"); - qRegisterMetaType<IrcModeMessage*>("IrcModeMessage*"); - qRegisterMetaType<IrcNamesMessage*>("IrcNamesMessage*"); - qRegisterMetaType<IrcNickMessage*>("IrcNickMessage*"); - qRegisterMetaType<IrcNoticeMessage*>("IrcNoticeMessage*"); - qRegisterMetaType<IrcNumericMessage*>("IrcNumericMessage*"); - qRegisterMetaType<IrcMotdMessage*>("IrcMotdMessage*"); - qRegisterMetaType<IrcPartMessage*>("IrcPartMessage*"); - qRegisterMetaType<IrcPingMessage*>("IrcPingMessage*"); - qRegisterMetaType<IrcPongMessage*>("IrcPongMessage*"); - qRegisterMetaType<IrcPrivateMessage*>("IrcPrivateMessage*"); - qRegisterMetaType<IrcQuitMessage*>("IrcQuitMessage*"); - qRegisterMetaType<IrcTopicMessage*>("IrcTopicMessage*"); - qRegisterMetaType<IrcWhoReplyMessage*>("IrcWhoReplyMessage*"); - } -} - -IRC_END_NAMESPACE diff --git a/src/libcommuni/src/core/ircfilter.cpp b/src/libcommuni/src/core/ircfilter.cpp deleted file mode 100644 index 054badb..0000000 --- a/src/libcommuni/src/core/ircfilter.cpp +++ /dev/null @@ -1,248 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "ircfilter.h" - -IRC_BEGIN_NAMESPACE - -/*! - \file ircfilter.h - \brief \#include <\ref ircfilter.h "IrcFilter"> - */ - -/*! - \file ircmessagefilter.h - \brief \#include <IrcMessageFilter> - */ - -/*! - \file irccommandfilter.h - \brief \#include <IrcCommandFilter> - */ - -/*! - \class IrcMessageFilter ircfilter.h <IrcMessageFilter> - \ingroup core - \brief Provides an interface for filtering messages - - IrcMessageFilter may be used to intercept messages before - IrcConnection::messageReceived() is emitted and the messages get delivered - further. In order to use IrcMessageFilter, it must be installed via - IrcConnection::installMessageFilter(). - - Message filtering is mostly useful for handling specific replies before - the rest of the application receives it. This way there is no need to - for example ignore and hide such replies later in the application code. - - The following example sends a PING command after each PRIVMSG command. - A consequent PONG reply from the server verifies that the PRIVMSG has - been also processed. - - \code - class CommandVerifier : public QObject, - public IrcCommandFilter, - public IrcMessageFilter - { - Q_OBJECT - Q_INTERFACES(IrcCommandFilter IrcMessageFilter) - - public: - CommandVerifier(IrcConnection* parent) : - QObject(parent), identifier(0), connection(parent) - { - connection->installMessageFilter(this); - connection->installCommandFilter(this); - } - - virtual bool commandFilter(IrcCommand* cmd) - { - if (cmd->type() == IrcCommand::Message) { - cmd->setParent(this); // take ownership - connection->sendCommand(cmd); - commands.insert(++identifier, cmd); - connection->sendData("PING communi/" + QByteArray::number(identifier)); - return true; - } - return false; - } - - virtual bool messageFilter(IrcMessage* msg) - { - if (msg->type() == IrcMessage::Pong) { - QString arg = static_cast<IrcPongMessage*>(msg)->argument(); - if (arg.startsWith("communi/")) { - bool ok = false; - quint64 id = arg.mid(8).toULongLong(&ok); - if (ok) { - IrcCommand* command = commands.take(id); - if (command) { - emit verified(command); - command->deleteLater(); - return true; - } - } - } - } - return false; - } - - signals: - void verified(IrcCommand* cmd); - - private: - quint64 identifier; - IrcConnection* connection; - QMap<quint64, IrcCommand*> commands; - }; - \endcode - - \sa IrcConnection::installMessageFilter(), IrcCommandFilter - */ - -/*! - \fn IrcMessageFilter::~IrcMessageFilter() - Destructs the message filter. - - The message filter is automatically removed from any connection(s) - it is installed on. - - \sa IrcConnection::removeMessageFilter() - */ - -/*! - \fn virtual bool IrcMessageFilter::messageFilter(IrcMessage* message) = 0 - - Reimplement this function to filter messages from installed connections. - - Return \c true to filter the message out, i.e. stop it being handled further; - otherwise return \c false. - - \sa IrcConnection::installMessageFilter() - */ - -/*! - \class IrcCommandFilter ircfilter.h <IrcCommandFilter> - \ingroup core - \brief Provides an interface for filtering commands - - IrcCommandFilter may be used to intercept commands before they - get sent further. In order to use IrcCommandFilter, it must be - installed via IrcConnection::installCommandFilter(). - - Command filtering can be useful doing extra tasks for specific - type of commands. The following example sends a PING command - after each PRIVMSG command. A consequent PONG reply from the - server verifies that the PRIVMSG has been also processed. - - \code - class CommandVerifier : public QObject, - public IrcCommandFilter, - public IrcMessageFilter - { - Q_OBJECT - Q_INTERFACES(IrcCommandFilter IrcMessageFilter) - - public: - CommandVerifier(IrcConnection* parent) : - QObject(parent), identifier(0), connection(parent) - { - connection->installMessageFilter(this); - connection->installCommandFilter(this); - } - - virtual bool commandFilter(IrcCommand* cmd) - { - if (cmd->type() == IrcCommand::Message) { - cmd->setParent(this); // take ownership - connection->sendCommand(cmd); - commands.insert(++identifier, cmd); - connection->sendData("PING communi/" + QByteArray::number(identifier)); - return true; - } - return false; - } - - virtual bool messageFilter(IrcMessage* msg) - { - if (msg->type() == IrcMessage::Pong) { - QString arg = static_cast<IrcPongMessage*>(msg)->argument(); - if (arg.startsWith("communi/")) { - bool ok = false; - quint64 id = arg.mid(8).toULongLong(&ok); - if (ok) { - IrcCommand* command = commands.take(id); - if (command) { - emit verified(command); - command->deleteLater(); - return true; - } - } - } - } - return false; - } - - signals: - void verified(IrcCommand* cmd); - - private: - quint64 identifier; - IrcConnection* connection; - QMap<quint64, IrcCommand*> commands; - }; - \endcode - - \note Notice that it is safe to call IrcConnection::sendCommand() - from IrcCommandFilter::commandFilter(). Such commands won't get - delivered back to the \b same filter to avoid recursion. - - \sa IrcConnection::installCommandFilter(), IrcMessageFilter - */ - -/*! - \fn IrcCommandFilter::~IrcCommandFilter() - Destructs the command filter. - - The command filter is automatically removed from any connection(s) - it is installed on. - - \sa IrcConnection::removeCommandFilter() - */ - -/*! - \fn virtual bool IrcCommandFilter::commandFilter(IrcCommand* command) = 0 - - Reimplement this function to filter commands to installed connections. - - Return \c true to filter the command out, i.e. stop it being handled further; - otherwise return \c false. - - \sa IrcConnection::installCommandFilter() - */ - -IRC_END_NAMESPACE diff --git a/src/libcommuni/src/core/ircmessage.cpp b/src/libcommuni/src/core/ircmessage.cpp deleted file mode 100644 index eaca6ab..0000000 --- a/src/libcommuni/src/core/ircmessage.cpp +++ /dev/null @@ -1,1604 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "ircmessage.h" -#include "ircmessage_p.h" -#include "ircconnection.h" -#include "ircconnection_p.h" -#include "ircnetwork.h" -#include "irccommand.h" -#include "irc.h" -#include <QMetaEnum> -#include <QVariant> -#include <QDebug> - -IRC_BEGIN_NAMESPACE - -/*! - \file ircmessage.h - \brief \#include <IrcMessage> - */ - -/*! - \class IrcMessage ircmessage.h <IrcMessage> - \ingroup core - \ingroup message - \brief The base class of all messages. - - IRC messages are received from an IRC server. IrcConnection translates received - messages into IrcMessage instances and emits the IrcConnection::messageReceived() - signal upon message received. - - Subclasses of IrcMessage contain specialized accessors for parameters that - are specific to the particular type of message. See IrcMessage::Type for - the list of supported message types. - - \sa IrcConnection::messageReceived(), IrcMessage::Type - */ - -/*! - \enum IrcMessage::Type - This enum describes the supported message types. - */ - -/*! - \var IrcMessage::Unknown - \brief An unknown message (IrcMessage). - */ - -/*! - \var IrcMessage::Capability - \brief A capability message (IrcCapabilityMessage). - */ - -/*! - \var IrcMessage::Error - \brief An error message (IrcErrorMessage). - */ - -/*! - \var IrcMessage::Invite - \brief An invite message (IrcInviteMessage). - */ - -/*! - \var IrcMessage::Join - \brief A join message (IrcJoinMessage). - */ - -/*! - \var IrcMessage::Kick - \brief A kick message (IrcKickMessage). - */ - -/*! - \var IrcMessage::Mode - \brief A mode message (IrcModeMessage). - */ - -/*! - \var IrcMessage::Motd - \brief A message of the day (IrcMotdMessage). - */ - -/*! - \var IrcMessage::Names - \brief A names message (IrcNamesMessage). - */ - -/*! - \var IrcMessage::Nick - \brief A nick message (IrcNickMessage). - */ - -/*! - \var IrcMessage::Notice - \brief A notice message (IrcNoticeMessage). - */ - -/*! - \var IrcMessage::Numeric - \brief A numeric message (IrcNumericMessage). - */ - -/*! - \var IrcMessage::Part - \brief A part message (IrcPartMessage). - */ - -/*! - \var IrcMessage::Ping - \brief A ping message (IrcPingMessage). - */ - -/*! - \var IrcMessage::Pong - \brief A pong message (IrcPongMessage). - */ - -/*! - \var IrcMessage::Private - \brief A private message (IrcPrivateMessage). - */ - -/*! - \var IrcMessage::Quit - \brief A quit message (IrcQuitMessage). - */ - -/*! - \var IrcMessage::Topic - \brief A topic message (IrcTopicMessage). - */ - -/*! - \enum IrcMessage::Flag - This enum describes the supported message flags. - */ - -/*! - \var IrcMessage::None - \brief The message has no flags. - */ - -/*! - \var IrcMessage::Own - \brief The message is user's own message. - */ - -/*! - \var IrcMessage::Identified - \brief The message is identified. - */ - -/*! - \var IrcMessage::Unidentified - \brief The message is unidentified. - */ - -/*! - \since 3.2 - \var IrcMessage::Playback - \brief The message is playback. - */ - -static const QMetaObject* irc_command_meta_object(const QString& command) -{ - static QHash<QString, const QMetaObject*> metaObjects; - if (metaObjects.isEmpty()) { - metaObjects.insert("CAP", &IrcCapabilityMessage::staticMetaObject); - metaObjects.insert("ERROR", &IrcErrorMessage::staticMetaObject); - metaObjects.insert("INVITE", &IrcInviteMessage::staticMetaObject); - metaObjects.insert("JOIN", &IrcJoinMessage::staticMetaObject); - metaObjects.insert("KICK", &IrcKickMessage::staticMetaObject); - metaObjects.insert("MODE", &IrcModeMessage::staticMetaObject); - metaObjects.insert("NICK", &IrcNickMessage::staticMetaObject); - metaObjects.insert("NOTICE", &IrcNoticeMessage::staticMetaObject); - metaObjects.insert("PART", &IrcPartMessage::staticMetaObject); - metaObjects.insert("PING", &IrcPingMessage::staticMetaObject); - metaObjects.insert("PONG", &IrcPongMessage::staticMetaObject); - metaObjects.insert("PRIVMSG", &IrcPrivateMessage::staticMetaObject); - metaObjects.insert("QUIT", &IrcQuitMessage::staticMetaObject); - metaObjects.insert("TOPIC", &IrcTopicMessage::staticMetaObject); - } - - const QMetaObject* metaObject = metaObjects.value(command.toUpper()); - if (!metaObject) { - bool ok = false; - command.toInt(&ok); - if (ok) - metaObject = &IrcNumericMessage::staticMetaObject; - } - if (!metaObject) - metaObject = &IrcMessage::staticMetaObject; - return metaObject; -} - -/*! - Constructs a new IrcMessage with \a connection. - */ -IrcMessage::IrcMessage(IrcConnection* connection) : QObject(connection), d_ptr(new IrcMessagePrivate) -{ - Q_D(IrcMessage); - d->connection = connection; -} - -/*! - Destructs the message. - */ -IrcMessage::~IrcMessage() -{ -} - -/*! - This property holds the message connection. - - \par Access function: - \li \ref IrcConnection* <b>connection</b>() const - */ -IrcConnection* IrcMessage::connection() const -{ - Q_D(const IrcMessage); - return d->connection; -} - -/*! - This property holds the message network. - - \par Access function: - \li \ref IrcNetwork* <b>network</b>() const - */ -IrcNetwork* IrcMessage::network() const -{ - Q_D(const IrcMessage); - return d->connection ? d->connection->network() : 0; -} - -/*! - This property holds the message type. - - \par Access function: - \li \ref IrcMessage::Type <b>type</b>() const - */ -IrcMessage::Type IrcMessage::type() const -{ - Q_D(const IrcMessage); - return d->type; -} - -/*! - \since 3.2 - \property bool IrcMessage::own - - This property holds whether the message is user's own. - - This property is provided for convenience. It is equivalent - of testing for the IrcMessage::Own flag. - - \par Access function: - \li bool <b>isOwn</b>() const - */ -bool IrcMessage::isOwn() const -{ - return flags() & Own; -} - -/*! - This property holds the message flags. - - \par Access function: - \li \ref IrcMessage::Flag "IrcMessage::Flags" <b>flags</b>() const - \li void <b>setFlags</b>(\ref IrcMessage::Flag "IrcMessage::Flags" flags) (\b Since 3.2) - */ -IrcMessage::Flags IrcMessage::flags() const -{ - Q_D(const IrcMessage); - if (d->flags == -1) { - d->flags = IrcMessage::None; - if (d->connection) { - if (!d->prefix().isEmpty() && d->nick() == d->connection->nickName()) - d->flags |= IrcMessage::Own; - - if ((d->type == IrcMessage::Private || d->type == IrcMessage::Notice) && - network()->activeCapabilities().contains("identify-msg")) { - QString msg = property("content").toString(); - if (msg.startsWith("+")) - d->flags |= IrcMessage::Identified; - else if (msg.startsWith("-")) - d->flags |= IrcMessage::Unidentified; - } - } - } - return IrcMessage::Flags(d->flags); -} - -void IrcMessage::setFlags(IrcMessage::Flags flags) -{ - Q_D(IrcMessage); - d->flags = flags; -} - -/*! - This property holds the message command. - - \par Access functions: - \li QString <b>command</b>() const - \li void <b>setCommand</b>(const QString& command) - */ -QString IrcMessage::command() const -{ - Q_D(const IrcMessage); - return d->command(); -} - -void IrcMessage::setCommand(const QString& command) -{ - Q_D(IrcMessage); - d->setCommand(command); -} - -/*! - This property holds the message sender prefix. - - The prefix consists of \ref nick, \ref ident and \ref host as specified in RFC 1459: - <pre> - <prefix> ::= <\ref nick> [ '!' <\ref ident> ] [ '@' <\ref host> ] - </pre> - - \par Access functions: - \li QString <b>prefix</b>() const - \li void <b>setPrefix</b>(const QString& prefix) - */ -QString IrcMessage::prefix() const -{ - Q_D(const IrcMessage); - return d->prefix(); -} - -void IrcMessage::setPrefix(const QString& prefix) -{ - Q_D(IrcMessage); - d->setPrefix(prefix); -} - -/*! - This property holds the message sender nick. - - Nick is part of the sender \ref prefix as specified in RFC 1459: - <pre> - <b><nick></b> [ '!' <\ref ident> ] [ '@' <\ref host> ] - </pre> - - \par Access function: - \li QString <b>nick</b>() const - */ -QString IrcMessage::nick() const -{ - Q_D(const IrcMessage); - return d->nick(); -} - -/*! - This property holds the message sender ident. - - Ident is part of the sender \ref prefix as specified in RFC 1459: - <pre> - <\ref nick> [ '!' <b><ident></b> ] [ '@' <\ref host> ] - </pre> - - \par Access function: - \li QString <b>ident</b>() const - */ -QString IrcMessage::ident() const -{ - Q_D(const IrcMessage); - return d->ident(); -} - -/*! - This property holds the message sender host. - - Host is part of the sender \ref prefix as specified in RFC 1459: - <pre> - <\ref nick> [ '!' <\ref ident> ] [ '@' <b><host></b> ] - </pre> - - \par Access function: - \li QString <b>host</b>() const - */ -QString IrcMessage::host() const -{ - Q_D(const IrcMessage); - return d->host(); -} - -/*! - This property holds the message parameters. - - \par Access functions: - \li QStringList <b>parameters</b>() const - \li void <b>setParameters</b>(const QStringList& parameters) - */ -QStringList IrcMessage::parameters() const -{ - Q_D(const IrcMessage); - return d->params(); -} - -void IrcMessage::setParameters(const QStringList& parameters) -{ - Q_D(IrcMessage); - d->setParams(parameters); -} - -/*! - This property holds the message time stamp. - - \par Access functions: - \li QDateTime <b>timeStamp</b>() const - \li void <b>setTimeStamp</b>(const QDateTime& timeStamp) - */ -QDateTime IrcMessage::timeStamp() const -{ - Q_D(const IrcMessage); - return d->timeStamp; -} - -void IrcMessage::setTimeStamp(const QDateTime& timeStamp) -{ - Q_D(IrcMessage); - d->timeStamp = timeStamp; -} - -/*! - This property holds the FALLBACK encoding for the message. - - The fallback encoding is used when the message is detected not - to be valid UTF-8 and the consequent auto-detection of message - encoding fails. See QTextCodec::availableCodes() for the list of - supported encodings. - - The default value is ISO-8859-15. - - \par Access functions: - \li QByteArray <b>encoding</b>() const - \li void <b>setEncoding</b>(const QByteArray& encoding) - - \sa QTextCodec::availableCodecs(), QTextCodec::codecForLocale() - */ -QByteArray IrcMessage::encoding() const -{ - Q_D(const IrcMessage); - return d->encoding; -} - -void IrcMessage::setEncoding(const QByteArray& encoding) -{ - Q_D(IrcMessage); - extern bool irc_is_supported_encoding(const QByteArray& encoding); // ircmessagedecoder.cpp - if (!irc_is_supported_encoding(encoding)) { - qWarning() << "IrcMessage::setEncoding(): unsupported encoding" << encoding; - return; - } - d->encoding = encoding; - d->invalidate(); -} - -/*! - \since 3.1 - - This property holds the message tags. - - \par Access functions: - \li QVariantMap <b>tags</b>() const - \li void <b>setTags</b>(const QVariantMap& tags) - - \sa <a href="http://ircv3.org/specification/message-tags-3.2">IRCv3.2 Message Tags</a> - */ -QVariantMap IrcMessage::tags() const -{ - Q_D(const IrcMessage); - return d->tags(); -} - -void IrcMessage::setTags(const QVariantMap& tags) -{ - Q_D(IrcMessage); - d->setTags(tags); -} - -/*! - Creates a new message from \a data and \a connection. - */ -IrcMessage* IrcMessage::fromData(const QByteArray& data, IrcConnection* connection) -{ - IrcMessage* message = 0; - IrcMessageData md = IrcMessageData::fromData(data); - const QMetaObject* metaObject = irc_command_meta_object(md.command); - if (metaObject) { - message = qobject_cast<IrcMessage*>(metaObject->newInstance(Q_ARG(IrcConnection*, connection))); - Q_ASSERT(message); - message->d_ptr->data = md; - } - return message; -} - -/*! - Creates a new message from \a prefix, \a command and \a parameters with \a connection. - */ -IrcMessage* IrcMessage::fromParameters(const QString& prefix, const QString& command, const QStringList& parameters, IrcConnection* connection) -{ - IrcMessage* message = 0; - const QMetaObject* metaObject = irc_command_meta_object(command); - if (metaObject) { - message = qobject_cast<IrcMessage*>(metaObject->newInstance(Q_ARG(IrcConnection*, connection))); - Q_ASSERT(message); - message->setPrefix(prefix); - message->setCommand(command); - message->setParameters(parameters); - } - return message; -} - -/*! - \property bool IrcMessage::valid - This property is \c true if the message is valid; otherwise \c false. - - A message is considered valid if the prefix is not empty - and the parameters match the message. - - \par Access function: - \li bool <b>isValid</b>() const - */ -bool IrcMessage::isValid() const -{ - Q_D(const IrcMessage); - return d->connection && !prefix().isNull(); -} - -/*! - Returns the message as received from an IRC server. - */ -QByteArray IrcMessage::toData() const -{ - Q_D(const IrcMessage); - return d->content(); -} - -/*! - \class IrcCapabilityMessage ircmessage.h <IrcMessage> - \ingroup message - \brief Represents a capability message. - */ - -/*! - Constructs a new IrcCapabilityMessage with \a connection. - */ -IrcCapabilityMessage::IrcCapabilityMessage(IrcConnection* connection) : IrcMessage(connection) -{ - Q_D(IrcMessage); - d->type = Capability; -} - -/*! - This property holds the subcommand. - - The following capability subcommands are defined: - LS, LIST, REQ, ACK, NAK, CLEAR, END - - \par Access function: - \li QString <b>subCommand</b>() const - */ -QString IrcCapabilityMessage::subCommand() const -{ - Q_D(const IrcMessage); - return d->param(1); -} - -/*! - This property holds the capabilities. - - A list of capabilities may exist for the following - subcommands: LS, LIST, REQ, ACK and NAK. - - \par Access function: - \li QStringList <b>capabilities</b>() const - */ -QStringList IrcCapabilityMessage::capabilities() const -{ - Q_D(const IrcMessage); - QStringList caps; - QStringList params = d->params(); - if (params.count() > 2) - caps = params.last().split(QLatin1Char(' '), QString::SkipEmptyParts); - return caps; -} - -bool IrcCapabilityMessage::isValid() const -{ - return IrcMessage::isValid(); -} - -/*! - \class IrcErrorMessage ircmessage.h <IrcMessage> - \ingroup message - \brief Represents an error message. - */ - -/*! - Constructs a new IrcErrorMessage with \a connection. - */ -IrcErrorMessage::IrcErrorMessage(IrcConnection* connection) : IrcMessage(connection) -{ - Q_D(IrcMessage); - d->type = Error; -} - -/*! - This property holds the error. - - \par Access function: - \li QString <b>error</b>() const - */ -QString IrcErrorMessage::error() const -{ - Q_D(const IrcMessage); - return d->param(0); -} - -bool IrcErrorMessage::isValid() const -{ - return IrcMessage::isValid() && !error().isEmpty(); -} - -/*! - \class IrcInviteMessage ircmessage.h <IrcMessage> - \ingroup message - \brief Represents an invite message. - */ - -/*! - Constructs a new IrcInviteMessage with \a connection. - */ -IrcInviteMessage::IrcInviteMessage(IrcConnection* connection) : IrcMessage(connection) -{ - Q_D(IrcMessage); - d->type = Invite; -} - -/*! - This property holds the user in question. - - \par Access function: - \li QString <b>user</b>() const - */ -QString IrcInviteMessage::user() const -{ - Q_D(const IrcMessage); - return d->param(0); -} - -/*! - This property holds the channel in question. - - \par Access function: - \li QString <b>channel</b>() const - */ -QString IrcInviteMessage::channel() const -{ - Q_D(const IrcMessage); - return d->param(1); -} - -bool IrcInviteMessage::isValid() const -{ - return IrcMessage::isValid() && !user().isEmpty() && !channel().isEmpty(); -} - -/*! - \class IrcJoinMessage ircmessage.h <IrcMessage> - \ingroup message - \brief Represents a join message. - */ - -/*! - Constructs a new IrcJoinMessage with \a connection. - */ -IrcJoinMessage::IrcJoinMessage(IrcConnection* connection) : IrcMessage(connection) -{ - Q_D(IrcMessage); - d->type = Join; -} - -/*! - This property holds the channel in question. - - \par Access function: - \li QString <b>channel</b>() const - */ -QString IrcJoinMessage::channel() const -{ - Q_D(const IrcMessage); - return d->param(0); -} - -bool IrcJoinMessage::isValid() const -{ - return IrcMessage::isValid() && !channel().isEmpty(); -} - -/*! - \class IrcKickMessage ircmessage.h <IrcMessage> - \ingroup message - \brief Represents a kick message. - */ - -/*! - Constructs a new IrcKickMessage with \a connection. - */ -IrcKickMessage::IrcKickMessage(IrcConnection* connection) : IrcMessage(connection) -{ - Q_D(IrcMessage); - d->type = Kick; -} - -/*! - This property holds the channel in question. - - \par Access function: - \li QString <b>channel</b>() const - */ -QString IrcKickMessage::channel() const -{ - Q_D(const IrcMessage); - return d->param(0); -} - -/*! - This property holds the user in question. - - \par Access function: - \li QString <b>user</b>() const - */ -QString IrcKickMessage::user() const -{ - Q_D(const IrcMessage); - return d->param(1); -} - -/*! - This property holds the optional kick reason. - - \par Access function: - \li QString <b>reason</b>() const - */ -QString IrcKickMessage::reason() const -{ - Q_D(const IrcMessage); - return d->param(2); -} - -bool IrcKickMessage::isValid() const -{ - return IrcMessage::isValid() && !channel().isEmpty() && !user().isEmpty(); -} - -/*! - \class IrcModeMessage ircmessage.h <IrcMessage> - \ingroup message - \brief Represents a mode message. - */ - -/*! - \enum IrcModeMessage::Kind - This enum describes the kind of modes. - */ - -/*! - \var IrcModeMessage::Channel - \brief Channel mode - */ - -/*! - \var IrcModeMessage::User - \brief User mode - */ - -/*! - Constructs a new IrcModeMessage with \a connection. - */ -IrcModeMessage::IrcModeMessage(IrcConnection* connection) : IrcMessage(connection) -{ - Q_D(IrcMessage); - d->type = Mode; -} - -/*! - This property holds the target channel or user in question. - - \par Access function: - \li QString <b>target</b>() const - */ -QString IrcModeMessage::target() const -{ - Q_D(const IrcMessage); - return d->param(0); -} - -/*! - This property holds the channel or user mode. - - \par Access function: - \li QString <b>mode</b>() const - */ -QString IrcModeMessage::mode() const -{ - Q_D(const IrcMessage); - return d->param(1); -} - -/*! - This property holds the first mode argument. - - \par Access function: - \li QString <b>argument</b>() const - */ -QString IrcModeMessage::argument() const -{ - Q_D(const IrcMessage); - return d->param(2); -} - -/*! - \since 3.1 - - This property holds the all mode arguments. - - \par Access function: - \li QStringList <b>arguments</b>() const - */ -QStringList IrcModeMessage::arguments() const -{ - Q_D(const IrcMessage); - return d->params().mid(2); -} - -/*! - This property holds whether the message is a reply. - - Mode messages are sent when a mode changes (\c false) - and when joining a channel (\c true). - - \par Access function: - \li bool <b>isReply</b>() const - - \sa Irc::RPL_CHANNELMODEIS - */ -bool IrcModeMessage::isReply() const -{ - Q_D(const IrcMessage); - int rpl = d->command().toInt(); - return rpl == Irc::RPL_CHANNELMODEIS; -} - -/*! - This property holds the kind of the mode. - - \par Access function: - \li Kind <b>kind</b>() const - */ -IrcModeMessage::Kind IrcModeMessage::kind() const -{ - Q_D(const IrcMessage); - const IrcNetwork* network = d->connection->network(); - const QStringList channelModes = network->channelModes(IrcNetwork::AllTypes); - const QString m = mode().remove(QLatin1Char('+')).remove(QLatin1Char('-')); - for (int i = 0; i < m.length(); ++i) { - if (!channelModes.contains(m.at(i))) - return User; - } - return Channel; -} - -bool IrcModeMessage::isValid() const -{ - return IrcMessage::isValid() && !target().isEmpty() && !mode().isEmpty(); -} - -/*! - \class IrcMotdMessage ircmessage.h <IrcMessage> - \ingroup message - \brief Represents a message of the day. - */ - -/*! - Constructs a new IrcMotdMessage with \a connection. - */ -IrcMotdMessage::IrcMotdMessage(IrcConnection* connection) : IrcMessage(connection) -{ - Q_D(IrcMessage); - d->type = Motd; - setCommand(QLatin1String("MOTD")); -} - -/*! - This property holds the message of the day lines. - - \par Access function: - \li QStringList <b>lines</b>() const - */ -QStringList IrcMotdMessage::lines() const -{ - Q_D(const IrcMessage); - return d->params().mid(1); -} - -bool IrcMotdMessage::isValid() const -{ - Q_D(const IrcMessage); - return IrcMessage::isValid() && !d->params().isEmpty(); -} - -/*! - \class IrcNamesMessage ircmessage.h <IrcMessage> - \ingroup message - \brief Represents a names list message. - */ - -/*! - Constructs a new IrcNamesMessage with \a connection. - */ -IrcNamesMessage::IrcNamesMessage(IrcConnection* connection) : IrcMessage(connection) -{ - Q_D(IrcMessage); - d->type = Names; - setCommand(QLatin1String("NAMES")); -} - -/*! - This property holds the channel. - - \par Access function: - \li QString <b>channel</b>() const - */ -QString IrcNamesMessage::channel() const -{ - Q_D(const IrcMessage); - return d->param(0); -} - -/*! - This property holds the list of names. - - \par Access function: - \li QStringList <b>names</b>() const - */ -QStringList IrcNamesMessage::names() const -{ - Q_D(const IrcMessage); - return d->params().mid(1); -} - -bool IrcNamesMessage::isValid() const -{ - Q_D(const IrcMessage); - return IrcMessage::isValid() && !d->params().isEmpty(); -} - -/*! - \class IrcNickMessage ircmessage.h <IrcMessage> - \ingroup message - \brief Represents a nick message. - */ - -/*! - Constructs a new IrcNickMessage with \a connection. - */ -IrcNickMessage::IrcNickMessage(IrcConnection* connection) : IrcMessage(connection) -{ - Q_D(IrcMessage); - d->type = Nick; -} - -/*! - This property holds the old nick. - - This property is provided for symmetry with \ref newNick - and is equal to \ref nick. - - \par Access function: - \li QString <b>oldNick</b>() const - */ -QString IrcNickMessage::oldNick() const -{ - Q_D(const IrcMessage); - return d->nick(); -} - -/*! - This property holds the new nick. - - \par Access function: - \li QString <b>newNick</b>() const - */ -QString IrcNickMessage::newNick() const -{ - Q_D(const IrcMessage); - return d->param(0); -} - -bool IrcNickMessage::isValid() const -{ - return IrcMessage::isValid() && !newNick().isEmpty(); -} - -/*! - \class IrcNoticeMessage ircmessage.h <IrcMessage> - \ingroup message - \brief Represents a notice message. - */ - -/*! - Constructs a new IrcNoticeMessage with \a connection. - */ -IrcNoticeMessage::IrcNoticeMessage(IrcConnection* connection) : IrcMessage(connection) -{ - Q_D(IrcMessage); - d->type = Notice; -} - -/*! - This property holds the target channel or user in question. - - \par Access function: - \li QString <b>target</b>() const - */ -QString IrcNoticeMessage::target() const -{ - Q_D(const IrcMessage); - return d->param(0); -} - -/*! - This property holds the message content. - - \par Access function: - \li QString <b>content</b>() const - */ -QString IrcNoticeMessage::content() const -{ - Q_D(const IrcMessage); - QString msg = d->param(1); - if (flags() & (Identified | Unidentified)) - msg.remove(0, 1); - if (isReply()) { - msg.remove(0, 1); - msg.chop(1); - } - return msg; -} - -/*! - \property bool IrcNoticeMessage::private - This property is \c true if the notice is private, - or \c false if it is a channel notice. - - \par Access function: - \li bool <b>isPrivate</b>() const - */ -bool IrcNoticeMessage::isPrivate() const -{ - Q_D(const IrcMessage); - if (d->connection) - return !target().compare(d->connection->nickName(), Qt::CaseInsensitive); - return false; -} - -/*! - \property bool IrcNoticeMessage::reply - This property is \c true if the message is a reply; otherwise \c false. - - \par Access function: - \li bool <b>isReply</b>() const - */ -bool IrcNoticeMessage::isReply() const -{ - Q_D(const IrcMessage); - QString msg = d->param(1); - return msg.startsWith('\1') && msg.endsWith('\1'); -} - -bool IrcNoticeMessage::isValid() const -{ - return IrcMessage::isValid() && !target().isEmpty() && !content().isEmpty(); -} - -/*! - \class IrcNumericMessage ircmessage.h <IrcMessage> - \ingroup message - \brief Represents a numeric message. - */ - -/*! - Constructs a new IrcNumericMessage with \a connection. - */ -IrcNumericMessage::IrcNumericMessage(IrcConnection* connection) : IrcMessage(connection) -{ - Q_D(IrcMessage); - d->type = Numeric; -} - -/*! - This property holds the numeric code. - - \par Access function: - \li int <b>code</b>() const - */ -int IrcNumericMessage::code() const -{ - Q_D(const IrcMessage); - bool ok = false; - int number = d->command().toInt(&ok); - return ok ? number : -1; -} - -bool IrcNumericMessage::isValid() const -{ - return IrcMessage::isValid() && code() != -1; -} - -/*! - \class IrcPartMessage ircmessage.h <IrcMessage> - \ingroup message - \brief Represents a part message. - */ - -/*! - Constructs a new IrcPartMessage with \a connection. - */ -IrcPartMessage::IrcPartMessage(IrcConnection* connection) : IrcMessage(connection) -{ - Q_D(IrcMessage); - d->type = Part; -} - -/*! - This property holds the channel in question. - - \par Access function: - \li QString <b>channel</b>() const - */ -QString IrcPartMessage::channel() const -{ - Q_D(const IrcMessage); - return d->param(0); -} - -/*! - This property holds the optional part reason. - - \par Access function: - \li QString <b>reason</b>() const - */ -QString IrcPartMessage::reason() const -{ - Q_D(const IrcMessage); - return d->param(1); -} - -bool IrcPartMessage::isValid() const -{ - return IrcMessage::isValid() && !channel().isEmpty(); -} - -/*! - \class IrcPingMessage ircmessage.h <IrcMessage> - \ingroup message - \brief Represents a ping message. - */ - -/*! - Constructs a new IrcPingMessage with \a connection. - */ -IrcPingMessage::IrcPingMessage(IrcConnection* connection) : IrcMessage(connection) -{ - Q_D(IrcMessage); - d->type = Ping; -} - -/*! - This property holds the optional message argument. - - \par Access function: - \li QString <b>argument</b>() const - */ -QString IrcPingMessage::argument() const -{ - Q_D(const IrcMessage); - return d->param(0); -} - -bool IrcPingMessage::isValid() const -{ - return IrcMessage::isValid(); -} - -/*! - \class IrcPongMessage ircmessage.h <IrcMessage> - \ingroup message - \brief Represents a pong message. - */ - -/*! - Constructs a new IrcPongMessage with \a connection. - */ -IrcPongMessage::IrcPongMessage(IrcConnection* connection) : IrcMessage(connection) -{ - Q_D(IrcMessage); - d->type = Pong; -} - -/*! - This property holds the optional message argument. - - \par Access function: - \li QString <b>argument</b>() const - */ -QString IrcPongMessage::argument() const -{ - Q_D(const IrcMessage); - return d->param(1); -} - -bool IrcPongMessage::isValid() const -{ - return IrcMessage::isValid(); -} - -/*! - \class IrcPrivateMessage ircmessage.h <IrcMessage> - \ingroup message - \brief Represents a private message. - */ - -/*! - Constructs a new IrcPrivateMessage with \a connection. - */ -IrcPrivateMessage::IrcPrivateMessage(IrcConnection* connection) : IrcMessage(connection) -{ - Q_D(IrcMessage); - d->type = Private; -} - -/*! - This property holds the target channel or user in question. - - \par Access function: - \li QString <b>target</b>() const - */ -QString IrcPrivateMessage::target() const -{ - Q_D(const IrcMessage); - return d->param(0); -} - -/*! - This property holds the message content. - - \par Access function: - \li QString <b>content</b>() const - */ -QString IrcPrivateMessage::content() const -{ - Q_D(const IrcMessage); - QString msg = d->param(1); - if (flags() & (Identified | Unidentified)) - msg.remove(0, 1); - const bool act = isAction(); - const bool req = isRequest(); - if (act) msg.remove(0, 8); - if (req) msg.remove(0, 1); - if (act || req) msg.chop(1); - return msg; -} - -/*! - \property bool IrcPrivateMessage::private - This property is \c true if the message is private, - or \c false if it is a channel message. - - \par Access function: - \li bool <b>isPrivate</b>() const - */ -bool IrcPrivateMessage::isPrivate() const -{ - Q_D(const IrcMessage); - if (d->connection) - return !target().compare(d->connection->nickName(), Qt::CaseInsensitive); - return false; -} - -/*! - \property bool IrcPrivateMessage::action - This property is \c true if the message is an action; otherwise \c false. - - \par Access function: - \li bool <b>isAction</b>() const - */ -bool IrcPrivateMessage::isAction() const -{ - Q_D(const IrcMessage); - QString msg = d->param(1); - if (flags() & (Identified | Unidentified)) - msg.remove(0, 1); - return msg.startsWith("\1ACTION ") && msg.endsWith('\1'); -} - -/*! - \property bool IrcPrivateMessage::request - This property is \c true if the message is a request; otherwise \c false. - - \par Access function: - \li bool <b>isRequest</b>() const - */ -bool IrcPrivateMessage::isRequest() const -{ - Q_D(const IrcMessage); - QString msg = d->param(1); - if (flags() & (Identified | Unidentified)) - msg.remove(0, 1); - return msg.startsWith('\1') && msg.endsWith('\1') && !isAction(); -} - -bool IrcPrivateMessage::isValid() const -{ - return IrcMessage::isValid() && !target().isEmpty() && !content().isEmpty(); -} - -/*! - \class IrcQuitMessage ircmessage.h <IrcMessage> - \ingroup message - \brief Represents a quit message. - */ - -/*! - Constructs a new IrcQuitMessage with \a connection. - */ -IrcQuitMessage::IrcQuitMessage(IrcConnection* connection) : IrcMessage(connection) -{ - Q_D(IrcMessage); - d->type = Quit; -} - -/*! - This property holds the optional quit reason. - - \par Access function: - \li QString <b>reason</b>() const - */ -QString IrcQuitMessage::reason() const -{ - Q_D(const IrcMessage); - return d->param(0); -} - -bool IrcQuitMessage::isValid() const -{ - return IrcMessage::isValid(); -} - -/*! - \class IrcTopicMessage ircmessage.h <IrcMessage> - \ingroup message - \brief Represents a topic message. - */ - -/*! - Constructs a new IrcTopicMessage with \a connection. - */ -IrcTopicMessage::IrcTopicMessage(IrcConnection* connection) : IrcMessage(connection) -{ - Q_D(IrcMessage); - d->type = Topic; -} - -/*! - This property holds the channel in question. - - \par Access function: - \li QString <b>channel</b>() const - */ -QString IrcTopicMessage::channel() const -{ - Q_D(const IrcMessage); - return d->param(0); -} - -/*! - This property holds the new channel topic. - - \par Access function: - \li QString <b>topic</b>() const - */ -QString IrcTopicMessage::topic() const -{ - Q_D(const IrcMessage); - return d->param(1); -} - -/*! - This property holds whether the message is a reply. - - Topic messages are sent in three situations: - \li as a notification of a topic change (\c false), - \li as a reply when joining a channel (\c true), or - \li as a reply when explicitly querying the channel topic (\c true). - - \par Access function: - \li bool <b>isReply</b>() const - - \sa Irc::RPL_TOPIC, Irc::RPL_NOTOPIC, IrcTopicCommand - */ -bool IrcTopicMessage::isReply() const -{ - Q_D(const IrcMessage); - int rpl = d->command().toInt(); - return rpl == Irc::RPL_TOPIC || rpl == Irc::RPL_NOTOPIC; -} - -bool IrcTopicMessage::isValid() const -{ - return IrcMessage::isValid() && !channel().isEmpty(); -} - -/*! - \since 3.1 - \class IrcWhoReplyMessage ircmessage.h <IrcMessage> - \ingroup message - \brief Represents a reply message to a WHO command. - */ - -/*! - Constructs a new IrcWhoReplyMessage with \a connection. - */ -IrcWhoReplyMessage::IrcWhoReplyMessage(IrcConnection* connection) : IrcMessage(connection) -{ - Q_D(IrcMessage); - d->type = WhoReply; -} - -/*! - This property holds the mask. - - \par Access function: - \li QString <b>mask</b>() const - */ -QString IrcWhoReplyMessage::mask() const -{ - Q_D(const IrcMessage); - return d->param(0); -} - -/*! - This property holds the server of the user. - - \par Access function: - \li QString <b>server</b>() const - */ -QString IrcWhoReplyMessage::server() const -{ - Q_D(const IrcMessage); - return d->param(1); -} - -/*! - \property bool IrcWhoReplyMessage::away - This property holds whether the user is away. - - \par Access function: - \li QString <b>isAway</b>() const - */ -bool IrcWhoReplyMessage::isAway() const -{ - Q_D(const IrcMessage); - return d->param(2).contains("G"); -} - -/*! - \property bool IrcWhoReplyMessage::servOp - This property holds whether the user is a server operator. - - \par Access function: - \li QString <b>isServOp</b>() const - */ -bool IrcWhoReplyMessage::isServOp() const -{ - Q_D(const IrcMessage); - return d->param(2).contains("*"); -} - -/*! - This property holds the real name of the user. - - \par Access function: - \li QString <b>realName</b>() const - */ -QString IrcWhoReplyMessage::realName() const -{ - Q_D(const IrcMessage); - return d->param(3); -} - -bool IrcWhoReplyMessage::isValid() const -{ - return IrcMessage::isValid() && !mask().isEmpty() && !nick().isEmpty(); -} - -#ifndef QT_NO_DEBUG_STREAM -QDebug operator<<(QDebug debug, IrcMessage::Type type) -{ - const int index = IrcMessage::staticMetaObject.indexOfEnumerator("Type"); - QMetaEnum enumerator = IrcMessage::staticMetaObject.enumerator(index); - const char* key = enumerator.valueToKey(type); - debug << (key ? key : "Unknown"); - return debug; -} - -QDebug operator<<(QDebug debug, IrcMessage::Flag flag) -{ - const int index = IrcMessage::staticMetaObject.indexOfEnumerator("Flag"); - QMetaEnum enumerator = IrcMessage::staticMetaObject.enumerator(index); - const char* key = enumerator.valueToKey(flag); - debug << (key ? key : "None"); - return debug; -} - -QDebug operator<<(QDebug debug, IrcMessage::Flags flags) -{ - QStringList lst; - if (flags == IrcMessage::None) - lst << "None"; - if (flags & IrcMessage::Own) - lst << "Own"; - if (flags & IrcMessage::Identified) - lst << "Identified"; - if (flags & IrcMessage::Unidentified) - lst << "Unidentified"; - debug.nospace() << '(' << qPrintable(lst.join("|")) << ')'; - return debug; -} - -QDebug operator<<(QDebug debug, IrcModeMessage::Kind kind) -{ - const int index = IrcModeMessage::staticMetaObject.indexOfEnumerator("Kind"); - QMetaEnum enumerator = IrcModeMessage::staticMetaObject.enumerator(index); - const char* key = enumerator.valueToKey(kind); - debug << (key ? key : "Unknown"); - return debug; -} - -QDebug operator<<(QDebug debug, const IrcMessage* message) -{ - if (!message) - return debug << "IrcMessage(0x0) "; - debug.nospace() << message->metaObject()->className() << '(' << (void*) message; - if (!message->objectName().isEmpty()) - debug.nospace() << ", name=" << qPrintable(message->objectName()); - debug.nospace() << ", flags=" << message->flags(); - if (!message->prefix().isEmpty()) - debug.nospace() << ", prefix=" << qPrintable(message->prefix()); - if (!message->command().isEmpty()) - debug.nospace() << ", command=" << qPrintable(message->command()); - debug.nospace() << ')'; - return debug.space(); -} -#endif // QT_NO_DEBUG_STREAM - -#include "moc_ircmessage.cpp" - -IRC_END_NAMESPACE diff --git a/src/libcommuni/src/core/ircmessage_p.cpp b/src/libcommuni/src/core/ircmessage_p.cpp deleted file mode 100644 index e5fdd24..0000000 --- a/src/libcommuni/src/core/ircmessage_p.cpp +++ /dev/null @@ -1,284 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "ircmessage_p.h" -#include "ircmessagedecoder_p.h" - -IRC_BEGIN_NAMESPACE - -#ifndef IRC_DOXYGEN -IrcMessagePrivate::IrcMessagePrivate() : - connection(0), type(IrcMessage::Unknown), timeStamp(QDateTime::currentDateTime()), encoding("ISO-8859-15"), flags(-1) -{ -} - -QString IrcMessagePrivate::prefix() const -{ - if (!m_prefix.isExplicit() && m_prefix.isNull() && !data.prefix.isNull()) { - if (data.prefix.startsWith(':')) { - if (data.prefix.length() > 1) - m_prefix = decode(data.prefix.mid(1), encoding); - } else { - // empty (not null) - m_prefix = QString(""); - } - } - return m_prefix.value(); -} - -void IrcMessagePrivate::setPrefix(const QString& prefix) -{ - m_prefix.setValue(prefix); - m_nick.clear(); - m_ident.clear(); - m_host.clear(); -} - -QString IrcMessagePrivate::nick() const -{ - if (m_nick.isNull()) - parsePrefix(prefix(), &m_nick, &m_ident, &m_host); - return m_nick; -} - -QString IrcMessagePrivate::ident() const -{ - if (m_ident.isNull()) - parsePrefix(prefix(), &m_nick, &m_ident, &m_host); - return m_ident; -} - -QString IrcMessagePrivate::host() const -{ - if (m_host.isNull()) - parsePrefix(prefix(), &m_nick, &m_ident, &m_host); - return m_host; -} - -QString IrcMessagePrivate::command() const -{ - if (!m_command.isExplicit() && m_command.isNull() && !data.command.isNull()) - m_command = decode(data.command, encoding); - return m_command.value(); -} - -void IrcMessagePrivate::setCommand(const QString& command) -{ - m_command.setValue(command); -} - -QStringList IrcMessagePrivate::params() const -{ - if (!m_params.isExplicit() && m_params.isNull() && !data.params.isEmpty()) { - QStringList params; - foreach (const QByteArray& param, data.params) - params += decode(param, encoding); - m_params = params; - } - return m_params.value(); -} - -QString IrcMessagePrivate::param(int index) const -{ - return params().value(index); -} - -void IrcMessagePrivate::setParams(const QStringList& params) -{ - m_params.setValue(params); -} - -QVariantMap IrcMessagePrivate::tags() const -{ - if (!m_tags.isExplicit() && m_tags.isNull() && !data.tags.isEmpty()) { - QVariantMap tags; - QMap<QByteArray, QByteArray>::const_iterator it; - for (it = data.tags.constBegin(); it != data.tags.constEnd(); ++it) - tags.insert(decode(it.key(), encoding), decode(it.value(), encoding)); - m_tags = tags; - } - return m_tags.value(); -} - -void IrcMessagePrivate::setTags(const QVariantMap& tags) -{ - m_tags.setValue(tags); -} - -QByteArray IrcMessagePrivate::content() const -{ - if (m_prefix.isExplicit() || m_command.isExplicit() || m_params.isExplicit() || m_tags.isExplicit()) { - QByteArray data; - - // format <tags> - QStringList tt; - const QVariantMap t = tags(); - for (QVariantMap::const_iterator it = t.begin(); it != t.end(); ++it) - tt += it.key() + QLatin1Char('=') + it.value().toString(); - if (!tt.isEmpty()) - data += '@' + tt.join(QLatin1String(";")).toUtf8() + ' '; - - // format <prefix> - const QString p = prefix(); - if (!p.isEmpty()) - data += ':' + p.toUtf8() + ' '; - - // format <command> - data += command().toUtf8(); - - // format <params> - foreach (const QString& param, params()) { - data += ' '; - if (param.contains(QLatin1Char(' '))) - data += ':'; - data += param.toUtf8(); - } - return data; - } - - return data.content; -} - -void IrcMessagePrivate::invalidate() -{ - m_nick.clear(); - m_ident.clear(); - m_host.clear(); - - m_prefix.clear(); - m_command.clear(); - m_params.clear(); - m_tags.clear(); -} - -IrcMessageData IrcMessageData::fromData(const QByteArray& data) -{ - IrcMessageData message; - message.content = data; - - // From RFC 1459: - // <message> ::= [':' <prefix> <SPACE> ] <command> <params> <crlf> - // <prefix> ::= <servername> | <nick> [ '!' <user> ] [ '@' <host> ] - // <command> ::= <letter> { <letter> } | <number> <number> <number> - // <SPACE> ::= ' ' { ' ' } - // <params> ::= <SPACE> [ ':' <trailing> | <middle> <params> ] - // <middle> ::= <Any *non-empty* sequence of octets not including SPACE - // or NUL or CR or LF, the first of which may not be ':'> - // <trailing> ::= <Any, possibly *empty*, sequence of octets not including - // NUL or CR or LF> - - // IRCv3.2 Message Tags - // <message> ::= ['@' <tags> <SPACE>] [':' <prefix> <SPACE> ] <command> <params> <crlf> - // <tags> ::= <tag> [';' <tag>]* - // <tag> ::= <key> ['=' <value>] - // <key> ::= [ <vendor> '/' ] <sequence of letters, digits, hyphens (`-`)> - // <value> ::= <sequence of any characters except NUL, BELL, CR, LF, semicolon (`;`) and SPACE> - // <vendor> ::= <host> - - QByteArray process = data; - - // parse <tags> - if (process.startsWith('@')) { - process.remove(0, 1); - QByteArray tags = process.left(process.indexOf(' ')); - foreach (const QByteArray& tag, tags.split(';')) { - const int idx = tag.indexOf('='); - if (idx != -1) - message.tags.insert(tag.left(idx), tag.mid(idx + 1)); - else - message.tags.insert(tag, QByteArray()); - } - process.remove(0, tags.length() + 1); - } - - // parse <prefix> - if (process.startsWith(':')) { - message.prefix = process.left(process.indexOf(' ')); - process.remove(0, message.prefix.length() + 1); - } else { - // empty (not null) - message.prefix = QByteArray(""); - } - - // parse <command> - message.command = process.mid(0, process.indexOf(' ')); - process.remove(0, message.command.length() + 1); - - // parse <params> - while (!process.isEmpty()) { - if (process.startsWith(':')) { - process.remove(0, 1); - message.params += process; - process.clear(); - } else { - QByteArray param = process.mid(0, process.indexOf(' ')); - process.remove(0, param.length() + 1); - message.params += param; - } - } - - return message; -} - -QString IrcMessagePrivate::decode(const QByteArray& data, const QByteArray& encoding) -{ - // TODO: not thread safe - static IrcMessageDecoder decoder; - return decoder.decode(data, encoding); -} - -bool IrcMessagePrivate::parsePrefix(const QString& prefix, QString* nick, QString* ident, QString* host) -{ - const QString trimmed = prefix.trimmed(); - if (trimmed.contains(QLatin1Char(' '))) - return false; - - const int len = trimmed.length(); - const int ex = trimmed.indexOf(QLatin1Char('!')); - const int at = trimmed.indexOf(QLatin1Char('@')); - - if (ex == -1 && at == -1) { - if (nick) *nick = trimmed; - } else if (ex > 0 && at > 0 && ex + 1 < at && at < len - 1) { - if (nick) *nick = trimmed.mid(0, ex); - if (ident) *ident = trimmed.mid(ex + 1, at - ex - 1); - if (host) *host = trimmed.mid(at + 1); - } else if (ex > 0 && ex < len - 1 && at == -1) { - if (nick) *nick = trimmed.mid(0, ex); - if (ident) *ident = trimmed.mid(ex + 1); - } else if (at > 0 && at < len - 1 && ex == -1) { - if (nick) *nick = trimmed.mid(0, at); - if (host) *host = trimmed.mid(at + 1); - } else { - return false; - } - return true; -} -#endif // IRC_DOXYGEN - -IRC_END_NAMESPACE diff --git a/src/libcommuni/src/core/ircmessagebuilder.cpp b/src/libcommuni/src/core/ircmessagebuilder.cpp deleted file mode 100644 index 298ac79..0000000 --- a/src/libcommuni/src/core/ircmessagebuilder.cpp +++ /dev/null @@ -1,121 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "ircmessagebuilder_p.h" -#include "ircmessage.h" -#include "irc.h" - -IRC_BEGIN_NAMESPACE - -#ifndef IRC_DOXYGEN -IrcMessageBuilder::IrcMessageBuilder(IrcConnection* connection) -{ - d.connection = connection; - d.message = 0; -} - -void IrcMessageBuilder::processMessage(IrcNumericMessage* message) -{ - switch (message->code()) { - case Irc::RPL_MOTDSTART: - d.message = new IrcMotdMessage(d.connection); - d.message->setPrefix(message->prefix()); - d.message->setParameters(QStringList(message->parameters().value(0))); - break; - case Irc::RPL_MOTD: - d.message->setParameters(d.message->parameters() << message->parameters().value(1)); - break; - case Irc::RPL_ENDOFMOTD: - d.message->setTimeStamp(message->timeStamp()); - emit messageReceived(d.message); - d.message = 0; - break; - - case Irc::RPL_NAMREPLY: { - if (!d.message) - d.message = new IrcNamesMessage(d.connection); - d.message->setPrefix(message->prefix()); - int count = message->parameters().count(); - QString channel = message->parameters().value(count - 2); - QStringList names = d.message->parameters().mid(1); - names += message->parameters().value(count - 1).split(QLatin1Char(' '), QString::SkipEmptyParts); - d.message->setParameters(QStringList() << channel << names); - break; - } - case Irc::RPL_ENDOFNAMES: - d.message->setTimeStamp(message->timeStamp()); - emit messageReceived(d.message); - d.message = 0; - break; - - case Irc::RPL_TOPIC: - case Irc::RPL_NOTOPIC: - d.message = new IrcTopicMessage(d.connection); - d.message->setPrefix(message->prefix()); - d.message->setTimeStamp(message->timeStamp()); - d.message->setCommand(QString::number(message->code())); - d.message->setParameters(QStringList() << message->parameters().value(1) << message->parameters().value(2)); - emit messageReceived(d.message); - d.message = 0; - break; - - case Irc::RPL_WHOREPLY: { - d.message = new IrcWhoReplyMessage(d.connection); - d.message->setPrefix(message->parameters().value(5) // nick - + QLatin1Char('!') + message->parameters().value(2) // ident - + QLatin1Char('@') + message->parameters().value(3)); // host - d.message->setTimeStamp(message->timeStamp()); - d.message->setCommand(QString::number(message->code())); - d.message->setParameters(QStringList() << message->parameters().value(1) // mask - << message->parameters().value(4) // server - << message->parameters().value(6)); // status - QString last = message->parameters().value(7); - int index = last.indexOf(QLatin1Char(' ')); // ignore hopcount - if (index != -1) - d.message->setParameters(d.message->parameters() << last.mid(index + 1)); // real name - emit messageReceived(d.message); - d.message = 0; - break; - } - - case Irc::RPL_CHANNELMODEIS: - d.message = new IrcModeMessage(d.connection); - d.message->setPrefix(message->prefix()); - d.message->setTimeStamp(message->timeStamp()); - d.message->setCommand(QString::number(message->code())); - d.message->setParameters(message->parameters().mid(1)); - emit messageReceived(d.message); - d.message = 0; - break; - } -} -#endif // IRC_DOXYGEN - -#include "moc_ircmessagebuilder_p.cpp" - -IRC_END_NAMESPACE diff --git a/src/libcommuni/src/core/ircmessagedecoder.cpp b/src/libcommuni/src/core/ircmessagedecoder.cpp deleted file mode 100644 index 1e2eb25..0000000 --- a/src/libcommuni/src/core/ircmessagedecoder.cpp +++ /dev/null @@ -1,73 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "ircmessagedecoder_p.h" -#include <IrcGlobal> -#include <QSet> - -#ifndef IRC_DOXYGEN -extern "C" { - int IsUTF8Text(const char* utf8, int len); -} - -IRC_BEGIN_NAMESPACE - -IRC_CORE_EXPORT bool irc_is_supported_encoding(const QByteArray& encoding) -{ - static QSet<QByteArray> codecs = QTextCodec::availableCodecs().toSet(); - return codecs.contains(encoding); -} - -IrcMessageDecoder::IrcMessageDecoder() -{ - initialize(); -} - -IrcMessageDecoder::~IrcMessageDecoder() -{ - uninitialize(); -} - -QString IrcMessageDecoder::decode(const QByteArray& data, const QByteArray& encoding) const -{ - QTextCodec* codec = 0; - if (IsUTF8Text(data, data.length())) { - codec = QTextCodec::codecForName("UTF-8"); - } else { - QByteArray name = codecForData(data); - codec = QTextCodec::codecForName(name); - } - - if (!codec) - codec = QTextCodec::codecForName(encoding); - Q_ASSERT(codec); - return codec->toUnicode(data); -} -#endif // IRC_DOXYGEN - -IRC_END_NAMESPACE diff --git a/src/libcommuni/src/core/ircmessagedecoder_icu.cpp b/src/libcommuni/src/core/ircmessagedecoder_icu.cpp deleted file mode 100644 index 2c303fc..0000000 --- a/src/libcommuni/src/core/ircmessagedecoder_icu.cpp +++ /dev/null @@ -1,68 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "ircmessagedecoder_p.h" -#include <unicode/ucsdet.h> - -IRC_BEGIN_NAMESPACE - -#ifndef IRC_DOXYGEN -#define UCSD(x) reinterpret_cast<UCharsetDetector*>(x) - -void IrcMessageDecoder::initialize() -{ - UErrorCode status = U_ZERO_ERROR; - d.detector = ucsdet_open(&status); - if (U_FAILURE(status)) - qWarning("IrcMessageDecoder: ICU initialization failed: %s", u_errorName(status)); -} - -void IrcMessageDecoder::uninitialize() -{ - ucsdet_close(UCSD(d.detector)); -} - -QByteArray IrcMessageDecoder::codecForData(const QByteArray &data) const -{ - QByteArray encoding; - UErrorCode status = U_ZERO_ERROR; - if (d.detector) { - ucsdet_setText(UCSD(d.detector), data.constData(), data.length(), &status); - if (!U_FAILURE(status)) { - const UCharsetMatch* match = ucsdet_detect(UCSD(d.detector), &status); - if (match && !U_FAILURE(status)) - encoding = ucsdet_getName(match, &status); - } - } - if (U_FAILURE(status)) - qWarning("IrcMessageDecoder::codecForData() failed: %s", u_errorName(status)); - return encoding; -} -#endif // IRC_DOXYGEN - -IRC_END_NAMESPACE diff --git a/src/libcommuni/src/core/ircmessagedecoder_uchardet.cpp b/src/libcommuni/src/core/ircmessagedecoder_uchardet.cpp deleted file mode 100644 index 8f0be8b..0000000 --- a/src/libcommuni/src/core/ircmessagedecoder_uchardet.cpp +++ /dev/null @@ -1,56 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "ircmessagedecoder_p.h" -#include "uchardet.h" - -IRC_BEGIN_NAMESPACE - -#ifndef IRC_DOXYGEN -#define UCD(x) reinterpret_cast<uchardet_t>(x) - -void IrcMessageDecoder::initialize() -{ - d.detector = uchardet_new(); -} - -void IrcMessageDecoder::uninitialize() -{ - uchardet_delete(UCD(d.detector)); -} - -QByteArray IrcMessageDecoder::codecForData(const QByteArray &data) const -{ - uchardet_reset(UCD(d.detector)); - uchardet_handle_data(UCD(d.detector), data.constData(), data.length()); - uchardet_data_end(UCD(d.detector)); - return uchardet_get_charset(UCD(d.detector)); -} -#endif // IRC_DOXYGEN - -IRC_END_NAMESPACE diff --git a/src/libcommuni/src/core/ircnetwork.cpp b/src/libcommuni/src/core/ircnetwork.cpp deleted file mode 100644 index d73a9be..0000000 --- a/src/libcommuni/src/core/ircnetwork.cpp +++ /dev/null @@ -1,687 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "ircnetwork.h" -#include "ircnetwork_p.h" -#include "ircconnection_p.h" -#include "ircprotocol.h" -#include "ircconnection.h" -#include "irccommand.h" -#include <QMetaEnum> -#include <QPointer> - -IRC_BEGIN_NAMESPACE - -/*! - \file ircnetwork.h - \brief \#include <IrcNetwork> - */ - -/*! - \class IrcNetwork ircnetwork.h IrcNetwork - \ingroup core - \brief Provides network information and capability management. - - \section info Network information - - IrcNetwork provides various information about the IRC network of a - \ref IrcConnection::network "connection". This includes the \ref name - "network name", supported \ref channelTypes "channel types", channel - user \ref modes "mode characters" and \ref prefixes "prefix letters", - and various \ref numericLimit "numeric limitations", such as the maximum - nick, channel, topic and message lengths. - - Furthermore, IrcNetwork provides convenient methods for converting channel user - \ref modeToPrefix() "modes to prefixes" and \ref prefixToMode() "vice versa" and - testing whether a target name \ref isChannel() "is a channel". - - \note Most properties have empty values until the network - information has been \ref initialized. - - \section capabilities Capability management - - IrcNetwork also provides means for capability management. It maintais a - list of \ref availableCapabilities "available" and \ref activeCapabilities - "active" capabilities, automatically \ref requestedCapabilities "requests" - desired capabilities, and provides convenient methods for \ref requestCapability() - "manual capability requests". - - \sa IrcConnection::network - */ - -/*! - \fn void IrcNetwork::requestingCapabilities() - - This signal is emitted when capabilities are being requested. - - Normally it is enough to add the desired capabilities to the - list of \ref requestedCapabilities "requested capabilities". - Connect to this signal in order to implement more advanced - capability handling eg. based on which capabilities are \ref - availableCapabilities "available". - - \sa requestedCapabilities, availableCapabilities - */ - -/*! - \enum IrcNetwork::ModeType - This enum describes the channel mode types. - */ - -/*! - \var IrcNetwork::TypeA - \brief Type A modes - - Modes that add or remove an address to or from a list. - These modes always take a parameter when sent by the server to a - client; when sent by a client, they may be specified without a - parameter, which requests the server to display the current - contents of the corresponding list on the channel to the client. - */ - -/*! - \var IrcNetwork::TypeB - \brief Type B modes - - Modes that change a setting on the channel. These modes - always take a parameter. - */ - -/*! - \var IrcNetwork::TypeC - \brief Type C modes - - Modes that change a setting on the channel. These modes - take a parameter only when set; the parameter is absent when the - mode is removed both in the client's and server's MODE command. - */ - -/*! - \var IrcNetwork::TypeD - \brief Type D modes - - Modes that change a setting on the channel. These modes - never take a parameter. - */ - -/*! - \var IrcNetwork::AllTypes - \brief All type modes - */ - -/*! - \enum IrcNetwork::Limit - This enum describes the numeric limit types. - */ - -/*! - \var IrcNetwork::NickLength - \brief The maximum nick name length - */ - -/*! - \var IrcNetwork::ChannelLength - \brief The maximum channel name length - */ - -/*! - \var IrcNetwork::TopicLength - \brief The maximum channel topic length - */ - -/*! - \var IrcNetwork::MessageLength - \brief The maximum message length - */ - -/*! - \var IrcNetwork::KickReasonLength - \brief The maximum kick reason length - */ - -/*! - \var IrcNetwork::AwayReasonLength - \brief The maximum away reason length - */ - -/*! - \var IrcNetwork::ModeCount - \brief The maximum number of channel modes allowed per mode command - */ - -#ifndef IRC_DOXYGEN -IrcNetworkPrivate::IrcNetworkPrivate() : q_ptr(0), initialized(false) -{ -} - -static QHash<QString, int> numericValues(const QString& parameter) -{ - QHash<QString, int> values; - const QStringList keyValues = parameter.split(",", QString::SkipEmptyParts); - foreach (const QString& keyValue, keyValues) - values.insert(keyValue.section(":", 0, 0), keyValue.section(":", 1, 1).toInt()); - return values; -} - -void IrcNetworkPrivate::setInfo(const QHash<QString, QString>& info) -{ - Q_Q(IrcNetwork); - if (info.contains("NETWORK")) - setName(info.value("NETWORK")); - if (info.contains("PREFIX")) { - const QString pfx = info.value("PREFIX"); - setModes(pfx.mid(1, pfx.indexOf(')') - 1).split("", QString::SkipEmptyParts)); - setPrefixes(pfx.mid(pfx.indexOf(')') + 1).split("", QString::SkipEmptyParts)); - } - if (info.contains("CHANTYPES")) - setChannelTypes(info.value("CHANTYPES").split("", QString::SkipEmptyParts)); - - // TODO: - if (info.contains("NICKLEN")) - numericLimits.insert("NICKLEN", info.value("NICKLEN").toInt()); - if (info.contains("CHANNELLEN")) - numericLimits.insert("CHANNELLEN", info.value("CHANNELLEN").toInt()); - if (info.contains("TOPICLEN")) - numericLimits.insert("TOPICLEN", info.value("TOPICLEN").toInt()); - if (info.contains("KICKLEN")) - numericLimits.insert("KICKLEN", info.value("KICKLEN").toInt()); - if (info.contains("AWAYLEN")) - numericLimits.insert("AWAYLEN", info.value("AWAYLEN").toInt()); - if (info.contains("MODES")) - numericLimits.insert("MODES", info.value("MODES").toInt()); - if (info.contains("CHANMODES")) - channelModes = info.value("CHANMODES").split(",", QString::SkipEmptyParts); - if (info.contains("MAXLIST")) - modeLimits = numericValues(info.value("MAXLIST")); - if (info.contains("CHANLIMIT")) - channelLimits = numericValues(info.value("CHANLIMIT")); - if (info.contains("TARGMAX")) - targetLimits = numericValues(info.value("TARGMAX")); - - if (!initialized) { - initialized = true; - emit q->initialized(); - } -} - -void IrcNetworkPrivate::setAvailableCapabilities(const QSet<QString>& capabilities) -{ - Q_Q(IrcNetwork); - if (availableCaps != capabilities) { - availableCaps = capabilities; - emit q->availableCapabilitiesChanged(availableCaps.toList()); - } -} - -void IrcNetworkPrivate::setActiveCapabilities(const QSet<QString>& capabilities) -{ - Q_Q(IrcNetwork); - if (activeCaps != capabilities) { - activeCaps = capabilities; - emit q->activeCapabilitiesChanged(activeCaps.toList()); - } -} - -void IrcNetworkPrivate::setName(const QString& value) -{ - Q_Q(IrcNetwork); - if (name != value) { - name = value; - emit q->nameChanged(value); - } -} - -void IrcNetworkPrivate::setModes(const QStringList& value) -{ - Q_Q(IrcNetwork); - if (modes != value) { - modes = value; - emit q->modesChanged(value); - } -} - -void IrcNetworkPrivate::setPrefixes(const QStringList& value) -{ - Q_Q(IrcNetwork); - if (prefixes != value) { - prefixes = value; - emit q->prefixesChanged(value); - } -} - -void IrcNetworkPrivate::setChannelTypes(const QStringList& value) -{ - Q_Q(IrcNetwork); - if (channelTypes != value) { - channelTypes = value; - emit q->channelTypesChanged(value); - } -} -#endif // IRC_DOXYGEN - -/*! - \internal - Constructs a new network object for IRC \a connection. - */ -IrcNetwork::IrcNetwork(IrcConnection* connection) : QObject(connection), d_ptr(new IrcNetworkPrivate) -{ - Q_D(IrcNetwork); - d->q_ptr = this; - d->connection = connection; -} - -/*! - \internal - Destructs the IRC network. - */ -IrcNetwork::~IrcNetwork() -{ -} - -/*! - \property bool IrcNetwork::initialized - This property holds whether the network information has been initialized. - - Most properties have empty values until the server provides the - relevant network information during the client-server handshake. - - \par Access function: - \li bool <b>isInitialized</b>() const - - \par Notifier signal: - \li void <b>initialized</b>() - */ -bool IrcNetwork::isInitialized() -{ - Q_D(const IrcNetwork); - return d->initialized; -} - -/*! - This property holds the network name. - - \par Access function: - \li QString <b>name</b>() const - - \par Notifier signal: - \li void <b>nameChanged</b>(const QString& name) - */ -QString IrcNetwork::name() const -{ - Q_D(const IrcNetwork); - return d->name; -} - -/*! - This property holds the supported channel user mode letters. - - Examples of typical channel user modes: - Description | Mode | Prefix - -----------------|------------|------- - Channel operator | \b o | @ - Voiced user | \b v | + - - \par Access function: - \li QStringList <b>modes</b>() const - - \par Notifier signal: - \li void <b>modesChanged</b>(const QStringList& modes) - - \sa prefixes, modeToPrefix() - */ -QStringList IrcNetwork::modes() const -{ - Q_D(const IrcNetwork); - return d->modes; -} - -/*! - This property holds the supported channel user mode prefix characters. - - Examples of typical channel user modes: - Description | Mode | Prefix - -----------------|------------|------- - Channel operator | o | \b @ - Voiced user | v | \b + - - \par Access function: - \li QStringList <b>prefixes</b>() const - - \par Notifier signal: - \li void <b>prefixesChanged</b>(const QStringList& prefixes) - - \sa modes, prefixToMode() - */ -QStringList IrcNetwork::prefixes() const -{ - Q_D(const IrcNetwork); - return d->prefixes; -} - -/*! - Converts a channel user mode letter to a prefix character. - - \sa modes, prefixToMode() - */ -QString IrcNetwork::modeToPrefix(const QString& mode) const -{ - Q_D(const IrcNetwork); - return d->prefixes.value(d->modes.indexOf(mode)); -} - -/*! - Converts a channel mode prefix character to a mode letter. - - \sa prefixes, modeToPrefix() - */ -QString IrcNetwork::prefixToMode(const QString& prefix) const -{ - Q_D(const IrcNetwork); - return d->modes.value(d->prefixes.indexOf(prefix)); -} - -/*! - This property holds the supported channel type prefix characters. - - Examples of typical channel types: - Description | Type | Example - -----------------|------|--------- - Normal channel | \# | \#communi - Local channel | & | &foo - - \par Access function: - \li QStringList <b>channelTypes</b>() const - - \par Notifier signal: - \li void <b>channelTypesChanged</b>(const QStringList& types) - */ -QStringList IrcNetwork::channelTypes() const -{ - Q_D(const IrcNetwork); - return d->channelTypes; -} - -/*! - Returns \c true if the \a name is a channel. - - \code - QString name = ...; - if (connection->network()->isChannel(name)) - doSomeChannelAction(name); - \endcode - - \sa channelTypes - */ -bool IrcNetwork::isChannel(const QString& name) const -{ - Q_D(const IrcNetwork); - return !name.isEmpty() && d->channelTypes.contains(name.at(0)); -} - -/*! - Returns the supported channel modes for specified \a types. - - \sa ModeType - */ -QStringList IrcNetwork::channelModes(IrcNetwork::ModeTypes types) const -{ - Q_D(const IrcNetwork); - QStringList modes; - if (types & TypeA) - modes += d->channelModes.value(0).split("", QString::SkipEmptyParts); - if (types & TypeB) - modes += d->channelModes.value(1).split("", QString::SkipEmptyParts); - if (types & TypeC) - modes += d->channelModes.value(2).split("", QString::SkipEmptyParts); - if (types & TypeD) - modes += d->channelModes.value(3).split("", QString::SkipEmptyParts); - return modes; -} - -/*! - Returns a numeric type of \a limit, or \c -1 if the limitation is not known. - - \sa modeLimit(), channelLimit(), targetLimit() - */ -int IrcNetwork::numericLimit(Limit limit) const -{ - Q_D(const IrcNetwork); - QString key; - switch (limit) { - case NickLength: key = QLatin1String("NICKLEN"); break; - case ChannelLength: key = QLatin1String("CHANNELLEN"); break; - case TopicLength: key = QLatin1String("TOPICLEN"); break; - case MessageLength: return 512; // RFC 1459 - case KickReasonLength: key = QLatin1String("KICKLEN"); break; - case AwayReasonLength: key = QLatin1String("AWAYLEN"); break; - case ModeCount: key = QLatin1String("MODES"); break; - } - return d->numericLimits.value(key, -1); -} - -/*! - Returns the limit of entries in the list per \a mode, or \c -1 if the limitation is not known. - - \sa modes() - */ -int IrcNetwork::modeLimit(const QString& mode) const -{ - Q_D(const IrcNetwork); - return d->modeLimits.value(mode); -} - -/*! - Returns the limit for a \a type of channels, or \c -1 if the limitation is not known. - - \sa channelTypes() - */ -int IrcNetwork::channelLimit(const QString& type) const -{ - Q_D(const IrcNetwork); - return d->channelLimits.value(type); -} - -/*! - Returns the limit of targets for a \a command, or \c -1 if the limitation is not known. - */ -int IrcNetwork::targetLimit(const QString& command) const -{ - Q_D(const IrcNetwork); - return d->targetLimits.value(command); -} - -/*! - This property holds the available capabilities. - - \par Access function: - \li QStringList <b>availableCapabilities</b>() const - - \par Notifier signal: - \li void <b>availableCapabilitiesChanged</b>(const QStringList& capabilities) - - \sa requestedCapabilities, activeCapabilities - */ -QStringList IrcNetwork::availableCapabilities() const -{ - Q_D(const IrcNetwork); - return d->availableCaps.toList(); -} - -/*! - This property holds the active capabilities. - - \par Access function: - \li QStringList <b>activeCapabilities</b>() const - - \par Notifier signal: - \li void <b>activeCapabilitiesChanged</b>(const QStringList& capabilities) - - \sa requestedCapabilities, availableCapabilities - */ -QStringList IrcNetwork::activeCapabilities() const -{ - Q_D(const IrcNetwork); - return d->activeCaps.toList(); -} - -/*! - Returns \c true if the \a capability is \b available. - - \sa availableCapabilities - */ -bool IrcNetwork::hasCapability(const QString& capability) const -{ - Q_D(const IrcNetwork); - return d->availableCaps.contains(capability); -} - -/*! - Returns \c true if the \a capability is \b active. - - \sa activeCapabilities - */ -bool IrcNetwork::isCapable(const QString& capability) const -{ - Q_D(const IrcNetwork); - return d->activeCaps.contains(capability); -} - -/*! - Requests the specified \a capability. - - \note The \a capability is NOT added to the list of \ref requestedCapabilities - "requested capabilities" to avoid them "piling up". - */ -bool IrcNetwork::requestCapability(const QString& capability) -{ - Q_D(IrcNetwork); - if (d->connection) - return d->connection->sendCommand(IrcCommand::createCapability(QLatin1String("REQ"), capability)); - return false; -} - -/*! - Requests the specified \a capabilities. - - \note The \a capabilities are NOT added to the list of \ref requestedCapabilities - "requested capabilities" to avoid them "piling up". - */ -bool IrcNetwork::requestCapabilities(const QStringList& capabilities) -{ - Q_D(IrcNetwork); - if (d->connection && d->connection->isActive()) - return d->connection->sendCommand(IrcCommand::createCapability(QLatin1String("REQ"), capabilities)); - return false; -} - -/*! - This property holds the requested capabilities. - - These capabilities are automatically requested during the handshake, - right after requestingCapabilities() has been emitted. - - \par Access functions: - \li QStringList <b>requestedCapabilities</b>() const - \li void <b>setRequestedCapabilities</b>(const QStringList& capabilities) - - \par Notifier signal: - \li void <b>requestedCapabilitiesChanged</b>(const QStringList& capabilities) - - \sa availableCapabilities, activeCapabilities - */ -QStringList IrcNetwork::requestedCapabilities() const -{ - Q_D(const IrcNetwork); - return d->requestedCaps.toList(); -} - -void IrcNetwork::setRequestedCapabilities(const QStringList& capabilities) -{ - Q_D(IrcNetwork); - const QSet<QString> caps = capabilities.toSet(); - if (d->requestedCaps != caps) { - d->requestedCaps = caps; - emit requestedCapabilitiesChanged(caps.toList()); - } -} - -#ifndef QT_NO_DEBUG_STREAM -QDebug operator<<(QDebug debug, IrcNetwork::Limit limit) -{ - const int index = IrcNetwork::staticMetaObject.indexOfEnumerator("Limit"); - QMetaEnum enumerator = IrcNetwork::staticMetaObject.enumerator(index); - const char* key = enumerator.valueToKey(limit); - debug << (key ? key : "Unknown"); - return debug; -} - -QDebug operator<<(QDebug debug, IrcNetwork::ModeType type) -{ - const int index = IrcNetwork::staticMetaObject.indexOfEnumerator("ModeType"); - QMetaEnum enumerator = IrcNetwork::staticMetaObject.enumerator(index); - const char* key = enumerator.valueToKey(type); - debug << (key ? key : "Unknown"); - return debug; -} - -QDebug operator<<(QDebug debug, IrcNetwork::ModeTypes types) -{ - QStringList lst; - if (types == IrcNetwork::AllTypes) { - lst << "AllTypes"; - } else { - if (types & IrcNetwork::TypeA) - lst << "TypeA"; - if (types & IrcNetwork::TypeB) - lst << "TypeB"; - if (types & IrcNetwork::TypeC) - lst << "TypeC"; - if (types & IrcNetwork::TypeD) - lst << "TypeD"; - } - debug.nospace() << '(' << qPrintable(lst.join("|")) << ')'; - return debug; -} - -QDebug operator<<(QDebug debug, const IrcNetwork* network) -{ - if (!network) - return debug << "IrcNetwork(0x0) "; - debug.nospace() << network->metaObject()->className() << '(' << (void*) network; - if (!network->objectName().isEmpty()) - debug.nospace() << ", name=" << qPrintable(network->objectName()); - if (!network->name().isEmpty()) - debug.nospace() << ", network=" << qPrintable(network->name()); - debug.nospace() << ')'; - return debug.space(); -} -#endif // QT_NO_DEBUG_STREAM - -#include "moc_ircnetwork.cpp" - -IRC_END_NAMESPACE diff --git a/src/libcommuni/src/core/ircprotocol.cpp b/src/libcommuni/src/core/ircprotocol.cpp deleted file mode 100644 index 9d42126..0000000 --- a/src/libcommuni/src/core/ircprotocol.cpp +++ /dev/null @@ -1,480 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "ircprotocol.h" -#include "ircconnection_p.h" -#include "ircmessagebuilder_p.h" -#include "ircnetwork_p.h" -#include "ircconnection.h" -#include "ircmessage.h" -#include "irccommand.h" -#include "irc.h" -#include <QDebug> - -IRC_BEGIN_NAMESPACE - -/*! - \file ircprotocol.h - \brief \#include <IrcProtocol> - */ - -/*! - \since 3.2 - \class IrcProtocol ircprotocol.h IrcProtocol - \ingroup core - \brief Implements the IRC protocol and provides means for implementing support for custom protocols. - - \sa IrcConnection::protocol - */ - -#ifndef IRC_DOXYGEN -class IrcProtocolPrivate -{ - Q_DECLARE_PUBLIC(IrcProtocol) - -public: - IrcProtocolPrivate(); - - void authenticate(bool secure); - - void readLines(const QByteArray& delimiter); - void processLine(const QByteArray& line); - - void handleNumericMessage(IrcNumericMessage* msg); - void handlePrivateMessage(IrcPrivateMessage* msg); - void handleCapabilityMessage(IrcCapabilityMessage* msg); - - void _irc_pauseHandshake(); - void _irc_resumeHandshake(); - - IrcProtocol* q_ptr; - IrcConnection* connection; - IrcMessageBuilder* builder; - QHash<QString, QString> info; - QByteArray buffer; - bool resumed; - bool authed; -}; - -IrcProtocolPrivate::IrcProtocolPrivate() : q_ptr(0), connection(0), builder(0), resumed(false), authed(false) -{ -} - -void IrcProtocolPrivate::authenticate(bool secure) -{ - const QString password = connection->password(); - if (!password.isEmpty()) { - if (secure) { - const QByteArray userName = connection->userName().toUtf8(); - const QByteArray data = userName + '\0' + userName + '\0' + password.toUtf8(); - authed = connection->sendData("AUTHENTICATE " + data.toBase64()); - } else { - authed = connection->sendRaw(QString("PASS %1").arg(password)); - } - } -} - -void IrcProtocolPrivate::readLines(const QByteArray& delimiter) -{ - int i = -1; - while ((i = buffer.indexOf(delimiter)) != -1) { - QByteArray line = buffer.left(i).trimmed(); - buffer = buffer.mid(i + delimiter.length()); - if (!line.isEmpty()) - processLine(line); - } -} - -void IrcProtocolPrivate::processLine(const QByteArray& line) -{ - Q_Q(IrcProtocol); - static bool dbg = qgetenv("IRC_DEBUG").toInt(); - if (dbg) qDebug() << line; - - if (line.startsWith("AUTHENTICATE") && !connection->saslMechanism().isEmpty()) { - const QList<QByteArray> args = line.split(' '); - if (args.count() == 2 && args.at(1) == "+") - authenticate(true); - if (!connection->isConnected()) - QMetaObject::invokeMethod(q, "_irc_resumeHandshake", Qt::QueuedConnection); - return; - } - - IrcMessage* msg = IrcMessage::fromData(line, connection); - if (msg) { - msg->setEncoding(connection->encoding()); - - switch (msg->type()) { - case IrcMessage::Capability: - handleCapabilityMessage(static_cast<IrcCapabilityMessage*>(msg)); - break; - case IrcMessage::Nick: - if (msg->flags() & IrcMessage::Own) - q->setNickName(static_cast<IrcNickMessage*>(msg)->newNick()); - break; - case IrcMessage::Numeric: - handleNumericMessage(static_cast<IrcNumericMessage*>(msg)); - break; - case IrcMessage::Ping: - connection->sendRaw("PONG " + static_cast<IrcPingMessage*>(msg)->argument()); - break; - case IrcMessage::Private: - handlePrivateMessage(static_cast<IrcPrivateMessage*>(msg)); - break; - default: - break; - } - q->receiveMessage(msg); - } -} - -void IrcProtocolPrivate::handleNumericMessage(IrcNumericMessage* msg) -{ - Q_Q(IrcProtocol); - switch (msg->code()) { - case Irc::RPL_WELCOME: - q->setNickName(msg->parameters().value(0)); - q->setStatus(IrcConnection::Connected); - break; - case Irc::RPL_ISUPPORT: { - foreach (const QString& param, msg->parameters().mid(1)) { - QStringList keyValue = param.split("=", QString::SkipEmptyParts); - info.insert(keyValue.value(0), keyValue.value(1)); - } - break; - } - case Irc::ERR_NOMOTD: - case Irc::RPL_MOTDSTART: - q->setInfo(info); - break; - case Irc::ERR_NICKNAMEINUSE: - case Irc::ERR_NICKCOLLISION: { - QString alternate = connection->nickName(); - emit connection->nickNameReserved(&alternate); - if (!alternate.isEmpty() && alternate != connection->nickName()) { - connection->setNickName(alternate); - } else { - emit connection->nickNameRequired(msg->parameters().value(1), &alternate); - if (!alternate.isEmpty() && alternate != connection->nickName()) - connection->setNickName(alternate); - } - break; - } - case Irc::ERR_BADCHANNELKEY: { - QString key; - QString channel = msg->parameters().value(1); - emit connection->channelKeyRequired(channel, &key); - if (!key.isEmpty()) - connection->sendCommand(IrcCommand::createJoin(channel, key)); - break; - } - default: - break; - } -} - -void IrcProtocolPrivate::handlePrivateMessage(IrcPrivateMessage* msg) -{ - if (msg->isRequest()) { - IrcCommand* reply = IrcConnectionPrivate::get(connection)->createCtcpReply(msg); - if (reply) - connection->sendCommand(reply); - } -} - -static void handleCapability(QSet<QString>* caps, const QString& cap) -{ - Q_ASSERT(caps); - // sticky modifier (once the cap is enabled, it cannot be disabled) - QLatin1Char stickyMod('='); - // ack modifier (the cap must be acked by the client to fully enable/disable) - QLatin1Char ackMod('~'); - // disable modifier (the cap should be disabled) - QLatin1Char disMod('-'); - - QString name = cap; - while (name.startsWith(stickyMod) || name.startsWith(ackMod)) - name.remove(0, 1); - - if (name.startsWith(disMod)) - caps->remove(name.mid(1)); - else - caps->insert(name); -} - -void IrcProtocolPrivate::handleCapabilityMessage(IrcCapabilityMessage* msg) -{ - Q_Q(IrcProtocol); - const bool connected = connection->isConnected(); - const QString subCommand = msg->subCommand(); - if (subCommand == "LS") { - QSet<QString> availableCaps = connection->network()->availableCapabilities().toSet(); - foreach (const QString& cap, msg->capabilities()) - handleCapability(&availableCaps, cap); - q->setAvailableCapabilities(availableCaps); - - if (!connected) { - QMetaObject::invokeMethod(connection->network(), "requestingCapabilities"); - QStringList requestedCaps = connection->network()->requestedCapabilities(); - const QStringList params = msg->parameters(); - if (params.value(params.count() - 1) != QLatin1String("*")) { - if (!connection->saslMechanism().isEmpty() && availableCaps.contains(QLatin1String("sasl"))) - requestedCaps += QLatin1String("sasl"); - } - if (!requestedCaps.isEmpty()) - connection->sendRaw("CAP REQ :" + requestedCaps.join(" ")); - else - QMetaObject::invokeMethod(q, "_irc_resumeHandshake", Qt::QueuedConnection); - } - } else if (subCommand == "ACK" || subCommand == "NAK") { - bool auth = false; - if (subCommand == "ACK") { - QSet<QString> activeCaps = connection->network()->activeCapabilities().toSet(); - foreach (const QString& cap, msg->capabilities()) { - handleCapability(&activeCaps, cap); - if (cap == "sasl" && !connection->saslMechanism().isEmpty() && !connection->password().isEmpty()) - auth = connection->sendRaw("AUTHENTICATE " + connection->saslMechanism()); - } - q->setActiveCapabilities(activeCaps); - } - - if (!connected && !auth) - QMetaObject::invokeMethod(q, "_irc_resumeHandshake", Qt::QueuedConnection); - } -} - -void IrcProtocolPrivate::_irc_pauseHandshake() -{ - // Send CAP LS first; if the server understands it this will - // temporarily pause the handshake until CAP END is sent, so we - // know whether the server supports the CAP extension. - connection->sendData("CAP LS"); - resumed = false; - authed = false; -} - -void IrcProtocolPrivate::_irc_resumeHandshake() -{ - if (!resumed && !connection->isConnected()) { - if (!authed && !connection->saslMechanism().isEmpty() && !connection->password().isEmpty()) - authenticate(false); - connection->sendData("CAP END"); - } - resumed = true; -} -#endif // IRC_DOXYGEN - -/*! - Constructs a new IRC protocol for \a connection. - */ -IrcProtocol::IrcProtocol(IrcConnection* connection) : QObject(connection), d_ptr(new IrcProtocolPrivate) -{ - Q_D(IrcProtocol); - d->q_ptr = this; - d->connection = connection; - d->builder = new IrcMessageBuilder(connection); - connect(d->builder, SIGNAL(messageReceived(IrcMessage*)), this, SLOT(receiveMessage(IrcMessage*))); -} - -/*! - Destructs the IRC protocol. - */ -IrcProtocol::~IrcProtocol() -{ - Q_D(IrcProtocol); - delete d->builder; -} - -/*! - This property holds the connection. - - \par Access function: - \li \ref IrcConnection* <b>connection</b>() const - */ -IrcConnection* IrcProtocol::connection() const -{ - Q_D(const IrcProtocol); - return d->connection; -} - -/*! - This property holds the socket. - - \par Access functions: - \li \ref QAbstractSocket* <b>socket</b>() const - */ -QAbstractSocket* IrcProtocol::socket() const -{ - Q_D(const IrcProtocol); - return d->connection->socket(); -} - -/*! - This method is called when the connection has been established. - - The default implementation sends the \c NICK, \c USER and \c PASSWORD commands as defined in - <a href="http://tools.ietf.org/html/rfc1459">RFC 1459</a>. - - Furthermore, it sends a <tt>CAP LS</tt> command as specified in - <a href="http://tools.ietf.org/html/draft-mitchell-irc-capabilities-01">IRC Client Capabilities Extension</a>. - */ -void IrcProtocol::open() -{ - Q_D(IrcProtocol); - d->_irc_pauseHandshake(); - - if (d->connection->saslMechanism().isEmpty() && !d->connection->password().isEmpty()) - d->authenticate(false); - - d->connection->sendRaw(QString("NICK %1").arg(d->connection->nickName())); - d->connection->sendRaw(QString("USER %1 hostname servername :%2").arg(d->connection->userName(), d->connection->realName())); -} - -/*! - This method is called when the connection has been lost. - */ -void IrcProtocol::close() -{ -} - -/*! - This method is called when the \ref socket has new data available for read. - - The default implementation reads lines as specified in - <a href="http://tools.ietf.org/html/rfc1459">RFC 1459</a>. - - \sa socket - */ -void IrcProtocol::read() -{ - Q_D(IrcProtocol); - d->buffer += socket()->readAll(); - // try reading RFC compliant message lines first - d->readLines("\r\n"); - // fall back to RFC incompliant lines... - d->readLines("\n"); -} - -/*! - This method is called when raw \a data should be written to the \ref socket. - - The default implementation writes the data and appends \c "\r\n" as specified in - <a href="http://tools.ietf.org/html/rfc1459">RFC 1459</a>. - - \sa socket - */ -bool IrcProtocol::write(const QByteArray& data) -{ - return socket()->write(data + QByteArray("\r\n")) != -1; -} - -/*! - This method should be called by the protocol implementation - to make the underlying IRC connection receive a \a message. - - \sa IrcConnection::messageReceived() - */ -void IrcProtocol::receiveMessage(IrcMessage* message) -{ - Q_D(IrcProtocol); - IrcConnectionPrivate* priv = IrcConnectionPrivate::get(d->connection); - priv->receiveMessage(message); - if (message->type() == IrcMessage::Numeric) - d->builder->processMessage(static_cast<IrcNumericMessage*>(message)); -} - -/*! - This method should be called by the protocol implementation to - notify the underlying IRC connection about a nick \a name change. - - \sa IrcConnection::nickName - */ -void IrcProtocol::setNickName(const QString& name) -{ - Q_D(IrcProtocol); - IrcConnectionPrivate* priv = IrcConnectionPrivate::get(d->connection); - priv->setNick(name); -} - -/*! - This method should be called by the protocol implementation - to notify the underlying IRC connection about a \a status change. - - \sa IrcConnection::status - */ -void IrcProtocol::setStatus(IrcConnection::Status status) -{ - Q_D(IrcProtocol); - IrcConnectionPrivate* priv = IrcConnectionPrivate::get(d->connection); - priv->setStatus(status); -} - -/*! - This method should be called by the protocol implementation - to initialize the underlying IRC network connection \a info. - - \sa IrcNetwork::initialized - */ -void IrcProtocol::setInfo(const QHash<QString, QString>& info) -{ - Q_D(IrcProtocol); - if (!info.isEmpty()) { - IrcConnectionPrivate* priv = IrcConnectionPrivate::get(d->connection); - priv->setInfo(info); - } -} - -/*! - This method should be called by the protocol implementation to notify - the underlying IRC network about a change in available \a capabilities. - - \sa IrcNetwork::availableCapabilities - */ -void IrcProtocol::setAvailableCapabilities(const QSet<QString>& capabilities) -{ - Q_D(IrcProtocol); - IrcNetworkPrivate* priv = IrcNetworkPrivate::get(d->connection->network()); - priv->setAvailableCapabilities(capabilities); -} - -/*! - This method should be called by the protocol implementation to notify - the underlying IRC network about a change in active \a capabilities. - - \sa IrcNetwork::activeCapabilities - */ -void IrcProtocol::setActiveCapabilities(const QSet<QString>& capabilities) -{ - Q_D(IrcProtocol); - IrcNetworkPrivate* priv = IrcNetworkPrivate::get(d->connection->network()); - priv->setActiveCapabilities(capabilities); -} - -#include "moc_ircprotocol.cpp" - -IRC_END_NAMESPACE diff --git a/src/libcommuni/src/imports/imports.pri b/src/libcommuni/src/imports/imports.pri deleted file mode 100644 index 1edd926..0000000 --- a/src/libcommuni/src/imports/imports.pri +++ /dev/null @@ -1,17 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -TEMPLATE = lib -TARGET = $$qtLibraryTarget($$TARGET) -CONFIG += plugin -!verbose:CONFIG += silent -contains(QT_CONFIG, debug_and_release) { - win32|mac:!wince*:!win32-msvc:!macx-xcode:CONFIG += debug_and_release build_all -} - -IRC_SOURCEDIR = $$PWD/../../ -IRC_BUILDDIR = $$OUT_PWD/../../../ - -IRC_MODULES = IrcCore IrcModel IrcUtil -include(../module_deps.pri) diff --git a/src/libcommuni/src/imports/imports.pro b/src/libcommuni/src/imports/imports.pro deleted file mode 100644 index 425909a..0000000 --- a/src/libcommuni/src/imports/imports.pro +++ /dev/null @@ -1,7 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -TEMPLATE = subdirs -greaterThan(QT_MAJOR_VERSION, 4):qtHaveModule(qml):SUBDIRS += qml2 -else:!lessThan(QT_MAJOR_VERSION, 4):!lessThan(QT_MINOR_VERSION, 7):SUBDIRS += qml1 diff --git a/src/libcommuni/src/imports/qml1/plugin.cpp b/src/libcommuni/src/imports/qml1/plugin.cpp deleted file mode 100644 index bb66c2e..0000000 --- a/src/libcommuni/src/imports/qml1/plugin.cpp +++ /dev/null @@ -1,138 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include <QtDeclarative> - -#include <IrcCore> -#include <IrcModel> -#include <IrcUtil> - -IRC_BEGIN_NAMESPACE - -class IrcQmlFilter : public QObject, - public IrcCommandFilter, - public IrcMessageFilter -{ - Q_OBJECT - Q_INTERFACES(IrcCommandFilter IrcMessageFilter) - Q_PROPERTY(IrcConnection* connection READ connection WRITE setConnection NOTIFY connectionChanged) - -public: - IrcQmlFilter(QObject* parent = 0) : QObject(parent), conn(0) { } - - IrcConnection* connection() const { return conn; } - void setConnection(IrcConnection* connection) - { - if (conn != connection) { - if (conn) { - conn->removeCommandFilter(this); - conn->removeMessageFilter(this); - } - conn = connection; - if (conn) { - conn->installCommandFilter(this); - conn->installMessageFilter(this); - } - emit connectionChanged(); - } - } - - bool commandFilter(IrcCommand* cmd) - { - // QML: QVariant commandFilter(QVariant) - const QMetaObject* mo = metaObject(); - int idx = mo->indexOfMethod("commandFilter(QVariant)"); - if (idx != -1) { - QVariant ret; - QMetaMethod method = mo->method(idx); - method.invoke(this, Q_RETURN_ARG(QVariant, ret), Q_ARG(QVariant, QVariant::fromValue(cmd))); - return ret.toBool(); - } - return false; - } - - bool messageFilter(IrcMessage* msg) - { - // QML: QVariant messageFilter(QVariant) - const QMetaObject* mo = metaObject(); - int idx = mo->indexOfMethod("messageFilter(QVariant)"); - if (idx != -1) { - QVariant ret; - QMetaMethod method = mo->method(idx); - method.invoke(this, Q_RETURN_ARG(QVariant, ret), Q_ARG(QVariant, QVariant::fromValue(msg))); - return ret.toBool(); - } - return false; - } - -signals: - void connectionChanged(); - -private: - QPointer<IrcConnection> conn; -}; - -class CommuniPlugin : public QDeclarativeExtensionPlugin -{ - Q_OBJECT - -public: - void registerTypes(const char* uri) { - // IrcCore - Irc::registerMetaTypes(); - qmlRegisterType<Irc>(uri, 3, 0, "Irc"); - qmlRegisterType<Irc>(uri, 3, 2, "Irc"); - qmlRegisterType<IrcCommand>(uri, 3, 0, "IrcCommand"); - qmlRegisterType<IrcConnection>(uri, 3, 0, "IrcConnection"); - qmlRegisterUncreatableType<IrcMessage>(uri, 3, 0, "IrcMessage", "Cannot create an instance of IrcMessage. Use IrcConnection::messageReceived() signal instead."); - qmlRegisterUncreatableType<IrcNetwork>(uri, 3, 0, "IrcNetwork", "Cannot create an instance of IrcNetwork. Use IrcConnection::network property instead."); - qmlRegisterType<IrcQmlFilter>(uri, 3, 0, "IrcMessageFilter"); - qmlRegisterType<IrcQmlFilter>(uri, 3, 0, "IrcCommandFilter"); - qmlRegisterType<IrcQmlFilter>(uri, 3, 0, "IrcFilter"); - - // IrcModel - qmlRegisterType<IrcBuffer>(uri, 3, 0, "IrcBuffer"); - qmlRegisterType<IrcBufferModel>(uri, 3, 0, "IrcBufferModel"); - qmlRegisterType<IrcChannel>(uri, 3, 0, "IrcChannel"); - qmlRegisterType<IrcUser>(uri, 3, 0, "IrcUser"); - qmlRegisterType<IrcUserModel>(uri, 3, 0, "IrcUserModel"); - - // IrcUtil - qmlRegisterType<IrcCommandParser>(uri, 3, 0, "IrcCommandParser"); - qmlRegisterType<IrcLagTimer>(uri, 3, 0, "IrcLagTimer"); - qmlRegisterType<IrcTextFormat>(uri, 3, 0, "IrcTextFormat"); - qmlRegisterUncreatableType<IrcPalette>(uri, 3, 0, "IrcPalette", "Cannot create an instance of IrcPalette. Use IrcTextFormat::palette property instead."); - qmlRegisterType<IrcCompleter>(uri, 3, 1, "IrcCompleter"); - } -}; - -IRC_END_NAMESPACE - -#include "plugin.moc" - -Q_EXPORT_PLUGIN2(communiplugin, CommuniPlugin); diff --git a/src/libcommuni/src/imports/qml1/plugins.qmltypes b/src/libcommuni/src/imports/qml1/plugins.qmltypes deleted file mode 100644 index 1be56cc..0000000 --- a/src/libcommuni/src/imports/qml1/plugins.qmltypes +++ /dev/null @@ -1,1929 +0,0 @@ -import QtQuick.tooling 1.1 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. - -Module { - Component { - name: "Irc" - prototype: "QObject" - exports: [ - "Communi/Irc 3.0" - ] - exportMetaObjectRevisions: [ - 0 - ] - Enum { - name: "Color" - values: { - "White": 0, - "Black": 1, - "Blue": 2, - "Green": 3, - "Red": 4, - "Brown": 5, - "Purple": 6, - "Orange": 7, - "Yellow": 8, - "LightGreen": 9, - "Cyan": 10, - "LightCyan": 11, - "LightBlue": 12, - "Pink": 13, - "Gray": 14, - "LightGray": 15 - } - } - Enum { - name: "DataRole" - values: { - "UserRole": 32, - "BufferRole": 33, - "ChannelRole": 34, - "NameRole": 35, - "PrefixRole": 36, - "ModeRole": 37, - "TitleRole": 38 - } - } - Enum { - name: "SortMethod" - values: { - "SortByHand": 0, - "SortByName": 1, - "SortByTitle": 2, - "SortByActivity": 3 - } - } - Enum { - name: "Code" - values: { - "RPL_WELCOME": 1, - "RPL_YOURHOST": 2, - "RPL_CREATED": 3, - "RPL_MYINFO": 4, - "RPL_ISUPPORT": 5, - "RPL_SNOMASK": 8, - "RPL_STATMEMTOT": 9, - "RPL_BOUNCE": 10, - "RPL_STATMEM": 10, - "RPL_YOURCOOKIE": 14, - "RPL_YOURID": 42, - "RPL_SAVENICK": 43, - "RPL_ATTEMPTINGJUNC": 50, - "RPL_ATTEMPTINGREROUTE": 51, - "RPL_TRACELINK": 200, - "RPL_TRACECONNECTING": 201, - "RPL_TRACEHANDSHAKE": 202, - "RPL_TRACEUNKNOWN": 203, - "RPL_TRACEOPERATOR": 204, - "RPL_TRACEUSER": 205, - "RPL_TRACESERVER": 206, - "RPL_TRACESERVICE": 207, - "RPL_TRACENEWTYPE": 208, - "RPL_TRACECLASS": 209, - "RPL_TRACERECONNECT": 210, - "RPL_STATS": 210, - "RPL_STATSLINKINFO": 211, - "RPL_STATSCOMMANDS": 212, - "RPL_STATSCLINE": 213, - "RPL_STATSNLINE": 214, - "RPL_STATSILINE": 215, - "RPL_STATSKLINE": 216, - "RPL_STATSQLINE": 217, - "RPL_STATSYLINE": 218, - "RPL_ENDOFSTATS": 219, - "RPL_UMODEIS": 221, - "RPL_MODLIST": 222, - "RPL_SQLINE_NICK": 222, - "RPL_STATSZLINE": 225, - "RPL_STATSCOUNT": 226, - "RPL_SERVICEINFO": 231, - "RPL_ENDOFSERVICES": 232, - "RPL_SERVICE": 233, - "RPL_SERVLIST": 234, - "RPL_SERVLISTEND": 235, - "RPL_STATSVERBOSE": 236, - "RPL_STATSENGINE": 237, - "RPL_STATSIAUTH": 239, - "RPL_STATSVLINE": 240, - "RPL_STATSLLINE": 241, - "RPL_STATSUPTIME": 242, - "RPL_STATSOLINE": 243, - "RPL_STATSHLINE": 244, - "RPL_STATSSLINE": 245, - "RPL_STATSPING": 246, - "RPL_STATSBLINE": 247, - "RPL_STATSDEFINE": 248, - "RPL_STATSDEBUG": 249, - "RPL_STATSDLINE": 250, - "RPL_STATSCONN": 250, - "RPL_LUSERCLIENT": 251, - "RPL_LUSEROP": 252, - "RPL_LUSERUNKNOWN": 253, - "RPL_LUSERCHANNELS": 254, - "RPL_LUSERME": 255, - "RPL_ADMINME": 256, - "RPL_ADMINLOC1": 257, - "RPL_ADMINLOC2": 258, - "RPL_ADMINEMAIL": 259, - "RPL_TRACELOG": 261, - "RPL_TRACEPING": 262, - "RPL_TRACEEND": 262, - "RPL_TRYAGAIN": 263, - "RPL_LOCALUSERS": 265, - "RPL_GLOBALUSERS": 266, - "RPL_START_NETSTAT": 267, - "RPL_NETSTAT": 268, - "RPL_END_NETSTAT": 269, - "RPL_PRIVS": 270, - "RPL_SILELIST": 271, - "RPL_ENDOFSILELIST": 272, - "RPL_NOTIFY": 273, - "RPL_ENDNOTIFY": 274, - "RPL_STATSDELTA": 274, - "RPL_VCHANEXIST": 276, - "RPL_VCHANLIST": 277, - "RPL_VCHANHELP": 278, - "RPL_GLIST": 280, - "RPL_ENDOFGLIST": 281, - "RPL_ACCEPTLIST": 281, - "RPL_ENDOFACCEPT": 282, - "RPL_JUPELIST": 282, - "RPL_ENDOFJUPELIST": 283, - "RPL_FEATURE": 284, - "RPL_GLIST_HASH": 285, - "RPL_CHANINFO_HANDLE": 285, - "RPL_NEWHOSTIS": 285, - "RPL_CHANINFO_USERS": 286, - "RPL_CHKHEAD": 286, - "RPL_CHANINFO_CHOPS": 287, - "RPL_CHANUSER": 287, - "RPL_CHANINFO_VOICES": 288, - "RPL_PATCHHEAD": 288, - "RPL_CHANINFO_AWAY": 289, - "RPL_PATCHCON": 289, - "RPL_CHANINFO_OPERS": 290, - "RPL_HELPHDR": 290, - "RPL_DATASTR": 290, - "RPL_CHANINFO_BANNED": 291, - "RPL_HELPOP": 291, - "RPL_ENDOFCHECK": 291, - "RPL_CHANINFO_BANS": 292, - "RPL_HELPTLR": 292, - "RPL_CHANINFO_INVITE": 293, - "RPL_HELPHLP": 293, - "RPL_CHANINFO_INVITES": 294, - "RPL_HELPFWD": 294, - "RPL_CHANINFO_KICK": 295, - "RPL_HELPIGN": 295, - "RPL_CHANINFO_KICKS": 296, - "RPL_END_CHANINFO": 299, - "RPL_NONE": 300, - "RPL_AWAY": 301, - "RPL_USERHOST": 302, - "RPL_ISON": 303, - "RPL_TEXT": 304, - "RPL_UNAWAY": 305, - "RPL_NOWAWAY": 306, - "RPL_WHOISREGNICK": 307, - "RPL_SUSERHOST": 307, - "RPL_NOTIFYACTION": 308, - "RPL_WHOISADMIN": 308, - "RPL_NICKTRACE": 309, - "RPL_WHOISSADMIN": 309, - "RPL_WHOISHELPER": 309, - "RPL_WHOISSVCMSG": 310, - "RPL_WHOISHELPOP": 310, - "RPL_WHOISSERVICE": 310, - "RPL_WHOISUSER": 311, - "RPL_WHOISSERVER": 312, - "RPL_WHOISOPERATOR": 313, - "RPL_WHOWASUSER": 314, - "RPL_ENDOFWHO": 315, - "RPL_WHOISCHANOP": 316, - "RPL_WHOISIDLE": 317, - "RPL_ENDOFWHOIS": 318, - "RPL_WHOISCHANNELS": 319, - "RPL_WHOISVIRT": 320, - "RPL_WHOIS_HIDDEN": 320, - "RPL_WHOISSPECIAL": 320, - "RPL_LISTSTART": 321, - "RPL_LIST": 322, - "RPL_LISTEND": 323, - "RPL_CHANNELMODEIS": 324, - "RPL_UNIQOPIS": 325, - "RPL_CHANNELPASSIS": 325, - "RPL_NOCHANPASS": 326, - "RPL_CHPASSUNKNOWN": 327, - "RPL_CHANNEL_URL": 328, - "RPL_CREATIONTIME": 329, - "RPL_WHOWAS_TIME": 330, - "RPL_WHOISACCOUNT": 330, - "RPL_NOTOPIC": 331, - "RPL_TOPIC": 332, - "RPL_TOPICWHOTIME": 333, - "RPL_LISTUSAGE": 334, - "RPL_COMMANDSYNTAX": 334, - "RPL_LISTSYNTAX": 334, - "RPL_CHANPASSOK": 338, - "RPL_WHOISACTUALLY": 338, - "RPL_BADCHANPASS": 339, - "RPL_INVITING": 341, - "RPL_SUMMONING": 342, - "RPL_INVITED": 345, - "RPL_INVITELIST": 346, - "RPL_ENDOFINVITELIST": 347, - "RPL_EXCEPTLIST": 348, - "RPL_ENDOFEXCEPTLIST": 349, - "RPL_VERSION": 351, - "RPL_WHOREPLY": 352, - "RPL_NAMREPLY": 353, - "RPL_WHOSPCRPL": 354, - "RPL_NAMREPLY_": 355, - "RPL_KILLDONE": 361, - "RPL_CLOSING": 362, - "RPL_CLOSEEND": 363, - "RPL_LINKS": 364, - "RPL_ENDOFLINKS": 365, - "RPL_ENDOFNAMES": 366, - "RPL_BANLIST": 367, - "RPL_ENDOFBANLIST": 368, - "RPL_ENDOFWHOWAS": 369, - "RPL_INFO": 371, - "RPL_MOTD": 372, - "RPL_INFOSTART": 373, - "RPL_ENDOFINFO": 374, - "RPL_MOTDSTART": 375, - "RPL_ENDOFMOTD": 376, - "RPL_KICKEXPIRED": 377, - "RPL_SPAM": 377, - "RPL_BANEXPIRED": 378, - "RPL_WHOISHOST": 378, - "RPL_KICKLINKED": 379, - "RPL_WHOISMODES": 379, - "RPL_BANLINKED": 380, - "RPL_YOURHELPER": 380, - "RPL_YOUREOPER": 381, - "RPL_REHASHING": 382, - "RPL_YOURESERVICE": 383, - "RPL_MYPORTIS": 384, - "RPL_NOTOPERANYMORE": 385, - "RPL_QLIST": 386, - "RPL_IRCOPS": 386, - "RPL_ENDOFQLIST": 387, - "RPL_ENDOFIRCOPS": 387, - "RPL_ALIST": 388, - "RPL_ENDOFALIST": 389, - "RPL_TIME": 391, - "RPL_USERSSTART": 392, - "RPL_USERS": 393, - "RPL_ENDOFUSERS": 394, - "RPL_NOUSERS": 395, - "RPL_HOSTHIDDEN": 396, - "ERR_UNKNOWNERROR": 400, - "ERR_NOSUCHNICK": 401, - "ERR_NOSUCHSERVER": 402, - "ERR_NOSUCHCHANNEL": 403, - "ERR_CANNOTSENDTOCHAN": 404, - "ERR_TOOMANYCHANNELS": 405, - "ERR_WASNOSUCHNICK": 406, - "ERR_TOOMANYTARGETS": 407, - "ERR_NOSUCHSERVICE": 408, - "ERR_NOCOLORSONCHAN": 408, - "ERR_NOORIGIN": 409, - "ERR_NORECIPIENT": 411, - "ERR_NOTEXTTOSEND": 412, - "ERR_NOTOPLEVEL": 413, - "ERR_WILDTOPLEVEL": 414, - "ERR_BADMASK": 415, - "ERR_TOOMANYMATCHES": 416, - "ERR_QUERYTOOLONG": 416, - "ERR_LENGTHTRUNCATED": 419, - "ERR_UNKNOWNCOMMAND": 421, - "ERR_NOMOTD": 422, - "ERR_NOADMININFO": 423, - "ERR_FILEERROR": 424, - "ERR_NOOPERMOTD": 425, - "ERR_TOOMANYAWAY": 429, - "ERR_EVENTNICKCHANGE": 430, - "ERR_NONICKNAMEGIVEN": 431, - "ERR_ERRONEUSNICKNAME": 432, - "ERR_NICKNAMEINUSE": 433, - "ERR_SERVICENAMEINUSE": 434, - "ERR_NORULES": 434, - "ERR_SERVICECONFUSED": 435, - "ERR_BANONCHAN": 435, - "ERR_NICKCOLLISION": 436, - "ERR_UNAVAILRESOURCE": 437, - "ERR_BANNICKCHANGE": 437, - "ERR_NICKTOOFAST": 438, - "ERR_DEAD": 438, - "ERR_TARGETTOOFAST": 439, - "ERR_SERVICESDOWN": 440, - "ERR_USERNOTINCHANNEL": 441, - "ERR_NOTONCHANNEL": 442, - "ERR_USERONCHANNEL": 443, - "ERR_NOLOGIN": 444, - "ERR_SUMMONDISABLED": 445, - "ERR_USERSDISABLED": 446, - "ERR_NONICKCHANGE": 447, - "ERR_NOTIMPLEMENTED": 449, - "ERR_NOTREGISTERED": 451, - "ERR_IDCOLLISION": 452, - "ERR_NICKLOST": 453, - "ERR_HOSTILENAME": 455, - "ERR_ACCEPTFULL": 456, - "ERR_ACCEPTEXIST": 457, - "ERR_ACCEPTNOT": 458, - "ERR_NOHIDING": 459, - "ERR_NOTFORHALFOPS": 460, - "ERR_NEEDMOREPARAMS": 461, - "ERR_ALREADYREGISTERED": 462, - "ERR_NOPERMFORHOST": 463, - "ERR_PASSWDMISMATCH": 464, - "ERR_YOUREBANNEDCREEP": 465, - "ERR_YOUWILLBEBANNED": 466, - "ERR_KEYSET": 467, - "ERR_INVALIDUSERNAME": 468, - "ERR_ONLYSERVERSCANCHANGE": 468, - "ERR_LINKSET": 469, - "ERR_LINKCHANNEL": 470, - "ERR_KICKEDFROMCHAN": 470, - "ERR_CHANNELISFULL": 471, - "ERR_UNKNOWNMODE": 472, - "ERR_INVITEONLYCHAN": 473, - "ERR_BANNEDFROMCHAN": 474, - "ERR_BADCHANNELKEY": 475, - "ERR_BADCHANMASK": 476, - "ERR_NOCHANMODES": 477, - "ERR_NEEDREGGEDNICK": 477, - "ERR_BANLISTFULL": 478, - "ERR_BADCHANNAME": 479, - "ERR_LINKFAIL": 479, - "ERR_NOULINE": 480, - "ERR_CANNOTKNOCK": 480, - "ERR_NOPRIVILEGES": 481, - "ERR_CHANOPRIVSNEEDED": 482, - "ERR_CANTKILLSERVER": 483, - "ERR_RESTRICTED": 484, - "ERR_ISCHANSERVICE": 484, - "ERR_DESYNC": 484, - "ERR_ATTACKDENY": 484, - "ERR_UNIQOPRIVSNEEDED": 485, - "ERR_KILLDENY": 485, - "ERR_CANTKICKADMIN": 485, - "ERR_ISREALSERVICE": 485, - "ERR_NONONREG": 486, - "ERR_HTMDISABLED": 486, - "ERR_ACCOUNTONLY": 486, - "ERR_CHANTOORECENT": 487, - "ERR_MSGSERVICES": 487, - "ERR_TSLESSCHAN": 488, - "ERR_VOICENEEDED": 489, - "ERR_SECUREONLYCHAN": 489, - "ERR_NOOPERHOST": 491, - "ERR_NOSERVICEHOST": 492, - "ERR_NOFEATURE": 493, - "ERR_BADFEATURE": 494, - "ERR_BADLOGTYPE": 495, - "ERR_BADLOGSYS": 496, - "ERR_BADLOGVALUE": 497, - "ERR_ISOPERLCHAN": 498, - "ERR_CHANOWNPRIVNEEDED": 499, - "ERR_UMODEUNKNOWNFLAG": 501, - "ERR_USERSDONTMATCH": 502, - "ERR_GHOSTEDCLIENT": 503, - "ERR_VWORLDWARN": 503, - "ERR_USERNOTONSERV": 504, - "ERR_SILELISTFULL": 511, - "ERR_TOOMANYWATCH": 512, - "ERR_BADPING": 513, - "ERR_INVALID_ERROR": 514, - "ERR_TOOMANYDCC": 514, - "ERR_BADEXPIRE": 515, - "ERR_DONTCHEAT": 516, - "ERR_DISABLED": 517, - "ERR_NOINVITE": 518, - "ERR_LONGMASK": 518, - "ERR_ADMONLY": 519, - "ERR_TOOMANYUSERS": 519, - "ERR_OPERONLY": 520, - "ERR_MASKTOOWIDE": 520, - "ERR_WHOTRUNC": 520, - "ERR_LISTSYNTAX": 521, - "ERR_WHOSYNTAX": 522, - "ERR_WHOLIMEXCEED": 523, - "ERR_QUARANTINED": 524, - "ERR_OPERSPVERIFY": 524, - "ERR_REMOTEPFX": 525, - "ERR_PFXUNROUTABLE": 526, - "ERR_BADHOSTMASK": 550, - "ERR_HOSTUNAVAIL": 551, - "ERR_USINGSLINE": 552, - "ERR_STATSSLINE": 553, - "RPL_LOGON": 600, - "RPL_LOGOFF": 601, - "RPL_WATCHOFF": 602, - "RPL_WATCHSTAT": 603, - "RPL_NOWON": 604, - "RPL_NOWOFF": 605, - "RPL_WATCHLIST": 606, - "RPL_ENDOFWATCHLIST": 607, - "RPL_WATCHCLEAR": 608, - "RPL_ISOPER": 610, - "RPL_ISLOCOP": 611, - "RPL_ISNOTOPER": 612, - "RPL_ENDOFISOPER": 613, - "RPL_DCCSTATUS": 617, - "RPL_DCCLIST": 618, - "RPL_ENDOFDCCLIST": 619, - "RPL_WHOWASHOST": 619, - "RPL_DCCINFO": 620, - "RPL_ENDOFO": 626, - "RPL_SETTINGS": 630, - "RPL_ENDOFSETTINGS": 631, - "RPL_DUMPING": 640, - "RPL_DUMPRPL": 641, - "RPL_EODUMP": 642, - "RPL_TRACEROUTE_HOP": 660, - "RPL_TRACEROUTE_START": 661, - "RPL_MODECHANGEWARN": 662, - "RPL_CHANREDIR": 663, - "RPL_SERVMODEIS": 664, - "RPL_OTHERUMODEIS": 665, - "RPL_ENDOF_GENERIC": 666, - "RPL_WHOWASDETAILS": 670, - "RPL_WHOISSECURE": 671, - "RPL_UNKNOWNMODES": 672, - "RPL_CANNOTSETMODES": 673, - "RPL_LUSERSTAFF": 678, - "RPL_TIMEONSERVERIS": 679, - "RPL_NETWORKS": 682, - "RPL_YOURLANGUAGEIS": 687, - "RPL_LANGUAGE": 688, - "RPL_WHOISSTAFF": 689, - "RPL_WHOISLANGUAGE": 690, - "RPL_HELPSTART": 704, - "RPL_HELPTXT": 705, - "RPL_ENDOFHELP": 706, - "RPL_ETRACEFULL": 708, - "RPL_ETRACE": 709, - "RPL_KNOCK": 710, - "RPL_KNOCKDLVR": 711, - "ERR_TOOMANYKNOCK": 712, - "ERR_CHANOPEN": 713, - "ERR_KNOCKONCHAN": 714, - "ERR_KNOCKDISABLED": 715, - "RPL_TARGUMODEG": 716, - "RPL_TARGNOTIFY": 717, - "RPL_UMODEGMSG": 718, - "RPL_ENDOFOMOTD": 722, - "ERR_NOPRIVS": 723, - "RPL_TESTMARK": 724, - "RPL_TESTLINE": 725, - "RPL_NOTESTLINE": 726, - "RPL_XINFO": 771, - "RPL_XINFOSTART": 773, - "RPL_XINFOEND": 774, - "ERR_CANNOTDOCOMMAND": 972, - "ERR_CANNOTCHANGEUMODE": 973, - "ERR_CANNOTCHANGECHANMODE": 974, - "ERR_CANNOTCHANGESERVERMODE": 975, - "ERR_CANNOTSENDTONICK": 976, - "ERR_UNKNOWNSERVERMODE": 977, - "ERR_SERVERMODELOCK": 979, - "ERR_BADCHARENCODING": 980, - "ERR_TOOMANYLANGUAGES": 981, - "ERR_NOLANGUAGE": 982, - "ERR_TEXTTOOSHORT": 983, - "ERR_NUMERIC_ERR": 999 - } - } - Method { name: "version"; type: "string" } - Method { - name: "codeToString" - type: "string" - Parameter { name: "code"; type: "int" } - } - Method { - name: "nickFromPrefix" - type: "string" - Parameter { name: "prefix"; type: "string" } - } - Method { - name: "identFromPrefix" - type: "string" - Parameter { name: "prefix"; type: "string" } - } - Method { - name: "hostFromPrefix" - type: "string" - Parameter { name: "prefix"; type: "string" } - } - Method { name: "registerMetaTypes" } - } - Component { - name: "IrcBuffer" - prototype: "QObject" - exports: [ - "Communi/IrcBuffer 3.0" - ] - exportMetaObjectRevisions: [ - 0 - ] - Property { name: "title"; type: "string"; isReadonly: true } - Property { name: "name"; type: "string" } - Property { name: "prefix"; type: "string" } - Property { name: "connection"; type: "IrcConnection"; isReadonly: true; isPointer: true } - Property { name: "network"; type: "IrcNetwork"; isReadonly: true; isPointer: true } - Property { name: "model"; type: "IrcBufferModel"; isReadonly: true; isPointer: true } - Property { name: "active"; type: "bool"; isReadonly: true } - Property { name: "channel"; type: "bool"; isReadonly: true } - Property { name: "sticky"; type: "bool" } - Property { name: "persistent"; type: "bool" } - Signal { - name: "titleChanged" - Parameter { name: "title"; type: "string" } - } - Signal { - name: "nameChanged" - Parameter { name: "name"; type: "string" } - } - Signal { - name: "prefixChanged" - Parameter { name: "name"; type: "string" } - } - Signal { - name: "messageReceived" - Parameter { name: "message"; type: "IrcMessage"; isPointer: true } - } - Signal { - name: "destroyed" - Parameter { name: "buffer"; type: "IrcBuffer"; isPointer: true } - } - Signal { - name: "activeChanged" - Parameter { name: "active"; type: "bool" } - } - Signal { - name: "stickyChanged" - Parameter { name: "sticky"; type: "bool" } - } - Signal { - name: "persistentChanged" - Parameter { name: "persistent"; type: "bool" } - } - Method { - name: "setName" - Parameter { name: "name"; type: "string" } - } - Method { - name: "setPrefix" - Parameter { name: "prefix"; type: "string" } - } - Method { - name: "receiveMessage" - Parameter { name: "message"; type: "IrcMessage"; isPointer: true } - } - Method { name: "toChannel"; type: "IrcChannel*" } - Method { - name: "sendCommand" - type: "bool" - Parameter { name: "command"; type: "IrcCommand"; isPointer: true } - } - } - Component { - name: "IrcBufferModel" - prototype: "QAbstractListModel" - exports: [ - "Communi/IrcBufferModel 3.0" - ] - exportMetaObjectRevisions: [ - 0 - ] - Property { name: "count"; type: "int"; isReadonly: true } - Property { name: "sortOrder"; type: "Qt::SortOrder" } - Property { name: "sortMethod"; type: "Irc::SortMethod" } - Property { name: "channels"; type: "QStringList"; isReadonly: true } - Property { name: "displayRole"; type: "Irc::DataRole" } - Property { name: "buffers"; type: "QList<IrcBuffer*>"; isReadonly: true } - Property { name: "connection"; type: "IrcConnection"; isPointer: true } - Property { name: "network"; type: "IrcNetwork"; isReadonly: true; isPointer: true } - Property { name: "bufferPrototype"; type: "IrcBuffer"; isPointer: true } - Property { name: "channelPrototype"; type: "IrcChannel"; isPointer: true } - Signal { - name: "countChanged" - Parameter { name: "count"; type: "int" } - } - Signal { - name: "added" - Parameter { name: "buffer"; type: "IrcBuffer"; isPointer: true } - } - Signal { - name: "removed" - Parameter { name: "buffer"; type: "IrcBuffer"; isPointer: true } - } - Signal { - name: "aboutToBeAdded" - Parameter { name: "buffer"; type: "IrcBuffer"; isPointer: true } - } - Signal { - name: "aboutToBeRemoved" - Parameter { name: "buffer"; type: "IrcBuffer"; isPointer: true } - } - Signal { - name: "buffersChanged" - Parameter { name: "buffers"; type: "QList<IrcBuffer*>" } - } - Signal { - name: "channelsChanged" - Parameter { name: "channels"; type: "QStringList" } - } - Signal { - name: "connectionChanged" - Parameter { name: "connection"; type: "IrcConnection"; isPointer: true } - } - Signal { - name: "networkChanged" - Parameter { name: "network"; type: "IrcNetwork"; isPointer: true } - } - Signal { - name: "messageIgnored" - Parameter { name: "message"; type: "IrcMessage"; isPointer: true } - } - Signal { - name: "bufferPrototypeChanged" - Parameter { name: "prototype"; type: "IrcBuffer"; isPointer: true } - } - Signal { - name: "channelPrototypeChanged" - Parameter { name: "prototype"; type: "IrcChannel"; isPointer: true } - } - Method { name: "clear" } - Method { - name: "sort" - Parameter { name: "column"; type: "int" } - Parameter { name: "order"; type: "Qt::SortOrder" } - } - Method { - name: "sort" - Parameter { name: "column"; type: "int" } - } - Method { name: "sort" } - Method { - name: "sort" - Parameter { name: "method"; type: "Irc::SortMethod" } - Parameter { name: "order"; type: "Qt::SortOrder" } - } - Method { - name: "sort" - Parameter { name: "method"; type: "Irc::SortMethod" } - } - Method { - name: "get" - type: "IrcBuffer*" - Parameter { name: "index"; type: "int" } - } - Method { - name: "find" - type: "IrcBuffer*" - Parameter { name: "title"; type: "string" } - } - Method { - name: "contains" - type: "bool" - Parameter { name: "title"; type: "string" } - } - Method { - name: "indexOf" - type: "int" - Parameter { name: "buffer"; type: "IrcBuffer"; isPointer: true } - } - Method { - name: "add" - type: "IrcBuffer*" - Parameter { name: "title"; type: "string" } - } - Method { - name: "add" - Parameter { name: "buffer"; type: "IrcBuffer"; isPointer: true } - } - Method { - name: "remove" - Parameter { name: "title"; type: "string" } - } - Method { - name: "remove" - Parameter { name: "buffer"; type: "IrcBuffer"; isPointer: true } - } - } - Component { - name: "IrcChannel" - prototype: "IrcBuffer" - exports: [ - "Communi/IrcChannel 3.0" - ] - exportMetaObjectRevisions: [ - 0 - ] - Property { name: "mode"; type: "string"; isReadonly: true } - Property { name: "topic"; type: "string"; isReadonly: true } - Signal { - name: "modeChanged" - Parameter { name: "mode"; type: "string" } - } - Signal { - name: "topicChanged" - Parameter { name: "topic"; type: "string" } - } - Method { - name: "part" - Parameter { name: "reason"; type: "string" } - } - Method { name: "part" } - } - Component { - name: "IrcCommand" - prototype: "QObject" - exports: [ - "Communi/IrcCommand 3.0" - ] - exportMetaObjectRevisions: [ - 0 - ] - Enum { - name: "Type" - values: { - "Admin": 0, - "Away": 1, - "Capability": 2, - "CtcpAction": 3, - "CtcpReply": 4, - "CtcpRequest": 5, - "Custom": 6, - "Info": 7, - "Invite": 8, - "Join": 9, - "Kick": 10, - "Knock": 11, - "List": 12, - "Message": 13, - "Mode": 14, - "Motd": 15, - "Names": 16, - "Nick": 17, - "Notice": 18, - "Part": 19, - "Ping": 20, - "Pong": 21, - "Quit": 22, - "Quote": 23, - "Stats": 24, - "Time": 25, - "Topic": 26, - "Trace": 27, - "Users": 28, - "Version": 29, - "Who": 30, - "Whois": 31, - "Whowas": 32 - } - } - Property { name: "parameters"; type: "QStringList" } - Property { name: "encoding"; type: "QByteArray" } - Property { name: "type"; type: "Type" } - Method { - name: "toMessage" - type: "IrcMessage*" - Parameter { name: "prefix"; type: "string" } - Parameter { name: "connection"; type: "IrcConnection"; isPointer: true } - } - Method { - name: "createAdmin" - type: "IrcCommand*" - Parameter { name: "server"; type: "string" } - } - Method { name: "createAdmin"; type: "IrcCommand*" } - Method { - name: "createAway" - type: "IrcCommand*" - Parameter { name: "reason"; type: "string" } - } - Method { name: "createAway"; type: "IrcCommand*" } - Method { - name: "createCapability" - type: "IrcCommand*" - Parameter { name: "subCommand"; type: "string" } - Parameter { name: "capability"; type: "string" } - } - Method { - name: "createCapability" - type: "IrcCommand*" - Parameter { name: "subCommand"; type: "string" } - Parameter { name: "capabilities"; type: "QStringList" } - } - Method { - name: "createCapability" - type: "IrcCommand*" - Parameter { name: "subCommand"; type: "string" } - } - Method { - name: "createCtcpAction" - type: "IrcCommand*" - Parameter { name: "target"; type: "string" } - Parameter { name: "action"; type: "string" } - } - Method { - name: "createCtcpReply" - type: "IrcCommand*" - Parameter { name: "target"; type: "string" } - Parameter { name: "reply"; type: "string" } - } - Method { - name: "createCtcpRequest" - type: "IrcCommand*" - Parameter { name: "target"; type: "string" } - Parameter { name: "request"; type: "string" } - } - Method { - name: "createInfo" - type: "IrcCommand*" - Parameter { name: "server"; type: "string" } - } - Method { name: "createInfo"; type: "IrcCommand*" } - Method { - name: "createInvite" - type: "IrcCommand*" - Parameter { name: "user"; type: "string" } - Parameter { name: "channel"; type: "string" } - } - Method { - name: "createJoin" - type: "IrcCommand*" - Parameter { name: "channel"; type: "string" } - Parameter { name: "key"; type: "string" } - } - Method { - name: "createJoin" - type: "IrcCommand*" - Parameter { name: "channel"; type: "string" } - } - Method { - name: "createJoin" - type: "IrcCommand*" - Parameter { name: "channels"; type: "QStringList" } - Parameter { name: "keys"; type: "QStringList" } - } - Method { - name: "createJoin" - type: "IrcCommand*" - Parameter { name: "channels"; type: "QStringList" } - } - Method { - name: "createKick" - type: "IrcCommand*" - Parameter { name: "channel"; type: "string" } - Parameter { name: "user"; type: "string" } - Parameter { name: "reason"; type: "string" } - } - Method { - name: "createKick" - type: "IrcCommand*" - Parameter { name: "channel"; type: "string" } - Parameter { name: "user"; type: "string" } - } - Method { - name: "createKnock" - type: "IrcCommand*" - Parameter { name: "channel"; type: "string" } - Parameter { name: "message"; type: "string" } - } - Method { - name: "createKnock" - type: "IrcCommand*" - Parameter { name: "channel"; type: "string" } - } - Method { - name: "createList" - type: "IrcCommand*" - Parameter { name: "channels"; type: "QStringList" } - Parameter { name: "server"; type: "string" } - } - Method { - name: "createList" - type: "IrcCommand*" - Parameter { name: "channels"; type: "QStringList" } - } - Method { name: "createList"; type: "IrcCommand*" } - Method { - name: "createMessage" - type: "IrcCommand*" - Parameter { name: "target"; type: "string" } - Parameter { name: "message"; type: "string" } - } - Method { - name: "createMode" - type: "IrcCommand*" - Parameter { name: "target"; type: "string" } - Parameter { name: "mode"; type: "string" } - Parameter { name: "arg"; type: "string" } - } - Method { - name: "createMode" - type: "IrcCommand*" - Parameter { name: "target"; type: "string" } - Parameter { name: "mode"; type: "string" } - } - Method { - name: "createMode" - type: "IrcCommand*" - Parameter { name: "target"; type: "string" } - } - Method { - name: "createMotd" - type: "IrcCommand*" - Parameter { name: "server"; type: "string" } - } - Method { name: "createMotd"; type: "IrcCommand*" } - Method { - name: "createNames" - type: "IrcCommand*" - Parameter { name: "channel"; type: "string" } - Parameter { name: "server"; type: "string" } - } - Method { - name: "createNames" - type: "IrcCommand*" - Parameter { name: "channel"; type: "string" } - } - Method { name: "createNames"; type: "IrcCommand*" } - Method { - name: "createNames" - type: "IrcCommand*" - Parameter { name: "channels"; type: "QStringList" } - Parameter { name: "server"; type: "string" } - } - Method { - name: "createNames" - type: "IrcCommand*" - Parameter { name: "channels"; type: "QStringList" } - } - Method { - name: "createNick" - type: "IrcCommand*" - Parameter { name: "nick"; type: "string" } - } - Method { - name: "createNotice" - type: "IrcCommand*" - Parameter { name: "target"; type: "string" } - Parameter { name: "notice"; type: "string" } - } - Method { - name: "createPart" - type: "IrcCommand*" - Parameter { name: "channel"; type: "string" } - Parameter { name: "reason"; type: "string" } - } - Method { - name: "createPart" - type: "IrcCommand*" - Parameter { name: "channel"; type: "string" } - } - Method { - name: "createPart" - type: "IrcCommand*" - Parameter { name: "channels"; type: "QStringList" } - Parameter { name: "reason"; type: "string" } - } - Method { - name: "createPart" - type: "IrcCommand*" - Parameter { name: "channels"; type: "QStringList" } - } - Method { - name: "createPing" - type: "IrcCommand*" - Parameter { name: "argument"; type: "string" } - } - Method { - name: "createPong" - type: "IrcCommand*" - Parameter { name: "argument"; type: "string" } - } - Method { - name: "createQuit" - type: "IrcCommand*" - Parameter { name: "reason"; type: "string" } - } - Method { name: "createQuit"; type: "IrcCommand*" } - Method { - name: "createQuote" - type: "IrcCommand*" - Parameter { name: "raw"; type: "string" } - } - Method { - name: "createQuote" - type: "IrcCommand*" - Parameter { name: "parameters"; type: "QStringList" } - } - Method { - name: "createStats" - type: "IrcCommand*" - Parameter { name: "query"; type: "string" } - Parameter { name: "server"; type: "string" } - } - Method { - name: "createStats" - type: "IrcCommand*" - Parameter { name: "query"; type: "string" } - } - Method { - name: "createTime" - type: "IrcCommand*" - Parameter { name: "server"; type: "string" } - } - Method { name: "createTime"; type: "IrcCommand*" } - Method { - name: "createTopic" - type: "IrcCommand*" - Parameter { name: "channel"; type: "string" } - Parameter { name: "topic"; type: "string" } - } - Method { - name: "createTopic" - type: "IrcCommand*" - Parameter { name: "channel"; type: "string" } - } - Method { - name: "createTrace" - type: "IrcCommand*" - Parameter { name: "target"; type: "string" } - } - Method { name: "createTrace"; type: "IrcCommand*" } - Method { - name: "createUsers" - type: "IrcCommand*" - Parameter { name: "server"; type: "string" } - } - Method { name: "createUsers"; type: "IrcCommand*" } - Method { - name: "createVersion" - type: "IrcCommand*" - Parameter { name: "user"; type: "string" } - } - Method { name: "createVersion"; type: "IrcCommand*" } - Method { - name: "createWho" - type: "IrcCommand*" - Parameter { name: "mask"; type: "string" } - Parameter { name: "operators"; type: "bool" } - } - Method { - name: "createWho" - type: "IrcCommand*" - Parameter { name: "mask"; type: "string" } - } - Method { - name: "createWhois" - type: "IrcCommand*" - Parameter { name: "user"; type: "string" } - } - Method { - name: "createWhowas" - type: "IrcCommand*" - Parameter { name: "user"; type: "string" } - Parameter { name: "count"; type: "int" } - } - Method { - name: "createWhowas" - type: "IrcCommand*" - Parameter { name: "user"; type: "string" } - } - } - Component { - name: "IrcCommandParser" - prototype: "QObject" - exports: [ - "Communi/IrcCommandParser 3.0" - ] - exportMetaObjectRevisions: [ - 0 - ] - Enum { - name: "Details" - values: { - "Full": 0, - "NoTarget": 1, - "NoPrefix": 2, - "NoEllipsis": 4, - "NoParentheses": 8, - "NoBrackets": 16, - "NoAngles": 32, - "Visual": 7 - } - } - Property { name: "commands"; type: "QStringList"; isReadonly: true } - Property { name: "triggers"; type: "QStringList" } - Property { name: "channels"; type: "QStringList" } - Property { name: "target"; type: "string" } - Property { name: "tolerant"; type: "bool" } - Signal { - name: "commandsChanged" - Parameter { name: "commands"; type: "QStringList" } - } - Signal { - name: "triggersChanged" - Parameter { name: "triggers"; type: "QStringList" } - } - Signal { - name: "channelsChanged" - Parameter { name: "channels"; type: "QStringList" } - } - Signal { - name: "targetChanged" - Parameter { name: "target"; type: "string" } - } - Signal { - name: "tolerancyChanged" - Parameter { name: "tolerant"; type: "bool" } - } - Method { name: "clear" } - Method { name: "reset" } - Method { - name: "setTriggers" - Parameter { name: "triggers"; type: "QStringList" } - } - Method { - name: "setChannels" - Parameter { name: "channels"; type: "QStringList" } - } - Method { - name: "setTarget" - Parameter { name: "target"; type: "string" } - } - Method { - name: "syntax" - type: "string" - Parameter { name: "command"; type: "string" } - Parameter { name: "details"; type: "Details" } - } - Method { - name: "syntax" - type: "string" - Parameter { name: "command"; type: "string" } - } - Method { - name: "addCommand" - Parameter { name: "type"; type: "IrcCommand::Type" } - Parameter { name: "syntax"; type: "string" } - } - Method { - name: "removeCommand" - Parameter { name: "type"; type: "IrcCommand::Type" } - Parameter { name: "syntax"; type: "string" } - } - Method { - name: "removeCommand" - Parameter { name: "type"; type: "IrcCommand::Type" } - } - Method { - name: "parse" - type: "IrcCommand*" - Parameter { name: "input"; type: "string" } - } - } - Component { - name: "IrcConnection" - prototype: "QObject" - exports: [ - "Communi/IrcConnection 3.0" - ] - exportMetaObjectRevisions: [ - 0 - ] - Enum { - name: "Status" - values: { - "Inactive": 0, - "Waiting": 1, - "Connecting": 2, - "Connected": 3, - "Closing": 4, - "Closed": 5, - "Error": 6 - } - } - Property { name: "host"; type: "string" } - Property { name: "port"; type: "int" } - Property { name: "userName"; type: "string" } - Property { name: "nickName"; type: "string" } - Property { name: "realName"; type: "string" } - Property { name: "password"; type: "string" } - Property { name: "displayName"; type: "string" } - Property { name: "encoding"; type: "QByteArray" } - Property { name: "status"; type: "Status"; isReadonly: true } - Property { name: "active"; type: "bool"; isReadonly: true } - Property { name: "connected"; type: "bool"; isReadonly: true } - Property { name: "enabled"; type: "bool" } - Property { name: "reconnectDelay"; type: "int" } - Property { name: "socket"; type: "QAbstractSocket"; isPointer: true } - Property { name: "secure"; type: "bool" } - Property { name: "saslMechanism"; type: "string" } - Property { name: "supportedSaslMechanisms"; type: "QStringList"; isReadonly: true } - Property { name: "network"; type: "IrcNetwork"; isReadonly: true; isPointer: true } - Signal { name: "connecting" } - Signal { - name: "nickNameReserved" - Parameter { name: "alternate"; type: "string"; isPointer: true } - } - Signal { name: "connected" } - Signal { name: "disconnected" } - Signal { - name: "statusChanged" - Parameter { name: "status"; type: "IrcConnection::Status" } - } - Signal { - name: "socketError" - Parameter { name: "error"; type: "QAbstractSocket::SocketError" } - } - Signal { - name: "socketStateChanged" - Parameter { name: "state"; type: "QAbstractSocket::SocketState" } - } - Signal { - name: "messageReceived" - Parameter { name: "message"; type: "IrcMessage"; isPointer: true } - } - Signal { - name: "capabilityMessageReceived" - Parameter { name: "message"; type: "IrcCapabilityMessage"; isPointer: true } - } - Signal { - name: "errorMessageReceived" - Parameter { name: "message"; type: "IrcErrorMessage"; isPointer: true } - } - Signal { - name: "inviteMessageReceived" - Parameter { name: "message"; type: "IrcInviteMessage"; isPointer: true } - } - Signal { - name: "joinMessageReceived" - Parameter { name: "message"; type: "IrcJoinMessage"; isPointer: true } - } - Signal { - name: "kickMessageReceived" - Parameter { name: "message"; type: "IrcKickMessage"; isPointer: true } - } - Signal { - name: "modeMessageReceived" - Parameter { name: "message"; type: "IrcModeMessage"; isPointer: true } - } - Signal { - name: "namesMessageReceived" - Parameter { name: "message"; type: "IrcNamesMessage"; isPointer: true } - } - Signal { - name: "nickMessageReceived" - Parameter { name: "message"; type: "IrcNickMessage"; isPointer: true } - } - Signal { - name: "noticeMessageReceived" - Parameter { name: "message"; type: "IrcNoticeMessage"; isPointer: true } - } - Signal { - name: "numericMessageReceived" - Parameter { name: "message"; type: "IrcNumericMessage"; isPointer: true } - } - Signal { - name: "motdMessageReceived" - Parameter { name: "message"; type: "IrcMotdMessage"; isPointer: true } - } - Signal { - name: "partMessageReceived" - Parameter { name: "message"; type: "IrcPartMessage"; isPointer: true } - } - Signal { - name: "pingMessageReceived" - Parameter { name: "message"; type: "IrcPingMessage"; isPointer: true } - } - Signal { - name: "pongMessageReceived" - Parameter { name: "message"; type: "IrcPongMessage"; isPointer: true } - } - Signal { - name: "privateMessageReceived" - Parameter { name: "message"; type: "IrcPrivateMessage"; isPointer: true } - } - Signal { - name: "quitMessageReceived" - Parameter { name: "message"; type: "IrcQuitMessage"; isPointer: true } - } - Signal { - name: "topicMessageReceived" - Parameter { name: "message"; type: "IrcTopicMessage"; isPointer: true } - } - Signal { - name: "hostChanged" - Parameter { name: "host"; type: "string" } - } - Signal { - name: "portChanged" - Parameter { name: "port"; type: "int" } - } - Signal { - name: "userNameChanged" - Parameter { name: "name"; type: "string" } - } - Signal { - name: "nickNameChanged" - Parameter { name: "name"; type: "string" } - } - Signal { - name: "realNameChanged" - Parameter { name: "name"; type: "string" } - } - Signal { - name: "passwordChanged" - Parameter { name: "password"; type: "string" } - } - Signal { - name: "displayNameChanged" - Parameter { name: "name"; type: "string" } - } - Signal { - name: "reconnectDelayChanged" - Parameter { name: "seconds"; type: "int" } - } - Signal { - name: "enabledChanged" - Parameter { name: "enabled"; type: "bool" } - } - Signal { - name: "secureChanged" - Parameter { name: "secure"; type: "bool" } - } - Signal { - name: "saslMechanismChanged" - Parameter { name: "mechanism"; type: "string" } - } - Method { name: "open" } - Method { name: "close" } - Method { - name: "quit" - Parameter { name: "reason"; type: "string" } - } - Method { name: "quit" } - Method { - name: "setEnabled" - Parameter { name: "enabled"; type: "bool" } - } - Method { name: "setEnabled" } - Method { - name: "setDisabled" - Parameter { name: "disabled"; type: "bool" } - } - Method { name: "setDisabled" } - Method { - name: "sendCommand" - type: "bool" - Parameter { name: "command"; type: "IrcCommand"; isPointer: true } - } - Method { - name: "sendData" - type: "bool" - Parameter { name: "data"; type: "QByteArray" } - } - Method { - name: "sendRaw" - type: "bool" - Parameter { name: "message"; type: "string" } - } - } - Component { - name: "IrcLagTimer" - prototype: "QObject" - exports: [ - "Communi/IrcLagTimer 3.0" - ] - exportMetaObjectRevisions: [ - 0 - ] - Property { name: "lag"; type: "qint64"; isReadonly: true } - Property { name: "interval"; type: "int" } - Property { name: "connection"; type: "IrcConnection"; isPointer: true } - Signal { - name: "lagChanged" - Parameter { name: "lag"; type: "qint64" } - } - } - Component { - name: "IrcMessage" - prototype: "QObject" - exports: [ - "Communi/IrcMessage 3.0" - ] - exportMetaObjectRevisions: [ - 0 - ] - Enum { - name: "Type" - values: { - "Unknown": 0, - "Capability": 1, - "Error": 2, - "Invite": 3, - "Join": 4, - "Kick": 5, - "Mode": 6, - "Motd": 7, - "Names": 8, - "Nick": 9, - "Notice": 10, - "Numeric": 11, - "Part": 12, - "Ping": 13, - "Pong": 14, - "Private": 15, - "Quit": 16, - "Topic": 17 - } - } - Enum { - name: "Flag" - values: { - "None": 0, - "Own": 1, - "Identified": 2, - "Unidentified": 4 - } - } - Enum { - name: "Flags" - values: { - "None": 0, - "Own": 1, - "Identified": 2, - "Unidentified": 4 - } - } - Property { name: "connection"; type: "IrcConnection"; isReadonly: true; isPointer: true } - Property { name: "network"; type: "IrcNetwork"; isReadonly: true; isPointer: true } - Property { name: "type"; type: "Type"; isReadonly: true } - Property { name: "flags"; type: "Flags"; isReadonly: true } - Property { name: "valid"; type: "bool"; isReadonly: true } - Property { name: "command"; type: "string"; isReadonly: true } - Property { name: "prefix"; type: "string" } - Property { name: "nick"; type: "string"; isReadonly: true } - Property { name: "ident"; type: "string"; isReadonly: true } - Property { name: "host"; type: "string"; isReadonly: true } - Property { name: "parameters"; type: "QStringList" } - Property { name: "timeStamp"; type: "QDateTime" } - Method { name: "toData"; type: "QByteArray" } - Method { - name: "fromData" - type: "IrcMessage*" - Parameter { name: "data"; type: "QByteArray" } - Parameter { name: "connection"; type: "IrcConnection"; isPointer: true } - } - Method { - name: "fromParameters" - type: "IrcMessage*" - Parameter { name: "prefix"; type: "string" } - Parameter { name: "command"; type: "string" } - Parameter { name: "parameters"; type: "QStringList" } - Parameter { name: "connection"; type: "IrcConnection"; isPointer: true } - } - } - Component { - name: "IrcNetwork" - prototype: "QObject" - exports: [ - "Communi/IrcNetwork 3.0" - ] - exportMetaObjectRevisions: [ - 0 - ] - Enum { - name: "ModeType" - values: { - "TypeA": 1, - "TypeB": 2, - "TypeC": 4, - "TypeD": 8, - "AllTypes": 15 - } - } - Enum { - name: "ModeTypes" - values: { - "TypeA": 1, - "TypeB": 2, - "TypeC": 4, - "TypeD": 8, - "AllTypes": 15 - } - } - Enum { - name: "Limit" - values: { - "NickLength": 0, - "ChannelLength": 1, - "TopicLength": 2, - "MessageLength": 3, - "KickReasonLength": 4, - "AwayReasonLength": 5, - "ModeCount": 6 - } - } - Property { name: "initialized"; type: "bool"; isReadonly: true } - Property { name: "name"; type: "string"; isReadonly: true } - Property { name: "modes"; type: "QStringList"; isReadonly: true } - Property { name: "prefixes"; type: "QStringList"; isReadonly: true } - Property { name: "channelTypes"; type: "QStringList"; isReadonly: true } - Property { name: "availableCapabilities"; type: "QStringList"; isReadonly: true } - Property { name: "requestedCapabilities"; type: "QStringList" } - Property { name: "activeCapabilities"; type: "QStringList"; isReadonly: true } - Signal { name: "initialized" } - Signal { - name: "nameChanged" - Parameter { name: "name"; type: "string" } - } - Signal { - name: "modesChanged" - Parameter { name: "modes"; type: "QStringList" } - } - Signal { - name: "prefixesChanged" - Parameter { name: "prefixes"; type: "QStringList" } - } - Signal { - name: "channelTypesChanged" - Parameter { name: "types"; type: "QStringList" } - } - Signal { - name: "availableCapabilitiesChanged" - Parameter { name: "capabilities"; type: "QStringList" } - } - Signal { - name: "requestedCapabilitiesChanged" - Parameter { name: "capabilities"; type: "QStringList" } - } - Signal { - name: "activeCapabilitiesChanged" - Parameter { name: "capabilities"; type: "QStringList" } - } - Signal { name: "requestingCapabilities" } - Method { - name: "requestCapability" - type: "bool" - Parameter { name: "capability"; type: "string" } - } - Method { - name: "requestCapabilities" - type: "bool" - Parameter { name: "capabilities"; type: "QStringList" } - } - Method { - name: "setRequestedCapabilities" - Parameter { name: "capabilities"; type: "QStringList" } - } - Method { - name: "modeToPrefix" - type: "string" - Parameter { name: "mode"; type: "string" } - } - Method { - name: "prefixToMode" - type: "string" - Parameter { name: "prefix"; type: "string" } - } - Method { - name: "isChannel" - type: "bool" - Parameter { name: "name"; type: "string" } - } - Method { - name: "channelModes" - type: "QStringList" - Parameter { name: "types"; type: "IrcNetwork::ModeTypes" } - } - Method { - name: "numericLimit" - type: "int" - Parameter { name: "limit"; type: "IrcNetwork::Limit" } - } - Method { - name: "modeLimit" - type: "int" - Parameter { name: "mode"; type: "string" } - } - Method { - name: "channelLimit" - type: "int" - Parameter { name: "type"; type: "string" } - } - Method { - name: "targetLimit" - type: "int" - Parameter { name: "command"; type: "string" } - } - Method { - name: "hasCapability" - type: "bool" - Parameter { name: "capability"; type: "string" } - } - Method { - name: "isCapable" - type: "bool" - Parameter { name: "capability"; type: "string" } - } - } - Component { - name: "IrcPalette" - prototype: "QObject" - exports: [ - "Communi/IrcPalette 3.0" - ] - exportMetaObjectRevisions: [ - 0 - ] - Property { name: "white"; type: "string" } - Property { name: "black"; type: "string" } - Property { name: "blue"; type: "string" } - Property { name: "green"; type: "string" } - Property { name: "red"; type: "string" } - Property { name: "brown"; type: "string" } - Property { name: "purple"; type: "string" } - Property { name: "orange"; type: "string" } - Property { name: "yellow"; type: "string" } - Property { name: "lightGreen"; type: "string" } - Property { name: "cyan"; type: "string" } - Property { name: "lightCyan"; type: "string" } - Property { name: "lightBlue"; type: "string" } - Property { name: "pink"; type: "string" } - Property { name: "gray"; type: "string" } - Property { name: "lightGray"; type: "string" } - } - Component { - name: "IrcQmlFilter" - prototype: "QObject" - exports: [ - "Communi/IrcCommandFilter 3.0", - "Communi/IrcFilter 3.0", - "Communi/IrcMessageFilter 3.0" - ] - exportMetaObjectRevisions: [ - 0, - 0, - 0 - ] - Property { name: "connection"; type: "IrcConnection"; isPointer: true } - Signal { name: "connectionChanged" } - } - Component { - name: "IrcTextFormat" - prototype: "QObject" - exports: [ - "Communi/IrcTextFormat 3.0" - ] - exportMetaObjectRevisions: [ - 0 - ] - Property { name: "palette"; type: "IrcPalette"; isReadonly: true; isPointer: true } - Property { name: "urlPattern"; type: "string" } - Method { - name: "toHtml" - type: "string" - Parameter { name: "text"; type: "string" } - } - Method { - name: "toPlainText" - type: "string" - Parameter { name: "text"; type: "string" } - } - } - Component { - name: "IrcUser" - prototype: "QObject" - exports: [ - "Communi/IrcUser 3.0" - ] - exportMetaObjectRevisions: [ - 0 - ] - Property { name: "title"; type: "string"; isReadonly: true } - Property { name: "name"; type: "string"; isReadonly: true } - Property { name: "prefix"; type: "string"; isReadonly: true } - Property { name: "mode"; type: "string"; isReadonly: true } - Property { name: "channel"; type: "IrcChannel"; isReadonly: true; isPointer: true } - Signal { - name: "titleChanged" - Parameter { name: "title"; type: "string" } - } - Signal { - name: "nameChanged" - Parameter { name: "name"; type: "string" } - } - Signal { - name: "prefixChanged" - Parameter { name: "prefix"; type: "string" } - } - Signal { - name: "modeChanged" - Parameter { name: "mode"; type: "string" } - } - } - Component { - name: "IrcUserModel" - prototype: "QAbstractListModel" - exports: [ - "Communi/IrcUserModel 3.0" - ] - exportMetaObjectRevisions: [ - 0 - ] - Property { name: "count"; type: "int"; isReadonly: true } - Property { name: "names"; type: "QStringList"; isReadonly: true } - Property { name: "users"; type: "QList<IrcUser*>"; isReadonly: true } - Property { name: "displayRole"; type: "Irc::DataRole" } - Property { name: "channel"; type: "IrcChannel"; isPointer: true } - Property { name: "sortMethod"; type: "Irc::SortMethod" } - Property { name: "sortOrder"; type: "Qt::SortOrder" } - Signal { - name: "added" - Parameter { name: "user"; type: "IrcUser"; isPointer: true } - } - Signal { - name: "removed" - Parameter { name: "user"; type: "IrcUser"; isPointer: true } - } - Signal { - name: "aboutToBeAdded" - Parameter { name: "user"; type: "IrcUser"; isPointer: true } - } - Signal { - name: "aboutToBeRemoved" - Parameter { name: "user"; type: "IrcUser"; isPointer: true } - } - Signal { - name: "countChanged" - Parameter { name: "count"; type: "int" } - } - Signal { - name: "namesChanged" - Parameter { name: "names"; type: "QStringList" } - } - Signal { - name: "usersChanged" - Parameter { name: "users"; type: "QList<IrcUser*>" } - } - Signal { - name: "channelChanged" - Parameter { name: "channel"; type: "IrcChannel"; isPointer: true } - } - Method { name: "clear" } - Method { - name: "sort" - Parameter { name: "column"; type: "int" } - Parameter { name: "order"; type: "Qt::SortOrder" } - } - Method { - name: "sort" - Parameter { name: "column"; type: "int" } - } - Method { name: "sort" } - Method { - name: "sort" - Parameter { name: "method"; type: "Irc::SortMethod" } - Parameter { name: "order"; type: "Qt::SortOrder" } - } - Method { - name: "sort" - Parameter { name: "method"; type: "Irc::SortMethod" } - } - Method { - name: "get" - type: "IrcUser*" - Parameter { name: "index"; type: "int" } - } - Method { - name: "find" - type: "IrcUser*" - Parameter { name: "name"; type: "string" } - } - Method { - name: "contains" - type: "bool" - Parameter { name: "name"; type: "string" } - } - Method { - name: "indexOf" - type: "int" - Parameter { name: "user"; type: "IrcUser"; isPointer: true } - } - } - Component { - name: "QAbstractItemModel" - prototype: "QObject" - Signal { - name: "dataChanged" - Parameter { name: "topLeft"; type: "QModelIndex" } - Parameter { name: "bottomRight"; type: "QModelIndex" } - } - Signal { - name: "headerDataChanged" - Parameter { name: "orientation"; type: "Qt::Orientation" } - Parameter { name: "first"; type: "int" } - Parameter { name: "last"; type: "int" } - } - Signal { name: "layoutChanged" } - Signal { name: "layoutAboutToBeChanged" } - Signal { - name: "rowsAboutToBeInserted" - Parameter { name: "parent"; type: "QModelIndex" } - Parameter { name: "first"; type: "int" } - Parameter { name: "last"; type: "int" } - } - Signal { - name: "rowsInserted" - Parameter { name: "parent"; type: "QModelIndex" } - Parameter { name: "first"; type: "int" } - Parameter { name: "last"; type: "int" } - } - Signal { - name: "rowsAboutToBeRemoved" - Parameter { name: "parent"; type: "QModelIndex" } - Parameter { name: "first"; type: "int" } - Parameter { name: "last"; type: "int" } - } - Signal { - name: "rowsRemoved" - Parameter { name: "parent"; type: "QModelIndex" } - Parameter { name: "first"; type: "int" } - Parameter { name: "last"; type: "int" } - } - Signal { - name: "columnsAboutToBeInserted" - Parameter { name: "parent"; type: "QModelIndex" } - Parameter { name: "first"; type: "int" } - Parameter { name: "last"; type: "int" } - } - Signal { - name: "columnsInserted" - Parameter { name: "parent"; type: "QModelIndex" } - Parameter { name: "first"; type: "int" } - Parameter { name: "last"; type: "int" } - } - Signal { - name: "columnsAboutToBeRemoved" - Parameter { name: "parent"; type: "QModelIndex" } - Parameter { name: "first"; type: "int" } - Parameter { name: "last"; type: "int" } - } - Signal { - name: "columnsRemoved" - Parameter { name: "parent"; type: "QModelIndex" } - Parameter { name: "first"; type: "int" } - Parameter { name: "last"; type: "int" } - } - Signal { name: "modelAboutToBeReset" } - Signal { name: "modelReset" } - Signal { - name: "rowsAboutToBeMoved" - Parameter { name: "sourceParent"; type: "QModelIndex" } - Parameter { name: "sourceStart"; type: "int" } - Parameter { name: "sourceEnd"; type: "int" } - Parameter { name: "destinationParent"; type: "QModelIndex" } - Parameter { name: "destinationRow"; type: "int" } - } - Signal { - name: "rowsMoved" - Parameter { name: "parent"; type: "QModelIndex" } - Parameter { name: "start"; type: "int" } - Parameter { name: "end"; type: "int" } - Parameter { name: "destination"; type: "QModelIndex" } - Parameter { name: "row"; type: "int" } - } - Signal { - name: "columnsAboutToBeMoved" - Parameter { name: "sourceParent"; type: "QModelIndex" } - Parameter { name: "sourceStart"; type: "int" } - Parameter { name: "sourceEnd"; type: "int" } - Parameter { name: "destinationParent"; type: "QModelIndex" } - Parameter { name: "destinationColumn"; type: "int" } - } - Signal { - name: "columnsMoved" - Parameter { name: "parent"; type: "QModelIndex" } - Parameter { name: "start"; type: "int" } - Parameter { name: "end"; type: "int" } - Parameter { name: "destination"; type: "QModelIndex" } - Parameter { name: "column"; type: "int" } - } - Method { name: "submit"; type: "bool" } - Method { name: "revert" } - } - Component { name: "QAbstractListModel"; prototype: "QAbstractItemModel" } -} diff --git a/src/libcommuni/src/imports/qml1/qml1.pro b/src/libcommuni/src/imports/qml1/qml1.pro deleted file mode 100644 index ddee6a2..0000000 --- a/src/libcommuni/src/imports/qml1/qml1.pro +++ /dev/null @@ -1,30 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -TARGET = communiplugin -QT = core network declarative -TARGETPATH = Communi -DESTDIR = ../../../imports/$$TARGETPATH - -SOURCES += plugin.cpp -OTHER_FILES += qmldir plugins.qmltypes - -isEmpty(IRC_INSTALL_IMPORTS):IRC_INSTALL_IMPORTS = $$[QT_INSTALL_IMPORTS] - -!no_install_imports { - target.path = $$IRC_INSTALL_IMPORTS/$$TARGETPATH - INSTALLS += target - - other_files.files = $$OTHER_FILES - other_files.path = $$IRC_INSTALL_IMPORTS/$$TARGETPATH - INSTALLS += other_files -} - -for(other_file, OTHER_FILES) { - ARGUMENTS = $${PWD}$${QMAKE_DIR_SEP}$$other_file $$DESTDIR - !isEmpty(QMAKE_POST_LINK):QMAKE_POST_LINK += && - QMAKE_POST_LINK += $$QMAKE_COPY $$replace(ARGUMENTS, /, $$QMAKE_DIR_SEP) -} - -include(../imports.pri) diff --git a/src/libcommuni/src/imports/qml1/qmldir b/src/libcommuni/src/imports/qml1/qmldir deleted file mode 100644 index 2de93f6..0000000 --- a/src/libcommuni/src/imports/qml1/qmldir +++ /dev/null @@ -1 +0,0 @@ -plugin communiplugin diff --git a/src/libcommuni/src/imports/qml2/plugin.cpp b/src/libcommuni/src/imports/qml2/plugin.cpp deleted file mode 100644 index 12b8781..0000000 --- a/src/libcommuni/src/imports/qml2/plugin.cpp +++ /dev/null @@ -1,139 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include <QtQml> - -#include <IrcCore> -#include <IrcModel> -#include <IrcUtil> - -IRC_BEGIN_NAMESPACE - -class IrcQmlFilter : public QObject, - public IrcCommandFilter, - public IrcMessageFilter -{ - Q_OBJECT - Q_INTERFACES(IrcCommandFilter IrcMessageFilter) - Q_PROPERTY(IrcConnection* connection READ connection WRITE setConnection NOTIFY connectionChanged) - -public: - IrcQmlFilter(QObject* parent = 0) : QObject(parent), conn(0) { } - - IrcConnection* connection() const { return conn; } - void setConnection(IrcConnection* connection) - { - if (conn != connection) { - if (conn) { - conn->removeCommandFilter(this); - conn->removeMessageFilter(this); - } - conn = connection; - if (conn) { - conn->installCommandFilter(this); - conn->installMessageFilter(this); - } - emit connectionChanged(); - } - } - - bool commandFilter(IrcCommand* cmd) - { - // QML: QVariant commandFilter(QVariant) - const QMetaObject* mo = metaObject(); - int idx = mo->indexOfMethod("commandFilter(QVariant)"); - if (idx != -1) { - QVariant ret; - QMetaMethod method = mo->method(idx); - method.invoke(this, Q_RETURN_ARG(QVariant, ret), Q_ARG(QVariant, QVariant::fromValue(cmd))); - return ret.toBool(); - } - return false; - } - - bool messageFilter(IrcMessage* msg) - { - // QML: QVariant messageFilter(QVariant) - const QMetaObject* mo = metaObject(); - int idx = mo->indexOfMethod("messageFilter(QVariant)"); - if (idx != -1) { - QVariant ret; - QMetaMethod method = mo->method(idx); - method.invoke(this, Q_RETURN_ARG(QVariant, ret), Q_ARG(QVariant, QVariant::fromValue(msg))); - return ret.toBool(); - } - return false; - } - -signals: - void connectionChanged(); - -private: - QPointer<IrcConnection> conn; -}; - -class CommuniPlugin : public QQmlExtensionPlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID "Communi.QQmlExtensionInterface") - -public: - void registerTypes(const char* uri) { -//! [qml-register-types] - // IrcCore - Irc::registerMetaTypes(); - qmlRegisterType<Irc>(uri, 3, 0, "Irc"); - qmlRegisterType<Irc>(uri, 3, 2, "Irc"); - qmlRegisterType<IrcCommand>(uri, 3, 0, "IrcCommand"); - qmlRegisterType<IrcConnection>(uri, 3, 0, "IrcConnection"); - qmlRegisterUncreatableType<IrcMessage>(uri, 3, 0, "IrcMessage", "Cannot create an instance of IrcMessage. Use IrcConnection::messageReceived() signal instead."); - qmlRegisterUncreatableType<IrcNetwork>(uri, 3, 0, "IrcNetwork", "Cannot create an instance of IrcNetwork. Use IrcConnection::network property instead."); - qmlRegisterType<IrcQmlFilter>(uri, 3, 0, "IrcMessageFilter"); - qmlRegisterType<IrcQmlFilter>(uri, 3, 0, "IrcCommandFilter"); - qmlRegisterType<IrcQmlFilter>(uri, 3, 0, "IrcFilter"); - - // IrcModel - qmlRegisterType<IrcBuffer>(uri, 3, 0, "IrcBuffer"); - qmlRegisterType<IrcBufferModel>(uri, 3, 0, "IrcBufferModel"); - qmlRegisterType<IrcChannel>(uri, 3, 0, "IrcChannel"); - qmlRegisterType<IrcUser>(uri, 3, 0, "IrcUser"); - qmlRegisterType<IrcUserModel>(uri, 3, 0, "IrcUserModel"); - - // IrcUtil - qmlRegisterType<IrcCommandParser>(uri, 3, 0, "IrcCommandParser"); - qmlRegisterType<IrcLagTimer>(uri, 3, 0, "IrcLagTimer"); - qmlRegisterType<IrcTextFormat>(uri, 3, 0, "IrcTextFormat"); - qmlRegisterUncreatableType<IrcPalette>(uri, 3, 0, "IrcPalette", "Cannot create an instance of IrcPalette. Use IrcTextFormat::palette property instead."); - qmlRegisterType<IrcCompleter>(uri, 3, 1, "IrcCompleter"); -//! [qml-register-types] - } -}; - -IRC_END_NAMESPACE - -#include "plugin.moc" diff --git a/src/libcommuni/src/imports/qml2/plugins.qmltypes b/src/libcommuni/src/imports/qml2/plugins.qmltypes deleted file mode 100644 index b0af7b4..0000000 --- a/src/libcommuni/src/imports/qml2/plugins.qmltypes +++ /dev/null @@ -1,1769 +0,0 @@ -import QtQuick.tooling 1.1 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by: -// 'qmlplugindump -nonrelocatable Communi 3.0' - -Module { - Component { - name: "Irc" - prototype: "QObject" - exports: ["Communi/Irc 3.0"] - exportMetaObjectRevisions: [0] - Enum { - name: "Color" - values: { - "White": 0, - "Black": 1, - "Blue": 2, - "Green": 3, - "Red": 4, - "Brown": 5, - "Purple": 6, - "Orange": 7, - "Yellow": 8, - "LightGreen": 9, - "Cyan": 10, - "LightCyan": 11, - "LightBlue": 12, - "Pink": 13, - "Gray": 14, - "LightGray": 15 - } - } - Enum { - name: "DataRole" - values: { - "UserRole": 256, - "BufferRole": 257, - "ChannelRole": 258, - "NameRole": 259, - "PrefixRole": 260, - "ModeRole": 261, - "TitleRole": 262 - } - } - Enum { - name: "SortMethod" - values: { - "SortByHand": 0, - "SortByName": 1, - "SortByTitle": 2, - "SortByActivity": 3 - } - } - Enum { - name: "Code" - values: { - "RPL_WELCOME": 1, - "RPL_YOURHOST": 2, - "RPL_CREATED": 3, - "RPL_MYINFO": 4, - "RPL_ISUPPORT": 5, - "RPL_SNOMASK": 8, - "RPL_STATMEMTOT": 9, - "RPL_BOUNCE": 10, - "RPL_STATMEM": 10, - "RPL_YOURCOOKIE": 14, - "RPL_YOURID": 42, - "RPL_SAVENICK": 43, - "RPL_ATTEMPTINGJUNC": 50, - "RPL_ATTEMPTINGREROUTE": 51, - "RPL_TRACELINK": 200, - "RPL_TRACECONNECTING": 201, - "RPL_TRACEHANDSHAKE": 202, - "RPL_TRACEUNKNOWN": 203, - "RPL_TRACEOPERATOR": 204, - "RPL_TRACEUSER": 205, - "RPL_TRACESERVER": 206, - "RPL_TRACESERVICE": 207, - "RPL_TRACENEWTYPE": 208, - "RPL_TRACECLASS": 209, - "RPL_TRACERECONNECT": 210, - "RPL_STATS": 210, - "RPL_STATSLINKINFO": 211, - "RPL_STATSCOMMANDS": 212, - "RPL_STATSCLINE": 213, - "RPL_STATSNLINE": 214, - "RPL_STATSILINE": 215, - "RPL_STATSKLINE": 216, - "RPL_STATSQLINE": 217, - "RPL_STATSYLINE": 218, - "RPL_ENDOFSTATS": 219, - "RPL_UMODEIS": 221, - "RPL_MODLIST": 222, - "RPL_SQLINE_NICK": 222, - "RPL_STATSZLINE": 225, - "RPL_STATSCOUNT": 226, - "RPL_SERVICEINFO": 231, - "RPL_ENDOFSERVICES": 232, - "RPL_SERVICE": 233, - "RPL_SERVLIST": 234, - "RPL_SERVLISTEND": 235, - "RPL_STATSVERBOSE": 236, - "RPL_STATSENGINE": 237, - "RPL_STATSIAUTH": 239, - "RPL_STATSVLINE": 240, - "RPL_STATSLLINE": 241, - "RPL_STATSUPTIME": 242, - "RPL_STATSOLINE": 243, - "RPL_STATSHLINE": 244, - "RPL_STATSSLINE": 245, - "RPL_STATSPING": 246, - "RPL_STATSBLINE": 247, - "RPL_STATSDEFINE": 248, - "RPL_STATSDEBUG": 249, - "RPL_STATSDLINE": 250, - "RPL_STATSCONN": 250, - "RPL_LUSERCLIENT": 251, - "RPL_LUSEROP": 252, - "RPL_LUSERUNKNOWN": 253, - "RPL_LUSERCHANNELS": 254, - "RPL_LUSERME": 255, - "RPL_ADMINME": 256, - "RPL_ADMINLOC1": 257, - "RPL_ADMINLOC2": 258, - "RPL_ADMINEMAIL": 259, - "RPL_TRACELOG": 261, - "RPL_TRACEPING": 262, - "RPL_TRACEEND": 262, - "RPL_TRYAGAIN": 263, - "RPL_LOCALUSERS": 265, - "RPL_GLOBALUSERS": 266, - "RPL_START_NETSTAT": 267, - "RPL_NETSTAT": 268, - "RPL_END_NETSTAT": 269, - "RPL_PRIVS": 270, - "RPL_SILELIST": 271, - "RPL_ENDOFSILELIST": 272, - "RPL_NOTIFY": 273, - "RPL_ENDNOTIFY": 274, - "RPL_STATSDELTA": 274, - "RPL_VCHANEXIST": 276, - "RPL_VCHANLIST": 277, - "RPL_VCHANHELP": 278, - "RPL_GLIST": 280, - "RPL_ENDOFGLIST": 281, - "RPL_ACCEPTLIST": 281, - "RPL_ENDOFACCEPT": 282, - "RPL_JUPELIST": 282, - "RPL_ENDOFJUPELIST": 283, - "RPL_FEATURE": 284, - "RPL_GLIST_HASH": 285, - "RPL_CHANINFO_HANDLE": 285, - "RPL_NEWHOSTIS": 285, - "RPL_CHANINFO_USERS": 286, - "RPL_CHKHEAD": 286, - "RPL_CHANINFO_CHOPS": 287, - "RPL_CHANUSER": 287, - "RPL_CHANINFO_VOICES": 288, - "RPL_PATCHHEAD": 288, - "RPL_CHANINFO_AWAY": 289, - "RPL_PATCHCON": 289, - "RPL_CHANINFO_OPERS": 290, - "RPL_HELPHDR": 290, - "RPL_DATASTR": 290, - "RPL_CHANINFO_BANNED": 291, - "RPL_HELPOP": 291, - "RPL_ENDOFCHECK": 291, - "RPL_CHANINFO_BANS": 292, - "RPL_HELPTLR": 292, - "RPL_CHANINFO_INVITE": 293, - "RPL_HELPHLP": 293, - "RPL_CHANINFO_INVITES": 294, - "RPL_HELPFWD": 294, - "RPL_CHANINFO_KICK": 295, - "RPL_HELPIGN": 295, - "RPL_CHANINFO_KICKS": 296, - "RPL_END_CHANINFO": 299, - "RPL_NONE": 300, - "RPL_AWAY": 301, - "RPL_USERHOST": 302, - "RPL_ISON": 303, - "RPL_TEXT": 304, - "RPL_UNAWAY": 305, - "RPL_NOWAWAY": 306, - "RPL_WHOISREGNICK": 307, - "RPL_SUSERHOST": 307, - "RPL_NOTIFYACTION": 308, - "RPL_WHOISADMIN": 308, - "RPL_NICKTRACE": 309, - "RPL_WHOISSADMIN": 309, - "RPL_WHOISHELPER": 309, - "RPL_WHOISSVCMSG": 310, - "RPL_WHOISHELPOP": 310, - "RPL_WHOISSERVICE": 310, - "RPL_WHOISUSER": 311, - "RPL_WHOISSERVER": 312, - "RPL_WHOISOPERATOR": 313, - "RPL_WHOWASUSER": 314, - "RPL_ENDOFWHO": 315, - "RPL_WHOISCHANOP": 316, - "RPL_WHOISIDLE": 317, - "RPL_ENDOFWHOIS": 318, - "RPL_WHOISCHANNELS": 319, - "RPL_WHOISVIRT": 320, - "RPL_WHOIS_HIDDEN": 320, - "RPL_WHOISSPECIAL": 320, - "RPL_LISTSTART": 321, - "RPL_LIST": 322, - "RPL_LISTEND": 323, - "RPL_CHANNELMODEIS": 324, - "RPL_UNIQOPIS": 325, - "RPL_CHANNELPASSIS": 325, - "RPL_NOCHANPASS": 326, - "RPL_CHPASSUNKNOWN": 327, - "RPL_CHANNEL_URL": 328, - "RPL_CREATIONTIME": 329, - "RPL_WHOWAS_TIME": 330, - "RPL_WHOISACCOUNT": 330, - "RPL_NOTOPIC": 331, - "RPL_TOPIC": 332, - "RPL_TOPICWHOTIME": 333, - "RPL_LISTUSAGE": 334, - "RPL_COMMANDSYNTAX": 334, - "RPL_LISTSYNTAX": 334, - "RPL_CHANPASSOK": 338, - "RPL_WHOISACTUALLY": 338, - "RPL_BADCHANPASS": 339, - "RPL_INVITING": 341, - "RPL_SUMMONING": 342, - "RPL_INVITED": 345, - "RPL_INVITELIST": 346, - "RPL_ENDOFINVITELIST": 347, - "RPL_EXCEPTLIST": 348, - "RPL_ENDOFEXCEPTLIST": 349, - "RPL_VERSION": 351, - "RPL_WHOREPLY": 352, - "RPL_NAMREPLY": 353, - "RPL_WHOSPCRPL": 354, - "RPL_NAMREPLY_": 355, - "RPL_KILLDONE": 361, - "RPL_CLOSING": 362, - "RPL_CLOSEEND": 363, - "RPL_LINKS": 364, - "RPL_ENDOFLINKS": 365, - "RPL_ENDOFNAMES": 366, - "RPL_BANLIST": 367, - "RPL_ENDOFBANLIST": 368, - "RPL_ENDOFWHOWAS": 369, - "RPL_INFO": 371, - "RPL_MOTD": 372, - "RPL_INFOSTART": 373, - "RPL_ENDOFINFO": 374, - "RPL_MOTDSTART": 375, - "RPL_ENDOFMOTD": 376, - "RPL_KICKEXPIRED": 377, - "RPL_SPAM": 377, - "RPL_BANEXPIRED": 378, - "RPL_WHOISHOST": 378, - "RPL_KICKLINKED": 379, - "RPL_WHOISMODES": 379, - "RPL_BANLINKED": 380, - "RPL_YOURHELPER": 380, - "RPL_YOUREOPER": 381, - "RPL_REHASHING": 382, - "RPL_YOURESERVICE": 383, - "RPL_MYPORTIS": 384, - "RPL_NOTOPERANYMORE": 385, - "RPL_QLIST": 386, - "RPL_IRCOPS": 386, - "RPL_ENDOFQLIST": 387, - "RPL_ENDOFIRCOPS": 387, - "RPL_ALIST": 388, - "RPL_ENDOFALIST": 389, - "RPL_TIME": 391, - "RPL_USERSSTART": 392, - "RPL_USERS": 393, - "RPL_ENDOFUSERS": 394, - "RPL_NOUSERS": 395, - "RPL_HOSTHIDDEN": 396, - "ERR_UNKNOWNERROR": 400, - "ERR_NOSUCHNICK": 401, - "ERR_NOSUCHSERVER": 402, - "ERR_NOSUCHCHANNEL": 403, - "ERR_CANNOTSENDTOCHAN": 404, - "ERR_TOOMANYCHANNELS": 405, - "ERR_WASNOSUCHNICK": 406, - "ERR_TOOMANYTARGETS": 407, - "ERR_NOSUCHSERVICE": 408, - "ERR_NOCOLORSONCHAN": 408, - "ERR_NOORIGIN": 409, - "ERR_NORECIPIENT": 411, - "ERR_NOTEXTTOSEND": 412, - "ERR_NOTOPLEVEL": 413, - "ERR_WILDTOPLEVEL": 414, - "ERR_BADMASK": 415, - "ERR_TOOMANYMATCHES": 416, - "ERR_QUERYTOOLONG": 416, - "ERR_LENGTHTRUNCATED": 419, - "ERR_UNKNOWNCOMMAND": 421, - "ERR_NOMOTD": 422, - "ERR_NOADMININFO": 423, - "ERR_FILEERROR": 424, - "ERR_NOOPERMOTD": 425, - "ERR_TOOMANYAWAY": 429, - "ERR_EVENTNICKCHANGE": 430, - "ERR_NONICKNAMEGIVEN": 431, - "ERR_ERRONEUSNICKNAME": 432, - "ERR_NICKNAMEINUSE": 433, - "ERR_SERVICENAMEINUSE": 434, - "ERR_NORULES": 434, - "ERR_SERVICECONFUSED": 435, - "ERR_BANONCHAN": 435, - "ERR_NICKCOLLISION": 436, - "ERR_UNAVAILRESOURCE": 437, - "ERR_BANNICKCHANGE": 437, - "ERR_NICKTOOFAST": 438, - "ERR_DEAD": 438, - "ERR_TARGETTOOFAST": 439, - "ERR_SERVICESDOWN": 440, - "ERR_USERNOTINCHANNEL": 441, - "ERR_NOTONCHANNEL": 442, - "ERR_USERONCHANNEL": 443, - "ERR_NOLOGIN": 444, - "ERR_SUMMONDISABLED": 445, - "ERR_USERSDISABLED": 446, - "ERR_NONICKCHANGE": 447, - "ERR_NOTIMPLEMENTED": 449, - "ERR_NOTREGISTERED": 451, - "ERR_IDCOLLISION": 452, - "ERR_NICKLOST": 453, - "ERR_HOSTILENAME": 455, - "ERR_ACCEPTFULL": 456, - "ERR_ACCEPTEXIST": 457, - "ERR_ACCEPTNOT": 458, - "ERR_NOHIDING": 459, - "ERR_NOTFORHALFOPS": 460, - "ERR_NEEDMOREPARAMS": 461, - "ERR_ALREADYREGISTERED": 462, - "ERR_NOPERMFORHOST": 463, - "ERR_PASSWDMISMATCH": 464, - "ERR_YOUREBANNEDCREEP": 465, - "ERR_YOUWILLBEBANNED": 466, - "ERR_KEYSET": 467, - "ERR_INVALIDUSERNAME": 468, - "ERR_ONLYSERVERSCANCHANGE": 468, - "ERR_LINKSET": 469, - "ERR_LINKCHANNEL": 470, - "ERR_KICKEDFROMCHAN": 470, - "ERR_CHANNELISFULL": 471, - "ERR_UNKNOWNMODE": 472, - "ERR_INVITEONLYCHAN": 473, - "ERR_BANNEDFROMCHAN": 474, - "ERR_BADCHANNELKEY": 475, - "ERR_BADCHANMASK": 476, - "ERR_NOCHANMODES": 477, - "ERR_NEEDREGGEDNICK": 477, - "ERR_BANLISTFULL": 478, - "ERR_BADCHANNAME": 479, - "ERR_LINKFAIL": 479, - "ERR_NOULINE": 480, - "ERR_CANNOTKNOCK": 480, - "ERR_NOPRIVILEGES": 481, - "ERR_CHANOPRIVSNEEDED": 482, - "ERR_CANTKILLSERVER": 483, - "ERR_RESTRICTED": 484, - "ERR_ISCHANSERVICE": 484, - "ERR_DESYNC": 484, - "ERR_ATTACKDENY": 484, - "ERR_UNIQOPRIVSNEEDED": 485, - "ERR_KILLDENY": 485, - "ERR_CANTKICKADMIN": 485, - "ERR_ISREALSERVICE": 485, - "ERR_NONONREG": 486, - "ERR_HTMDISABLED": 486, - "ERR_ACCOUNTONLY": 486, - "ERR_CHANTOORECENT": 487, - "ERR_MSGSERVICES": 487, - "ERR_TSLESSCHAN": 488, - "ERR_VOICENEEDED": 489, - "ERR_SECUREONLYCHAN": 489, - "ERR_NOOPERHOST": 491, - "ERR_NOSERVICEHOST": 492, - "ERR_NOFEATURE": 493, - "ERR_BADFEATURE": 494, - "ERR_BADLOGTYPE": 495, - "ERR_BADLOGSYS": 496, - "ERR_BADLOGVALUE": 497, - "ERR_ISOPERLCHAN": 498, - "ERR_CHANOWNPRIVNEEDED": 499, - "ERR_UMODEUNKNOWNFLAG": 501, - "ERR_USERSDONTMATCH": 502, - "ERR_GHOSTEDCLIENT": 503, - "ERR_VWORLDWARN": 503, - "ERR_USERNOTONSERV": 504, - "ERR_SILELISTFULL": 511, - "ERR_TOOMANYWATCH": 512, - "ERR_BADPING": 513, - "ERR_INVALID_ERROR": 514, - "ERR_TOOMANYDCC": 514, - "ERR_BADEXPIRE": 515, - "ERR_DONTCHEAT": 516, - "ERR_DISABLED": 517, - "ERR_NOINVITE": 518, - "ERR_LONGMASK": 518, - "ERR_ADMONLY": 519, - "ERR_TOOMANYUSERS": 519, - "ERR_OPERONLY": 520, - "ERR_MASKTOOWIDE": 520, - "ERR_WHOTRUNC": 520, - "ERR_LISTSYNTAX": 521, - "ERR_WHOSYNTAX": 522, - "ERR_WHOLIMEXCEED": 523, - "ERR_QUARANTINED": 524, - "ERR_OPERSPVERIFY": 524, - "ERR_REMOTEPFX": 525, - "ERR_PFXUNROUTABLE": 526, - "ERR_BADHOSTMASK": 550, - "ERR_HOSTUNAVAIL": 551, - "ERR_USINGSLINE": 552, - "ERR_STATSSLINE": 553, - "RPL_LOGON": 600, - "RPL_LOGOFF": 601, - "RPL_WATCHOFF": 602, - "RPL_WATCHSTAT": 603, - "RPL_NOWON": 604, - "RPL_NOWOFF": 605, - "RPL_WATCHLIST": 606, - "RPL_ENDOFWATCHLIST": 607, - "RPL_WATCHCLEAR": 608, - "RPL_ISOPER": 610, - "RPL_ISLOCOP": 611, - "RPL_ISNOTOPER": 612, - "RPL_ENDOFISOPER": 613, - "RPL_DCCSTATUS": 617, - "RPL_DCCLIST": 618, - "RPL_ENDOFDCCLIST": 619, - "RPL_WHOWASHOST": 619, - "RPL_DCCINFO": 620, - "RPL_ENDOFO": 626, - "RPL_SETTINGS": 630, - "RPL_ENDOFSETTINGS": 631, - "RPL_DUMPING": 640, - "RPL_DUMPRPL": 641, - "RPL_EODUMP": 642, - "RPL_TRACEROUTE_HOP": 660, - "RPL_TRACEROUTE_START": 661, - "RPL_MODECHANGEWARN": 662, - "RPL_CHANREDIR": 663, - "RPL_SERVMODEIS": 664, - "RPL_OTHERUMODEIS": 665, - "RPL_ENDOF_GENERIC": 666, - "RPL_WHOWASDETAILS": 670, - "RPL_WHOISSECURE": 671, - "RPL_UNKNOWNMODES": 672, - "RPL_CANNOTSETMODES": 673, - "RPL_LUSERSTAFF": 678, - "RPL_TIMEONSERVERIS": 679, - "RPL_NETWORKS": 682, - "RPL_YOURLANGUAGEIS": 687, - "RPL_LANGUAGE": 688, - "RPL_WHOISSTAFF": 689, - "RPL_WHOISLANGUAGE": 690, - "RPL_HELPSTART": 704, - "RPL_HELPTXT": 705, - "RPL_ENDOFHELP": 706, - "RPL_ETRACEFULL": 708, - "RPL_ETRACE": 709, - "RPL_KNOCK": 710, - "RPL_KNOCKDLVR": 711, - "ERR_TOOMANYKNOCK": 712, - "ERR_CHANOPEN": 713, - "ERR_KNOCKONCHAN": 714, - "ERR_KNOCKDISABLED": 715, - "RPL_TARGUMODEG": 716, - "RPL_TARGNOTIFY": 717, - "RPL_UMODEGMSG": 718, - "RPL_ENDOFOMOTD": 722, - "ERR_NOPRIVS": 723, - "RPL_TESTMARK": 724, - "RPL_TESTLINE": 725, - "RPL_NOTESTLINE": 726, - "RPL_XINFO": 771, - "RPL_XINFOSTART": 773, - "RPL_XINFOEND": 774, - "ERR_CANNOTDOCOMMAND": 972, - "ERR_CANNOTCHANGEUMODE": 973, - "ERR_CANNOTCHANGECHANMODE": 974, - "ERR_CANNOTCHANGESERVERMODE": 975, - "ERR_CANNOTSENDTONICK": 976, - "ERR_UNKNOWNSERVERMODE": 977, - "ERR_SERVERMODELOCK": 979, - "ERR_BADCHARENCODING": 980, - "ERR_TOOMANYLANGUAGES": 981, - "ERR_NOLANGUAGE": 982, - "ERR_TEXTTOOSHORT": 983, - "ERR_NUMERIC_ERR": 999 - } - } - Method { name: "version"; type: "string" } - Method { - name: "codeToString" - type: "string" - Parameter { name: "code"; type: "int" } - } - Method { - name: "nickFromPrefix" - type: "string" - Parameter { name: "prefix"; type: "string" } - } - Method { - name: "identFromPrefix" - type: "string" - Parameter { name: "prefix"; type: "string" } - } - Method { - name: "hostFromPrefix" - type: "string" - Parameter { name: "prefix"; type: "string" } - } - Method { name: "registerMetaTypes" } - } - Component { - name: "IrcBuffer" - prototype: "QObject" - exports: ["Communi/IrcBuffer 3.0"] - exportMetaObjectRevisions: [0] - Property { name: "title"; type: "string"; isReadonly: true } - Property { name: "name"; type: "string" } - Property { name: "prefix"; type: "string" } - Property { name: "connection"; type: "IrcConnection"; isReadonly: true; isPointer: true } - Property { name: "network"; type: "IrcNetwork"; isReadonly: true; isPointer: true } - Property { name: "model"; type: "IrcBufferModel"; isReadonly: true; isPointer: true } - Property { name: "active"; type: "bool"; isReadonly: true } - Property { name: "channel"; type: "bool"; isReadonly: true } - Property { name: "sticky"; type: "bool" } - Property { name: "persistent"; type: "bool" } - Signal { - name: "titleChanged" - Parameter { name: "title"; type: "string" } - } - Signal { - name: "nameChanged" - Parameter { name: "name"; type: "string" } - } - Signal { - name: "prefixChanged" - Parameter { name: "name"; type: "string" } - } - Signal { - name: "messageReceived" - Parameter { name: "message"; type: "IrcMessage"; isPointer: true } - } - Signal { - name: "destroyed" - Parameter { name: "buffer"; type: "IrcBuffer"; isPointer: true } - } - Signal { - name: "activeChanged" - Parameter { name: "active"; type: "bool" } - } - Signal { - name: "stickyChanged" - Parameter { name: "sticky"; type: "bool" } - } - Signal { - name: "persistentChanged" - Parameter { name: "persistent"; type: "bool" } - } - Method { - name: "setName" - Parameter { name: "name"; type: "string" } - } - Method { - name: "setPrefix" - Parameter { name: "prefix"; type: "string" } - } - Method { - name: "receiveMessage" - Parameter { name: "message"; type: "IrcMessage"; isPointer: true } - } - Method { name: "toChannel"; type: "IrcChannel*" } - Method { - name: "sendCommand" - type: "bool" - Parameter { name: "command"; type: "IrcCommand"; isPointer: true } - } - } - Component { - name: "IrcBufferModel" - prototype: "QAbstractListModel" - exports: ["Communi/IrcBufferModel 3.0"] - exportMetaObjectRevisions: [0] - Property { name: "count"; type: "int"; isReadonly: true } - Property { name: "sortOrder"; type: "Qt::SortOrder" } - Property { name: "sortMethod"; type: "Irc::SortMethod" } - Property { name: "channels"; type: "QStringList"; isReadonly: true } - Property { name: "displayRole"; type: "Irc::DataRole" } - Property { name: "buffers"; type: "QList<IrcBuffer*>"; isReadonly: true } - Property { name: "connection"; type: "IrcConnection"; isPointer: true } - Property { name: "network"; type: "IrcNetwork"; isReadonly: true; isPointer: true } - Property { name: "bufferPrototype"; type: "IrcBuffer"; isPointer: true } - Property { name: "channelPrototype"; type: "IrcChannel"; isPointer: true } - Signal { - name: "countChanged" - Parameter { name: "count"; type: "int" } - } - Signal { - name: "added" - Parameter { name: "buffer"; type: "IrcBuffer"; isPointer: true } - } - Signal { - name: "removed" - Parameter { name: "buffer"; type: "IrcBuffer"; isPointer: true } - } - Signal { - name: "aboutToBeAdded" - Parameter { name: "buffer"; type: "IrcBuffer"; isPointer: true } - } - Signal { - name: "aboutToBeRemoved" - Parameter { name: "buffer"; type: "IrcBuffer"; isPointer: true } - } - Signal { - name: "buffersChanged" - Parameter { name: "buffers"; type: "QList<IrcBuffer*>" } - } - Signal { - name: "channelsChanged" - Parameter { name: "channels"; type: "QStringList" } - } - Signal { - name: "connectionChanged" - Parameter { name: "connection"; type: "IrcConnection"; isPointer: true } - } - Signal { - name: "networkChanged" - Parameter { name: "network"; type: "IrcNetwork"; isPointer: true } - } - Signal { - name: "messageIgnored" - Parameter { name: "message"; type: "IrcMessage"; isPointer: true } - } - Signal { - name: "bufferPrototypeChanged" - Parameter { name: "prototype"; type: "IrcBuffer"; isPointer: true } - } - Signal { - name: "channelPrototypeChanged" - Parameter { name: "prototype"; type: "IrcChannel"; isPointer: true } - } - Method { name: "clear" } - Method { - name: "sort" - Parameter { name: "column"; type: "int" } - Parameter { name: "order"; type: "Qt::SortOrder" } - } - Method { - name: "sort" - Parameter { name: "column"; type: "int" } - } - Method { name: "sort" } - Method { - name: "sort" - Parameter { name: "method"; type: "Irc::SortMethod" } - Parameter { name: "order"; type: "Qt::SortOrder" } - } - Method { - name: "sort" - Parameter { name: "method"; type: "Irc::SortMethod" } - } - Method { - name: "get" - type: "IrcBuffer*" - Parameter { name: "index"; type: "int" } - } - Method { - name: "find" - type: "IrcBuffer*" - Parameter { name: "title"; type: "string" } - } - Method { - name: "contains" - type: "bool" - Parameter { name: "title"; type: "string" } - } - Method { - name: "indexOf" - type: "int" - Parameter { name: "buffer"; type: "IrcBuffer"; isPointer: true } - } - Method { - name: "add" - type: "IrcBuffer*" - Parameter { name: "title"; type: "string" } - } - Method { - name: "add" - Parameter { name: "buffer"; type: "IrcBuffer"; isPointer: true } - } - Method { - name: "remove" - Parameter { name: "title"; type: "string" } - } - Method { - name: "remove" - Parameter { name: "buffer"; type: "IrcBuffer"; isPointer: true } - } - } - Component { - name: "IrcChannel" - prototype: "IrcBuffer" - exports: ["Communi/IrcChannel 3.0"] - exportMetaObjectRevisions: [0] - Property { name: "mode"; type: "string"; isReadonly: true } - Property { name: "topic"; type: "string"; isReadonly: true } - Signal { - name: "modeChanged" - Parameter { name: "mode"; type: "string" } - } - Signal { - name: "topicChanged" - Parameter { name: "topic"; type: "string" } - } - Method { - name: "part" - Parameter { name: "reason"; type: "string" } - } - Method { name: "part" } - } - Component { - name: "IrcCommand" - prototype: "QObject" - exports: ["Communi/IrcCommand 3.0"] - exportMetaObjectRevisions: [0] - Enum { - name: "Type" - values: { - "Admin": 0, - "Away": 1, - "Capability": 2, - "CtcpAction": 3, - "CtcpReply": 4, - "CtcpRequest": 5, - "Custom": 6, - "Info": 7, - "Invite": 8, - "Join": 9, - "Kick": 10, - "Knock": 11, - "List": 12, - "Message": 13, - "Mode": 14, - "Motd": 15, - "Names": 16, - "Nick": 17, - "Notice": 18, - "Part": 19, - "Ping": 20, - "Pong": 21, - "Quit": 22, - "Quote": 23, - "Stats": 24, - "Time": 25, - "Topic": 26, - "Trace": 27, - "Users": 28, - "Version": 29, - "Who": 30, - "Whois": 31, - "Whowas": 32 - } - } - Property { name: "parameters"; type: "QStringList" } - Property { name: "encoding"; type: "QByteArray" } - Property { name: "type"; type: "Type" } - Method { - name: "toMessage" - type: "IrcMessage*" - Parameter { name: "prefix"; type: "string" } - Parameter { name: "connection"; type: "IrcConnection"; isPointer: true } - } - Method { - name: "createAdmin" - type: "IrcCommand*" - Parameter { name: "server"; type: "string" } - } - Method { name: "createAdmin"; type: "IrcCommand*" } - Method { - name: "createAway" - type: "IrcCommand*" - Parameter { name: "reason"; type: "string" } - } - Method { name: "createAway"; type: "IrcCommand*" } - Method { - name: "createCapability" - type: "IrcCommand*" - Parameter { name: "subCommand"; type: "string" } - Parameter { name: "capability"; type: "string" } - } - Method { - name: "createCapability" - type: "IrcCommand*" - Parameter { name: "subCommand"; type: "string" } - Parameter { name: "capabilities"; type: "QStringList" } - } - Method { - name: "createCapability" - type: "IrcCommand*" - Parameter { name: "subCommand"; type: "string" } - } - Method { - name: "createCtcpAction" - type: "IrcCommand*" - Parameter { name: "target"; type: "string" } - Parameter { name: "action"; type: "string" } - } - Method { - name: "createCtcpReply" - type: "IrcCommand*" - Parameter { name: "target"; type: "string" } - Parameter { name: "reply"; type: "string" } - } - Method { - name: "createCtcpRequest" - type: "IrcCommand*" - Parameter { name: "target"; type: "string" } - Parameter { name: "request"; type: "string" } - } - Method { - name: "createInfo" - type: "IrcCommand*" - Parameter { name: "server"; type: "string" } - } - Method { name: "createInfo"; type: "IrcCommand*" } - Method { - name: "createInvite" - type: "IrcCommand*" - Parameter { name: "user"; type: "string" } - Parameter { name: "channel"; type: "string" } - } - Method { - name: "createJoin" - type: "IrcCommand*" - Parameter { name: "channel"; type: "string" } - Parameter { name: "key"; type: "string" } - } - Method { - name: "createJoin" - type: "IrcCommand*" - Parameter { name: "channel"; type: "string" } - } - Method { - name: "createJoin" - type: "IrcCommand*" - Parameter { name: "channels"; type: "QStringList" } - Parameter { name: "keys"; type: "QStringList" } - } - Method { - name: "createJoin" - type: "IrcCommand*" - Parameter { name: "channels"; type: "QStringList" } - } - Method { - name: "createKick" - type: "IrcCommand*" - Parameter { name: "channel"; type: "string" } - Parameter { name: "user"; type: "string" } - Parameter { name: "reason"; type: "string" } - } - Method { - name: "createKick" - type: "IrcCommand*" - Parameter { name: "channel"; type: "string" } - Parameter { name: "user"; type: "string" } - } - Method { - name: "createKnock" - type: "IrcCommand*" - Parameter { name: "channel"; type: "string" } - Parameter { name: "message"; type: "string" } - } - Method { - name: "createKnock" - type: "IrcCommand*" - Parameter { name: "channel"; type: "string" } - } - Method { - name: "createList" - type: "IrcCommand*" - Parameter { name: "channels"; type: "QStringList" } - Parameter { name: "server"; type: "string" } - } - Method { - name: "createList" - type: "IrcCommand*" - Parameter { name: "channels"; type: "QStringList" } - } - Method { name: "createList"; type: "IrcCommand*" } - Method { - name: "createMessage" - type: "IrcCommand*" - Parameter { name: "target"; type: "string" } - Parameter { name: "message"; type: "string" } - } - Method { - name: "createMode" - type: "IrcCommand*" - Parameter { name: "target"; type: "string" } - Parameter { name: "mode"; type: "string" } - Parameter { name: "arg"; type: "string" } - } - Method { - name: "createMode" - type: "IrcCommand*" - Parameter { name: "target"; type: "string" } - Parameter { name: "mode"; type: "string" } - } - Method { - name: "createMode" - type: "IrcCommand*" - Parameter { name: "target"; type: "string" } - } - Method { - name: "createMotd" - type: "IrcCommand*" - Parameter { name: "server"; type: "string" } - } - Method { name: "createMotd"; type: "IrcCommand*" } - Method { - name: "createNames" - type: "IrcCommand*" - Parameter { name: "channel"; type: "string" } - Parameter { name: "server"; type: "string" } - } - Method { - name: "createNames" - type: "IrcCommand*" - Parameter { name: "channel"; type: "string" } - } - Method { name: "createNames"; type: "IrcCommand*" } - Method { - name: "createNames" - type: "IrcCommand*" - Parameter { name: "channels"; type: "QStringList" } - Parameter { name: "server"; type: "string" } - } - Method { - name: "createNames" - type: "IrcCommand*" - Parameter { name: "channels"; type: "QStringList" } - } - Method { - name: "createNick" - type: "IrcCommand*" - Parameter { name: "nick"; type: "string" } - } - Method { - name: "createNotice" - type: "IrcCommand*" - Parameter { name: "target"; type: "string" } - Parameter { name: "notice"; type: "string" } - } - Method { - name: "createPart" - type: "IrcCommand*" - Parameter { name: "channel"; type: "string" } - Parameter { name: "reason"; type: "string" } - } - Method { - name: "createPart" - type: "IrcCommand*" - Parameter { name: "channel"; type: "string" } - } - Method { - name: "createPart" - type: "IrcCommand*" - Parameter { name: "channels"; type: "QStringList" } - Parameter { name: "reason"; type: "string" } - } - Method { - name: "createPart" - type: "IrcCommand*" - Parameter { name: "channels"; type: "QStringList" } - } - Method { - name: "createPing" - type: "IrcCommand*" - Parameter { name: "argument"; type: "string" } - } - Method { - name: "createPong" - type: "IrcCommand*" - Parameter { name: "argument"; type: "string" } - } - Method { - name: "createQuit" - type: "IrcCommand*" - Parameter { name: "reason"; type: "string" } - } - Method { name: "createQuit"; type: "IrcCommand*" } - Method { - name: "createQuote" - type: "IrcCommand*" - Parameter { name: "raw"; type: "string" } - } - Method { - name: "createQuote" - type: "IrcCommand*" - Parameter { name: "parameters"; type: "QStringList" } - } - Method { - name: "createStats" - type: "IrcCommand*" - Parameter { name: "query"; type: "string" } - Parameter { name: "server"; type: "string" } - } - Method { - name: "createStats" - type: "IrcCommand*" - Parameter { name: "query"; type: "string" } - } - Method { - name: "createTime" - type: "IrcCommand*" - Parameter { name: "server"; type: "string" } - } - Method { name: "createTime"; type: "IrcCommand*" } - Method { - name: "createTopic" - type: "IrcCommand*" - Parameter { name: "channel"; type: "string" } - Parameter { name: "topic"; type: "string" } - } - Method { - name: "createTopic" - type: "IrcCommand*" - Parameter { name: "channel"; type: "string" } - } - Method { - name: "createTrace" - type: "IrcCommand*" - Parameter { name: "target"; type: "string" } - } - Method { name: "createTrace"; type: "IrcCommand*" } - Method { - name: "createUsers" - type: "IrcCommand*" - Parameter { name: "server"; type: "string" } - } - Method { name: "createUsers"; type: "IrcCommand*" } - Method { - name: "createVersion" - type: "IrcCommand*" - Parameter { name: "user"; type: "string" } - } - Method { name: "createVersion"; type: "IrcCommand*" } - Method { - name: "createWho" - type: "IrcCommand*" - Parameter { name: "mask"; type: "string" } - Parameter { name: "operators"; type: "bool" } - } - Method { - name: "createWho" - type: "IrcCommand*" - Parameter { name: "mask"; type: "string" } - } - Method { - name: "createWhois" - type: "IrcCommand*" - Parameter { name: "user"; type: "string" } - } - Method { - name: "createWhowas" - type: "IrcCommand*" - Parameter { name: "user"; type: "string" } - Parameter { name: "count"; type: "int" } - } - Method { - name: "createWhowas" - type: "IrcCommand*" - Parameter { name: "user"; type: "string" } - } - } - Component { - name: "IrcCommandParser" - prototype: "QObject" - exports: ["Communi/IrcCommandParser 3.0"] - exportMetaObjectRevisions: [0] - Enum { - name: "Details" - values: { - "Full": 0, - "NoTarget": 1, - "NoPrefix": 2, - "NoEllipsis": 4, - "NoParentheses": 8, - "NoBrackets": 16, - "NoAngles": 32, - "Visual": 7 - } - } - Property { name: "commands"; type: "QStringList"; isReadonly: true } - Property { name: "triggers"; type: "QStringList" } - Property { name: "channels"; type: "QStringList" } - Property { name: "target"; type: "string" } - Property { name: "tolerant"; type: "bool" } - Signal { - name: "commandsChanged" - Parameter { name: "commands"; type: "QStringList" } - } - Signal { - name: "triggersChanged" - Parameter { name: "triggers"; type: "QStringList" } - } - Signal { - name: "channelsChanged" - Parameter { name: "channels"; type: "QStringList" } - } - Signal { - name: "targetChanged" - Parameter { name: "target"; type: "string" } - } - Signal { - name: "tolerancyChanged" - Parameter { name: "tolerant"; type: "bool" } - } - Method { name: "clear" } - Method { name: "reset" } - Method { - name: "setTriggers" - Parameter { name: "triggers"; type: "QStringList" } - } - Method { - name: "setChannels" - Parameter { name: "channels"; type: "QStringList" } - } - Method { - name: "setTarget" - Parameter { name: "target"; type: "string" } - } - Method { - name: "syntax" - type: "string" - Parameter { name: "command"; type: "string" } - Parameter { name: "details"; type: "Details" } - } - Method { - name: "syntax" - type: "string" - Parameter { name: "command"; type: "string" } - } - Method { - name: "addCommand" - Parameter { name: "type"; type: "IrcCommand::Type" } - Parameter { name: "syntax"; type: "string" } - } - Method { - name: "removeCommand" - Parameter { name: "type"; type: "IrcCommand::Type" } - Parameter { name: "syntax"; type: "string" } - } - Method { - name: "removeCommand" - Parameter { name: "type"; type: "IrcCommand::Type" } - } - Method { - name: "parse" - type: "IrcCommand*" - Parameter { name: "input"; type: "string" } - } - } - Component { - name: "IrcConnection" - prototype: "QObject" - exports: ["Communi/IrcConnection 3.0"] - exportMetaObjectRevisions: [0] - Enum { - name: "Status" - values: { - "Inactive": 0, - "Waiting": 1, - "Connecting": 2, - "Connected": 3, - "Closing": 4, - "Closed": 5, - "Error": 6 - } - } - Property { name: "host"; type: "string" } - Property { name: "port"; type: "int" } - Property { name: "userName"; type: "string" } - Property { name: "nickName"; type: "string" } - Property { name: "realName"; type: "string" } - Property { name: "password"; type: "string" } - Property { name: "displayName"; type: "string" } - Property { name: "encoding"; type: "QByteArray" } - Property { name: "status"; type: "Status"; isReadonly: true } - Property { name: "active"; type: "bool"; isReadonly: true } - Property { name: "connected"; type: "bool"; isReadonly: true } - Property { name: "enabled"; type: "bool" } - Property { name: "reconnectDelay"; type: "int" } - Property { name: "socket"; type: "QAbstractSocket"; isPointer: true } - Property { name: "secure"; type: "bool" } - Property { name: "saslMechanism"; type: "string" } - Property { name: "supportedSaslMechanisms"; type: "QStringList"; isReadonly: true } - Property { name: "network"; type: "IrcNetwork"; isReadonly: true; isPointer: true } - Signal { name: "connecting" } - Signal { - name: "nickNameReserved" - Parameter { name: "alternate"; type: "string"; isPointer: true } - } - Signal { name: "connected" } - Signal { name: "disconnected" } - Signal { - name: "statusChanged" - Parameter { name: "status"; type: "IrcConnection::Status" } - } - Signal { - name: "socketError" - Parameter { name: "error"; type: "QAbstractSocket::SocketError" } - } - Signal { - name: "socketStateChanged" - Parameter { name: "state"; type: "QAbstractSocket::SocketState" } - } - Signal { - name: "messageReceived" - Parameter { name: "message"; type: "IrcMessage"; isPointer: true } - } - Signal { - name: "capabilityMessageReceived" - Parameter { name: "message"; type: "IrcCapabilityMessage"; isPointer: true } - } - Signal { - name: "errorMessageReceived" - Parameter { name: "message"; type: "IrcErrorMessage"; isPointer: true } - } - Signal { - name: "inviteMessageReceived" - Parameter { name: "message"; type: "IrcInviteMessage"; isPointer: true } - } - Signal { - name: "joinMessageReceived" - Parameter { name: "message"; type: "IrcJoinMessage"; isPointer: true } - } - Signal { - name: "kickMessageReceived" - Parameter { name: "message"; type: "IrcKickMessage"; isPointer: true } - } - Signal { - name: "modeMessageReceived" - Parameter { name: "message"; type: "IrcModeMessage"; isPointer: true } - } - Signal { - name: "namesMessageReceived" - Parameter { name: "message"; type: "IrcNamesMessage"; isPointer: true } - } - Signal { - name: "nickMessageReceived" - Parameter { name: "message"; type: "IrcNickMessage"; isPointer: true } - } - Signal { - name: "noticeMessageReceived" - Parameter { name: "message"; type: "IrcNoticeMessage"; isPointer: true } - } - Signal { - name: "numericMessageReceived" - Parameter { name: "message"; type: "IrcNumericMessage"; isPointer: true } - } - Signal { - name: "motdMessageReceived" - Parameter { name: "message"; type: "IrcMotdMessage"; isPointer: true } - } - Signal { - name: "partMessageReceived" - Parameter { name: "message"; type: "IrcPartMessage"; isPointer: true } - } - Signal { - name: "pingMessageReceived" - Parameter { name: "message"; type: "IrcPingMessage"; isPointer: true } - } - Signal { - name: "pongMessageReceived" - Parameter { name: "message"; type: "IrcPongMessage"; isPointer: true } - } - Signal { - name: "privateMessageReceived" - Parameter { name: "message"; type: "IrcPrivateMessage"; isPointer: true } - } - Signal { - name: "quitMessageReceived" - Parameter { name: "message"; type: "IrcQuitMessage"; isPointer: true } - } - Signal { - name: "topicMessageReceived" - Parameter { name: "message"; type: "IrcTopicMessage"; isPointer: true } - } - Signal { - name: "hostChanged" - Parameter { name: "host"; type: "string" } - } - Signal { - name: "portChanged" - Parameter { name: "port"; type: "int" } - } - Signal { - name: "userNameChanged" - Parameter { name: "name"; type: "string" } - } - Signal { - name: "nickNameChanged" - Parameter { name: "name"; type: "string" } - } - Signal { - name: "realNameChanged" - Parameter { name: "name"; type: "string" } - } - Signal { - name: "passwordChanged" - Parameter { name: "password"; type: "string" } - } - Signal { - name: "displayNameChanged" - Parameter { name: "name"; type: "string" } - } - Signal { - name: "reconnectDelayChanged" - Parameter { name: "seconds"; type: "int" } - } - Signal { - name: "enabledChanged" - Parameter { name: "enabled"; type: "bool" } - } - Signal { - name: "secureChanged" - Parameter { name: "secure"; type: "bool" } - } - Signal { - name: "saslMechanismChanged" - Parameter { name: "mechanism"; type: "string" } - } - Method { name: "open" } - Method { name: "close" } - Method { - name: "quit" - Parameter { name: "reason"; type: "string" } - } - Method { name: "quit" } - Method { - name: "setEnabled" - Parameter { name: "enabled"; type: "bool" } - } - Method { name: "setEnabled" } - Method { - name: "setDisabled" - Parameter { name: "disabled"; type: "bool" } - } - Method { name: "setDisabled" } - Method { - name: "sendCommand" - type: "bool" - Parameter { name: "command"; type: "IrcCommand"; isPointer: true } - } - Method { - name: "sendData" - type: "bool" - Parameter { name: "data"; type: "QByteArray" } - } - Method { - name: "sendRaw" - type: "bool" - Parameter { name: "message"; type: "string" } - } - } - Component { - name: "IrcLagTimer" - prototype: "QObject" - exports: ["Communi/IrcLagTimer 3.0"] - exportMetaObjectRevisions: [0] - Property { name: "lag"; type: "qlonglong"; isReadonly: true } - Property { name: "interval"; type: "int" } - Property { name: "connection"; type: "IrcConnection"; isPointer: true } - Signal { - name: "lagChanged" - Parameter { name: "lag"; type: "qlonglong" } - } - } - Component { - name: "IrcMessage" - prototype: "QObject" - exports: ["Communi/IrcMessage 3.0"] - exportMetaObjectRevisions: [0] - Enum { - name: "Type" - values: { - "Unknown": 0, - "Capability": 1, - "Error": 2, - "Invite": 3, - "Join": 4, - "Kick": 5, - "Mode": 6, - "Motd": 7, - "Names": 8, - "Nick": 9, - "Notice": 10, - "Numeric": 11, - "Part": 12, - "Ping": 13, - "Pong": 14, - "Private": 15, - "Quit": 16, - "Topic": 17 - } - } - Enum { - name: "Flag" - values: { - "None": 0, - "Own": 1, - "Identified": 2, - "Unidentified": 4 - } - } - Enum { - name: "Flags" - values: { - "None": 0, - "Own": 1, - "Identified": 2, - "Unidentified": 4 - } - } - Property { name: "connection"; type: "IrcConnection"; isReadonly: true; isPointer: true } - Property { name: "network"; type: "IrcNetwork"; isReadonly: true; isPointer: true } - Property { name: "type"; type: "Type"; isReadonly: true } - Property { name: "flags"; type: "Flags"; isReadonly: true } - Property { name: "valid"; type: "bool"; isReadonly: true } - Property { name: "command"; type: "string"; isReadonly: true } - Property { name: "prefix"; type: "string" } - Property { name: "nick"; type: "string"; isReadonly: true } - Property { name: "ident"; type: "string"; isReadonly: true } - Property { name: "host"; type: "string"; isReadonly: true } - Property { name: "parameters"; type: "QStringList" } - Property { name: "timeStamp"; type: "QDateTime" } - Method { name: "toData"; type: "QByteArray" } - Method { - name: "fromData" - type: "IrcMessage*" - Parameter { name: "data"; type: "QByteArray" } - Parameter { name: "connection"; type: "IrcConnection"; isPointer: true } - } - Method { - name: "fromParameters" - type: "IrcMessage*" - Parameter { name: "prefix"; type: "string" } - Parameter { name: "command"; type: "string" } - Parameter { name: "parameters"; type: "QStringList" } - Parameter { name: "connection"; type: "IrcConnection"; isPointer: true } - } - } - Component { - name: "IrcNetwork" - prototype: "QObject" - exports: ["Communi/IrcNetwork 3.0"] - exportMetaObjectRevisions: [0] - Enum { - name: "ModeType" - values: { - "TypeA": 1, - "TypeB": 2, - "TypeC": 4, - "TypeD": 8, - "AllTypes": 15 - } - } - Enum { - name: "ModeTypes" - values: { - "TypeA": 1, - "TypeB": 2, - "TypeC": 4, - "TypeD": 8, - "AllTypes": 15 - } - } - Enum { - name: "Limit" - values: { - "NickLength": 0, - "ChannelLength": 1, - "TopicLength": 2, - "MessageLength": 3, - "KickReasonLength": 4, - "AwayReasonLength": 5, - "ModeCount": 6 - } - } - Property { name: "initialized"; type: "bool"; isReadonly: true } - Property { name: "name"; type: "string"; isReadonly: true } - Property { name: "modes"; type: "QStringList"; isReadonly: true } - Property { name: "prefixes"; type: "QStringList"; isReadonly: true } - Property { name: "channelTypes"; type: "QStringList"; isReadonly: true } - Property { name: "availableCapabilities"; type: "QStringList"; isReadonly: true } - Property { name: "requestedCapabilities"; type: "QStringList" } - Property { name: "activeCapabilities"; type: "QStringList"; isReadonly: true } - Signal { name: "initialized" } - Signal { - name: "nameChanged" - Parameter { name: "name"; type: "string" } - } - Signal { - name: "modesChanged" - Parameter { name: "modes"; type: "QStringList" } - } - Signal { - name: "prefixesChanged" - Parameter { name: "prefixes"; type: "QStringList" } - } - Signal { - name: "channelTypesChanged" - Parameter { name: "types"; type: "QStringList" } - } - Signal { - name: "availableCapabilitiesChanged" - Parameter { name: "capabilities"; type: "QStringList" } - } - Signal { - name: "requestedCapabilitiesChanged" - Parameter { name: "capabilities"; type: "QStringList" } - } - Signal { - name: "activeCapabilitiesChanged" - Parameter { name: "capabilities"; type: "QStringList" } - } - Signal { name: "requestingCapabilities" } - Method { - name: "requestCapability" - type: "bool" - Parameter { name: "capability"; type: "string" } - } - Method { - name: "requestCapabilities" - type: "bool" - Parameter { name: "capabilities"; type: "QStringList" } - } - Method { - name: "setRequestedCapabilities" - Parameter { name: "capabilities"; type: "QStringList" } - } - Method { - name: "modeToPrefix" - type: "string" - Parameter { name: "mode"; type: "string" } - } - Method { - name: "prefixToMode" - type: "string" - Parameter { name: "prefix"; type: "string" } - } - Method { - name: "isChannel" - type: "bool" - Parameter { name: "name"; type: "string" } - } - Method { - name: "channelModes" - type: "QStringList" - Parameter { name: "types"; type: "IrcNetwork::ModeTypes" } - } - Method { - name: "numericLimit" - type: "int" - Parameter { name: "limit"; type: "IrcNetwork::Limit" } - } - Method { - name: "modeLimit" - type: "int" - Parameter { name: "mode"; type: "string" } - } - Method { - name: "channelLimit" - type: "int" - Parameter { name: "type"; type: "string" } - } - Method { - name: "targetLimit" - type: "int" - Parameter { name: "command"; type: "string" } - } - Method { - name: "hasCapability" - type: "bool" - Parameter { name: "capability"; type: "string" } - } - Method { - name: "isCapable" - type: "bool" - Parameter { name: "capability"; type: "string" } - } - } - Component { - name: "IrcPalette" - prototype: "QObject" - exports: ["Communi/IrcPalette 3.0"] - exportMetaObjectRevisions: [0] - Property { name: "white"; type: "string" } - Property { name: "black"; type: "string" } - Property { name: "blue"; type: "string" } - Property { name: "green"; type: "string" } - Property { name: "red"; type: "string" } - Property { name: "brown"; type: "string" } - Property { name: "purple"; type: "string" } - Property { name: "orange"; type: "string" } - Property { name: "yellow"; type: "string" } - Property { name: "lightGreen"; type: "string" } - Property { name: "cyan"; type: "string" } - Property { name: "lightCyan"; type: "string" } - Property { name: "lightBlue"; type: "string" } - Property { name: "pink"; type: "string" } - Property { name: "gray"; type: "string" } - Property { name: "lightGray"; type: "string" } - } - Component { - name: "IrcQmlFilter" - prototype: "QObject" - exports: [ - "Communi/IrcCommandFilter 3.0", - "Communi/IrcFilter 3.0", - "Communi/IrcMessageFilter 3.0" - ] - exportMetaObjectRevisions: [0, 0, 0] - Property { name: "connection"; type: "IrcConnection"; isPointer: true } - } - Component { - name: "IrcTextFormat" - prototype: "QObject" - exports: ["Communi/IrcTextFormat 3.0"] - exportMetaObjectRevisions: [0] - Property { name: "palette"; type: "IrcPalette"; isReadonly: true; isPointer: true } - Property { name: "urlPattern"; type: "string" } - Method { - name: "toHtml" - type: "string" - Parameter { name: "text"; type: "string" } - } - Method { - name: "toPlainText" - type: "string" - Parameter { name: "text"; type: "string" } - } - } - Component { - name: "IrcUser" - prototype: "QObject" - exports: ["Communi/IrcUser 3.0"] - exportMetaObjectRevisions: [0] - Property { name: "title"; type: "string"; isReadonly: true } - Property { name: "name"; type: "string"; isReadonly: true } - Property { name: "prefix"; type: "string"; isReadonly: true } - Property { name: "mode"; type: "string"; isReadonly: true } - Property { name: "channel"; type: "IrcChannel"; isReadonly: true; isPointer: true } - Signal { - name: "titleChanged" - Parameter { name: "title"; type: "string" } - } - Signal { - name: "nameChanged" - Parameter { name: "name"; type: "string" } - } - Signal { - name: "prefixChanged" - Parameter { name: "prefix"; type: "string" } - } - Signal { - name: "modeChanged" - Parameter { name: "mode"; type: "string" } - } - } - Component { - name: "IrcUserModel" - prototype: "QAbstractListModel" - exports: ["Communi/IrcUserModel 3.0"] - exportMetaObjectRevisions: [0] - Property { name: "count"; type: "int"; isReadonly: true } - Property { name: "names"; type: "QStringList"; isReadonly: true } - Property { name: "users"; type: "QList<IrcUser*>"; isReadonly: true } - Property { name: "displayRole"; type: "Irc::DataRole" } - Property { name: "channel"; type: "IrcChannel"; isPointer: true } - Property { name: "sortMethod"; type: "Irc::SortMethod" } - Property { name: "sortOrder"; type: "Qt::SortOrder" } - Signal { - name: "added" - Parameter { name: "user"; type: "IrcUser"; isPointer: true } - } - Signal { - name: "removed" - Parameter { name: "user"; type: "IrcUser"; isPointer: true } - } - Signal { - name: "aboutToBeAdded" - Parameter { name: "user"; type: "IrcUser"; isPointer: true } - } - Signal { - name: "aboutToBeRemoved" - Parameter { name: "user"; type: "IrcUser"; isPointer: true } - } - Signal { - name: "countChanged" - Parameter { name: "count"; type: "int" } - } - Signal { - name: "namesChanged" - Parameter { name: "names"; type: "QStringList" } - } - Signal { - name: "usersChanged" - Parameter { name: "users"; type: "QList<IrcUser*>" } - } - Signal { - name: "channelChanged" - Parameter { name: "channel"; type: "IrcChannel"; isPointer: true } - } - Method { name: "clear" } - Method { - name: "sort" - Parameter { name: "column"; type: "int" } - Parameter { name: "order"; type: "Qt::SortOrder" } - } - Method { - name: "sort" - Parameter { name: "column"; type: "int" } - } - Method { name: "sort" } - Method { - name: "sort" - Parameter { name: "method"; type: "Irc::SortMethod" } - Parameter { name: "order"; type: "Qt::SortOrder" } - } - Method { - name: "sort" - Parameter { name: "method"; type: "Irc::SortMethod" } - } - Method { - name: "get" - type: "IrcUser*" - Parameter { name: "index"; type: "int" } - } - Method { - name: "find" - type: "IrcUser*" - Parameter { name: "name"; type: "string" } - } - Method { - name: "contains" - type: "bool" - Parameter { name: "name"; type: "string" } - } - Method { - name: "indexOf" - type: "int" - Parameter { name: "user"; type: "IrcUser"; isPointer: true } - } - } -} diff --git a/src/libcommuni/src/imports/qml2/qml2.pro b/src/libcommuni/src/imports/qml2/qml2.pro deleted file mode 100644 index 7a39b94..0000000 --- a/src/libcommuni/src/imports/qml2/qml2.pro +++ /dev/null @@ -1,30 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -TARGET = communiplugin -QT = core network qml -TARGETPATH = Communi -DESTDIR = ../../../qml/$$TARGETPATH - -SOURCES += plugin.cpp -OTHER_FILES += qmldir plugins.qmltypes - -isEmpty(IRC_INSTALL_QML):IRC_INSTALL_QML = $$[QT_INSTALL_QML] - -!no_install_qml { - target.path = $$IRC_INSTALL_QML/$$TARGETPATH - INSTALLS += target - - other_files.files = $$OTHER_FILES - other_files.path = $$IRC_INSTALL_QML/$$TARGETPATH - INSTALLS += other_files -} - -for(other_file, OTHER_FILES) { - ARGUMENTS = $${PWD}$${QMAKE_DIR_SEP}$$other_file $$DESTDIR - !isEmpty(QMAKE_POST_LINK):QMAKE_POST_LINK += && - QMAKE_POST_LINK += $$QMAKE_COPY $$replace(ARGUMENTS, /, $$QMAKE_DIR_SEP) -} - -include(../imports.pri) diff --git a/src/libcommuni/src/imports/qml2/qmldir b/src/libcommuni/src/imports/qml2/qmldir deleted file mode 100644 index 659cc21..0000000 --- a/src/libcommuni/src/imports/qml2/qmldir +++ /dev/null @@ -1,2 +0,0 @@ -module Communi -plugin communiplugin diff --git a/src/libcommuni/src/model/ircbuffer.cpp b/src/libcommuni/src/model/ircbuffer.cpp deleted file mode 100644 index e7aa6b9..0000000 --- a/src/libcommuni/src/model/ircbuffer.cpp +++ /dev/null @@ -1,593 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "ircbuffer.h" -#include "ircbuffer_p.h" -#include "ircbuffermodel.h" -#include "ircbuffermodel_p.h" -#include "ircconnection.h" -#include "ircchannel.h" - -IRC_BEGIN_NAMESPACE - -/*! - \file ircbuffer.h - \brief \#include <IrcBuffer> - */ - -/*! - \class IrcBuffer ircbuffer.h <IrcBuffer> - \ingroup models - \brief Keeps track of buffer status. - - \sa IrcBufferModel -*/ - -/*! - \fn void IrcBuffer::messageReceived(IrcMessage* message) - - This signal is emitted when a buffer specific message is received. - - The message may one of the following types: - - IrcMessage::Join - - IrcMessage::Kick - - IrcMessage::Mode - - IrcMessage::Names - - IrcMessage::Nick - - IrcMessage::Notice - - IrcMessage::Numeric - - IrcMessage::Part - - IrcMessage::Private - - IrcMessage::Quit - - IrcMessage::Topic - - \sa IrcConnection::messageReceived(), IrcBufferModel::messageIgnored() - */ - -#ifndef IRC_DOXYGEN -IrcBufferPrivate::IrcBufferPrivate() - : q_ptr(0), model(0), persistent(false), sticky(false) -{ - qRegisterMetaType<IrcBuffer*>(); - qRegisterMetaType<QList<IrcBuffer*> >(); -} - -IrcBufferPrivate::~IrcBufferPrivate() -{ -} - -void IrcBufferPrivate::init(const QString& title, IrcBufferModel* m) -{ - name = title; - setModel(m); -} - -void IrcBufferPrivate::connected() -{ - Q_Q(IrcBuffer); - emit q->activeChanged(q->isActive()); -} - -void IrcBufferPrivate::disconnected() -{ - Q_Q(IrcBuffer); - emit q->activeChanged(q->isActive()); -} - -void IrcBufferPrivate::setName(const QString& value) -{ - Q_Q(IrcBuffer); - if (name != value) { - const QString oldTitle = q->title(); - name = value; - emit q->nameChanged(name); - emit q->titleChanged(q->title()); - if (model) - IrcBufferModelPrivate::get(model)->renameBuffer(oldTitle, q->title()); - } -} - -void IrcBufferPrivate::setPrefix(const QString& value) -{ - Q_Q(IrcBuffer); - if (prefix != value) { - const QString oldTitle = q->title(); - prefix = value; - emit q->prefixChanged(prefix); - emit q->titleChanged(q->title()); - if (model) - IrcBufferModelPrivate::get(model)->renameBuffer(oldTitle, q->title()); - } -} - -void IrcBufferPrivate::setModel(IrcBufferModel* value) -{ - model = value; -} - -bool IrcBufferPrivate::processMessage(IrcMessage* message) -{ - Q_Q(IrcBuffer); - bool processed = false; - switch (message->type()) { - case IrcMessage::Join: - processed = processJoinMessage(static_cast<IrcJoinMessage*>(message)); - break; - case IrcMessage::Kick: - processed = processKickMessage(static_cast<IrcKickMessage*>(message)); - break; - case IrcMessage::Mode: - processed = processModeMessage(static_cast<IrcModeMessage*>(message)); - break; - case IrcMessage::Names: - processed = processNamesMessage(static_cast<IrcNamesMessage*>(message)); - break; - case IrcMessage::Nick: - processed = processNickMessage(static_cast<IrcNickMessage*>(message)); - break; - case IrcMessage::Notice: - processed = processNoticeMessage(static_cast<IrcNoticeMessage*>(message)); - break; - case IrcMessage::Numeric: - processed = processNumericMessage(static_cast<IrcNumericMessage*>(message)); - break; - case IrcMessage::Part: - processed = processPartMessage(static_cast<IrcPartMessage*>(message)); - break; - case IrcMessage::Private: - processed = processPrivateMessage(static_cast<IrcPrivateMessage*>(message)); - break; - case IrcMessage::Quit: - processed = processQuitMessage(static_cast<IrcQuitMessage*>(message)); - break; - case IrcMessage::Topic: - processed = processTopicMessage(static_cast<IrcTopicMessage*>(message)); - break; - case IrcMessage::WhoReply: - processed = processWhoReplyMessage(static_cast<IrcWhoReplyMessage*>(message)); - break; - default: - break; - } - if (processed) - emit q->messageReceived(message); - return processed; -} - -bool IrcBufferPrivate::processJoinMessage(IrcJoinMessage* message) -{ - Q_UNUSED(message); - return false; -} - -bool IrcBufferPrivate::processKickMessage(IrcKickMessage* message) -{ - Q_UNUSED(message); - return false; -} - -bool IrcBufferPrivate::processModeMessage(IrcModeMessage* message) -{ - Q_UNUSED(message); - return false; -} - -bool IrcBufferPrivate::processNamesMessage(IrcNamesMessage* message) -{ - Q_UNUSED(message); - return false; -} - -bool IrcBufferPrivate::processNickMessage(IrcNickMessage* message) -{ - if (!(message->flags() & IrcMessage::Playback) && !message->nick().compare(name, Qt::CaseInsensitive)) { - setName(message->newNick()); - return true; - } - return !message->newNick().compare(name, Qt::CaseInsensitive); -} - -bool IrcBufferPrivate::processNoticeMessage(IrcNoticeMessage* message) -{ - Q_UNUSED(message); - return true; -} - -bool IrcBufferPrivate::processNumericMessage(IrcNumericMessage* message) -{ - Q_UNUSED(message); - return true; -} - -bool IrcBufferPrivate::processPartMessage(IrcPartMessage* message) -{ - Q_UNUSED(message); - return false; -} - -bool IrcBufferPrivate::processPrivateMessage(IrcPrivateMessage* message) -{ - Q_UNUSED(message); - return true; -} - -bool IrcBufferPrivate::processQuitMessage(IrcQuitMessage* message) -{ - return !message->nick().compare(name, Qt::CaseInsensitive); -} - -bool IrcBufferPrivate::processTopicMessage(IrcTopicMessage* message) -{ - Q_UNUSED(message); - return false; -} - -bool IrcBufferPrivate::processWhoReplyMessage(IrcWhoReplyMessage *message) -{ - Q_UNUSED(message); - return true; -} -#endif // IRC_DOXYGEN - -/*! - Constructs a new buffer object with \a parent. - */ -IrcBuffer::IrcBuffer(QObject* parent) - : QObject(parent), d_ptr(new IrcBufferPrivate) -{ - Q_D(IrcBuffer); - d->q_ptr = this; -} - -/*! - \internal - */ -IrcBuffer::IrcBuffer(IrcBufferPrivate& dd, QObject* parent) - : QObject(parent), d_ptr(&dd) -{ - Q_D(IrcBuffer); - d->q_ptr = this; -} - -/*! - Destructs the buffer object. - */ -IrcBuffer::~IrcBuffer() -{ - emit destroyed(this); -} - -/*! - This property holds the whole buffer title. - - The title consists of \ref prefix and \ref name. - - \par Access function: - \li QString <b>title</b>() const - - \par Notifier signal: - \li void <b>titleChanged</b>(const QString& title) - */ -QString IrcBuffer::title() const -{ - Q_D(const IrcBuffer); - return d->prefix + d->name; -} - -/*! - This property holds the name part of the buffer \ref title. - - \par Access functions: - \li QString <b>name</b>() const - \li void <b>setName</b>(const QString& name) [slot] - - \par Notifier signal: - \li void <b>nameChanged</b>(const QString& name) - */ -QString IrcBuffer::name() const -{ - Q_D(const IrcBuffer); - return d->name; -} - -void IrcBuffer::setName(const QString& name) -{ - Q_D(IrcBuffer); - d->setName(name); -} - -/*! - This property holds the prefix part of the buffer \ref title. - - \par Access functions: - \li QString <b>prefix</b>() const - \li void <b>setPrefix</b>(const QString& prefix) [slot] - - \par Notifier signal: - \li void <b>prefixChanged</b>(const QString& prefix) - */ -QString IrcBuffer::prefix() const -{ - Q_D(const IrcBuffer); - return d->prefix; -} - -void IrcBuffer::setPrefix(const QString& prefix) -{ - Q_D(IrcBuffer); - return d->setPrefix(prefix); -} - -/*! - \property bool IrcBuffer::channel - This property holds whether the buffer is a channel. - - \par Access function: - \li bool <b>isChannel</b>() const - - \sa toChannel() - */ -bool IrcBuffer::isChannel() const -{ - return qobject_cast<const IrcChannel*>(this); -} - -/*! - Returns the buffer cast to a IrcChannel, - if the class is actually a channel, \c 0 otherwise. - - \sa \ref channel "isChannel()" -*/ -IrcChannel* IrcBuffer::toChannel() -{ - return qobject_cast<IrcChannel*>(this); -} - -/*! - This property holds the connection of the buffer. - - \par Access function: - \li \ref IrcConnection* <b>connection</b>() const - */ -IrcConnection* IrcBuffer::connection() const -{ - Q_D(const IrcBuffer); - return d->model ? d->model->connection() : 0; -} - -/*! - This property holds the network of the buffer. - - \par Access function: - \li \ref IrcNetwork* <b>network</b>() const - */ -IrcNetwork* IrcBuffer::network() const -{ - Q_D(const IrcBuffer); - return d->model ? d->model->network() : 0; -} - -/*! - This property holds the model of the buffer. - - \par Access function: - \li \ref IrcBufferModel* <b>model</b>() const - */ -IrcBufferModel* IrcBuffer::model() const -{ - Q_D(const IrcBuffer); - return d->model; -} - -/*! - \property bool IrcBuffer::active - This property holds whether the buffer is active. - - A buffer is considered active when a %connection is established. Furthermore, - channel buffers are only considered active when the user is on the channel. - - \par Access function: - \li bool <b>isActive</b>() const - - \par Notifier signal: - \li void <b>activeChanged</b>(bool active) - - \sa IrcConnection::connected - */ -bool IrcBuffer::isActive() const -{ - if (IrcConnection* c = connection()) - return c->isConnected(); - return false; -} - -/*! - \property bool IrcBuffer::sticky - This property holds whether the buffer is sticky. - - A sticky buffer stays in the beginning (Qt::AscendingOrder) or - end (Qt::DescendingOrder) of the list of buffers in IrcBufferModel. - - The default value is \c false. - - \par Access functions: - \li bool <b>isSticky</b>() const - \li void <b>setSticky</b>(bool sticky) - - \par Notifier signal: - \li void <b>stickyChanged</b>(bool sticky) - */ - -bool IrcBuffer::isSticky() const -{ - Q_D(const IrcBuffer); - return d->sticky; -} - -void IrcBuffer::setSticky(bool sticky) -{ - Q_D(IrcBuffer); - if (d->sticky != sticky) { - d->sticky = sticky; - emit stickyChanged(sticky); - } -} - -/*! - \property bool IrcBuffer::persistent - This property holds whether the buffer is persistent. - - The default value is \c false. - - A persistent buffer does not get removed and destructed - when calling IrcBufferModel::clear(), or when when leaving - the corresponding channel. In order to remove a persistent - buffer, either explicitly call IrcBufferModel::remove() or - delete the buffer. - - \par Access functions: - \li bool <b>isPersistent</b>() const - \li void <b>setPersistent</b>(bool persistent) - - \par Notifier signal: - \li void <b>persistentChanged</b>(bool persistent) - */ - -bool IrcBuffer::isPersistent() const -{ - Q_D(const IrcBuffer); - return d->persistent; -} - -void IrcBuffer::setPersistent(bool persistent) -{ - Q_D(IrcBuffer); - if (d->persistent != persistent) { - d->persistent = persistent; - emit persistentChanged(persistent); - } -} - -/*! - \since 3.1 - - This property holds arbitrary user data. - - \par Access functions: - \li QVariantMap <b>userData</b>() const - \li void <b>setUserData</b>(const QVariantMap& data) - - \par Notifier signal: - \li void <b>userDataChanged</b>(const QVariantMap& data) - */ -QVariantMap IrcBuffer::userData() const -{ - Q_D(const IrcBuffer); - return d->userData; -} - -void IrcBuffer::setUserData(const QVariantMap& data) -{ - Q_D(IrcBuffer); - if (d->userData != data) { - d->userData = data; - emit userDataChanged(data); - } -} - -/*! - Sends a \a command to the server. - - This method is provided for convenience. It is equal to: - \code - IrcConnection* connection = buffer->connection(); - connection->sendCommand(command); - \endcode - - \sa IrcConnection::sendCommand() - */ -bool IrcBuffer::sendCommand(IrcCommand* command) -{ - if (IrcConnection* c = connection()) - return c->sendCommand(command); - return false; -} - -/*! - Emits messageReceived() with \a message. - - IrcBufferModel handles only buffer specific messages and delivers them - to the appropriate IrcBuffer instances. When applications decide to handle - IrcBuffer::messageReceived(), IrcBufferModel::messageIgnored() makes it - easy to implement handling for the rest, non-buffer specific messages. - This method can be used to forward such ignored messages to the desired - buffers (for instance the one that is currently active in the GUI). - */ -void IrcBuffer::receiveMessage(IrcMessage* message) -{ - if (message) - emit messageReceived(message); -} - -/*! - \since 3.1 - - Closes the buffer with an optional \a reason. - - The default implementation removes the buffer from its \ref model. - Furthermore, IrcChannel parts the channel with \a reason and custom - IrcBuffer subclasses might do some additional tasks. - - \sa IrcChannel::close() - */ -void IrcBuffer::close(const QString& reason) -{ - Q_UNUSED(reason); - Q_D(const IrcBuffer); - if (d->model) - d->model->remove(this); -} - -#ifndef QT_NO_DEBUG_STREAM -QDebug operator<<(QDebug debug, const IrcBuffer* buffer) -{ - if (!buffer) - return debug << "IrcBuffer(0x0) "; - debug.nospace() << buffer->metaObject()->className() << '(' << (void*) buffer; - if (!buffer->objectName().isEmpty()) - debug.nospace() << ", name=" << qPrintable(buffer->objectName()); - if (!buffer->title().isEmpty()) - debug.nospace() << ", title=" << qPrintable(buffer->title()); - debug.nospace() << ')'; - return debug.space(); -} -#endif // QT_NO_DEBUG_STREAM - -#include "moc_ircbuffer.cpp" - -IRC_END_NAMESPACE diff --git a/src/libcommuni/src/model/ircbuffermodel.cpp b/src/libcommuni/src/model/ircbuffermodel.cpp deleted file mode 100644 index c037a53..0000000 --- a/src/libcommuni/src/model/ircbuffermodel.cpp +++ /dev/null @@ -1,1168 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "ircbuffermodel.h" -#include "ircbuffermodel_p.h" -#include "ircchannel_p.h" -#include "ircbuffer_p.h" -#include "ircnetwork.h" -#include "ircchannel.h" -#include "ircmessage.h" -#include "irccommand.h" -#include "ircconnection.h" -#include <qmetatype.h> -#include <qmetaobject.h> -#include <qdatastream.h> -#include <qvariant.h> - -IRC_BEGIN_NAMESPACE - -/*! - \file ircbuffermodel.h - \brief \#include <IrcBufferModel> - */ - -/*! - \class IrcBufferModel ircbuffermodel.h <IrcBufferModel> - \ingroup models - \brief Keeps track of buffers. - - IrcBufferModel automatically keeps track of channel and query buffers - and manages IrcBuffer instances for them. It will notify via signals - when channel and query buffers are added and/or removed. IrcBufferModel - can be used directly as a data model for Qt's item views - both in C++ - and QML. - - \code - IrcConnection* connection = new IrcConnection(this); - IrcBufferModel* model = new IrcBufferModel(connection); - connect(model, SIGNAL(added(IrcBuffer*)), this, SLOT(onBufferAdded(IrcBuffer*))); - connect(model, SIGNAL(removed(IrcBuffer*)), this, SLOT(onBufferRemoved(IrcBuffer*))); - listView->setModel(model); - \endcode - */ - -/*! - \fn void IrcBufferModel::added(IrcBuffer* buffer) - - This signal is emitted when a \a buffer is added to the list of buffers. - */ - -/*! - \fn void IrcBufferModel::removed(IrcBuffer* buffer) - - This signal is emitted when a \a buffer is removed from the list of buffers. - */ - -/*! - \fn void IrcBufferModel::aboutToBeAdded(IrcBuffer* buffer) - - This signal is emitted just before a \a buffer is added to the list of buffers. - */ - -/*! - \fn void IrcBufferModel::aboutToBeRemoved(IrcBuffer* buffer) - - This signal is emitted just before a \a buffer is removed from the list of buffers. - */ - -/*! - \fn void IrcBufferModel::messageIgnored(IrcMessage* message) - - This signal is emitted when a message was ignored. - - IrcBufferModel handles only buffer specific messages and delivers - them to the appropriate IrcBuffer instances. When applications decide - to handle IrcBuffer::messageReceived(), this signal makes it easy to - implement handling for the rest, non-buffer specific messages. - - \sa IrcConnection::messageReceived(), IrcBuffer::messageReceived() - */ - -#ifndef IRC_DOXYGEN -class IrcBufferLessThan -{ -public: - IrcBufferLessThan(IrcBufferModel* model, Irc::SortMethod method) : model(model), method(method) { } - bool operator()(IrcBuffer* b1, IrcBuffer* b2) const { return model->lessThan(b1, b2, method); } -private: - IrcBufferModel* model; - Irc::SortMethod method; -}; - -class IrcBufferGreaterThan -{ -public: - IrcBufferGreaterThan(IrcBufferModel* model, Irc::SortMethod method) : model(model), method(method) { } - bool operator()(IrcBuffer* b1, IrcBuffer* b2) const { return model->lessThan(b2, b1, method); } -private: - IrcBufferModel* model; - Irc::SortMethod method; -}; - -IrcBufferModelPrivate::IrcBufferModelPrivate() : q_ptr(0), role(Irc::TitleRole), - sortMethod(Irc::SortByHand), sortOrder(Qt::AscendingOrder), - bufferProto(0), channelProto(0), persistent(false) -{ -} - -bool IrcBufferModelPrivate::messageFilter(IrcMessage* msg) -{ - Q_Q(IrcBufferModel); - if (msg->type() == IrcMessage::Join && msg->flags() & IrcMessage::Own) - createBuffer(static_cast<IrcJoinMessage*>(msg)->channel()); - - bool processed = false; - switch (msg->type()) { - case IrcMessage::Nick: - case IrcMessage::Quit: - foreach (IrcBuffer* buffer, bufferList) { - if (buffer->isActive()) - IrcBufferPrivate::get(buffer)->processMessage(msg); - } - processed = true; - break; - - case IrcMessage::Join: - case IrcMessage::Part: - case IrcMessage::Kick: - case IrcMessage::Names: - case IrcMessage::Topic: - processed = processMessage(msg->property("channel").toString(), msg); - break; - - case IrcMessage::WhoReply: - processed = processMessage(static_cast<IrcWhoReplyMessage*>(msg)->mask(), msg); - break; - - case IrcMessage::Private: - if (IrcPrivateMessage* pm = static_cast<IrcPrivateMessage*>(msg)) - processed = !pm->isRequest() && (processMessage(pm->target(), pm, pm->flags() & IrcMessage::Own) || processMessage(pm->nick(), pm, true)); - break; - - case IrcMessage::Notice: - if (IrcNoticeMessage* no = static_cast<IrcNoticeMessage*>(msg)) - processed = !no->isReply() && (processMessage(no->target(), no, no->flags() & IrcMessage::Own) || processMessage(no->nick(), no)); - break; - - case IrcMessage::Mode: - processed = processMessage(static_cast<IrcModeMessage*>(msg)->target(), msg); - break; - - case IrcMessage::Numeric: - // TODO: any other special cases besides RPL_NAMREPLY? - if (static_cast<IrcNumericMessage*>(msg)->code() == Irc::RPL_NAMREPLY) { - const int count = msg->parameters().count(); - const QString channel = msg->parameters().value(count - 2); - processed = processMessage(channel, msg); - } else { - processed = processMessage(msg->parameters().value(1), msg); - } - break; - - default: - break; - } - - if (!processed) - emit q->messageIgnored(msg); - - if (!(msg->flags() & IrcMessage::Playback)) { - if (msg->type() == IrcMessage::Part && msg->flags() & IrcMessage::Own) { - destroyBuffer(static_cast<IrcPartMessage*>(msg)->channel()); - } else if (msg->type() == IrcMessage::Kick) { - const IrcKickMessage* kickMsg = static_cast<IrcKickMessage*>(msg); - if (!kickMsg->user().compare(msg->connection()->nickName(), Qt::CaseInsensitive)) - destroyBuffer(kickMsg->channel()); - } - } - return false; -} - -bool IrcBufferModelPrivate::commandFilter(IrcCommand* cmd) -{ - if (cmd->type() == IrcCommand::Join) { - const QString channel = cmd->parameters().value(0).toLower(); - const QString key = cmd->parameters().value(1); - if (!key.isEmpty()) - keys.insert(channel, key); - else - keys.remove(channel); - } - return false; -} - -IrcBuffer* IrcBufferModelPrivate::createBufferHelper(const QString& title) -{ - Q_Q(IrcBufferModel); - IrcBuffer* buffer = 0; - const QMetaObject* metaObject = q->metaObject(); - int idx = metaObject->indexOfMethod("createBuffer(QVariant)"); - if (idx != -1) { - // QML: QVariant createBuffer(QVariant) - QVariant ret; - QMetaMethod method = metaObject->method(idx); - method.invoke(q, Q_RETURN_ARG(QVariant, ret), Q_ARG(QVariant, title)); - buffer = ret.value<IrcBuffer*>(); - } else { - // C++: IrcBuffer* createBuffer(QString) - idx = metaObject->indexOfMethod("createBuffer(QString)"); - QMetaMethod method = metaObject->method(idx); - method.invoke(q, Q_RETURN_ARG(IrcBuffer*, buffer), Q_ARG(QString, title)); - } - return buffer; -} - -IrcChannel* IrcBufferModelPrivate::createChannelHelper(const QString& title) -{ - Q_Q(IrcBufferModel); - IrcChannel* channel = 0; - const QMetaObject* metaObject = q->metaObject(); - int idx = metaObject->indexOfMethod("createChannel(QVariant)"); - if (idx != -1) { - // QML: QVariant createChannel(QVariant) - QVariant ret; - QMetaMethod method = metaObject->method(idx); - method.invoke(q, Q_RETURN_ARG(QVariant, ret), Q_ARG(QVariant, title)); - channel = ret.value<IrcChannel*>(); - } else { - // C++: IrcChannel* createChannel(QString) - idx = metaObject->indexOfMethod("createChannel(QString)"); - QMetaMethod method = metaObject->method(idx); - method.invoke(q, Q_RETURN_ARG(IrcChannel*, channel), Q_ARG(QString, title)); - } - return channel; -} - -IrcBuffer* IrcBufferModelPrivate::createBuffer(const QString& title) -{ - Q_Q(IrcBufferModel); - IrcBuffer* buffer = bufferMap.value(title.toLower()); - if (!buffer) { - if (connection && connection->network()->isChannel(title)) - buffer = createChannelHelper(title); - else - buffer = createBufferHelper(title); - if (buffer) { - IrcBufferPrivate::get(buffer)->init(title, q); - addBuffer(buffer); - } - } - return buffer; -} - -void IrcBufferModelPrivate::destroyBuffer(const QString& title, bool force) -{ - IrcBuffer* buffer = bufferMap.value(title.toLower()); - if (buffer && (force || (!persistent && !buffer->isPersistent()))) { - removeBuffer(buffer); - buffer->deleteLater(); - } -} - -void IrcBufferModelPrivate::addBuffer(IrcBuffer* buffer, bool notify) -{ - insertBuffer(-1, buffer, notify); -} - -void IrcBufferModelPrivate::insertBuffer(int index, IrcBuffer* buffer, bool notify) -{ - Q_Q(IrcBufferModel); - if (buffer && !bufferList.contains(buffer)) { - const QString title = buffer->title(); - const QString lower = title.toLower(); - if (bufferMap.contains(lower)) { - qWarning() << "IrcBufferModel: ignored duplicate buffer" << title; - return; - } - IrcBufferPrivate::get(buffer)->setModel(q); - const bool isChannel = buffer->isChannel(); - if (sortMethod != Irc::SortByHand) { - QList<IrcBuffer*>::iterator it; - if (sortOrder == Qt::AscendingOrder) - it = qUpperBound(bufferList.begin(), bufferList.end(), buffer, IrcBufferLessThan(q, sortMethod)); - else - it = qUpperBound(bufferList.begin(), bufferList.end(), buffer, IrcBufferGreaterThan(q, sortMethod)); - index = it - bufferList.begin(); - } else if (index == -1) { - index = bufferList.count(); - } - if (notify) - emit q->aboutToBeAdded(buffer); - q->beginInsertRows(QModelIndex(), index, index); - bufferList.insert(index, buffer); - bufferMap.insert(lower, buffer); - if (isChannel) { - channels += title; - if (keys.contains(lower)) - IrcChannelPrivate::get(buffer->toChannel())->setKey(keys.take(lower)); - } - q->connect(buffer, SIGNAL(destroyed(IrcBuffer*)), SLOT(_irc_bufferDestroyed(IrcBuffer*))); - q->endInsertRows(); - if (notify) { - emit q->added(buffer); - if (isChannel) - emit q->channelsChanged(channels); - emit q->buffersChanged(bufferList); - emit q->countChanged(bufferList.count()); - if (bufferList.count() == 1) - emit q->emptyChanged(false); - } - } -} - -void IrcBufferModelPrivate::removeBuffer(IrcBuffer* buffer, bool notify) -{ - Q_Q(IrcBufferModel); - int idx = bufferList.indexOf(buffer); - if (idx != -1) { - const bool isChannel = buffer->isChannel(); - if (notify) - emit q->aboutToBeRemoved(buffer); - q->beginRemoveRows(QModelIndex(), idx, idx); - bufferList.removeAt(idx); - bufferMap.remove(buffer->title().toLower()); - if (isChannel) - channels.removeOne(buffer->title()); - q->endRemoveRows(); - if (notify) { - emit q->removed(buffer); - if (isChannel) - emit q->channelsChanged(channels); - emit q->buffersChanged(bufferList); - emit q->countChanged(bufferList.count()); - if (bufferList.isEmpty()) - emit q->emptyChanged(true); - } - } -} - -bool IrcBufferModelPrivate::renameBuffer(const QString& from, const QString& to) -{ - Q_Q(IrcBufferModel); - const QString fromLower = from.toLower(); - const QString toLower = to.toLower(); - if (bufferMap.contains(toLower)) - destroyBuffer(toLower, true); - if (bufferMap.contains(fromLower)) { - IrcBuffer* buffer = bufferMap.take(fromLower); - bufferMap.insert(toLower, buffer); - - const int idx = bufferList.indexOf(buffer); - QModelIndex index = q->index(idx); - emit q->dataChanged(index, index); - - if (sortMethod != Irc::SortByHand) { - QList<IrcBuffer*> buffers = bufferList; - const bool notify = false; - removeBuffer(buffer, notify); - insertBuffer(-1, buffer, notify); - if (buffers != bufferList) - emit q->buffersChanged(bufferList); - } - return true; - } - return false; -} - -bool IrcBufferModelPrivate::processMessage(const QString& title, IrcMessage* message, bool create) -{ - IrcBuffer* buffer = bufferMap.value(title.toLower()); - if (!buffer && create && !title.contains(QLatin1Char('*'))) - buffer = createBuffer(title); - if (buffer) - return IrcBufferPrivate::get(buffer)->processMessage(message); - return false; -} - -void IrcBufferModelPrivate::_irc_connected() -{ - foreach (IrcBuffer* buffer, bufferList) - IrcBufferPrivate::get(buffer)->connected(); -} - -void IrcBufferModelPrivate::_irc_disconnected() -{ - foreach (IrcBuffer* buffer, bufferList) - IrcBufferPrivate::get(buffer)->disconnected(); -} - -void IrcBufferModelPrivate::_irc_bufferDestroyed(IrcBuffer* buffer) -{ - removeBuffer(buffer); -} -#endif // IRC_DOXYGEN - -/*! - Constructs a new model with \a parent. - - \note If \a parent is an instance of IrcConnection, it will be - automatically assigned to \ref IrcBufferModel::connection "connection". - */ -IrcBufferModel::IrcBufferModel(QObject* parent) - : QAbstractListModel(parent), d_ptr(new IrcBufferModelPrivate) -{ - Q_D(IrcBufferModel); - d->q_ptr = this; - setBufferPrototype(new IrcBuffer(this)); - setChannelPrototype(new IrcChannel(this)); - setConnection(qobject_cast<IrcConnection*>(parent)); -} - -/*! - Destructs the model. - */ -IrcBufferModel::~IrcBufferModel() -{ - Q_D(IrcBufferModel); - foreach (IrcBuffer* buffer, d->bufferList) { - buffer->disconnect(this); - delete buffer; - } - d->bufferList.clear(); - d->bufferMap.clear(); - d->channels.clear(); - emit destroyed(this); -} - -/*! - This property holds the connection. - - \par Access functions: - \li \ref IrcConnection* <b>connection</b>() const - \li void <b>setConnection</b>(\ref IrcConnection* connection) - - \warning Changing the connection on the fly is not supported. - */ -IrcConnection* IrcBufferModel::connection() const -{ - Q_D(const IrcBufferModel); - return d->connection; -} - -void IrcBufferModel::setConnection(IrcConnection* connection) -{ - Q_D(IrcBufferModel); - if (d->connection != connection) { - if (d->connection) { - qCritical("IrcBufferModel::setConnection(): changing the connection on the fly is not supported."); - return; - } - d->connection = connection; - d->connection->installMessageFilter(d); - d->connection->installCommandFilter(d); - connect(d->connection, SIGNAL(connected()), this, SLOT(_irc_connected())); - connect(d->connection, SIGNAL(disconnected()), this, SLOT(_irc_disconnected())); - emit connectionChanged(connection); - emit networkChanged(network()); - } -} - -/*! - This property holds the network. - - \par Access functions: - \li \ref IrcNetwork* <b>network</b>() const - */ -IrcNetwork* IrcBufferModel::network() const -{ - Q_D(const IrcBufferModel); - return d->connection ? d->connection->network() : 0; -} - -/*! - This property holds the number of buffers. - - \par Access function: - \li int <b>count</b>() const - - \par Notifier signal: - \li void <b>countChanged</b>(int count) - */ -int IrcBufferModel::count() const -{ - return rowCount(); -} - -/*! - \since 3.1 - \property bool IrcBufferModel::empty - - This property holds the whether the model is empty. - - \par Access function: - \li bool <b>isEmpty</b>() const - - \par Notifier signal: - \li void <b>emptyChanged</b>(bool empty) - */ -bool IrcBufferModel::isEmpty() const -{ - Q_D(const IrcBufferModel); - return d->bufferList.isEmpty(); -} - -/*! - This property holds the list of channel names. - - \par Access function: - \li QStringList <b>channels</b>() const - - \par Notifier signal: - \li void <b>channelsChanged</b>(const QStringList& channels) - */ -QStringList IrcBufferModel::channels() const -{ - Q_D(const IrcBufferModel); - return d->channels; -} - -/*! - This property holds the list of buffers. - - \par Access function: - \li QList<\ref IrcBuffer*> <b>buffers</b>() const - - \par Notifier signal: - \li void <b>buffersChanged</b>(const QList<\ref IrcBuffer*>& buffers) - */ -QList<IrcBuffer*> IrcBufferModel::buffers() const -{ - Q_D(const IrcBufferModel); - return d->bufferList; -} - -/*! - Returns the buffer object at \a index. - */ -IrcBuffer* IrcBufferModel::get(int index) const -{ - Q_D(const IrcBufferModel); - return d->bufferList.value(index); -} - -/*! - Returns the buffer object for \a title or \c 0 if not found. - */ -IrcBuffer* IrcBufferModel::find(const QString& title) const -{ - Q_D(const IrcBufferModel); - return d->bufferMap.value(title.toLower()); -} - -/*! - Returns \c true if the model contains \a title. - */ -bool IrcBufferModel::contains(const QString& title) const -{ - Q_D(const IrcBufferModel); - return d->bufferMap.contains(title.toLower()); -} - -/*! - Returns the index of the specified \a buffer, - or \c -1 if the model does not contain the \a buffer. - */ -int IrcBufferModel::indexOf(IrcBuffer* buffer) const -{ - Q_D(const IrcBufferModel); - return d->bufferList.indexOf(buffer); -} - -/*! - Adds a buffer with \a title to the model and returns it. - */ -IrcBuffer* IrcBufferModel::add(const QString& title) -{ - Q_D(IrcBufferModel); - return d->createBuffer(title); -} - -/*! - Adds the \a buffer to the model. - */ -void IrcBufferModel::add(IrcBuffer* buffer) -{ - Q_D(IrcBufferModel); - d->addBuffer(buffer); -} - -/*! - Removes and destroys a buffer with \a title from the model. - */ -void IrcBufferModel::remove(const QString& title) -{ - Q_D(IrcBufferModel); - d->destroyBuffer(title, true); -} - -/*! - Removes and destroys a \a buffer from the model. - */ -void IrcBufferModel::remove(IrcBuffer* buffer) -{ - delete buffer; -} - -/*! - This property holds the display role. - - The specified data role is returned for Qt::DisplayRole. - - The default value is \ref Irc::TitleRole. - - \par Access functions: - \li \ref Irc::DataRole <b>displayRole</b>() const - \li void <b>setDisplayRole</b>(\ref Irc::DataRole role) - */ -Irc::DataRole IrcBufferModel::displayRole() const -{ - Q_D(const IrcBufferModel); - return d->role; -} - -void IrcBufferModel::setDisplayRole(Irc::DataRole role) -{ - Q_D(IrcBufferModel); - d->role = role; -} - -/*! - \since 3.1 - - \property bool IrcBufferModel::persistent - This property holds whether the model is persistent. - - The default value is \c false. - - A persistent model does not remove and destruct channel buffers - automatically when leaving the corresponding channels. In order - to remove buffers from a persistent model, either call - IrcBufferModel::remove() or delete the buffer. - - \par Access functions: - \li bool <b>isPersistent</b>() const - \li void <b>setPersistent</b>(bool persistent) - - \par Notifier signal: - \li void <b>persistentChanged</b>(bool persistent) - */ -bool IrcBufferModel::isPersistent() const -{ - Q_D(const IrcBufferModel); - return d->persistent; -} - -void IrcBufferModel::setPersistent(bool persistent) -{ - Q_D(IrcBufferModel); - if (d->persistent != persistent) { - d->persistent = persistent; - emit persistentChanged(persistent); - } -} - -/*! - Returns the model index for \a buffer. - */ -QModelIndex IrcBufferModel::index(IrcBuffer* buffer) const -{ - Q_D(const IrcBufferModel); - return index(d->bufferList.indexOf(buffer)); -} - -/*! - Returns the buffer for model \a index. - */ -IrcBuffer* IrcBufferModel::buffer(const QModelIndex& index) const -{ - if (!hasIndex(index.row(), index.column())) - return 0; - - return static_cast<IrcBuffer*>(index.internalPointer()); -} - -/*! - This property holds the model sort order. - - The default value is \c Qt::AscendingOrder. - - \par Access functions: - \li Qt::SortOrder <b>sortOrder</b>() const - \li void <b>setSortOrder</b>(Qt::SortOrder order) - - \sa sort(), lessThan() - */ -Qt::SortOrder IrcBufferModel::sortOrder() const -{ - Q_D(const IrcBufferModel); - return d->sortOrder; -} - -void IrcBufferModel::setSortOrder(Qt::SortOrder order) -{ - Q_D(IrcBufferModel); - if (d->sortOrder != order) { - d->sortOrder = order; - if (d->sortMethod != Irc::SortByHand && !d->bufferList.isEmpty()) - sort(d->sortMethod, d->sortOrder); - } -} - -/*! - This property holds the model sort method. - - The default value is \c Irc::SortByHand. - - Method | Description | Example - -----------------|-------------------------------------------------------------------|------------------------------------------------- - Irc::SortByHand | Buffers are not sorted automatically, but only by calling sort(). | - - Irc::SortByName | Buffers are sorted alphabetically, ignoring any channel prefix. | "bot", "#communi", "#freenode", "jpnurmi", "#qt" - Irc::SortByTitle | Buffers are sorted alphabetically, and channels before queries. | "#communi", "#freenode", "#qt", "bot", "jpnurmi" - - \par Access functions: - \li Irc::SortMethod <b>sortMethod</b>() const - \li void <b>setSortMethod</b>(Irc::SortMethod method) - - \sa sort(), lessThan() - */ -Irc::SortMethod IrcBufferModel::sortMethod() const -{ - Q_D(const IrcBufferModel); - return d->sortMethod; -} - -void IrcBufferModel::setSortMethod(Irc::SortMethod method) -{ - Q_D(IrcBufferModel); - if (d->sortMethod != method) { - d->sortMethod = method; - if (d->sortMethod != Irc::SortByHand && !d->bufferList.isEmpty()) - sort(d->sortMethod, d->sortOrder); - } -} - -/*! - Clears the model. - - All buffers except \ref IrcBuffer::persistent "persistent" buffers are removed and destroyed. - - In order to remove a persistent buffer, either explicitly call remove() or delete the buffer. - */ -void IrcBufferModel::clear() -{ - Q_D(IrcBufferModel); - if (!d->bufferList.isEmpty()) { - bool bufferRemoved = false; - bool channelRemoved = false; - foreach (IrcBuffer* buffer, d->bufferList) { - if (!buffer->isPersistent()) { - if (!bufferRemoved) { - beginResetModel(); - bufferRemoved = true; - } - channelRemoved |= buffer->isChannel(); - buffer->disconnect(this); - d->bufferList.removeOne(buffer); - d->channels.removeOne(buffer->title()); - d->bufferMap.remove(buffer->title().toLower()); - delete buffer; - } - } - if (bufferRemoved) { - endResetModel(); - if (channelRemoved) - emit channelsChanged(d->channels); - emit buffersChanged(d->bufferList); - emit countChanged(d->bufferList.count()); - if (d->bufferList.isEmpty()) - emit emptyChanged(true); - } - } -} - -/*! - Makes the model receive and handle \a message. - */ -void IrcBufferModel::receiveMessage(IrcMessage* message) -{ - Q_D(IrcBufferModel); - d->messageFilter(message); -} - -/*! - Sorts the model using the given \a order. - */ -void IrcBufferModel::sort(int column, Qt::SortOrder order) -{ - Q_D(IrcBufferModel); - if (column == 0) - sort(d->sortMethod, order); -} - -/*! - Sorts the model using the given \a method and \a order. - - \sa lessThan() - */ -void IrcBufferModel::sort(Irc::SortMethod method, Qt::SortOrder order) -{ - Q_D(IrcBufferModel); - if (method == Irc::SortByHand) - return; - - emit layoutAboutToBeChanged(); - - QList<IrcBuffer*> persistentBuffers; - QModelIndexList oldPersistentIndexes = persistentIndexList(); - foreach (const QModelIndex& index, oldPersistentIndexes) - persistentBuffers += static_cast<IrcBuffer*>(index.internalPointer()); - - if (order == Qt::AscendingOrder) - qSort(d->bufferList.begin(), d->bufferList.end(), IrcBufferLessThan(this, method)); - else - qSort(d->bufferList.begin(), d->bufferList.end(), IrcBufferGreaterThan(this, method)); - - QModelIndexList newPersistentIndexes; - foreach (IrcBuffer* buffer, persistentBuffers) - newPersistentIndexes += index(d->bufferList.indexOf(buffer)); - changePersistentIndexList(oldPersistentIndexes, newPersistentIndexes); - - emit layoutChanged(); -} - -/*! - Creates a buffer object with \a title. - - IrcBufferModel will automatically call this factory method when a - need for the buffer object occurs ie. a private message is received. - - The default implementation creates an instance of the buffer prototype. - Reimplement this function in order to alter the default behavior. - - \sa bufferPrototype - */ -IrcBuffer* IrcBufferModel::createBuffer(const QString& title) -{ - Q_D(IrcBufferModel); - Q_UNUSED(title); - QObject* instance = d->bufferProto->metaObject()->newInstance(Q_ARG(QObject*, this)); - return qobject_cast<IrcBuffer*>(instance); -} - -/*! - Creates a channel object with \a title. - - IrcBufferModel will automatically call this factory method when a - need for the channel object occurs ie. a channel is being joined. - - The default implementation creates an instance of the channel prototype. - Reimplement this function in order to alter the default behavior. - - \sa channelPrototype - */ -IrcChannel* IrcBufferModel::createChannel(const QString& title) -{ - Q_D(IrcBufferModel); - Q_UNUSED(title); - QObject* instance = d->channelProto->metaObject()->newInstance(Q_ARG(QObject*, this)); - return qobject_cast<IrcChannel*>(instance); -} - -/*! - Returns \c true if \a one buffer is "less than" \a another, - otherwise returns \c false. - - The default implementation sorts according to the specified sort method. - Reimplement this function in order to customize the sort order. - - \sa sort(), sortMethod - */ -bool IrcBufferModel::lessThan(IrcBuffer* one, IrcBuffer* another, Irc::SortMethod method) const -{ - if (one->isSticky() != another->isSticky()) - return one->isSticky(); - - if (method == Irc::SortByTitle) { - const QStringList prefixes = one->network()->channelTypes(); - - const QString p1 = one->prefix(); - const QString p2 = another->prefix(); - - const int i1 = !p1.isEmpty() ? prefixes.indexOf(p1.at(0)) : -1; - const int i2 = !p2.isEmpty() ? prefixes.indexOf(p2.at(0)) : -1; - - if (i1 >= 0 && i2 < 0) - return true; - if (i1 < 0 && i2 >= 0) - return false; - if (i1 >= 0 && i2 >= 0 && i1 != i2) - return i1 < i2; - } - - // Irc::SortByName - const QString n1 = one->name(); - const QString n2 = another->name(); - return n1.compare(n2, Qt::CaseInsensitive) < 0; -} - -/*! - The following role names are provided by default: - - Role | Name | Type | Example - -----------------|------------|-------------|-------- - Qt::DisplayRole | "display" | 1) | - - Irc::BufferRole | "buffer" | IrcBuffer* | <object> - Irc::ChannelRole | "channel" | IrcChannel* | <object> - Irc::NameRole | "name" | QString | "communi" - Irc::PrefixRole | "prefix" | QString | "#" - Irc::TitleRole | "title" | QString | "#communi" - - 1) The type depends on \ref displayRole. - */ -QHash<int, QByteArray> IrcBufferModel::roleNames() const -{ - QHash<int, QByteArray> roles; - roles[Qt::DisplayRole] = "display"; - roles[Irc::BufferRole] = "buffer"; - roles[Irc::ChannelRole] = "channel"; - roles[Irc::NameRole] = "name"; - roles[Irc::PrefixRole] = "prefix"; - roles[Irc::TitleRole] = "title"; - return roles; -} - -/*! - Returns the number of buffers. - */ -int IrcBufferModel::rowCount(const QModelIndex& parent) const -{ - if (parent.isValid()) - return 0; - - Q_D(const IrcBufferModel); - return d->bufferList.count(); -} - -/*! - Returns the data for specified \a role and user referred to by by the \a index. - */ -QVariant IrcBufferModel::data(const QModelIndex& index, int role) const -{ - Q_D(const IrcBufferModel); - if (!hasIndex(index.row(), index.column(), index.parent())) - return QVariant(); - - IrcBuffer* buffer = static_cast<IrcBuffer*>(index.internalPointer()); - Q_ASSERT(buffer); - - switch (role) { - case Qt::DisplayRole: - return data(index, d->role); - case Irc::BufferRole: - return QVariant::fromValue(buffer); - case Irc::ChannelRole: - return QVariant::fromValue(buffer->toChannel()); - case Irc::NameRole: - return buffer->name(); - case Irc::PrefixRole: - return buffer->prefix(); - case Irc::TitleRole: - return buffer->title(); - } - - return QVariant(); -} - -/*! - Returns the index of the item in the model specified by the given \a row, \a column and \a parent index. - */ -QModelIndex IrcBufferModel::index(int row, int column, const QModelIndex& parent) const -{ - Q_D(const IrcBufferModel); - if (!hasIndex(row, column, parent)) - return QModelIndex(); - - return createIndex(row, column, d->bufferList.at(row)); -} - -/*! - This property holds the buffer prototype. - - The prototype is used by the default implementation of createBuffer(). - - \note The prototype must have an invokable constructor. - - \par Access functions: - \li \ref IrcBuffer* <b>bufferPrototype</b>() const - \li void <b>setBufferPrototype</b>(\ref IrcBuffer* prototype) - */ -IrcBuffer* IrcBufferModel::bufferPrototype() const -{ - Q_D(const IrcBufferModel); - return d->bufferProto; -} - -void IrcBufferModel::setBufferPrototype(IrcBuffer* prototype) -{ - Q_D(IrcBufferModel); - if (d->bufferProto != prototype) { - if (d->bufferProto && d->bufferProto->parent() == this) - delete d->bufferProto; - d->bufferProto = prototype ? prototype : new IrcBuffer(this); - emit bufferPrototypeChanged(d->bufferProto); - } -} - -/*! - This property holds the channel prototype. - - The prototype is used by the default implementation of createChannel(). - - \note The prototype must have an invokable constructor. - - \par Access functions: - \li \ref IrcChannel* <b>channelPrototype</b>() const - \li void <b>setChannelPrototype</b>(\ref IrcChannel* prototype) - */ -IrcChannel* IrcBufferModel::channelPrototype() const -{ - Q_D(const IrcBufferModel); - return d->channelProto; -} - -void IrcBufferModel::setChannelPrototype(IrcChannel* prototype) -{ - Q_D(IrcBufferModel); - if (d->channelProto != prototype) { - if (d->channelProto && d->channelProto->parent() == this) - delete d->channelProto; - d->channelProto = prototype ? prototype : new IrcChannel(this); - emit channelPrototypeChanged(d->channelProto); - } -} - -/*! - \since 3.1 - - Saves the state of the model. The \a version number is stored as part of the state data. - - To restore the saved state, pass the return value and \a version number to restoreState(). - */ -QByteArray IrcBufferModel::saveState(int version) const -{ - Q_D(const IrcBufferModel); - QVariantMap args; - args.insert("version", version); - args.insert("sortOrder", d->sortOrder); - args.insert("sortMethod", d->sortMethod); - args.insert("displayRole", d->role); - args.insert("persistent", d->persistent); - - QVariantList bufs; - foreach (IrcBuffer* buffer, d->bufferList) { - QVariantMap b; - b.insert("channel", buffer->isChannel()); - b.insert("name", buffer->name()); - b.insert("prefix", buffer->prefix()); - b.insert("title", buffer->title()); - if (IrcChannel* channel = buffer->toChannel()) { - IrcChannelPrivate* p = IrcChannelPrivate::get(channel); - b.insert("modes", QStringList(p->modes.keys())); - b.insert("args", QStringList(p->modes.values())); - b.insert("topic", channel->topic()); - } - b.insert("stick", buffer->isSticky()); - b.insert("persistent", buffer->isPersistent()); - b.insert("userData", buffer->userData()); - bufs += b; - } - args.insert("buffers", bufs); - - QByteArray state; - QDataStream out(&state, QIODevice::WriteOnly); - out << args; - return state; -} - -/*! - \since 3.1 - - Restores the \a state of the model. The \a version number is compared with that stored in \a state. - If they do not match, the model state is left unchanged, and this function returns \c false; otherwise, - the state is restored, and \c true is returned. - - \sa saveState() - */ -bool IrcBufferModel::restoreState(const QByteArray& state, int version) -{ - Q_D(IrcBufferModel); - QVariantMap args; - QDataStream in(state); - in >> args; - if (in.status() != QDataStream::Ok || args.value("version", -1).toInt() != version) - return false; - - setSortOrder(static_cast<Qt::SortOrder>(args.value("sortOrder", sortOrder()).toInt())); - setSortMethod(static_cast<Irc::SortMethod>(args.value("sortMethod", sortMethod()).toInt())); - setDisplayRole(static_cast<Irc::DataRole>(args.value("displayRole", displayRole()).toInt())); - setPersistent(args.value("persistent", isPersistent()).toBool()); - - QVariantList buffers = args.value("buffers").toList(); - foreach (const QVariant& v, buffers) { - QVariantMap b = v.toMap(); - IrcBuffer* buffer = find(b.value("title").toString()); - if (!buffer) { - if (b.value("channel").toBool()) - buffer = d->createChannelHelper(b.value("title").toString()); - else - buffer = d->createBufferHelper(b.value("title").toString()); - buffer->setName(b.value("name").toString()); - buffer->setPrefix(b.value("prefix").toString()); - buffer->setSticky(b.value("sticky").toBool()); - buffer->setPersistent(b.value("persistent").toBool()); - buffer->setUserData(b.value("userData").toMap()); - add(buffer); - } - IrcChannel* channel = buffer->toChannel(); - if (channel && !channel->isActive()) { - IrcChannelPrivate* p = IrcChannelPrivate::get(channel); - const QStringList modes = b.value("modes").toStringList(); - const QStringList args = b.value("args").toStringList(); - for (int i = 0; i < modes.count(); ++i) - p->modes.insert(modes.at(i), args.value(i)); - channel->join(); - } - } - return true; -} - -#include "moc_ircbuffermodel.cpp" -#include "moc_ircbuffermodel_p.cpp" - -IRC_END_NAMESPACE diff --git a/src/libcommuni/src/model/ircchannel.cpp b/src/libcommuni/src/model/ircchannel.cpp deleted file mode 100644 index 15b4bc2..0000000 --- a/src/libcommuni/src/model/ircchannel.cpp +++ /dev/null @@ -1,623 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "ircchannel.h" -#include "ircchannel_p.h" -#include "ircusermodel.h" -#include "ircusermodel_p.h" -#include "ircbuffermodel.h" -#include "ircbuffermodel_p.h" -#include "ircconnection.h" -#include "ircnetwork.h" -#include "irccommand.h" -#include "ircuser_p.h" -#include "irc.h" - -IRC_BEGIN_NAMESPACE - -/*! - \file ircchannel.h - \brief \#include <IrcChannel> - */ - -/*! - \class IrcChannel ircchannel.h <IrcChannel> - \ingroup models - \brief Keeps track of channel status. - - \sa IrcBufferModel -*/ - -#ifndef IRC_DOXYGEN -static QString getPrefix(const QString& name, const QStringList& prefixes) -{ - int i = 0; - while (i < name.length() && prefixes.contains(name.at(i))) - ++i; - return name.left(i); -} - -static QString channelName(const QString& title, const QStringList& prefixes) -{ - int i = 0; - while (i < title.length() && prefixes.contains(title.at(i))) - ++i; - return title.mid(i); -} - -static QString userName(const QString& name, const QStringList& prefixes) -{ - QString copy = name; - while (!copy.isEmpty() && prefixes.contains(copy.at(0))) - copy.remove(0, 1); - return Irc::nickFromPrefix(copy); -} - -IrcChannelPrivate::IrcChannelPrivate() : active(false) -{ - qRegisterMetaType<IrcChannel*>(); - qRegisterMetaType<QList<IrcChannel*> >(); -} - -IrcChannelPrivate::~IrcChannelPrivate() -{ -} - -void IrcChannelPrivate::init(const QString& title, IrcBufferModel* m) -{ - IrcBufferPrivate::init(title, m); - - const QStringList chanTypes = m->network()->channelTypes(); - prefix = getPrefix(title, chanTypes); - name = channelName(title, chanTypes); -} - -void IrcChannelPrivate::connected() -{ - // not active until joined - setActive(false); -} - -void IrcChannelPrivate::disconnected() -{ - setActive(false); -} - -void IrcChannelPrivate::setActive(bool value) -{ - Q_Q(IrcChannel); - if (active != value) { - active = value; - emit q->activeChanged(active); - } -} - -void IrcChannelPrivate::changeModes(const QString& value, const QStringList& arguments) -{ - Q_Q(IrcChannel); - const IrcNetwork* network = q->network(); - - QMap<QString, QString> ms = modes; - QStringList args = arguments; - - bool add = true; - for (int i = 0; i < value.size(); ++i) { - const QString m = value.at(i); - if (m == QLatin1String("+")) { - add = true; - } else if (m == QLatin1String("-")) { - add = false; - } else { - if (add) { - QString a; - if (!args.isEmpty() && network && network->channelModes(IrcNetwork::TypeB | IrcNetwork::TypeC).contains(m)) - a = args.takeFirst(); - ms.insert(m, a); - } else { - ms.remove(m); - } - } - } - - if (modes != ms) { - setKey(ms.value(QLatin1String("k"))); - modes = ms; - emit q->modeChanged(q->mode()); - } -} - -void IrcChannelPrivate::setModes(const QString& value, const QStringList& arguments) -{ - Q_Q(IrcChannel); - const IrcNetwork* network = q->network(); - - QMap<QString, QString> ms; - QStringList args = arguments; - - for (int i = 0; i < value.size(); ++i) { - const QString m = value.at(i); - if (m != QLatin1String("+") && m != QLatin1String("-")) { - QString a; - if (!args.isEmpty() && network && network->channelModes(IrcNetwork::TypeB | IrcNetwork::TypeC).contains(m)) - a = args.takeFirst(); - ms.insert(m, a); - } - } - - if (modes != ms) { - setKey(ms.value(QLatin1String("k"))); - modes = ms; - emit q->modeChanged(q->mode()); - } -} - -void IrcChannelPrivate::setTopic(const QString& value) -{ - Q_Q(IrcChannel); - if (topic != value) { - topic = value; - emit q->topicChanged(topic); - } -} - -void IrcChannelPrivate::setKey(const QString& value) -{ - Q_Q(IrcChannel); - if (modes.value(QLatin1String("k")) != value) { - modes.insert(QLatin1String("k"), value); - emit q->keyChanged(value); - } -} - -void IrcChannelPrivate::addUser(const QString& name) -{ - Q_Q(IrcChannel); - const QStringList prefixes = q->network()->prefixes(); - - IrcUser* user = new IrcUser(q); - IrcUserPrivate* priv = IrcUserPrivate::get(user); - priv->channel = q; - priv->setName(userName(name, prefixes)); - priv->setPrefix(getPrefix(name, prefixes)); - priv->setMode(q->network()->prefixToMode(user->prefix())); - activeUsers.prepend(user); - userList.append(user); - userMap.insert(user->name(), user); - names = userMap.keys(); - - foreach (IrcUserModel* model, userModels) - IrcUserModelPrivate::get(model)->addUser(user); -} - -bool IrcChannelPrivate::removeUser(const QString& name) -{ - if (IrcUser* user = userMap.value(name)) { - userMap.remove(name); - names = userMap.keys(); - userList.removeOne(user); - activeUsers.removeOne(user); - foreach (IrcUserModel* model, userModels) - IrcUserModelPrivate::get(model)->removeUser(user); - user->deleteLater(); - return true; - } - return false; -} - -void IrcChannelPrivate::setUsers(const QStringList& users) -{ - Q_Q(IrcChannel); - const QStringList prefixes = q->network()->prefixes(); - - qDeleteAll(userList); - userMap.clear(); - userList.clear(); - activeUsers.clear(); - - foreach (const QString& name, users) { - IrcUser* user = new IrcUser(q); - IrcUserPrivate* priv = IrcUserPrivate::get(user); - priv->channel = q; - priv->setName(userName(name, prefixes)); - priv->setPrefix(getPrefix(name, prefixes)); - priv->setMode(q->network()->prefixToMode(user->prefix())); - activeUsers.append(user); - userList.append(user); - userMap.insert(user->name(), user); - } - names = userMap.keys(); - - foreach (IrcUserModel* model, userModels) - IrcUserModelPrivate::get(model)->setUsers(userList); -} - -bool IrcChannelPrivate::renameUser(const QString& from, const QString& to) -{ - if (IrcUser* user = userMap.take(from)) { - IrcUserPrivate::get(user)->setName(to); - userMap.insert(to, user); - names = userMap.keys(); - - foreach (IrcUserModel* model, userModels) { - IrcUserModelPrivate::get(model)->renameUser(user); - emit model->namesChanged(names); - } - return true; - } - return false; -} - -void IrcChannelPrivate::setUserMode(const QString& name, const QString& command) -{ - if (IrcUser* user = userMap.value(name)) { - bool add = true; - QString mode = user->mode(); - QString prefix = user->prefix(); - const IrcNetwork* network = model->network(); - for (int i = 0; i < command.size(); ++i) { - QChar c = command.at(i); - if (c == QLatin1Char('+')) { - add = true; - } else if (c == QLatin1Char('-')) { - add = false; - } else { - QString p = network->modeToPrefix(c); - if (add) { - if (!mode.contains(c)) - mode += c; - if (!prefix.contains(p)) - prefix += p; - } else { - mode.remove(c); - prefix.remove(p); - } - } - } - - QString sortedMode; - foreach (const QString& m, network->modes()) - if (mode.contains(m)) - sortedMode += m; - - QString sortedPrefix; - foreach (const QString& p, network->prefixes()) - if (prefix.contains(p)) - sortedPrefix += p; - - IrcUserPrivate* priv = IrcUserPrivate::get(user); - priv->setPrefix(sortedPrefix); - priv->setMode(sortedMode); - - foreach (IrcUserModel* model, userModels) - IrcUserModelPrivate::get(model)->setUserMode(user); - } -} - -void IrcChannelPrivate::promoteUser(const QString& name) -{ - if (IrcUser* user = userMap.value(name)) { - const int idx = activeUsers.indexOf(user); - Q_ASSERT(idx != -1); - activeUsers.move(idx, 0); - foreach (IrcUserModel* model, userModels) - IrcUserModelPrivate::get(model)->promoteUser(user); - } -} - -void IrcChannelPrivate::setUserAway(const QString& name, const bool &away) -{ - if (IrcUser* user = userMap.value(name)) { - IrcUserPrivate* priv = IrcUserPrivate::get(user); - - priv->setAway(away); - } -} - -void IrcChannelPrivate::setUserServOp(const QString& name, const bool &servOp) -{ - if (IrcUser* user = userMap.value(name)) { - IrcUserPrivate* priv = IrcUserPrivate::get(user); - - priv->setServOp(servOp); - } -} - -bool IrcChannelPrivate::processJoinMessage(IrcJoinMessage* message) -{ - if (!(message->flags() & IrcMessage::Playback)) { - if (message->flags() & IrcMessage::Own) - setActive(true); - else - addUser(message->nick()); - } - return true; -} - -bool IrcChannelPrivate::processKickMessage(IrcKickMessage* message) -{ - if (!(message->flags() & IrcMessage::Playback)) { - if (!message->user().compare(message->connection()->nickName(), Qt::CaseInsensitive)) { - setActive(false); - return true; - } - return removeUser(message->user()); - } - return userMap.contains(message->user()); -} - -bool IrcChannelPrivate::processModeMessage(IrcModeMessage* message) -{ - if (!(message->flags() & IrcMessage::Playback)) { - if (message->kind() == IrcModeMessage::Channel) { - if (message->isReply()) - setModes(message->mode(), message->arguments()); - else - changeModes(message->mode(), message->arguments()); - return true; - } else if (!message->argument().isEmpty()) { - setUserMode(message->argument(), message->mode()); - } - } - return true; -} - -bool IrcChannelPrivate::processNamesMessage(IrcNamesMessage* message) -{ - if (!(message->flags() & IrcMessage::Playback)) - setUsers(message->names()); - return true; -} - -bool IrcChannelPrivate::processNickMessage(IrcNickMessage* message) -{ - const bool renamed = renameUser(message->oldNick(), message->newNick()); - if (renamed) - promoteUser(message->newNick()); - return renamed; -} - -bool IrcChannelPrivate::processNoticeMessage(IrcNoticeMessage* message) -{ - promoteUser(message->nick()); - return true; -} - -bool IrcChannelPrivate::processNumericMessage(IrcNumericMessage* message) -{ - promoteUser(message->nick()); - return true; -} - -bool IrcChannelPrivate::processPartMessage(IrcPartMessage* message) -{ - if (!(message->flags() & IrcMessage::Playback)) { - if (message->flags() & IrcMessage::Own) { - setActive(false); - return true; - } - return removeUser(message->nick()); - } - return true; -} - -bool IrcChannelPrivate::processPrivateMessage(IrcPrivateMessage* message) -{ - const QString content = message->content(); - const bool prefixed = !content.isEmpty() && message->network()->prefixes().contains(content.at(0)); - foreach (IrcUser* user, activeUsers) { - const QString str = prefixed ? user->title() : user->name(); - if (content.startsWith(str)) { - promoteUser(user->name()); - break; - } - } - promoteUser(message->nick()); - return true; -} - -bool IrcChannelPrivate::processQuitMessage(IrcQuitMessage* message) -{ - if (!(message->flags() & IrcMessage::Playback)) { - if (message->flags() & IrcMessage::Own) { - setActive(false); - return true; - } - return removeUser(message->nick()) || IrcBufferPrivate::processQuitMessage(message); - } - return userMap.contains(message->nick()) || IrcBufferPrivate::processQuitMessage(message); -} - -bool IrcChannelPrivate::processTopicMessage(IrcTopicMessage* message) -{ - if (!(message->flags() & IrcMessage::Playback)) - setTopic(message->topic()); - return true; -} - -bool IrcChannelPrivate::processWhoReplyMessage(IrcWhoReplyMessage *message) -{ - if(message->isValid()) { - setUserAway(message->nick(), message->isAway()); - setUserServOp(message->nick(), message->isServOp()); - return true; - } - return false; -} -#endif // IRC_DOXYGEN - -/*! - Constructs a new channel object with \a parent. - */ -IrcChannel::IrcChannel(QObject* parent) - : IrcBuffer(*new IrcChannelPrivate, parent) -{ -} - -/*! - Destructs the channel object. - */ -IrcChannel::~IrcChannel() -{ - Q_D(IrcChannel); - qDeleteAll(d->userList); - d->userList.clear(); - d->userMap.clear(); - d->names.clear(); - d->userModels.clear(); - emit destroyed(this); -} - -/*! - \since 3.1 - - This property holds the channel key. - - \par Access function: - \li QString <b>key</b>() const - - \par Notifier signal: - \li void <b>keyChanged</b>(const QString& key) - */ -QString IrcChannel::key() const -{ - Q_D(const IrcChannel); - return d->modes.value(QLatin1String("k")); -} - -/*! - This property holds the complete channel mode including possible arguments. - - \par Access function: - \li QString <b>mode</b>() const - - \par Notifier signal: - \li void <b>modeChanged</b>(const QString& mode) - */ -QString IrcChannel::mode() const -{ - Q_D(const IrcChannel); - QString m = QStringList(d->modes.keys()).join(QString()); - QStringList a = d->modes.values(); - a.removeAll(QString()); - if (!a.isEmpty()) - m += QLatin1String(" ") + a.join(QLatin1String(" ")); - if (!m.isEmpty()) - m.prepend(QLatin1String("+")); - return m; -} - -/*! - This property holds the channel topic. - - \par Access function: - \li QString <b>topic</b>() const - - \par Notifier signal: - \li void <b>topicChanged</b>(const QString& topic) - */ -QString IrcChannel::topic() const -{ - Q_D(const IrcChannel); - return d->topic; -} - -bool IrcChannel::isActive() const -{ - Q_D(const IrcChannel); - return IrcBuffer::isActive() && d->active; -} - -/*! - \since 3.1 - - Joins the channel with an optional \a key. - - This method is provided for convenience. It is equal to: - \code - IrcCommand* command = IrcCommand::createJoin(channel->title(), key); - channel->sendCommand(command); - \endcode - - \sa IrcBuffer::sendCommand(), IrcCommand::createJoin() - */ -void IrcChannel::join(const QString& key) -{ - Q_D(IrcChannel); - if (!key.isEmpty()) - d->setKey(key); - sendCommand(IrcCommand::createJoin(title(), IrcChannel::key())); -} - -/*! - Parts the channel with an optional \a reason. - - This method is provided for convenience. It is equal to: - \code - IrcCommand* command = IrcCommand::createPart(channel->title(), reason); - channel->sendCommand(command); - \endcode - - \sa IrcBuffer::sendCommand(), IrcCommand::createPart() - */ -void IrcChannel::part(const QString& reason) -{ - sendCommand(IrcCommand::createPart(title(), reason)); -} - -/*! - \since 3.1 - - Closes the channel with an optional \a reason. - - \sa IrcBuffer::close(), IrcChannel::part() - */ -void IrcChannel::close(const QString& reason) -{ - if (isActive()) - part(reason); - IrcBuffer::close(reason); -} - -#ifndef QT_NO_DEBUG_STREAM -QDebug operator<<(QDebug debug, const IrcChannel* channel) -{ - if (!channel) - return debug << "IrcChannel(0x0) "; - debug.nospace() << channel->metaObject()->className() << '(' << (void*) channel; - if (!channel->objectName().isEmpty()) - debug.nospace() << ", name=" << qPrintable(channel->objectName()); - if (!channel->title().isEmpty()) - debug.nospace() << ", title=" << qPrintable(channel->title()); - debug.nospace() << ')'; - return debug.space(); -} -#endif // QT_NO_DEBUG_STREAM - -#include "moc_ircchannel.cpp" - -IRC_END_NAMESPACE diff --git a/src/libcommuni/src/model/ircmodel.cpp b/src/libcommuni/src/model/ircmodel.cpp deleted file mode 100644 index 7032db5..0000000 --- a/src/libcommuni/src/model/ircmodel.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "ircmodel.h" - -IRC_BEGIN_NAMESPACE - -/*! - \file ircmodel.h - \brief \#include <IrcModel> - */ - -/*! - \namespace IrcModel - \ingroup models - \brief Module meta-type registration. - */ - -namespace IrcModel { - - /*! - Registers IrcModel types to the %Qt meta-system. - - \sa IrcCore::registerMetaTypes(), IrcUtil::registerMetaTypes(), qRegisterMetaType() - */ - void registerMetaTypes() - { - qRegisterMetaType<IrcBuffer*>("IrcBuffer*"); - qRegisterMetaType<IrcBufferModel*>("IrcBufferModel*"); - qRegisterMetaType<IrcChannel*>("IrcChannel*"); - qRegisterMetaType<IrcUser*>("IrcUser*"); - qRegisterMetaType<IrcUserModel*>("IrcUserModel*"); - } -} - -IRC_END_NAMESPACE diff --git a/src/libcommuni/src/model/ircuser.cpp b/src/libcommuni/src/model/ircuser.cpp deleted file mode 100644 index d46e7a3..0000000 --- a/src/libcommuni/src/model/ircuser.cpp +++ /dev/null @@ -1,266 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "ircuser.h" -#include "ircuser_p.h" -#include <qdebug.h> - -IRC_BEGIN_NAMESPACE - -/*! - \file ircuser.h - \brief \#include <IrcUser> - */ - -/*! - \class IrcUser ircuser.h <IrcUser> - \ingroup models - \brief Keeps track of user status on a channel. - - \sa IrcUserModel -*/ - -#ifndef IRC_DOXYGEN -void IrcUserPrivate::setName(const QString& n) -{ - Q_Q(IrcUser); - if (name != n) { - name = n; - emit q->nameChanged(name); - emit q->titleChanged(q->title()); - } -} - -void IrcUserPrivate::setPrefix(const QString& p) -{ - Q_Q(IrcUser); - if (prefix != p) { - prefix = p; - emit q->prefixChanged(prefix); - emit q->titleChanged(q->title()); - } -} - -void IrcUserPrivate::setMode(const QString& m) -{ - Q_Q(IrcUser); - if (mode != m) { - mode = m; - emit q->modeChanged(mode); - } -} - -void IrcUserPrivate::setServOp(const bool& o) -{ - Q_Q(IrcUser); - if (servOp != o) { - servOp = o; - emit q->servOpChanged(servOp); - } -} - -void IrcUserPrivate::setAway(const bool& a) -{ - Q_Q(IrcUser); - if (away != a) { - away = a; - emit q->awayChanged(away); - } -} -#endif // IRC_DOXYGEN - -/*! - Constructs a new user with \a parent. - */ -IrcUser::IrcUser(QObject* parent) - : QObject(parent), d_ptr(new IrcUserPrivate) -{ - Q_D(IrcUser); - d->q_ptr = this; - d->channel = 0; - d->away = false; - d->servOp = false; -} - -/*! - Destructs the user object. - */ -IrcUser::~IrcUser() -{ -} - -/*! - This property holds the title. - - The title consists of \ref prefix and \ref name. - - \par Access function: - \li QString <b>title</b>() const - - \par Notifier signal: - \li void <b>titleChanged</b>(const QString& title) - */ -QString IrcUser::title() const -{ - Q_D(const IrcUser); - return d->prefix.left(1) + d->name; -} - -/*! - This property holds the name. - - \par Access function: - \li QString <b>name</b>() const - - \par Notifier signal: - \li void <b>nameChanged</b>(const QString& name) - */ -QString IrcUser::name() const -{ - Q_D(const IrcUser); - return d->name; -} - -/*! - This property holds the prefix character. - - Typical prefix characters are \c @ (op) and \c + (voice). - - \par Access function: - \li QString <b>prefix</b>() const - - \par Notifier signal: - \li void <b>prefixChanged</b>(const QString& prefix) - */ -QString IrcUser::prefix() const -{ - Q_D(const IrcUser); - return d->prefix; -} - -/*! - This property holds the mode letter. - - Typical mode letters are \c o (op) and \c v (voice). - - \par Access function: - \li QString <b>mode</b>() const - - \par Notifier signal: - \li void <b>modeChanged</b>(const QString& mode) - */ -QString IrcUser::mode() const -{ - Q_D(const IrcUser); - return d->mode; -} - -/*! - \since 3.1 - - \property bool IrcUser::servOp - This property holds whether the user is a server operator. - - \note IRC servers do not send this information by default. - In order to fetch the information for all users on a channel, - issue a WHO command on the channel: - \code - IrcChannel* channel = user->channel(); - IrcCommand* command = IrcCommand::createWho(channel->title()); - channel->sendCommand(command); - \endcode - - \par Access function: - \li bool <b>isServOp</b>() const - - \par Notifier signal: - \li void <b>servOpChanged</b>(bool servOp) - */ -bool IrcUser::isServOp() const -{ - Q_D(const IrcUser); - return d->servOp; -} - -/*! - \since 3.1 - - \property bool IrcUser::away - This property holds whether the user is marked as being away. - - \note IRC servers do not send this information by default. - In order to fetch the information for all users on a channel, - issue a WHO command on the channel: - \code - IrcChannel* channel = user->channel(); - IrcCommand* command = IrcCommand::createWho(channel->title()); - channel->sendCommand(command); - \endcode - - \par Access function: - \li bool <b>isAway</b>() const - - \par Notifier signal: - \li void <b>awayChanged</b>(bool away) - */ -bool IrcUser::isAway() const -{ - Q_D(const IrcUser); - return d->away; -} - -/*! - This property holds the channel of the user. - - \par Access function: - \li \ref IrcChannel* <b>channel</b>() const - */ -IrcChannel* IrcUser::channel() const -{ - Q_D(const IrcUser); - return d->channel; -} - -#ifndef QT_NO_DEBUG_STREAM -QDebug operator<<(QDebug debug, const IrcUser* user) -{ - if (!user) - return debug << "IrcUser(0x0) "; - debug.nospace() << user->metaObject()->className() << '(' << (void*) user; - if (!user->objectName().isEmpty()) - debug.nospace() << ", name=" << qPrintable(user->objectName()); - if (!user->name().isEmpty()) - debug.nospace() << ", user=" << qPrintable(user->name()); - debug.nospace() << ')'; - return debug.space(); -} -#endif // QT_NO_DEBUG_STREAM - -#include "moc_ircuser.cpp" - -IRC_END_NAMESPACE diff --git a/src/libcommuni/src/model/ircusermodel.cpp b/src/libcommuni/src/model/ircusermodel.cpp deleted file mode 100644 index 23f13fb..0000000 --- a/src/libcommuni/src/model/ircusermodel.cpp +++ /dev/null @@ -1,709 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "ircusermodel.h" -#include "ircusermodel_p.h" -#include "ircbuffermodel.h" -#include "ircconnection.h" -#include "ircchannel_p.h" -#include "ircuser.h" -#include <qpointer.h> - -IRC_BEGIN_NAMESPACE - -/*! - \file ircusermodel.h - \brief \#include <IrcUserModel> - */ - -/*! - \class IrcUserModel ircusermodel.h <IrcUserModel> - \ingroup models - \brief Keeps track of channel users. - - In order to keep track of channel users, create an instance of IrcUserModel. - It will notify via signals when users are added and/or removed. IrcUserModel - can be used directly as a data model for Qt's item views - both in C++ and QML. - - \code - void ChatView::setChannel(IrcChannel* channel) - { - IrcUserModel* model = new IrcUserModel(channel); - connect(model, SIGNAL(added(IrcUser*)), this, SLOT(onUserAdded(IrcUser*))); - connect(model, SIGNAL(removed(IrcUser*)), this, SLOT(onUserRemoved(IrcUser*))); - nickCompleter->setModel(model); - userListView->setModel(model); - } - \endcode -*/ - -/*! - \fn void IrcUserModel::added(IrcUser* user) - - This signal is emitted when a \a user is added to the list of users. - */ - -/*! - \fn void IrcUserModel::removed(IrcUser* user) - - This signal is emitted when a \a user is removed from the list of users. - */ - -/*! - \fn void IrcUserModel::aboutToBeAdded(IrcUser* user) - - This signal is emitted just before a \a user is added to the list of users. - */ - -/*! - \fn void IrcUserModel::aboutToBeRemoved(IrcUser* user) - - This signal is emitted just before a \a user is removed from the list of users. - */ - -#ifndef IRC_DOXYGEN -class IrcUserLessThan -{ -public: - IrcUserLessThan(IrcUserModel* model, Irc::SortMethod method) : model(model), method(method) { } - bool operator()(IrcUser* u1, IrcUser* u2) const { return model->lessThan(u1, u2, method); } -private: - IrcUserModel* model; - Irc::SortMethod method; -}; - -class IrcUserGreaterThan -{ -public: - IrcUserGreaterThan(IrcUserModel* model, Irc::SortMethod method) : model(model), method(method) { } - bool operator()(IrcUser* u1, IrcUser* u2) const { return model->lessThan(u2, u1, method); } -private: - IrcUserModel* model; - Irc::SortMethod method; -}; - -IrcUserModelPrivate::IrcUserModelPrivate() : q_ptr(0), role(Irc::TitleRole), - sortMethod(Irc::SortByHand), sortOrder(Qt::AscendingOrder) -{ -} - -void IrcUserModelPrivate::addUser(IrcUser* user, bool notify) -{ - insertUser(-1, user, notify); -} - -void IrcUserModelPrivate::insertUser(int index, IrcUser* user, bool notify) -{ - Q_Q(IrcUserModel); - if (index == -1) - index = userList.count(); - if (sortMethod != Irc::SortByHand) { - QList<IrcUser*>::iterator it; - if (sortOrder == Qt::AscendingOrder) - it = qUpperBound(userList.begin(), userList.end(), user, IrcUserLessThan(q, sortMethod)); - else - it = qUpperBound(userList.begin(), userList.end(), user, IrcUserGreaterThan(q, sortMethod)); - index = it - userList.begin(); - } - if (notify) - emit q->aboutToBeAdded(user); - q->beginInsertRows(QModelIndex(), index, index); - userList.insert(index, user); - q->endInsertRows(); - if (notify) { - emit q->added(user); - emit q->namesChanged(IrcChannelPrivate::get(channel)->names); - emit q->usersChanged(userList); - emit q->countChanged(userList.count()); - if (userList.count() == 1) - emit q->emptyChanged(false); - } -} - -void IrcUserModelPrivate::removeUser(IrcUser* user, bool notify) -{ - Q_Q(IrcUserModel); - int idx = userList.indexOf(user); - if (idx != -1) { - if (notify) - emit q->aboutToBeRemoved(user); - q->beginRemoveRows(QModelIndex(), idx, idx); - userList.removeAt(idx); - q->endRemoveRows(); - if (notify) { - emit q->removed(user); - emit q->namesChanged(IrcChannelPrivate::get(channel)->names); - emit q->usersChanged(userList); - emit q->countChanged(userList.count()); - if (userList.isEmpty()) - emit q->emptyChanged(true); - } - } -} - -void IrcUserModelPrivate::setUsers(const QList<IrcUser*>& users, bool reset) -{ - Q_Q(IrcUserModel); - bool wasEmpty = userList.isEmpty(); - if (reset) - q->beginResetModel(); - userList = users; - if (sortMethod != Irc::SortByHand) { - if (sortOrder == Qt::AscendingOrder) - qSort(userList.begin(), userList.end(), IrcUserLessThan(q, sortMethod)); - else - qSort(userList.begin(), userList.end(), IrcUserGreaterThan(q, sortMethod)); - } - if (reset) - q->endResetModel(); - QStringList names; - if (channel) - names = IrcChannelPrivate::get(channel)->names; - emit q->namesChanged(names); - emit q->usersChanged(userList); - emit q->countChanged(userList.count()); - if (wasEmpty != userList.isEmpty()) - emit q->emptyChanged(userList.isEmpty()); -} - -void IrcUserModelPrivate::renameUser(IrcUser* user) -{ - Q_Q(IrcUserModel); - const int idx = userList.indexOf(user); - if (idx != -1) { - QModelIndex index = q->index(idx, 0); - emit q->dataChanged(index, index); - - if (sortMethod != Irc::SortByHand) { - QList<IrcUser*> users = userList; - const bool notify = false; - removeUser(user, notify); - insertUser(-1, user, notify); - if (users != userList) - emit q->usersChanged(userList); - } - } -} - -void IrcUserModelPrivate::setUserMode(IrcUser* user) -{ - Q_Q(IrcUserModel); - const int idx = userList.indexOf(user); - if (idx != -1) { - QModelIndex index = q->index(idx, 0); - emit q->dataChanged(index, index); - - if (sortMethod == Irc::SortByTitle) { - const bool notify = false; - removeUser(user, notify); - insertUser(0, user, notify); - emit q->usersChanged(userList); - } - } -} - -void IrcUserModelPrivate::promoteUser(IrcUser* user) -{ - Q_Q(IrcUserModel); - if (sortMethod == Irc::SortByActivity) { - const bool notify = false; - removeUser(user, notify); - insertUser(0, user, notify); - emit q->usersChanged(userList); - } -} -#endif // IRC_DOXYGEN - -/*! - Constructs a new model with \a parent. - - \note If \a parent is an instance of IrcChannel, it will be - automatically assigned to \ref IrcUserModel::channel "channel". - */ -IrcUserModel::IrcUserModel(QObject* parent) : QAbstractListModel(parent), d_ptr(new IrcUserModelPrivate) -{ - Q_D(IrcUserModel); - d->q_ptr = this; - setChannel(qobject_cast<IrcChannel*>(parent)); - - qRegisterMetaType<IrcUser*>(); - qRegisterMetaType<QList<IrcUser*> >(); -} - -/*! - Destructs the model. - */ -IrcUserModel::~IrcUserModel() -{ - Q_D(IrcUserModel); - if (d->channel) - IrcChannelPrivate::get(d->channel)->userModels.removeOne(this); -} - -/*! - This property holds the channel. - - \par Access functions: - \li \ref IrcChannel* <b>channel</b>() const - \li void <b>setChannel</b>(\ref IrcChannel* channel) - - \par Notifier signal: - \li void <b>channelChanged</b>(\ref IrcChannel* channel) - */ -IrcChannel* IrcUserModel::channel() const -{ - Q_D(const IrcUserModel); - return d->channel; -} - -void IrcUserModel::setChannel(IrcChannel* channel) -{ - Q_D(IrcUserModel); - if (d->channel != channel) { - beginResetModel(); - if (d->channel) - IrcChannelPrivate::get(d->channel)->userModels.removeOne(this); - - d->channel = channel; - - QList<IrcUser*> users; - if (d->channel) { - IrcChannelPrivate::get(d->channel)->userModels.append(this); - if (d->sortMethod == Irc::SortByActivity) - users = IrcChannelPrivate::get(d->channel)->activeUsers; - else - users = IrcChannelPrivate::get(d->channel)->userList; - } - const bool reset = false; - d->setUsers(users, reset); - endResetModel(); - - emit channelChanged(channel); - } -} - -/*! - This property holds the number of users on the channel. - - \par Access function: - \li int <b>count</b>() const - - \par Notifier signal: - \li void <b>countChanged</b>(int count) - */ -int IrcUserModel::count() const -{ - return rowCount(); -} - -/*! - \since 3.1 - \property bool IrcUserModel::empty - - This property holds the whether the model is empty. - - \par Access function: - \li bool <b>isEmpty</b>() const - - \par Notifier signal: - \li void <b>emptyChanged</b>(bool empty) - */ -bool IrcUserModel::isEmpty() const -{ - Q_D(const IrcUserModel); - return d->userList.isEmpty(); -} - -/*! - This property holds the list of names in alphabetical order. - - \par Access function: - \li QStringList <b>names</b>() const - - \par Notifier signal: - \li void <b>namesChanged</b>(const QStringList& names) - */ -QStringList IrcUserModel::names() const -{ - Q_D(const IrcUserModel); - if (d->channel && !d->userList.isEmpty()) - return IrcChannelPrivate::get(d->channel)->names; - return QStringList(); -} - -/*! - This property holds the list of users. - - The order of users is kept as sent from the server. - - \par Access function: - \li QList<\ref IrcUser*> <b>users</b>() const - - \par Notifier signal: - \li void <b>usersChanged</b>(const QList<\ref IrcUser*>& users) - */ -QList<IrcUser*> IrcUserModel::users() const -{ - Q_D(const IrcUserModel); - return d->userList; -} - -/*! - Returns the user object at \a index. - */ -IrcUser* IrcUserModel::get(int index) const -{ - Q_D(const IrcUserModel); - return d->userList.value(index); -} - -/*! - Returns the user object for \a name or \c 0 if not found. - */ -IrcUser* IrcUserModel::find(const QString& name) const -{ - Q_D(const IrcUserModel); - if (d->channel && !d->userList.isEmpty()) - return IrcChannelPrivate::get(d->channel)->userMap.value(name); - return 0; -} - -/*! - Returns \c true if the model contains \a name. - */ -bool IrcUserModel::contains(const QString& name) const -{ - Q_D(const IrcUserModel); - if (d->channel && !d->userList.isEmpty()) - return IrcChannelPrivate::get(d->channel)->userMap.contains(name); - return false; -} - -/*! - Returns the index of the specified \a user, - or \c -1 if the model does not contain the \a user. - */ -int IrcUserModel::indexOf(IrcUser* user) const -{ - Q_D(const IrcUserModel); - return d->userList.indexOf(user); -} - -/*! - This property holds the model sort method. - - The default value is \c Irc::SortByHand. - - Method | Description | Example - --------------------|---------------------------------------------------------------------------------------------------|---------------------------------------------- - Irc::SortByHand | Users are not sorted automatically, but only by calling sort(). | - - Irc::SortByName | Users are sorted alphabetically, ignoring any mode prefix. | "bot", "@ChanServ", "jpnurmi", "+qtassistant" - Irc::SortByTitle | Users are sorted alphabetically, and special users (operators, voiced users) before normal users. | "@ChanServ", "+qtassistant", "bot", "jpnurmi" - Irc::SortByActivity | Users are sorted based on their activity, last active and mentioned (1) users first. | - - - 1) For performance reasons, IrcUserModel does \b not scan the whole channel - messages to find out if a channel user was mentioned. IrcUserModel merely - checks if channel messages \b begin with the name of a user in the model. - - \par Access functions: - \li Irc::SortMethod <b>sortMethod</b>() const - \li void <b>setSortMethod</b>(Irc::SortMethod method) - - \sa sort(), lessThan() - */ -Irc::SortMethod IrcUserModel::sortMethod() const -{ - Q_D(const IrcUserModel); - return d->sortMethod; -} - -void IrcUserModel::setSortMethod(Irc::SortMethod method) -{ - Q_D(IrcUserModel); - if (d->sortMethod != method) { - d->sortMethod = method; - if (method == Irc::SortByActivity && d->channel) - d->userList = IrcChannelPrivate::get(d->channel)->activeUsers; - if (d->sortMethod != Irc::SortByHand && !d->userList.isEmpty()) - sort(d->sortMethod, d->sortOrder); - } -} - -/*! - This property holds the model sort order. - - The default value is \c Qt::AscendingOrder. - - \par Access functions: - \li Qt::SortOrder <b>sortOrder</b>() const - \li void <b>setSortOrder</b>(Qt::SortOrder order) - - \sa sort(), lessThan() - */ -Qt::SortOrder IrcUserModel::sortOrder() const -{ - Q_D(const IrcUserModel); - return d->sortOrder; -} - -void IrcUserModel::setSortOrder(Qt::SortOrder order) -{ - Q_D(IrcUserModel); - if (d->sortOrder != order) { - d->sortOrder = order; - if (d->sortMethod != Irc::SortByHand && !d->userList.isEmpty()) - sort(d->sortMethod, d->sortOrder); - } -} - -/*! - This property holds the display role. - - The specified data role is returned for Qt::DisplayRole. - - The default value is \ref Irc::TitleRole. - - \par Access functions: - \li \ref Irc::DataRole <b>displayRole</b>() const - \li void <b>setDisplayRole</b>(\ref Irc::DataRole role) - */ -Irc::DataRole IrcUserModel::displayRole() const -{ - Q_D(const IrcUserModel); - return d->role; -} - -void IrcUserModel::setDisplayRole(Irc::DataRole role) -{ - Q_D(IrcUserModel); - d->role = role; -} - -/*! - Returns the model index for \a user. - */ -QModelIndex IrcUserModel::index(IrcUser* user) const -{ - Q_D(const IrcUserModel); - return index(d->userList.indexOf(user)); -} - -/*! - Returns the user for model \a index. - */ -IrcUser* IrcUserModel::user(const QModelIndex& index) const -{ - if (!hasIndex(index.row(), index.column())) - return 0; - - return static_cast<IrcUser*>(index.internalPointer()); -} - -/*! - The following role names are provided by default: - - Role | Name | Type | Example - --------------- | ----------|----------|-------- - Qt::DisplayRole | "display" | 1) | - - Irc::UserRole | "user" | IrcUser* | <object> - Irc::NameRole | "name" | QString | "jpnurmi" - Irc::PrefixRole | "prefix" | QString | "@" - Irc::ModeRole | "mode" | QString | "o" - Irc::TitleRole | "title" | QString | "@jpnurmi" - - 1) The type depends on \ref displayRole. - */ -QHash<int, QByteArray> IrcUserModel::roleNames() const -{ - QHash<int, QByteArray> roles; - roles[Qt::DisplayRole] = "display"; - roles[Irc::UserRole] = "user"; - roles[Irc::NameRole] = "name"; - roles[Irc::PrefixRole] = "prefix"; - roles[Irc::ModeRole] = "mode"; - roles[Irc::TitleRole] = "title"; - return roles; -} - -/*! - Returns the number of users on the channel. - */ -int IrcUserModel::rowCount(const QModelIndex& parent) const -{ - Q_D(const IrcUserModel); - if (parent.isValid() || !d->channel) - return 0; - - return d->userList.count(); -} - -/*! - Returns the data for specified \a role referred to by the \a index. - - \sa Irc::DataRole, roleNames() - */ -QVariant IrcUserModel::data(const QModelIndex& index, int role) const -{ - Q_D(const IrcUserModel); - if (!d->channel || !hasIndex(index.row(), index.column(), index.parent())) - return QVariant(); - - IrcUser* user = static_cast<IrcUser*>(index.internalPointer()); - Q_ASSERT(user); - - switch (role) { - case Qt::DisplayRole: - return data(index, d->role); - case Irc::UserRole: - return QVariant::fromValue(user); - case Irc::NameRole: - return user->name(); - case Irc::PrefixRole: - return user->prefix().left(1); - case Irc::ModeRole: - return user->mode().left(1); - case Irc::TitleRole: - return user->title(); - } - - return QVariant(); -} - -/*! - Returns the index of the item in the model specified by the given \a row, \a column and \a parent index. - */ -QModelIndex IrcUserModel::index(int row, int column, const QModelIndex& parent) const -{ - Q_D(const IrcUserModel); - if (!d->channel || !hasIndex(row, column, parent)) - return QModelIndex(); - - return createIndex(row, column, d->userList.value(row)); -} - -/*! - Clears the model. - */ -void IrcUserModel::clear() -{ - Q_D(IrcUserModel); - if (!d->userList.isEmpty()) { - beginResetModel(); - d->userList.clear(); - endResetModel(); - emit namesChanged(QStringList()); - emit usersChanged(QList<IrcUser*>()); - emit countChanged(0); - emit emptyChanged(true); - } -} - -/*! - Sorts the model using the given \a order. - */ -void IrcUserModel::sort(int column, Qt::SortOrder order) -{ - Q_D(IrcUserModel); - if (column == 0) - sort(d->sortMethod, order); -} - -/*! - Sorts the model using the given \a method and \a order. - - \sa lessThan() - */ -void IrcUserModel::sort(Irc::SortMethod method, Qt::SortOrder order) -{ - Q_D(IrcUserModel); - if (method == Irc::SortByHand) - return; - - emit layoutAboutToBeChanged(); - - QList<IrcUser*> persistentUsers; - QModelIndexList oldPersistentIndexes = persistentIndexList(); - foreach (const QModelIndex& index, oldPersistentIndexes) - persistentUsers += static_cast<IrcUser*>(index.internalPointer()); - - if (order == Qt::AscendingOrder) - qSort(d->userList.begin(), d->userList.end(), IrcUserLessThan(this, method)); - else - qSort(d->userList.begin(), d->userList.end(), IrcUserGreaterThan(this, method)); - - QModelIndexList newPersistentIndexes; - foreach (IrcUser* user, persistentUsers) - newPersistentIndexes += index(d->userList.indexOf(user)); - changePersistentIndexList(oldPersistentIndexes, newPersistentIndexes); - - emit layoutChanged(); -} - -/*! - Returns \c true if \a one buffer is "less than" \a another, - otherwise returns \c false. - - The default implementation sorts according to the specified sort method. - Reimplement this function in order to customize the sort order. - - \sa sort(), sortMethod - */ -bool IrcUserModel::lessThan(IrcUser* one, IrcUser* another, Irc::SortMethod method) const -{ - if (method == Irc::SortByActivity) { - QList<IrcUser*> activeUsers = IrcChannelPrivate::get(one->channel())->activeUsers; - const int i1 = activeUsers.indexOf(one); - const int i2 = activeUsers.indexOf(another); - return i1 < i2; - } else if (method == Irc::SortByTitle) { - const IrcNetwork* network = one->channel()->network(); - const QStringList prefixes = network->prefixes(); - - const QString p1 = one->prefix(); - const QString p2 = another->prefix(); - - const int i1 = !p1.isEmpty() ? prefixes.indexOf(p1.at(0)) : -1; - const int i2 = !p2.isEmpty() ? prefixes.indexOf(p2.at(0)) : -1; - - if (i1 >= 0 && i2 < 0) - return true; - if (i1 < 0 && i2 >= 0) - return false; - if (i1 >= 0 && i2 >= 0 && i1 != i2) - return i1 < i2; - } - - // Irc::SortByName - const QString n1 = one->name(); - const QString n2 = another->name(); - return n1.compare(n2, Qt::CaseInsensitive) < 0; -} - -#include "moc_ircusermodel.cpp" - -IRC_END_NAMESPACE diff --git a/src/libcommuni/src/model/model.pri b/src/libcommuni/src/model/model.pri deleted file mode 100644 index 38212a0..0000000 --- a/src/libcommuni/src/model/model.pri +++ /dev/null @@ -1,40 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -DEFINES += BUILD_IRC_MODEL - -INCDIR = $$PWD/../../include/IrcModel - -DEPENDPATH += $$PWD $$INCDIR -INCLUDEPATH += $$PWD $$INCDIR - -CONV_HEADERS = $$INCDIR/IrcBuffer -CONV_HEADERS += $$INCDIR/IrcBufferModel -CONV_HEADERS += $$INCDIR/IrcChannel -CONV_HEADERS += $$INCDIR/IrcModel -CONV_HEADERS += $$INCDIR/IrcUser -CONV_HEADERS += $$INCDIR/IrcUserModel - -PUB_HEADERS = $$INCDIR/ircbuffer.h -PUB_HEADERS += $$INCDIR/ircbuffermodel.h -PUB_HEADERS += $$INCDIR/ircchannel.h -PUB_HEADERS += $$INCDIR/ircmodel.h -PUB_HEADERS += $$INCDIR/ircuser.h -PUB_HEADERS += $$INCDIR/ircusermodel.h - -PRIV_HEADERS = $$INCDIR/ircbuffer_p.h -PRIV_HEADERS += $$INCDIR/ircbuffermodel_p.h -PRIV_HEADERS += $$INCDIR/ircchannel_p.h -PRIV_HEADERS += $$INCDIR/ircuser_p.h -PRIV_HEADERS += $$INCDIR/ircusermodel_p.h - -HEADERS += $$PUB_HEADERS -HEADERS += $$PRIV_HEADERS - -SOURCES += $$PWD/ircbuffer.cpp -SOURCES += $$PWD/ircbuffermodel.cpp -SOURCES += $$PWD/ircchannel.cpp -SOURCES += $$PWD/ircmodel.cpp -SOURCES += $$PWD/ircuser.cpp -SOURCES += $$PWD/ircusermodel.cpp diff --git a/src/libcommuni/src/model/model.pro b/src/libcommuni/src/model/model.pro deleted file mode 100644 index 5a35306..0000000 --- a/src/libcommuni/src/model/model.pro +++ /dev/null @@ -1,11 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -IRC_MODULE = IrcModel -include(model.pri) -include(../module_build.pri) -include(../module_install.pri) - -IRC_MODULES = IrcCore -include(../module_deps.pri) diff --git a/src/libcommuni/src/module_build.pri b/src/libcommuni/src/module_build.pri deleted file mode 100644 index 75205a2..0000000 --- a/src/libcommuni/src/module_build.pri +++ /dev/null @@ -1,57 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -isEmpty(IRC_MODULE):error(IRC_MODULE must be set) - -TEMPLATE = lib -TARGET = $$qtLibraryTarget($$IRC_MODULE) -QT = core network -!verbose:CONFIG += silent -contains(QT_CONFIG, debug_and_release) { - win32|mac:!wince*:!win32-msvc:!macx-xcode:CONFIG += debug_and_release build_all -} - -include(../version.pri) -!win32:VERSION = $$IRC_VERSION - -isEmpty(IRC_BUILDDIR):IRC_BUILDDIR = $$OUT_PWD/../.. - -DESTDIR = $$IRC_BUILDDIR/lib -DLLDESTDIR = $$IRC_BUILDDIR/bin - -!flat { - CONFIG(debug, debug|release) { - OBJECTS_DIR = debug - MOC_DIR = debug - } else { - OBJECTS_DIR = release - MOC_DIR = release - } -} - -DISTFILES += $$CONV_HEADERS - -coverage { - QMAKE_CLEAN += $$OBJECTS_DIR/*.gcda $$OBJECTS_DIR/*.gcno - - LIBS += -lgcov - QMAKE_CXXFLAGS += -g -Wall -fprofile-arcs -ftest-coverage -O0 - QMAKE_LDFLAGS += -g -Wall -fprofile-arcs -ftest-coverage -O0 - - zerocounters.commands = @lcov --directory \$(OBJECTS_DIR) --zerocounters - QMAKE_EXTRA_TARGETS += zerocounters - - capture.file = ../../coverage/$${IRC_MODULE}.cov - capture.commands = @mkdir -p ../../coverage - capture.commands += && lcov --base-directory $$_PRO_FILE_PWD_ --directory \$(OBJECTS_DIR) --capture --output-file $$capture.file - capture.filters = \"/usr/*\" \"moc_*.cpp\" \"*3rdparty/*\" \"*QtCore/*\" \"*QtNetwork/*\" \"*corelib/*\" \"*network/*\" - !isEqual(IRC_MODULE, "IrcCore"):capture.filters += \"*/IrcCore/*\" - !isEqual(IRC_MODULE, "IrcModel"):capture.filters += \"*/IrcModel/*\" - capture.commands += && lcov --remove $$capture.file $$capture.filters --output-file $$capture.file - QMAKE_EXTRA_TARGETS += capture - - genhtml.dir = ../../coverage/$${IRC_MODULE} - genhtml.commands = @genhtml --output-directory $$genhtml.dir $$capture.file - QMAKE_EXTRA_TARGETS += genhtml -} diff --git a/src/libcommuni/src/module_deps.pri b/src/libcommuni/src/module_deps.pri deleted file mode 100644 index 055166e..0000000 --- a/src/libcommuni/src/module_deps.pri +++ /dev/null @@ -1,36 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -isEmpty(IRC_MODULES):error(IRC_MODULES must be set) - -isEmpty(IRC_BUILDDIR):IRC_BUILDDIR = $$OUT_PWD/../.. -IRC_LIBDIR = $$IRC_BUILDDIR/lib - -isEmpty(IRC_SOURCEDIR):IRC_SOURCEDIR = $$PWD/.. -IRC_INCDIR = $$IRC_SOURCEDIR/include - -INCLUDEPATH += $$IRC_INCDIR - -for(IRC_MODULE, IRC_MODULES) { - !contains(DEFINES, IRC_STATIC):macx:!qt_no_framework { - INCLUDEPATH += $$IRC_LIBDIR/$${IRC_MODULE}.framework/Headers - QMAKE_LFLAGS += -F$$IRC_LIBDIR # inject before system frameworks - LIBS += -framework $$IRC_MODULE - install_name { - !isEmpty(QMAKE_POST_LINK):QMAKE_POST_LINK += && - QMAKE_POST_LINK += install_name_tool -change \ - "$$[QT_INSTALL_LIBS]/$${IRC_MODULE}.framework/Versions/3/$${IRC_MODULE}" \ - "$$IRC_LIBDIR/$${IRC_MODULE}.framework/Versions/3/$${IRC_MODULE}" $$TARGET - } - } else { - INCLUDEPATH += $$IRC_INCDIR/$$IRC_MODULE - DEPENDPATH += $$IRC_INCDIR/$$IRC_MODULE - QMAKE_LIBDIR += $$IRC_LIBDIR # injects before system libdirs - REAL_TEMPLATE = $$TEMPLATE - TEMPLATE = fakelib - LIBS += -l$$qtLibraryTarget($$IRC_MODULE) - TEMPLATE = $$REAL_TEMPLATE - !no_rpath:QMAKE_RPATHDIR += $$IRC_LIBDIR - } -} diff --git a/src/libcommuni/src/module_install.pri b/src/libcommuni/src/module_install.pri deleted file mode 100644 index 7685de2..0000000 --- a/src/libcommuni/src/module_install.pri +++ /dev/null @@ -1,38 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -isEmpty(IRC_MODULE):error(IRC_MODULE must be set) - -isEmpty(IRC_INSTALL_LIBS):IRC_INSTALL_LIBS = $$[QT_INSTALL_LIBS] -isEmpty(IRC_INSTALL_BINS):IRC_INSTALL_BINS = $$[QT_INSTALL_BINS] -isEmpty(IRC_INSTALL_HEADERS):IRC_INSTALL_HEADERS = $$[QT_INSTALL_HEADERS]/Communi - -!no_install_libs { - target.path = $$IRC_INSTALL_LIBS - INSTALLS += target -} - -!no_install_bins { - dlltarget.path = $$IRC_INSTALL_BINS - INSTALLS += dlltarget -} - -macx:CONFIG(qt_framework, qt_framework|qt_no_framework) { - CONFIG += lib_bundle debug_and_release - CONFIG(debug, debug|release) { - !build_pass:CONFIG += build_all - } else { #release - !debug_and_release|build_pass { - FRAMEWORK_HEADERS.version = Versions - FRAMEWORK_HEADERS.files = $$PUB_HEADERS $$CONV_HEADERS - FRAMEWORK_HEADERS.path = Headers - } - QMAKE_BUNDLE_DATA += FRAMEWORK_HEADERS - } - QMAKE_LFLAGS_SONAME = -Wl,-install_name,$$IRC_INSTALL_LIBS/ -} else:!no_install_headers { - headers.files = $$PUB_HEADERS $$CONV_HEADERS - headers.path = $$IRC_INSTALL_HEADERS/$$IRC_MODULE - INSTALLS += headers -} diff --git a/src/libcommuni/src/src.pri b/src/libcommuni/src/src.pri deleted file mode 100644 index 72dd368..0000000 --- a/src/libcommuni/src/src.pri +++ /dev/null @@ -1,7 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -include(core/core.pri) -include(model/model.pri) -include(util/util.pri) diff --git a/src/libcommuni/src/src.pro b/src/libcommuni/src/src.pro deleted file mode 100644 index 1322cdb..0000000 --- a/src/libcommuni/src/src.pro +++ /dev/null @@ -1,27 +0,0 @@ -######################################################################
-# Communi
-######################################################################
-
-TEMPLATE = subdirs
-SUBDIRS += core model util imports
-
-model.depends = core
-util.depends = core model
-imports.depends = core model util
-
-coverage {
- cov_zerocounters.CONFIG += recursive
- cov_zerocounters.recurse = core model util
- cov_zerocounters.recurse_target = zerocounters
- QMAKE_EXTRA_TARGETS += cov_zerocounters
-
- cov_capture.CONFIG += recursive
- cov_capture.recurse = core model util
- cov_capture.recurse_target = capture
- QMAKE_EXTRA_TARGETS += cov_capture
-
- cov_genhtml.CONFIG += recursive
- cov_genhtml.recurse = core model util
- cov_genhtml.recurse_target = genhtml
- QMAKE_EXTRA_TARGETS += cov_genhtml
-}
diff --git a/src/libcommuni/src/util/irccommandparser.cpp b/src/libcommuni/src/util/irccommandparser.cpp deleted file mode 100644 index e686a37..0000000 --- a/src/libcommuni/src/util/irccommandparser.cpp +++ /dev/null @@ -1,597 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "irccommandparser.h" -#include "irccommandparser_p.h" -#include "irctoken_p.h" -#include <climits> - -IRC_BEGIN_NAMESPACE - -/*! - \file irccommandparser.h - \brief \#include <IrcCommandParser> - */ - -/*! - \class IrcCommandParser irccommandparser.h <IrcCommandParser> - \ingroup util - \brief Parses commands from user input. - - \section syntax Syntax - - Since the list of supported commands and the exact syntax for each - command is application specific, IrcCommandParser does not provide - any built-in command syntaxes. It is left up to the applications - to introduce the supported commands and syntaxes. - IrcCommandParser supports the following command syntax markup: - - Syntax | Example | Description - -------------------|----------------------|------------ - <param> | <target> | A required parameter. - (<param>) | (<key>) | An optional parameter. - <param...> | <message...> | A required parameter, multiple words accepted. (1) - (<param...>) | (<message...>) | An optional parameter, multiple words accepted. (1) - (<\#param>) | (<\#channel>) | An optional channel parameter. (2) - [param] | [target] | Inject the current target. - - -# Multi-word parameters are only supported in the last parameter position. - -# An optional channel parameter is filled up with the current channel when absent. - - The following example presents introducing some typical commands. - \code - IrcCommandParser* parser = new IrcCommandParser(this); - parser->addCommand(IrcCommand::Join, "JOIN <#channel> (<key>)"); - parser->addCommand(IrcCommand::Part, "PART (<#channel>) (<message...>)"); - parser->addCommand(IrcCommand::Kick, "KICK (<#channel>) <nick> (<reason...>)"); - parser->addCommand(IrcCommand::CtcpAction, "ME [target] <message...>"); - parser->addCommand(IrcCommand::CtcpAction, "ACTION <target> <message...>"); - \endcode - - \note The parameter names are insignificant, but descriptive - parameter names are recommended for the sake of readability. - - \section context Context - - Notice that commands are often context sensitive. While some command - may accept an optional parameter that is filled up with the current - target (channel/query) name when absent, another command may always - inject the current target name as a certain parameter. Therefore - IrcCommandParser must be kept up-to-date with the \ref target - "current target" and the \ref channels "list of channels". - - \code - // currently in a query, and also present on some channels - parser->setTarget("jpnurmi"); - parser->setChannels(QStringList() << "#communi" << "#freenode"); - \endcode - - \section command-triggers Command triggers - - IrcCommandParser serves as a generic parser for typical IRC commands. - It can be utilized for parsing commands from user input in GUI clients, - and from messages from other clients when implementing IRC bots. - - The command parsing behavior is controlled by setting up command - \ref triggers. Whilst a typical GUI client might use \c "/" as a command - trigger, an IRC bot might use \c "!" and the nick name of the bot. The - following snippet illustrates a typical GUI client usage. - - \code - parser->setTarget("#communi"); - parser->setTriggers(QStringList() << "/"); - parser->parse(input); - \endcode - - \p - Input | Result | Description - ------------------|---------------------|------------ - "hello" | IrcCommand::Message | No matching command trigger => a message "hello" to \#communi - "/join #channel" | IrcCommand::Join | Matching command trigger => a command to join "#channel" - - See the \ref bot "bot example" to see how the parser can be effectively utilized for IRC bots. - - \section parse-custom-commands Custom commands - - The parser also supports such custom client specific commands that - are not sent to the server. Since IrcCommand does not know how to - handle custom commands, the parser treats them as a special case - injecting the command as a first parameter. - - \code - IrcParser parser; - parser.addCommand(IrcCommand::Custom, "QUERY <user>"); - IrcCommand* command = parser.parse("/query jpnurmi"); - Q_ASSERT(command->type() == IrcCommand::Custom); - qDebug() << command->parameters(); // ("QUERY", "jpnurmi") - \endcode - */ - -/*! - \enum IrcCommandParser::Detail - This enum describes the available syntax details. - */ - -/*! - \var IrcCommandParser::Full - \brief The syntax in full details - */ - -/*! - \var IrcCommandParser::NoTarget - \brief The syntax has injected [target] removed - */ - -/*! - \var IrcCommandParser::NoPrefix - \brief The syntax has \#channel prefixes removed - */ - -/*! - \var IrcCommandParser::NoEllipsis - \brief The syntax has ellipsis... removed - */ - -/*! - \var IrcCommandParser::NoParentheses - \brief The syntax has parentheses () removed - */ - -/*! - \var IrcCommandParser::NoBrackets - \brief The syntax has brackets [] removed - */ - -/*! - \var IrcCommandParser::NoAngles - \brief The syntax has angle brackets <> removed - */ - -/*! - \var IrcCommandParser::Visual - \brief The syntax suitable for visual representation - */ - -#ifndef IRC_DOXYGEN -IrcCommandParserPrivate::IrcCommandParserPrivate() : tolerant(false) -{ -} - -QList<IrcCommandInfo> IrcCommandParserPrivate::find(const QString& command) const -{ - QList<IrcCommandInfo> result; - foreach (const IrcCommandInfo& cmd, commands) { - if (cmd.command == command) - result += cmd; - } - return result; -} - -static inline bool isOptional(const QString& token) -{ - return token.startsWith(QLatin1Char('(')) && token.endsWith(QLatin1Char(')')); -} - -static inline bool isMultiWord(const QString& token) -{ - return token.contains(QLatin1String("...")); -} - -static inline bool isChannel(const QString& token) -{ - return token.contains(QLatin1Char('#')); -} - -static inline bool isCurrent(const QString& token) -{ - return token.startsWith(QLatin1Char('[')) && token.endsWith(QLatin1Char(']')); -} - -IrcCommandInfo IrcCommandParserPrivate::parseSyntax(IrcCommand::Type type, const QString& syntax) -{ - IrcCommandInfo cmd; - QStringList tokens = syntax.split(QLatin1Char(' '), QString::SkipEmptyParts); - if (!tokens.isEmpty()) { - cmd.type = type; - cmd.command = tokens.takeFirst().toUpper(); - cmd.syntax = tokens.join(QLatin1String(" ")); - cmd.max = tokens.count(); - - IrcParameterInfo param; - for (int i = 0; i < tokens.count(); ++i) { - const QString& token = tokens.at(i); - param.optional = isOptional(token); - param.channel = isChannel(token); - param.current = isCurrent(token); - param.multi = isMultiWord(token); - if (!param.optional) - ++cmd.min; - if (param.optional && param.channel) - ++cmd.min; - const bool last = (i == tokens.count() - 1); - if (last && param.multi) - cmd.max = INT_MAX; - cmd.params += param; - } - } - return cmd; -} - -IrcCommand* IrcCommandParserPrivate::parseCommand(const IrcCommandInfo& command, const QString& input) const -{ - IrcCommand* cmd = 0; - QStringList params; - if (processParameters(command, input, ¶ms)) { - const int count = params.count(); - if (count >= command.min && count <= command.max) { - cmd = new IrcCommand; - cmd->setType(command.type); - if (command.type == IrcCommand::Custom) - params.prepend(command.command); - cmd->setParameters(params); - } - } - return cmd; -} - -bool IrcCommandParserPrivate::processParameters(const IrcCommandInfo& command, const QString& input, QStringList* params) const -{ - IrcTokenizer tokenizer(input); - for (int i = 0; i < command.params.count(); ++i) { - const IrcParameterInfo& info = command.params.at(i); - const IrcToken token = tokenizer.at(0); - if (info.optional && info.channel) { - if (onChannel()) { - if (!token.isValid() || !channels.contains(token.text(), Qt::CaseInsensitive)) { - params->append(target); - } else if (token.isValid()) { - tokenizer = tokenizer.mid(1); - params->append(token.text()); - } - } else if (!channels.contains(token.text())) { - return false; - } - } else if (info.current) { - params->append(target); - } else if (info.multi) { - const QString multi = tokenizer.toString(); - if (!multi.isEmpty()) { - params->append(multi); - tokenizer.clear(); - } - } else { - tokenizer = tokenizer.mid(1); - if (token.isValid()) - params->append(token.text()); - } - } - return tokenizer.isEmpty(); -} - -bool IrcCommandParserPrivate::processCommand(QString* input, int* removed) const -{ - foreach (const QString& trigger, triggers) { - if (tolerant && trigger.length() == 1 && (input->startsWith(trigger.repeated(2)) || input->startsWith(trigger + QLatin1Char(' ')))) { - // treat "//cmd" and "/ /cmd" as message (-> "/cmd") - input->remove(0, 1); - if (removed) - *removed = 1; - return false; - } else if (input->startsWith(trigger)) { - input->remove(0, trigger.length()); - if (removed) - *removed = trigger.length(); - return true; - } - } - return false; -} - -bool IrcCommandParserPrivate::processMessage(QString* input, int* removed) const -{ - if (input->isEmpty()) - return false; - if (triggers.isEmpty()) - return tolerant; - if (processCommand(input, removed)) - return false; - return tolerant; -} - -bool IrcCommandParserPrivate::onChannel() const -{ - return channels.contains(target, Qt::CaseInsensitive); -} -#endif // IRC_DOXYGEN - -/*! - Constructs a command parser with \a parent. - */ -IrcCommandParser::IrcCommandParser(QObject* parent) : QObject(parent), d_ptr(new IrcCommandParserPrivate) -{ -} - -/*! - Destructs the command parser. - */ -IrcCommandParser::~IrcCommandParser() -{ -} - -/*! - This property holds the known commands. - - The commands are uppercased and in alphabetical order. - - \par Access function: - \li QStringList <b>commands</b>() const - - \par Notifier signal: - \li void <b>commandsChanged</b>(const QStringList& commands) - - \sa addCommand(), removeCommand() - */ -QStringList IrcCommandParser::commands() const -{ - Q_D(const IrcCommandParser); - return d->commands.uniqueKeys(); -} - -/*! - Returns syntax for the given \a command in given \a details level. - */ -QString IrcCommandParser::syntax(const QString& command, Details details) const -{ - Q_D(const IrcCommandParser); - IrcCommandInfo info = d->find(command.toUpper()).value(0); - if (!info.command.isEmpty()) { - QString str = info.fullSyntax(); - if (details != Full) { - if (details & NoTarget) - str.remove(QRegExp("\\[[^\\]]+\\]")); - if (details & NoPrefix) - str.remove("#"); - if (details & NoEllipsis) - str.remove("..."); - if (details & NoParentheses) - str.remove("(").remove(")"); - if (details & NoBrackets) - str.remove("[").remove("]"); - if (details & NoAngles) - str.remove("<").remove(">"); - } - return str.simplified(); - } - return QString(); -} - -/*! - Adds a command with \a type and \a syntax. - */ -void IrcCommandParser::addCommand(IrcCommand::Type type, const QString& syntax) -{ - Q_D(IrcCommandParser); - IrcCommandInfo cmd = d->parseSyntax(type, syntax); - if (!cmd.command.isEmpty()) { - const bool contains = d->commands.contains(cmd.command); - d->commands.insert(cmd.command, cmd); - if (!contains) - emit commandsChanged(commands()); - } -} - -/*! - Removes the command with \a type and \a syntax. - */ -void IrcCommandParser::removeCommand(IrcCommand::Type type, const QString& syntax) -{ - Q_D(IrcCommandParser); - bool changed = false; - QMutableMapIterator<QString, IrcCommandInfo> it(d->commands); - while (it.hasNext()) { - IrcCommandInfo cmd = it.next().value(); - if (cmd.type == type && (syntax.isEmpty() || !syntax.compare(cmd.fullSyntax(), Qt::CaseInsensitive))) { - it.remove(); - if (!d->commands.contains(cmd.command)) - changed = true; - } - } - if (changed) - emit commandsChanged(commands()); -} - -/*! - This property holds the available channels. - - \par Access functions: - \li QStringList <b>channels</b>() const - \li void <b>setChannels</b>(const QStringList& channels) [slot] - - \par Notifier signal: - \li void <b>channelsChanged</b>(const QStringList& channels) - - \sa IrcBufferModel::channels() - */ -QStringList IrcCommandParser::channels() const -{ - Q_D(const IrcCommandParser); - return d->channels; -} - -void IrcCommandParser::setChannels(const QStringList& channels) -{ - Q_D(IrcCommandParser); - if (d->channels != channels) { - d->channels = channels; - emit channelsChanged(channels); - } -} - -/*! - This property holds the current target. - - \par Access functions: - \li QString <b>target</b>() const - \li void <b>setTarget</b>(const QString& target) [slot] - - \par Notifier signal: - \li void <b>targetChanged</b>(const QString& target) - */ -QString IrcCommandParser::target() const -{ - Q_D(const IrcCommandParser); - return d->target; -} - -void IrcCommandParser::setTarget(const QString& target) -{ - Q_D(IrcCommandParser); - if (d->target != target) { - d->target = target; - emit targetChanged(target); - } -} - -/*! - This property holds the command triggers. - - \par Access functions: - \li QStringList <b>triggers</b>() const - \li void <b>setTriggers</b>(const QStringList& triggers) [slot] - - \par Notifier signal: - \li void <b>triggersChanged</b>(const QStringList& triggers) - */ -QStringList IrcCommandParser::triggers() const -{ - Q_D(const IrcCommandParser); - return d->triggers; -} - -void IrcCommandParser::setTriggers(const QStringList& triggers) -{ - Q_D(IrcCommandParser); - if (d->triggers != triggers) { - d->triggers = triggers; - emit triggersChanged(triggers); - } -} - -/*! - \property bool IrcCommandParser::tolerant - - This property holds whether the parser is tolerant. - - A tolerant parser creates message commands out of input that does not - start with a command trigger, and raw server commands when the input - starts with a command trigger but the command is unrecognized. Known - commands with invalid arguments are still considered invalid. - - The default value is \c false. - - \par Access functions: - \li bool <b>isTolerant</b>() const - \li void <b>setTolerant</b>(bool tolerant) - - \par Notifier signal: - \li void <b>tolerancyChanged</b>(bool tolerant) - - \sa IrcCommand::Quote - */ -bool IrcCommandParser::isTolerant() const -{ - Q_D(const IrcCommandParser); - return d->tolerant; -} - -void IrcCommandParser::setTolerant(bool tolerant) -{ - Q_D(IrcCommandParser); - if (d->tolerant != tolerant) { - d->tolerant = tolerant; - emit tolerancyChanged(tolerant); - } -} - -/*! - Parses and returns the command for \a input, or \c 0 if the input is not valid. - */ -IrcCommand* IrcCommandParser::parse(const QString& input) const -{ - Q_D(const IrcCommandParser); - QString message = input; - if (d->processMessage(&message)) { - return IrcCommand::createMessage(d->target, message.trimmed()); - } else if (!message.isEmpty()) { - IrcTokenizer tokenizer(message); - const QString command = tokenizer.at(0).text().toUpper(); - QString params = tokenizer.mid(1).toString(); - const QList<IrcCommandInfo> commands = d->find(command); - if (!commands.isEmpty()) { - foreach (const IrcCommandInfo& c, commands) { - IrcCommand* cmd = d->parseCommand(c, params); - if (cmd) - return cmd; - } - } else if (d->tolerant) { - IrcCommandInfo custom = d->parseSyntax(IrcCommand::Quote, QString(QLatin1String("%1 (<parameters...>)")).arg(command)); - params.prepend(custom.command + QLatin1Char(' ')); - return d->parseCommand(custom, params); - } - } - return 0; -} - -/*! - Clears the list of commands. - - \sa reset() - */ -void IrcCommandParser::clear() -{ - Q_D(IrcCommandParser); - if (!d->commands.isEmpty()) { - d->commands.clear(); - emit commandsChanged(QStringList()); - } -} - -/*! - Resets the channels and the current target. - - \sa clear() - */ -void IrcCommandParser::reset() -{ - setChannels(QStringList()); - setTarget(QString()); -} - -#include "moc_irccommandparser.cpp" - -IRC_END_NAMESPACE diff --git a/src/libcommuni/src/util/irccompleter.cpp b/src/libcommuni/src/util/irccompleter.cpp deleted file mode 100644 index 430167a..0000000 --- a/src/libcommuni/src/util/irccompleter.cpp +++ /dev/null @@ -1,405 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "irccompleter.h" -#include "irccommandparser.h" -#include "irccommandparser_p.h" -#include "ircbuffermodel.h" -#include "ircusermodel.h" -#include "ircnetwork.h" -#include "ircchannel.h" -#include "irctoken_p.h" -#include "ircuser.h" - -#include <QTextBoundaryFinder> -#include <QPointer> -#include <QList> -#include <QPair> - -IRC_BEGIN_NAMESPACE - -/*! - \file irccompleter.h - \brief \#include <IrcCompleter> - */ - -/*! - \since 3.1 - \class IrcCompleter irccompleter.h <IrcCompleter> - \ingroup util - \brief Provides command and name completion. - - IrcCompleter provides command and name completion for a text input field. The completer - is made context aware by assigning a command \ref IrcCompleter::parser "parser" and a - \ref buffer that is currently active in the GUI. The parser is used for completing - commands, and the buffer is used for completing buffer and user names. - - In order to perform a completion, call complete() with the current text input field - content and the cursor position. If a suitable completion is found, the completed() - signal is emitted with a suggestion for a new content and cursor position for the - text input field. - - \code - TextField { - id: textField - - Keys.onTabPressed: completer.complete(text, cursorPosition) - - IrcCompleter { - id: completer - - buffer: ... - parser: ... - - onCompleted: { - textField.text = text - textField.cursorPosition = cursor - } - } - } - \endcode - - \sa IrcCommandParser, IrcBuffer - */ - -/*! - \fn void IrcCompleter::completed(const QString& text, int cursor) - - This signal is emitted when a suitable completion with \a text and \a cursor position is found. - */ - -#ifndef IRC_DOXYGEN - -static bool isPrefixed(const QString& text, int pos, const QStringList& prefixes, int* len) -{ - foreach (const QString& prefix, prefixes) { - const int ll = prefix.length(); - if (text.mid(pos, ll) == prefix) { - if (len) - *len = 0; - return true; - } else if (text.mid(pos - ll, ll) == prefix) { - if (len) - *len = ll; - return true; - } - } - return false; -} - -struct IrcCompletion -{ - IrcCompletion() : text(), cursor(-1) { } - IrcCompletion(const QString& txt, int pos) : text(txt), cursor(pos) { } - bool isValid() const { return !text.isNull() && cursor != -1; } - bool operator ==(const IrcCompletion& other) const { return text == other.text && cursor == other.cursor; } - bool operator !=(const IrcCompletion& other) const { return text != other.text || cursor != other.cursor; } - QString text; - int cursor; -}; - -class IrcCompleterPrivate -{ - Q_DECLARE_PUBLIC(IrcCompleter) - -public: - IrcCompleterPrivate(); - - void completeNext(IrcCompleter::Direction direction); - QList<IrcCompletion> completeCommands(const QString& text, int pos) const; - QList<IrcCompletion> completeWords(const QString& text, int pos) const; - - IrcCompleter* q_ptr; - - int index; - int cursor; - QString text; - QList<IrcCompletion> completions; - - QString suffix; - QPointer<IrcBuffer> buffer; - QPointer<IrcCommandParser> parser; -}; - -IrcCompleterPrivate::IrcCompleterPrivate() : q_ptr(0), index(-1), cursor(-1), suffix(":"), buffer(0), parser(0) -{ -} - -void IrcCompleterPrivate::completeNext(IrcCompleter::Direction direction) -{ - Q_Q(IrcCompleter); - Q_ASSERT(!completions.isEmpty()); - if (direction == IrcCompleter::Forward) { - index = (index + 1) % completions.length(); - } else { - if (--index < 0) - index = completions.length() - 1; - } - if (index >= 0 && index < completions.length()) { - const IrcCompletion completion = completions.at(index); - text = completion.text; - cursor = completion.cursor; - emit q->completed(text, cursor); - } -} - -static IrcCompletion completeCommand(const QString& text, const QString& command) -{ - IrcTokenizer tokenizer(text); - tokenizer.replace(0, command); - QString completion = tokenizer.toString(); - int next = command.length(); - if (next >= completion.length() || completion.at(next) != QLatin1Char(' ')) - completion.insert(next, QLatin1Char(' ')); - return IrcCompletion(completion, ++next); -} - -QList<IrcCompletion> IrcCompleterPrivate::completeCommands(const QString& text, int pos) const -{ - if (!parser) - return QList<IrcCompletion>(); - - QList<IrcCompletion> completions; - - int removed = 0; - QString input = text; - IrcCommandParserPrivate* pp = IrcCommandParserPrivate::get(parser); - if (pp->processCommand(&input, &removed)) { - const QString command = input.split(QLatin1Char(' '), QString::SkipEmptyParts).value(0).toUpper(); - if (!command.isEmpty()) { - foreach (const IrcCommandInfo& cmd, pp->commands) { - if (cmd.command == command) - return QList<IrcCompletion>() << completeCommand(text, text.left(removed) + cmd.command); - if (cmd.command.startsWith(command)) - completions += completeCommand(text, text.left(removed) + cmd.command); - } - } - // TODO: context sensitive command parameter completion - Q_UNUSED(pos); - } - return completions; -} - -static IrcCompletion completeWord(const QString& text, int from, int len, const QString& word) -{ - QString completion = QString(text).replace(from, len, word); - int next = from + word.length(); - if (next >= completion.length() || completion.at(next) != QLatin1Char(' ')) - completion.insert(next, QLatin1Char(' ')); - return IrcCompletion(completion, ++next); -} - -QList<IrcCompletion> IrcCompleterPrivate::completeWords(const QString& text, int pos) const -{ - if (!buffer || !buffer->network()) - return QList<IrcCompletion>(); - - QList<IrcCompletion> completions; - - const IrcToken token = IrcTokenizer(text).find(pos); - const QPair<int, int> bounds = qMakePair(token.position(), token.length()); - if (bounds.first != -1 && bounds.second != -1) { - const QString word = text.mid(bounds.first, bounds.second); - - int pfx = 0; - QString prefix; - bool isChannel = isPrefixed(text, bounds.first, buffer->network()->channelTypes(), &pfx); - if (isChannel && pfx > 0) - prefix = text.mid(bounds.first - pfx, pfx); - - if (!isChannel) { - IrcUserModel userModel; - userModel.setSortMethod(Irc::SortByActivity); - userModel.setChannel(qobject_cast<IrcChannel*>(buffer)); - foreach (IrcUser* user, userModel.users()) { - if (user->name().startsWith(word, Qt::CaseInsensitive)) { - QString name = user->name(); - if (token.index() == 0) - name += suffix; - IrcCompletion completion = completeWord(text, bounds.first, bounds.second, name); - if (completion.isValid() && !completions.contains(completion)) - completions += completion; - } - } - } - - QList<IrcBuffer*> buffers = buffer->model()->buffers(); - buffers.move(buffers.indexOf(buffer), 0); // promote the current buffer - foreach (IrcBuffer* buffer, buffers) { - QString title = buffer->title(); - if (!isChannel && token.index() == 0) - title += suffix; - IrcCompletion completion; - if (title.startsWith(word, Qt::CaseInsensitive)) - completion = completeWord(text, bounds.first, bounds.second, title); - else if (isChannel && !prefix.isEmpty() && title.startsWith(prefix + word, Qt::CaseInsensitive)) - completion = completeWord(text, bounds.first - prefix.length(), bounds.second + prefix.length(), title); - if (completion.isValid() && !completions.contains(completion)) - completions += completion; - } - } - return completions; -} -#endif // IRC_DOXYGEN - -/*! - Constructs a completer with \a parent. - */ -IrcCompleter::IrcCompleter(QObject* parent) : QObject(parent), d_ptr(new IrcCompleterPrivate) -{ - Q_D(IrcCompleter); - d->q_ptr = this; -} - -/*! - Destructs the completer. - */ -IrcCompleter::~IrcCompleter() -{ -} - -/*! - This property holds the completion suffix. - - The suffix is appended to the end of a completed nick name, but - only when the nick name is in the beginning of completed text. - - The default value is \c ":". - - \par Access functions: - \li QString <b>suffix</b>() const - \li void <b>setSuffix</b>(const QString& suffix) [slot] - - \par Notifier signal: - \li void <b>suffixChanged</b>(const QString& suffix) - */ -QString IrcCompleter::suffix() const -{ - Q_D(const IrcCompleter); - return d->suffix; -} - -void IrcCompleter::setSuffix(const QString& suffix) -{ - Q_D(IrcCompleter); - if (d->suffix != suffix) { - d->suffix = suffix; - emit suffixChanged(suffix); - } -} - -/*! - This property holds the buffer used for name completion. - - \par Access functions: - \li \ref IrcBuffer* <b>buffer</b>() const - \li void <b>setBuffer</b>(\ref IrcBuffer* buffer) [slot] - - \par Notifier signal: - \li void <b>bufferChanged</b>(\ref IrcBuffer* buffer) - */ -IrcBuffer* IrcCompleter::buffer() const -{ - Q_D(const IrcCompleter); - return d->buffer; -} - -void IrcCompleter::setBuffer(IrcBuffer* buffer) -{ - Q_D(IrcCompleter); - if (d->buffer != buffer) { - d->buffer = buffer; - emit bufferChanged(buffer); - } -} - -/*! - This property holds the parser used for command completion. - - \par Access functions: - \li \ref IrcCommandParser* <b>parser</b>() const - \li void <b>setParser</b>(\ref IrcCommandParser* parser) [slot] - - \par Notifier signal: - \li void <b>parserChanged</b>(\ref IrcCommandParser* parser) - */ -IrcCommandParser* IrcCompleter::parser() const -{ - Q_D(const IrcCompleter); - return d->parser; -} - -void IrcCompleter::setParser(IrcCommandParser* parser) -{ - Q_D(IrcCompleter); - if (d->parser != parser) { - d->parser = parser; - emit parserChanged(parser); - } -} - -/*! - Completes \a text at \a cursor position, iterating multiple - matches to the specified \a direction, and emits completed() - if a suitable completion is found. - */ -void IrcCompleter::complete(const QString& text, int cursor, Direction direction) -{ - Q_D(IrcCompleter); - if (!d->completions.isEmpty() && d->cursor == cursor && d->text == text) { - d->completeNext(direction); - return; - } - - QList<IrcCompletion> completions = d->completeCommands(text, cursor); - if (completions.isEmpty() || IrcTokenizer(text).find(cursor).index() > 0) - completions = d->completeWords(text, cursor); - - if (d->completions != completions) { - d->index = -1; - d->completions = completions; - } - if (!d->completions.isEmpty()) - d->completeNext(direction); -} - -/*! - Resets the completer state. - */ -void IrcCompleter::reset() -{ - Q_D(IrcCompleter); - d->index = -1; - d->cursor = -1; - d->text.clear(); - d->completions.clear(); -} - -#include "moc_irccompleter.cpp" - -IRC_END_NAMESPACE diff --git a/src/libcommuni/src/util/irclagtimer.cpp b/src/libcommuni/src/util/irclagtimer.cpp deleted file mode 100644 index b1612f7..0000000 --- a/src/libcommuni/src/util/irclagtimer.cpp +++ /dev/null @@ -1,243 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "irclagtimer.h" -#include "irclagtimer_p.h" -#include "ircconnection.h" -#include "ircmessage.h" -#include "irccommand.h" -#include <QDateTime> - -IRC_BEGIN_NAMESPACE - -static const int DEFAULT_INTERVAL = 60; - -/*! - \file irclagtimer.h - \brief \#include <IrcLagTimer> - */ - -/*! - \class IrcLagTimer irclagtimer.h <IrcLagTimer> - \ingroup util - \brief Provides a timer for measuring lag. - - \note IrcLagTimer relies on functionality introduced in Qt 4.7.0, and is - therefore not functional when built against earlier versions of Qt. - */ - -/*! - \fn void IrcLagTimer::lagChanged(qint64 lag) - - This signal is emitted when the \a lag has changed. - */ - -#ifndef IRC_DOXYGEN -IrcLagTimerPrivate::IrcLagTimerPrivate() : q_ptr(0), connection(0), interval(DEFAULT_INTERVAL), lag(-1) -{ -} - -bool IrcLagTimerPrivate::messageFilter(IrcMessage* msg) -{ - if (msg->type() == IrcMessage::Pong) - return processPongReply(static_cast<IrcPongMessage*>(msg)); - return false; -} - -bool IrcLagTimerPrivate::processPongReply(IrcPongMessage* msg) -{ -#if QT_VERSION >= 0x040700 - // TODO: configurable format? - if (msg->argument().startsWith("communi/")) { - bool ok = false; - qint64 timestamp = msg->argument().mid(8).toLongLong(&ok); - if (ok) { - updateLag(QDateTime::currentMSecsSinceEpoch() - timestamp); - return true; - } - } -#endif // QT_VERSION - return false; -} - -void IrcLagTimerPrivate::_irc_connected() -{ -#if QT_VERSION >= 0x040700 - if (interval > 0) - timer.start(); -#endif // QT_VERSION -} - -void IrcLagTimerPrivate::_irc_pingServer() -{ -#if QT_VERSION >= 0x040700 - // TODO: configurable format? - QString argument = QString("communi/%1").arg(QDateTime::currentMSecsSinceEpoch()); - IrcCommand* cmd = IrcCommand::createPing(argument); - connection->sendCommand(cmd); -#endif // QT_VERSION -} - -void IrcLagTimerPrivate::_irc_disconnected() -{ -#if QT_VERSION >= 0x040700 - updateLag(-1); - if (timer.isActive()) - timer.stop(); -#endif // QT_VERSION -} - -void IrcLagTimerPrivate::updateTimer() -{ -#if QT_VERSION >= 0x040700 - if (connection && interval > 0) { - timer.setInterval(interval * 1000); - if (!timer.isActive() && connection->isConnected()) - timer.start(); - } else { - if (timer.isActive()) - timer.stop(); - updateLag(-1); - } -#endif // QT_VERSION -} - -void IrcLagTimerPrivate::updateLag(qint64 value) -{ - Q_Q(IrcLagTimer); - if (lag != value) { - lag = qMax(-1ll, value); - emit q->lagChanged(lag); - } -} -#endif // IRC_DOXYGEN - -/*! - Constructs a new lag timer with \a parent. - - \note If \a parent is an instance of IrcConnection, it will be - automatically assigned to \ref IrcLagTimer::connection "connection". - */ -IrcLagTimer::IrcLagTimer(QObject* parent) : QObject(parent), d_ptr(new IrcLagTimerPrivate) -{ - Q_D(IrcLagTimer); - d->q_ptr = this; - connect(&d->timer, SIGNAL(timeout()), this, SLOT(_irc_pingServer())); - setConnection(qobject_cast<IrcConnection*>(parent)); -} - -/*! - Destructs the lag timer. - */ -IrcLagTimer::~IrcLagTimer() -{ -} - -/*! - This property holds the associated connection. - - \par Access functions: - \li IrcConnection* <b>connection</b>() const - \li void <b>setConnection</b>(IrcConnection* connection) - */ -IrcConnection* IrcLagTimer::connection() const -{ - Q_D(const IrcLagTimer); - return d->connection; -} - -void IrcLagTimer::setConnection(IrcConnection* connection) -{ - Q_D(IrcLagTimer); - if (d->connection != connection) { - if (d->connection) { - d->connection->removeMessageFilter(d); - disconnect(d->connection, SIGNAL(connected()), this, SLOT(_irc_connected())); - disconnect(d->connection, SIGNAL(disconnected()), this, SLOT(_irc_disconnected())); - } - d->connection = connection; - if (connection) { - connection->installMessageFilter(d); - connect(connection, SIGNAL(connected()), this, SLOT(_irc_connected())); - connect(connection, SIGNAL(disconnected()), this, SLOT(_irc_disconnected())); - } - d->updateLag(-1); - d->updateTimer(); - } -} - -/*! - This property holds the current lag in milliseconds. - - The value is \c -1 when - \li the connection is not connected, - \li the lag has not yet been measured, - \li the lag timer is disabled (interval <= 0s), or - \li the Qt version is too old (4.7.0 or later is required). - - \par Access function: - \li qint64 <b>lag</b>() const - - \par Notifier signal: - \li void <b>lagChanged</b>(qint64 lag) - */ -qint64 IrcLagTimer::lag() const -{ - Q_D(const IrcLagTimer); - return d->lag; -} - -/*! - This property holds the lag measurement interval in seconds. - - The default value is \c 60 seconds. A value equal to or - less than \c 0 seconds disables the lag measurement. - - \par Access functions: - \li int <b>interval</b>() const - \li void <b>setInterval</b>(int seconds) - */ -int IrcLagTimer::interval() const -{ - Q_D(const IrcLagTimer); - return d->interval; -} - -void IrcLagTimer::setInterval(int seconds) -{ - Q_D(IrcLagTimer); - if (d->interval != seconds) { - d->interval = seconds; - d->updateTimer(); - } -} - -#include "moc_irclagtimer.cpp" -#include "moc_irclagtimer_p.cpp" - -IRC_END_NAMESPACE diff --git a/src/libcommuni/src/util/ircpalette.cpp b/src/libcommuni/src/util/ircpalette.cpp deleted file mode 100644 index fe31035..0000000 --- a/src/libcommuni/src/util/ircpalette.cpp +++ /dev/null @@ -1,527 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "ircpalette.h" -#include "irc.h" - -IRC_BEGIN_NAMESPACE - -/*! - \file ircpalette.h - \brief \#include <IrcPalette> - */ - -/*! - \class IrcPalette ircpalette.h <IrcPalette> - \ingroup util - \brief Specifies a palette of IRC colors. - - IrcPalette is used to specify the desired IRC color palette when - converting IRC-style formatted messages to HTML using IrcTextFormat. - - \code - IrcTextFormat format; - IrcPalette* palette = format.palette(); - palette->setColorName(Irc::Red, "#ff3333"); - palette->setColorName(Irc::Green, "#33ff33"); - palette->setColorName(Irc::Blue, "#3333ff"); - // ... - - QString html = format.toHtml(message); - \endcode - - \sa Irc::Color, <a href="http://www.mirc.com/colors.html">mIRC colors</a>, <a href="http://www.w3.org/TR/SVG/types.html#ColorKeywords">SVG color keyword names</a> - */ - -class IrcPalettePrivate -{ -public: - QMap<int, QString> colors; -}; - -static QMap<int, QString>& irc_default_colors() -{ - static QMap<int, QString> x; - if (x.isEmpty()) { - x.insert(Irc::White, QLatin1String("white")); - x.insert(Irc::Black, QLatin1String("black")); - x.insert(Irc::Blue, QLatin1String("blue")); - x.insert(Irc::Green, QLatin1String("green")); - x.insert(Irc::Red, QLatin1String("red")); - x.insert(Irc::Brown, QLatin1String("brown")); - x.insert(Irc::Purple, QLatin1String("purple")); - x.insert(Irc::Orange, QLatin1String("orange")); - x.insert(Irc::Yellow, QLatin1String("yellow")); - x.insert(Irc::LightGreen, QLatin1String("lightgreen")); - x.insert(Irc::Cyan, QLatin1String("cyan")); - x.insert(Irc::LightCyan, QLatin1String("lightcyan")); - x.insert(Irc::LightBlue, QLatin1String("lightblue")); - x.insert(Irc::Pink, QLatin1String("pink")); - x.insert(Irc::Gray, QLatin1String("gray")); - x.insert(Irc::LightGray, QLatin1String("lightgray")); - } - return x; -} - -/*! - \internal - Constructs a new palette with \a parent. - */ -IrcPalette::IrcPalette(QObject* parent) : QObject(parent), d_ptr(new IrcPalettePrivate) -{ - Q_D(IrcPalette); - d->colors = irc_default_colors(); -} - -/*! - \internal - Destructs the palette. - */ -IrcPalette::~IrcPalette() -{ -} - -/*! - This property holds the white color name. - - The default value is \c "white". - - \par Access functions: - \li QString <b>white</b>() const - \li void <b>setWhite</b>(const QString& color) - - \sa Irc::White - */ -QString IrcPalette::white() const -{ - Q_D(const IrcPalette); - return d->colors.value(Irc::White); -} - -void IrcPalette::setWhite(const QString& color) -{ - Q_D(IrcPalette); - d->colors.insert(Irc::White, color); -} - -/*! - This property holds the black color name. - - The default value is \c "black". - - \par Access functions: - \li QString <b>black</b>() const - \li void <b>setBlack</b>(const QString& color) - - \sa Irc::Black - */ -QString IrcPalette::black() const -{ - Q_D(const IrcPalette); - return d->colors.value(Irc::Black); -} - -void IrcPalette::setBlack(const QString& color) -{ - Q_D(IrcPalette); - d->colors.insert(Irc::Black, color); -} - -/*! - This property holds the blue color name. - - The default value is \c "blue". - - \par Access functions: - \li QString <b>blue</b>() const - \li void <b>setBlue</b>(const QString& color) - - \sa Irc::Blue - */ -QString IrcPalette::blue() const -{ - Q_D(const IrcPalette); - return d->colors.value(Irc::Blue); -} - -void IrcPalette::setBlue(const QString& color) -{ - Q_D(IrcPalette); - d->colors.insert(Irc::Blue, color); -} - -/*! - This property holds the green color name. - - The default value is \c "green". - - \par Access functions: - \li QString <b>green</b>() const - \li void <b>setGreen</b>(const QString& color) - - \sa Irc::Green - */ -QString IrcPalette::green() const -{ - Q_D(const IrcPalette); - return d->colors.value(Irc::Green); -} - -void IrcPalette::setGreen(const QString& color) -{ - Q_D(IrcPalette); - d->colors.insert(Irc::Green, color); -} - -/*! - This property holds the red color name. - - The default value is \c "red". - - \par Access functions: - \li QString <b>red</b>() const - \li void <b>setRed</b>(const QString& color) - - \sa Irc::Red - */ -QString IrcPalette::red() const -{ - Q_D(const IrcPalette); - return d->colors.value(Irc::Red); -} - -void IrcPalette::setRed(const QString& color) -{ - Q_D(IrcPalette); - d->colors.insert(Irc::Red, color); -} - -/*! - This property holds the brown color name. - - The default value is \c "brown". - - \par Access functions: - \li QString <b>brown</b>() const - \li void <b>setBrown</b>(const QString& color) - - \sa Irc::Brown - */ -QString IrcPalette::brown() const -{ - Q_D(const IrcPalette); - return d->colors.value(Irc::Brown); -} - -void IrcPalette::setBrown(const QString& color) -{ - Q_D(IrcPalette); - d->colors.insert(Irc::Brown, color); -} - -/*! - This property holds the purple color name. - - The default value is \c "purple". - - \par Access functions: - \li QString <b>purple</b>() const - \li void <b>setPurple</b>(const QString& color) - - \sa Irc::Purple - */ -QString IrcPalette::purple() const -{ - Q_D(const IrcPalette); - return d->colors.value(Irc::Purple); -} - -void IrcPalette::setPurple(const QString& color) -{ - Q_D(IrcPalette); - d->colors.insert(Irc::Purple, color); -} - -/*! - This property holds the orange color name. - - The default value is \c "orange". - - \par Access functions: - \li QString <b>orange</b>() const - \li void <b>setOrange</b>(const QString& color) - - \sa Irc::Orange - */ -QString IrcPalette::orange() const -{ - Q_D(const IrcPalette); - return d->colors.value(Irc::Orange); -} - -void IrcPalette::setOrange(const QString& color) -{ - Q_D(IrcPalette); - d->colors.insert(Irc::Orange, color); -} - -/*! - This property holds the yellow color name. - - The default value is \c "yellow". - - \par Access functions: - \li QString <b>yellow</b>() const - \li void <b>setYellow</b>(const QString& color) - - \sa Irc::Yellow - */ -QString IrcPalette::yellow() const -{ - Q_D(const IrcPalette); - return d->colors.value(Irc::Yellow); -} - -void IrcPalette::setYellow(const QString& color) -{ - Q_D(IrcPalette); - d->colors.insert(Irc::Yellow, color); -} - -/*! - This property holds the light green color name. - - The default value is \c "lightgreen". - - \par Access functions: - \li QString <b>lightGreen</b>() const - \li void <b>setLightGreen</b>(const QString& color) - - \sa Irc::LightGreen - */ -QString IrcPalette::lightGreen() const -{ - Q_D(const IrcPalette); - return d->colors.value(Irc::LightGreen); -} - -void IrcPalette::setLightGreen(const QString& color) -{ - Q_D(IrcPalette); - d->colors.insert(Irc::LightGreen, color); -} - -/*! - This property holds the cyan color name. - - The default value is \c "cyan". - - \par Access functions: - \li QString <b>cyan</b>() const - \li void <b>setCyan</b>(const QString& color) - - \sa Irc::Cyan - */ -QString IrcPalette::cyan() const -{ - Q_D(const IrcPalette); - return d->colors.value(Irc::Cyan); -} - -void IrcPalette::setCyan(const QString& color) -{ - Q_D(IrcPalette); - d->colors.insert(Irc::Cyan, color); -} - -/*! - This property holds the light cyan color name. - - The default value is \c "lightcyan". - - \par Access functions: - \li QString <b>lightCyan</b>() const - \li void <b>setLightCyan</b>(const QString& color) - - \sa Irc::LightCyan - */ -QString IrcPalette::lightCyan() const -{ - Q_D(const IrcPalette); - return d->colors.value(Irc::LightCyan); -} - -void IrcPalette::setLightCyan(const QString& color) -{ - Q_D(IrcPalette); - d->colors.insert(Irc::LightCyan, color); -} - -/*! - This property holds the light blue color name. - - The default value is \c "lightblue". - - \par Access functions: - \li QString <b>lightBlue</b>() const - \li void <b>setLightBlue</b>(const QString& color) - - \sa Irc::LightBlue - */ -QString IrcPalette::lightBlue() const -{ - Q_D(const IrcPalette); - return d->colors.value(Irc::LightBlue); -} - -void IrcPalette::setLightBlue(const QString& color) -{ - Q_D(IrcPalette); - d->colors.insert(Irc::LightBlue, color); -} - -/*! - This property holds the pink color name. - - The default value is \c "pink". - - \par Access functions: - \li QString <b>pink</b>() const - \li void <b>setPink</b>(const QString& color) - - \sa Irc::Pink - */ -QString IrcPalette::pink() const -{ - Q_D(const IrcPalette); - return d->colors.value(Irc::Pink); -} - -void IrcPalette::setPink(const QString& color) -{ - Q_D(IrcPalette); - d->colors.insert(Irc::Pink, color); -} - -/*! - This property holds the gray color name. - - The default value is \c "gray". - - \par Access functions: - \li QString <b>gray</b>() const - \li void <b>setGray</b>(const QString& color) - - \sa Irc::Gray - */ -QString IrcPalette::gray() const -{ - Q_D(const IrcPalette); - return d->colors.value(Irc::Gray); -} - -void IrcPalette::setGray(const QString& color) -{ - Q_D(IrcPalette); - d->colors.insert(Irc::Gray, color); -} - -/*! - This property holds the light gray color name. - - The default value is \c "lightgray". - - \par Access functions: - \li QString <b>lightGray</b>() const - \li void <b>setLightGray</b>(const QString& color) - - \sa Irc::LightGray - */ -QString IrcPalette::lightGray() const -{ - Q_D(const IrcPalette); - return d->colors.value(Irc::LightGray); -} - -void IrcPalette::setLightGray(const QString& color) -{ - Q_D(IrcPalette); - d->colors.insert(Irc::LightGray, color); -} - -/*! - Returns the map of color names. - */ -QMap<int, QString> IrcPalette::colorNames() const -{ - Q_D(const IrcPalette); - return d->colors; -} - -/*! - Sets the map of color \a names. - */ -void IrcPalette::setColorNames(const QMap<int, QString>& names) -{ - Q_D(IrcPalette); - d->colors = names; -} - -/*! - Converts a \a color code to a color name. If the \a color code - is unknown, the function returns the \a fallback color name. -*/ -QString IrcPalette::colorName(int color, const QString& fallback) const -{ - Q_D(const IrcPalette); - return d->colors.value(color, fallback); -} - -/*! - Assigns a \a name for \a color code. - - The color \a name may be in one of these formats: - - \li \#RGB (each of R, G, and B is a single hex digit) - \li \#RRGGBB - \li \#RRRGGGBBB - \li \#RRRRGGGGBBBB - \li A name from the list of colors defined in the list of <a href="http://www.w3.org/TR/SVG/types.html#ColorKeywords">SVG color keyword names</a> - provided by the World Wide Web Consortium; for example, "steelblue" or "gainsboro". These color names work on all platforms. Note that these - color names are not the same as defined by the Qt::GlobalColor enums, e.g. "green" and Qt::green does not refer to the same color. - \li transparent - representing the absence of a color. -*/ -void IrcPalette::setColorName(int color, const QString& name) -{ - Q_D(IrcPalette); - d->colors.insert(color, name); -} - -#include "moc_ircpalette.cpp" - -IRC_END_NAMESPACE diff --git a/src/libcommuni/src/util/irctextformat.cpp b/src/libcommuni/src/util/irctextformat.cpp deleted file mode 100644 index 072de47..0000000 --- a/src/libcommuni/src/util/irctextformat.cpp +++ /dev/null @@ -1,550 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/* - Parts of this code come from Konversation and are copyrighted to: - Copyright (C) 2002 Dario Abatianni <eisfuchs@tigress.com> - Copyright (C) 2004 Peter Simonsson <psn@linux.se> - Copyright (C) 2006-2008 Eike Hein <hein@kde.org> - Copyright (C) 2004-2009 Eli Mackenzie <argonel@gmail.com> -*/ - -#include "irctextformat.h" -#include "ircpalette.h" -#if QT_VERSION >= 0x050000 -#include <QRegularExpression> -#endif -#include <QStringList> -#include <QRegExp> -#include <QUrl> -#include "irc.h" - -IRC_BEGIN_NAMESPACE - -/*! - \file irctextformat.h - \brief \#include <IrcTextFormat> - */ - -/*! - \class IrcTextFormat irctextformat.h <IrcTextFormat> - \ingroup util - \brief Provides methods for text formatting. - - IrcTextFormat is used to convert IRC-style formatted messages to either - plain text or HTML. When converting to plain text, the IRC-style formatting - (colors, bold, underline etc.) are simply stripped away. When converting - to HTML, the IRC-style formatting is converted to the corresponding HTML - formatting. - - \code - IrcTextFormat format; - QString text = format.toPlainText(message); - - format.palette()->setColorName(Irc::Red, "#ff3333"); - format.palette()->setColorName(Irc::Green, "#33ff33"); - format.palette()->setColorName(Irc::Blue, "#3333ff"); - // ... - QString html = format.toHtml(message); - \endcode - - \sa IrcPalette - */ - -/*! - \enum IrcTextFormat::SpanFormat - This enum describes the supported formats for HTML span-elements. - */ - -/*! - \var IrcTextFormat::SpanStyle - \brief HTML span-elements with style-attributes. - */ - -/*! - \var IrcTextFormat::SpanClass - \brief HTML span-elements with class-attributes. - */ - -class IrcTextFormatPrivate -{ -public: - void parse(const QString& str, QString* text, QString* html, QList<QUrl>* urls) const; - - QString plainText; - QString html; - QList<QUrl> urls; - QString urlPattern; - IrcPalette* palette; - IrcTextFormat::SpanFormat spanFormat; -}; - -static bool parseColors(const QString& message, int pos, int* len, int* fg = 0, int* bg = 0) -{ - // fg(,bg) - *len = 0; - if (fg) - *fg = -1; - if (bg) - *bg = -1; - QRegExp rx(QLatin1String("(\\d{1,2})(?:,(\\d{1,2}))?")); - int idx = rx.indexIn(message, pos); - if (idx == pos) { - *len = rx.matchedLength(); - if (fg) - *fg = rx.cap(1).toInt(); - if (bg) { - bool ok = false; - int tmp = rx.cap(2).toInt(&ok); - if (ok) - *bg = tmp; - } - } - return *len > 0; -} - -static QString generateLink(const QString& protocol, const QString& href) -{ - const char* exclude = ":/?@%#=+&,"; - const QByteArray url = QUrl::toPercentEncoding(href, exclude); - return QString(QLatin1String("<a href='%1%2'>%3</a>")).arg(protocol, url, href); -} - -static QString parseLinks(const QString& message, const QString& pattern, QList<QUrl>* urls) -{ - QString processed = message; -#if QT_VERSION >= 0x050000 - int offset = 0; - QRegularExpression rx(pattern); - QRegularExpressionMatchIterator it = rx.globalMatch(message); - while (it.hasNext()) { - QRegularExpressionMatch match = it.next(); - QString protocol; - if (match.capturedRef(2).isEmpty()) { - QStringRef link = match.capturedRef(1); - if (link.startsWith(QStringLiteral("ftp."), Qt::CaseInsensitive)) - protocol = QStringLiteral("ftp://"); - else if (link.contains(QStringLiteral("@"))) - protocol = QStringLiteral("mailto:"); - else - protocol = QStringLiteral("http://"); - } - - const int start = match.capturedStart(); - const int len = match.capturedEnd() - start; - const QString href = match.captured(); - const QString link = generateLink(protocol, href); - processed.replace(start + offset, len, link); - offset += link.length() - len; - if (urls) - urls->append(QUrl(protocol + href)); - } -#else - int pos = 0; - QRegExp rx(pattern); - while ((pos = rx.indexIn(processed, pos)) >= 0) { - int len = rx.matchedLength(); - QString href = processed.mid(pos, len); - - QString protocol; - if (rx.cap(2).isEmpty()) { - if (rx.cap(1).contains(QLatin1Char('@'))) - protocol = QLatin1String("mailto:"); - else if (rx.cap(1).startsWith(QLatin1String("ftp."), Qt::CaseInsensitive)) - protocol = QLatin1String("ftp://"); - else - protocol = QLatin1String("http://"); - } - - QString link = generateLink(protocol, href); - processed.replace(pos, len, link); - pos += link.length(); - if (urls) - urls->append(QUrl(protocol + href)); - } -#endif - return processed; -} - -void IrcTextFormatPrivate::parse(const QString& str, QString* text, QString* html, QList<QUrl>* urls) const -{ - QString processed = str; - - // TODO: - //processed.replace(QLatin1Char('&'), QLatin1String("&")); - processed.replace(QLatin1Char('<'), QLatin1String("<")); - //processed.replace(QLatin1Char('>'), QLatin1String(">")); - //processed.replace(QLatin1Char('"'), QLatin1String(""")); - //processed.replace(QLatin1Char('\''), QLatin1String("'")); - //processed.replace(QLatin1Char('\t'), QLatin1String(" ")); - - enum { - None = 0x0, - Bold = 0x1, - Italic = 0x4, - LineThrough = 0x8, - Underline = 0x10, - Inverse = 0x20 - }; - int state = None; - - int pos = 0; - int len = 0; - int fg = -1; - int bg = -1; - int depth = 0; - bool potentialUrl = false; - while (pos < processed.size()) { - QString replacement; - switch (processed.at(pos).unicode()) { - case '\x02': // bold - if (state & Bold) { - depth--; - replacement = QLatin1String("</span>"); - } else { - depth++; - if (spanFormat == IrcTextFormat::SpanStyle) - replacement = QLatin1String("<span style='font-weight: bold'>"); - else - replacement = QLatin1String("<span class='bold'>"); - } - state ^= Bold; - break; - - case '\x03': // color - if (parseColors(processed, pos + 1, &len, &fg, &bg)) { - depth++; - if (spanFormat == IrcTextFormat::SpanStyle) { - QStringList styles; - styles += QString(QLatin1String("color: %1")).arg(palette->colorName(fg, QLatin1String("black"))); - if (bg != -1) - styles += QString(QLatin1String("background-color: %1")).arg(palette->colorName(bg, QLatin1String("transparent"))); - replacement = QString(QLatin1String("<span style='%1'>")).arg(styles.join(QLatin1String("; "))); - } else { - QStringList classes; - classes += palette->colorName(fg, QLatin1String("black")); - if (bg != -1) - classes += palette->colorName(bg, QLatin1String("transparent")) + QLatin1String("-background"); - replacement = QString(QLatin1String("<span class='%1'>")).arg(classes.join(QLatin1String(" "))); - } - // \x03FF(,BB) - processed.replace(pos, len + 1, replacement); - pos += replacement.length(); - continue; - } else { - depth--; - replacement = QLatin1String("</span>"); - } - break; - - //case '\x09': // italic - case '\x1d': // italic - if (state & Italic) { - depth--; - replacement = QLatin1String("</span>"); - } else { - depth++; - if (spanFormat == IrcTextFormat::SpanStyle) - replacement = QLatin1String("<span style='font-style: italic'>"); - else - replacement = QLatin1String("<span class='italic'>"); - } - state ^= Italic; - break; - - case '\x13': // line-through - if (state & LineThrough) { - depth--; - replacement = QLatin1String("</span>"); - } else { - depth++; - if (spanFormat == IrcTextFormat::SpanStyle) - replacement = QLatin1String("<span style='text-decoration: line-through'>"); - else - replacement = QLatin1String("<span class='line-through'>"); - } - state ^= LineThrough; - break; - - case '\x15': // underline - case '\x1f': // underline - if (state & Underline) { - depth--; - replacement = QLatin1String("</span>"); - } else { - depth++; - if (spanFormat == IrcTextFormat::SpanStyle) - replacement = QLatin1String("<span style='text-decoration: underline'>"); - else - replacement = QLatin1String("<span class='underline'>"); - } - state ^= Underline; - break; - - case '\x16': // inverse - if (state & Inverse) { - depth--; - replacement = QLatin1String("</span>"); - } else { - depth++; - if (spanFormat == IrcTextFormat::SpanStyle) - replacement = QLatin1String("<span style='text-decoration: inverse'>"); - else - replacement = QLatin1String("<span class='inverse'>"); - } - state ^= Inverse; - break; - - case '\x0f': // none - if (depth > 0) - replacement = QString(QLatin1String("</span>")).repeated(depth); - else - processed.remove(pos--, 1); // must rewind back for ++pos below... - state = None; - depth = 0; - break; - - case '.': - case '/': - case ':': - // a dot, slash or colon NOT surrounded by a space indicates a potential URL - if (!potentialUrl && pos > 0 && !processed.at(pos - 1).isSpace() - && pos < processed.length() - 1 && !processed.at(pos + 1).isSpace()) - potentialUrl = true; - // flow through - default: - if (text) - *text += processed.at(pos); - break; - } - - if (!replacement.isEmpty()) { - processed.replace(pos, 1, replacement); - pos += replacement.length(); - } else { - ++pos; - } - } - - if ((html || urls) && potentialUrl && !urlPattern.isEmpty()) - processed = parseLinks(processed, urlPattern, urls); - if (html) - *html = processed; -} - -/*! - Constructs a new text format with \a parent. - */ -IrcTextFormat::IrcTextFormat(QObject* parent) : QObject(parent), d_ptr(new IrcTextFormatPrivate) -{ - Q_D(IrcTextFormat); - d->palette = new IrcPalette(this); - d->urlPattern = QString("\\b((?:(?:([a-z][\\w\\.-]+:/{1,3})|www|ftp\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}/)(?:[^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+(?:\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|\\}\\]|[^\\s`!()\\[\\]{};:'\".,<>?%1%2%3%4%5%6])|[a-z0-9.\\-+_]+@[a-z0-9.\\-]+[.][a-z]{1,5}[^\\s/`!()\\[\\]{};:'\".,<>?%1%2%3%4%5%6]))").arg(QChar(0x00AB)).arg(QChar(0x00BB)).arg(QChar(0x201C)).arg(QChar(0x201D)).arg(QChar(0x2018)).arg(QChar(0x2019)); - d->spanFormat = SpanStyle; -} - -/*! - Destructs the text format. - */ -IrcTextFormat::~IrcTextFormat() -{ -} - -/*! - This property holds the palette used for color formatting. - - \par Access function: - \li \ref IrcPalette* <b>palette</b>() const - */ -IrcPalette* IrcTextFormat::palette() const -{ - Q_D(const IrcTextFormat); - return d->palette; -} - -/*! - This property holds the regular expression pattern used for matching URLs. - - \par Access functions: - \li QString <b>urlPattern</b>() const - \li void <b>setUrlPattern</b>(const QString& pattern) - */ -QString IrcTextFormat::urlPattern() const -{ - Q_D(const IrcTextFormat); - return d->urlPattern; -} - -void IrcTextFormat::setUrlPattern(const QString& pattern) -{ - Q_D(IrcTextFormat); - d->urlPattern = pattern; -} - -/*! - \since 3.1 - - This property holds the format used for HTML span-elements. - - IrcTextFormat uses HTML span-elements for converting the IRC-style text - formatting to the corresponding HTML formatting. The \ref SpanStyle format - generates self contained span-elements with style-attributes, resulting to - HTML that is ready to be used with Qt's rich text classes without additional - styling. For more flexible styling, the \ref SpanClass generates span-elements - with class-attributes that can be styled with additional style sheets. - - The default value is \ref SpanStyle. The following table illustrates the - difference between \ref SpanStyle and \ref SpanClass HTML formatting: - - IRC format | SpanStyle | SpanClass - --------------------------------------- | ----------------------------------------------------------------------|---------- - Bold ("\02...\0F") | <span style='font-weight: bold'>...</span> | <span class='bold'>...</span> - Color ("\03fg...\0F") | <span style='color: fg;'>...</span> | <span class='fg'>...</span> - Background ("\03fgbg...\0F") | <span style='color: fg; background-color: bg'>...</span> | <span class='fg bg-background'>...</span> - Italic ("\09...\0F") | <span style='font-style: italic'>...</span> | <span class='italic'>...</span> - Line-through ("\13...\0F") | <span style='text-decoration: line-through'>...</span> | <span class='line-through'>...</span> - Underline ("\15...\0F" or "\1F...\0F") | <span style='text-decoration: underline'>...</span> | <span class='underline'>...</span> - Inverse ("\16...\0F") | <span style='text-decoration: inverse'>...</span> | <span class='inverse'>...</span> - - \par Access functions: - \li \ref SpanFormat <b>spanFormat</b>() const - \li void <b>setSpanFormat</b>(\ref SpanFormat format) - */ -IrcTextFormat::SpanFormat IrcTextFormat::spanFormat() const -{ - Q_D(const IrcTextFormat); - return d->spanFormat; -} - -void IrcTextFormat::setSpanFormat(IrcTextFormat::SpanFormat format) -{ - Q_D(IrcTextFormat); - d->spanFormat = format; -} - - -/*! - Converts \a text to HTML. This function parses the text and replaces - IRC-style formatting (colors, bold, underline etc.) to the corresponding - HTML formatting. Furthermore, this function detects URLs and replaces - them with appropriate HTML hyperlinks. - - \note URL detection can be disabled by setting an empty - regular expression pattern used for matching URLs. - - \sa toPlainText(), parse(), palette, urlPattern, spanFormat -*/ -QString IrcTextFormat::toHtml(const QString& text) const -{ - Q_D(const IrcTextFormat); - QString html; - d->parse(text, 0, &html, 0); - return html; -} - -/*! - Converts \a text to plain text. This function parses the text and - strips away IRC-style formatting (colors, bold, underline etc.) - - \sa toHtml(), parse() -*/ -QString IrcTextFormat::toPlainText(const QString& text) const -{ - Q_D(const IrcTextFormat); - QString plain; - d->parse(text, &plain, 0, 0); - return plain; -} - -/*! - \since 3.2 - - This property holds the current plain text content. - - \par Access function: - \li QString <b>plainText</b>() const - - \sa parse(), html, urls - */ -QString IrcTextFormat::plainText() const -{ - Q_D(const IrcTextFormat); - return d->plainText; -} - -/*! - \since 3.2 - - This property holds the current HTML content. - - \par Access function: - \li QString <b>html</b>() const - - \sa parse(), plainText, urls - */ -QString IrcTextFormat::html() const -{ - Q_D(const IrcTextFormat); - return d->html; -} - -/*! - \since 3.2 - - This property holds the current list of URLs. - - \par Access function: - \li QList<QUrl> <b>urls</b>() const - - \sa parse(), plainText, html - */ -QList<QUrl> IrcTextFormat::urls() const -{ - Q_D(const IrcTextFormat); - return d->urls; -} - -/*! - \since 3.2 - - Parses \a text converting it to plain text and HTML and detects URLs. - - \sa plainText, html, urls - */ -void IrcTextFormat::parse(const QString& text) -{ - Q_D(IrcTextFormat); - d->plainText.clear(); - d->html.clear(); - d->urls.clear(); - d->parse(text, &d->plainText, &d->html, &d->urls); -} - -#include "moc_irctextformat.cpp" - -IRC_END_NAMESPACE diff --git a/src/libcommuni/src/util/irctoken.cpp b/src/libcommuni/src/util/irctoken.cpp deleted file mode 100644 index 97f44a4..0000000 --- a/src/libcommuni/src/util/irctoken.cpp +++ /dev/null @@ -1,125 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "irctoken_p.h" -#include <QStringList> - -IRC_BEGIN_NAMESPACE - -#ifndef IRC_DOXYGEN -static QList<IrcToken> tokenize(const QString& str) -{ - int idx = -1; - int pos = 0; - QList<IrcToken> tokens; - foreach (const QString& txt, str.split(QLatin1String(" "))) { - if (!txt.isEmpty()) - tokens += IrcToken(++idx, pos, txt); - pos += txt.length() + 1; - } - return tokens; -} - -IrcTokenizer::IrcTokenizer(const QString& str) : len(str.length()), t(tokenize(str)) -{ -} - -int IrcTokenizer::count() const -{ - return t.count(); -} - -bool IrcTokenizer::isEmpty() const -{ - return t.isEmpty(); -} - -QList<IrcToken> IrcTokenizer::tokens() const -{ - return t; -} - -IrcToken IrcTokenizer::at(int index) const -{ - return t.value(index); -} - -IrcTokenizer IrcTokenizer::mid(int index) const -{ - IrcTokenizer tt; - tt.t = t.mid(index); - if (!tt.isEmpty()) { - int d = tt.t.first().position(); - tt.len = len - d; - for (int i = 0; i < tt.t.length(); ++i) { - tt.t[i].idx = i; - tt.t[i].pos -= d; - } - } - return tt; -} - -void IrcTokenizer::clear() -{ - t.clear(); -} - -void IrcTokenizer::replace(int index, const QString& text) -{ - IrcToken token = t.value(index); - if (token.isValid()) { - int d = text.length() - token.length(); - token = IrcToken(index, token.position(), text); - t.replace(index, token); - len += d; - for (int i = index + 1; i < t.length(); ++i) - t[i].pos += d; - } -} - -IrcToken IrcTokenizer::find(int pos) const -{ - IrcToken token; - foreach (const IrcToken& tk, t) { - if (tk.position() > pos) - break; - token = tk; - } - return token; -} - -QString IrcTokenizer::toString() const -{ - QString str(len, QLatin1Char(' ')); - foreach (const IrcToken& token, t) - str.replace(token.position(), token.length(), token.text()); - return str; -} -#endif // IRC_DOXYGEN - -IRC_END_NAMESPACE diff --git a/src/libcommuni/src/util/ircutil.cpp b/src/libcommuni/src/util/ircutil.cpp deleted file mode 100644 index efcb591..0000000 --- a/src/libcommuni/src/util/ircutil.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/* - Copyright (C) 2008-2014 The Communi Project - - You may use this file under the terms of BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "ircutil.h" - -IRC_BEGIN_NAMESPACE - -/*! - \file ircutil.h - \brief \#include <IrcUtil> - */ - -/*! - \namespace IrcUtil - \ingroup util - \brief Module meta-type registration. - */ - -namespace IrcUtil { - - /*! - Registers IrcUtil types to the %Qt meta-system. - - \sa IrcCore::registerMetaTypes(), IrcModel::registerMetaTypes(), qRegisterMetaType() - */ - void registerMetaTypes() - { - qRegisterMetaType<IrcCommandParser*>("IrcCommandParser*"); - qRegisterMetaType<IrcCompleter*>("IrcCompleter*"); - qRegisterMetaType<IrcLagTimer*>("IrcLagTimer*"); - qRegisterMetaType<IrcPalette*>("IrcPalette*"); - qRegisterMetaType<IrcTextFormat*>("IrcTextFormat*"); - } -} - -IRC_END_NAMESPACE diff --git a/src/libcommuni/src/util/util.pri b/src/libcommuni/src/util/util.pri deleted file mode 100644 index ad4b69f..0000000 --- a/src/libcommuni/src/util/util.pri +++ /dev/null @@ -1,39 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -DEFINES += BUILD_IRC_UTIL - -INCDIR = $$PWD/../../include/IrcUtil - -DEPENDPATH += $$PWD $$INCDIR -INCLUDEPATH += $$PWD $$INCDIR - -CONV_HEADERS += $$INCDIR/IrcCommandParser -CONV_HEADERS += $$INCDIR/IrcCompleter -CONV_HEADERS += $$INCDIR/IrcLagTimer -CONV_HEADERS += $$INCDIR/IrcPalette -CONV_HEADERS += $$INCDIR/IrcTextFormat -CONV_HEADERS += $$INCDIR/IrcUtil - -PUB_HEADERS += $$INCDIR/irccommandparser.h -PUB_HEADERS += $$INCDIR/irccompleter.h -PUB_HEADERS += $$INCDIR/irclagtimer.h -PUB_HEADERS += $$INCDIR/ircpalette.h -PUB_HEADERS += $$INCDIR/irctextformat.h -PUB_HEADERS += $$INCDIR/ircutil.h - -PRIV_HEADERS = $$INCDIR/irccommandparser_p.h -PRIV_HEADERS += $$INCDIR/irclagtimer_p.h -PRIV_HEADERS += $$INCDIR/irctoken_p.h - -HEADERS += $$PUB_HEADERS -HEADERS += $$PRIV_HEADERS - -SOURCES += $$PWD/irccommandparser.cpp -SOURCES += $$PWD/irccompleter.cpp -SOURCES += $$PWD/irclagtimer.cpp -SOURCES += $$PWD/ircpalette.cpp -SOURCES += $$PWD/irctextformat.cpp -SOURCES += $$PWD/irctoken.cpp -SOURCES += $$PWD/ircutil.cpp diff --git a/src/libcommuni/src/util/util.pro b/src/libcommuni/src/util/util.pro deleted file mode 100644 index bc55556..0000000 --- a/src/libcommuni/src/util/util.pro +++ /dev/null @@ -1,11 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -IRC_MODULE = IrcUtil -include(util.pri) -include(../module_build.pri) -include(../module_install.pri) - -IRC_MODULES = IrcCore IrcModel -include(../module_deps.pri) diff --git a/src/libcommuni/tests/auto/auto.pri b/src/libcommuni/tests/auto/auto.pri deleted file mode 100644 index 537efa0..0000000 --- a/src/libcommuni/tests/auto/auto.pri +++ /dev/null @@ -1,9 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -QT = core network testlib -CONFIG += testcase -CONFIG -= app_bundle - -include(../tests.pri) diff --git a/src/libcommuni/tests/auto/auto.pro b/src/libcommuni/tests/auto/auto.pro deleted file mode 100644 index e06d77c..0000000 --- a/src/libcommuni/tests/auto/auto.pro +++ /dev/null @@ -1,26 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -TEMPLATE = subdirs - -# IrcCore -SUBDIRS += irc -SUBDIRS += ircconnection -SUBDIRS += irccommand -SUBDIRS += ircmessage -SUBDIRS += ircnetwork - -# IrcModel -SUBDIRS += ircbuffer -SUBDIRS += ircbuffermodel -SUBDIRS += ircchannel -SUBDIRS += ircuser -SUBDIRS += ircusermodel - -# IrcUtil -SUBDIRS += irccommandparser -SUBDIRS += irccompleter -SUBDIRS += irclagtimer -SUBDIRS += ircpalette -SUBDIRS += irctextformat diff --git a/src/libcommuni/tests/auto/irc/irc.pro b/src/libcommuni/tests/auto/irc/irc.pro deleted file mode 100644 index 8270c47..0000000 --- a/src/libcommuni/tests/auto/irc/irc.pro +++ /dev/null @@ -1,7 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -SOURCES += tst_irc.cpp - -include(../auto.pri) diff --git a/src/libcommuni/tests/auto/irc/tst_irc.cpp b/src/libcommuni/tests/auto/irc/tst_irc.cpp deleted file mode 100644 index 2a39f0b..0000000 --- a/src/libcommuni/tests/auto/irc/tst_irc.cpp +++ /dev/null @@ -1,157 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This test is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -#include "irc.h" -#include <QtTest/QtTest> -#include <QtCore/QRegExp> - -class tst_Irc : public QObject -{ - Q_OBJECT - -private slots: - void testCreation(); - void testVersion(); - - void testCodeToString_data(); - void testCodeToString(); - - void testMetaObject(); - - void testPrefix_data(); - void testPrefix(); - - void testDebug(); -}; - -void tst_Irc::testCreation() -{ - Irc ircStatic; - Q_UNUSED(ircStatic); - - QScopedPointer<Irc> ircDynamic(new Irc); - Q_UNUSED(ircDynamic); -} - -void tst_Irc::testVersion() -{ - QVERIFY(!Irc::version().isEmpty()); -} - -void tst_Irc::testCodeToString_data() -{ - QTest::addColumn<int>("code"); - QTest::addColumn<QString>("str"); - - QTest::newRow("RPL_WELCOME") << 1 << QString("RPL_WELCOME"); - QTest::newRow("RPL_ISUPPORT") << 5 << QString("RPL_ISUPPORT"); - QTest::newRow("RPL_TOPIC") << 332 << QString("RPL_TOPIC"); - QTest::newRow("RPL_NAMREPLY") << 353 << QString("RPL_NAMREPLY"); - QTest::newRow("RPL_ENDOFNAMES") << 366 << QString("RPL_ENDOFNAMES"); - - QTest::newRow("ERR_NOSUCHNICK") << 401 << QString("ERR_NOSUCHNICK"); - QTest::newRow("ERR_NOSUCHCHANNEL") << 403 << QString("ERR_NOSUCHCHANNEL"); - QTest::newRow("ERR_NICKNAMEINUSE") << 433 << QString("ERR_NICKNAMEINUSE"); - QTest::newRow("ERR_OPERONLY") << 520 << QString("ERR_OPERONLY"); -} - -void tst_Irc::testCodeToString() -{ - QFETCH(int, code); - QFETCH(QString, str); - - QCOMPARE(Irc::codeToString(code), str); -} - -void tst_Irc::testMetaObject() -{ - Irc irc; - - QVERIFY(Irc::staticMetaObject.indexOfEnumerator("Code") != -1); - QVERIFY(Irc::staticMetaObject.indexOfEnumerator("Color") != -1); - QVERIFY(Irc::staticMetaObject.indexOfEnumerator("DataRole") != -1); - - QString ver; - QVERIFY(QMetaObject::invokeMethod(&irc, "version", Q_RETURN_ARG(QString, ver))); - QCOMPARE(ver, Irc::version()); - - QString str; - QVERIFY(QMetaObject::invokeMethod(&irc, "codeToString", Q_RETURN_ARG(QString, str), Q_ARG(int, Irc::RPL_ISUPPORT))); - QCOMPARE(str, Irc::codeToString(Irc::RPL_ISUPPORT)); -} - -void tst_Irc::testPrefix_data() -{ - QTest::addColumn<bool>("valid"); - QTest::addColumn<QString>("prefix"); - QTest::addColumn<QString>("expectedNick"); - QTest::addColumn<QString>("expectedIdent"); - QTest::addColumn<QString>("expectedHost"); - - QTest::newRow("null") << false << QString() << QString() << QString() << QString(); - QTest::newRow("empty") << false << QString("") << QString("") << QString("") << QString(""); - QTest::newRow("trimmed") << true << QString(" n!u@h ") << QString("n") << QString("u") << QString("h"); - QTest::newRow("n!u@h") << true << QString("n!u@h") << QString("n") << QString("u") << QString("h"); - - QTest::newRow("n@h") << true << QString("n@h") << QString("n") << QString() << QString("h"); - QTest::newRow("n!u") << true << QString("n!u") << QString("n") << QString("u") << QString(); - QTest::newRow("!u@h") << false << QString("!u@h") << QString() << QString() << QString(); - QTest::newRow("n!@h") << false << QString("n!@h") << QString() << QString() << QString(); - QTest::newRow("n!u@") << false << QString("n!u@") << QString() << QString() << QString(); - - QTest::newRow("n !u@h") << false << QString("n !u@h") << QString() << QString() << QString(); - QTest::newRow("n! u@h") << false << QString("n! u@h") << QString() << QString() << QString(); - QTest::newRow("n!u @h") << false << QString("n!u @h") << QString() << QString() << QString(); - QTest::newRow("n!u@ h") << false << QString("n!u@ h") << QString() << QString() << QString(); - QTest::newRow("n ! u @ h") << false << QString("n ! u @ h") << QString() << QString() << QString(); -} - -void tst_Irc::testPrefix() -{ - QFETCH(bool, valid); - QFETCH(QString, prefix); - QFETCH(QString, expectedNick); - QFETCH(QString, expectedIdent); - QFETCH(QString, expectedHost); - - QString actualNick = Irc::nickFromPrefix(prefix); - QString actualIdent = Irc::identFromPrefix(prefix); - QString actualHost = Irc::hostFromPrefix(prefix); - - Q_UNUSED(valid); - QCOMPARE(expectedNick, actualNick); - QCOMPARE(expectedIdent, actualIdent); - QCOMPARE(expectedHost, actualHost); -} - -void tst_Irc::testDebug() -{ - QString str; - QDebug dbg(&str); - - dbg << Irc::RPL_AWAY; - QCOMPARE(str.trimmed(), QString::fromLatin1("RPL_AWAY")); - str.clear(); - - dbg << Irc::NameRole; - QCOMPARE(str.trimmed(), QString::fromLatin1("NameRole")); - str.clear(); - - dbg << Irc::Brown; - QCOMPARE(str.trimmed(), QString::fromLatin1("Brown")); - str.clear(); - - dbg << Irc::SortByActivity; - QCOMPARE(str.trimmed(), QString::fromLatin1("SortByActivity")); - str.clear(); -} - -QTEST_MAIN(tst_Irc) - -#include "tst_irc.moc" diff --git a/src/libcommuni/tests/auto/ircbuffer/ircbuffer.pro b/src/libcommuni/tests/auto/ircbuffer/ircbuffer.pro deleted file mode 100644 index 1c0080c..0000000 --- a/src/libcommuni/tests/auto/ircbuffer/ircbuffer.pro +++ /dev/null @@ -1,7 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -SOURCES += tst_ircbuffer.cpp - -include(../auto.pri) diff --git a/src/libcommuni/tests/auto/ircbuffer/tst_ircbuffer.cpp b/src/libcommuni/tests/auto/ircbuffer/tst_ircbuffer.cpp deleted file mode 100644 index 1d124fb..0000000 --- a/src/libcommuni/tests/auto/ircbuffer/tst_ircbuffer.cpp +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This test is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -#include "ircbuffer.h" -#include "ircmessage.h" -#include <QtTest/QtTest> -#include <QtCore/QRegExp> - -class tst_IrcBuffer : public QObject -{ - Q_OBJECT - -private slots: - void testDefaults(); - void testTitleNamePrefix(); - void testSticky(); - void testPersistent(); - void testReceive(); - void testDebug(); -}; - -void tst_IrcBuffer::testDefaults() -{ - IrcBuffer buffer; - QVERIFY(buffer.title().isEmpty()); - QVERIFY(buffer.name().isEmpty()); - QVERIFY(buffer.prefix().isEmpty()); - QVERIFY(!buffer.isChannel()); - QVERIFY(!buffer.toChannel()); - QVERIFY(!buffer.connection()); - QVERIFY(!buffer.network()); - QVERIFY(!buffer.model()); - QVERIFY(!buffer.isActive()); - QVERIFY(!buffer.isSticky()); - QVERIFY(!buffer.isPersistent()); -} - -void tst_IrcBuffer::testTitleNamePrefix() -{ - IrcBuffer buffer; - - QSignalSpy titleSpy(&buffer, SIGNAL(titleChanged(QString))); - QSignalSpy nameSpy(&buffer, SIGNAL(nameChanged(QString))); - QSignalSpy prefixSpy(&buffer, SIGNAL(prefixChanged(QString))); - QVERIFY(titleSpy.isValid()); - QVERIFY(nameSpy.isValid()); - QVERIFY(prefixSpy.isValid()); - - buffer.setName("name"); - QCOMPARE(buffer.title(), QString("name")); - QCOMPARE(buffer.name(), QString("name")); - QCOMPARE(buffer.prefix(), QString()); - QCOMPARE(titleSpy.count(), 1); - QCOMPARE(titleSpy.last().first().toString(), QString("name")); - QCOMPARE(nameSpy.count(), 1); - QCOMPARE(nameSpy.last().first().toString(), QString("name")); - QCOMPARE(prefixSpy.count(), 0); - - buffer.setPrefix("prefix"); - QCOMPARE(buffer.title(), QString("prefixname")); - QCOMPARE(buffer.name(), QString("name")); - QCOMPARE(buffer.prefix(), QString("prefix")); - QCOMPARE(titleSpy.count(), 2); - QCOMPARE(titleSpy.last().first().toString(), QString("prefixname")); - QCOMPARE(nameSpy.count(), 1); - QCOMPARE(prefixSpy.count(), 1); - QCOMPARE(prefixSpy.last().first().toString(), QString("prefix")); -} - -void tst_IrcBuffer::testSticky() -{ - IrcBuffer buffer; - QVERIFY(!buffer.isSticky()); - - QSignalSpy spy(&buffer, SIGNAL(stickyChanged(bool))); - QVERIFY(spy.isValid()); - - buffer.setSticky(true); - QVERIFY(buffer.isSticky()); - QCOMPARE(spy.count(), 1); - QVERIFY(spy.last().last().toBool()); - - buffer.setSticky(false); - QVERIFY(!buffer.isSticky()); - QCOMPARE(spy.count(), 2); - QVERIFY(!spy.last().last().toBool()); -} - -void tst_IrcBuffer::testPersistent() -{ - IrcBuffer buffer; - QVERIFY(!buffer.isPersistent()); - - QSignalSpy spy(&buffer, SIGNAL(persistentChanged(bool))); - QVERIFY(spy.isValid()); - - buffer.setPersistent(true); - QVERIFY(buffer.isPersistent()); - QCOMPARE(spy.count(), 1); - QVERIFY(spy.last().last().toBool()); - - buffer.setPersistent(false); - QVERIFY(!buffer.isPersistent()); - QCOMPARE(spy.count(), 2); - QVERIFY(!spy.last().last().toBool()); -} - -void tst_IrcBuffer::testReceive() -{ - Irc::registerMetaTypes(); - - IrcBuffer buffer; - - QSignalSpy spy(&buffer, SIGNAL(messageReceived(IrcMessage*))); - QVERIFY(spy.isValid()); - - buffer.receiveMessage(0); - QCOMPARE(spy.count(), 0); - - IrcMessage msg(0); - buffer.receiveMessage(&msg); - QCOMPARE(spy.count(), 1); - QCOMPARE(spy.last().at(0).value<IrcMessage*>(), &msg); -} - -void tst_IrcBuffer::testDebug() -{ - QString str; - QDebug dbg(&str); - - dbg << static_cast<IrcBuffer*>(0); - QCOMPARE(str.trimmed(), QString::fromLatin1("IrcBuffer(0x0)")); - str.clear(); - - IrcBuffer buffer; - dbg << &buffer; - QVERIFY(QRegExp("IrcBuffer\\(0x[0-9A-Fa-f]+\\) ").exactMatch(str)); - str.clear(); - - buffer.setObjectName("obj"); - dbg << &buffer; - QVERIFY(QRegExp("IrcBuffer\\(0x[0-9A-Fa-f]+, name=obj\\) ").exactMatch(str)); - str.clear(); - - buffer.setName("buf"); - dbg << &buffer; - QVERIFY(QRegExp("IrcBuffer\\(0x[0-9A-Fa-f]+, name=obj, title=buf\\) ").exactMatch(str)); - str.clear(); -} - -QTEST_MAIN(tst_IrcBuffer) - -#include "tst_ircbuffer.moc" diff --git a/src/libcommuni/tests/auto/ircbuffermodel/ircbuffermodel.pro b/src/libcommuni/tests/auto/ircbuffermodel/ircbuffermodel.pro deleted file mode 100644 index 16cf4c9..0000000 --- a/src/libcommuni/tests/auto/ircbuffermodel/ircbuffermodel.pro +++ /dev/null @@ -1,11 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -SOURCES += tst_ircbuffermodel.cpp - -# FakeQmlBufferModel::createXxx() -*g++*|*clang*:QMAKE_CXXFLAGS_WARN_ON += -Wno-overloaded-virtual - -include(../shared/shared.pri) -include(../auto.pri) diff --git a/src/libcommuni/tests/auto/ircbuffermodel/tst_ircbuffermodel.cpp b/src/libcommuni/tests/auto/ircbuffermodel/tst_ircbuffermodel.cpp deleted file mode 100644 index 60ec958..0000000 --- a/src/libcommuni/tests/auto/ircbuffermodel/tst_ircbuffermodel.cpp +++ /dev/null @@ -1,1461 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This test is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -#include "ircbuffermodel.h" -#include "ircconnection.h" -#include "ircchannel.h" -#include "ircbuffer.h" -#include <QtTest/QtTest> -#include "tst_ircclientserver.h" -#include "tst_ircdata.h" - -class tst_IrcBufferModel : public tst_IrcClientServer -{ - Q_OBJECT - -public: - tst_IrcBufferModel(); - -private slots: - void testDefaults(); - void testBufferInit(); - void testAddRemove(); - void testSorting(); - void testClear(); - void testPersistent(); - void testPrototypes(); - void testChanges(); - void testActive(); - void testRoles(); - void testAIM(); - void testQML(); - void testWarnings(); -}; - -Q_DECLARE_METATYPE(QModelIndex) -tst_IrcBufferModel::tst_IrcBufferModel() -{ - Irc::registerMetaTypes(); - qRegisterMetaType<QModelIndex>(); - qRegisterMetaType<IrcBuffer*>("IrcBuffer*"); - qRegisterMetaType<IrcChannel*>("IrcChannel*"); - qRegisterMetaType<IrcConnection*>("IrcConnection*"); - qRegisterMetaType<QList<IrcBuffer*> >("QList<IrcBuffer*>"); - qRegisterMetaType<QList<IrcChannel*> >("QList<IrcChannel*>"); -} - -void tst_IrcBufferModel::testDefaults() -{ - IrcBufferModel model; - QCOMPARE(model.count(), 0); - QVERIFY(model.isEmpty()); - QCOMPARE(model.sortOrder(), Qt::AscendingOrder); - QCOMPARE(model.sortMethod(), Irc::SortByHand); - QVERIFY(model.channels().isEmpty()); - QCOMPARE(model.displayRole(), Irc::TitleRole); - QVERIFY(!model.isPersistent()); - QVERIFY(model.buffers().isEmpty()); - QVERIFY(!model.connection()); - QVERIFY(!model.network()); - QVERIFY(model.bufferPrototype()); - QVERIFY(model.channelPrototype()); -} - -void tst_IrcBufferModel::testBufferInit() -{ - IrcBufferModel model(connection); - model.setSortMethod(Irc::SortByTitle); - IrcBuffer* buffer1 = new IrcBuffer(&model); - buffer1->setName("1"); - model.add(buffer1); - IrcBuffer* buffer2 = new IrcBuffer(&model); - buffer2->setName("2"); - model.add(buffer2); -} - -void tst_IrcBufferModel::testAddRemove() -{ - IrcBufferModel model; - - QSignalSpy countSpy(&model, SIGNAL(countChanged(int))); - QSignalSpy emptySpy(&model, SIGNAL(emptyChanged(bool))); - QSignalSpy addedSpy(&model, SIGNAL(added(IrcBuffer*))); - QSignalSpy removedSpy(&model, SIGNAL(removed(IrcBuffer*))); - QSignalSpy aboutToBeAddedSpy(&model, SIGNAL(aboutToBeAdded(IrcBuffer*))); - QSignalSpy aboutToBeRemovedSpy(&model, SIGNAL(aboutToBeRemoved(IrcBuffer*))); - QSignalSpy buffersSpy(&model, SIGNAL(buffersChanged(QList<IrcBuffer*>))); - QSignalSpy channelsSpy(&model, SIGNAL(channelsChanged(QStringList))); - QVERIFY(countSpy.isValid()); - QVERIFY(emptySpy.isValid()); - QVERIFY(addedSpy.isValid()); - QVERIFY(removedSpy.isValid()); - QVERIFY(aboutToBeAddedSpy.isValid()); - QVERIFY(aboutToBeRemovedSpy.isValid()); - QVERIFY(buffersSpy.isValid()); - QVERIFY(channelsSpy.isValid()); - - // IrcBuffer* IrcBufferModel::add(const QString& title) - IrcBuffer* first = model.add("first"); - QCOMPARE(model.count(), 1); - QVERIFY(!model.isEmpty()); - QCOMPARE(model.get(0), first); - QCOMPARE(model.find("first"), first); - QCOMPARE(model.buffers(), QList<IrcBuffer*>() << first); - QVERIFY(model.contains("first")); - QCOMPARE(model.indexOf(first), 0); - QVERIFY(model.channels().isEmpty()); - - QCOMPARE(countSpy.count(), 1); - QCOMPARE(countSpy.last().last().toInt(), 1); - QCOMPARE(emptySpy.count(), 1); - QCOMPARE(emptySpy.last().last().toBool(), false); - QCOMPARE(aboutToBeAddedSpy.count(), 1); - QCOMPARE(aboutToBeAddedSpy.last().last().value<IrcBuffer*>(), first); - QCOMPARE(addedSpy.count(), 1); - QCOMPARE(addedSpy.last().last().value<IrcBuffer*>(), first); - QCOMPARE(buffersSpy.count(), 1); - QCOMPARE(buffersSpy.last().last().value<QList<IrcBuffer*> >(), QList<IrcBuffer*>() << first); - QCOMPARE(channelsSpy.count(), 0); - - QModelIndex firstIdx = model.index(first); - QVERIFY(firstIdx.isValid()); - QCOMPARE(firstIdx.data(Irc::NameRole).toString(), QString("first")); - QCOMPARE(firstIdx.data(Irc::TitleRole).toString(), QString("first")); - QCOMPARE(firstIdx.data(Irc::PrefixRole).toString(), QString()); - QCOMPARE(firstIdx.data(Irc::BufferRole).value<IrcBuffer*>(), first); - QVERIFY(!firstIdx.data(Irc::ChannelRole).value<IrcChannel*>()); - - // void IrcBufferModel::add(IrcBuffer* buffer) - IrcBuffer* second = new IrcBuffer(&model); - second->setName("second"); - model.add(second); - QCOMPARE(model.count(), 2); - QVERIFY(!model.isEmpty()); - QCOMPARE(model.get(1), second); - QCOMPARE(model.find("second"), second); - QCOMPARE(model.buffers(), QList<IrcBuffer*>() << first << second); - QVERIFY(model.contains("second")); - QCOMPARE(model.indexOf(second), 1); - QVERIFY(model.channels().isEmpty()); - - QCOMPARE(countSpy.count(), 2); - QCOMPARE(countSpy.last().last().toInt(), 2); - QCOMPARE(emptySpy.count(), 1); - QCOMPARE(aboutToBeAddedSpy.count(), 2); - QCOMPARE(aboutToBeAddedSpy.last().last().value<IrcBuffer*>(), second); - QCOMPARE(addedSpy.count(), 2); - QCOMPARE(addedSpy.last().last().value<IrcBuffer*>(), second); - QCOMPARE(buffersSpy.count(), 2); - QCOMPARE(buffersSpy.last().last().value<QList<IrcBuffer*> >(), QList<IrcBuffer*>() << first << second); - QCOMPARE(channelsSpy.count(), 0); - - QModelIndex secondIdx = model.index(second); - QVERIFY(secondIdx.isValid()); - QCOMPARE(secondIdx.data(Irc::NameRole).toString(), QString("second")); - QCOMPARE(secondIdx.data(Irc::TitleRole).toString(), QString("second")); - QCOMPARE(secondIdx.data(Irc::PrefixRole).toString(), QString()); - QCOMPARE(secondIdx.data(Irc::BufferRole).value<IrcBuffer*>(), second); - QVERIFY(!secondIdx.data(Irc::ChannelRole).value<IrcChannel*>()); - - // void IrcBufferModel::remove(IrcBuffer* buffer) - model.remove(second); - QCOMPARE(model.count(), 1); - QVERIFY(!model.isEmpty()); - QVERIFY(!model.find("second")); - QCOMPARE(model.buffers(), QList<IrcBuffer*>() << first); - QVERIFY(!model.contains("second")); - QVERIFY(model.channels().isEmpty()); - - QCOMPARE(countSpy.count(), 3); - QCOMPARE(countSpy.last().last().toInt(), 1); - QCOMPARE(emptySpy.count(), 1); - QCOMPARE(aboutToBeRemovedSpy.count(), 1); - QCOMPARE(removedSpy.count(), 1); - QCOMPARE(buffersSpy.count(), 3); - QCOMPARE(buffersSpy.last().last().value<QList<IrcBuffer*> >(), QList<IrcBuffer*>() << first); - QCOMPARE(channelsSpy.count(), 0); - - // void IrcBufferModel::remove(const QString& title) - model.remove("first"); - QCOMPARE(model.count(), 0); - QVERIFY(model.isEmpty()); - QVERIFY(!model.find("first")); - QVERIFY(model.buffers().isEmpty()); - QVERIFY(!model.contains("first")); - QVERIFY(model.channels().isEmpty()); - - QCOMPARE(countSpy.count(), 4); - QCOMPARE(countSpy.last().last().toInt(), 0); - QCOMPARE(emptySpy.count(), 2); - QCOMPARE(emptySpy.last().last().toBool(), true); - QCOMPARE(aboutToBeRemovedSpy.count(), 2); - QCOMPARE(removedSpy.count(), 2); - QCOMPARE(buffersSpy.count(), 4); - QCOMPARE(buffersSpy.last().last().value<QList<IrcBuffer*> >(), QList<IrcBuffer*>()); - QCOMPARE(channelsSpy.count(), 0); -} - -void tst_IrcBufferModel::testSorting() -{ - IrcBufferModel staticModel(connection); - IrcBufferModel dynamicModel(connection); - - connection->open(); - waitForOpened(); - waitForWritten(tst_IrcData::welcome()); - - IrcBuffer* b = staticModel.add("b"); - IrcBuffer* c = staticModel.add("#c"); - IrcBuffer* a = staticModel.add("#a"); - - QList<IrcBuffer*> buffers = QList<IrcBuffer*>() << b << c << a; - QCOMPARE(staticModel.buffers(), buffers); - - // IGNORE INVALID COLUMNS - staticModel.sort(-1, Qt::AscendingOrder); - QCOMPARE(staticModel.buffers(), buffers); - - staticModel.sort(1, Qt::AscendingOrder); - QCOMPARE(staticModel.buffers(), buffers); - - // STATIC - BY NAME - ASCENDING - buffers = QList<IrcBuffer*>() << a << b << c; - staticModel.setSortMethod(Irc::SortByName); - staticModel.sort(0, Qt::AscendingOrder); - QCOMPARE(staticModel.buffers(), buffers); - - // STATIC - BY NAME - DESCENDING - buffers = QList<IrcBuffer*>() << c << b << a; - staticModel.setSortMethod(Irc::SortByName); - staticModel.sort(0, Qt::DescendingOrder); - QCOMPARE(staticModel.buffers(), buffers); - - // STATIC - BY TITLE - ASCENDING - buffers = QList<IrcBuffer*>() << a << c << b; - staticModel.setSortMethod(Irc::SortByTitle); - staticModel.sort(0, Qt::AscendingOrder); - QCOMPARE(staticModel.buffers(), buffers); - - // STATIC - BY TITLE - DESCENDING - buffers = QList<IrcBuffer*>() << b << c << a; - staticModel.setSortMethod(Irc::SortByTitle); - staticModel.sort(0, Qt::DescendingOrder); - QCOMPARE(staticModel.buffers(), buffers); - - // STATIC - BY TITLE - ASCENDING & STICKY - c->setSticky(true); - buffers = QList<IrcBuffer*>() << c << a << b; - staticModel.setSortMethod(Irc::SortByTitle); - staticModel.sort(0, Qt::AscendingOrder); - QCOMPARE(staticModel.buffers(), buffers); - - // STATIC - BY TITLE - ASCENDING & 2 STICKIES - b->setSticky(true); - buffers = QList<IrcBuffer*>() << c << b << a; - staticModel.setSortMethod(Irc::SortByTitle); - staticModel.sort(0, Qt::AscendingOrder); - QCOMPARE(staticModel.buffers(), buffers); - - b = dynamicModel.add("b"); - c = dynamicModel.add("#c"); - a = dynamicModel.add("#a"); - - // DYNAMIC - BY NAME - ASCENDING - buffers = QList<IrcBuffer*>() << a << b << c; - dynamicModel.setSortMethod(Irc::SortByName); - QCOMPARE(dynamicModel.buffers(), buffers); - - // DYNAMIC - BY TITLE - ASCENDING - buffers = QList<IrcBuffer*>() << a << c << b; - dynamicModel.setSortMethod(Irc::SortByTitle); - QCOMPARE(dynamicModel.buffers(), buffers); - - dynamicModel.setSortOrder(Qt::DescendingOrder); - - // DYNAMIC - BY NAME - DESCENDING - buffers = QList<IrcBuffer*>() << c << b << a; - dynamicModel.setSortMethod(Irc::SortByName); - QCOMPARE(dynamicModel.buffers(), buffers); - - // DYNAMIC - BY TITLE - DESCENDING - buffers = QList<IrcBuffer*>() << b << c << a; - dynamicModel.setSortMethod(Irc::SortByTitle); - QCOMPARE(dynamicModel.buffers(), buffers); - - // DO NOTHING - dynamicModel.sort(Irc::SortByHand); - QCOMPARE(dynamicModel.buffers(), buffers); -} - -void tst_IrcBufferModel::testClear() -{ - IrcBufferModel model(connection); - connection->open(); - QVERIFY(waitForOpened()); - QVERIFY(waitForWritten(tst_IrcData::welcome())); - - QPointer<IrcBuffer> a = model.add("#a"); - QPointer<IrcBuffer> b = model.add("#b"); - QPointer<IrcBuffer> c = model.add("c"); - QPointer<IrcBuffer> d = model.add("d"); - - QSignalSpy countSpy(&model, SIGNAL(countChanged(int))); - QSignalSpy buffersSpy(&model, SIGNAL(buffersChanged(QList<IrcBuffer*>))); - QSignalSpy channelsSpy(&model, SIGNAL(channelsChanged(QStringList))); - QSignalSpy modelAboutToBeResetSpy(&model, SIGNAL(modelAboutToBeReset())); - QSignalSpy modelResetSpy(&model, SIGNAL(modelReset())); - - QVERIFY(countSpy.isValid()); - QVERIFY(buffersSpy.isValid()); - QVERIFY(channelsSpy.isValid()); - QVERIFY(modelAboutToBeResetSpy.isValid()); - QVERIFY(modelResetSpy.isValid()); - - b->setPersistent(true); - d->setPersistent(true); - - // #a, #b*, c, d* - model.clear(); - - QCOMPARE(model.count(), 2); - QCOMPARE(model.buffers(), QList<IrcBuffer*>() << b << d); - QCOMPARE(model.channels(), QStringList() << "#b"); - - QCOMPARE(model.get(0), b.data()); - QCOMPARE(model.get(1), d.data()); - QVERIFY(!model.get(2)); - QVERIFY(!model.find("#a")); - QVERIFY(model.find("#b")); - QVERIFY(!model.find("c")); - QVERIFY(model.find("d")); - QVERIFY(!model.contains("#a")); - QVERIFY(model.contains("#b")); - QVERIFY(!model.contains("c")); - QVERIFY(model.contains("d")); - - QVERIFY(!a); - QVERIFY(b); - QVERIFY(!c); - QVERIFY(d); - - QCOMPARE(countSpy.count(), 1); - QCOMPARE(countSpy.last().at(0).toInt(), 2); - - QCOMPARE(buffersSpy.count(), 1); - QCOMPARE(buffersSpy.last().at(0).value<QList<IrcBuffer*> >(), QList<IrcBuffer*>() << b << d); - - QCOMPARE(channelsSpy.count(), 1); - QCOMPARE(channelsSpy.last().at(0).toStringList(), QStringList() << "#b"); - - QCOMPARE(modelAboutToBeResetSpy.count(), 1); - QCOMPARE(modelResetSpy.count(), 1); - - b->setPersistent(false); - - countSpy.clear(); - buffersSpy.clear(); - channelsSpy.clear(); - modelAboutToBeResetSpy.clear(); - modelResetSpy.clear(); - - // #b, d* - model.clear(); - - QCOMPARE(model.count(), 1); - QCOMPARE(model.buffers(), QList<IrcBuffer*>() << d); - QCOMPARE(model.channels(), QStringList()); - - QCOMPARE(model.get(0), d.data()); - QVERIFY(!model.get(1)); - QVERIFY(!model.find("#b")); - QVERIFY(model.find("d")); - QVERIFY(!model.contains("#b")); - QVERIFY(model.contains("d")); - - QVERIFY(!b); - QVERIFY(d); - - QCOMPARE(countSpy.count(), 1); - QCOMPARE(countSpy.last().at(0).toInt(), 1); - - QCOMPARE(buffersSpy.count(), 1); - QCOMPARE(buffersSpy.last().at(0).value<QList<IrcBuffer*> >(), QList<IrcBuffer*>() << d); - - QCOMPARE(channelsSpy.count(), 1); - QCOMPARE(channelsSpy.last().at(0).toStringList(), QStringList()); - - QCOMPARE(modelAboutToBeResetSpy.count(), 1); - QCOMPARE(modelResetSpy.count(), 1); - - d->setPersistent(false); - - countSpy.clear(); - buffersSpy.clear(); - channelsSpy.clear(); - modelAboutToBeResetSpy.clear(); - modelResetSpy.clear(); - - // d - model.clear(); - - QCOMPARE(model.count(), 0); - QCOMPARE(model.buffers(), QList<IrcBuffer*>()); - QCOMPARE(model.channels(), QStringList()); - - QVERIFY(!model.get(0)); - QVERIFY(!model.find("d")); - QVERIFY(!model.contains("d")); - - QVERIFY(!d); - - QCOMPARE(countSpy.count(), 1); - QCOMPARE(countSpy.last().at(0).toInt(), 0); - - QCOMPARE(buffersSpy.count(), 1); - QCOMPARE(buffersSpy.last().at(0).value<QList<IrcBuffer*> >(), QList<IrcBuffer*>()); - - QCOMPARE(channelsSpy.count(), 0); - - QCOMPARE(modelAboutToBeResetSpy.count(), 1); - QCOMPARE(modelResetSpy.count(), 1); - - countSpy.clear(); - buffersSpy.clear(); - channelsSpy.clear(); - modelAboutToBeResetSpy.clear(); - modelResetSpy.clear(); - - // <empty> - model.clear(); - - QCOMPARE(countSpy.count(), 0); - QCOMPARE(buffersSpy.count(), 0); - QCOMPARE(channelsSpy.count(), 0); - QCOMPARE(modelAboutToBeResetSpy.count(), 0); - QCOMPARE(modelResetSpy.count(), 0); - - QPointer<IrcBuffer> e = model.add("e"); - QPointer<IrcBuffer> f = model.add("f"); - - e->setPersistent(true); - f->setPersistent(true); - - countSpy.clear(); - buffersSpy.clear(); - channelsSpy.clear(); - modelAboutToBeResetSpy.clear(); - modelResetSpy.clear(); - - // e*, f* - model.clear(); - - QVERIFY(e); - QVERIFY(f); - - QCOMPARE(countSpy.count(), 0); - QCOMPARE(buffersSpy.count(), 0); - QCOMPARE(channelsSpy.count(), 0); - QCOMPARE(modelAboutToBeResetSpy.count(), 0); - QCOMPARE(modelResetSpy.count(), 0); - - qDeleteAll(model.buffers()); - - QCOMPARE(model.count(), 0); - QCOMPARE(model.buffers(), QList<IrcBuffer*>()); - QCOMPARE(model.channels(), QStringList()); - - QVERIFY(!model.get(0)); - QVERIFY(!model.find("e")); - QVERIFY(!model.find("f")); - QVERIFY(!model.contains("e")); - QVERIFY(!model.contains("f")); - - QVERIFY(!e); - QVERIFY(!f); - - QCOMPARE(countSpy.count(), 2); - QCOMPARE(countSpy.at(0).at(0).toInt(), 1); - QCOMPARE(countSpy.at(1).at(0).toInt(), 0); - - QCOMPARE(buffersSpy.count(), 2); - QCOMPARE(buffersSpy.at(0).at(0).value<QList<IrcBuffer*> >().count(), 1); - QCOMPARE(buffersSpy.at(1).at(0).value<QList<IrcBuffer*> >(), QList<IrcBuffer*>()); - - QCOMPARE(channelsSpy.count(), 0); - - QCOMPARE(modelAboutToBeResetSpy.count(), 0); - QCOMPARE(modelResetSpy.count(), 0); -} - -void tst_IrcBufferModel::testPersistent() -{ - IrcBufferModel model(connection); - connection->open(); - QVERIFY(waitForOpened()); - QVERIFY(waitForWritten(tst_IrcData::welcome())); - - QVERIFY(waitForWritten(":communi!communi@hidd.en JOIN :#communi")); - QCOMPARE(model.count(), 1); - - QPointer<IrcChannel> channel = model.get(0)->toChannel(); - QVERIFY(channel); - - QVERIFY(!model.isPersistent()); - QVERIFY(!channel->isPersistent()); - QVERIFY(waitForWritten(":communi!communi@hidd.en PART :#communi")); - QVERIFY(model.isEmpty()); - QVERIFY(channel); // deleteLater()'d - QCoreApplication::sendPostedEvents(channel, QEvent::DeferredDelete); - QVERIFY(!channel); // deleteLater()'d - - QVERIFY(waitForWritten(":communi!communi@hidd.en JOIN :#communi")); - QCOMPARE(model.count(), 1); - channel = model.get(0)->toChannel(); - QVERIFY(channel); - - model.setPersistent(true); - QVERIFY(model.isPersistent()); - QVERIFY(!channel->isPersistent()); - QVERIFY(waitForWritten(":communi!communi@hidd.en PART :#communi")); - QVERIFY(channel); - QCOMPARE(model.count(), 1); - - channel->setPersistent(true); - QVERIFY(model.isPersistent()); - QVERIFY(channel->isPersistent()); - QVERIFY(waitForWritten(":communi!communi@hidd.en PART :#communi")); - QVERIFY(channel); - QCOMPARE(model.count(), 1); - - model.setPersistent(false); - QVERIFY(!model.isPersistent()); - QVERIFY(channel->isPersistent()); - QVERIFY(waitForWritten(":communi!communi@hidd.en PART :#communi")); - QVERIFY(channel); - QCOMPARE(model.count(), 1); - - channel->setPersistent(false); - QVERIFY(!model.isPersistent()); - QVERIFY(!channel->isPersistent()); - QVERIFY(waitForWritten(":communi!communi@hidd.en PART :#communi")); - QVERIFY(model.isEmpty()); - QVERIFY(channel); // deleteLater()'d - QCoreApplication::sendPostedEvents(channel, QEvent::DeferredDelete); - QVERIFY(!channel); // deleteLater()'d -} - -void tst_IrcBufferModel::testPrototypes() -{ - IrcBufferModel model; - - QSignalSpy bufferProtoSpy(&model, SIGNAL(bufferPrototypeChanged(IrcBuffer*))); - QSignalSpy channelProtoSpy(&model, SIGNAL(channelPrototypeChanged(IrcChannel*))); - QVERIFY(bufferProtoSpy.isValid()); - QVERIFY(channelProtoSpy.isValid()); - - model.setBufferPrototype(0); - QVERIFY(model.bufferPrototype()); - QCOMPARE(bufferProtoSpy.count(), 1); - - model.setChannelPrototype(0); - QVERIFY(model.channelPrototype()); - QCOMPARE(channelProtoSpy.count(), 1); - - IrcBuffer* bufferProto = new IrcBuffer(&model); - model.setBufferPrototype(bufferProto); - QCOMPARE(model.bufferPrototype(), bufferProto); - QCOMPARE(bufferProtoSpy.count(), 2); - - IrcChannel* channelProto = new IrcChannel(&model); - model.setChannelPrototype(channelProto); - QCOMPARE(model.channelPrototype(), channelProto); - QCOMPARE(channelProtoSpy.count(), 2); -} - -void tst_IrcBufferModel::testChanges() -{ - IrcBufferModel bufferModel; - - // IrcBufferModel signals - QSignalSpy countChangedSpy(&bufferModel, SIGNAL(countChanged(int))); - QSignalSpy addedSpy(&bufferModel, SIGNAL(added(IrcBuffer*))); - QSignalSpy removedSpy(&bufferModel, SIGNAL(removed(IrcBuffer*))); - QSignalSpy aboutToBeAddedSpy(&bufferModel, SIGNAL(aboutToBeAdded(IrcBuffer*))); - QSignalSpy aboutToBeRemovedSpy(&bufferModel, SIGNAL(aboutToBeRemoved(IrcBuffer*))); - QSignalSpy buffersChangedSpy(&bufferModel, SIGNAL(buffersChanged(QList<IrcBuffer*>))); - QSignalSpy channelsChangedSpy(&bufferModel, SIGNAL(channelsChanged(QStringList))); - - QVERIFY(countChangedSpy.isValid()); - QVERIFY(addedSpy.isValid()); - QVERIFY(removedSpy.isValid()); - QVERIFY(aboutToBeAddedSpy.isValid()); - QVERIFY(aboutToBeRemovedSpy.isValid()); - QVERIFY(buffersChangedSpy.isValid()); - QVERIFY(channelsChangedSpy.isValid()); - - int countChangedCount = 0; - int aboutToBeAddedCount = 0, addedCount = 0; - int aboutToBeRemovedCount = 0, removedCount = 0; - int buffersChangedCount = 0; - int channelsChangedCount = 0; - - QSignalSpy connectionChangedSpy(&bufferModel, SIGNAL(connectionChanged(IrcConnection*))); - QSignalSpy networkChangedSpy(&bufferModel, SIGNAL(networkChanged(IrcNetwork*))); - QSignalSpy messageIgnoredSpy(&bufferModel, SIGNAL(messageIgnored(IrcMessage*))); - - QVERIFY(connectionChangedSpy.isValid()); - QVERIFY(networkChangedSpy.isValid()); - QVERIFY(messageIgnoredSpy.isValid()); - - int connectionChangedCount = 0; - int networkChangedCount = 0; - int messageIgnoredCount = 0; - - // relevant QAbstractItemModel signals - QSignalSpy dataChangedSpy(&bufferModel, SIGNAL(dataChanged(QModelIndex,QModelIndex))); - QSignalSpy layoutAboutToBeChangedSpy(&bufferModel, SIGNAL(layoutAboutToBeChanged())); - QSignalSpy layoutChangedSpy(&bufferModel, SIGNAL(layoutChanged())); - QSignalSpy rowsAboutToBeInsertedSpy(&bufferModel, SIGNAL(rowsAboutToBeInserted(QModelIndex,int,int))); - QSignalSpy rowsInsertedSpy(&bufferModel, SIGNAL(rowsInserted(QModelIndex,int,int))); - QSignalSpy rowsAboutToBeRemovedSpy(&bufferModel, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int))); - QSignalSpy rowsRemovedSpy(&bufferModel, SIGNAL(rowsRemoved(QModelIndex,int,int))); - - QVERIFY(dataChangedSpy.isValid()); - QVERIFY(layoutAboutToBeChangedSpy.isValid()); - QVERIFY(layoutChangedSpy.isValid()); - QVERIFY(rowsAboutToBeInsertedSpy.isValid()); - QVERIFY(rowsInsertedSpy.isValid()); - QVERIFY(rowsAboutToBeRemovedSpy.isValid()); - QVERIFY(rowsRemovedSpy.isValid()); - - int dataChangedCount = 0; - int layoutAboutToBeChangedCount = 0, layoutChangedCount = 0; - int rowsAboutToBeInsertedCount = 0, rowsInsertedCount = 0; - int rowsAboutToBeRemovedCount = 0, rowsRemovedCount = 0; - - bufferModel.setConnection(connection); - QCOMPARE(connectionChangedSpy.count(), ++connectionChangedCount); - QCOMPARE(networkChangedSpy.count(), ++networkChangedCount); - - connection->open(); - QVERIFY(waitForOpened()); - QVERIFY(waitForWritten(tst_IrcData::welcome())); - - messageIgnoredCount = tst_IrcData::welcome().split('\n').count(); // N lines + a combined motd msg - - QCOMPARE(bufferModel.count(), 0); - QCOMPARE(messageIgnoredSpy.count(), messageIgnoredCount); - - QVERIFY(waitForWritten(":communi!communi@hidd.en JOIN :#communi")); - QCOMPARE(messageIgnoredSpy.count(), messageIgnoredCount); - - QCOMPARE(bufferModel.count(), 1); - - QPointer<IrcChannel> communi = bufferModel.get(0)->toChannel(); - QVERIFY(communi); - QCOMPARE(communi->title(), QString("#communi")); - QCOMPARE(communi->name(), QString("communi")); - QCOMPARE(communi->prefix(), QString("#")); - - int previousIndex = -1; - - QList<IrcBuffer*> buffers = QList<IrcBuffer*>() << communi; - QStringList channels = QStringList() << "#communi"; - - int nextIndex = buffers.indexOf(communi); - - QCOMPARE(bufferModel.count(), buffers.count()); - for (int i = 0; i < bufferModel.count(); ++i) { - QCOMPARE(bufferModel.get(i), buffers.at(i)); - QCOMPARE(bufferModel.index(i).data(Irc::BufferRole).value<IrcBuffer*>(), buffers.at(i)); - QCOMPARE(bufferModel.index(i).data(Irc::ChannelRole).value<IrcChannel*>(), buffers.at(i)->toChannel()); - } - QCOMPARE(bufferModel.channels(), channels); - - QCOMPARE(countChangedSpy.count(), ++countChangedCount); - QCOMPARE(countChangedSpy.last().at(0).toInt(), buffers.count()); - - QCOMPARE(aboutToBeAddedSpy.count(), ++aboutToBeAddedCount); - QCOMPARE(aboutToBeAddedSpy.last().at(0).value<IrcBuffer*>(), communi.data()); - - QCOMPARE(addedSpy.count(), ++addedCount); - QCOMPARE(addedSpy.last().at(0).value<IrcBuffer*>(), communi.data()); - - QCOMPARE(buffersChangedSpy.count(), ++buffersChangedCount); - QCOMPARE(buffersChangedSpy.last().at(0).value<QList<IrcBuffer*> >(), buffers); - - QCOMPARE(channelsChangedSpy.count(), ++channelsChangedCount); - QCOMPARE(channelsChangedSpy.last().at(0).toStringList(), channels); - - QCOMPARE(rowsAboutToBeRemovedSpy.count(), rowsAboutToBeRemovedCount); - - QCOMPARE(rowsRemovedSpy.count(), rowsRemovedCount); - - QCOMPARE(rowsAboutToBeInsertedSpy.count(), ++rowsAboutToBeInsertedCount); - QCOMPARE(rowsAboutToBeInsertedSpy.last().at(0).value<QModelIndex>(), QModelIndex()); - QCOMPARE(rowsAboutToBeInsertedSpy.last().at(1).toInt(), nextIndex); - QCOMPARE(rowsAboutToBeInsertedSpy.last().at(2).toInt(), nextIndex); - - QCOMPARE(rowsInsertedSpy.count(), ++rowsInsertedCount); - QCOMPARE(rowsInsertedSpy.last().at(0).value<QModelIndex>(), QModelIndex()); - QCOMPARE(rowsInsertedSpy.last().at(1).toInt(), nextIndex); - QCOMPARE(rowsInsertedSpy.last().at(2).toInt(), nextIndex); - - QVERIFY(waitForWritten(":ChanServ!ChanServ@services. NOTICE communi :fake...")); - QCOMPARE(messageIgnoredSpy.count(), ++messageIgnoredCount); - - QCOMPARE(bufferModel.count(), buffers.count()); - QCOMPARE(bufferModel.buffers(), buffers); - QCOMPARE(bufferModel.channels(), channels); - - QCOMPARE(countChangedSpy.count(), countChangedCount); - QCOMPARE(aboutToBeAddedSpy.count(), aboutToBeAddedCount); - QCOMPARE(addedSpy.count(), addedCount); - QCOMPARE(buffersChangedSpy.count(), buffersChangedCount); - QCOMPARE(channelsChangedSpy.count(), channelsChangedCount); - QCOMPARE(rowsAboutToBeRemovedSpy.count(), rowsAboutToBeRemovedCount); - QCOMPARE(rowsRemovedSpy.count(), rowsRemovedCount); - QCOMPARE(rowsAboutToBeInsertedSpy.count(), rowsAboutToBeInsertedCount); - QCOMPARE(rowsInsertedSpy.count(), rowsInsertedCount); - - QVERIFY(waitForWritten(":ChanServ!ChanServ@services. PRIVMSG communi :fake...")); - QCOMPARE(messageIgnoredSpy.count(), messageIgnoredCount); - - QPointer<IrcBuffer> ChanServ = bufferModel.get(1); - QVERIFY(ChanServ); - QCOMPARE(ChanServ->title(), QString("ChanServ")); - QCOMPARE(ChanServ->name(), QString("ChanServ")); - QCOMPARE(ChanServ->prefix(), QString()); - - previousIndex = -1; - - buffers = QList<IrcBuffer*>() << communi << ChanServ; - channels = QStringList() << "#communi"; - - nextIndex = buffers.indexOf(ChanServ); - - QCOMPARE(bufferModel.count(), buffers.count()); - QCOMPARE(bufferModel.buffers(), buffers); - QCOMPARE(bufferModel.channels(), channels); - - QCOMPARE(bufferModel.count(), buffers.count()); - for (int i = 0; i < bufferModel.count(); ++i) { - QCOMPARE(bufferModel.get(i), buffers.at(i)); - QCOMPARE(bufferModel.index(i).data(Irc::BufferRole).value<IrcBuffer*>(), buffers.at(i)); - QCOMPARE(bufferModel.index(i).data(Irc::ChannelRole).value<IrcChannel*>(), buffers.at(i)->toChannel()); - } - - QCOMPARE(countChangedSpy.count(), ++countChangedCount); - QCOMPARE(countChangedSpy.last().at(0).toInt(), buffers.count()); - - QCOMPARE(aboutToBeAddedSpy.count(), ++aboutToBeAddedCount); - QCOMPARE(aboutToBeAddedSpy.last().at(0).value<IrcBuffer*>(), ChanServ.data()); - - QCOMPARE(addedSpy.count(), ++addedCount); - QCOMPARE(addedSpy.last().at(0).value<IrcBuffer*>(), ChanServ.data()); - - QCOMPARE(buffersChangedSpy.count(), ++buffersChangedCount); - QCOMPARE(buffersChangedSpy.last().at(0).value<QList<IrcBuffer*> >(), buffers); - - QCOMPARE(channelsChangedSpy.count(), channelsChangedCount); - - QCOMPARE(rowsAboutToBeRemovedSpy.count(), rowsAboutToBeRemovedCount); - - QCOMPARE(rowsRemovedSpy.count(), rowsRemovedCount); - - QCOMPARE(rowsAboutToBeInsertedSpy.count(), ++rowsAboutToBeInsertedCount); - QCOMPARE(rowsAboutToBeInsertedSpy.last().at(0).value<QModelIndex>(), QModelIndex()); - QCOMPARE(rowsAboutToBeInsertedSpy.last().at(1).toInt(), nextIndex); - QCOMPARE(rowsAboutToBeInsertedSpy.last().at(2).toInt(), nextIndex); - - QCOMPARE(rowsInsertedSpy.count(), ++rowsInsertedCount); - QCOMPARE(rowsInsertedSpy.last().at(0).value<QModelIndex>(), QModelIndex()); - QCOMPARE(rowsInsertedSpy.last().at(1).toInt(), nextIndex); - QCOMPARE(rowsInsertedSpy.last().at(2).toInt(), nextIndex); - - QVERIFY(waitForWritten(":ChanServ!ChanServ@services. NOTICE communi :fake...")); - QCOMPARE(messageIgnoredSpy.count(), messageIgnoredCount); - - QCOMPARE(bufferModel.count(), buffers.count()); - QCOMPARE(bufferModel.buffers(), buffers); - QCOMPARE(bufferModel.channels(), channels); - - QCOMPARE(bufferModel.count(), buffers.count()); - for (int i = 0; i < bufferModel.count(); ++i) { - QCOMPARE(bufferModel.get(i), buffers.at(i)); - QCOMPARE(bufferModel.index(i).data(Irc::BufferRole).value<IrcBuffer*>(), buffers.at(i)); - QCOMPARE(bufferModel.index(i).data(Irc::ChannelRole).value<IrcChannel*>(), buffers.at(i)->toChannel()); - } - - QCOMPARE(countChangedSpy.count(), countChangedCount); - QCOMPARE(aboutToBeAddedSpy.count(), aboutToBeAddedCount); - QCOMPARE(addedSpy.count(), addedCount); - QCOMPARE(buffersChangedSpy.count(), buffersChangedCount); - QCOMPARE(channelsChangedSpy.count(), channelsChangedCount); - QCOMPARE(rowsAboutToBeRemovedSpy.count(), rowsAboutToBeRemovedCount); - QCOMPARE(rowsRemovedSpy.count(), rowsRemovedCount); - QCOMPARE(rowsAboutToBeInsertedSpy.count(), rowsAboutToBeInsertedCount); - QCOMPARE(rowsInsertedSpy.count(), rowsInsertedCount); - - QVERIFY(waitForWritten(":communi!communi@hidd.en JOIN :#freenode")); - QCOMPARE(messageIgnoredSpy.count(), messageIgnoredCount); - - QPointer<IrcChannel> freenode = bufferModel.get(2)->toChannel(); - QVERIFY(freenode); - QCOMPARE(freenode->title(), QString("#freenode")); - QCOMPARE(freenode->name(), QString("freenode")); - QCOMPARE(freenode->prefix(), QString("#")); - - previousIndex = -1; - - buffers = QList<IrcBuffer*>() << communi << ChanServ << freenode; - channels = QStringList() << "#communi" << "#freenode"; - - nextIndex = buffers.indexOf(freenode); - - QCOMPARE(bufferModel.count(), buffers.count()); - QCOMPARE(bufferModel.buffers(), buffers); - QCOMPARE(bufferModel.channels(), channels); - - for (int i = 0; i < bufferModel.count(); ++i) { - QCOMPARE(bufferModel.get(i), buffers.at(i)); - QCOMPARE(bufferModel.index(i).data(Irc::BufferRole).value<IrcBuffer*>(), buffers.at(i)); - QCOMPARE(bufferModel.index(i).data(Irc::ChannelRole).value<IrcChannel*>(), buffers.at(i)->toChannel()); - } - - QCOMPARE(countChangedSpy.count(), ++countChangedCount); - QCOMPARE(countChangedSpy.last().at(0).toInt(), buffers.count()); - - QCOMPARE(aboutToBeAddedSpy.count(), ++aboutToBeAddedCount); - QCOMPARE(aboutToBeAddedSpy.last().at(0).value<IrcBuffer*>(), freenode.data()); - - QCOMPARE(addedSpy.count(), ++addedCount); - QCOMPARE(addedSpy.last().at(0).value<IrcBuffer*>(), freenode.data()); - - QCOMPARE(buffersChangedSpy.count(), ++buffersChangedCount); - QCOMPARE(buffersChangedSpy.last().at(0).value<QList<IrcBuffer*> >(), buffers); - - QCOMPARE(channelsChangedSpy.count(), ++channelsChangedCount); - QCOMPARE(channelsChangedSpy.last().at(0).toStringList(), channels); - - QCOMPARE(rowsAboutToBeRemovedSpy.count(), rowsAboutToBeRemovedCount); - - QCOMPARE(rowsRemovedSpy.count(), rowsRemovedCount); - - QCOMPARE(rowsAboutToBeInsertedSpy.count(), ++rowsAboutToBeInsertedCount); - QCOMPARE(rowsAboutToBeInsertedSpy.last().at(0).value<QModelIndex>(), QModelIndex()); - QCOMPARE(rowsAboutToBeInsertedSpy.last().at(1).toInt(), nextIndex); - QCOMPARE(rowsAboutToBeInsertedSpy.last().at(2).toInt(), nextIndex); - - QCOMPARE(rowsInsertedSpy.count(), ++rowsInsertedCount); - QCOMPARE(rowsInsertedSpy.last().at(0).value<QModelIndex>(), QModelIndex()); - QCOMPARE(rowsInsertedSpy.last().at(1).toInt(), nextIndex); - QCOMPARE(rowsInsertedSpy.last().at(2).toInt(), nextIndex); - - bufferModel.setSortMethod(Irc::SortByTitle); - QCOMPARE(layoutAboutToBeChangedSpy.count(), ++layoutAboutToBeChangedCount); - QCOMPARE(layoutChangedSpy.count(), ++layoutChangedCount); - - previousIndex = -1; - - // Irc::SortByTitle - buffers = QList<IrcBuffer*>() << communi << freenode << ChanServ; - channels = QStringList() << "#communi" << "#freenode"; - - nextIndex = -1; - - QCOMPARE(bufferModel.count(), buffers.count()); - QCOMPARE(bufferModel.buffers(), buffers); - QCOMPARE(bufferModel.channels(), channels); - - for (int i = 0; i < bufferModel.count(); ++i) { - QCOMPARE(bufferModel.get(i), buffers.at(i)); - QCOMPARE(bufferModel.index(i).data(Irc::BufferRole).value<IrcBuffer*>(), buffers.at(i)); - QCOMPARE(bufferModel.index(i).data(Irc::ChannelRole).value<IrcChannel*>(), buffers.at(i)->toChannel()); - } - - bufferModel.setSortMethod(Irc::SortByName); - QCOMPARE(layoutAboutToBeChangedSpy.count(), ++layoutAboutToBeChangedCount); - QCOMPARE(layoutChangedSpy.count(), ++layoutChangedCount); - - bufferModel.setSortOrder(Qt::DescendingOrder); - QCOMPARE(layoutAboutToBeChangedSpy.count(), ++layoutAboutToBeChangedCount); - QCOMPARE(layoutChangedSpy.count(), ++layoutChangedCount); - - previousIndex = -1; - - // Irc::SortByName, Qt::DescendingOrder - buffers = QList<IrcBuffer*>() << freenode << communi << ChanServ; - channels = QStringList() << "#communi" << "#freenode"; - - nextIndex = -1; - - QCOMPARE(bufferModel.count(), buffers.count()); - QCOMPARE(bufferModel.buffers(), buffers); - QCOMPARE(bufferModel.channels(), channels); - - for (int i = 0; i < bufferModel.count(); ++i) { - QCOMPARE(bufferModel.get(i), buffers.at(i)); - QCOMPARE(bufferModel.index(i).data(Irc::BufferRole).value<IrcBuffer*>(), buffers.at(i)); - QCOMPARE(bufferModel.index(i).data(Irc::ChannelRole).value<IrcChannel*>(), buffers.at(i)->toChannel()); - } - - QVERIFY(waitForWritten(":qtassistant!qtassistant@hidd.en PRIVMSG communi :hola")); - QCOMPARE(messageIgnoredSpy.count(), messageIgnoredCount); - - QPointer<IrcBuffer> qtassistant = bufferModel.get(0); - QVERIFY(qtassistant); - QCOMPARE(qtassistant->title(), QString("qtassistant")); - QCOMPARE(qtassistant->name(), QString("qtassistant")); - QCOMPARE(qtassistant->prefix(), QString()); - - previousIndex = -1; - - // Irc::SortByName, Qt::DescendingOrder - buffers = QList<IrcBuffer*>() << qtassistant << freenode << communi << ChanServ; - channels = QStringList() << "#communi" << "#freenode"; - - nextIndex = buffers.indexOf(qtassistant); - - QCOMPARE(bufferModel.count(), buffers.count()); - QCOMPARE(bufferModel.buffers(), buffers); - QCOMPARE(bufferModel.channels(), channels); - - for (int i = 0; i < bufferModel.count(); ++i) { - QCOMPARE(bufferModel.get(i), buffers.at(i)); - QCOMPARE(bufferModel.index(i).data(Irc::BufferRole).value<IrcBuffer*>(), buffers.at(i)); - QCOMPARE(bufferModel.index(i).data(Irc::ChannelRole).value<IrcChannel*>(), buffers.at(i)->toChannel()); - } - - QCOMPARE(countChangedSpy.count(), ++countChangedCount); - QCOMPARE(countChangedSpy.last().at(0).toInt(), buffers.count()); - - QCOMPARE(aboutToBeAddedSpy.count(), ++aboutToBeAddedCount); - QCOMPARE(aboutToBeAddedSpy.last().at(0).value<IrcBuffer*>(), qtassistant.data()); - - QCOMPARE(addedSpy.count(), ++addedCount); - QCOMPARE(addedSpy.last().at(0).value<IrcBuffer*>(), qtassistant.data()); - - QCOMPARE(buffersChangedSpy.count(), ++buffersChangedCount); - QCOMPARE(buffersChangedSpy.last().at(0).value<QList<IrcBuffer*> >(), buffers); - - QCOMPARE(channelsChangedSpy.count(), channelsChangedCount); - - QCOMPARE(rowsAboutToBeRemovedSpy.count(), rowsAboutToBeRemovedCount); - - QCOMPARE(rowsRemovedSpy.count(), rowsRemovedCount); - - QCOMPARE(rowsAboutToBeInsertedSpy.count(), ++rowsAboutToBeInsertedCount); - QCOMPARE(rowsAboutToBeInsertedSpy.last().at(0).value<QModelIndex>(), QModelIndex()); - QCOMPARE(rowsAboutToBeInsertedSpy.last().at(1).toInt(), nextIndex); - QCOMPARE(rowsAboutToBeInsertedSpy.last().at(2).toInt(), nextIndex); - - QCOMPARE(rowsInsertedSpy.count(), ++rowsInsertedCount); - QCOMPARE(rowsInsertedSpy.last().at(0).value<QModelIndex>(), QModelIndex()); - QCOMPARE(rowsInsertedSpy.last().at(1).toInt(), nextIndex); - QCOMPARE(rowsInsertedSpy.last().at(2).toInt(), nextIndex); - - QSignalSpy titleChangedSpy(qtassistant, SIGNAL(titleChanged(QString))); - QSignalSpy nameChangedSpy(qtassistant, SIGNAL(nameChanged(QString))); - QSignalSpy prefixChangedSpy(qtassistant, SIGNAL(prefixChanged(QString))); - - QVERIFY(titleChangedSpy.isValid()); - QVERIFY(nameChangedSpy.isValid()); - QVERIFY(prefixChangedSpy.isValid()); - - int titleChangedCount = 0; - int nameChangedCount = 0; - int prefixChangedCount = 0; - - QVERIFY(waitForWritten(":qtassistant!qtassistant@hidd.en NICK assistant :hola")); - QCOMPARE(messageIgnoredSpy.count(), messageIgnoredCount); - - QCOMPARE(qtassistant->title(), QString("assistant")); - QCOMPARE(qtassistant->name(), QString("assistant")); - QCOMPARE(qtassistant->prefix(), QString()); - - QCOMPARE(titleChangedSpy.count(), ++titleChangedCount); - QCOMPARE(nameChangedSpy.count(), ++nameChangedCount); - QCOMPARE(prefixChangedSpy.count(), prefixChangedCount); - - previousIndex = buffers.indexOf(qtassistant); - - // Irc::SortByName, Qt::DescendingOrder - buffers = QList<IrcBuffer*>() << freenode << communi << ChanServ << qtassistant; // qtassistant=assistant - channels = QStringList() << "#communi" << "#freenode"; - - nextIndex = buffers.indexOf(qtassistant); - - QCOMPARE(bufferModel.count(), buffers.count()); - QCOMPARE(bufferModel.buffers(), buffers); - QCOMPARE(bufferModel.channels(), channels); - - for (int i = 0; i < bufferModel.count(); ++i) { - QCOMPARE(bufferModel.get(i), buffers.at(i)); - QCOMPARE(bufferModel.index(i).data(Irc::BufferRole).value<IrcBuffer*>(), buffers.at(i)); - QCOMPARE(bufferModel.index(i).data(Irc::ChannelRole).value<IrcChannel*>(), buffers.at(i)->toChannel()); - } - - QCOMPARE(countChangedSpy.count(), countChangedCount); - - QCOMPARE(aboutToBeAddedSpy.count(), aboutToBeAddedCount); - - QCOMPARE(addedSpy.count(), addedCount); - - QCOMPARE(buffersChangedSpy.count(), ++buffersChangedCount); - QCOMPARE(buffersChangedSpy.last().at(0).value<QList<IrcBuffer*> >(), buffers); - - QCOMPARE(channelsChangedSpy.count(), channelsChangedCount); - - QCOMPARE(dataChangedSpy.count(), ++dataChangedCount); - QModelIndex topLeft = dataChangedSpy.last().at(0).value<QModelIndex>(); - QModelIndex bottomRight = dataChangedSpy.last().at(0).value<QModelIndex>(); - QVERIFY(!topLeft.parent().isValid()); - QVERIFY(topLeft.isValid()); - QVERIFY(bottomRight.isValid()); - QVERIFY(topLeft == bottomRight); - QCOMPARE(topLeft.row(), previousIndex); - QCOMPARE(topLeft.column(), 0); - - QCOMPARE(rowsAboutToBeRemovedSpy.count(), ++rowsAboutToBeRemovedCount); - QCOMPARE(rowsAboutToBeRemovedSpy.last().at(0).value<QModelIndex>(), QModelIndex()); - QCOMPARE(rowsAboutToBeRemovedSpy.last().at(1).toInt(), previousIndex); - QCOMPARE(rowsAboutToBeRemovedSpy.last().at(2).toInt(), previousIndex); - - QCOMPARE(rowsRemovedSpy.count(), ++rowsRemovedCount); - QCOMPARE(rowsRemovedSpy.last().at(0).value<QModelIndex>(), QModelIndex()); - QCOMPARE(rowsRemovedSpy.last().at(1).toInt(), previousIndex); - QCOMPARE(rowsRemovedSpy.last().at(2).toInt(), previousIndex); - - QCOMPARE(rowsAboutToBeInsertedSpy.count(), ++rowsAboutToBeInsertedCount); - QCOMPARE(rowsAboutToBeInsertedSpy.last().at(0).value<QModelIndex>(), QModelIndex()); - QCOMPARE(rowsAboutToBeInsertedSpy.last().at(1).toInt(), nextIndex); - QCOMPARE(rowsAboutToBeInsertedSpy.last().at(2).toInt(), nextIndex); - - QCOMPARE(rowsInsertedSpy.count(), ++rowsInsertedCount); - QCOMPARE(rowsInsertedSpy.last().at(0).value<QModelIndex>(), QModelIndex()); - QCOMPARE(rowsInsertedSpy.last().at(1).toInt(), nextIndex); - QCOMPARE(rowsInsertedSpy.last().at(2).toInt(), nextIndex); - - QVERIFY(waitForWritten(":communi!communi@hidd.en PART #communi")); - QCOMPARE(messageIgnoredSpy.count(), messageIgnoredCount); - - QVERIFY(communi); // deleteLater()'d - - QCOMPARE(aboutToBeRemovedSpy.count(), ++aboutToBeRemovedCount); - QCOMPARE(aboutToBeRemovedSpy.last().at(0).value<IrcBuffer*>(), communi.data()); - - QCOMPARE(removedSpy.count(), ++removedCount); - QCOMPARE(removedSpy.last().at(0).value<IrcBuffer*>(), communi.data()); - - previousIndex = buffers.indexOf(communi); - - QCoreApplication::sendPostedEvents(communi, QEvent::DeferredDelete); - QVERIFY(!communi); - - // Irc::SortByName, Qt::DescendingOrder - buffers = QList<IrcBuffer*>() << freenode << ChanServ << qtassistant; // qtassistant=assistant - channels = QStringList() << "#freenode"; - - nextIndex = buffers.indexOf(communi); - - QCOMPARE(bufferModel.count(), buffers.count()); - QCOMPARE(bufferModel.buffers(), buffers); - QCOMPARE(bufferModel.channels(), channels); - - for (int i = 0; i < bufferModel.count(); ++i) { - QCOMPARE(bufferModel.get(i), buffers.at(i)); - QCOMPARE(bufferModel.index(i).data(Irc::BufferRole).value<IrcBuffer*>(), buffers.at(i)); - QCOMPARE(bufferModel.index(i).data(Irc::ChannelRole).value<IrcChannel*>(), buffers.at(i)->toChannel()); - } - - QCOMPARE(countChangedSpy.count(), ++countChangedCount); - QCOMPARE(countChangedSpy.last().at(0).toInt(), buffers.count()); - - QCOMPARE(aboutToBeAddedSpy.count(), aboutToBeAddedCount); - - QCOMPARE(addedSpy.count(), addedCount); - - QCOMPARE(buffersChangedSpy.count(), ++buffersChangedCount); - QCOMPARE(buffersChangedSpy.last().at(0).value<QList<IrcBuffer*> >(), buffers); - - QCOMPARE(channelsChangedSpy.count(), ++channelsChangedCount); - QCOMPARE(channelsChangedSpy.last().at(0).toStringList(), channels); - - QCOMPARE(dataChangedSpy.count(), dataChangedCount); - - QCOMPARE(rowsAboutToBeRemovedSpy.count(), ++rowsAboutToBeRemovedCount); - QCOMPARE(rowsAboutToBeRemovedSpy.last().at(0).value<QModelIndex>(), QModelIndex()); - QCOMPARE(rowsAboutToBeRemovedSpy.last().at(1).toInt(), previousIndex); - QCOMPARE(rowsAboutToBeRemovedSpy.last().at(2).toInt(), previousIndex); - - QCOMPARE(rowsRemovedSpy.count(), ++rowsRemovedCount); - QCOMPARE(rowsRemovedSpy.last().at(0).value<QModelIndex>(), QModelIndex()); - QCOMPARE(rowsRemovedSpy.last().at(1).toInt(), previousIndex); - QCOMPARE(rowsRemovedSpy.last().at(2).toInt(), previousIndex); - - QCOMPARE(rowsAboutToBeInsertedSpy.count(), rowsAboutToBeInsertedCount); - - QCOMPARE(rowsInsertedSpy.count(), rowsInsertedCount); - - waitForWritten(":moorcock.freenode.net 324 communi #freenode +s"); - QCOMPARE(messageIgnoredSpy.count(), messageIgnoredCount); - QCOMPARE(freenode->mode(), QString("+s")); - - QVERIFY(waitForWritten(":jpnurmi!jpnurmi@qt/jpnurmi KICK #freenode communi")); - QCOMPARE(messageIgnoredSpy.count(), messageIgnoredCount); - - QVERIFY(freenode); // deleteLater()'d - - QCOMPARE(aboutToBeRemovedSpy.count(), ++aboutToBeRemovedCount); - QCOMPARE(aboutToBeRemovedSpy.last().at(0).value<IrcBuffer*>(), freenode.data()); - - QCOMPARE(removedSpy.count(), ++removedCount); - QCOMPARE(removedSpy.last().at(0).value<IrcBuffer*>(), freenode.data()); - - previousIndex = buffers.indexOf(freenode); - - QCoreApplication::sendPostedEvents(freenode, QEvent::DeferredDelete); - QVERIFY(!freenode); - - // Irc::SortByName, Qt::DescendingOrder - buffers = QList<IrcBuffer*>() << ChanServ << qtassistant; // qtassistant=assistant - channels = QStringList(); - - nextIndex = buffers.indexOf(freenode); - - QCOMPARE(bufferModel.count(), buffers.count()); - QCOMPARE(bufferModel.buffers(), buffers); - QCOMPARE(bufferModel.channels(), channels); - - for (int i = 0; i < bufferModel.count(); ++i) { - QCOMPARE(bufferModel.get(i), buffers.at(i)); - QCOMPARE(bufferModel.index(i).data(Irc::BufferRole).value<IrcBuffer*>(), buffers.at(i)); - QCOMPARE(bufferModel.index(i).data(Irc::ChannelRole).value<IrcChannel*>(), buffers.at(i)->toChannel()); - } - - QCOMPARE(countChangedSpy.count(), ++countChangedCount); - QCOMPARE(countChangedSpy.last().at(0).toInt(), buffers.count()); - - QCOMPARE(aboutToBeAddedSpy.count(), aboutToBeAddedCount); - - QCOMPARE(addedSpy.count(), addedCount); - - QCOMPARE(buffersChangedSpy.count(), ++buffersChangedCount); - QCOMPARE(buffersChangedSpy.last().at(0).value<QList<IrcBuffer*> >(), buffers); - - QCOMPARE(channelsChangedSpy.count(), ++channelsChangedCount); - QCOMPARE(channelsChangedSpy.last().at(0).toStringList(), channels); - - QCOMPARE(dataChangedSpy.count(), dataChangedCount); - - QCOMPARE(rowsAboutToBeRemovedSpy.count(), ++rowsAboutToBeRemovedCount); - QCOMPARE(rowsAboutToBeRemovedSpy.last().at(0).value<QModelIndex>(), QModelIndex()); - QCOMPARE(rowsAboutToBeRemovedSpy.last().at(1).toInt(), previousIndex); - QCOMPARE(rowsAboutToBeRemovedSpy.last().at(2).toInt(), previousIndex); - - QCOMPARE(rowsRemovedSpy.count(), ++rowsRemovedCount); - QCOMPARE(rowsRemovedSpy.last().at(0).value<QModelIndex>(), QModelIndex()); - QCOMPARE(rowsRemovedSpy.last().at(1).toInt(), previousIndex); - QCOMPARE(rowsRemovedSpy.last().at(2).toInt(), previousIndex); - - QCOMPARE(rowsAboutToBeInsertedSpy.count(), rowsAboutToBeInsertedCount); - - QCOMPARE(rowsInsertedSpy.count(), rowsInsertedCount); - - QVERIFY(waitForWritten(":communi!communi@hidd.en PRIVMSG jpnurmi :echo")); - QCOMPARE(messageIgnoredSpy.count(), messageIgnoredCount); - - QPointer<IrcBuffer> jpnurmi = bufferModel.get(0); - QVERIFY(jpnurmi); - QCOMPARE(jpnurmi->title(), QString("jpnurmi")); - QCOMPARE(jpnurmi->name(), QString("jpnurmi")); - QCOMPARE(jpnurmi->prefix(), QString()); - - previousIndex = -1; - - // Irc::SortByName, Qt::DescendingOrder - buffers = QList<IrcBuffer*>() << jpnurmi << ChanServ << qtassistant; // qtassistant=assistant - channels = QStringList(); - - nextIndex = buffers.indexOf(jpnurmi); - - QCOMPARE(bufferModel.count(), buffers.count()); - QCOMPARE(bufferModel.buffers(), buffers); - QCOMPARE(bufferModel.channels(), channels); - - for (int i = 0; i < bufferModel.count(); ++i) { - QCOMPARE(bufferModel.get(i), buffers.at(i)); - QCOMPARE(bufferModel.index(i).data(Irc::BufferRole).value<IrcBuffer*>(), buffers.at(i)); - QCOMPARE(bufferModel.index(i).data(Irc::ChannelRole).value<IrcChannel*>(), buffers.at(i)->toChannel()); - } - - QCOMPARE(countChangedSpy.count(), ++countChangedCount); - QCOMPARE(countChangedSpy.last().at(0).toInt(), buffers.count()); - - QCOMPARE(aboutToBeAddedSpy.count(), ++aboutToBeAddedCount); - QCOMPARE(aboutToBeAddedSpy.last().at(0).value<IrcBuffer*>(), jpnurmi.data()); - - QCOMPARE(addedSpy.count(), ++addedCount); - QCOMPARE(addedSpy.last().at(0).value<IrcBuffer*>(), jpnurmi.data()); - - QCOMPARE(buffersChangedSpy.count(), ++buffersChangedCount); - QCOMPARE(buffersChangedSpy.last().at(0).value<QList<IrcBuffer*> >(), buffers); - - QCOMPARE(channelsChangedSpy.count(), channelsChangedCount); - - QCOMPARE(rowsAboutToBeRemovedSpy.count(), rowsAboutToBeRemovedCount); - - QCOMPARE(rowsRemovedSpy.count(), rowsRemovedCount); - - QCOMPARE(rowsAboutToBeInsertedSpy.count(), ++rowsAboutToBeInsertedCount); - QCOMPARE(rowsAboutToBeInsertedSpy.last().at(0).value<QModelIndex>(), QModelIndex()); - QCOMPARE(rowsAboutToBeInsertedSpy.last().at(1).toInt(), nextIndex); - QCOMPARE(rowsAboutToBeInsertedSpy.last().at(2).toInt(), nextIndex); - - QCOMPARE(rowsInsertedSpy.count(), ++rowsInsertedCount); - QCOMPARE(rowsInsertedSpy.last().at(0).value<QModelIndex>(), QModelIndex()); - QCOMPARE(rowsInsertedSpy.last().at(1).toInt(), nextIndex); - QCOMPARE(rowsInsertedSpy.last().at(2).toInt(), nextIndex); - - QVERIFY(waitForWritten(":communi!communi@hidd.en QUIT :bye")); - QCOMPARE(messageIgnoredSpy.count(), messageIgnoredCount); - - serverSocket->close(); - QVERIFY(clientSocket->waitForDisconnected(100)); - QVERIFY(!connection->isConnected()); - QVERIFY(!connection->isActive()); - - QCOMPARE(bufferModel.count(), buffers.count()); - QCOMPARE(bufferModel.buffers(), buffers); - QCOMPARE(bufferModel.channels(), channels); - - for (int i = 0; i < bufferModel.count(); ++i) { - QCOMPARE(bufferModel.get(i), buffers.at(i)); - QCOMPARE(bufferModel.index(i).data(Irc::BufferRole).value<IrcBuffer*>(), buffers.at(i)); - QCOMPARE(bufferModel.index(i).data(Irc::ChannelRole).value<IrcChannel*>(), buffers.at(i)->toChannel()); - QVERIFY(!buffers.at(i)->isActive()); - } - - QCOMPARE(countChangedSpy.count(), countChangedCount); - QCOMPARE(aboutToBeAddedSpy.count(), aboutToBeAddedCount); - QCOMPARE(addedSpy.count(), addedCount); - QCOMPARE(buffersChangedSpy.count(), buffersChangedCount); - QCOMPARE(channelsChangedSpy.count(), channelsChangedCount); - QCOMPARE(dataChangedSpy.count(), dataChangedCount); - QCOMPARE(rowsAboutToBeRemovedSpy.count(), rowsAboutToBeRemovedCount); - QCOMPARE(rowsRemovedSpy.count(), rowsRemovedCount); - QCOMPARE(rowsAboutToBeInsertedSpy.count(), rowsAboutToBeInsertedCount); - QCOMPARE(rowsInsertedSpy.count(), rowsInsertedCount); -} - -void tst_IrcBufferModel::testActive() -{ - IrcBufferModel bufferModel; - bufferModel.setConnection(connection); - - connection->open(); - QVERIFY(waitForOpened()); - QVERIFY(waitForWritten(tst_IrcData::welcome())); - - QVERIFY(waitForWritten(":communi!communi@hidd.en JOIN :#communi")); - - IrcChannel* channel = bufferModel.get(0)->toChannel(); - IrcBuffer* query = bufferModel.add("qtassistant"); - - channel->setPersistent(true); - query->setPersistent(true); - - QSignalSpy channelActiveSpy(channel, SIGNAL(activeChanged(bool))); - QSignalSpy queryActiveSpy(query, SIGNAL(activeChanged(bool))); - QVERIFY(channelActiveSpy.isValid()); - QVERIFY(queryActiveSpy.isValid()); - int channelActiveCount = 0; - int queryActiveCount = 0; - - QVERIFY(channel->isActive()); - QVERIFY(query->isActive()); - - connection->close(); - - QVERIFY(!channel->isActive()); - QVERIFY(!query->isActive()); - - QCOMPARE(channelActiveSpy.count(), ++channelActiveCount); - QCOMPARE(queryActiveSpy.count(), ++queryActiveCount); - - connection->open(); - QVERIFY(waitForOpened()); - QVERIFY(waitForWritten(tst_IrcData::welcome())); - - QVERIFY(!channel->isActive()); - QVERIFY(query->isActive()); - - QCOMPARE(channelActiveSpy.count(), channelActiveCount); - QCOMPARE(queryActiveSpy.count(), ++queryActiveCount); - - QVERIFY(waitForWritten(":communi!communi@hidd.en JOIN :#communi")); - - QVERIFY(channel->isActive()); - QVERIFY(query->isActive()); - - QCOMPARE(channelActiveSpy.count(), ++channelActiveCount); - QCOMPARE(queryActiveSpy.count(), queryActiveCount); - - QVERIFY(waitForWritten(":communi!communi@hidd.en PART #communi")); - - QVERIFY(!channel->isActive()); - QVERIFY(query->isActive()); - - QCOMPARE(channelActiveSpy.count(), ++channelActiveCount); - QCOMPARE(queryActiveSpy.count(), queryActiveCount); - - connection->close(); - - QVERIFY(!channel->isActive()); - QVERIFY(!query->isActive()); - - QCOMPARE(channelActiveSpy.count(), channelActiveCount); - QCOMPARE(queryActiveSpy.count(), ++queryActiveCount); -} - -void tst_IrcBufferModel::testRoles() -{ - IrcBufferModel model; - QHash<int, QByteArray> roles = model.roleNames(); - QCOMPARE(roles.take(Qt::DisplayRole), QByteArray("display")); - QCOMPARE(roles.take(Irc::BufferRole), QByteArray("buffer")); - QCOMPARE(roles.take(Irc::ChannelRole), QByteArray("channel")); - QCOMPARE(roles.take(Irc::NameRole), QByteArray("name")); - QCOMPARE(roles.take(Irc::PrefixRole), QByteArray("prefix")); - QCOMPARE(roles.take(Irc::TitleRole), QByteArray("title")); - QVERIFY(roles.isEmpty()); -} - -void tst_IrcBufferModel::testAIM() -{ - IrcBufferModel bufferModel(connection); - IrcBuffer* a = bufferModel.add("#a"); - IrcBuffer* b = bufferModel.add("#b"); - IrcBuffer* c = bufferModel.add("c"); - IrcBuffer* o = 0; - - QAbstractItemModel* aim = &bufferModel; - QModelIndex ai = aim->index(0, 0); - QModelIndex bi = aim->index(1, 0); - QModelIndex ci = aim->index(2, 0); - QModelIndex oi = aim->index(100, 100); - - QVERIFY(ai.isValid()); - QVERIFY(bi.isValid()); - QVERIFY(ci.isValid()); - QVERIFY(!oi.isValid()); - - QCOMPARE(aim->rowCount(QModelIndex()), 3); - QCOMPARE(aim->rowCount(ai), 0); - - QCOMPARE(aim->columnCount(QModelIndex()), 1); - QCOMPARE(aim->columnCount(ai), 0); - - QCOMPARE(bufferModel.index(a), ai); - QCOMPARE(bufferModel.index(b), bi); - QCOMPARE(bufferModel.index(c), ci); - QVERIFY(!bufferModel.index(o).isValid()); - - QCOMPARE(bufferModel.buffer(ai), a); - QCOMPARE(bufferModel.buffer(bi), b); - QCOMPARE(bufferModel.buffer(ci), c); - QVERIFY(!bufferModel.buffer(oi)); - - bufferModel.setDisplayRole(Irc::TitleRole); - QCOMPARE(aim->data(ai, Qt::DisplayRole).toString(), a->title()); - QCOMPARE(aim->data(bi, Qt::DisplayRole).toString(), b->title()); - QCOMPARE(aim->data(ci, Qt::DisplayRole).toString(), c->title()); - QVERIFY(aim->data(oi, Qt::DisplayRole).toString().isEmpty()); - - bufferModel.setDisplayRole(Irc::BufferRole); - QCOMPARE(aim->data(ai, Qt::DisplayRole).value<IrcBuffer*>(), a); - QCOMPARE(aim->data(bi, Qt::DisplayRole).value<IrcBuffer*>(), b); - QCOMPARE(aim->data(ci, Qt::DisplayRole).value<IrcBuffer*>(), c); - QVERIFY(!aim->data(oi, Qt::DisplayRole).value<IrcBuffer*>()); - - QCOMPARE(aim->data(ai, Irc::BufferRole).value<IrcBuffer*>(), a); - QCOMPARE(aim->data(bi, Irc::BufferRole).value<IrcBuffer*>(), b); - QCOMPARE(aim->data(ci, Irc::BufferRole).value<IrcBuffer*>(), c); - QVERIFY(!aim->data(oi, Irc::BufferRole).value<IrcBuffer*>()); - - QCOMPARE(aim->data(ai, Irc::ChannelRole).value<IrcChannel*>(), a->toChannel()); - QCOMPARE(aim->data(bi, Irc::ChannelRole).value<IrcChannel*>(), b->toChannel()); - QCOMPARE(aim->data(ci, Irc::ChannelRole).value<IrcChannel*>(), c->toChannel()); - QVERIFY(!aim->data(oi, Irc::ChannelRole).value<IrcChannel*>()); - - QCOMPARE(aim->data(ai, Irc::TitleRole).toString(), a->title()); - QCOMPARE(aim->data(bi, Irc::TitleRole).toString(), b->title()); - QCOMPARE(aim->data(ci, Irc::TitleRole).toString(), c->title()); - QVERIFY(aim->data(oi, Irc::TitleRole).toString().isEmpty()); - - QCOMPARE(aim->data(ai, Irc::NameRole).toString(), a->name()); - QCOMPARE(aim->data(bi, Irc::NameRole).toString(), b->name()); - QCOMPARE(aim->data(ci, Irc::NameRole).toString(), c->name()); - QVERIFY(aim->data(oi, Irc::NameRole).toString().isEmpty()); - - QVERIFY(aim->data(ai, Irc::PrefixRole).toString().isEmpty()); - QVERIFY(aim->data(bi, Irc::PrefixRole).toString().isEmpty()); - QVERIFY(aim->data(ci, Irc::PrefixRole).toString().isEmpty()); - QVERIFY(aim->data(oi, Irc::PrefixRole).toString().isEmpty()); -} - -class FakeQmlBufferModel : public IrcBufferModel -{ - Q_OBJECT - friend class tst_IrcBufferModel; - -public slots: - // -Wno-overloaded-virtual - QVariant createBuffer(const QVariant& title) - { - IrcBuffer* buffer = IrcBufferModel::createBuffer(title.toString()); - buffer->setObjectName("QML buffer"); - return QVariant::fromValue(buffer); - } - QVariant createChannel(const QVariant& title) - { - IrcChannel* channel = IrcBufferModel::createChannel(title.toString()); - channel->setObjectName("QML channel"); - return QVariant::fromValue(channel); - } -}; - -void tst_IrcBufferModel::testQML() -{ - FakeQmlBufferModel model; - model.setConnection(connection); - - connection->open(); - QVERIFY(waitForOpened()); - QVERIFY(waitForWritten(tst_IrcData::welcome())); - - QCOMPARE(model.add("buffer")->objectName(), QString("QML buffer")); - QCOMPARE(model.add("#channel")->objectName(), QString("QML channel")); -} - -void tst_IrcBufferModel::testWarnings() -{ - IrcBufferModel model(connection); - model.setConnection(connection); - - QTest::ignoreMessage(QtCriticalMsg, "IrcBufferModel::setConnection(): changing the connection on the fly is not supported."); - - IrcConnection another; - model.setConnection(&another); -} - -QTEST_MAIN(tst_IrcBufferModel) - -#include "tst_ircbuffermodel.moc" diff --git a/src/libcommuni/tests/auto/ircchannel/ircchannel.pro b/src/libcommuni/tests/auto/ircchannel/ircchannel.pro deleted file mode 100644 index 8f9b87b..0000000 --- a/src/libcommuni/tests/auto/ircchannel/ircchannel.pro +++ /dev/null @@ -1,7 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -SOURCES += tst_ircchannel.cpp - -include(../auto.pri) diff --git a/src/libcommuni/tests/auto/ircchannel/tst_ircchannel.cpp b/src/libcommuni/tests/auto/ircchannel/tst_ircchannel.cpp deleted file mode 100644 index 54fdf31..0000000 --- a/src/libcommuni/tests/auto/ircchannel/tst_ircchannel.cpp +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This test is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -#include "ircchannel.h" -#include <QtTest/QtTest> -#include <QtCore/QRegExp> - -class tst_IrcChannel : public QObject -{ - Q_OBJECT - -private slots: - void testDefaults(); - void testSignals(); - void testDebug(); -}; - -void tst_IrcChannel::testDefaults() -{ - IrcChannel channel; - QVERIFY(channel.title().isEmpty()); - QVERIFY(channel.name().isEmpty()); - QVERIFY(channel.prefix().isEmpty()); - QVERIFY(channel.isChannel()); - QVERIFY(channel.toChannel()); - QVERIFY(!channel.connection()); - QVERIFY(!channel.network()); - QVERIFY(!channel.model()); - QVERIFY(!channel.isActive()); - QVERIFY(!channel.isSticky()); - QVERIFY(!channel.isPersistent()); - QVERIFY(channel.mode().isEmpty()); - QVERIFY(channel.topic().isEmpty()); -} - -void tst_IrcChannel::testSignals() -{ - IrcChannel channel; - QSignalSpy modeSpy(&channel, SIGNAL(modeChanged(QString))); - QSignalSpy topicSpy(&channel, SIGNAL(topicChanged(QString))); - QVERIFY(modeSpy.isValid()); - QVERIFY(topicSpy.isValid()); -} - -void tst_IrcChannel::testDebug() -{ - QString str; - QDebug dbg(&str); - - dbg << static_cast<IrcChannel*>(0); - QCOMPARE(str.trimmed(), QString::fromLatin1("IrcChannel(0x0)")); - str.clear(); - - IrcChannel channel; - dbg << &channel; - QVERIFY(QRegExp("IrcChannel\\(0x[0-9A-Fa-f]+\\) ").exactMatch(str)); - str.clear(); - - channel.setObjectName("obj"); - dbg << &channel; - QVERIFY(QRegExp("IrcChannel\\(0x[0-9A-Fa-f]+, name=obj\\) ").exactMatch(str)); - str.clear(); - - channel.setPrefix("#"); - channel.setName("communi"); - dbg << &channel; - QVERIFY(QRegExp("IrcChannel\\(0x[0-9A-Fa-f]+, name=obj, title=#communi\\) ").exactMatch(str)); - str.clear(); -} - -QTEST_MAIN(tst_IrcChannel) - -#include "tst_ircchannel.moc" diff --git a/src/libcommuni/tests/auto/irccommand/irccommand.pro b/src/libcommuni/tests/auto/irccommand/irccommand.pro deleted file mode 100644 index 50a631e..0000000 --- a/src/libcommuni/tests/auto/irccommand/irccommand.pro +++ /dev/null @@ -1,7 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -SOURCES += tst_irccommand.cpp - -include(../auto.pri) diff --git a/src/libcommuni/tests/auto/irccommand/tst_irccommand.cpp b/src/libcommuni/tests/auto/irccommand/tst_irccommand.cpp deleted file mode 100644 index 563cacc..0000000 --- a/src/libcommuni/tests/auto/irccommand/tst_irccommand.cpp +++ /dev/null @@ -1,529 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This test is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -#include "irccommand.h" -#include "ircmessage.h" -#include "ircconnection.h" -#include <QtTest/QtTest> -#include <QtCore/QRegExp> -#include <QtCore/QTextCodec> -#include <QtCore/QScopedPointer> - -class tst_IrcCommand : public QObject -{ - Q_OBJECT - -private slots: - void testDefaults(); - - void testEncoding_data(); - void testEncoding(); - - void testConversion(); - - void testAdmin(); - void testAway(); - void testCapability(); - void testCtcpAction(); - void testCtcpReply(); - void testCtcpRequest(); - void testInfo(); - void testInvite(); - void testJoin(); - void testKick(); - void testKnock(); - void testList(); - void testMessage(); - void testMode(); - void testMotd(); - void testNames(); - void testNick(); - void testNotice(); - void testPart(); - void testPing(); - void testPong(); - void testQuit(); - void testQuote(); - void testStats(); - void testTime(); - void testTopic(); - void testTrace(); - void testUsers(); - void testVersion(); - void testWho(); - void testWhois(); - void testWhowas(); - - void testDebug(); -}; - -void tst_IrcCommand::testDefaults() -{ - IrcCommand cmd; - QVERIFY(cmd.parameters().isEmpty()); - QCOMPARE(cmd.type(), IrcCommand::Custom); - QCOMPARE(cmd.encoding(), QByteArray("UTF-8")); - - QTest::ignoreMessage(QtWarningMsg, "Reimplement IrcCommand::toString() for IrcCommand::Custom"); - QVERIFY(cmd.toString().isEmpty()); -} - -void tst_IrcCommand::testEncoding_data() -{ - QTest::addColumn<QByteArray>("encoding"); - QTest::addColumn<QByteArray>("actual"); - QTest::addColumn<bool>("supported"); - - QTest::newRow("null") << QByteArray() << QByteArray("UTF-8") << false; - QTest::newRow("empty") << QByteArray("") << QByteArray("UTF-8") << false; - QTest::newRow("space") << QByteArray(" ") << QByteArray("UTF-8") << false; - QTest::newRow("invalid") << QByteArray("invalid") << QByteArray("UTF-8") << false; - foreach (const QByteArray& codec, QTextCodec::availableCodecs()) - QTest::newRow(codec) << codec << codec << true; -} - -void tst_IrcCommand::testEncoding() -{ - QFETCH(QByteArray, encoding); - QFETCH(QByteArray, actual); - QFETCH(bool, supported); - - if (!supported) - QTest::ignoreMessage(QtWarningMsg, "IrcCommand::setEncoding(): unsupported encoding \"" + encoding + "\" "); - - IrcCommand cmd; - cmd.setEncoding(encoding); - QCOMPARE(cmd.encoding(), actual); -} - -void tst_IrcCommand::testConversion() -{ - QScopedPointer<IrcCommand> cmd(IrcCommand::createMessage("target", "foo bar")); - QVERIFY(cmd.data()); - QCOMPARE(cmd->type(), IrcCommand::Message); - - IrcConnection conn; - QScopedPointer<IrcMessage> msg(cmd->toMessage("prefix", &conn)); - QVERIFY(msg.data()); - - QCOMPARE(msg->type(), IrcMessage::Private); - QCOMPARE(msg->connection(), &conn); - QCOMPARE(msg->prefix(), QString("prefix")); - QCOMPARE(msg->property("target").toString(), QString("target")); - QCOMPARE(msg->property("content").toString(), QString("foo bar")); -} - -void tst_IrcCommand::testAdmin() -{ - QScopedPointer<IrcCommand> cmd(IrcCommand::createAdmin("server")); - QVERIFY(cmd.data()); - - QCOMPARE(cmd->type(), IrcCommand::Admin); - QVERIFY(cmd->toString().contains(QRegExp("\\bADMIN\\b"))); - QVERIFY(cmd->toString().contains(QRegExp("\\bserver\\b"))); -} - -void tst_IrcCommand::testAway() -{ - QScopedPointer<IrcCommand> cmd(IrcCommand::createAway("reason")); - QVERIFY(cmd.data()); - - QCOMPARE(cmd->type(), IrcCommand::Away); - QVERIFY(cmd->toString().contains(QRegExp("\\bAWAY\\b"))); - QVERIFY(cmd->toString().contains(QRegExp("\\breason\\b"))); -} - -void tst_IrcCommand::testCapability() -{ - QScopedPointer<IrcCommand> cmd1(IrcCommand::createCapability("sub", QString("cap"))); - QVERIFY(cmd1.data()); - - QCOMPARE(cmd1->type(), IrcCommand::Capability); - QVERIFY(cmd1->toString().contains(QRegExp("\\bCAP\\b"))); - QVERIFY(cmd1->toString().contains(QRegExp("\\bsub\\b"))); - QVERIFY(cmd1->toString().contains(QRegExp("\\bcap\\b"))); - - QScopedPointer<IrcCommand> cmd2(IrcCommand::createCapability("sub", QStringList() << "cap1" << "cap2")); - QVERIFY(cmd2.data()); - - QCOMPARE(cmd2->type(), IrcCommand::Capability); - QVERIFY(cmd2->toString().contains(QRegExp("\\bCAP\\b"))); - QVERIFY(cmd2->toString().contains(QRegExp("\\bsub\\b"))); - QVERIFY(cmd2->toString().contains(QRegExp("\\bcap1\\b"))); - QVERIFY(cmd2->toString().contains(QRegExp("\\bcap2\\b"))); -} - -void tst_IrcCommand::testCtcpAction() -{ - QScopedPointer<IrcCommand> cmd(IrcCommand::createCtcpAction("tgt", "act")); - QVERIFY(cmd.data()); - - QCOMPARE(cmd->type(), IrcCommand::CtcpAction); - QVERIFY(cmd->toString().contains(QRegExp("\\bPRIVMSG\\b"))); - QVERIFY(cmd->toString().contains(QRegExp("\\btgt\\b"))); - QVERIFY(cmd->toString().contains(QRegExp("\\bact\\b"))); - QCOMPARE(cmd->toString().count("\01"), 2); -} - -void tst_IrcCommand::testCtcpReply() -{ - QScopedPointer<IrcCommand> cmd(IrcCommand::createCtcpReply("tgt", "rpl")); - QVERIFY(cmd.data()); - - QCOMPARE(cmd->type(), IrcCommand::CtcpReply); - QVERIFY(cmd->toString().contains(QRegExp("\\bNOTICE\\b"))); - QVERIFY(cmd->toString().contains(QRegExp("\\btgt\\b"))); - QVERIFY(cmd->toString().contains(QRegExp("\\brpl\\b"))); - QCOMPARE(cmd->toString().count("\01"), 2); -} - -void tst_IrcCommand::testCtcpRequest() -{ - QScopedPointer<IrcCommand> cmd(IrcCommand::createCtcpRequest("tgt", "req")); - QVERIFY(cmd.data()); - - QCOMPARE(cmd->type(), IrcCommand::CtcpRequest); - QVERIFY(cmd->toString().contains(QRegExp("\\bPRIVMSG\\b"))); - QVERIFY(cmd->toString().contains(QRegExp("\\btgt\\b"))); - QVERIFY(cmd->toString().contains(QRegExp("\\breq\\b"))); - QCOMPARE(cmd->toString().count("\01"), 2); -} - -void tst_IrcCommand::testInfo() -{ - QScopedPointer<IrcCommand> cmd(IrcCommand::createInfo("server")); - QVERIFY(cmd.data()); - - QCOMPARE(cmd->type(), IrcCommand::Info); - QVERIFY(cmd->toString().contains(QRegExp("\\bINFO\\b"))); - QVERIFY(cmd->toString().contains(QRegExp("\\bserver\\b"))); -} - -void tst_IrcCommand::testInvite() -{ - QScopedPointer<IrcCommand> cmd(IrcCommand::createInvite("usr", "chan")); - QVERIFY(cmd.data()); - - QCOMPARE(cmd->type(), IrcCommand::Invite); - QVERIFY(cmd->toString().contains(QRegExp("\\bINVITE\\b"))); - QVERIFY(cmd->toString().contains(QRegExp("\\busr\\b"))); - QVERIFY(cmd->toString().contains(QRegExp("\\bchan\\b"))); -} - -void tst_IrcCommand::testJoin() -{ - QScopedPointer<IrcCommand> cmd1(IrcCommand::createJoin("chan")); - QVERIFY(cmd1.data()); - - QCOMPARE(cmd1->type(), IrcCommand::Join); - QVERIFY(cmd1->toString().contains(QRegExp("\\bJOIN\\b"))); - QVERIFY(cmd1->toString().contains(QRegExp("\\bchan\\b"))); - - QScopedPointer<IrcCommand> cmd2(IrcCommand::createJoin(QStringList() << "chan1" << "chan2")); - QVERIFY(cmd2.data()); - - QCOMPARE(cmd2->type(), IrcCommand::Join); - QVERIFY(cmd2->toString().contains(QRegExp("\\bJOIN\\b"))); - QVERIFY(cmd2->toString().contains(QRegExp("\\bchan1\\b"))); - QVERIFY(cmd2->toString().contains(QRegExp("\\bchan2\\b"))); -} - -void tst_IrcCommand::testKick() -{ - QScopedPointer<IrcCommand> cmd(IrcCommand::createKick("chan", "usr")); - QVERIFY(cmd.data()); - - QCOMPARE(cmd->type(), IrcCommand::Kick); - QVERIFY(cmd->toString().contains(QRegExp("\\bKICK\\b"))); - QVERIFY(cmd->toString().contains(QRegExp("\\bchan\\b"))); - QVERIFY(cmd->toString().contains(QRegExp("\\busr\\b"))); -} - -void tst_IrcCommand::testKnock() -{ - QScopedPointer<IrcCommand> cmd(IrcCommand::createKnock("chan")); - QVERIFY(cmd.data()); - - QCOMPARE(cmd->type(), IrcCommand::Knock); - QVERIFY(cmd->toString().contains(QRegExp("\\bKNOCK\\b"))); - QVERIFY(cmd->toString().contains(QRegExp("\\bchan\\b"))); -} - -void tst_IrcCommand::testList() -{ - QScopedPointer<IrcCommand> cmd(IrcCommand::createList(QStringList() << "chan1" << "chan2", "server")); - QVERIFY(cmd.data()); - - QCOMPARE(cmd->type(), IrcCommand::List); - QVERIFY(cmd->toString().contains(QRegExp("\\bLIST\\b"))); - QVERIFY(cmd->toString().contains(QRegExp("\\bchan1\\b"))); - QVERIFY(cmd->toString().contains(QRegExp("\\bchan2\\b"))); - QVERIFY(cmd->toString().contains(QRegExp("\\bserver\\b"))); -} - -void tst_IrcCommand::testMessage() -{ - QScopedPointer<IrcCommand> cmd(IrcCommand::createMessage("tgt", "msg")); - QVERIFY(cmd.data()); - - QCOMPARE(cmd->type(), IrcCommand::Message); - QVERIFY(cmd->toString().contains(QRegExp("\\bPRIVMSG\\b"))); - QVERIFY(cmd->toString().contains(QRegExp("\\btgt\\b"))); - QVERIFY(cmd->toString().contains(QRegExp("\\bmsg\\b"))); -} - -void tst_IrcCommand::testMode() -{ - QScopedPointer<IrcCommand> cmd(IrcCommand::createMode("tgt", "mode")); - QVERIFY(cmd.data()); - - QCOMPARE(cmd->type(), IrcCommand::Mode); - QVERIFY(cmd->toString().contains(QRegExp("\\bMODE\\b"))); - QVERIFY(cmd->toString().contains(QRegExp("\\btgt\\b"))); - QVERIFY(cmd->toString().contains(QRegExp("\\bmode\\b"))); -} - -void tst_IrcCommand::testMotd() -{ - QScopedPointer<IrcCommand> cmd(IrcCommand::createMotd("server")); - QVERIFY(cmd.data()); - - QCOMPARE(cmd->type(), IrcCommand::Motd); - QVERIFY(cmd->toString().contains(QRegExp("\\bMOTD\\b"))); - QVERIFY(cmd->toString().contains(QRegExp("\\bserver\\b"))); -} - -void tst_IrcCommand::testNames() -{ - QScopedPointer<IrcCommand> cmd1(IrcCommand::createNames("chan")); - QVERIFY(cmd1.data()); - - QCOMPARE(cmd1->type(), IrcCommand::Names); - QVERIFY(cmd1->toString().contains(QRegExp("\\bNAMES\\b"))); - QVERIFY(cmd1->toString().contains(QRegExp("\\bchan\\b"))); - - QScopedPointer<IrcCommand> cmd2(IrcCommand::createNames(QStringList() << "chan1" << "chan2")); - QVERIFY(cmd2.data()); - - QCOMPARE(cmd2->type(), IrcCommand::Names); - QVERIFY(cmd2->toString().contains(QRegExp("\\bNAMES\\b"))); - QVERIFY(cmd2->toString().contains(QRegExp("\\bchan1\\b"))); - QVERIFY(cmd2->toString().contains(QRegExp("\\bchan2\\b"))); -} - -void tst_IrcCommand::testNick() -{ - QScopedPointer<IrcCommand> cmd(IrcCommand::createNick("nick")); - QVERIFY(cmd.data()); - - QCOMPARE(cmd->type(), IrcCommand::Nick); - QVERIFY(cmd->toString().contains(QRegExp("\\bNICK\\b"))); - QVERIFY(cmd->toString().contains(QRegExp("\\bnick\\b"))); -} - -void tst_IrcCommand::testNotice() -{ - QScopedPointer<IrcCommand> cmd(IrcCommand::createNotice("tgt", "msg")); - QVERIFY(cmd.data()); - - QCOMPARE(cmd->type(), IrcCommand::Notice); - QVERIFY(cmd->toString().contains(QRegExp("\\bNOTICE\\b"))); - QVERIFY(cmd->toString().contains(QRegExp("\\btgt\\b"))); - QVERIFY(cmd->toString().contains(QRegExp("\\bmsg\\b"))); -} - -void tst_IrcCommand::testPart() -{ - QScopedPointer<IrcCommand> cmd1(IrcCommand::createPart("chan")); - QVERIFY(cmd1.data()); - - QCOMPARE(cmd1->type(), IrcCommand::Part); - QVERIFY(cmd1->toString().contains(QRegExp("\\bPART\\b"))); - QVERIFY(cmd1->toString().contains(QRegExp("\\bchan\\b"))); - - QScopedPointer<IrcCommand> cmd2(IrcCommand::createPart(QStringList() << "chan1" << "chan2")); - QVERIFY(cmd2.data()); - - QCOMPARE(cmd2->type(), IrcCommand::Part); - QVERIFY(cmd2->toString().contains(QRegExp("\\bPART\\b"))); - QVERIFY(cmd2->toString().contains(QRegExp("\\bchan1\\b"))); - QVERIFY(cmd2->toString().contains(QRegExp("\\bchan2\\b"))); -} - -void tst_IrcCommand::testPing() -{ - QScopedPointer<IrcCommand> cmd(IrcCommand::createPing("arg")); - QVERIFY(cmd.data()); - - QCOMPARE(cmd->type(), IrcCommand::Ping); - QVERIFY(cmd->toString().contains(QRegExp("\\bPING\\b"))); - QVERIFY(cmd->toString().contains(QRegExp("\\barg\\b"))); -} - -void tst_IrcCommand::testPong() -{ - QScopedPointer<IrcCommand> cmd(IrcCommand::createPong("arg")); - QVERIFY(cmd.data()); - - QCOMPARE(cmd->type(), IrcCommand::Pong); - QVERIFY(cmd->toString().contains(QRegExp("\\bPONG\\b"))); - QVERIFY(cmd->toString().contains(QRegExp("\\barg\\b"))); -} - -void tst_IrcCommand::testQuit() -{ - QScopedPointer<IrcCommand> cmd(IrcCommand::createQuit("reason")); - QVERIFY(cmd.data()); - - QCOMPARE(cmd->type(), IrcCommand::Quit); - QVERIFY(cmd->toString().contains(QRegExp("\\bQUIT\\b"))); - QVERIFY(cmd->toString().contains(QRegExp("\\breason\\b"))); -} - -void tst_IrcCommand::testQuote() -{ - QScopedPointer<IrcCommand> cmd1(IrcCommand::createQuote("CUSTOM")); - QVERIFY(cmd1.data()); - - QCOMPARE(cmd1->type(), IrcCommand::Quote); - QVERIFY(cmd1->toString().contains(QRegExp("\\bCUSTOM\\b"))); - - QScopedPointer<IrcCommand> cmd2(IrcCommand::createQuote(QStringList() << "FOO" << "BAR")); - QVERIFY(cmd2.data()); - - QCOMPARE(cmd2->type(), IrcCommand::Quote); - QVERIFY(cmd2->toString().contains(QRegExp("\\bFOO\\b"))); - QVERIFY(cmd2->toString().contains(QRegExp("\\bBAR\\b"))); -} - -void tst_IrcCommand::testStats() -{ - QScopedPointer<IrcCommand> cmd(IrcCommand::createStats("query", "server")); - QVERIFY(cmd.data()); - - QCOMPARE(cmd->type(), IrcCommand::Stats); - QVERIFY(cmd->toString().contains(QRegExp("\\bSTATS\\b"))); - QVERIFY(cmd->toString().contains(QRegExp("\\bquery\\b"))); - QVERIFY(cmd->toString().contains(QRegExp("\\bserver\\b"))); -} - -void tst_IrcCommand::testTime() -{ - QScopedPointer<IrcCommand> cmd(IrcCommand::createTime("server")); - QVERIFY(cmd.data()); - - QCOMPARE(cmd->type(), IrcCommand::Time); - QVERIFY(cmd->toString().contains(QRegExp("\\bTIME\\b"))); - QVERIFY(cmd->toString().contains(QRegExp("\\bserver\\b"))); -} - -void tst_IrcCommand::testTopic() -{ - QScopedPointer<IrcCommand> cmd(IrcCommand::createTopic("chan", "topic")); - QVERIFY(cmd.data()); - - QCOMPARE(cmd->type(), IrcCommand::Topic); - QVERIFY(cmd->toString().contains(QRegExp("\\bTOPIC\\b"))); - QVERIFY(cmd->toString().contains(QRegExp("\\bchan\\b"))); - QVERIFY(cmd->toString().contains(QRegExp("\\btopic\\b"))); -} - -void tst_IrcCommand::testTrace() -{ - QScopedPointer<IrcCommand> cmd(IrcCommand::createTrace("target")); - QVERIFY(cmd.data()); - - QCOMPARE(cmd->type(), IrcCommand::Trace); - QVERIFY(cmd->toString().contains(QRegExp("\\bTRACE\\b"))); - QVERIFY(cmd->toString().contains(QRegExp("\\btarget\\b"))); -} - -void tst_IrcCommand::testUsers() -{ - QScopedPointer<IrcCommand> cmd(IrcCommand::createUsers("server")); - QVERIFY(cmd.data()); - - QCOMPARE(cmd->type(), IrcCommand::Users); - QVERIFY(cmd->toString().contains(QRegExp("\\bUSERS\\b"))); - QVERIFY(cmd->toString().contains(QRegExp("\\bserver\\b"))); -} - -void tst_IrcCommand::testVersion() -{ - QScopedPointer<IrcCommand> cmd(IrcCommand::createVersion("user")); - QVERIFY(cmd.data()); - - QCOMPARE(cmd->type(), IrcCommand::Version); - QVERIFY(cmd->toString().contains(QRegExp("\\bVERSION\\b"))); - QVERIFY(cmd->toString().contains(QRegExp("\\buser\\b"))); -} - -void tst_IrcCommand::testWho() -{ - QScopedPointer<IrcCommand> cmd(IrcCommand::createWho("mask")); - QVERIFY(cmd.data()); - - QCOMPARE(cmd->type(), IrcCommand::Who); - QVERIFY(cmd->toString().contains(QRegExp("\\bWHO\\b"))); - QVERIFY(cmd->toString().contains(QRegExp("\\bmask\\b"))); -} - -void tst_IrcCommand::testWhois() -{ - QScopedPointer<IrcCommand> cmd(IrcCommand::createWhois("mask")); - QVERIFY(cmd.data()); - - QCOMPARE(cmd->type(), IrcCommand::Whois); - QVERIFY(cmd->toString().contains(QRegExp("\\bWHOIS\\b"))); - QVERIFY(cmd->toString().contains(QRegExp("\\bmask\\b"))); -} - -void tst_IrcCommand::testWhowas() -{ - QScopedPointer<IrcCommand> cmd(IrcCommand::createWhowas("mask")); - QVERIFY(cmd.data()); - - QCOMPARE(cmd->type(), IrcCommand::Whowas); - QVERIFY(cmd->toString().contains(QRegExp("\\bWHOWAS\\b"))); - QVERIFY(cmd->toString().contains(QRegExp("\\bmask\\b"))); -} - -void tst_IrcCommand::testDebug() -{ - QString str; - QDebug dbg(&str); - - dbg << static_cast<IrcCommand*>(0); - QCOMPARE(str.trimmed(), QString::fromLatin1("IrcCommand(0x0)")); - str.clear(); - - IrcCommand command; - QTest::ignoreMessage(QtWarningMsg, "Reimplement IrcCommand::toString() for IrcCommand::Custom"); - dbg << &command; - QVERIFY(QRegExp("IrcCommand\\(0x[0-9A-Fa-f]+, type=Custom\\) ").exactMatch(str)); - str.clear(); - - command.setType(IrcCommand::Quit); - dbg << &command; - QVERIFY(QRegExp("IrcCommand\\(0x[0-9A-Fa-f]+, type=Quit, \"QUIT :\"\\) ").exactMatch(str)); - str.clear(); - - command.setObjectName("foo"); - dbg << &command; - QVERIFY(QRegExp("IrcCommand\\(0x[0-9A-Fa-f]+, name=foo, type=Quit, \"QUIT :\"\\) ").exactMatch(str)); - str.clear(); - - dbg << IrcCommand::Join; - QCOMPARE(str.trimmed(), QString::fromLatin1("Join")); - str.clear(); -} - -QTEST_MAIN(tst_IrcCommand) - -#include "tst_irccommand.moc" diff --git a/src/libcommuni/tests/auto/irccommandparser/irccommandparser.pro b/src/libcommuni/tests/auto/irccommandparser/irccommandparser.pro deleted file mode 100644 index 2fe0bc1..0000000 --- a/src/libcommuni/tests/auto/irccommandparser/irccommandparser.pro +++ /dev/null @@ -1,7 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -SOURCES += tst_irccommandparser.cpp - -include(../auto.pri) diff --git a/src/libcommuni/tests/auto/irccommandparser/tst_irccommandparser.cpp b/src/libcommuni/tests/auto/irccommandparser/tst_irccommandparser.cpp deleted file mode 100644 index 6476f28..0000000 --- a/src/libcommuni/tests/auto/irccommandparser/tst_irccommandparser.cpp +++ /dev/null @@ -1,442 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This test is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -#include "irccommandparser.h" -#include <QtTest/QtTest> - -class tst_IrcCommandParser : public QObject -{ - Q_OBJECT - -private slots: - void testParse_data(); - void testParse(); - void testTriggers(); - void testTarget(); - void testChannels(); - void testCommands(); - void testClear(); - void testReset(); - void testAddRemove(); - void testSyntax_data(); - void testSyntax(); - void testTolerancy(); - void testCustom(); - void testWhitespace(); -}; - -void tst_IrcCommandParser::testParse_data() -{ - QTest::addColumn<QString>("target"); - QTest::addColumn<QString>("input"); - QTest::addColumn<QString>("output"); - - QTest::newRow("msg") << QString("#communi") << QString("Hello all!") << QString("PRIVMSG #communi :Hello all!"); - QTest::newRow("//msg") << QString("#communi") << QString("//msg test") << QString("PRIVMSG #communi :/msg test"); - QTest::newRow("/ /msg") << QString("#communi") << QString("/ /msg test") << QString("PRIVMSG #communi :/msg test"); - - QTest::newRow("join1") << QString("#communi") << QString("/JOIN") << QString(); - QTest::newRow("join2") << QString("#communi") << QString("/JOIN #chan") << QString("JOIN #chan"); - QTest::newRow("join3") << QString("#communi") << QString("/JOIN #chan secret") << QString("JOIN #chan secret"); - QTest::newRow("join4") << QString("#communi") << QString("/JOIN #chan too secret") << QString(); - - QTest::newRow("part1") << QString("#communi") << QString("/PART") << QString("PART #communi"); - QTest::newRow("part2") << QString("#communi") << QString("/PART #communi") << QString("PART #communi"); - QTest::newRow("part3") << QString("#communi") << QString("/PART #not-exist") << QString("PART #communi :#not-exist"); - QTest::newRow("part4") << QString("#communi") << QString("/PART hasta la vista") << QString("PART #communi :hasta la vista"); - QTest::newRow("part5") << QString("#communi") << QString("/PART #chan hasta la vista") << QString("PART #communi :#chan hasta la vista"); - - QTest::newRow("kick1") << QString("#communi") << QString("/KICK") << QString(); - QTest::newRow("kick2") << QString("#communi") << QString("/KICK #communi") << QString(); - QTest::newRow("kick3") << QString("#communi") << QString("/KICK jpnurmi") << QString("KICK #communi jpnurmi"); - QTest::newRow("kick4") << QString("jpnurmi") << QString("/KICK jpnurmi") << QString(); - QTest::newRow("kick5") << QString("#communi") << QString("/KICK #communi jpnurmi") << QString("KICK #communi jpnurmi"); - QTest::newRow("kick6") << QString("jpnurmi") << QString("/KICK jpnurmi jpnurmi") << QString(); - QTest::newRow("kick7") << QString("#communi") << QString("/KICK #communi jpnurmi hasta la vista") << QString("KICK #communi jpnurmi :hasta la vista"); - QTest::newRow("kick8") << QString("jpnurmi") << QString("/KICK jpnurmi jpnurmi hasta la vista") << QString(); - QTest::newRow("kick9") << QString("#communi") << QString("/KICK jpnurmi hasta la vista") << QString("KICK #communi jpnurmi :hasta la vista"); - - QTest::newRow("me1") << QString("jpnurmi") << QString("/ME") << QString(); - QTest::newRow("me2") << QString("#communi") << QString("/ME loves communi") << QString("PRIVMSG #communi :\1ACTION loves communi\1"); - QTest::newRow("me3") << QString("jpnurmi") << QString("/ME loves communi") << QString("PRIVMSG jpnurmi :\1ACTION loves communi\1"); - - QTest::newRow("action1") << QString("jpnurmi") << QString("/ACTION") << QString(); - QTest::newRow("action2") << QString("#communi") << QString("/ACTION #communi loves communi") << QString("PRIVMSG #communi :\1ACTION loves communi\1"); - QTest::newRow("action3") << QString("jpnurmi") << QString("/ACTION jpnurmi loves communi") << QString("PRIVMSG jpnurmi :\1ACTION loves communi\1"); - QTest::newRow("action4") << QString("jpnurmi") << QString("/ACTION #communi loves communi") << QString("PRIVMSG #communi :\1ACTION loves communi\1"); -} - -void tst_IrcCommandParser::testParse() -{ - QFETCH(QString, target); - QFETCH(QString, input); - QFETCH(QString, output); - - IrcCommandParser parser; - parser.setTolerant(true); - parser.setTriggers(QStringList("/")); - QCOMPARE(parser.triggers(), QStringList("/")); - - parser.addCommand(IrcCommand::Join, "JOIN <#channel> (<key>)"); - parser.addCommand(IrcCommand::Part, "PART (<#channel>) (<message...>)"); - parser.addCommand(IrcCommand::Kick, "KICK (<#channel>) <nick> (<reason...>)"); - parser.addCommand(IrcCommand::CtcpAction, "ME [target] <message...>"); - parser.addCommand(IrcCommand::CtcpAction, "ACTION <target> <message...>"); - - parser.setTarget(target); - parser.setChannels(QStringList() << "#freenode" << "#communi"); - - IrcCommand* cmd = parser.parse(input); - QCOMPARE(cmd ? cmd->toString() : QString(), output); -} - -void tst_IrcCommandParser::testTriggers() -{ - IrcCommandParser parser; - parser.setTriggers(QStringList("/")); - parser.addCommand(IrcCommand::Join, "JOIN #channel"); - parser.setTarget("#target"); - - QSignalSpy triggerSpy(&parser, SIGNAL(triggersChanged(QStringList))); - QVERIFY(triggerSpy.isValid()); - - parser.setTriggers(QStringList("!")); - QCOMPARE(parser.triggers(), QStringList("!")); - QCOMPARE(triggerSpy.count(), 1); - QCOMPARE(triggerSpy.last().at(0).toStringList(), QStringList("!")); - - IrcCommand* cmd = parser.parse("!join #communi"); - QVERIFY(cmd); - QCOMPARE(cmd->type(), IrcCommand::Join); - QCOMPARE(cmd->toString(), QString("JOIN #communi")); - delete cmd; - - parser.setTriggers(QStringList()); - QCOMPARE(parser.triggers(), QStringList()); - QCOMPARE(triggerSpy.count(), 2); - QCOMPARE(triggerSpy.last().at(0).toStringList(), QStringList()); - - cmd = parser.parse("!join #communi"); - QVERIFY(!cmd); - - parser.setTolerant(true); - cmd = parser.parse("!join #communi"); - QCOMPARE(cmd->type(), IrcCommand::Message); - QCOMPARE(cmd->toString(), QString("PRIVMSG #target :!join #communi")); - delete cmd; - - QVERIFY(!parser.parse("")); -} - -void tst_IrcCommandParser::testTarget() -{ - IrcCommandParser parser; - QVERIFY(parser.target().isEmpty()); - - QSignalSpy targetSpy(&parser, SIGNAL(targetChanged(QString))); - QVERIFY(targetSpy.isValid()); - - parser.setTarget("#tgt"); - QCOMPARE(parser.target(), QString("#tgt")); - QCOMPARE(targetSpy.count(), 1); - QCOMPARE(targetSpy.last().at(0).toString(), QString("#tgt")); - - parser.setTarget("#tgt"); - QCOMPARE(targetSpy.count(), 1); - - parser.setTarget(QString()); - QCOMPARE(parser.target(), QString()); - QCOMPARE(targetSpy.count(), 2); - QCOMPARE(targetSpy.last().at(0).toString(), QString()); -} - -void tst_IrcCommandParser::testChannels() -{ - IrcCommandParser parser; - QVERIFY(parser.channels().isEmpty()); - - QSignalSpy channelSpy(&parser, SIGNAL(channelsChanged(QStringList))); - QVERIFY(channelSpy.isValid()); - - parser.setChannels(QStringList() << "#foo" << "#bar"); - QCOMPARE(parser.channels(), QStringList() << "#foo" << "#bar"); - QCOMPARE(channelSpy.count(), 1); - QCOMPARE(channelSpy.last().at(0).toStringList(), QStringList() << "#foo" << "#bar"); - - parser.setChannels(QStringList() << "#foo" << "#bar"); - QCOMPARE(parser.channels(), QStringList() << "#foo" << "#bar"); - QCOMPARE(channelSpy.count(), 1); - - parser.setChannels(QStringList()); - QCOMPARE(parser.channels(), QStringList()); - QCOMPARE(channelSpy.count(), 2); - QCOMPARE(channelSpy.last().at(0).toStringList(), QStringList()); -} - -void tst_IrcCommandParser::testCommands() -{ - IrcCommandParser parser; - - QSignalSpy commandSpy(&parser, SIGNAL(commandsChanged(QStringList))); - QVERIFY(commandSpy.isValid()); - - parser.addCommand(IrcCommand::Join, "JOIN <#channel> (<key>)"); - parser.addCommand(IrcCommand::Part, "PART (<#channel>) (<message...>)"); - parser.addCommand(IrcCommand::Kick, "KICK (<#channel>) <nick> (<reason...>)"); - parser.addCommand(IrcCommand::CtcpAction, "ME [target] <message...>"); - parser.addCommand(IrcCommand::CtcpAction, "ACTION <target> <message...>"); - - QCOMPARE(parser.commands().count(), 5); - QCOMPARE(parser.commands(), QStringList() << "ACTION" << "JOIN" << "KICK" << "ME" << "PART"); - - QCOMPARE(commandSpy.count(), 5); - QCOMPARE(commandSpy.at(0).at(0).toStringList(), QStringList() << "JOIN"); - QCOMPARE(commandSpy.at(1).at(0).toStringList(), QStringList() << "JOIN" << "PART"); - QCOMPARE(commandSpy.at(2).at(0).toStringList(), QStringList() << "JOIN" << "KICK" << "PART"); - QCOMPARE(commandSpy.at(3).at(0).toStringList(), QStringList() << "JOIN" << "KICK" << "ME" << "PART"); - QCOMPARE(commandSpy.at(4).at(0).toStringList(), QStringList() << "ACTION" << "JOIN" << "KICK" << "ME" << "PART"); -} - -void tst_IrcCommandParser::testClear() -{ - IrcCommandParser parser; - parser.addCommand(IrcCommand::Join, "JOIN <#channel> (<key>)"); - parser.addCommand(IrcCommand::Part, "PART (<#channel>) (<message...>)"); - parser.addCommand(IrcCommand::Kick, "KICK (<#channel>) <nick> (<reason...>)"); - parser.addCommand(IrcCommand::CtcpAction, "ME [target] <message...>"); - parser.addCommand(IrcCommand::CtcpAction, "ACTION <target> <message...>"); - QCOMPARE(parser.commands().count(), 5); - - QSignalSpy commandSpy(&parser, SIGNAL(commandsChanged(QStringList))); - QVERIFY(commandSpy.isValid()); - - parser.clear(); - QVERIFY(parser.commands().isEmpty()); - QCOMPARE(commandSpy.count(), 1); - QCOMPARE(commandSpy.last().at(0).toStringList(), QStringList()); - - parser.clear(); - QVERIFY(parser.commands().isEmpty()); - QCOMPARE(commandSpy.count(), 1); -} - -void tst_IrcCommandParser::testReset() -{ - IrcCommandParser parser; - - QSignalSpy targetSpy(&parser, SIGNAL(targetChanged(QString))); - QVERIFY(targetSpy.isValid()); - - QSignalSpy channelSpy(&parser, SIGNAL(channelsChanged(QStringList))); - QVERIFY(channelSpy.isValid()); - - parser.setTarget("#tgt"); - QCOMPARE(targetSpy.count(), 1); - QCOMPARE(targetSpy.last().at(0).toString(), QString("#tgt")); - - parser.setChannels(QStringList() << "#foo" << "#bar"); - QCOMPARE(channelSpy.count(), 1); - QCOMPARE(channelSpy.last().at(0).toStringList(), QStringList() << "#foo" << "#bar"); - - parser.reset(); - - QCOMPARE(targetSpy.count(), 2); - QCOMPARE(targetSpy.last().at(0).toString(), QString()); - - QCOMPARE(channelSpy.count(), 2); - QCOMPARE(channelSpy.last().at(0).toStringList(), QStringList()); - - parser.reset(); - QCOMPARE(targetSpy.count(), 2); - QCOMPARE(channelSpy.count(), 2); -} - -void tst_IrcCommandParser::testAddRemove() -{ - IrcCommandParser parser; - QVERIFY(parser.commands().isEmpty()); - - QSignalSpy commandSpy(&parser, SIGNAL(commandsChanged(QStringList))); - QVERIFY(commandSpy.isValid()); - - parser.addCommand(IrcCommand::Join, "join <#channel> (<key>)"); - QCOMPARE(parser.commands(), QStringList() << "JOIN"); - QCOMPARE(commandSpy.count(), 1); - QCOMPARE(commandSpy.last().at(0).toStringList(), QStringList() << "JOIN"); - - parser.addCommand(IrcCommand::Join, "join <overload>"); - QCOMPARE(parser.commands(), QStringList() << "JOIN"); - QCOMPARE(commandSpy.count(), 1); - QCOMPARE(commandSpy.last().at(0).toStringList(), QStringList() << "JOIN"); - - parser.addCommand(IrcCommand::Part, "Part (<#channel>) (<message...>)"); - QCOMPARE(parser.commands(), QStringList() << "JOIN" << "PART"); - QCOMPARE(commandSpy.count(), 2); - QCOMPARE(commandSpy.last().at(0).toStringList(), QStringList() << "JOIN" << "PART"); - - parser.addCommand(IrcCommand::Part, "PART <overload>"); - QCOMPARE(parser.commands(), QStringList() << "JOIN" << "PART"); - QCOMPARE(commandSpy.count(), 2); - QCOMPARE(commandSpy.last().at(0).toStringList(), QStringList() << "JOIN" << "PART"); - - parser.removeCommand(IrcCommand::Join); - QCOMPARE(parser.commands(), QStringList() << "PART"); - QCOMPARE(commandSpy.count(), 3); - QCOMPARE(commandSpy.last().at(0).toStringList(), QStringList() << "PART"); - - parser.removeCommand(IrcCommand::Part, "PART <overload>"); - QCOMPARE(parser.commands(), QStringList() << "PART"); - QCOMPARE(commandSpy.count(), 3); - QCOMPARE(commandSpy.last().at(0).toStringList(), QStringList() << "PART"); - - parser.removeCommand(IrcCommand::Part, "Part (<#channel>) (<message...>)"); - QCOMPARE(parser.commands(), QStringList()); - QCOMPARE(commandSpy.count(), 4); - QCOMPARE(commandSpy.last().at(0).toStringList(), QStringList()); - QVERIFY(parser.commands().isEmpty()); -} - -void tst_IrcCommandParser::testSyntax_data() -{ - QTest::addColumn<QString>("command"); - QTest::addColumn<QString>("syntax"); - QTest::addColumn<uint>("details"); - QTest::addColumn<QString>("expected"); - - QTest::newRow("full") - << QString("foo") - << QString("FOO [param] <#chan> (<arg>) (<rest...>)") - << uint(IrcCommandParser::Full) - << QString("FOO [param] <#chan> (<arg>) (<rest...>)"); - - QTest::newRow("no target") - << QString("fOO") - << QString("FOO [param] <#chan> (<arg>) (<rest...>)") - << uint(IrcCommandParser::NoTarget) - << QString("FOO <#chan> (<arg>) (<rest...>)"); - - QTest::newRow("no ellipsis") - << QString("fOO") - << QString("FOO [param] <#chan> (<arg>) (<rest...>)") - << uint(IrcCommandParser::NoEllipsis) - << QString("FOO [param] <#chan> (<arg>) (<rest>)"); - - QTest::newRow("no prefix") - << QString("fOO") - << QString("FOO [param] <#chan> (<arg>) (<rest...>)") - << uint(IrcCommandParser::NoPrefix) - << QString("FOO [param] <chan> (<arg>) (<rest...>)"); - - QTest::newRow("no parentheses") - << QString("Foo") - << QString("FOO [param] <#chan> (<arg>) (<rest...>)") - << uint(IrcCommandParser::NoParentheses) - << QString("FOO [param] <#chan> <arg> <rest...>"); - - QTest::newRow("no brackets") - << QString("FOO") - << QString("FOO [param] <#chan> (<arg>) (<rest...>)") - << uint(IrcCommandParser::NoBrackets) - << QString("FOO param <#chan> (<arg>) (<rest...>)"); - - QTest::newRow("no angles") - << QString("FOO") - << QString("FOO [param] <#chan> (<arg>) (<rest...>)") - << uint(IrcCommandParser::NoAngles) - << QString("FOO [param] #chan (arg) (rest...)"); - - QTest::newRow("visual") - << QString("FOO") - << QString("FOO [param] <#chan> (<arg>) (<rest...>)") - << uint(IrcCommandParser::Visual) - << QString("FOO <chan> (<arg>) (<rest>)"); -} - -void tst_IrcCommandParser::testSyntax() -{ - QFETCH(QString, command); - QFETCH(QString, syntax); - QFETCH(uint, details); - QFETCH(QString, expected); - - IrcCommandParser parser; - parser.addCommand(IrcCommand::Custom, syntax); - QString actual = parser.syntax(command, IrcCommandParser::Details(details)); - QCOMPARE(actual, expected); -} - -void tst_IrcCommandParser::testTolerancy() -{ - IrcCommandParser parser; - parser.setTriggers(QStringList("/")); - QVERIFY(!parser.isTolerant()); - - IrcCommand* cmd = parser.parse("/NS help"); - QVERIFY(!cmd); - - QSignalSpy tolerancySpy(&parser, SIGNAL(tolerancyChanged(bool))); - QVERIFY(tolerancySpy.isValid()); - - parser.setTolerant(true); - QVERIFY(parser.isTolerant()); - QCOMPARE(tolerancySpy.count(), 1); - QCOMPARE(tolerancySpy.last().at(0).toBool(), true); - - parser.setTolerant(true); - QVERIFY(parser.isTolerant()); - QCOMPARE(tolerancySpy.count(), 1); - - cmd = parser.parse("/NS help"); - QVERIFY(cmd); - QCOMPARE(cmd->type(), IrcCommand::Quote); - QCOMPARE(cmd->toString(), QString("NS help")); - - parser.setTolerant(false); - QVERIFY(!parser.isTolerant()); - QCOMPARE(tolerancySpy.count(), 2); - QCOMPARE(tolerancySpy.last().at(0).toBool(), false); -} - -void tst_IrcCommandParser::testCustom() -{ - IrcCommandParser parser; - parser.setTriggers(QStringList("/")); - - parser.addCommand(IrcCommand::Custom, "Hello <a> <b> <c>"); - QCOMPARE(parser.commands(), QStringList() << "HELLO"); - QCOMPARE(parser.syntax("HELLO"), QString("HELLO <a> <b> <c>")); - - QVERIFY(!parser.parse("/hello")); - QVERIFY(!parser.parse("/hello foo")); - QVERIFY(!parser.parse("/hello foo bar")); - QVERIFY(!parser.parse("/hello foo bar foo baz")); - - IrcCommand* cmd = parser.parse("/hello foo bar baz"); - QVERIFY(cmd); - QCOMPARE(cmd->type(), IrcCommand::Custom); - QCOMPARE(cmd->parameters(), QStringList() << "HELLO" << "foo" << "bar" << "baz"); - delete cmd; -} - -void tst_IrcCommandParser::testWhitespace() -{ - IrcCommandParser parser; - parser.setTriggers(QStringList("/")); - parser.addCommand(IrcCommand::Custom, "TEST <arg...>"); - - IrcCommand* cmd = parser.parse("/test foo bar baz"); - QVERIFY(cmd); - QCOMPARE(cmd->type(), IrcCommand::Custom); - QCOMPARE(cmd->parameters(), QStringList() << "TEST" << "foo bar baz"); - delete cmd; -} - -QTEST_MAIN(tst_IrcCommandParser) - -#include "tst_irccommandparser.moc" diff --git a/src/libcommuni/tests/auto/irccompleter/irccompleter.pro b/src/libcommuni/tests/auto/irccompleter/irccompleter.pro deleted file mode 100644 index 5d8306a..0000000 --- a/src/libcommuni/tests/auto/irccompleter/irccompleter.pro +++ /dev/null @@ -1,8 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -SOURCES += tst_irccompleter.cpp - -include(../shared/shared.pri) -include(../auto.pri) diff --git a/src/libcommuni/tests/auto/irccompleter/tst_irccompleter.cpp b/src/libcommuni/tests/auto/irccompleter/tst_irccompleter.cpp deleted file mode 100644 index 5eef644..0000000 --- a/src/libcommuni/tests/auto/irccompleter/tst_irccompleter.cpp +++ /dev/null @@ -1,237 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This test is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -#include "irccompleter.h" -#include "ircbuffermodel.h" -#include "irccommandparser.h" -#include "ircchannel.h" -#include "ircbuffer.h" -#include <QtTest/QtTest> -#include "tst_ircclientserver.h" -#include "tst_ircdata.h" - -class tst_IrcCompleter : public tst_IrcClientServer -{ - Q_OBJECT - -private slots: - void testSuffix(); - void testBuffer(); - void testParser(); - - void testCompletion_data(); - void testCompletion(); - - void testReset(); -}; - -void tst_IrcCompleter::testSuffix() -{ - IrcCompleter completer; - QCOMPARE(completer.suffix(), QString(":")); - QCOMPARE(completer.property("suffix").toString(), QString(":")); - - QSignalSpy spy(&completer, SIGNAL(suffixChanged(QString))); - QVERIFY(spy.isValid()); - - completer.setSuffix(","); - QCOMPARE(completer.suffix(), QString(",")); - QCOMPARE(completer.property("suffix").toString(), QString(",")); - QCOMPARE(spy.count(), 1); - QCOMPARE(spy.last().at(0).toString(), QString(",")); -} - -void tst_IrcCompleter::testBuffer() -{ - qRegisterMetaType<IrcBuffer*>("IrcBuffer*"); - - IrcCompleter completer; - QVERIFY(!completer.buffer()); - - QSignalSpy spy(&completer, SIGNAL(bufferChanged(IrcBuffer*))); - QVERIFY(spy.isValid()); - - IrcBuffer* buffer = new IrcBuffer(&completer); - completer.setBuffer(buffer); - QCOMPARE(completer.buffer(), buffer); - QCOMPARE(completer.property("buffer").value<IrcBuffer*>(), buffer); - QCOMPARE(spy.count(), 1); - QCOMPARE(spy.last().at(0).value<IrcBuffer*>(), buffer); - - completer.setBuffer(0); - QVERIFY(!completer.buffer()); - QCOMPARE(spy.count(), 2); - QVERIFY(!spy.last().at(0).value<IrcBuffer*>()); -} - -void tst_IrcCompleter::testParser() -{ - qRegisterMetaType<IrcCommandParser*>("IrcCommandParser*"); - - IrcCompleter completer; - QVERIFY(!completer.parser()); - - QSignalSpy spy(&completer, SIGNAL(parserChanged(IrcCommandParser*))); - QVERIFY(spy.isValid()); - - IrcCommandParser* parser = new IrcCommandParser(&completer); - completer.setParser(parser); - QCOMPARE(completer.parser(), parser); - QCOMPARE(completer.property("parser").value<IrcCommandParser*>(), parser); - QCOMPARE(spy.count(), 1); - QCOMPARE(spy.last().at(0).value<IrcCommandParser*>(), parser); - - completer.setParser(0); - QVERIFY(!completer.parser()); - QCOMPARE(spy.count(), 2); - QVERIFY(!spy.last().at(0).value<IrcCommandParser*>()); -} - -Q_DECLARE_METATYPE(QList<int>) -void tst_IrcCompleter::testCompletion_data() -{ - QTest::addColumn<QString>("suffix"); - QTest::addColumn<QString>("text"); - QTest::addColumn<int>("cursor"); - QTest::addColumn<QStringList>("completions"); - QTest::addColumn<QList<int> >("positions"); - - for (int i = -1; i <= 3; ++i) - QTest::newRow("/j @ " + QByteArray::number(i)) << QString() << "/j" << i << QStringList("/JOIN ") << (QList<int>() << QString("/JOIN ").length()); - - QTest::newRow("/q #2") << QString() << "/q" << QString("/q").length() - << (QStringList() << "/QUERY " << "/QUIT ") - << (QList<int>() << QString("/QUERY ").length() << QString("/QUIT ").length()); - - QTest::newRow("/QUERY q") << QString() << "/quer q " << QString("/quer").length() - << (QStringList("/QUERY q ")) - << (QList<int>() << QString("/QUERY ").length()); - - QTest::newRow("/query q") << QString() << "/query q" << QString("/query q").length() - << (QStringList() << "/query quackgyver " << "/query quelx ") - << (QList<int>() << QString("/query quackgyver ").length() << QString("/query quelx ").length()); - - QTest::newRow("buffers") << QString() << "q" << QString("q").length() - << (QStringList() << "quackgyver " << "quelx ") - << (QList<int>() << QString("quackgyver ").length() << QString("quelx ").length()); - - QTest::newRow("repeat") << QString() << "qtassistant " << QString("qtassistant ").length() - << (QStringList() << "qtassistant " << "qtassistant ") - << (QList<int>() << QString("qtassistant ").length() << QString("qtassistant ").length()); - - QStringList names1; - QStringList names2; - QList<int> positions; - foreach (const QString& name, tst_IrcData::names()) { - if (name.startsWith("je", Qt::CaseInsensitive)) { - names1 += name + ": "; - names2 += name + ", "; - positions += name.length() + 2; - } - } - QTest::newRow("je...:") << ":" << "je" << 1 << names1 << positions; - QTest::newRow("je...,") << "," << "je" << 1 << names2 << positions; - - names1.clear(); - names2.clear(); - positions.clear(); - foreach (const QString& name, tst_IrcData::names()) { - if (name.startsWith("sa", Qt::CaseInsensitive)) { - names1 += "... " + name + " "; - positions += QString("... ").length() + name.length() + QString(" ").length(); - } - } - QTest::newRow("... sa") << QString() << "... sa" << QString("... ").length() << names1 << positions; - - QTest::newRow("spaces") << QString() << "/quit foo qt rest... " << QString("/quit foo qt ").length() - << QStringList("/quit foo qtassistant rest... ") - << (QList<int>() << QString("/quit foo qtassistant ").length()); -} - -void tst_IrcCompleter::testCompletion() -{ - QFETCH(QString, suffix); - QFETCH(QString, text); - QFETCH(int, cursor); - QFETCH(QStringList, completions); - QFETCH(QList<int>, positions); - - IrcBufferModel model(connection); - - connection->open(); - waitForOpened(); - waitForWritten(tst_IrcData::welcome()); - waitForWritten(tst_IrcData::join()); - - model.add("qout"); - model.add("qtassistant"); - - IrcCommandParser parser; - parser.setTriggers(QStringList("/")); - parser.addCommand(IrcCommand::Join, "JOIN <#channel> (<key>)"); - parser.addCommand(IrcCommand::Part, "PART (<#channel>) (<message...>)"); - parser.addCommand(IrcCommand::Kick, "KICK (<#channel>) <nick> (<reason...>)"); - parser.addCommand(IrcCommand::CtcpAction, "ME [target] <message...>"); - parser.addCommand(IrcCommand::CtcpAction, "ACTION <target> <message...>"); - parser.addCommand(IrcCommand::Custom, "QUERY <user>"); - parser.addCommand(IrcCommand::Quit, "QUIT (<message...>)"); - - IrcCompleter completer; - completer.setSuffix(suffix); - completer.setBuffer(model.get(0)); - completer.setParser(&parser); - - QSignalSpy spy(&completer, SIGNAL(completed(QString,int))); - QVERIFY(spy.isValid()); - - for (int i = 0; i < completions.count(); ++i) { - completer.complete(text, cursor); - QCOMPARE(spy.count(), i + 1); - QCOMPARE(spy.last().at(0).toString(), completions.at(i)); - QCOMPARE(spy.last().at(1).toInt(), positions.at(i)); - } -} - -void tst_IrcCompleter::testReset() -{ - IrcBufferModel model(connection); - connection->open(); - waitForOpened(); - waitForWritten(tst_IrcData::welcome()); - waitForWritten(tst_IrcData::join()); - IrcChannel* channel = model.get(0)->toChannel(); - QVERIFY(channel); - - IrcCompleter completer; - completer.setBuffer(channel); - - QSignalSpy spy(&completer, SIGNAL(completed(QString,int))); - QVERIFY(spy.isValid()); - - completer.complete("Guest", 5); - QCOMPARE(spy.count(), 1); - QString guest1 = spy.last().at(0).toString(); - QVERIFY(guest1.startsWith("Guest")); - - completer.complete("Guest", 5); - QCOMPARE(spy.count(), 2); - QString guest2 = spy.last().at(0).toString(); - QVERIFY(guest2.startsWith("Guest")); - QVERIFY(guest2 != guest1); - - completer.reset(); - completer.complete("Guest", 5); - QCOMPARE(spy.count(), 3); - QString guest3 = spy.last().at(0).toString(); - QCOMPARE(guest3, guest1); -} - -QTEST_MAIN(tst_IrcCompleter) - -#include "tst_irccompleter.moc" diff --git a/src/libcommuni/tests/auto/ircconnection/ircconnection.pro b/src/libcommuni/tests/auto/ircconnection/ircconnection.pro deleted file mode 100644 index f505a2b..0000000 --- a/src/libcommuni/tests/auto/ircconnection/ircconnection.pro +++ /dev/null @@ -1,11 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -SOURCES += tst_ircconnection.cpp - -# FakeQmlConnection::createCtcpReply() -*g++*|*clang*:QMAKE_CXXFLAGS_WARN_ON += -Wno-overloaded-virtual - -include(../shared/shared.pri) -include(../auto.pri) diff --git a/src/libcommuni/tests/auto/ircconnection/tst_ircconnection.cpp b/src/libcommuni/tests/auto/ircconnection/tst_ircconnection.cpp deleted file mode 100644 index 6f52b92..0000000 --- a/src/libcommuni/tests/auto/ircconnection/tst_ircconnection.cpp +++ /dev/null @@ -1,1721 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This test is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -#include "irc.h" -#include "irccommand.h" -#include "ircprotocol.h" -#include "ircconnection.h" -#include "ircmessage.h" -#include "ircfilter.h" -#include <QtTest/QtTest> -#include <QtCore/QRegExp> -#include <QtCore/QTextCodec> -#include <QtCore/QScopedPointer> -#ifndef QT_NO_OPENSSL -#include <QtNetwork/QSslSocket> -#endif - -#include "tst_ircdata.h" -#include "tst_ircclientserver.h" - -class FriendlyConnection : public IrcConnection -{ - friend class tst_IrcConnection; -}; - -class TestProtocol : public IrcProtocol -{ -public: - TestProtocol(IrcConnection* connection) : IrcProtocol(connection) - { - } - - virtual bool write(const QByteArray& data) - { - written = data; - return IrcProtocol::write(data); - } - - QByteArray written; -}; - -class tst_IrcConnection : public tst_IrcClientServer -{ - Q_OBJECT - -private slots: - void testDefaults(); - - void testHost_data(); - void testHost(); - - void testPort_data(); - void testPort(); - - void testUserName_data(); - void testUserName(); - - void testNickName_data(); - void testNickName(); - - void testRealName_data(); - void testRealName(); - - void testPassword_data(); - void testPassword(); - - void testDisplayName_data(); - void testDisplayName(); - - void testEncoding_data(); - void testEncoding(); - - void testSocket_data(); - void testSocket(); - - void testSecure(); - void testSasl(); - void testNoSasl(); - void testSsl(); - - void testOpen(); - void testEnabled(); - - void testStatus(); - void testConnection(); - void testMessages(); - void testMessageFlags(); - void testMessageBuilder(); - - void testSendCommand(); - void testSendData(); - - void testMessageFilter(); - void testCommandFilter(); - - void testDebug(); - void testWarnings(); - - void testCtcp(); -}; - -void tst_IrcConnection::testDefaults() -{ - IrcConnection connection; - QVERIFY(connection.host().isNull()); - QCOMPARE(connection.port(), 6667); - QVERIFY(connection.userName().isNull()); - QVERIFY(connection.nickName().isNull()); - QVERIFY(connection.realName().isNull()); - QVERIFY(connection.password().isNull()); - QVERIFY(connection.displayName().isNull()); - QCOMPARE(connection.encoding(), QByteArray("ISO-8859-15")); - QCOMPARE(connection.status(), IrcConnection::Inactive); - QVERIFY(!connection.isActive()); - QVERIFY(!connection.isConnected()); - QVERIFY(connection.isEnabled()); - QCOMPARE(connection.reconnectDelay(), 0); - QVERIFY(connection.socket()); - QVERIFY(!connection.isSecure()); - QVERIFY(connection.saslMechanism().isNull()); - QVERIFY(!IrcConnection::supportedSaslMechanisms().isEmpty()); - QVERIFY(connection.network()); -} - -void tst_IrcConnection::testHost_data() -{ - QTest::addColumn<QString>("host"); - - QTest::newRow("null") << QString(); - QTest::newRow("empty") << QString(""); - QTest::newRow("space") << QString(" "); - QTest::newRow("invalid") << QString("invalid"); - QTest::newRow("local") << QString("127.0.0.1"); -} - -void tst_IrcConnection::testHost() -{ - QFETCH(QString, host); - - IrcConnection connection; - QSignalSpy spy(&connection, SIGNAL(hostChanged(QString))); - QVERIFY(spy.isValid()); - connection.setHost(host); - QCOMPARE(connection.host(), host); - QCOMPARE(spy.count(), !host.isEmpty() ? 1 : 0); - if (!spy.isEmpty()) - QCOMPARE(spy.first().first().toString(), host); - - IrcConnection another(host); - QCOMPARE(another.host(), host); -} - -void tst_IrcConnection::testPort_data() -{ - QTest::addColumn<int>("port"); - - QTest::newRow("-1") << -1; - QTest::newRow("0") << 0; - QTest::newRow("6666") << 6666; - QTest::newRow("6667") << 6667; - QTest::newRow("6668") << 6668; -} - -void tst_IrcConnection::testPort() -{ - QFETCH(int, port); - - IrcConnection connection; - QSignalSpy spy(&connection, SIGNAL(portChanged(int))); - QVERIFY(spy.isValid()); - connection.setPort(port); - QCOMPARE(connection.port(), port); - QCOMPARE(spy.count(), port != 6667 ? 1 : 0); - if (!spy.isEmpty()) - QCOMPARE(spy.first().first().toInt(), port); -} - -void tst_IrcConnection::testUserName_data() -{ - QTest::addColumn<QString>("name"); - QTest::addColumn<QString>("result"); - - QTest::newRow("null") << QString() << QString(); - QTest::newRow("empty") << QString("") << QString(""); - QTest::newRow("space") << QString(" ") << QString(""); - QTest::newRow("spaces") << QString(" foo bar ") << QString("foo"); -} - -void tst_IrcConnection::testUserName() -{ - QFETCH(QString, name); - QFETCH(QString, result); - - IrcConnection connection; - QSignalSpy spy(&connection, SIGNAL(userNameChanged(QString))); - QVERIFY(spy.isValid()); - connection.setUserName(name); - QCOMPARE(connection.userName(), result); - QCOMPARE(spy.count(), !result.isEmpty() ? 1 : 0); - if (!spy.isEmpty()) - QCOMPARE(spy.first().first().toString(), result); -} - -void tst_IrcConnection::testNickName_data() -{ - QTest::addColumn<QString>("name"); - QTest::addColumn<QString>("result"); - - QTest::newRow("null") << QString() << QString(); - QTest::newRow("empty") << QString("") << QString(""); - QTest::newRow("space") << QString(" ") << QString(""); - QTest::newRow("spaces") << QString(" foo bar ") << QString("foo"); -} - -void tst_IrcConnection::testNickName() -{ - QFETCH(QString, name); - QFETCH(QString, result); - - IrcConnection connection; - QSignalSpy spy(&connection, SIGNAL(nickNameChanged(QString))); - QVERIFY(spy.isValid()); - connection.setNickName(name); - QCOMPARE(connection.nickName(), result); - QCOMPARE(spy.count(), !result.isEmpty() ? 1 : 0); - if (!spy.isEmpty()) - QCOMPARE(spy.first().first().toString(), result); -} - -void tst_IrcConnection::testRealName_data() -{ - QTest::addColumn<QString>("name"); - QTest::addColumn<QString>("result"); - - QTest::newRow("null") << QString() << QString(); - QTest::newRow("empty") << QString("") << QString(""); - QTest::newRow("space") << QString(" ") << QString(" "); - QTest::newRow("spaces") << QString(" foo bar ") << QString(" foo bar "); -} - -void tst_IrcConnection::testRealName() -{ - QFETCH(QString, name); - QFETCH(QString, result); - - IrcConnection connection; - QSignalSpy spy(&connection, SIGNAL(realNameChanged(QString))); - QVERIFY(spy.isValid()); - connection.setRealName(name); - QCOMPARE(connection.realName(), result); - QCOMPARE(spy.count(), !result.isEmpty() ? 1 : 0); - if (!spy.isEmpty()) - QCOMPARE(spy.first().first().toString(), result); -} - -void tst_IrcConnection::testPassword_data() -{ - QTest::addColumn<QString>("passwd"); - QTest::addColumn<QString>("result"); - - QTest::newRow("null") << QString() << QString(); - QTest::newRow("empty") << QString("") << QString(""); - QTest::newRow("space") << QString(" ") << QString(" "); - QTest::newRow("spaces") << QString(" foo bar ") << QString(" foo bar "); -} - -void tst_IrcConnection::testPassword() -{ - QFETCH(QString, passwd); - QFETCH(QString, result); - - IrcConnection connection; - QSignalSpy spy(&connection, SIGNAL(passwordChanged(QString))); - QVERIFY(spy.isValid()); - connection.setPassword(passwd); - QCOMPARE(connection.password(), result); - QCOMPARE(spy.count(), !result.isEmpty() ? 1 : 0); - if (!spy.isEmpty()) - QCOMPARE(spy.first().first().toString(), result); -} - -void tst_IrcConnection::testDisplayName_data() -{ - QTest::addColumn<QString>("host"); - QTest::addColumn<QString>("name"); - QTest::addColumn<QString>("result"); - - QTest::newRow("null") << QString() << QString() << QString(); - QTest::newRow("empty") << QString() << QString("") << QString(""); - QTest::newRow("space") << QString() << QString(" ") << QString(" "); - - QTest::newRow("host") << QString("host") << QString() << QString("host"); - QTest::newRow("name") << QString() << QString("name") << QString("name"); - QTest::newRow("explicit") << QString("host") << QString("name") << QString("name"); -} - -void tst_IrcConnection::testDisplayName() -{ - QFETCH(QString, host); - QFETCH(QString, name); - QFETCH(QString, result); - - IrcConnection connection; - connection.setHost(host); - connection.setDisplayName(name); - QCOMPARE(connection.displayName(), result); -} - -void tst_IrcConnection::testEncoding_data() -{ - QTest::addColumn<QByteArray>("encoding"); - QTest::addColumn<QByteArray>("actual"); - QTest::addColumn<bool>("supported"); - - QTest::newRow("null") << QByteArray() << QByteArray("ISO-8859-15") << false; - QTest::newRow("empty") << QByteArray("") << QByteArray("ISO-8859-15") << false; - QTest::newRow("space") << QByteArray(" ") << QByteArray("ISO-8859-15") << false; - QTest::newRow("invalid") << QByteArray("invalid") << QByteArray("ISO-8859-15") << false; - foreach (const QByteArray& codec, QTextCodec::availableCodecs()) - QTest::newRow(codec) << codec << codec << true; -} - -void tst_IrcConnection::testEncoding() -{ - QFETCH(QByteArray, encoding); - QFETCH(QByteArray, actual); - QFETCH(bool, supported); - - if (!supported) - QTest::ignoreMessage(QtWarningMsg, "IrcConnection::setEncoding(): unsupported encoding \"" + encoding + "\" "); - - IrcConnection connection; - connection.setEncoding(encoding); - QCOMPARE(connection.encoding(), actual); -} - -Q_DECLARE_METATYPE(QAbstractSocket*) -void tst_IrcConnection::testSocket_data() -{ - QTest::addColumn<QAbstractSocket*>("socket"); - - QTest::newRow("null") << static_cast<QAbstractSocket*>(0); - QTest::newRow("tcp") << static_cast<QAbstractSocket*>(new QTcpSocket(this)); -#ifndef QT_NO_OPENSSL - QTest::newRow("ssl") << static_cast<QAbstractSocket*>(new QSslSocket(this)); -#endif -} - -void tst_IrcConnection::testSocket() -{ - QFETCH(QAbstractSocket*, socket); - - IrcConnection connection; - connection.setSocket(socket); - QCOMPARE(connection.socket(), socket); - QCOMPARE(connection.isSecure(), socket && socket->inherits("QSslSocket")); -} - -void tst_IrcConnection::testSecure() -{ - IrcConnection connection; - QSignalSpy spy(&connection, SIGNAL(secureChanged(bool))); - QVERIFY(spy.isValid()); - QVERIFY(!connection.isSecure()); - -#ifdef QT_NO_OPENSSL - QTest::ignoreMessage(QtWarningMsg, "IrcConnection::setSecure(): the Qt build does not support SSL"); -#endif - - connection.setSecure(true); - -#ifndef QT_NO_OPENSSL - QVERIFY(connection.isSecure()); - QVERIFY(connection.socket()->inherits("QSslSocket")); - QCOMPARE(spy.count(), 1); - QVERIFY(spy.first().first().toBool()); -#else - QVERIFY(!connection.isSecure()); - QVERIFY(!connection.socket()->inherits("QSslSocket")); - QCOMPARE(spy.count(), 0); -#endif - - connection.setSecure(false); - QVERIFY(!connection.isSecure()); - QVERIFY(!connection.socket()->inherits("QSslSocket")); -#ifndef QT_NO_OPENSSL - QCOMPARE(spy.count(), 2); - QVERIFY(!spy.last().last().toBool()); -#else - QCOMPARE(spy.count(), 0); -#endif -} - -void tst_IrcConnection::testSasl() -{ - QVERIFY(!IrcConnection::supportedSaslMechanisms().contains("UNKNOWN")); - QTest::ignoreMessage(QtWarningMsg, "IrcConnection::setSaslMechanism(): unsupported mechanism: 'UNKNOWN'"); - connection->setSaslMechanism("UNKNOWN"); - QVERIFY(connection->saslMechanism().isEmpty()); - - IrcProtocol* protocol = static_cast<FriendlyConnection*>(connection.data())->protocol(); - QVERIFY(protocol); - - QVERIFY(IrcConnection::supportedSaslMechanisms().contains("PLAIN")); - connection->setSaslMechanism("PLAIN"); - QCOMPARE(connection->saslMechanism(), QString("PLAIN")); - - connection->open(); - QVERIFY(waitForOpened()); - - QVERIFY(clientSocket->waitForBytesWritten(1000)); - QVERIFY(serverSocket->waitForReadyRead(1000)); - QByteArray written = serverSocket->readAll(); - QVERIFY(written.contains("CAP LS")); - QVERIFY(written.contains("NICK nick")); - QVERIFY(!written.contains("PASS secret")); - QVERIFY(!written.contains("CAP REQ :sasl")); - - QVERIFY(waitForWritten(":irc.freenode.net CAP * LS :sasl")); - QVERIFY(clientSocket->waitForBytesWritten(1000)); - QVERIFY(serverSocket->waitForReadyRead(1000)); - written = serverSocket->readAll(); - QVERIFY(!written.contains("CAP LS")); - QVERIFY(!written.contains("NICK nick")); - QVERIFY(!written.contains("PASS secret")); - QVERIFY(written.contains("CAP REQ :sasl")); - - // do not resume handshake too early - QCoreApplication::sendPostedEvents(protocol, QEvent::MetaCall); - QVERIFY(!clientSocket->waitForBytesWritten(1000)); - - QVERIFY(waitForWritten(":irc.freenode.net CAP user ACK :sasl")); - QVERIFY(clientSocket->waitForBytesWritten(1000)); - QVERIFY(serverSocket->waitForReadyRead(1000)); - QVERIFY(serverSocket->readAll().contains("AUTHENTICATE PLAIN")); - - QVERIFY(waitForWritten("AUTHENTICATE +")); - QVERIFY(clientSocket->waitForBytesWritten(1000)); - QVERIFY(serverSocket->waitForReadyRead(1000)); - - QByteArray response = serverSocket->readAll(); - int index = response.indexOf("AUTHENTICATE"); - QVERIFY(index != -1); - QByteArray secret = response.mid(index + 13); - index = secret.indexOf("\r\n"); - QVERIFY(index != -1); - secret.truncate(index + 1); - secret = QByteArray::fromBase64(secret); - QByteArray expected = connection->userName().toUtf8() + '\0' + - connection->userName().toUtf8() + '\0' + - connection->password().toUtf8(); - QCOMPARE(secret, expected); - - // resume handshake - QCoreApplication::sendPostedEvents(protocol, QEvent::MetaCall); - - QVERIFY(clientSocket->waitForBytesWritten(1000)); - QVERIFY(serverSocket->waitForReadyRead(1000)); - QVERIFY(serverSocket->readAll().contains("CAP END")); - - // TODO: - QVERIFY(waitForWritten(":irc.freenode.net 900 user nick!user@host nick :You are now logged in as user.")); - QVERIFY(waitForWritten(":irc.freenode.net 903 user :SASL authentication successful")); - QVERIFY(waitForWritten(":irc.freenode.net 001 user :Welcome to the freenode Internet Relay Chat Network user")); -} - -void tst_IrcConnection::testNoSasl() -{ - QVERIFY(!IrcConnection::supportedSaslMechanisms().contains("UNKNOWN")); - QTest::ignoreMessage(QtWarningMsg, "IrcConnection::setSaslMechanism(): unsupported mechanism: 'UNKNOWN'"); - connection->setSaslMechanism("UNKNOWN"); - QVERIFY(connection->saslMechanism().isEmpty()); - - IrcProtocol* protocol = static_cast<FriendlyConnection*>(connection.data())->protocol(); - QVERIFY(protocol); - - QVERIFY(IrcConnection::supportedSaslMechanisms().contains("PLAIN")); - connection->setSaslMechanism("PLAIN"); - QCOMPARE(connection->saslMechanism(), QString("PLAIN")); - - connection->open(); - QVERIFY(waitForOpened()); - - QVERIFY(clientSocket->waitForBytesWritten(1000)); - QVERIFY(serverSocket->waitForReadyRead(1000)); - QByteArray written = serverSocket->readAll(); - QVERIFY(written.contains("CAP LS")); - QVERIFY(written.contains("NICK nick")); - QVERIFY(!written.contains("PASS secret")); - QVERIFY(!written.contains("CAP REQ :sasl")); - - QVERIFY(waitForWritten(":irc.freenode.net CAP * LS :no s-a-s-l here")); - QVERIFY(!clientSocket->waitForBytesWritten(1000)); - QVERIFY(!serverSocket->waitForReadyRead(1000)); - QVERIFY(serverSocket->readAll().isEmpty()); - - // resume handshake - QCoreApplication::sendPostedEvents(protocol, QEvent::MetaCall); - QVERIFY(clientSocket->waitForBytesWritten(1000)); - QVERIFY(serverSocket->waitForReadyRead(1000)); - written = serverSocket->readAll(); - QVERIFY(written.contains("PASS secret")); - QVERIFY(written.contains("CAP END")); -} - -#ifndef QT_NO_OPENSSL -class SslSocket : public QSslSocket -{ - Q_OBJECT - -public: - SslSocket(QObject* parent) : QSslSocket(parent), clientEncryptionStarted(false) { } - bool clientEncryptionStarted; - -public slots: - void startClientEncryption() - { - clientEncryptionStarted = true; - QSslSocket::startClientEncryption(); - } -}; -#endif // !QT_NO_OPENSSL - -void tst_IrcConnection::testSsl() -{ -#ifndef QT_NO_OPENSSL - SslSocket* socket = new SslSocket(connection); - connection->setSocket(socket); - QCOMPARE(connection->socket(), socket); - - connection->open(); - QVERIFY(waitForOpened()); - - QVERIFY(socket->clientEncryptionStarted); -#endif // !QT_NO_OPENSSL -} - -void tst_IrcConnection::testOpen() -{ - IrcConnection connection; - QTest::ignoreMessage(QtWarningMsg, "IrcConnection::open(): host is empty!"); - connection.open(); - QCOMPARE(connection.status(), IrcConnection::Inactive); - - connection.setHost("irc.ser.ver"); - QTest::ignoreMessage(QtWarningMsg, "IrcConnection::open(): userName is empty!"); - connection.open(); - QCOMPARE(connection.status(), IrcConnection::Inactive); - - connection.setUserName("user"); - QTest::ignoreMessage(QtWarningMsg, "IrcConnection::open(): nickName is empty!"); - connection.open(); - QCOMPARE(connection.status(), IrcConnection::Inactive); - - connection.setNickName("nick"); - QTest::ignoreMessage(QtWarningMsg, "IrcConnection::open(): realName is empty!"); - connection.open(); - QCOMPARE(connection.status(), IrcConnection::Inactive); - - connection.setRealName("real"); - connection.open(); - QVERIFY(connection.status() != IrcConnection::Inactive); - - connection.close(); - QCOMPARE(connection.status(), IrcConnection::Closed); - - connection.setEnabled(false); - connection.open(); - QCOMPARE(connection.status(), IrcConnection::Closed); -} - -void tst_IrcConnection::testEnabled() -{ - IrcConnection connection; - QVERIFY(connection.isEnabled()); - - QSignalSpy spy(&connection, SIGNAL(enabledChanged(bool))); - QVERIFY(spy.isValid()); - - connection.setEnabled(false); - QVERIFY(!connection.isEnabled()); - QCOMPARE(spy.count(), 1); - QCOMPARE(spy.last().at(0).toBool(), false); - - connection.setDisabled(true); - QVERIFY(!connection.isEnabled()); - QCOMPARE(spy.count(), 1); - - connection.setDisabled(false); - QVERIFY(connection.isEnabled()); - QCOMPARE(spy.count(), 2); - QCOMPARE(spy.last().at(0).toBool(), true); - - connection.setEnabled(true); - QVERIFY(connection.isEnabled()); - QCOMPARE(spy.count(), 2); -} - -void tst_IrcConnection::testStatus() -{ - Irc::registerMetaTypes(); - - QSignalSpy statusSpy(connection, SIGNAL(statusChanged(IrcConnection::Status))); - QSignalSpy connectingSpy(connection, SIGNAL(connecting())); - QSignalSpy connectedSpy(connection, SIGNAL(connected())); - QSignalSpy disconnectedSpy(connection, SIGNAL(disconnected())); - - QVERIFY(statusSpy.isValid()); - QVERIFY(connectingSpy.isValid()); - QVERIFY(connectedSpy.isValid()); - QVERIFY(disconnectedSpy.isValid()); - - int statusCount = 0; - int connectingCount = 0; - int connectedCount = 0; - int disconnectedCount = 0; - - connection->open(); - QVERIFY(waitForOpened()); - QVERIFY(connection->isActive()); - QVERIFY(!connection->isConnected()); - QCOMPARE(connection->status(), IrcConnection::Connecting); - QCOMPARE(statusSpy.count(), ++statusCount); - QCOMPARE(statusSpy.last().at(0).value<IrcConnection::Status>(), IrcConnection::Connecting); - QCOMPARE(connectingSpy.count(), ++connectingCount); - - QVERIFY(waitForWritten(tst_IrcData::welcome())); - QVERIFY(connection->isActive()); - QVERIFY(connection->isConnected()); - QCOMPARE(connection->status(), IrcConnection::Connected); - QCOMPARE(statusSpy.count(), ++statusCount); - QCOMPARE(statusSpy.last().at(0).value<IrcConnection::Status>(), IrcConnection::Connected); - QCOMPARE(connectedSpy.count(), ++connectedCount); - - clientSocket->close(); - QVERIFY(connection->isActive()); - QVERIFY(!connection->isConnected()); - QCOMPARE(connection->status(), IrcConnection::Closing); - QCOMPARE(statusSpy.count(), ++statusCount); - QCOMPARE(statusSpy.last().at(0).value<IrcConnection::Status>(), IrcConnection::Closing); - - connection->close(); - QVERIFY(!connection->isActive()); - QVERIFY(!connection->isConnected()); - QCOMPARE(connection->status(), IrcConnection::Closed); - QCOMPARE(statusSpy.count(), ++statusCount); - QCOMPARE(statusSpy.last().at(0).value<IrcConnection::Status>(), IrcConnection::Closed); - QCOMPARE(disconnectedSpy.count(), ++disconnectedCount); - - connection->open(); - QVERIFY(waitForOpened()); - QVERIFY(connection->isActive()); - QVERIFY(!connection->isConnected()); - QCOMPARE(connection->status(), IrcConnection::Connecting); - QCOMPARE(statusSpy.count(), ++statusCount); - QCOMPARE(statusSpy.last().at(0).value<IrcConnection::Status>(), IrcConnection::Connecting); - QCOMPARE(connectingSpy.count(), ++connectingCount); - - QVERIFY(waitForWritten(tst_IrcData::welcome())); - QVERIFY(connection->isActive()); - QVERIFY(connection->isConnected()); - QCOMPARE(connection->status(), IrcConnection::Connected); - QCOMPARE(statusSpy.count(), ++statusCount); - QCOMPARE(statusSpy.last().at(0).value<IrcConnection::Status>(), IrcConnection::Connected); - QCOMPARE(connectedSpy.count(), ++connectedCount); - - // trigger an error - serverSocket->close(); - QVERIFY(clientSocket->waitForDisconnected(100)); - QVERIFY(!connection->isConnected()); - QVERIFY(!connection->isActive()); - - QCOMPARE(statusSpy.at(statusCount++).at(0).value<IrcConnection::Status>(), IrcConnection::Error); - QCOMPARE(statusSpy.count(), statusCount); - - connection->close(); - QVERIFY(!connection->isActive()); - QVERIFY(!connection->isConnected()); - QCOMPARE(connection->status(), IrcConnection::Closed); - QCOMPARE(statusSpy.count(), ++statusCount); - QCOMPARE(statusSpy.last().at(0).value<IrcConnection::Status>(), IrcConnection::Closed); - QCOMPARE(disconnectedSpy.count(), ++disconnectedCount); - - connection->open(); - QVERIFY(waitForOpened()); - QVERIFY(connection->isActive()); - QVERIFY(!connection->isConnected()); - QCOMPARE(connection->status(), IrcConnection::Connecting); - QCOMPARE(statusSpy.count(), ++statusCount); - QCOMPARE(statusSpy.last().at(0).value<IrcConnection::Status>(), IrcConnection::Connecting); - QCOMPARE(connectingSpy.count(), ++connectingCount); - - QVERIFY(waitForWritten(tst_IrcData::welcome())); - QVERIFY(connection->isActive()); - QVERIFY(connection->isConnected()); - QCOMPARE(connection->status(), IrcConnection::Connected); - QCOMPARE(statusSpy.count(), ++statusCount); - QCOMPARE(statusSpy.last().at(0).value<IrcConnection::Status>(), IrcConnection::Connected); - QCOMPARE(connectedSpy.count(), ++connectedCount); - - // trigger an error - automatic reconnect - connection->setReconnectDelay(1); - serverSocket->close(); - QVERIFY(clientSocket->waitForDisconnected(100)); - QVERIFY(!connection->isConnected()); - QVERIFY(!connection->isActive()); - - QCOMPARE(statusSpy.at(statusCount++).at(0).value<IrcConnection::Status>(), IrcConnection::Error); - QCOMPARE(statusSpy.at(statusCount++).at(0).value<IrcConnection::Status>(), IrcConnection::Waiting); - QCOMPARE(statusSpy.count(), statusCount); - - QEventLoop reconnectLoop; - QTimer::singleShot(2000, &reconnectLoop, SLOT(quit())); - connect(connection, SIGNAL(statusChanged(IrcConnection::Status)), &reconnectLoop, SLOT(quit())); - reconnectLoop.exec(); - - QVERIFY(connection->isActive()); - QVERIFY(!connection->isConnected()); - QCOMPARE(connection->status(), IrcConnection::Connecting); - QCOMPARE(statusSpy.count(), ++statusCount); - QCOMPARE(statusSpy.last().at(0).value<IrcConnection::Status>(), IrcConnection::Connecting); - - QVERIFY(waitForOpened()); - QCOMPARE(connectingSpy.count(), ++connectingCount); - - // trigger an error _after_ quit -> no automatic reconnect - connection->quit(); - serverSocket->close(); - QVERIFY(clientSocket->waitForDisconnected(100)); - QVERIFY(!connection->isConnected()); - QVERIFY(!connection->isActive()); - QCOMPARE(statusSpy.at(statusCount++).at(0).value<IrcConnection::Status>(), IrcConnection::Closing); - QCOMPARE(statusSpy.at(statusCount++).at(0).value<IrcConnection::Status>(), IrcConnection::Closed); - QCOMPARE(statusSpy.count(), statusCount); -} - -void tst_IrcConnection::testConnection() -{ - Irc::registerMetaTypes(); - - TestProtocol* protocol = new TestProtocol(connection); - FriendlyConnection* friendly = static_cast<FriendlyConnection*>(connection.data()); - friendly->setProtocol(protocol); - QCOMPARE(friendly->protocol(), protocol); - QCOMPARE(protocol->connection(), connection.data()); - - connection->open(); - QVERIFY(waitForOpened()); - - QVERIFY(connection->isActive()); - QVERIFY(!connection->isConnected()); - QCOMPARE(connection->status(), IrcConnection::Connecting); - - QVERIFY(waitForWritten(":irc.ser.ver 001 nick :Welcome to the Internet Relay Chat Network nick")); - QVERIFY(connection->isActive()); - QVERIFY(connection->isConnected()); - QCOMPARE(connection->status(), IrcConnection::Connected); - - connection->close(); - QVERIFY(!connection->isActive()); - QVERIFY(!connection->isConnected()); - QCOMPARE(connection->status(), IrcConnection::Closed); - - // don't open when disabled - connection->setEnabled(false); - connection->open(); - QVERIFY(!connection->isActive()); - QVERIFY(!connection->isConnected()); - QCOMPARE(connection->status(), IrcConnection::Closed); - - // re-enable - connection->setEnabled(true); - connection->open(); - QVERIFY(connection->isActive()); - QVERIFY(!connection->isConnected()); - QCOMPARE(connection->status(), IrcConnection::Connecting); - - QVERIFY(waitForOpened()); - - protocol->written.clear(); - connection->network()->requestCapability("identify-msg"); - QVERIFY(protocol->written.contains("CAP REQ")); - QVERIFY(protocol->written.contains("identify-msg")); - - protocol->written.clear(); - connection->network()->requestCapabilities(QStringList() << "sasl" << "communi"); - QVERIFY(protocol->written.contains("CAP REQ")); - QVERIFY(protocol->written.contains("sasl")); - QVERIFY(protocol->written.contains("communi")); - - QVERIFY(waitForWritten(":irc.ser.ver 001 nick :Welcome to the Internet Relay Chat Network nick")); - QVERIFY(connection->isActive()); - QVERIFY(connection->isConnected()); - QCOMPARE(connection->status(), IrcConnection::Connected); - - protocol->written.clear(); - connection->setNickName("communi"); - QVERIFY(protocol->written.contains("NICK")); - QVERIFY(protocol->written.contains("communi")); - - protocol->written.clear(); - connection->quit(); - QVERIFY(protocol->written.contains("QUIT")); - - connection->close(); - QVERIFY(!connection->isActive()); - QVERIFY(!connection->isConnected()); - QCOMPARE(connection->status(), IrcConnection::Closed); -} - -class NickChanger : public QObject -{ - Q_OBJECT - -public: - NickChanger(IrcConnection* connection) : QObject(connection) - { - connect(connection, SIGNAL(nickNameReserved(QString*)), SLOT(onNickNameReserved(QString*))); - } - - QString setAlternate; - QString passedAlternate; - -public slots: - void onNickNameReserved(QString* alternate) - { - Q_ASSERT(alternate); - passedAlternate = *alternate; - *alternate = setAlternate; - } -}; - -Q_DECLARE_METATYPE(QString*) -void tst_IrcConnection::testMessages() -{ - Irc::registerMetaTypes(); - qRegisterMetaType<QString*>(); - - QSignalSpy messageSpy(connection, SIGNAL(messageReceived(IrcMessage*))); - QSignalSpy capabilityMessageSpy(connection, SIGNAL(capabilityMessageReceived(IrcCapabilityMessage*))); - QSignalSpy errorMessageSpy(connection, SIGNAL(errorMessageReceived(IrcErrorMessage*))); - QSignalSpy inviteMessageSpy(connection, SIGNAL(inviteMessageReceived(IrcInviteMessage*))); - QSignalSpy joinMessageSpy(connection, SIGNAL(joinMessageReceived(IrcJoinMessage*))); - QSignalSpy kickMessageSpy(connection, SIGNAL(kickMessageReceived(IrcKickMessage*))); - QSignalSpy modeMessageSpy(connection, SIGNAL(modeMessageReceived(IrcModeMessage*))); - QSignalSpy namesMessageSpy(connection, SIGNAL(namesMessageReceived(IrcNamesMessage*))); - QSignalSpy nickMessageSpy(connection, SIGNAL(nickMessageReceived(IrcNickMessage*))); - QSignalSpy noticeMessageSpy(connection, SIGNAL(noticeMessageReceived(IrcNoticeMessage*))); - QSignalSpy numericMessageSpy(connection, SIGNAL(numericMessageReceived(IrcNumericMessage*))); - QSignalSpy motdMessageSpy(connection, SIGNAL(motdMessageReceived(IrcMotdMessage*))); - QSignalSpy partMessageSpy(connection, SIGNAL(partMessageReceived(IrcPartMessage*))); - QSignalSpy pingMessageSpy(connection, SIGNAL(pingMessageReceived(IrcPingMessage*))); - QSignalSpy pongMessageSpy(connection, SIGNAL(pongMessageReceived(IrcPongMessage*))); - QSignalSpy privateMessageSpy(connection, SIGNAL(privateMessageReceived(IrcPrivateMessage*))); - QSignalSpy quitMessageSpy(connection, SIGNAL(quitMessageReceived(IrcQuitMessage*))); - QSignalSpy topicMessageSpy(connection, SIGNAL(topicMessageReceived(IrcTopicMessage*))); - QSignalSpy whoReplyMessageSpy(connection, SIGNAL(whoReplyMessageReceived(IrcWhoReplyMessage*))); - - QVERIFY(messageSpy.isValid()); - QVERIFY(capabilityMessageSpy.isValid()); - QVERIFY(errorMessageSpy.isValid()); - QVERIFY(inviteMessageSpy.isValid()); - QVERIFY(joinMessageSpy.isValid()); - QVERIFY(kickMessageSpy.isValid()); - QVERIFY(modeMessageSpy.isValid()); - QVERIFY(namesMessageSpy.isValid()); - QVERIFY(nickMessageSpy.isValid()); - QVERIFY(noticeMessageSpy.isValid()); - QVERIFY(numericMessageSpy.isValid()); - QVERIFY(motdMessageSpy.isValid()); - QVERIFY(partMessageSpy.isValid()); - QVERIFY(pingMessageSpy.isValid()); - QVERIFY(pongMessageSpy.isValid()); - QVERIFY(privateMessageSpy.isValid()); - QVERIFY(quitMessageSpy.isValid()); - QVERIFY(topicMessageSpy.isValid()); - QVERIFY(whoReplyMessageSpy.isValid()); - - int messageCount = 0; - int numericMessageCount = 0; - - connection->open(); - QVERIFY(waitForOpened()); - - QVERIFY(waitForWritten(":moorcock.freenode.net CAP * LS :account-notify extended-join identify-msg multi-prefix sasl")); - QCOMPARE(messageSpy.count(), ++messageCount); - QCOMPARE(capabilityMessageSpy.count(), 1); - - QVERIFY(waitForWritten(":moorcock.freenode.net 001 communi :Welcome to the freenode Internet Relay Chat Network communi")); - QCOMPARE(messageSpy.count(), ++messageCount); - QCOMPARE(numericMessageSpy.count(), ++numericMessageCount); - - QVERIFY(waitForWritten(":moorcock.freenode.net 005 communi CHANTYPES=# EXCEPTS INVEX CHANMODES=eIbq,k,flj,CFLMPQScgimnprstz CHANLIMIT=#:120 PREFIX=(ov)@+ MAXLIST=bqeI:100 MODES=4 NETWORK=freenode KNOCK STATUSMSG=@+ CALLERID=g :are supported by this server")); - QCOMPARE(messageSpy.count(), ++messageCount); - QCOMPARE(numericMessageSpy.count(), ++numericMessageCount); - - QVERIFY(waitForWritten(":moorcock.freenode.net 005 communi CASEMAPPING=rfc1459 CHARSET=ascii NICKLEN=16 CHANNELLEN=50 TOPICLEN=390 ETRACE CPRIVMSG CNOTICE DEAF=D MONITOR=100 FNC TARGMAX=NAMES:1,LIST:1,KICK:1,WHOIS:1,PRIVMSG:4,NOTICE:4,ACCEPT:,MONITOR: :are supported by this server")); - QCOMPARE(messageSpy.count(), ++messageCount); - QCOMPARE(numericMessageSpy.count(), ++numericMessageCount); - - QVERIFY(waitForWritten(":moorcock.freenode.net 005 communi EXTBAN=$,arxz WHOX CLIENTVER=3.0 SAFELIST ELIST=CTU :are supported by this server")); - QCOMPARE(messageSpy.count(), ++messageCount); - QCOMPARE(numericMessageSpy.count(), ++numericMessageCount); - - QVERIFY(waitForWritten(":moorcock.freenode.net 375 communi :- moorcock.freenode.net Message of the Day -")); - QCOMPARE(messageSpy.count(), ++messageCount); - QCOMPARE(numericMessageSpy.count(), ++numericMessageCount); - - QVERIFY(waitForWritten(":moorcock.freenode.net 372 communi :- Welcome to moorcock.freenode.net in ...")); - QCOMPARE(messageSpy.count(), ++messageCount); - QCOMPARE(numericMessageSpy.count(), ++numericMessageCount); - - QVERIFY(waitForWritten(":moorcock.freenode.net 376 communi :End of /MOTD command.")); - messageCount += 2; // RPL_ENDOFMOTD + IrcMotdMessage - QCOMPARE(messageSpy.count(), messageCount); - QCOMPARE(numericMessageSpy.count(), ++numericMessageCount); - QCOMPARE(motdMessageSpy.count(), 1); - - QVERIFY(waitForWritten(":communi!~communi@hidd.en JOIN #freenode")); - QCOMPARE(messageSpy.count(), ++messageCount); - QCOMPARE(joinMessageSpy.count(), 1); - - QVERIFY(waitForWritten(":moorcock.freenode.net 332 communi #freenode :Welcome to #freenode | Staff are voiced; some may also be on /stats p -- feel free to /msg us at any time | FAQ: http://freenode.net/faq.shtml | Unwelcome queries? Use /mode your_nick +R to block them. | Channel guidelines: http://freenode.net/poundfreenode.shtml | Blog: http://blog.freenode.net | Please don't comment on spam/trolls.")); - messageCount += 2; // RPL_TOPIC & IrcTopicMessage - QCOMPARE(messageSpy.count(), messageCount); - QCOMPARE(numericMessageSpy.count(), ++numericMessageCount); - QCOMPARE(topicMessageSpy.count(), 1); - - QVERIFY(waitForWritten(":moorcock.freenode.net 333 communi #freenode erry 1379357591")); - QCOMPARE(messageSpy.count(), ++messageCount); - QCOMPARE(numericMessageSpy.count(), ++numericMessageCount); - - QVERIFY(waitForWritten(":moorcock.freenode.net 353 communi = #freenode :communi straterra absk007 pefn xlys Gromit TooCool Sambler gat0rs KarneAsada danis_963 Kiryx chrismeller deefloo black_male sxlnxdx bjork Kinny phobos_anomaly T13|sleeps JuxTApose Kolega2357 rorx techhelper1 hermatize Azimi iqualfragile fwilson skasturi mwallacesd mayday Guest76549 mcjohansen MangaKaDenza ARISTIDES ketas `- claptor ylluminate Cooky Brand3n cheater_1 Kirito digitaloktay Will| Iarfen abrotman smurfy Inaunt +mist Karol RougeR_")); - QCOMPARE(messageSpy.count(), ++messageCount); - QCOMPARE(numericMessageSpy.count(), ++numericMessageCount); - - QVERIFY(waitForWritten(":moorcock.freenode.net 353 communi = #freenode :publickeating An_Ony_Moose michagogo Guest915` davidfg4 Ragnor s1lent_1 keee GingerGeek[Away] hibari derp S_T_A_N anonymuse asantoni road|runner LLckfan neoian2 aviancarrier nipples danieldaniel Pyrus Bry8Star shadowm_desktop furtardo rdymac TTSDA seaworthy Chiyo yscc Zombiebaron redpill f4cl3y Boohbah applebloom zorael kameloso^ Zetetic XAMPP wheels_up Cuppy-Cake mindlessjohnny Kymru mquin_ Rodja babilen kirin` David Affix jshyeung_ DarkAceZ karakedi")); - QCOMPARE(messageSpy.count(), ++messageCount); - QCOMPARE(numericMessageSpy.count(), ++numericMessageCount); - - QVERIFY(waitForWritten(":moorcock.freenode.net 366 communi #freenode :End of /NAMES list.")); - messageCount += 2; // RPL_ENDOFNAMES & IrcNamesMessage - QCOMPARE(messageSpy.count(), messageCount); - QCOMPARE(numericMessageSpy.count(), ++numericMessageCount); - QCOMPARE(namesMessageSpy.count(), 1); - - QVERIFY(waitForWritten(":ChanServ!ChanServ@services. NOTICE communi :[#freenode] Welcome to #freenode. All network staff are voiced in here, but may not always be around - type /stats p to get a list of on call staff. Others may be hiding so do feel free to ping and /msg us at will! Also please read the channel guidelines at http://freenode.net/poundfreenode.shtml - thanks.")); - QCOMPARE(messageSpy.count(), ++messageCount); - QCOMPARE(noticeMessageSpy.count(), 1); - - QVERIFY(waitForWritten(":services. 328 communi #freenode :http://freenode.net/")); - QCOMPARE(messageSpy.count(), ++messageCount); - QCOMPARE(numericMessageSpy.count(), ++numericMessageCount); - - QVERIFY(waitForWritten("PING :moorcock.freenode.net")); - QCOMPARE(messageSpy.count(), ++messageCount); - QCOMPARE(pingMessageSpy.count(), 1); - - QVERIFY(waitForWritten("PONG :moorcock.freenode.net")); - QCOMPARE(messageSpy.count(), ++messageCount); - QCOMPARE(pongMessageSpy.count(), 1); - - QVERIFY(waitForWritten(":jpnurmi!jpnurmi@qt/jpnurmi INVITE Communi84194 :#communi")); - QCOMPARE(messageSpy.count(), ++messageCount); - QCOMPARE(inviteMessageSpy.count(), 1); - - QVERIFY(waitForWritten(":Communi84194!ident@host NICK :communi")); - QCOMPARE(messageSpy.count(), ++messageCount); - QCOMPARE(nickMessageSpy.count(), 1); - - // own nick name changes - QSignalSpy nickNameChangedSpy(connection, SIGNAL(nickNameChanged(QString))); - QVERIFY(nickNameChangedSpy.isValid()); - QVERIFY(waitForWritten(":communi!user@host NICK :own")); - QCOMPARE(messageSpy.count(), ++messageCount); - QCOMPARE(nickMessageSpy.count(), 2); - QCOMPARE(connection->nickName(), QString("own")); - QCOMPARE(nickNameChangedSpy.count(), 1); - QCOMPARE(nickNameChangedSpy.last().at(0).toString(), QString("own")); - - // nick in use - QString prevNick = connection->nickName(); - NickChanger changer(connection); - changer.setAlternate = "communi_"; - QSignalSpy nickNameReservedSpy(connection, SIGNAL(nickNameReserved(QString*))); - QVERIFY(nickNameReservedSpy.isValid()); - QVERIFY(waitForWritten(":moorcock.freenode.net 433 * communi :Nickname is already in use.")); - QCOMPARE(messageSpy.count(), ++messageCount); - QCOMPARE(numericMessageSpy.count(), ++numericMessageCount); - QCOMPARE(nickNameReservedSpy.count(), 1); - QCOMPARE(changer.passedAlternate, prevNick); - - QVERIFY(waitForWritten(":jpnurmi!jpnurmi@qt/jpnurmi MODE #communi +v communi")); - QCOMPARE(messageSpy.count(), ++messageCount); - QCOMPARE(modeMessageSpy.count(), 1); - - QVERIFY(waitForWritten(":moorcock.freenode.net 324 communi #communi +ms")); - messageCount += 2; // RPL_CHANNELMODEIS + IrcModeMessage - QCOMPARE(messageSpy.count(), messageCount); - QCOMPARE(numericMessageSpy.count(), ++numericMessageCount); - QCOMPARE(modeMessageSpy.count(), 2); - - QVERIFY(waitForWritten(":qtassistant!jpnurmi@qt/jpnurmi/bot/qtassistant PART #communi")); - QCOMPARE(messageSpy.count(), ++messageCount); - QCOMPARE(partMessageSpy.count(), 1); - - QVERIFY(waitForWritten(":jpnurmi!jpnurmi@qt/jpnurmi PRIVMSG #communi :hello")); - QCOMPARE(messageSpy.count(), ++messageCount); - QCOMPARE(privateMessageSpy.count(), 1); - - QVERIFY(waitForWritten(":jpnurmi!jpnurmi@qt/jpnurmi QUIT :Client Quit")); - QCOMPARE(messageSpy.count(), ++messageCount); - QCOMPARE(quitMessageSpy.count(), 1); - - QVERIFY(waitForWritten(":jpnurmi!jpnurmi@qt/jpnurmi KICK #communi communi")); - QCOMPARE(messageSpy.count(), ++messageCount); - QCOMPARE(kickMessageSpy.count(), 1); - - QVERIFY(waitForWritten("ERROR :just testing...")); - QCOMPARE(messageSpy.count(), ++messageCount); - QCOMPARE(errorMessageSpy.count(), 1); - - QVERIFY(waitForWritten(":hobana.freenode.net 352 communi #communi ChanServ services. services. ChanServ H@ :0 Channel Services" )); - messageCount += 2; // RPL_WHOREPLY + IrcWhoReplyMessage - QCOMPARE(messageSpy.count(), messageCount); - QCOMPARE(numericMessageSpy.count(), ++numericMessageCount); - QCOMPARE(whoReplyMessageSpy.count(), 1); - - QVERIFY(waitForWritten(":hobana.freenode.net 315 communi #communi :End of /WHO list.")); - QCOMPARE(messageSpy.count(), ++messageCount); - QCOMPARE(numericMessageSpy.count(), ++numericMessageCount); - QCOMPARE(whoReplyMessageSpy.count(), 1); -} - -class MsgFilter : public QObject, public IrcMessageFilter -{ - Q_OBJECT - Q_INTERFACES(IrcMessageFilter) - -public: - MsgFilter() : count(0), type(IrcMessage::Unknown), flags(IrcMessage::None) - { - } - - bool messageFilter(IrcMessage* message) - { - ++count; - type = message->type(); - flags = message->flags(); - value = message->property(property); - return false; - } - -public: - int count; - QVariant value; - QByteArray property; - IrcMessage::Type type; - IrcMessage::Flags flags; -}; - -void tst_IrcConnection::testMessageFlags() -{ - connection->open(); - QVERIFY(waitForOpened()); - - int count = 0; - MsgFilter filter; - connection->installMessageFilter(&filter); - - QVERIFY(waitForWritten(":server CAP * LS :identify-msg")); - QCOMPARE(filter.count, ++count); - QCOMPARE(filter.type, IrcMessage::Capability); - QCOMPARE(filter.flags, IrcMessage::None); - - QVERIFY(waitForWritten(":server CAP communi ACK :identify-msg")); - QCOMPARE(filter.count, ++count); - QCOMPARE(filter.type, IrcMessage::Capability); - QCOMPARE(filter.flags, IrcMessage::None); - - QVERIFY(waitForWritten(":server 001 communi :Welcome...")); - QCOMPARE(filter.count, ++count); - QCOMPARE(filter.type, IrcMessage::Numeric); - QCOMPARE(filter.flags, IrcMessage::None); - - QVERIFY(waitForWritten(":server 005 communi CHANTYPES=# EXCEPTS INVEX CHANMODES=eIbq,k,flj,CFLMPQScgimnprstz CHANLIMIT=#:120 PREFIX=(ov)@+ MAXLIST=bqeI:100 MODES=4 NETWORK=fake KNOCK STATUSMSG=@+ CALLERID=g :are supported by this server")); - QCOMPARE(filter.count, ++count); - QCOMPARE(filter.type, IrcMessage::Numeric); - QCOMPARE(filter.flags, IrcMessage::None); - - QVERIFY(waitForWritten(":server 005 communi CASEMAPPING=rfc1459 CHARSET=ascii NICKLEN=16 CHANNELLEN=50 TOPICLEN=390 ETRACE CPRIVMSG CNOTICE DEAF=D MONITOR=100 FNC TARGMAX=NAMES:1,LIST:1,KICK:1,WHOIS:1,PRIVMSG:4,NOTICE:4,ACCEPT:,MONITOR: :are supported by this server")); - QCOMPARE(filter.count, ++count); - QCOMPARE(filter.type, IrcMessage::Numeric); - QCOMPARE(filter.flags, IrcMessage::None); - - QVERIFY(waitForWritten(":server 005 communi EXTBAN=$,arxz WHOX CLIENTVER=3.0 SAFELIST ELIST=CTU :are supported by this server")); - QCOMPARE(filter.count, ++count); - QCOMPARE(filter.type, IrcMessage::Numeric); - QCOMPARE(filter.flags, IrcMessage::None); - - filter.property = "content"; - QVERIFY(waitForWritten(":communi!ident@host PRIVMSG #communi :hi all")); - QCOMPARE(filter.count, ++count); - QCOMPARE(filter.type, IrcMessage::Private); - QCOMPARE(filter.flags, IrcMessage::Own); - QCOMPARE(filter.value.toString(), QString("hi all")); - - filter.property = "content"; - QVERIFY(waitForWritten(":jpnurmi!ident@host PRIVMSG #communi :+hello there, communi")); - QCOMPARE(filter.count, ++count); - QCOMPARE(filter.type, IrcMessage::Private); - QCOMPARE(filter.flags, IrcMessage::Identified); - QCOMPARE(filter.value.toString(), QString("hello there, communi")); - - filter.property = "content"; - QVERIFY(waitForWritten(":Guest1234!ident@host PRIVMSG #communi :-hi communi")); - QCOMPARE(filter.count, ++count); - QCOMPARE(filter.type, IrcMessage::Private); - QCOMPARE(filter.flags, IrcMessage::Unidentified); - QCOMPARE(filter.value.toString(), QString("hi communi")); - - filter.property = "content"; - QVERIFY(waitForWritten(":communi!ident@host NOTICE #communi :hi all")); - QCOMPARE(filter.count, ++count); - QCOMPARE(filter.type, IrcMessage::Notice); - QCOMPARE(filter.flags, IrcMessage::Own); - QCOMPARE(filter.value.toString(), QString("hi all")); - - filter.property = "content"; - QVERIFY(waitForWritten(":jpnurmi!ident@host NOTICE #communi :+hello there, communi")); - QCOMPARE(filter.count, ++count); - QCOMPARE(filter.type, IrcMessage::Notice); - QCOMPARE(filter.flags, IrcMessage::Identified); - QCOMPARE(filter.value.toString(), QString("hello there, communi")); - - filter.property = "content"; - QVERIFY(waitForWritten(":Guest1234!ident@host NOTICE #communi :-hi communi")); - QCOMPARE(filter.count, ++count); - QCOMPARE(filter.type, IrcMessage::Notice); - QCOMPARE(filter.flags, IrcMessage::Unidentified); - QCOMPARE(filter.value.toString(), QString("hi communi")); -} - -void tst_IrcConnection::testMessageBuilder() -{ - connection->open(); - QVERIFY(waitForOpened()); - - MsgFilter filter; - connection->installMessageFilter(&filter); - - QVERIFY(waitForWritten(":my.irc.ser.ver 001 communi :Welcome...")); - QVERIFY(waitForWritten(":my.irc.ser.ver 005 communi CHANTYPES=# EXCEPTS INVEX CHANMODES=eIbq,k,flj,CFLMPQScgimnprstz CHANLIMIT=#:120 PREFIX=(ov)@+ MAXLIST=bqeI:100 MODES=4 NETWORK=fake KNOCK STATUSMSG=@+ CALLERID=g :are supported by this server")); - QVERIFY(waitForWritten(":my.irc.ser.ver 005 communi CASEMAPPING=rfc1459 CHARSET=ascii NICKLEN=16 CHANNELLEN=50 TOPICLEN=390 ETRACE CPRIVMSG CNOTICE DEAF=D MONITOR=100 FNC TARGMAX=NAMES:1,LIST:1,KICK:1,WHOIS:1,PRIVMSG:4,NOTICE:4,ACCEPT:,MONITOR: :are supported by this server")); - QVERIFY(waitForWritten(":my.irc.ser.ver 005 communi EXTBAN=$,arxz WHOX CLIENTVER=3.0 SAFELIST ELIST=CTU :are supported by this server")); - - filter.property = "mask"; - QVERIFY(waitForWritten(":my.irc.ser.ver 352 communi #communi ~jpnurmi qt/jpnurmi his.irc.ser.ver jpnurmi G*@ :0 J-P Nurmi")); - QCOMPARE(filter.value.toString(), QString("#communi")); - - filter.property = "ident"; - QVERIFY(waitForWritten(":my.irc.ser.ver 352 communi #communi ~jpnurmi qt/jpnurmi his.irc.ser.ver jpnurmi G*@ :0 J-P Nurmi")); - QCOMPARE(filter.value.toString(), QString("~jpnurmi")); - - filter.property = "host"; - QVERIFY(waitForWritten(":my.irc.ser.ver 352 communi #communi ~jpnurmi qt/jpnurmi his.irc.ser.ver jpnurmi G*@ :0 J-P Nurmi")); - QCOMPARE(filter.value.toString(), QString("qt/jpnurmi")); - - filter.property = "server"; - QVERIFY(waitForWritten(":my.irc.ser.ver 352 communi #communi ~jpnurmi qt/jpnurmi his.irc.ser.ver jpnurmi G*@ :0 J-P Nurmi")); - QCOMPARE(filter.value.toString(), QString("his.irc.ser.ver")); - - filter.property = "nick"; - QVERIFY(waitForWritten(":my.irc.ser.ver 352 communi #communi ~jpnurmi qt/jpnurmi his.irc.ser.ver jpnurmi G*@ :0 J-P Nurmi")); - QCOMPARE(filter.value.toString(), QString("jpnurmi")); - - filter.property = "away"; - QVERIFY(waitForWritten(":my.irc.ser.ver 352 communi #communi ~jpnurmi qt/jpnurmi his.irc.ser.ver jpnurmi G*@ :0 J-P Nurmi")); - QCOMPARE(filter.value.toBool(), true); - - filter.property = "servOp"; - QVERIFY(waitForWritten(":my.irc.ser.ver 352 communi #communi ~jpnurmi qt/jpnurmi his.irc.ser.ver jpnurmi G*@ :0 J-P Nurmi")); - QCOMPARE(filter.value.toBool(), true); - - filter.property = "realName"; - QVERIFY(waitForWritten(":my.irc.ser.ver 352 communi #communi ~jpnurmi qt/jpnurmi his.irc.ser.ver jpnurmi G*@ :0 J-P Nurmi")); - QCOMPARE(filter.value.toString(), QString("J-P Nurmi")); - - filter.property = "realName"; - QVERIFY(waitForWritten(":my.irc.ser.ver 352 communi #communi ~jpnurmi qt/jpnurmi his.irc.ser.ver jpnurmi G*@ :0")); - QCOMPARE(filter.value.toString(), QString()); -} - -void tst_IrcConnection::testSendCommand() -{ - IrcConnection conn; - QVERIFY(!conn.sendCommand(0)); - QVERIFY(!conn.sendCommand(IrcCommand::createQuit())); - - TestProtocol* protocol = new TestProtocol(connection); - FriendlyConnection* friendly = static_cast<FriendlyConnection*>(connection.data()); - friendly->setProtocol(protocol); - QCOMPARE(friendly->protocol(), protocol); - QCOMPARE(protocol->connection(), connection.data()); - - connection->open(); - QVERIFY(waitForOpened()); - - QVERIFY(connection->sendCommand(IrcCommand::createQuit())); - QVERIFY(!connection->sendCommand(0)); - QVERIFY(protocol->written.contains("QUIT")); -} - -void tst_IrcConnection::testSendData() -{ - IrcConnection conn; - QVERIFY(!conn.sendData("QUIT")); - - TestProtocol* protocol = new TestProtocol(connection); - FriendlyConnection* friendly = static_cast<FriendlyConnection*>(connection.data()); - friendly->setProtocol(protocol); - QCOMPARE(friendly->protocol(), protocol); - QCOMPARE(protocol->connection(), connection.data()); - - connection->open(); - QVERIFY(waitForOpened()); - - QVERIFY(connection->sendData("QUIT")); - QVERIFY(protocol->written.contains("QUIT")); -} - -class TestFilter : public QObject, public IrcMessageFilter, public IrcCommandFilter -{ - Q_OBJECT - Q_INTERFACES(IrcMessageFilter IrcCommandFilter) - -public: - void clear() - { - commitSuicide = false; - messageFiltered = 0; - commandFiltered = 0; - messageFilterEnabled = false; - commandFilterEnabled = false; - } - - bool messageFilter(IrcMessage*) - { - ++messageFiltered; - if (commitSuicide) - delete this; - return messageFilterEnabled; - } - - bool commandFilter(IrcCommand*) - { - ++commandFiltered; - if (commitSuicide) - delete this; - return commandFilterEnabled; - } - - bool commitSuicide; - int messageFiltered; - int commandFiltered; - bool messageFilterEnabled; - bool commandFilterEnabled; -}; - -void tst_IrcConnection::testMessageFilter() -{ - Irc::registerMetaTypes(); - - QSignalSpy messageSpy(connection, SIGNAL(messageReceived(IrcMessage*))); - QVERIFY(messageSpy.isValid()); - int messageCount = 0; - - TestFilter filter1; - QScopedPointer<TestFilter> filter2(new TestFilter); - QScopedPointer<TestFilter> filter3(new TestFilter); - - filter1.clear(); filter2->clear(); filter3->clear(); - - connection->installMessageFilter(&filter1); - connection->installMessageFilter(filter2.data()); - connection->installMessageFilter(filter3.data()); - - connection->open(); - QVERIFY(waitForOpened()); - - QVERIFY(waitForWritten(":moorcock.freenode.net 001 communi :Welcome to the freenode Internet Relay Chat Network communi")); - QCOMPARE(filter1.messageFiltered, 1); - QCOMPARE(filter2->messageFiltered, 1); - QCOMPARE(filter3->messageFiltered, 1); - QCOMPARE(messageSpy.count(), ++messageCount); - - filter1.clear(); filter2->clear(); filter3->clear(); - filter3->messageFilterEnabled = true; - - QVERIFY(waitForWritten(":moorcock.freenode.net 005 communi CHANTYPES=# EXCEPTS INVEX CHANMODES=eIbq,k,flj,CFLMPQScgimnprstz CHANLIMIT=#:120 PREFIX=(ov)@+ MAXLIST=bqeI:100 MODES=4 NETWORK=freenode KNOCK STATUSMSG=@+ CALLERID=g :are supported by this server")); - QCOMPARE(filter1.messageFiltered, 0); - QCOMPARE(filter2->messageFiltered, 0); - QCOMPARE(filter3->messageFiltered, 1); - QCOMPARE(messageSpy.count(), messageCount); - - filter1.clear(); filter2->clear(); filter3->clear(); - filter2->messageFilterEnabled = true; - - QVERIFY(waitForWritten(":moorcock.freenode.net 005 communi CASEMAPPING=rfc1459 CHARSET=ascii NICKLEN=16 CHANNELLEN=50 TOPICLEN=390 ETRACE CPRIVMSG CNOTICE DEAF=D MONITOR=100 FNC TARGMAX=NAMES:1,LIST:1,KICK:1,WHOIS:1,PRIVMSG:4,NOTICE:4,ACCEPT:,MONITOR: :are supported by this server")); - QCOMPARE(filter1.messageFiltered, 0); - QCOMPARE(filter2->messageFiltered, 1); - QCOMPARE(filter3->messageFiltered, 1); - QCOMPARE(messageSpy.count(), messageCount); - - filter1.clear(); filter2->clear(); filter3->clear(); - filter1.messageFilterEnabled = true; - - QVERIFY(waitForWritten(":moorcock.freenode.net 005 communi EXTBAN=$,arxz WHOX CLIENTVER=3.0 SAFELIST ELIST=CTU :are supported by this server")); - QCOMPARE(filter1.messageFiltered, 1); - QCOMPARE(filter2->messageFiltered, 1); - QCOMPARE(filter3->messageFiltered, 1); - QCOMPARE(messageSpy.count(), messageCount); - - filter1.clear(); filter2->clear(); filter3->clear(); - - QVERIFY(waitForWritten(":moorcock.freenode.net 375 communi :- moorcock.freenode.net Message of the Day -")); - QCOMPARE(filter1.messageFiltered, 1); - QCOMPARE(filter2->messageFiltered, 1); - QCOMPARE(filter3->messageFiltered, 1); - QCOMPARE(messageSpy.count(), ++messageCount); - - // a deleted filter gets removed - filter2.reset(); - filter1.clear(); filter3->clear(); - - QVERIFY(waitForWritten(":moorcock.freenode.net 372 communi :- Welcome to moorcock.freenode.net in ...")); - QCOMPARE(filter1.messageFiltered, 1); - QCOMPARE(filter3->messageFiltered, 1); - QCOMPARE(messageSpy.count(), ++messageCount); - - QVERIFY(waitForWritten(":moorcock.freenode.net 376 communi :End of /MOTD command.")); - messageCount += 2; // RPL_ENDOFMOTD + IrcMotdMessage - QCOMPARE(messageSpy.count(), messageCount); - - // double filters - connection->installMessageFilter(&filter1); - connection->installMessageFilter(filter3.data()); - filter1.clear(); filter3->clear(); - - QVERIFY(waitForWritten(":communi!~communi@hidd.en JOIN #freenode")); - QCOMPARE(filter1.messageFiltered, 2); - QCOMPARE(filter3->messageFiltered, 2); - QCOMPARE(messageSpy.count(), ++messageCount); - - // remove & enable double filter - filter1.clear(); filter3->clear(); - filter1.messageFilterEnabled = true; - connection->removeMessageFilter(filter3.data()); - - QVERIFY(waitForWritten(":communi!~communi@hidd.en JOIN #communi")); - QCOMPARE(filter1.messageFiltered, 1); - QCOMPARE(filter3->messageFiltered, 0); - QCOMPARE(messageSpy.count(), messageCount); - - // remove & delete - filter3.reset(); - filter1.clear(); - connection->removeMessageFilter(&filter1); - - QVERIFY(waitForWritten(":communi!~communi@hidd.en PART #communi")); - QCOMPARE(filter1.messageFiltered, 0); - QCOMPARE(messageSpy.count(), ++messageCount); - - // commit a suicide & filter - QPointer<TestFilter> suicidal1 = new TestFilter; - connection->installMessageFilter(suicidal1); - suicidal1->clear(); - suicidal1->messageFilterEnabled = true; - suicidal1->commitSuicide = true; - - QVERIFY(waitForWritten(":communi!~communi@hidd.en PART #freenode")); - QCOMPARE(messageSpy.count(), messageCount); - QVERIFY(!suicidal1); - - // commit a suicide & don't filter - QPointer<TestFilter> suicidal2 = new TestFilter; - connection->installMessageFilter(suicidal2); - suicidal2->clear(); - suicidal2->commitSuicide = true; - - QVERIFY(waitForWritten(":communi!~communi@hidd.en JOIN #qt")); - QVERIFY(!suicidal2); -} - -void tst_IrcConnection::testCommandFilter() -{ - TestProtocol* protocol = new TestProtocol(connection); - FriendlyConnection* friendly = static_cast<FriendlyConnection*>(connection.data()); - friendly->setProtocol(protocol); - QCOMPARE(friendly->protocol(), protocol); - QCOMPARE(protocol->connection(), connection.data()); - - TestFilter filter1; - QScopedPointer<TestFilter> filter2(new TestFilter); - QScopedPointer<TestFilter> filter3(new TestFilter); - - filter1.clear(); filter2->clear(); filter3->clear(); - - connection->installCommandFilter(&filter1); - connection->installCommandFilter(filter2.data()); - connection->installCommandFilter(filter3.data()); - - connection->open(); - QVERIFY(waitForOpened()); - - connection->sendCommand(IrcCommand::createJoin("#freenode")); - QCOMPARE(filter1.commandFiltered, 1); - QCOMPARE(filter2->commandFiltered, 1); - QCOMPARE(filter3->commandFiltered, 1); - QVERIFY(!protocol->written.isEmpty()); - - protocol->written.clear(); - filter1.clear(); filter2->clear(); filter3->clear(); - filter3->commandFilterEnabled = true; - - connection->sendCommand(IrcCommand::createJoin("#communi")); - QCOMPARE(filter1.commandFiltered, 0); - QCOMPARE(filter2->commandFiltered, 0); - QCOMPARE(filter3->commandFiltered, 1); - QVERIFY(protocol->written.isEmpty()); - - protocol->written.clear(); - filter1.clear(); filter2->clear(); filter3->clear(); - filter2->commandFilterEnabled = true; - - connection->sendCommand(IrcCommand::createJoin("#qt")); - QCOMPARE(filter1.commandFiltered, 0); - QCOMPARE(filter2->commandFiltered, 1); - QCOMPARE(filter3->commandFiltered, 1); - QVERIFY(protocol->written.isEmpty()); - - protocol->written.clear(); - filter1.clear(); filter2->clear(); filter3->clear(); - filter1.commandFilterEnabled = true; - - connection->sendCommand(IrcCommand::createPart("#freenode")); - QCOMPARE(filter1.commandFiltered, 1); - QCOMPARE(filter2->commandFiltered, 1); - QCOMPARE(filter3->commandFiltered, 1); - QVERIFY(protocol->written.isEmpty()); - - protocol->written.clear(); - filter1.clear(); filter2->clear(); filter3->clear(); - - connection->sendCommand(IrcCommand::createPart("#communi")); - QCOMPARE(filter1.commandFiltered, 1); - QCOMPARE(filter2->commandFiltered, 1); - QCOMPARE(filter3->commandFiltered, 1); - QVERIFY(!protocol->written.isEmpty()); - - // a deleted filter gets removed - filter2.reset(); - filter1.clear(); filter3->clear(); - protocol->written.clear(); - - connection->sendCommand(IrcCommand::createPart("#qt")); - QCOMPARE(filter1.commandFiltered, 1); - QCOMPARE(filter3->commandFiltered, 1); - QVERIFY(!protocol->written.isEmpty()); - - // double filters - connection->installCommandFilter(&filter1); - connection->installCommandFilter(filter3.data()); - filter1.clear(); filter3->clear(); - protocol->written.clear(); - - connection->sendCommand(IrcCommand::createJoin("#freenode")); - QCOMPARE(filter1.commandFiltered, 2); - QCOMPARE(filter3->commandFiltered, 2); - QVERIFY(!protocol->written.isEmpty()); - - // remove & enable double filter - filter1.clear(); filter3->clear(); - filter1.commandFilterEnabled = true; - connection->removeCommandFilter(filter3.data()); - protocol->written.clear(); - - connection->sendCommand(IrcCommand::createJoin("#communi")); - QCOMPARE(filter1.commandFiltered, 1); - QCOMPARE(filter3->commandFiltered, 0); - QVERIFY(protocol->written.isEmpty()); - - // remove & delete - filter3.reset(); - filter1.clear(); - connection->removeCommandFilter(&filter1); - protocol->written.clear(); - - connection->sendCommand(IrcCommand::createJoin("#qt")); - QCOMPARE(filter1.commandFiltered, 0); - QVERIFY(!protocol->written.isEmpty()); - - // commit a suicide - QPointer<TestFilter> suicidal = new TestFilter; - connection->installCommandFilter(suicidal); - suicidal->commitSuicide = true; - - connection->sendCommand(IrcCommand::createPart("#qt")); - QVERIFY(!suicidal); -} - -void tst_IrcConnection::testDebug() -{ - QString str; - QDebug dbg(&str); - - dbg << static_cast<IrcConnection*>(0); - QCOMPARE(str.trimmed(), QString::fromLatin1("IrcConnection(0x0)")); - str.clear(); - - IrcConnection connection; - dbg << &connection; - QVERIFY(QRegExp("IrcConnection\\(0x[0-9A-Fa-f]+\\) ").exactMatch(str)); - str.clear(); - - connection.setHost("irc.freenode.net"); - dbg << &connection; - QVERIFY(QRegExp("IrcConnection\\(0x[0-9A-Fa-f]+, irc.freenode.net\\) ").exactMatch(str)); - str.clear(); - - connection.setDisplayName("Freenode"); - dbg << &connection; - QVERIFY(QRegExp("IrcConnection\\(0x[0-9A-Fa-f]+, Freenode\\) ").exactMatch(str)); - str.clear(); - - dbg << IrcConnection::Connected; - QCOMPARE(str.trimmed(), QString::fromLatin1("Connected")); - str.clear(); -} - -void tst_IrcConnection::testWarnings() -{ - connection->open(); - QVERIFY(waitForOpened()); - - QVERIFY(connection->isActive()); - - QTest::ignoreMessage(QtWarningMsg, "IrcConnection::setHost() has no effect until re-connect"); - connection->setHost("foo"); - - QTest::ignoreMessage(QtWarningMsg, "IrcConnection::setPort() has no effect until re-connect"); - connection->setPort(1234); - - QTest::ignoreMessage(QtWarningMsg, "IrcConnection::setUserName() has no effect until re-connect"); - connection->setUserName("foo"); - - QTest::ignoreMessage(QtWarningMsg, "IrcConnection::setRealName() has no effect until re-connect"); - connection->setRealName("foo"); - - QTest::ignoreMessage(QtWarningMsg, "IrcConnection::setPassword() has no effect until re-connect"); - connection->setPassword("foo"); - - QTest::ignoreMessage(QtWarningMsg, "IrcConnection::setSaslMechanism() has no effect until re-connect"); - connection->setSaslMechanism("PLAIN"); -} - -class FakeQmlConnection : public IrcConnection -{ - Q_OBJECT - friend class tst_IrcConnection; - -public slots: - // -Wno-overloaded-virtual - QVariant createCtcpReply(const QVariant& request) - { - return QVariant::fromValue(IrcConnection::createCtcpReply(request.value<IrcPrivateMessage*>())); - } -}; - -void tst_IrcConnection::testCtcp() -{ - FriendlyConnection* friendly = static_cast<FriendlyConnection*>(connection.data()); - - // PING - IrcMessage* msg = IrcMessage::fromData(":nick!user@host PRIVMSG communi :\1PING timestamp\1", connection); - QScopedPointer<IrcPrivateMessage> pingRequest(qobject_cast<IrcPrivateMessage*>(msg)); - QVERIFY(pingRequest.data()); - - QScopedPointer<IrcCommand> pingReply(friendly->createCtcpReply(pingRequest.data())); - QVERIFY(pingReply.data()); - QCOMPARE(pingReply->type(), IrcCommand::CtcpReply); - QCOMPARE(pingReply->toString(), QString("NOTICE nick :\1PING timestamp\1")); - - // TIME - msg = IrcMessage::fromData(":nick!user@host PRIVMSG communi :\1TIME\1", connection); - QScopedPointer<IrcPrivateMessage> timeRequest(qobject_cast<IrcPrivateMessage*>(msg)); - QVERIFY(timeRequest); - - QScopedPointer<IrcCommand> timeReply(friendly->createCtcpReply(timeRequest.data())); - QVERIFY(timeReply.data()); - QCOMPARE(timeReply->type(), IrcCommand::CtcpReply); - QCOMPARE(timeReply->toString(), QString("NOTICE nick :\1TIME %1\1").arg(QLocale().toString(QDateTime::currentDateTime(), QLocale::ShortFormat))); - - // VERSION - msg = IrcMessage::fromData(":nick!user@host PRIVMSG communi :\1VERSION\1", connection); - QScopedPointer<IrcPrivateMessage> versionRequest(qobject_cast<IrcPrivateMessage*>(msg)); - QVERIFY(versionRequest.data()); - - QScopedPointer<IrcCommand> versionReply(friendly->createCtcpReply(versionRequest.data())); - QVERIFY(versionReply.data()); - QCOMPARE(versionReply->type(), IrcCommand::CtcpReply); - QVERIFY(versionReply->toString().startsWith("NOTICE nick :\1VERSION ")); - QVERIFY(versionReply->toString().contains(Irc::version())); - QVERIFY(versionReply->toString().endsWith("\1")); - - // SOURCE - msg = IrcMessage::fromData(":nick!user@host PRIVMSG communi :\1SOURCE\1", connection); - QScopedPointer<IrcPrivateMessage> sourceRequest(qobject_cast<IrcPrivateMessage*>(msg)); - QVERIFY(sourceRequest.data()); - - QScopedPointer<IrcCommand> sourceReply(friendly->createCtcpReply(sourceRequest.data())); - QVERIFY(sourceReply.data()); - QCOMPARE(sourceReply->type(), IrcCommand::CtcpReply); - QVERIFY(sourceReply->toString().startsWith("NOTICE nick :\1SOURCE ")); - QVERIFY(sourceReply->toString().contains("http://")); - QVERIFY(sourceReply->toString().endsWith("\1")); - - // CLIENTINFO - msg = IrcMessage::fromData(":nick!user@host PRIVMSG communi :\1CLIENTINFO\1", connection); - QScopedPointer<IrcPrivateMessage> infoRequest(qobject_cast<IrcPrivateMessage*>(msg)); - QVERIFY(infoRequest.data()); - - QScopedPointer<IrcCommand> infoReply(friendly->createCtcpReply(infoRequest.data())); - QVERIFY(infoReply.data()); - QCOMPARE(infoReply->type(), IrcCommand::CtcpReply); - QVERIFY(infoReply->toString().startsWith("NOTICE nick :\1CLIENTINFO ")); - QVERIFY(infoReply->toString().contains("PING")); - QVERIFY(infoReply->toString().contains("TIME")); - QVERIFY(infoReply->toString().contains("VERSION")); - QVERIFY(infoReply->toString().contains("SOURCE")); - QVERIFY(infoReply->toString().endsWith("\1")); - - // QML compatibility - FakeQmlConnection qmlConnection; - qmlConnection.setUserName("user"); - qmlConnection.setNickName("nick"); - qmlConnection.setRealName("real"); - qmlConnection.setPassword("secret"); - qmlConnection.setHost("127.0.0.1"); - qmlConnection.setPort(server->serverPort()); - - TestProtocol* qmlProtocol = new TestProtocol(&qmlConnection); - qmlConnection.setProtocol(qmlProtocol); - qmlConnection.open(); - - QVERIFY(server->waitForNewConnection(200)); - QAbstractSocket* qmlServerSocket = server->nextPendingConnection(); - QVERIFY(qmlServerSocket); - QAbstractSocket* qmlClientSocket = qmlConnection.socket(); - QVERIFY(qmlClientSocket); - QVERIFY(qmlClientSocket->waitForConnected(200)); - - qmlProtocol->written.clear(); - qmlServerSocket->write(":nick!user@host PRIVMSG communi :\1PING qml\1\r\n"); - QVERIFY(qmlServerSocket->waitForBytesWritten(1000)); - QVERIFY(qmlClientSocket->waitForReadyRead(1000)); - QCOMPARE(qmlProtocol->written, QByteArray("NOTICE nick :\1PING qml\1")); - - connection->open(); - QVERIFY(waitForOpened()); - - TestProtocol* protocol = new TestProtocol(friendly); - friendly->setProtocol(protocol); - QCOMPARE(friendly->protocol(), protocol); - QCOMPARE(protocol->connection(), friendly); - - // PING - protocol->written.clear(); - QVERIFY(waitForWritten(":nick!user@host PRIVMSG communi :\1PING timestamp\1\r\n")); - QCOMPARE(protocol->written, QByteArray("NOTICE nick :\1PING timestamp\1")); - - // TIME - protocol->written.clear(); - QVERIFY(waitForWritten(":nick!user@host PRIVMSG communi :\1TIME\1\r\n")); - QVERIFY(protocol->written.startsWith("NOTICE nick :\1TIME ")); - QVERIFY(protocol->written.endsWith("\1")); - - // VERSION - protocol->written.clear(); - QVERIFY(waitForWritten(":nick!user@host PRIVMSG communi :\1VERSION\1\r\n")); - QVERIFY(protocol->written.startsWith("NOTICE nick :\1VERSION ")); - QVERIFY(protocol->written.contains(Irc::version().toUtf8())); - QVERIFY(protocol->written.endsWith("\1")); - - // SOURCE - protocol->written.clear(); - QVERIFY(waitForWritten(":nick!user@host PRIVMSG communi :\1SOURCE\1\r\n")); - QVERIFY(protocol->written.startsWith("NOTICE nick :\1SOURCE ")); - QVERIFY(protocol->written.contains("http://")); - QVERIFY(protocol->written.endsWith("\1")); - - // CLIENTINFO - protocol->written.clear(); - QVERIFY(waitForWritten(":nick!user@host PRIVMSG communi :\1CLIENTINFO\1\r\n")); - QVERIFY(protocol->written.startsWith("NOTICE nick :\1CLIENTINFO ")); - QVERIFY(protocol->written.contains("PING")); - QVERIFY(protocol->written.contains("TIME")); - QVERIFY(protocol->written.contains("VERSION")); - QVERIFY(protocol->written.contains("SOURCE")); - QVERIFY(protocol->written.endsWith("\1")); -} - -QTEST_MAIN(tst_IrcConnection) - -#include "tst_ircconnection.moc" diff --git a/src/libcommuni/tests/auto/irclagtimer/irclagtimer.pro b/src/libcommuni/tests/auto/irclagtimer/irclagtimer.pro deleted file mode 100644 index bcaac4c..0000000 --- a/src/libcommuni/tests/auto/irclagtimer/irclagtimer.pro +++ /dev/null @@ -1,8 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -SOURCES += tst_irclagtimer.cpp - -include(../shared/shared.pri) -include(../auto.pri) diff --git a/src/libcommuni/tests/auto/irclagtimer/tst_irclagtimer.cpp b/src/libcommuni/tests/auto/irclagtimer/tst_irclagtimer.cpp deleted file mode 100644 index 3a69042..0000000 --- a/src/libcommuni/tests/auto/irclagtimer/tst_irclagtimer.cpp +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This test is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -#include "irclagtimer.h" -#include "ircconnection.h" -#include "tst_ircclientserver.h" -#include "tst_ircdata.h" -#include <QtTest/QtTest> - -class tst_IrcLagTimer : public tst_IrcClientServer -{ - Q_OBJECT - -private slots: - void testDefaults(); - void testInterval(); - void testConnection(); - void testLag(); -}; - -void tst_IrcLagTimer::testDefaults() -{ - IrcLagTimer timer; - QCOMPARE(timer.lag(), qint64(-1)); - QVERIFY(!timer.connection()); - QCOMPARE(timer.interval(), 60); -} - -void tst_IrcLagTimer::testInterval() -{ - IrcLagTimer timer; - timer.setInterval(INT_MIN); - QCOMPARE(timer.interval(), INT_MIN); - timer.setInterval(0); - QCOMPARE(timer.interval(), 0); - timer.setInterval(INT_MAX); - QCOMPARE(timer.interval(), INT_MAX); -} - -void tst_IrcLagTimer::testConnection() -{ - IrcLagTimer timer(connection); - QCOMPARE(timer.connection(), connection.data()); - timer.setConnection(0); - QVERIFY(!timer.connection()); - timer.setConnection(connection); - QCOMPARE(timer.connection(), connection.data()); -} - -void tst_IrcLagTimer::testLag() -{ -#if QT_VERSION >= 0x040700 - IrcLagTimer timer(connection); - - QSignalSpy lagSpy(&timer, SIGNAL(lagChanged(qint64))); - QVERIFY(lagSpy.isValid()); - int lagCount = 0; - - connection->open(); - QVERIFY(waitForOpened()); - - QCOMPARE(timer.lag(), -1ll); - - QVERIFY(waitForWritten(tst_IrcData::welcome())); - - // cheat a bit to avoid waiting a 1s interval at minimum... - QMetaObject::invokeMethod(&timer, "_irc_pingServer"); - QVERIFY(clientSocket->waitForBytesWritten(1000)); - QVERIFY(serverSocket->waitForReadyRead(1000)); - - QRegExp rx("PING communi/(\\d+)"); - QString written = QString::fromUtf8(serverSocket->readAll()); - QVERIFY(rx.indexIn(written) != -1); - - waitForWritten(QString(":irc.ser.ver PONG communi communi/%1").arg(QDateTime::currentMSecsSinceEpoch() - 1234ll).toUtf8()); - QVERIFY(timer.lag() >= 1234ll); - QCOMPARE(lagSpy.count(), ++lagCount); - QVERIFY(lagSpy.last().at(0).toLongLong() >= 1234ll); - - timer.setConnection(0); - QCOMPARE(timer.lag(), -1ll); - QCOMPARE(lagSpy.count(), ++lagCount); - QCOMPARE(lagSpy.last().at(0).toLongLong(), -1ll); - - timer.setConnection(connection); - QCOMPARE(timer.lag(), -1ll); - QCOMPARE(lagSpy.count(), lagCount); - - waitForWritten(QString(":irc.ser.ver PONG communi communi/%1").arg(QDateTime::currentMSecsSinceEpoch() - 4321ll).toUtf8()); - QVERIFY(timer.lag() >= 4321ll); - QCOMPARE(lagSpy.count(), ++lagCount); - QVERIFY(lagSpy.last().at(0).toLongLong() >= 4321ll); - - connection->close(); - QCOMPARE(timer.lag(), -1ll); - QCOMPARE(lagSpy.count(), ++lagCount); - QCOMPARE(lagSpy.last().at(0).toLongLong(), -1ll); -#endif // QT_VERSION >= 0x040700 -} - -QTEST_MAIN(tst_IrcLagTimer) - -#include "tst_irclagtimer.moc" diff --git a/src/libcommuni/tests/auto/ircmessage/ircmessage.pro b/src/libcommuni/tests/auto/ircmessage/ircmessage.pro deleted file mode 100644 index c13ba14..0000000 --- a/src/libcommuni/tests/auto/ircmessage/ircmessage.pro +++ /dev/null @@ -1,7 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -SOURCES += tst_ircmessage.cpp - -include(../auto.pri) diff --git a/src/libcommuni/tests/auto/ircmessage/tst_ircmessage.cpp b/src/libcommuni/tests/auto/ircmessage/tst_ircmessage.cpp deleted file mode 100644 index f96c50a..0000000 --- a/src/libcommuni/tests/auto/ircmessage/tst_ircmessage.cpp +++ /dev/null @@ -1,973 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This test is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -#include "ircmessage.h" -#include "ircconnection.h" -#include "ircprotocol.h" -#include <QtTest/QtTest> -#include <QtCore/QRegExp> -#include <QtCore/QTextCodec> -#include <QtCore/QScopedPointer> - -#ifdef Q_OS_LINUX -#include "ircmessagedecoder_p.h" -#endif // Q_OS_LINUX - -class tst_IrcMessage : public QObject -{ - Q_OBJECT - -private slots: - void testDefaults(); - - void testPrefix_data(); - void testPrefix(); - - void testParameters_data(); - void testParameters(); - - void testFlags(); - - void testEncoding_data(); - void testEncoding(); - - void testDecoder_data(); - void testDecoder(); - - void testTags_data(); - void testTags(); - - void testCapabilityMessage_data(); - void testCapabilityMessage(); - void testErrorMessage_data(); - void testErrorMessage(); - void testInviteMessage_data(); - void testInviteMessage(); - void testJoinMessage_data(); - void testJoinMessage(); - void testKickMessage_data(); - void testKickMessage(); - void testNamesMessage(); - void testNickMessage_data(); - void testNickMessage(); - void testNoticeMessage_data(); - void testNoticeMessage(); - void testNumericMessage_data(); - void testNumericMessage(); - void testModeMessage_data(); - void testModeMessage(); - void testMotdMessage(); - void testPartMessage_data(); - void testPartMessage(); - void testPingMessage(); - void testPongMessage(); - void testPrivateMessage_data(); - void testPrivateMessage(); - void testQuitMessage_data(); - void testQuitMessage(); - void testTopicMessage_data(); - void testTopicMessage(); - void testWhoReplyMessage_data(); - void testWhoReplyMessage(); - - void testDebug(); -}; - -void tst_IrcMessage::testDefaults() -{ - IrcMessage msg(0); - QVERIFY(!msg.isValid()); - QVERIFY(!msg.connection()); - QCOMPARE(msg.type(), IrcMessage::Unknown); - QCOMPARE(msg.flags(), IrcMessage::None); - QCOMPARE(msg.encoding(), QByteArray("ISO-8859-15")); - QVERIFY(msg.prefix().isNull()); - QVERIFY(msg.nick().isNull()); - QVERIFY(msg.ident().isNull()); - QVERIFY(msg.host().isNull()); - QVERIFY(msg.command().isNull()); - QVERIFY(msg.parameters().isEmpty()); - QVERIFY(msg.toData().isEmpty()); -} - -void tst_IrcMessage::testPrefix_data() -{ - QTest::addColumn<QString>("prefix"); - QTest::addColumn<QString>("expected"); - QTest::addColumn<QString>("nick"); - QTest::addColumn<QString>("ident"); - QTest::addColumn<QString>("host"); - - QTest::newRow("null") << QString() << QString() << QString() << QString() << QString(); - QTest::newRow("empty") << QString("") << QString("") << QString() << QString() << QString(); - QTest::newRow("space") << QString(" ") << QString(" ") << QString() << QString() << QString(); - QTest::newRow("nick!ident@host") << QString("nick!ident@host") << QString("nick!ident@host") << QString("nick") << QString("ident") << QString("host"); -} - -void tst_IrcMessage::testPrefix() -{ - QFETCH(QString, prefix); - QFETCH(QString, expected); - QFETCH(QString, nick); - QFETCH(QString, ident); - QFETCH(QString, host); - - IrcMessage msg(0); - msg.setPrefix(prefix); - QCOMPARE(msg.prefix(), expected); - QCOMPARE(msg.nick(), nick); - QCOMPARE(msg.ident(), ident); - QCOMPARE(msg.host(), host); -} - -void tst_IrcMessage::testParameters_data() -{ - Irc::registerMetaTypes(); - - QTest::addColumn<QString>("prefix"); - QTest::addColumn<QString>("command"); - QTest::addColumn<QStringList>("params"); - QTest::addColumn<IrcMessage::Type>("type"); - - QTest::newRow("null") << QString() << QString() << QStringList() << IrcMessage::Unknown; - QTest::newRow("message") << QString("nick!ident@host") << QString("PRIVMSG") << QStringList("p") << IrcMessage::Private; - QTest::newRow("notice") << QString("nick!ident@host") << QString("NOTICE") << QStringList("p") << IrcMessage::Notice; -} - -void tst_IrcMessage::testParameters() -{ - QFETCH(QString, prefix); - QFETCH(QString, command); - QFETCH(QStringList, params); - QFETCH(IrcMessage::Type, type); - - IrcConnection connection; - QScopedPointer<IrcMessage> message(IrcMessage::fromParameters(prefix, command, params, &connection)); - QCOMPARE(message->type(), type); - QCOMPARE(message->prefix(), prefix); - QCOMPARE(message->command(), command); - QCOMPARE(message->parameters(), params); -} - -void tst_IrcMessage::testFlags() -{ - IrcMessage msg(0); - msg.setPrefix("a!b@c"); - QCOMPARE(msg.flags(), IrcMessage::None); -} - -void tst_IrcMessage::testEncoding_data() -{ - QTest::addColumn<QByteArray>("encoding"); - QTest::addColumn<QByteArray>("actual"); - QTest::addColumn<bool>("supported"); - - QTest::newRow("null") << QByteArray() << QByteArray("ISO-8859-15") << false; - QTest::newRow("empty") << QByteArray("") << QByteArray("ISO-8859-15") << false; - QTest::newRow("space") << QByteArray(" ") << QByteArray("ISO-8859-15") << false; - QTest::newRow("invalid") << QByteArray("invalid") << QByteArray("ISO-8859-15") << false; - foreach (const QByteArray& codec, QTextCodec::availableCodecs()) - QTest::newRow(codec) << codec << codec << true; -} - -void tst_IrcMessage::testEncoding() -{ - QFETCH(QByteArray, encoding); - QFETCH(QByteArray, actual); - QFETCH(bool, supported); - - if (!supported) - QTest::ignoreMessage(QtWarningMsg, "IrcMessage::setEncoding(): unsupported encoding \"" + encoding + "\" "); - - IrcMessage msg(0); - msg.setEncoding(encoding); - QCOMPARE(msg.encoding(), actual); -} - -void tst_IrcMessage::testDecoder_data() -{ - QTest::addColumn<QByteArray>("encoding"); - QTest::addColumn<QByteArray>("base64"); - - QTest::newRow("windows-1251") << QByteArray("windows-1251") << QByteArray("7+Xt8eju7eXw4Owg7+7k5OXr/O375Q=="); - QTest::newRow("EUC-JP") << QByteArray("EUC-JP") << QByteArray("pKSkxKTHpOKkyaSzpMek4qGhpbml3qXbyMc="); - QTest::newRow("Shift-JIS") << QByteArray("Shift-JIS") << QByteArray("lbaOmoNSgVuDaJVcg1aDdINn"); - QTest::newRow("ISO-8859-15") << QByteArray("ISO-8859-15") << QByteArray("5Gl0aWVucORpduQ="); // TODO: QByteArray("5OQ="); -} - -void tst_IrcMessage::testDecoder() -{ - QFETCH(QByteArray, encoding); - QFETCH(QByteArray, base64); - -#ifdef Q_OS_LINUX - // others have problems with symbols (win) or private headers (osx frameworks) - IrcMessageDecoder decoder; - QString actual = decoder.decode(QByteArray::fromBase64(base64), encoding); - QString expected = QTextCodec::codecForName(encoding)->toUnicode(QByteArray::fromBase64(base64)); - QCOMPARE(actual, expected); -#endif // Q_OS_LINUX -} - -void tst_IrcMessage::testTags_data() -{ - QTest::addColumn<QByteArray>("data"); - QTest::addColumn<QVariantMap>("tags"); - QTest::addColumn<QString>("prefix"); - QTest::addColumn<QString>("command"); - QTest::addColumn<QString>("target"); - QTest::addColumn<QString>("content"); - - QVariantMap tags; - tags.insert("aaa", "bbb"); - tags.insert("ccc", ""); - tags.insert("example.com/ddd", "eee"); - - QTest::newRow("example") << QByteArray("@aaa=bbb;ccc;example.com/ddd=eee :nick!ident@host.com PRIVMSG me :Hello") - << tags << "nick!ident@host.com" << "PRIVMSG" << "me" << "Hello"; -} - -void tst_IrcMessage::testTags() -{ - QFETCH(QByteArray, data); - QFETCH(QVariantMap, tags); - QFETCH(QString, prefix); - QFETCH(QString, command); - QFETCH(QString, target); - QFETCH(QString, content); - - IrcConnection connection; - IrcMessage* message = IrcMessage::fromData(data, &connection); - QCOMPARE(message->tags(), tags); - QCOMPARE(message->prefix(), prefix); - QCOMPARE(message->command(), command); - QCOMPARE(message->property("target").toString(), target); - QCOMPARE(message->property("content").toString(), content); -} - -void tst_IrcMessage::testCapabilityMessage_data() -{ - QTest::addColumn<bool>("valid"); - QTest::addColumn<QByteArray>("data"); - QTest::addColumn<QString>("subCommand"); - QTest::addColumn<QStringList>("capabilities"); - - QTest::newRow("no prefix") << true << QByteArray("CAP") << QString() << QStringList(); - QTest::newRow("empty prefix") << false << QByteArray(": CAP") << QString() << QStringList(); - QTest::newRow("no params") << true << QByteArray(":server CAP") << QString() << QStringList(); - - QTest::newRow("ls") << true << QByteArray(":server CAP * LS :identify-msg sasl") << QString("LS") << (QStringList() << "identify-msg" << "sasl"); - QTest::newRow("ack") << true << QByteArray(":server CAP communi ACK :identify-msg") << QString("ACK") << (QStringList() << "identify-msg"); - QTest::newRow("nak") << true << QByteArray(":server CAP communi NAK :sasl") << QString("NAK") << (QStringList() << "sasl"); -} - -void tst_IrcMessage::testCapabilityMessage() -{ - QFETCH(bool, valid); - QFETCH(QByteArray, data); - QFETCH(QString, subCommand); - QFETCH(QStringList, capabilities); - - IrcConnection connection; - IrcMessage* message = IrcMessage::fromData(data, &connection); - QCOMPARE(message->type(), IrcMessage::Capability); - QCOMPARE(message->command(), QString("CAP")); - QCOMPARE(message->property("valid").toBool(), valid); - QCOMPARE(message->property("subCommand").toString(), subCommand); - QCOMPARE(message->property("capabilities").toStringList(), capabilities); - - IrcCapabilityMessage* capabilityMessage = qobject_cast<IrcCapabilityMessage*>(message); - QVERIFY(capabilityMessage); - QCOMPARE(capabilityMessage->isValid(), valid); - QCOMPARE(capabilityMessage->subCommand(), subCommand); - QCOMPARE(capabilityMessage->capabilities(), capabilities); -} - -void tst_IrcMessage::testErrorMessage_data() -{ - QTest::addColumn<bool>("valid"); - QTest::addColumn<QByteArray>("data"); - QTest::addColumn<QString>("error"); - - QTest::newRow("no prefix") << true << QByteArray("ERROR error1") << QString("error1"); - QTest::newRow("empty prefix") << false << QByteArray(": ERROR error1") << QString("error1"); - QTest::newRow("no params") << false << QByteArray(":server ERROR") << QString(); - QTest::newRow("all ok") << true << QByteArray(":server ERROR error1") << QString("error1"); -} - -void tst_IrcMessage::testErrorMessage() -{ - QFETCH(bool, valid); - QFETCH(QByteArray, data); - QFETCH(QString, error); - - IrcConnection connection; - IrcMessage* message = IrcMessage::fromData(data, &connection); - QCOMPARE(message->type(), IrcMessage::Error); - QCOMPARE(message->command(), QString("ERROR")); - QCOMPARE(message->property("valid").toBool(), valid); - QCOMPARE(message->property("error").toString(), error); - - IrcErrorMessage* errorMessage = qobject_cast<IrcErrorMessage*>(message); - QVERIFY(errorMessage); - QCOMPARE(errorMessage->isValid(), valid); - QCOMPARE(errorMessage->error(), error); -} - -void tst_IrcMessage::testInviteMessage_data() -{ - QTest::addColumn<bool>("valid"); - QTest::addColumn<QByteArray>("data"); - QTest::addColumn<QString>("user"); - QTest::addColumn<QString>("channel"); - - QTest::newRow("no prefix") << true << QByteArray("INVITE Wiz #Dust") << QString("Wiz") << QString("#Dust"); - QTest::newRow("empty prefix") << false << QByteArray(": INVITE Wiz #Dust") << QString("Wiz") << QString("#Dust"); - QTest::newRow("no params") << false << QByteArray(":Angel INVITE") << QString() << QString(); - QTest::newRow("no channel") << false << QByteArray(":Angel INVITE Wiz") << QString("Wiz") << QString(); - QTest::newRow("all ok") << true << QByteArray(":Angel INVITE Wiz #Dust") << QString("Wiz") << QString("#Dust"); -} - -void tst_IrcMessage::testInviteMessage() -{ - QFETCH(bool, valid); - QFETCH(QByteArray, data); - QFETCH(QString, channel); - QFETCH(QString, user); - - IrcConnection connection; - IrcMessage* message = IrcMessage::fromData(data, &connection); - QCOMPARE(message->type(), IrcMessage::Invite); - QCOMPARE(message->command(), QString("INVITE")); - QCOMPARE(message->property("valid").toBool(), valid); - QCOMPARE(message->property("channel").toString(), channel); - QCOMPARE(message->property("user").toString(), user); - - IrcInviteMessage* inviteMessage = qobject_cast<IrcInviteMessage*>(message); - QVERIFY(inviteMessage); - QCOMPARE(inviteMessage->isValid(), valid); - QCOMPARE(inviteMessage->channel(), channel); - QCOMPARE(inviteMessage->user(), user); -} - -void tst_IrcMessage::testJoinMessage_data() -{ - QTest::addColumn<bool>("valid"); - QTest::addColumn<QByteArray>("data"); - QTest::addColumn<QString>("channel"); - - QTest::newRow("no prefix") << true << QByteArray("JOIN #Twilight_zone") << QString("#Twilight_zone"); - QTest::newRow("empty prefix") << false << QByteArray(": JOIN #Twilight_zone") << QString("#Twilight_zone"); - QTest::newRow("no params") << false << QByteArray(":WiZ JOIN") << QString(); - QTest::newRow("all ok") << true << QByteArray(":WiZ JOIN #Twilight_zone") << QString("#Twilight_zone"); -} - -void tst_IrcMessage::testJoinMessage() -{ - QFETCH(bool, valid); - QFETCH(QByteArray, data); - QFETCH(QString, channel); - - IrcConnection connection; - IrcMessage* message = IrcMessage::fromData(data, &connection); - QCOMPARE(message->type(), IrcMessage::Join); - QCOMPARE(message->command(), QString("JOIN")); - QCOMPARE(message->property("valid").toBool(), valid); - QCOMPARE(message->property("channel").toString(), channel); - - IrcJoinMessage* joinMessage = qobject_cast<IrcJoinMessage*>(message); - QVERIFY(joinMessage); - QCOMPARE(joinMessage->isValid(), valid); - QCOMPARE(joinMessage->channel(), channel); -} - -void tst_IrcMessage::testKickMessage_data() -{ - QTest::addColumn<bool>("valid"); - QTest::addColumn<QByteArray>("data"); - QTest::addColumn<QString>("channel"); - QTest::addColumn<QString>("user"); - QTest::addColumn<QString>("reason"); - - QTest::newRow("no prefix") << true << QByteArray("KICK #Finnish John") << QString("#Finnish") << QString("John") << QString(); - QTest::newRow("empty prefix") << false << QByteArray(": KICK #Finnish John") << QString("#Finnish") << QString("John") << QString(); - QTest::newRow("no params") << false << QByteArray(":WiZ KICK") << QString() << QString() << QString(); - QTest::newRow("no user") << false << QByteArray(":WiZ KICK #Finnish") << QString("#Finnish") << QString() << QString(); - QTest::newRow("no reason") << true << QByteArray(":WiZ KICK #Finnish John") << QString("#Finnish") << QString("John") << QString(); - QTest::newRow("all ok") << true << QByteArray(":WiZ KICK #Finnish John :Another reason") << QString("#Finnish") << QString("John") << QString("Another reason"); -} - -void tst_IrcMessage::testKickMessage() -{ - QFETCH(bool, valid); - QFETCH(QByteArray, data); - QFETCH(QString, channel); - QFETCH(QString, user); - QFETCH(QString, reason); - - IrcConnection connection; - IrcMessage* message = IrcMessage::fromData(data, &connection); - QCOMPARE(message->type(), IrcMessage::Kick); - QCOMPARE(message->command(), QString("KICK")); - QCOMPARE(message->property("valid").toBool(), valid); - QCOMPARE(message->property("channel").toString(), channel); - QCOMPARE(message->property("user").toString(), user); - QCOMPARE(message->property("reason").toString(), reason); - - IrcKickMessage* kickMessage = qobject_cast<IrcKickMessage*>(message); - QVERIFY(kickMessage); - QCOMPARE(kickMessage->isValid(), valid); - QCOMPARE(kickMessage->channel(), channel); - QCOMPARE(kickMessage->user(), user); - QCOMPARE(kickMessage->reason(), reason); -} - -void tst_IrcMessage::testNamesMessage() -{ - IrcConnection connection; - IrcNamesMessage message(&connection); - message.setPrefix("nick!ident@host"); - message.setParameters(QStringList() << "chan" << "usr1" << "usr2" << "usr3"); - QVERIFY(message.isValid()); - QCOMPARE(message.type(), IrcMessage::Names); - QCOMPARE(message.command(), QString("NAMES")); - QCOMPARE(message.channel(), QString("chan")); - QCOMPARE(message.names(), QStringList() << "usr1" << "usr2" << "usr3"); -} - -void tst_IrcMessage::testNickMessage_data() -{ - QTest::addColumn<bool>("valid"); - QTest::addColumn<QByteArray>("data"); - QTest::addColumn<QString>("oldNick"); - QTest::addColumn<QString>("newNick"); - - QTest::newRow("no prefix") << true << QByteArray("NICK Kilroy") << QString() << QString("Kilroy"); - QTest::newRow("empty prefix") << false << QByteArray(": NICK Kilroy") << QString() << QString("Kilroy"); - QTest::newRow("no params") << false << QByteArray(":WiZ NICK") << QString("WiZ") << QString(); - QTest::newRow("all ok") << true << QByteArray(":WiZ NICK Kilroy") << QString("WiZ") << QString("Kilroy"); -} - -void tst_IrcMessage::testNickMessage() -{ - QFETCH(bool, valid); - QFETCH(QByteArray, data); - QFETCH(QString, oldNick); - QFETCH(QString, newNick); - - IrcConnection connection; - IrcMessage* message = IrcMessage::fromData(data, &connection); - QCOMPARE(message->type(), IrcMessage::Nick); - QCOMPARE(message->command(), QString("NICK")); - QCOMPARE(message->property("valid").toBool(), valid); - QCOMPARE(message->property("oldNick").toString(), oldNick); - QCOMPARE(message->property("newNick").toString(), newNick); - - IrcNickMessage* nickMessage = qobject_cast<IrcNickMessage*>(message); - QVERIFY(nickMessage); - QCOMPARE(nickMessage->isValid(), valid); - QCOMPARE(nickMessage->oldNick(), oldNick); - QCOMPARE(nickMessage->newNick(), newNick); -} - -void tst_IrcMessage::testNoticeMessage_data() -{ - QTest::addColumn<bool>("valid"); - QTest::addColumn<QByteArray>("data"); - QTest::addColumn<QString>("target"); - QTest::addColumn<QString>("content"); - QTest::addColumn<bool>("priv"); - QTest::addColumn<bool>("reply"); - - QTest::newRow("no prefix") << true << QByteArray("NOTICE Wiz :Hello are you receiving this message ?") << QString("Wiz") << QString("Hello are you receiving this message ?") << false << false; - QTest::newRow("empty prefix") << false << QByteArray(": NOTICE Wiz :Hello are you receiving this message ?") << QString("Wiz") << QString("Hello are you receiving this message ?") << false << false; - QTest::newRow("no params") << false << QByteArray(":Angel NOTICE Wiz") << QString("Wiz") << QString() << false << false; - QTest::newRow("all ok") << true << QByteArray(":Angel NOTICE Wiz :Hello are you receiving this message ?") << QString("Wiz") << QString("Hello are you receiving this message ?") << false << false; - QTest::newRow("private") << true << QByteArray(":Angel NOTICE communi :Hello are you receiving this message ?") << QString("communi") << QString("Hello are you receiving this message ?") << true << false; - QTest::newRow("reply") << true << QByteArray(":Angel NOTICE Wiz :\1Hello are you receiving this message ?\1") << QString("Wiz") << QString("Hello are you receiving this message ?") << false << true; -} - -void tst_IrcMessage::testNoticeMessage() -{ - QFETCH(bool, valid); - QFETCH(QByteArray, data); - QFETCH(QString, target); - QFETCH(QString, content); - QFETCH(bool, priv); - QFETCH(bool, reply); - - IrcConnection connection; - connection.setNickName("communi"); - IrcMessage* message = IrcMessage::fromData(data, &connection); - QCOMPARE(message->type(), IrcMessage::Notice); - QCOMPARE(message->command(), QString("NOTICE")); - QCOMPARE(message->property("valid").toBool(), valid); - QCOMPARE(message->property("target").toString(), target); - QCOMPARE(message->property("content").toString(), content); - QCOMPARE(message->property("private").toBool(), priv); - QCOMPARE(message->property("reply").toBool(), reply); - - IrcNoticeMessage* noticeMessage = qobject_cast<IrcNoticeMessage*>(message); - QVERIFY(noticeMessage); - QCOMPARE(noticeMessage->isValid(), valid); - QCOMPARE(noticeMessage->target(), target); - QCOMPARE(noticeMessage->content(), content); - QCOMPARE(noticeMessage->isPrivate(), priv); - QCOMPARE(noticeMessage->isReply(), reply); -} - -void tst_IrcMessage::testNumericMessage_data() -{ - QTest::addColumn<bool>("valid"); - QTest::addColumn<QByteArray>("data"); - QTest::addColumn<int>("code"); - - QTest::newRow("no prefix") << true << QByteArray("123 Kilroy") << 123; - QTest::newRow("empty prefix") << false << QByteArray(": 123 Kilroy") << 123; - QTest::newRow("no params") << true << QByteArray(":WiZ 456") << 456; - QTest::newRow("all ok") << true << QByteArray(":WiZ 789 Kilroy") << 789; -} - -void tst_IrcMessage::testNumericMessage() -{ - QFETCH(bool, valid); - QFETCH(QByteArray, data); - QFETCH(int, code); - - IrcConnection connection; - IrcMessage* message = IrcMessage::fromData(data, &connection); - QCOMPARE(message->type(), IrcMessage::Numeric); - QVERIFY(message->command().toInt() > 0); - QCOMPARE(message->property("valid").toBool(), valid); - QCOMPARE(message->property("code").toInt(), code); - - IrcNumericMessage* numericMessage = qobject_cast<IrcNumericMessage*>(message); - QVERIFY(numericMessage); - QCOMPARE(numericMessage->isValid(), valid); - QCOMPARE(numericMessage->code(), code); -} - -void tst_IrcMessage::testModeMessage_data() -{ - QTest::addColumn<bool>("valid"); - QTest::addColumn<QByteArray>("data"); - QTest::addColumn<QString>("target"); - QTest::addColumn<QString>("mode"); - QTest::addColumn<QString>("argument"); - - QTest::newRow("no prefix") << true << QByteArray("MODE Kilroy -w") << QString("Kilroy") << QString("-w") << QString(); - QTest::newRow("empty prefix") << false << QByteArray(": MODE Kilroy -w") << QString("Kilroy") << QString("-w") << QString(); - QTest::newRow("no params") << false << QByteArray(":WiZ MODE Kilroy") << QString("Kilroy") << QString() << QString(); - QTest::newRow("all ok") << true << QByteArray(":WiZ MODE Kilroy -w") << QString("Kilroy") << QString("-w") << QString(); - - QTest::newRow("1") << true << QByteArray(":WiZ MODE #Finnish +im") << QString("#Finnish") << QString("+im") << QString(); - QTest::newRow("2") << true << QByteArray(":Angel MODE #Finnish +o Kilroy") << QString("#Finnish") << QString("+o") << QString("Kilroy"); - QTest::newRow("3") << true << QByteArray(":Kilroy MODE #Finnish +v Wiz") << QString("#Finnish") << QString("+v") << QString("Wiz"); - QTest::newRow("4a") << true << QByteArray("MODE #Fins -s") << QString("#Fins") << QString("-s") << QString(); - QTest::newRow("4b") << false << QByteArray(": MODE #Fins -s") << QString("#Fins") << QString("-s") << QString(); - QTest::newRow("5") << true << QByteArray(":WiZ MODE #42 +k oulu") << QString("#42") << QString("+k") << QString("oulu"); - QTest::newRow("6a") << true << QByteArray("MODE #eu-opers +l 10") << QString("#eu-opers") << QString("+l") << QString("10"); - QTest::newRow("6b") << false << QByteArray(": MODE #eu-opers +l 10") << QString("#eu-opers") << QString("+l") << QString("10"); - QTest::newRow("7") << true << QByteArray(":nobody MODE &oulu +b") << QString("&oulu") << QString("+b") << QString(); - QTest::newRow("8") << true << QByteArray(":someone MODE &oulu +b *!*@*") << QString("&oulu") << QString("+b") << QString("*!*@*"); - QTest::newRow("9") << true << QByteArray(":anyone MODE &oulu +b *!*@*.edu") << QString("&oulu") << QString("+b") << QString("*!*@*.edu"); - QTest::newRow("10a") << true << QByteArray("MODE WiZ -w") << QString("WiZ") << QString("-w") << QString(); - QTest::newRow("10b") << false << QByteArray(": MODE WiZ -w") << QString("WiZ") << QString("-w") << QString(); - QTest::newRow("11") << true << QByteArray(":Angel MODE Angel +i") << QString("Angel") << QString("+i") << QString(); - QTest::newRow("12") << true << QByteArray(":WiZ MODE WiZ -o") << QString("WiZ") << QString("-o") << QString(); - - QTest::newRow("args") << true << QByteArray(":someone MODE #chan +lk 10 secret") << QString("#chan") << QString("+lk") << QString("10 secret"); -} - -void tst_IrcMessage::testModeMessage() -{ - QFETCH(bool, valid); - QFETCH(QByteArray, data); - QFETCH(QString, target); - QFETCH(QString, mode); - QFETCH(QString, argument); - - const QString arg = argument.split(" ", QString::SkipEmptyParts).value(0); - const QStringList args = argument.split(" ", QString::SkipEmptyParts); - - IrcConnection connection; - IrcMessage* message = IrcMessage::fromData(data, &connection); - QCOMPARE(message->type(), IrcMessage::Mode); - QCOMPARE(message->command(), QString("MODE")); - QCOMPARE(message->property("valid").toBool(), valid); - QCOMPARE(message->property("target").toString(), target); - QCOMPARE(message->property("mode").toString(), mode); - QCOMPARE(message->property("argument").toString(), arg); - QCOMPARE(message->property("arguments").toStringList(), args); - - IrcModeMessage* modeMessage = qobject_cast<IrcModeMessage*>(message); - QVERIFY(modeMessage); - QCOMPARE(modeMessage->isValid(), valid); - QCOMPARE(modeMessage->target(), target); - QCOMPARE(modeMessage->mode(), mode); - QCOMPARE(modeMessage->argument(), arg); - QCOMPARE(modeMessage->arguments(), args); -} - -void tst_IrcMessage::testMotdMessage() -{ - IrcConnection connection; - IrcMotdMessage message(&connection); - message.setPrefix("nick!ident@host"); - QStringList params; - params += "user"; - params += ":server 375 user :- server Message of the Day"; - params += ":server 372 user :- Welcome..."; - params += ":server 376 user :End of /MOTD command"; - message.setParameters(params); - QVERIFY(message.isValid()); - QCOMPARE(message.type(), IrcMessage::Motd); - QCOMPARE(message.command(), QString("MOTD")); - QCOMPARE(message.lines(), QStringList(params.mid(1))); -} - -void tst_IrcMessage::testPartMessage_data() -{ - QTest::addColumn<bool>("valid"); - QTest::addColumn<QByteArray>("data"); - QTest::addColumn<QString>("channel"); - QTest::addColumn<QString>("reason"); - - QTest::newRow("no prefix") << true << QByteArray("PART #Twilight_zone") << QString("#Twilight_zone") << QString(); - QTest::newRow("empty prefix") << false << QByteArray(": PART #Twilight_zone") << QString("#Twilight_zone") << QString(); - QTest::newRow("no params") << false << QByteArray(":WiZ PART") << QString() << QString(); - QTest::newRow("no reason") << true << QByteArray(":WiZ PART #Twilight_zone") << QString("#Twilight_zone") << QString(); - QTest::newRow("all ok") << true << QByteArray(":WiZ PART #Twilight_zone :Gone to have lunch") << QString("#Twilight_zone") << QString("Gone to have lunch"); -} - -void tst_IrcMessage::testPartMessage() -{ - QFETCH(bool, valid); - QFETCH(QByteArray, data); - QFETCH(QString, channel); - QFETCH(QString, reason); - - IrcConnection connection; - IrcMessage* message = IrcMessage::fromData(data, &connection); - QCOMPARE(message->type(), IrcMessage::Part); - QCOMPARE(message->command(), QString("PART")); - QCOMPARE(message->property("valid").toBool(), valid); - QCOMPARE(message->property("channel").toString(), channel); - QCOMPARE(message->property("reason").toString(), reason); - - IrcPartMessage* partMessage = qobject_cast<IrcPartMessage*>(message); - QVERIFY(partMessage); - QCOMPARE(partMessage->isValid(), valid); - QCOMPARE(partMessage->channel(), channel); - QCOMPARE(partMessage->reason(), reason); -} - -void tst_IrcMessage::testPingMessage() -{ - IrcConnection connection; - IrcMessage* message = IrcMessage::fromData("PING :arg", &connection); - QCOMPARE(message->type(), IrcMessage::Ping); - QCOMPARE(message->command(), QString("PING")); - QCOMPARE(message->property("command").toString(), QString("PING")); - QVERIFY(message->property("valid").toBool()); - QCOMPARE(message->property("argument").toString(), QString("arg")); - - IrcPingMessage* pingMessage = qobject_cast<IrcPingMessage*>(message); - QVERIFY(pingMessage); - QVERIFY(pingMessage->isValid()); - QCOMPARE(pingMessage->argument(), QString("arg")); -} - -void tst_IrcMessage::testPongMessage() -{ - IrcConnection connection; - IrcMessage* message = IrcMessage::fromData("PONG tgt :arg", &connection); - QCOMPARE(message->type(), IrcMessage::Pong); - QCOMPARE(message->command(), QString("PONG")); - QCOMPARE(message->property("command").toString(), QString("PONG")); - QVERIFY(message->property("valid").toBool()); - QCOMPARE(message->property("argument").toString(), QString("arg")); - - IrcPongMessage* pongMessage = qobject_cast<IrcPongMessage*>(message); - QVERIFY(pongMessage); - QVERIFY(pongMessage->isValid()); - QCOMPARE(pongMessage->argument(), QString("arg")); -} - -void tst_IrcMessage::testPrivateMessage_data() -{ - QTest::addColumn<bool>("valid"); - QTest::addColumn<QString>("cap"); - QTest::addColumn<QByteArray>("data"); - QTest::addColumn<QString>("target"); - QTest::addColumn<QString>("content"); - QTest::addColumn<bool>("priv"); - QTest::addColumn<bool>("action"); - QTest::addColumn<bool>("request"); - QTest::addColumn<uint>("flags"); - - QTest::newRow("no prefix") << true << QString() << QByteArray("PRIVMSG Wiz :Hello are you receiving this message ?") << QString("Wiz") << QString("Hello are you receiving this message ?") << false << false << false << static_cast<uint>(IrcMessage::None); - QTest::newRow("empty prefix") << false << QString() << QByteArray(": PRIVMSG Wiz :Hello are you receiving this message ?") << QString("Wiz") << QString("Hello are you receiving this message ?") << false << false << false << static_cast<uint>(IrcMessage::None); - QTest::newRow("no params") << false << QString() << QByteArray(":Angel PRIVMSG Wiz") << QString("Wiz") << QString() << false << false << false << static_cast<uint>(IrcMessage::None); - QTest::newRow("all ok") << true << QString() << QByteArray(":Angel PRIVMSG Wiz :Hello are you receiving this message ?") << QString("Wiz") << QString("Hello are you receiving this message ?") << false << false << false << static_cast<uint>(IrcMessage::None); - QTest::newRow("private") << true << QString() << QByteArray(":Angel PRIVMSG communi :Hello are you receiving this message ?") << QString("communi") << QString("Hello are you receiving this message ?") << true << false << false << static_cast<uint>(IrcMessage::None); - QTest::newRow("action") << true << QString() << QByteArray(":Angel PRIVMSG Wiz :\1ACTION Hello are you receiving this message ?\1") << QString("Wiz") << QString("Hello are you receiving this message ?") << false << true << false << static_cast<uint>(IrcMessage::None); - QTest::newRow("request") << true << QString() << QByteArray(":Angel PRIVMSG Wiz :\1Hello are you receiving this message ?\1") << QString("Wiz") << QString("Hello are you receiving this message ?") << false << false << true << static_cast<uint>(IrcMessage::None); - - QTest::newRow("identified") << true << QString("identify-msg") << QByteArray(":Angel PRIVMSG Wiz :+Hello are you receiving this message ?") << QString("Wiz") << QString("Hello are you receiving this message ?") << false << false << false << static_cast<uint>(IrcMessage::Identified); - QTest::newRow("identified private") << true << QString("identify-msg") << QByteArray(":Angel PRIVMSG communi :+Hello are you receiving this message ?") << QString("communi") << QString("Hello are you receiving this message ?") << true << false << false << static_cast<uint>(IrcMessage::Identified); - QTest::newRow("identified action") << true << QString("identify-msg") << QByteArray(":Angel PRIVMSG Wiz :+\1ACTION Hello are you receiving this message ?\1") << QString("Wiz") << QString("Hello are you receiving this message ?") << false << true << false << static_cast<uint>(IrcMessage::Identified); - QTest::newRow("identified request") << true << QString("identify-msg") << QByteArray(":Angel PRIVMSG Wiz :+\1Hello are you receiving this message ?\1") << QString("Wiz") << QString("Hello are you receiving this message ?") << false << false << true << static_cast<uint>(IrcMessage::Identified); - - QTest::newRow("unidentified") << true << QString("identify-msg") << QByteArray(":Angel PRIVMSG Wiz :-Hello are you receiving this message ?") << QString("Wiz") << QString("Hello are you receiving this message ?") << false << false << false << static_cast<uint>(IrcMessage::Unidentified); - QTest::newRow("unidentified private") << true << QString("identify-msg") << QByteArray(":Angel PRIVMSG communi :-Hello are you receiving this message ?") << QString("communi") << QString("Hello are you receiving this message ?") << true << false << false << static_cast<uint>(IrcMessage::Unidentified); - QTest::newRow("unidentified action") << true << QString("identify-msg") << QByteArray(":Angel PRIVMSG Wiz :-\1ACTION Hello are you receiving this message ?\1") << QString("Wiz") << QString("Hello are you receiving this message ?") << false << true << false << static_cast<uint>(IrcMessage::Unidentified); - QTest::newRow("unidentified request") << true << QString("identify-msg") << QByteArray(":Angel PRIVMSG Wiz :-\1Hello are you receiving this message ?\1") << QString("Wiz") << QString("Hello are you receiving this message ?") << false << false << true << static_cast<uint>(IrcMessage::Unidentified); - - QTest::newRow("no-caps identified") << true << QString() << QByteArray(":Angel PRIVMSG Wiz :+Hello are you receiving this message ?") << QString("Wiz") << QString("+Hello are you receiving this message ?") << false << false << false << static_cast<uint>(IrcMessage::None); - QTest::newRow("no-caps unidentified") << true << QString() << QByteArray(":Angel PRIVMSG Wiz :-Hello are you receiving this message ?") << QString("Wiz") << QString("-Hello are you receiving this message ?") << false << false << false << static_cast<uint>(IrcMessage::None); -} - -class TestProtocol : public IrcProtocol -{ -public: - TestProtocol(const QString& cap, IrcConnection* connection) : IrcProtocol(connection) - { - QSet<QString> caps; - caps.insert(cap); - setAvailableCapabilities(caps); - setActiveCapabilities(caps); - } -}; - -class FriendConnection : public IrcConnection -{ - friend class tst_IrcMessage; -}; - -void tst_IrcMessage::testPrivateMessage() -{ - QFETCH(bool, valid); - QFETCH(QString, cap); - QFETCH(QByteArray, data); - QFETCH(QString, target); - QFETCH(QString, content); - QFETCH(bool, priv); - QFETCH(bool, action); - QFETCH(bool, request); - QFETCH(uint, flags); - - IrcConnection connection; - connection.setNickName("communi"); - TestProtocol protocol(cap, &connection); - static_cast<FriendConnection*>(&connection)->setProtocol(&protocol); - - IrcMessage* message = IrcMessage::fromData(data, &connection); - QCOMPARE(message->type(), IrcMessage::Private); - QCOMPARE(message->command(), QString("PRIVMSG")); - QCOMPARE(message->property("valid").toBool(), valid); - QCOMPARE(message->property("target").toString(), target); - QCOMPARE(message->property("content").toString(), content); - QCOMPARE(message->property("private").toBool(), priv); - QCOMPARE(message->property("action").toBool(), action); - QCOMPARE(message->property("request").toBool(), request); - QCOMPARE(message->property("flags").toUInt(), flags); - - IrcPrivateMessage* privateMessage = qobject_cast<IrcPrivateMessage*>(message); - QVERIFY(privateMessage); - QCOMPARE(privateMessage->isValid(), valid); - QCOMPARE(privateMessage->target(), target); - QCOMPARE(privateMessage->content(), content); - QCOMPARE(privateMessage->isPrivate(), priv); - QCOMPARE(privateMessage->isAction(), action); - QCOMPARE(privateMessage->isRequest(), request); - QCOMPARE(static_cast<uint>(privateMessage->flags()), flags); -} - -void tst_IrcMessage::testQuitMessage_data() -{ - QTest::addColumn<bool>("valid"); - QTest::addColumn<QByteArray>("data"); - QTest::addColumn<QString>("reason"); - - QTest::newRow("no prefix") << true << QByteArray("QUIT :Gone to have lunch") << QString("Gone to have lunch"); - QTest::newRow("empty prefix") << false << QByteArray(": QUIT :Gone to have lunch") << QString("Gone to have lunch"); - QTest::newRow("no params") << true << QByteArray(":WiZ QUIT") << QString(); - QTest::newRow("all ok") << true << QByteArray(":WiZ QUIT :Gone to have lunch") << QString("Gone to have lunch"); -} - -void tst_IrcMessage::testQuitMessage() -{ - QFETCH(bool, valid); - QFETCH(QByteArray, data); - QFETCH(QString, reason); - - IrcConnection connection; - IrcMessage* message = IrcMessage::fromData(data, &connection); - QCOMPARE(message->type(), IrcMessage::Quit); - QCOMPARE(message->command(), QString("QUIT")); - QCOMPARE(message->property("valid").toBool(), valid); - QCOMPARE(message->property("reason").toString(), reason); - - IrcQuitMessage* quitMessage = qobject_cast<IrcQuitMessage*>(message); - QVERIFY(quitMessage); - QCOMPARE(quitMessage->isValid(), valid); - QCOMPARE(quitMessage->reason(), reason); -} - -void tst_IrcMessage::testTopicMessage_data() -{ - QTest::addColumn<bool>("valid"); - QTest::addColumn<QByteArray>("data"); - QTest::addColumn<QString>("channel"); - QTest::addColumn<QString>("topic"); - QTest::addColumn<bool>("reply"); - - QTest::newRow("no prefix") << true << QByteArray("TOPIC #test") << QString("#test") << QString() << false; - QTest::newRow("empty prefix") << false << QByteArray(": TOPIC #test") << QString("#test") << QString() << false; - QTest::newRow("no params") << false << QByteArray(":WiZ TOPIC") << QString() << QString() << false; - QTest::newRow("no topic") << true << QByteArray(":WiZ TOPIC #test") << QString("#test") << QString() << false; - QTest::newRow("all ok") << true << QByteArray(":WiZ TOPIC #test :another topic") << QString("#test") << QString("another topic") << false; - // TODO: QTest::newRow("numeric") << true << QByteArray(":server 332 user #test :foo bar") << QString("#test") << QString("foo bar") << true; -} - -void tst_IrcMessage::testTopicMessage() -{ - QFETCH(bool, valid); - QFETCH(QByteArray, data); - QFETCH(QString, channel); - QFETCH(QString, topic); - QFETCH(bool, reply); - - IrcConnection connection; - IrcMessage* message = IrcMessage::fromData(data, &connection); - QCOMPARE(message->type(), IrcMessage::Topic); - QCOMPARE(message->command(), QString("TOPIC")); - QCOMPARE(message->property("valid").toBool(), valid); - QCOMPARE(message->property("channel").toString(), channel); - QCOMPARE(message->property("topic").toString(), topic); - QCOMPARE(message->property("reply").toBool(), reply); - - IrcTopicMessage* topicMessage = qobject_cast<IrcTopicMessage*>(message); - QVERIFY(topicMessage); - QCOMPARE(topicMessage->isValid(), valid); - QCOMPARE(topicMessage->channel(), channel); - QCOMPARE(topicMessage->topic(), topic); - QCOMPARE(topicMessage->isReply(), reply); -} - -void tst_IrcMessage::testWhoReplyMessage_data() -{ - QTest::addColumn<bool>("valid"); - QTest::addColumn<QString>("prefix"); - QTest::addColumn<QStringList>("params"); - QTest::addColumn<QString>("mask"); - QTest::addColumn<QString>("server"); - QTest::addColumn<bool>("away"); - QTest::addColumn<bool>("servOp"); - QTest::addColumn<QString>("realName"); - - QTest::newRow("normal") << true << "nick!ident@host" - << (QStringList() << "#mask" << "irc.ser.ver" << "H@" << "real name") - << "#mask" << "irc.ser.ver" << false << false << "real name"; - - QTest::newRow("away") << true << "nick!ident@host" - << (QStringList() << "*" << "127.0.0.1" << "G@" << "real name") - << "*" << "127.0.0.1" << true << false << "real name"; - - QTest::newRow("serv op") << true << "nick!ident@host" - << (QStringList() << "*" << "127.0.0.1" << "H*@" << "real name") - << "*" << "127.0.0.1" << false << true << "real name"; - - QTest::newRow("no name") << true << "nick!ident@host" - << (QStringList() << "#mask" << "irc.ser.ver" << "H@" << "") - << "#mask" << "irc.ser.ver" << false << false << ""; -} - -void tst_IrcMessage::testWhoReplyMessage() -{ - QFETCH(bool, valid); - QFETCH(QString, prefix); - QFETCH(QStringList, params); - QFETCH(QString, mask); - QFETCH(QString, server); - QFETCH(bool, away); - QFETCH(bool, servOp); - QFETCH(QString, realName); - - IrcConnection connection; - IrcWhoReplyMessage message(&connection); - message.setPrefix(prefix); - message.setParameters(params); - QCOMPARE(message.isValid(), valid); - QCOMPARE(message.type(), IrcMessage::WhoReply); - // TODO: QCOMPARE(message.command(), QString::number(Irc::RPL_WHOREPLY)); - QCOMPARE(message.mask(), mask); - QCOMPARE(message.server(), server); - QCOMPARE(message.isAway(), away); - QCOMPARE(message.isServOp(), servOp); - QCOMPARE(message.realName(), realName); - - QCOMPARE(message.property("valid").toBool(), valid); - QCOMPARE(message.property("mask").toString(), mask); - QCOMPARE(message.property("server").toString(), server); - QCOMPARE(message.property("away").toBool(), away); - QCOMPARE(message.property("servOp").toBool(), servOp); - QCOMPARE(message.property("realName").toString(), realName); -} - -void tst_IrcMessage::testDebug() -{ - QString str; - QDebug dbg(&str); - - dbg << static_cast<IrcMessage*>(0); - QCOMPARE(str.trimmed(), QString::fromLatin1("IrcMessage(0x0)")); - str.clear(); - - IrcMessage message(0); - dbg << &message; - QVERIFY(QRegExp("IrcMessage\\(0x[0-9A-Fa-f]+, flags=\\(None\\)\\) ").exactMatch(str)); - str.clear(); - - message.setObjectName("foo"); - dbg << &message; - QVERIFY(QRegExp("IrcMessage\\(0x[0-9A-Fa-f]+, name=foo, flags=\\(None\\)\\) ").exactMatch(str)); - str.clear(); - - message.setPrefix("nick!ident@host"); - dbg << &message; - QVERIFY(QRegExp("IrcMessage\\(0x[0-9A-Fa-f]+, name=foo, flags=\\(None\\), prefix=nick!ident@host\\) ").exactMatch(str)); - str.clear(); - - message.setCommand("COMMAND"); - dbg << &message; - QVERIFY(QRegExp("IrcMessage\\(0x[0-9A-Fa-f]+, name=foo, flags=\\(None\\), prefix=nick!ident@host, command=COMMAND\\) ").exactMatch(str)); - str.clear(); - - dbg << IrcMessage::Join; - QCOMPARE(str.trimmed(), QString::fromLatin1("Join")); - str.clear(); - - dbg << IrcMessage::Unidentified; - QCOMPARE(str.trimmed(), QString::fromLatin1("Unidentified")); - str.clear(); - - dbg << (IrcMessage::Own | IrcMessage::Identified | IrcMessage::Unidentified); - QCOMPARE(str.trimmed(), QString::fromLatin1("(Own|Identified|Unidentified)")); - str.clear(); - - dbg << IrcModeMessage::Channel; - QCOMPARE(str.trimmed(), QString::fromLatin1("Channel")); - str.clear(); -} - -QTEST_MAIN(tst_IrcMessage) - -#include "tst_ircmessage.moc" diff --git a/src/libcommuni/tests/auto/ircnetwork/ircnetwork.pro b/src/libcommuni/tests/auto/ircnetwork/ircnetwork.pro deleted file mode 100644 index d4bebfb..0000000 --- a/src/libcommuni/tests/auto/ircnetwork/ircnetwork.pro +++ /dev/null @@ -1,8 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -SOURCES += tst_ircnetwork.cpp - -include(../shared/shared.pri) -include(../auto.pri) diff --git a/src/libcommuni/tests/auto/ircnetwork/tst_ircnetwork.cpp b/src/libcommuni/tests/auto/ircnetwork/tst_ircnetwork.cpp deleted file mode 100644 index 5237659..0000000 --- a/src/libcommuni/tests/auto/ircnetwork/tst_ircnetwork.cpp +++ /dev/null @@ -1,408 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This test is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -#include "ircnetwork.h" -#include "irccommand.h" -#include "ircconnection.h" -#include <QtTest/QtTest> -#include <QtCore/QRegExp> -#include "tst_ircclientserver.h" -#include "tst_ircdata.h" -#ifdef Q_OS_LINUX -#include "ircnetwork_p.h" -#endif // Q_OS_LINUX - -class tst_IrcNetwork : public tst_IrcClientServer -{ - Q_OBJECT - -private slots: - void testDefaults(); - - void testInfo_data(); - void testInfo(); - - void testCapabilities_data(); - void testCapabilities(); - - void testDebug(); -}; - -void tst_IrcNetwork::testDefaults() -{ - IrcConnection connection; - IrcNetwork* network = connection.network(); - QVERIFY(!network->isInitialized()); - QVERIFY(network->name().isNull()); - QVERIFY(network->modes().isEmpty()); - QVERIFY(network->prefixes().isEmpty()); - QVERIFY(network->channelTypes().isEmpty()); - QVERIFY(network->availableCapabilities().isEmpty()); - QVERIFY(network->requestedCapabilities().isEmpty()); - QVERIFY(network->activeCapabilities().isEmpty()); -} - -void tst_IrcNetwork::testInfo_data() -{ - QTest::addColumn<QByteArray>("welcome"); - QTest::addColumn<QString>("name"); - QTest::addColumn<QString>("modes"); - QTest::addColumn<QString>("prefixes"); - QTest::addColumn<QString>("channelTypes"); - - QTest::newRow("freenode") << tst_IrcData::welcome("freenode") << "freenode" << "ov" << "@+" << "#"; - QTest::newRow("ircnet") << tst_IrcData::welcome("ircnet") << "IRCNet" << "ov" << "@+" << "#&!+"; - QTest::newRow("euirc") << tst_IrcData::welcome("euirc") << "euIRCnet" << "qaohv" << "*!@%+" << "#&+"; -} - -void tst_IrcNetwork::testInfo() -{ - QFETCH(QByteArray, welcome); - QFETCH(QString, name); - QFETCH(QString, modes); - QFETCH(QString, prefixes); - QFETCH(QString, channelTypes); - - IrcNetwork* network = connection->network(); - - QSignalSpy initSpy(network, SIGNAL(initialized())); - QSignalSpy nameSpy(network, SIGNAL(nameChanged(QString))); - QSignalSpy modesSpy(network, SIGNAL(modesChanged(QStringList))); - QSignalSpy prefixesSpy(network, SIGNAL(prefixesChanged(QStringList))); - QSignalSpy channelTypesSpy(network, SIGNAL(channelTypesChanged(QStringList))); - - QVERIFY(initSpy.isValid()); - QVERIFY(nameSpy.isValid()); - QVERIFY(modesSpy.isValid()); - QVERIFY(prefixesSpy.isValid()); - QVERIFY(channelTypesSpy.isValid()); - - connection->open(); - QVERIFY(waitForOpened()); - QVERIFY(waitForWritten(welcome)); - - QVERIFY(network->isInitialized()); - - QCOMPARE(network->name(), name); - QCOMPARE(network->modes(), modes.split("", QString::SkipEmptyParts)); - QCOMPARE(network->prefixes(), prefixes.split("", QString::SkipEmptyParts)); - QCOMPARE(network->channelTypes(), channelTypes.split("", QString::SkipEmptyParts)); - - QCOMPARE(network->prefixes().count(), network->modes().count()); - for (int i = 0; i < network->prefixes().count(); ++i) { - QString prefix = network->prefixes().at(i); - QString mode = network->modes().at(i); - QCOMPARE(network->prefixToMode(prefix), mode); - QCOMPARE(network->modeToPrefix(mode), prefix); - } - - QVERIFY(!network->channelTypes().isEmpty()); - QVERIFY(!network->isChannel("foo")); - QVERIFY(network->isChannel(network->channelTypes().at(0) + "foo")); - - QVERIFY(!network->channelModes(IrcNetwork::TypeA).isEmpty()); - QVERIFY(!network->channelModes(IrcNetwork::TypeB).isEmpty()); - QVERIFY(!network->channelModes(IrcNetwork::TypeC).isEmpty()); - QVERIFY(!network->channelModes(IrcNetwork::TypeD).isEmpty()); - - if (welcome.contains("NICKLEN=")) - QVERIFY(network->numericLimit(IrcNetwork::NickLength) != -1); - else - QCOMPARE(network->numericLimit(IrcNetwork::NickLength), -1); - if (welcome.contains("CHANNELLEN=")) - QVERIFY(network->numericLimit(IrcNetwork::ChannelLength) != -1); - else - QCOMPARE(network->numericLimit(IrcNetwork::ChannelLength), -1); - if (welcome.contains("TOPICLEN=")) - QVERIFY(network->numericLimit(IrcNetwork::TopicLength) != -1); - else - QCOMPARE(network->numericLimit(IrcNetwork::TopicLength), -1); - if (welcome.contains("KICKLEN=")) - QVERIFY(network->numericLimit(IrcNetwork::KickReasonLength) != -1); - else - QCOMPARE(network->numericLimit(IrcNetwork::KickReasonLength), -1); - if (welcome.contains("AWAYLEN=")) - QVERIFY(network->numericLimit(IrcNetwork::AwayReasonLength) != -1); - else - QCOMPARE(network->numericLimit(IrcNetwork::AwayReasonLength), -1); - if (welcome.contains("MODES=")) - QVERIFY(network->numericLimit(IrcNetwork::ModeCount) != -1); - else - QCOMPARE(network->numericLimit(IrcNetwork::ModeCount), -1); - - QCOMPARE(network->numericLimit(IrcNetwork::MessageLength), 512); // hard-coded :/ - - if (welcome.contains("MAXLIST=")) { - bool limited = false; - foreach (const QString& mode, network->modes()) - if (network->modeLimit(mode) != -1) - limited = true; - QVERIFY(limited); - } - - if (welcome.contains("CHANLIMIT=")) { - bool limited = false; - foreach (const QString& type, network->channelTypes()) - if (network->channelLimit(type) != -1) - limited = true; - QVERIFY(limited); - } - - if (welcome.contains("TARGMAX=")) { - bool limited = false; - IrcCommand command; - for (int i = IrcCommand::Admin; i <= IrcCommand::Whowas; ++i) { - if (i != IrcCommand::Custom) { - command.setType(static_cast<IrcCommand::Type>(i)); - QString cmd = command.toString().split(" ", QString::SkipEmptyParts).value(0); - if (network->targetLimit(cmd) != -1) - limited = true; - } - } - QVERIFY(limited); - } - - QCOMPARE(initSpy.count(), 1); - QCOMPARE(nameSpy.count(), 1); - QCOMPARE(modesSpy.count(), 1); - QCOMPARE(prefixesSpy.count(), 1); - QCOMPARE(channelTypesSpy.count(), 1); - - QCOMPARE(nameSpy.first().first().toString(), name); - QCOMPARE(modesSpy.first().first().toStringList(), modes.split("", QString::SkipEmptyParts)); - QCOMPARE(prefixesSpy.first().first().toStringList(), prefixes.split("", QString::SkipEmptyParts)); - QCOMPARE(channelTypesSpy.first().first().toStringList(), channelTypes.split("", QString::SkipEmptyParts)); -} - -void tst_IrcNetwork::testCapabilities_data() -{ - QTest::addColumn<QString>("initialCaps"); - QTest::addColumn<QString>("requestedCaps"); - QTest::addColumn<QString>("ackedCaps"); - QTest::addColumn<QString>("nakedCaps"); - QTest::addColumn<QString>("listedCaps"); - QTest::addColumn<QString>("availableCaps"); - QTest::addColumn<QString>("activeCaps"); - - QTest::newRow("empty") << QString() - << QString() - << QString() - << QString() - << QString() - << QString() - << QString(); - - QTest::newRow("sasl") << QString("multi-prefix sasl identify-msg") // initial - << QString("sasl") // requested - << QString("sasl") // acked - << QString() // naked - << QString("sasl identify-msg multi-prefix") // listed - << QString("sasl identify-msg multi-prefix") // available - << QString("sasl"); // active - - QTest::newRow("unk") << QString("multi-prefix sasl identify-msg") // initial - << QString("unk") // requested - << QString() // acked - << QString("nak") // naked - << QString("multi-prefix sasl identify-msg") // listed - << QString("multi-prefix sasl identify-msg") // available - << QString(); // active - - QTest::newRow("nak all") << QString("multi-prefix sasl identify-msg") // initial - << QString("sasl identify-msg multi-prefix") // requested - << QString() // acked - << QString("sasl identify-msg multi-prefix") // naked - << QString("sasl identify-msg multi-prefix") // listed - << QString("sasl identify-msg multi-prefix") // available - << QString(); // active - - QTest::newRow("sticky") << QString("=sticky") // initial - << QString("sticky") // requested - << QString("=sticky") // acked - << QString() // naked - << QString() // listed - << QString("sticky") // available - << QString("sticky"); // active - - QTest::newRow("ackmod") << QString("~ackmod") // initial - << QString("ackmod") // requested - << QString("~ackmod") // acked - << QString() // naked - << QString() // listed - << QString("ackmod") // available - << QString("ackmod"); // active - - QTest::newRow("acksticky") << QString("~=acksticky") // initial - << QString("acksticky") // requested - << QString("=~acksticky") // acked - << QString() // naked - << QString() // listed - << QString("acksticky") // available - << QString("acksticky"); // active -} - -static bool equalCaps(const QString& left, const QString& right) -{ - return left.split(" ", QString::SkipEmptyParts).toSet() == right.split(" ", QString::SkipEmptyParts).toSet(); -} - -void tst_IrcNetwork::testCapabilities() -{ - QFETCH(QString, initialCaps); - QFETCH(QString, requestedCaps); - QFETCH(QString, ackedCaps); - QFETCH(QString, nakedCaps); - QFETCH(QString, listedCaps); - QFETCH(QString, availableCaps); - QFETCH(QString, activeCaps); - - IrcNetwork* network = connection->network(); - - QSignalSpy availableSpy(network, SIGNAL(availableCapabilitiesChanged(QStringList))); - QSignalSpy requestedSpy(network, SIGNAL(requestedCapabilitiesChanged(QStringList))); - QSignalSpy activeSpy(network, SIGNAL(activeCapabilitiesChanged(QStringList))); - QSignalSpy requestingSpy(network, SIGNAL(requestingCapabilities())); - - QVERIFY(availableSpy.isValid()); - QVERIFY(requestedSpy.isValid()); - QVERIFY(activeSpy.isValid()); - QVERIFY(requestingSpy.isValid()); - - int availableCount = 0; - int requestedCount = 0; - int activeCount = 0; - int requestingCount = 0; - - if (!requestedCaps.isEmpty()) { - network->setRequestedCapabilities(requestedCaps.split(" ", QString::SkipEmptyParts)); - ++requestedCount; - } - QCOMPARE(requestedSpy.count(), requestedCount); - - foreach (const QString& cap, availableCaps.split(" ", QString::SkipEmptyParts)) - QVERIFY(!network->hasCapability(cap)); - foreach (const QString& cap, activeCaps.split(" ", QString::SkipEmptyParts)) - QVERIFY(!network->isCapable(cap)); - - connection->open(); - QVERIFY(waitForOpened()); - - if (!initialCaps.isEmpty()) { - // typical ircd: "*", znc: "unknown-nick" - QVERIFY(waitForWritten(":irc.ser.ver CAP unknown-nick LS :" + initialCaps.toUtf8())); - ++availableCount; - ++requestingCount; - } - QCOMPARE(availableSpy.count(), availableCount); - QCOMPARE(requestingSpy.count(), requestingCount); - - foreach (const QString& cap, availableCaps.split(" ", QString::SkipEmptyParts)) - QVERIFY(network->hasCapability(cap)); - foreach (const QString& cap, activeCaps.split(" ", QString::SkipEmptyParts)) - QVERIFY(!network->isCapable(cap)); - - if (!ackedCaps.isEmpty()) { - QVERIFY(waitForWritten(":irc.ser.ver CAP jpnurmi ACK :" + ackedCaps.toUtf8())); - ++activeCount; - } - QCOMPARE(activeSpy.count(), activeCount); - - foreach (const QString& cap, availableCaps.split(" ", QString::SkipEmptyParts)) - QVERIFY(network->hasCapability(cap)); - foreach (const QString& cap, activeCaps.split(" ", QString::SkipEmptyParts)) - QVERIFY(network->isCapable(cap)); - - if (!nakedCaps.isEmpty()) - QVERIFY(waitForWritten(":irc.ser.ver CAP jpnurmi NAK :" + nakedCaps.toUtf8())); - - QVERIFY(waitForWritten(tst_IrcData::welcome())); - - if (!listedCaps.isEmpty()) { - QVERIFY(waitForWritten(":irc.ser.ver CAP jpnurmi LS :" + listedCaps.toUtf8())); - if (!equalCaps(listedCaps, initialCaps)) - ++availableCount; - } - QCOMPARE(availableSpy.count(), availableCount); - - QVERIFY(equalCaps(network->availableCapabilities().join(" "), availableCaps)); - QVERIFY(equalCaps(network->activeCapabilities().join(" "), activeCaps)); - QVERIFY(equalCaps(network->requestedCapabilities().join(" "), requestedCaps)); - - QCOMPARE(requestedSpy.count(), requestedCount); - QCOMPARE(requestingSpy.count(), requestingCount); - QCOMPARE(availableSpy.count(), availableCount); - QCOMPARE(activeSpy.count(), activeCount); - - foreach (const QString& cap, availableCaps.split(" ", QString::SkipEmptyParts)) - QVERIFY(network->hasCapability(cap)); - foreach (const QString& cap, activeCaps.split(" ", QString::SkipEmptyParts)) - QVERIFY(network->isCapable(cap)); - - // -> CLEAR - QString clearCaps; - foreach (const QString& cap, activeCaps.split(" ", QString::SkipEmptyParts)) - clearCaps += QString("-") + cap; - QVERIFY(waitForWritten(":irc.ser.ver CAP jpnurmi ACK :" + clearCaps.toUtf8())); - - if (!activeCaps.isEmpty()) - ++activeCount; - QCOMPARE(activeSpy.count(), activeCount); -} - -void tst_IrcNetwork::testDebug() -{ - QString str; - QDebug dbg(&str); - - dbg << static_cast<IrcNetwork*>(0); - QCOMPARE(str.trimmed(), QString::fromLatin1("IrcNetwork(0x0)")); - str.clear(); - - IrcConnection connection; - dbg << connection.network(); - QVERIFY(QRegExp("IrcNetwork\\(0x[0-9A-Fa-f]+\\) ").exactMatch(str)); - str.clear(); - - connection.network()->setObjectName("obj"); - dbg << connection.network(); - QVERIFY(QRegExp("IrcNetwork\\(0x[0-9A-Fa-f]+, name=obj\\) ").exactMatch(str)); - str.clear(); - -#ifdef Q_OS_LINUX - // others have problems with symbols (win) or private headers (osx frameworks) - IrcNetworkPrivate::get(connection.network())->name = "net"; - dbg << connection.network(); - QVERIFY(QRegExp("IrcNetwork\\(0x[0-9A-Fa-f]+, name=obj, network=net\\) ").exactMatch(str)); - str.clear(); -#endif // Q_OS_LINUX - - dbg << IrcNetwork::MessageLength; - QCOMPARE(str.trimmed(), QString::fromLatin1("MessageLength")); - str.clear(); - - dbg << IrcNetwork::AllTypes; - QCOMPARE(str.trimmed(), QString::fromLatin1("AllTypes")); - str.clear(); - - dbg << (IrcNetwork::TypeA | IrcNetwork::TypeD); - QCOMPARE(str.trimmed(), QString::fromLatin1("(TypeA|TypeD)")); - str.clear(); - - dbg << (IrcNetwork::TypeB | IrcNetwork::TypeC); - QCOMPARE(str.trimmed(), QString::fromLatin1("(TypeB|TypeC)")); - str.clear(); - - dbg << (IrcNetwork::TypeA | IrcNetwork::TypeB | IrcNetwork::TypeC | IrcNetwork::TypeD); - QCOMPARE(str.trimmed(), QString::fromLatin1("(AllTypes)")); - str.clear(); -} - -QTEST_MAIN(tst_IrcNetwork) - -#include "tst_ircnetwork.moc" diff --git a/src/libcommuni/tests/auto/ircpalette/ircpalette.pro b/src/libcommuni/tests/auto/ircpalette/ircpalette.pro deleted file mode 100644 index a31264d..0000000 --- a/src/libcommuni/tests/auto/ircpalette/ircpalette.pro +++ /dev/null @@ -1,7 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -SOURCES += tst_ircpalette.cpp - -include(../auto.pri) diff --git a/src/libcommuni/tests/auto/ircpalette/tst_ircpalette.cpp b/src/libcommuni/tests/auto/ircpalette/tst_ircpalette.cpp deleted file mode 100644 index 756b78d..0000000 --- a/src/libcommuni/tests/auto/ircpalette/tst_ircpalette.cpp +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This test is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -#include "irc.h" -#include "ircpalette.h" -#include "irctextformat.h" -#include <QtTest/QtTest> - -class tst_IrcPalette : public QObject -{ - Q_OBJECT - -private slots: - void testDefaults(); - void testColorNames(); - void testProperties_data(); - void testProperties(); -}; - -void tst_IrcPalette::testDefaults() -{ - IrcTextFormat format; - QVERIFY(format.palette()); - IrcPalette* palette = format.palette(); - QVERIFY(!palette->colorNames().isEmpty()); - for (int i = Irc::White; i <= Irc::LightGray; ++i) - QVERIFY(!palette->colorName(i).isEmpty()); - QCOMPARE(palette->colorName(-1, "fallback"), QString("fallback")); -} - -void tst_IrcPalette::testColorNames() -{ - IrcTextFormat format; - QVERIFY(format.palette()); - IrcPalette* palette = format.palette(); - QMap<int, QString> colorNames; - for (int i = -1; i <= 123; ++i) { - colorNames.insert(i, QString::number(i)); - palette->setColorName(i, QString::number(i)); - QCOMPARE(palette->colorName(i), QString::number(i)); - } - QCOMPARE(palette->colorNames(), colorNames); - - QMap<int, QString> dummies; - for (int i = 0; i < 100; i += 3) - dummies.insert(i, QString::number(i) + "-dummy"); - palette->setColorNames(dummies); - QCOMPARE(palette->colorNames(), dummies); -} - -void tst_IrcPalette::testProperties_data() -{ - QTest::addColumn<Irc::Color>("color"); - QTest::addColumn<QString>("prop"); - - QTest::newRow("white") << Irc::White << "white"; - QTest::newRow("black") << Irc::Black << "black"; - QTest::newRow("blue") << Irc::Blue << "blue"; - QTest::newRow("green") << Irc::Green << "green"; - QTest::newRow("red") << Irc::Red << "red"; - QTest::newRow("brown") << Irc::Brown << "brown"; - QTest::newRow("purple") << Irc::Purple << "purple"; - QTest::newRow("orange") << Irc::Orange << "orange"; - QTest::newRow("yellow") << Irc::Yellow << "yellow"; - QTest::newRow("lightGreen") << Irc::LightGreen << "lightGreen"; - QTest::newRow("cyan") << Irc::Cyan << "cyan"; - QTest::newRow("lightCyan") << Irc::LightCyan << "lightCyan"; - QTest::newRow("lightBlue") << Irc::LightBlue << "lightBlue"; - QTest::newRow("pink") << Irc::Pink << "pink"; - QTest::newRow("gray") << Irc::Gray << "gray"; - QTest::newRow("lightGray") << Irc::LightGray << "lightGray"; -} - -void tst_IrcPalette::testProperties() -{ - QFETCH(Irc::Color, color); - QFETCH(QString, prop); - - IrcTextFormat format; - QVERIFY(format.palette()); - IrcPalette* palette = format.palette(); - - QCOMPARE(palette->property(prop.toUtf8()).toString(), prop.toLower()); - - QVERIFY(palette->setProperty(prop.toUtf8(), QString("dummy"))); - QCOMPARE(palette->colorName(color), QString("dummy")); - QCOMPARE(palette->property(prop.toUtf8()).toString(), QString("dummy")); - - palette->setColorName(color, QString("dummier")); - QCOMPARE(palette->colorName(color), QString("dummier")); - QCOMPARE(palette->property(prop.toUtf8()).toString(), QString("dummier")); -} - -QTEST_MAIN(tst_IrcPalette) - -#include "tst_ircpalette.moc" diff --git a/src/libcommuni/tests/auto/irctextformat/irctextformat.pro b/src/libcommuni/tests/auto/irctextformat/irctextformat.pro deleted file mode 100644 index 3b90b66..0000000 --- a/src/libcommuni/tests/auto/irctextformat/irctextformat.pro +++ /dev/null @@ -1,7 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -SOURCES += tst_irctextformat.cpp - -include(../auto.pri) diff --git a/src/libcommuni/tests/auto/irctextformat/tst_irctextformat.cpp b/src/libcommuni/tests/auto/irctextformat/tst_irctextformat.cpp deleted file mode 100644 index 377a438..0000000 --- a/src/libcommuni/tests/auto/irctextformat/tst_irctextformat.cpp +++ /dev/null @@ -1,192 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This test is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -#include "irc.h" -#include "irctextformat.h" -#include "ircpalette.h" -#include <QtTest/QtTest> - -class tst_IrcTextFormat : public QObject -{ - Q_OBJECT - -private slots: - void testDefaults(); - void testPlainText_data(); - void testPlainText(); - void testHtml_data(); - void testHtml(); - void testUrls_data(); - void testUrls(); -}; - -void tst_IrcTextFormat::testDefaults() -{ - IrcTextFormat format; - QVERIFY(format.palette()); - QVERIFY(!format.urlPattern().isEmpty()); - QCOMPARE(format.spanFormat(), IrcTextFormat::SpanStyle); -} - -void tst_IrcTextFormat::testPlainText_data() -{ - QTest::addColumn<QString>("input"); - QTest::addColumn<QString>("output"); - - QTest::newRow("bold") << "\02bold\x0f" << "bold"; - QTest::newRow("line-through") << "\x13line-through\x0f" << "line-through"; - QTest::newRow("underline") << "\x15underline\x0f" << "underline"; - QTest::newRow("inverse") << "\x16inverse\x0f" << "inverse"; - QTest::newRow("italic") << "\x1ditalic\x0f" << "italic"; - QTest::newRow("underline") << "\x1funderline\x0f" << "underline"; - - IrcTextFormat format; - QVERIFY(format.palette()); - IrcPalette* palette = format.palette(); - for (int i = Irc::White; i <= Irc::LightGray; ++i) { - QString color = palette->colorName(i); - QTest::newRow(color.toUtf8()) << QString("\x03%1%2\x0f").arg(i).arg(color) << color; - } - - QTest::newRow("dummy \\x03") << "foo\x03 \02bold\x0f bar\x03" << "foo bold bar"; - QTest::newRow("extra \\x0f") << "foo\x0f \02bold\x0f bar\x0f" << "foo bold bar"; - QTest::newRow("background") << QString("foo \x03%1,%1red\x0f on \x03%1,%1red\x03 bar").arg(Irc::Red) << "foo red on red bar"; -} - -void tst_IrcTextFormat::testPlainText() -{ - QFETCH(QString, input); - QFETCH(QString, output); - - IrcTextFormat format; - QCOMPARE(format.toPlainText(input), output); - - format.parse(input); - QCOMPARE(format.plainText(), output); -} - -void tst_IrcTextFormat::testHtml_data() -{ - qRegisterMetaType<IrcTextFormat::SpanFormat>(); - - QTest::addColumn<IrcTextFormat::SpanFormat>("span"); - QTest::addColumn<QString>("input"); - QTest::addColumn<QString>("output"); - - QTest::newRow("style=bold") << IrcTextFormat::SpanStyle << "foo \02bold\x0f and \02bold\02 bar" << "foo <span style='font-weight: bold'>bold</span> and <span style='font-weight: bold'>bold</span> bar"; - QTest::newRow("class=bold") << IrcTextFormat::SpanClass << "foo \02bold\x0f and \02bold\02 bar" << "foo <span class='bold'>bold</span> and <span class='bold'>bold</span> bar"; - - QTest::newRow("style=line-through") << IrcTextFormat::SpanStyle << "foo \x13line\x0f and \x13through\x13 bar" << "foo <span style='text-decoration: line-through'>line</span> and <span style='text-decoration: line-through'>through</span> bar"; - QTest::newRow("class=line-through") << IrcTextFormat::SpanClass << "foo \x13line\x0f and \x13through\x13 bar" << "foo <span class='line-through'>line</span> and <span class='line-through'>through</span> bar"; - - QTest::newRow("style=underline1") << IrcTextFormat::SpanStyle << "foo \x15under\x0f and \x15line\x15 bar" << "foo <span style='text-decoration: underline'>under</span> and <span style='text-decoration: underline'>line</span> bar"; - - QTest::newRow("style=inverse") << IrcTextFormat::SpanStyle << "foo \x16inverse\x0f and \x16inverse\x16 bar" << "foo <span style='text-decoration: inverse'>inverse</span> and <span style='text-decoration: inverse'>inverse</span> bar"; - QTest::newRow("class=inverse") << IrcTextFormat::SpanClass << "foo \x16inverse\x0f and \x16inverse\x16 bar" << "foo <span class='inverse'>inverse</span> and <span class='inverse'>inverse</span> bar"; - - QTest::newRow("style=italic") << IrcTextFormat::SpanStyle << "foo \x1ditalic\x0f and \x1ditalic\x1d bar" << "foo <span style='font-style: italic'>italic</span> and <span style='font-style: italic'>italic</span> bar"; - QTest::newRow("class=italic") << IrcTextFormat::SpanClass << "foo \x1ditalic\x0f and \x1ditalic\x1d bar" << "foo <span class='italic'>italic</span> and <span class='italic'>italic</span> bar"; - - QTest::newRow("style=underline2") << IrcTextFormat::SpanStyle << "foo \x1funder\x0f and \x1fline\x1f bar" << "foo <span style='text-decoration: underline'>under</span> and <span style='text-decoration: underline'>line</span> bar"; - - IrcTextFormat format; - QVERIFY(format.palette()); - IrcPalette* palette = format.palette(); - for (int i = Irc::White; i <= Irc::LightGray; ++i) { - QString color = palette->colorName(i); - QTest::newRow(QString("style=%1").arg(color).toUtf8()) << IrcTextFormat::SpanStyle << QString("foo \x03%1%2\x0f and \x03%1%2\x03 bar").arg(i).arg(color) << QString("foo <span style='color: %1'>%1</span> and <span style='color: %1'>%1</span> bar").arg(color); - QTest::newRow(QString("class=%1").arg(color).toUtf8()) << IrcTextFormat::SpanClass << QString("foo \x03%1%2\x0f and \x03%1%2\x03 bar").arg(i).arg(color) << QString("foo <span class='%1'>%1</span> and <span class='%1'>%1</span> bar").arg(color); - } - - QTest::newRow("extra \\x0f") << IrcTextFormat::SpanStyle << "foo\x0f \02bold\x0f bar\x0f" << "foo <span style='font-weight: bold'>bold</span> bar"; - - QTest::newRow("style=background") << IrcTextFormat::SpanStyle << QString("foo \x03%1,%1red\x0f on \x03%1,%1red\x03 bar").arg(Irc::Red) << "foo <span style='color: red; background-color: red'>red</span> on <span style='color: red; background-color: red'>red</span> bar"; - QTest::newRow("class=background") << IrcTextFormat::SpanClass << QString("foo \x03%1,%1red\x0f on \x03%1,%1red\x03 bar").arg(Irc::Red) << "foo <span class='red red-background'>red</span> on <span class='red red-background'>red</span> bar"; -} - -void tst_IrcTextFormat::testHtml() -{ - QFETCH(IrcTextFormat::SpanFormat, span); - QFETCH(QString, input); - QFETCH(QString, output); - - IrcTextFormat format; - format.setSpanFormat(span); - QCOMPARE(format.toHtml(input), output); - - format.parse(input); - QCOMPARE(format.html(), output); -} - -Q_DECLARE_METATYPE(QList<QUrl>) -void tst_IrcTextFormat::testUrls_data() -{ - qRegisterMetaType<QList<QUrl> >(); - - QTest::addColumn<QString>("pattern"); - QTest::addColumn<QString>("input"); - QTest::addColumn<QString>("output"); - QTest::addColumn<QList<QUrl> >("urls"); - - QString defaultPattern = IrcTextFormat().urlPattern(); - - QTest::newRow("www.fi") << defaultPattern << "www.fi" << "<a href='http://www.fi'>www.fi</a>" << (QList<QUrl>() << QUrl("http://www.fi")); - QTest::newRow("ftp.funet.fi") << defaultPattern << "ftp.funet.fi" << "<a href='ftp://ftp.funet.fi'>ftp.funet.fi</a>" << (QList<QUrl>() << QUrl("ftp://ftp.funet.fi")); - QTest::newRow("jpnurmi@gmail.com") << defaultPattern << "jpnurmi@gmail.com" << "<a href='mailto:jpnurmi@gmail.com'>jpnurmi@gmail.com</a>" << (QList<QUrl>() << QUrl("mailto:jpnurmi@gmail.com")); - QTest::newRow("quote") << defaultPattern << "http://en.wikipedia.org/wiki/Shamir's_Secret_Sharing" << "<a href='http://en.wikipedia.org/wiki/Shamir%27s_Secret_Sharing'>http://en.wikipedia.org/wiki/Shamir's_Secret_Sharing</a>" << (QList<QUrl>() << QUrl("http://en.wikipedia.org/wiki/Shamir's_Secret_Sharing")); - QTest::newRow("percent") << defaultPattern << "http://en.wikipedia.org/wiki/Shamir%27s_Secret_Sharing" << "<a href='http://en.wikipedia.org/wiki/Shamir%27s_Secret_Sharing'>http://en.wikipedia.org/wiki/Shamir%27s_Secret_Sharing</a>" << (QList<QUrl>() << QUrl("http://en.wikipedia.org/wiki/Shamir%27s_Secret_Sharing")); - QTest::newRow("parentheses") << defaultPattern << "http://en.wikipedia.org/wiki/Qt_(software)" << "<a href='http://en.wikipedia.org/wiki/Qt_%28software%29'>http://en.wikipedia.org/wiki/Qt_(software)</a>" << (QList<QUrl>() << QUrl("http://en.wikipedia.org/wiki/Qt_(software)")); - QTest::newRow("hash & comma") << defaultPattern << "https://codereview.qt-project.org/#change,1" << "<a href='https://codereview.qt-project.org/#change,1'>https://codereview.qt-project.org/#change,1</a>" << (QList<QUrl>() << QUrl("https://codereview.qt-project.org/#change,1")); - QTest::newRow("equal & question & ampersand") << defaultPattern << "https://www.google.no/imghp?hl=en&tab=wi" << "<a href='https://www.google.no/imghp?hl=en&tab=wi'>https://www.google.no/imghp?hl=en&tab=wi</a>" << (QList<QUrl>() << QUrl("https://www.google.no/imghp?hl=en&tab=wi")); - QTest::newRow("github commits") << defaultPattern << "https://github.com/communi/libcommuni/compare/ebf3c8ea47dc...19d66ddcb122" << "<a href='https://github.com/communi/libcommuni/compare/ebf3c8ea47dc...19d66ddcb122'>https://github.com/communi/libcommuni/compare/ebf3c8ea47dc...19d66ddcb122</a>" << (QList<QUrl>() << QUrl("https://github.com/communi/libcommuni/compare/ebf3c8ea47dc...19d66ddcb122")); - QTest::newRow("multiple") << defaultPattern << "www.fi ftp.funet.fi jpnurmi@gmail.com" << "<a href='http://www.fi'>www.fi</a> <a href='ftp://ftp.funet.fi'>ftp.funet.fi</a> <a href='mailto:jpnurmi@gmail.com'>jpnurmi@gmail.com</a>" << (QList<QUrl>() << QUrl("http://www.fi") << QUrl("ftp://ftp.funet.fi") << QUrl("mailto:jpnurmi@gmail.com")); - QTest::newRow("empty pattern") << QString() << "www.fi ftp.funet.fi jpnurmi@gmail.com" << "www.fi ftp.funet.fi jpnurmi@gmail.com" << QList<QUrl>(); - - QTest::newRow("info") << defaultPattern - << QString("[freenode-info] if you're at a conference and other people are having trouble connecting, please mention it to staff: http://freenode.net/faq.shtml#gettinghelp") - << QString("[freenode-info] if you're at a conference and other people are having trouble connecting, please mention it to staff: <a href='http://freenode.net/faq.shtml#gettinghelp'>http://freenode.net/faq.shtml#gettinghelp</a>") - << (QList<QUrl>() << QUrl("http://freenode.net/faq.shtml#gettinghelp")); - QTest::newRow("topic") << defaultPattern - << QString("Communi 1.2.2 - IRC framework || Home: http://communi.github.com || Docs: http://communi.github.com/doc || MeeGo: http://store.ovi.com/content/219150") - << QString("Communi 1.2.2 - IRC framework || Home: <a href='http://communi.github.com'>http://communi.github.com</a> || Docs: <a href='http://communi.github.com/doc'>http://communi.github.com/doc</a> || MeeGo: <a href='http://store.ovi.com/content/219150'>http://store.ovi.com/content/219150</a>") - << (QList<QUrl>() << QUrl("http://communi.github.com") << QUrl("http://communi.github.com/doc") << QUrl("http://store.ovi.com/content/219150")); - QTest::newRow("commit") << defaultPattern - << QString("[communi-desktop] jpnurmi pushed 2 new commits to master: https://github.com/communi/communi-desktop/compare/257ca915a490...8832bfe8d0b8") - << QString("[communi-desktop] jpnurmi pushed 2 new commits to master: <a href='https://github.com/communi/communi-desktop/compare/257ca915a490...8832bfe8d0b8'>https://github.com/communi/communi-desktop/compare/257ca915a490...8832bfe8d0b8</a>") - << (QList<QUrl>() << QUrl("https://github.com/communi/communi-desktop/compare/257ca915a490...8832bfe8d0b8")); - QTest::newRow("with protocol") << defaultPattern - << QString("aa http://www.fi bb ftp://ftp.funet.fi cc") - << QString("aa <a href='http://www.fi'>http://www.fi</a> bb <a href='ftp://ftp.funet.fi'>ftp://ftp.funet.fi</a> cc") - << (QList<QUrl>() << QUrl("http://www.fi") << QUrl("ftp://ftp.funet.fi")); - QTest::newRow("without protocol") << defaultPattern - << QString("aa www.fi bb ftp.funet.fi cc jpnurmi@gmail.com dd") - << QString("aa <a href='http://www.fi'>www.fi</a> bb <a href='ftp://ftp.funet.fi'>ftp.funet.fi</a> cc <a href='mailto:jpnurmi@gmail.com'>jpnurmi@gmail.com</a> dd") - << (QList<QUrl>() << QUrl("http://www.fi") << QUrl("ftp://ftp.funet.fi") << QUrl("mailto:jpnurmi@gmail.com")); -} - -void tst_IrcTextFormat::testUrls() -{ - QFETCH(QString, pattern); - QFETCH(QString, input); - QFETCH(QString, output); - QFETCH(QList<QUrl>, urls); - - IrcTextFormat format; - format.setUrlPattern(pattern); - QCOMPARE(format.urlPattern(), pattern); - QCOMPARE(format.toHtml(input), output); - - format.parse(input); - QCOMPARE(format.html(), output); - QCOMPARE(format.urls(), urls); -} - -QTEST_MAIN(tst_IrcTextFormat) - -#include "tst_irctextformat.moc" diff --git a/src/libcommuni/tests/auto/ircuser/ircuser.pro b/src/libcommuni/tests/auto/ircuser/ircuser.pro deleted file mode 100644 index b81617f..0000000 --- a/src/libcommuni/tests/auto/ircuser/ircuser.pro +++ /dev/null @@ -1,7 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -SOURCES += tst_ircuser.cpp - -include(../auto.pri) diff --git a/src/libcommuni/tests/auto/ircuser/tst_ircuser.cpp b/src/libcommuni/tests/auto/ircuser/tst_ircuser.cpp deleted file mode 100644 index c575c14..0000000 --- a/src/libcommuni/tests/auto/ircuser/tst_ircuser.cpp +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This test is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -#include "ircuser.h" -#include <QtTest/QtTest> -#include <QtCore/QRegExp> -#ifdef Q_OS_LINUX -#include "ircuser_p.h" -#endif // Q_OS_LINUX - -class tst_IrcUser : public QObject -{ - Q_OBJECT - -private slots: - void testDefaults(); - void testSignals(); - void testDebug(); -}; - -void tst_IrcUser::testDefaults() -{ - IrcUser user; - QVERIFY(user.title().isEmpty()); - QVERIFY(user.name().isEmpty()); - QVERIFY(user.prefix().isEmpty()); - QVERIFY(user.mode().isEmpty()); - QVERIFY(!user.isServOp()); - QVERIFY(!user.isAway()); - QVERIFY(!user.channel()); -} - -void tst_IrcUser::testSignals() -{ - IrcUser user; - QSignalSpy titleSpy(&user, SIGNAL(titleChanged(QString))); - QSignalSpy nameSpy(&user, SIGNAL(nameChanged(QString))); - QSignalSpy prefixSpy(&user, SIGNAL(prefixChanged(QString))); - QSignalSpy modeSpy(&user, SIGNAL(modeChanged(QString))); - QSignalSpy servOpSpy(&user, SIGNAL(servOpChanged(bool))); - QSignalSpy awaySpy(&user, SIGNAL(awayChanged(bool))); - QVERIFY(titleSpy.isValid()); - QVERIFY(nameSpy.isValid()); - QVERIFY(prefixSpy.isValid()); - QVERIFY(modeSpy.isValid()); - QVERIFY(servOpSpy.isValid()); - QVERIFY(awaySpy.isValid()); -} - -void tst_IrcUser::testDebug() -{ - QString str; - QDebug dbg(&str); - - dbg << static_cast<IrcUser*>(0); - QCOMPARE(str.trimmed(), QString::fromLatin1("IrcUser(0x0)")); - str.clear(); - - IrcUser user; - dbg << &user; - QVERIFY(QRegExp("IrcUser\\(0x[0-9A-Fa-f]+\\) ").exactMatch(str)); - str.clear(); - - user.setObjectName("obj"); - dbg << &user; - QVERIFY(QRegExp("IrcUser\\(0x[0-9A-Fa-f]+, name=obj\\) ").exactMatch(str)); - str.clear(); - -#ifdef Q_OS_LINUX - // others have problems with symbols (win) or private headers (osx frameworks) - IrcUserPrivate::get(&user)->setName("usr"); - dbg << &user; - QVERIFY(QRegExp("IrcUser\\(0x[0-9A-Fa-f]+, name=obj, user=usr\\) ").exactMatch(str)); - str.clear(); -#endif // Q_OS_LINUX -} - -QTEST_MAIN(tst_IrcUser) - -#include "tst_ircuser.moc" diff --git a/src/libcommuni/tests/auto/ircusermodel/ircusermodel.pro b/src/libcommuni/tests/auto/ircusermodel/ircusermodel.pro deleted file mode 100644 index 941d2ec..0000000 --- a/src/libcommuni/tests/auto/ircusermodel/ircusermodel.pro +++ /dev/null @@ -1,8 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -SOURCES += tst_ircusermodel.cpp - -include(../shared/shared.pri) -include(../auto.pri) diff --git a/src/libcommuni/tests/auto/ircusermodel/tst_ircusermodel.cpp b/src/libcommuni/tests/auto/ircusermodel/tst_ircusermodel.cpp deleted file mode 100644 index 20c1d5f..0000000 --- a/src/libcommuni/tests/auto/ircusermodel/tst_ircusermodel.cpp +++ /dev/null @@ -1,1688 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This test is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -#include "ircusermodel.h" -#include "ircconnection.h" -#include "ircbuffermodel.h" -#include "ircchannel.h" -#include "ircuser.h" -#include "irc.h" - -#include "tst_ircdata.h" -#include "tst_ircclientserver.h" - -#include <QtTest/QtTest> - -static bool caseInsensitiveLessThan(const QString& s1, const QString& s2) -{ - return s1.compare(s2, Qt::CaseInsensitive) < 0; -} - -static bool caseInsensitiveGreaterThan(const QString& s1, const QString& s2) -{ - return s1.compare(s2, Qt::CaseInsensitive) > 0; -} - -class tst_IrcUserModel : public tst_IrcClientServer -{ - Q_OBJECT - -public: - tst_IrcUserModel(); - -private slots: - void testDefaults(); - void testClear(); - void testSorting_data(); - void testSorting(); - void testActivity_freenode(); - void testActivity_ircnet(); - void testActivity_euirc(); - void testChanges(); - void testRoles(); - void testAIM(); - void testUser(); -}; - -Q_DECLARE_METATYPE(QModelIndex) -tst_IrcUserModel::tst_IrcUserModel() -{ - Irc::registerMetaTypes(); - qRegisterMetaType<QModelIndex>(); - qRegisterMetaType<IrcUser*>("IrcUser*"); - qRegisterMetaType<IrcChannel*>("IrcChannel*"); - qRegisterMetaType<QList<IrcUser*> >("QList<IrcUser*>"); -} - -void tst_IrcUserModel::testDefaults() -{ - IrcUserModel model; - QCOMPARE(model.count(), 0); - QVERIFY(model.isEmpty()); - QVERIFY(model.names().isEmpty()); - QVERIFY(model.users().isEmpty()); - QCOMPARE(model.displayRole(), Irc::TitleRole); - QVERIFY(!model.channel()); - QCOMPARE(model.sortMethod(), Irc::SortByHand); - QCOMPARE(model.sortOrder(), Qt::AscendingOrder); -} - -void tst_IrcUserModel::testClear() -{ - IrcBufferModel bufferModel; - bufferModel.setConnection(connection); - - connection->open(); - QVERIFY(waitForOpened()); - - QVERIFY(waitForWritten(tst_IrcData::welcome())); - QCOMPARE(bufferModel.count(), 0); - waitForWritten(":communi!communi@hidd.en JOIN :#channel"); - QCOMPARE(bufferModel.count(), 1); - - QPointer<IrcChannel> channel = bufferModel.get(0)->toChannel(); - QVERIFY(channel); - - IrcUserModel userModel; - userModel.setChannel(channel); - waitForWritten(":irc.ser.ver 353 communi = #channel :a @b +c"); - waitForWritten(":irc.ser.ver 366 communi #channel :End of /NAMES list."); - QCOMPARE(userModel.count(), 3); - - QPointer<IrcUser> a = userModel.find("a"); - QPointer<IrcUser> b = userModel.find("b"); - QPointer<IrcUser> c = userModel.find("c"); - - QVERIFY(a); - QVERIFY(b); - QVERIFY(c); - - QSignalSpy countSpy(&userModel, SIGNAL(countChanged(int))); - QSignalSpy emptySpy(&userModel, SIGNAL(emptyChanged(bool))); - QSignalSpy usersSpy(&userModel, SIGNAL(usersChanged(QList<IrcUser*>))); - QSignalSpy namesSpy(&userModel, SIGNAL(namesChanged(QStringList))); - QSignalSpy modelAboutToBeResetSpy(&userModel, SIGNAL(modelAboutToBeReset())); - QSignalSpy modelResetSpy(&userModel, SIGNAL(modelReset())); - - QVERIFY(countSpy.isValid()); - QVERIFY(emptySpy.isValid()); - QVERIFY(usersSpy.isValid()); - QVERIFY(namesSpy.isValid()); - QVERIFY(modelAboutToBeResetSpy.isValid()); - QVERIFY(modelResetSpy.isValid()); - - userModel.clear(); - - QCOMPARE(userModel.count(), 0); - QVERIFY(userModel.isEmpty()); - QCOMPARE(userModel.users(), QList<IrcUser*>()); - QCOMPARE(userModel.names(), QStringList()); - - QVERIFY(!userModel.get(0)); - QVERIFY(!userModel.find("a")); - QVERIFY(!userModel.find("b")); - QVERIFY(!userModel.find("c")); - QVERIFY(!userModel.contains("a")); - QVERIFY(!userModel.contains("b")); - QVERIFY(!userModel.contains("c")); - - QCOMPARE(countSpy.count(), 1); - QCOMPARE(countSpy.last().at(0).toInt(), 0); - - QCOMPARE(emptySpy.count(), 1); - QCOMPARE(emptySpy.last().at(0).toBool(), true); - - QCOMPARE(usersSpy.count(), 1); - QCOMPARE(usersSpy.last().at(0).value<QList<IrcUser*> >(), QList<IrcUser*>()); - - QCOMPARE(namesSpy.count(), 1); - QCOMPARE(namesSpy.last().at(0).toStringList(), QStringList()); - - QCOMPARE(modelAboutToBeResetSpy.count(), 1); - QCOMPARE(modelResetSpy.count(), 1); - - QVERIFY(a); - QVERIFY(b); - QVERIFY(c); - - bufferModel.clear(); - - QVERIFY(!a); - QVERIFY(!b); - QVERIFY(!c); -} - -void tst_IrcUserModel::testSorting_data() -{ - QTest::addColumn<QByteArray>("welcomeData"); - QTest::addColumn<QByteArray>("joinData"); - QTest::addColumn<QStringList>("names"); - QTest::addColumn<QStringList>("admins"); - QTest::addColumn<QStringList>("ops"); - QTest::addColumn<QStringList>("halfops"); - QTest::addColumn<QStringList>("voices"); - - foreach (const QByteArray& key, tst_IrcData::keys()) { - QTest::newRow(key) - << tst_IrcData::welcome(key) - << tst_IrcData::join(key) - << tst_IrcData::names(key) - << tst_IrcData::admins(key) - << tst_IrcData::ops(key) - << tst_IrcData::halfops(key) - << tst_IrcData::voices(key); - } -} - -void tst_IrcUserModel::testSorting() -{ - QFETCH(QByteArray, welcomeData); - QFETCH(QByteArray, joinData); - QFETCH(QStringList, names); - QFETCH(QStringList, admins); - QFETCH(QStringList, ops); - QFETCH(QStringList, halfops); - QFETCH(QStringList, voices); - - IrcBufferModel bufferModel; - bufferModel.setConnection(connection); - - connection->open(); - QVERIFY(waitForOpened()); - - QVERIFY(waitForWritten(welcomeData)); - QCOMPARE(bufferModel.count(), 0); - - QVERIFY(waitForWritten(joinData)); - - QCOMPARE(bufferModel.count(), 1); - IrcChannel* channel = bufferModel.get(0)->toChannel(); - QVERIFY(channel); - - IrcUserModel staticModel(channel); - QCOMPARE(staticModel.count(), names.count()); - for (int i = 0; i < staticModel.count(); ++i) { - IrcUser* user = staticModel.get(i); - QCOMPARE(user->name(), names.at(i)); - if (admins.contains(user->name())) { - QCOMPARE(user->mode(), QString("a")); - QCOMPARE(user->prefix(), QString("!")); - } else if (ops.contains(user->name())) { - QCOMPARE(user->mode(), QString("o")); - QCOMPARE(user->prefix(), QString("@")); - } else if (halfops.contains(user->name())) { - QCOMPARE(user->mode(), QString("h")); - QCOMPARE(user->prefix(), QString("%")); - } else if (voices.contains(user->name())) { - QCOMPARE(user->mode(), QString("v")); - QCOMPARE(user->prefix(), QString("+")); - } - } - - QStringList sorted = names; - qSort(sorted); - QCOMPARE(staticModel.names(), sorted); - - // IGNORE INVALID COLUMNS - staticModel.sort(-1, Qt::AscendingOrder); - for (int i = 0; i < staticModel.count(); ++i) - QCOMPARE(staticModel.get(i)->name(), names.at(i)); - - staticModel.sort(1, Qt::AscendingOrder); - for (int i = 0; i < staticModel.count(); ++i) - QCOMPARE(staticModel.get(i)->name(), names.at(i)); - - // STATIC - BY NAME - ASCENDING - staticModel.setSortMethod(Irc::SortByName); - staticModel.sort(0, Qt::AscendingOrder); - - QStringList nasc = names; - qSort(nasc.begin(), nasc.end(), caseInsensitiveLessThan); - - for (int i = 0; i < staticModel.count(); ++i) - QCOMPARE(staticModel.get(i)->name(), nasc.at(i)); - - // STATIC - BY NAME - DESCENDING - staticModel.setSortMethod(Irc::SortByName); - staticModel.sort(0, Qt::DescendingOrder); - - QStringList ndesc = names; - qSort(ndesc.begin(), ndesc.end(), caseInsensitiveGreaterThan); - - for (int i = 0; i < staticModel.count(); ++i) - QCOMPARE(staticModel.get(i)->name(), ndesc.at(i)); - - // STATIC - BY TITLE - ASCENDING - staticModel.setSortMethod(Irc::SortByTitle); - staticModel.sort(0, Qt::AscendingOrder); - - QStringList aasc = admins; - qSort(aasc.begin(), aasc.end(), caseInsensitiveLessThan); - - QStringList oasc = ops; - qSort(oasc.begin(), oasc.end(), caseInsensitiveLessThan); - - QStringList hasc = halfops; - qSort(hasc.begin(), hasc.end(), caseInsensitiveLessThan); - - QStringList vasc = voices; - qSort(vasc.begin(), vasc.end(), caseInsensitiveLessThan); - - QStringList tasc = aasc + oasc + hasc + vasc + nasc; - // remove duplicates - foreach (const QString& voice, voices) - tasc.removeAt(tasc.lastIndexOf(voice)); - foreach (const QString& halfop, halfops) - tasc.removeAt(tasc.lastIndexOf(halfop)); - foreach (const QString& op, ops) - tasc.removeAt(tasc.lastIndexOf(op)); - foreach (const QString& admin, admins) - tasc.removeAt(tasc.lastIndexOf(admin)); - - for (int i = 0; i < staticModel.count(); ++i) - QCOMPARE(staticModel.get(i)->name(), tasc.at(i)); - - // STATIC - BY TITLE - DESCENDING - staticModel.setSortMethod(Irc::SortByTitle); - staticModel.sort(0, Qt::DescendingOrder); - - QStringList adesc = admins; - qSort(adesc.begin(), adesc.end(), caseInsensitiveGreaterThan); - - QStringList odesc = ops; - qSort(odesc.begin(), odesc.end(), caseInsensitiveGreaterThan); - - QStringList hdesc = halfops; - qSort(hdesc.begin(), hdesc.end(), caseInsensitiveGreaterThan); - - QStringList vdesc = voices; - qSort(vdesc.begin(), vdesc.end(), caseInsensitiveGreaterThan); - - QStringList tdesc = ndesc + vdesc + hdesc + odesc + adesc; - // remove duplicates - foreach (const QString& voice, voices) - tdesc.removeAt(tdesc.indexOf(voice)); - foreach (const QString& halfop, halfops) - tdesc.removeAt(tdesc.indexOf(halfop)); - foreach (const QString& op, ops) - tdesc.removeAt(tdesc.indexOf(op)); - foreach (const QString& admin, admins) - tdesc.removeAt(tdesc.indexOf(admin)); - - for (int i = 0; i < staticModel.count(); ++i) - QCOMPARE(staticModel.get(i)->name(), tdesc.at(i)); - - // DYNAMIC - BY NAME, TITLE & ACTIVITY - ASCENDING - IrcUserModel dynamicModel(channel); - - dynamicModel.setSortMethod(Irc::SortByName); - for (int i = 0; i < dynamicModel.count(); ++i) - QCOMPARE(dynamicModel.get(i)->name(), nasc.at(i)); - - dynamicModel.setSortMethod(Irc::SortByTitle); - for (int i = 0; i < dynamicModel.count(); ++i) - QCOMPARE(dynamicModel.get(i)->name(), tasc.at(i)); - - dynamicModel.setSortMethod(Irc::SortByActivity); - for (int i = 0; i < dynamicModel.count(); ++i) - QCOMPARE(dynamicModel.get(i)->name(), names.at(i)); - - // DYNAMIC - BY NAME, TITLE & ACTIVITY - DESCENDING - dynamicModel.setSortOrder(Qt::DescendingOrder); - - dynamicModel.setSortMethod(Irc::SortByName); - for (int i = 0; i < dynamicModel.count(); ++i) - QCOMPARE(dynamicModel.get(i)->name(), ndesc.at(i)); - - dynamicModel.setSortMethod(Irc::SortByTitle); - for (int i = 0; i < dynamicModel.count(); ++i) - QCOMPARE(dynamicModel.get(i)->name(), tdesc.at(i)); - - dynamicModel.setSortMethod(Irc::SortByActivity); - for (int i = 0; i < dynamicModel.count(); ++i) - QCOMPARE(dynamicModel.get(i)->name(), names.at(names.count() - 1 - i)); - - // RESTORE USERS IN ASCENDING ORDER - dynamicModel.setSortOrder(Qt::AscendingOrder); - - dynamicModel.setChannel(0); - dynamicModel.setSortMethod(Irc::SortByName); - dynamicModel.setChannel(channel); - for (int i = 0; i < dynamicModel.count(); ++i) - QCOMPARE(dynamicModel.get(i)->name(), nasc.at(i)); - - dynamicModel.setChannel(0); - dynamicModel.setSortMethod(Irc::SortByTitle); - dynamicModel.setChannel(channel); - for (int i = 0; i < dynamicModel.count(); ++i) - QCOMPARE(dynamicModel.get(i)->name(), tasc.at(i)); - - dynamicModel.setChannel(0); - dynamicModel.setSortMethod(Irc::SortByActivity); - dynamicModel.setChannel(channel); - for (int i = 0; i < dynamicModel.count(); ++i) - QCOMPARE(dynamicModel.get(i)->name(), names.at(i)); - - // RESTORE USERS IN DESCENDING ORDER - dynamicModel.setSortOrder(Qt::DescendingOrder); - - dynamicModel.setChannel(0); - dynamicModel.setSortMethod(Irc::SortByName); - dynamicModel.setChannel(channel); - for (int i = 0; i < dynamicModel.count(); ++i) - QCOMPARE(dynamicModel.get(i)->name(), ndesc.at(i)); - - dynamicModel.setChannel(0); - dynamicModel.setSortMethod(Irc::SortByTitle); - dynamicModel.setChannel(channel); - for (int i = 0; i < dynamicModel.count(); ++i) - QCOMPARE(dynamicModel.get(i)->name(), tdesc.at(i)); - - dynamicModel.setChannel(0); - dynamicModel.setSortMethod(Irc::SortByActivity); - dynamicModel.setChannel(channel); - for (int i = 0; i < dynamicModel.count(); ++i) - QCOMPARE(dynamicModel.get(i)->name(), names.at(names.count() - 1 - i)); - - // DO NOTHING - dynamicModel.sort(Irc::SortByHand); - for (int i = 0; i < dynamicModel.count(); ++i) - QCOMPARE(dynamicModel.get(i)->name(), names.at(names.count() - 1 - i)); -} - -void tst_IrcUserModel::testActivity_freenode() -{ - IrcBufferModel bufferModel; - bufferModel.setConnection(connection); - - connection->open(); - QVERIFY(waitForOpened()); - - QVERIFY(waitForWritten(tst_IrcData::welcome("freenode"))); - QCOMPARE(bufferModel.count(), 0); - - QVERIFY(waitForWritten(tst_IrcData::join("freenode"))); - - QCOMPARE(bufferModel.count(), 1); - IrcChannel* channel = bufferModel.get(0)->toChannel(); - QVERIFY(channel); - - QStringList names = tst_IrcData::names("freenode"); - - IrcUserModel activityModel(channel); - activityModel.setSortMethod(Irc::SortByActivity); - - int count = names.count(); - - QVERIFY(waitForWritten(":smurfy!~smurfy@hidd.en PART #freenode")); - QCOMPARE(activityModel.count(), --count); - QVERIFY(!activityModel.contains("smurfy")); - - QVERIFY(waitForWritten(":ToApolytoXaos!~ToApolyto@hidd.en QUIT :Quit: Leaving")); - QCOMPARE(activityModel.count(), --count); - QVERIFY(!activityModel.contains("ToApolytoXaos")); - - QVERIFY(waitForWritten(":agsrv!~guest@hidd.en JOIN #freenode")); - QCOMPARE(activityModel.count(), ++count); - QCOMPARE(activityModel.indexOf(activityModel.find("agsrv")), 0); - - QVERIFY(waitForWritten(":Hello71!~Hello71@hidd.en PRIVMSG #freenode :straterra: there are many users on it")); - QCOMPARE(activityModel.count(), count); - QCOMPARE(activityModel.indexOf(activityModel.find("Hello71")), 0); - QCOMPARE(activityModel.indexOf(activityModel.find("straterra")), 1); - - QVERIFY(waitForWritten(":straterra!straterra@hidd.en PRIVMSG #freenode :what?")); - QCOMPARE(activityModel.count(), count); - QCOMPARE(activityModel.indexOf(activityModel.find("straterra")), 0); - QCOMPARE(activityModel.indexOf(activityModel.find("Hello71")), 1); - - QVERIFY(waitForWritten(":JuxTApose!~indigital@hidd.en NICK :JuxTApose_afk")); - QCOMPARE(activityModel.count(), count); - QVERIFY(!activityModel.contains("JuxTApose")); - QCOMPARE(activityModel.indexOf(activityModel.find("JuxTApose_afk")), 0); - QCOMPARE(activityModel.indexOf(activityModel.find("straterra")), 1); - QCOMPARE(activityModel.indexOf(activityModel.find("Hello71")), 2); - - QVERIFY(waitForWritten(":communi!communi@hidd.en PRIVMSG #freenode :+tomaw: ping")); - QCOMPARE(activityModel.count(), count); - QCOMPARE(activityModel.indexOf(activityModel.find("communi")), 0); - QCOMPARE(activityModel.indexOf(activityModel.find("tomaw")), 1); - - QVERIFY(waitForWritten(":Hello71!~Hello71@hidd.en NOTICE #freenode :just testing...")); - QCOMPARE(activityModel.count(), count); - QCOMPARE(activityModel.indexOf(activityModel.find("Hello71")), 0); -} - -void tst_IrcUserModel::testActivity_ircnet() -{ - IrcBufferModel bufferModel; - bufferModel.setConnection(connection); - - connection->open(); - QVERIFY(waitForOpened()); - - QVERIFY(waitForWritten(tst_IrcData::welcome("ircnet"))); - QCOMPARE(bufferModel.count(), 0); - - QVERIFY(waitForWritten(tst_IrcData::join("ircnet"))); - - QCOMPARE(bufferModel.count(), 1); - IrcChannel* channel = bufferModel.get(0)->toChannel(); - QVERIFY(channel); - - QStringList names = tst_IrcData::names("ircnet"); - - IrcUserModel activityModel(channel); - activityModel.setSortMethod(Irc::SortByActivity); - - int count = names.count(); - - QVERIFY(waitForWritten(":_box!~box@hidd.en QUIT :Broken pipe")); - QCOMPARE(activityModel.count(), --count); - QVERIFY(!activityModel.contains("_box")); - - QVERIFY(waitForWritten(":ip!~v6@hidd.en QUIT :Connection reset by peer")); - QCOMPARE(activityModel.count(), --count); - QVERIFY(!activityModel.contains("ip")); - - QVERIFY(waitForWritten(":[m]!m@hidd.en MODE #uptimed +b *!*x@does.matter.not*")); - QCOMPARE(activityModel.count(), count); - - QVERIFY(waitForWritten(":[m]!m@hidd.en KICK #uptimed \\x00 :lame exit sorry :P")); - QCOMPARE(activityModel.count(), --count); - QVERIFY(!activityModel.contains("\\x00")); - - QVERIFY(waitForWritten(":_box!~box@hidd.en JOIN :#uptimed")); - QCOMPARE(activityModel.count(), ++count); - QCOMPARE(activityModel.indexOf(activityModel.find("_box")), 0); - - QVERIFY(waitForWritten(":Voicer!mrozu@hidd.en MODE #uptimed +v _box")); - QCOMPARE(activityModel.count(), count); - - QVERIFY(waitForWritten(":t0r-!t0r@hidd.en PRIVMSG #uptimed :there is no sense for _box and ip to join the contest")); - QCOMPARE(activityModel.count(), count); - QCOMPARE(activityModel.indexOf(activityModel.find("t0r-")), 0); - - QVERIFY(waitForWritten(":ip!~v6@hidd.en JOIN :#uptimed")); - QCOMPARE(activityModel.count(), ++count); - QCOMPARE(activityModel.indexOf(activityModel.find("ip")), 0); - - QVERIFY(waitForWritten(":Voicer!mrozu@hidd.en MODE #uptimed +v ip")); - QCOMPARE(activityModel.count(), count); - - QVERIFY(waitForWritten(":[m]!m@hidd.en MODE #uptimed +b *!*v6@*.does.matter.not")); - QCOMPARE(activityModel.count(), count); - - QVERIFY(waitForWritten(":[m]!m@hidd.en KICK #uptimed ip :no reason")); - QCOMPARE(activityModel.count(), --count); - QVERIFY(!activityModel.contains("ip")); - - QVERIFY(waitForWritten(":t0r-!t0r@hidd.en PRIVMSG #uptimed :they are going down every second")); - QCOMPARE(activityModel.count(), count); - QCOMPARE(activityModel.indexOf(activityModel.find("t0r-")), 0); - - QVERIFY(waitForWritten(":t0r-!t0r@hidd.en PRIVMSG #uptimed :yeah")); - QCOMPARE(activityModel.count(), count); - QCOMPARE(activityModel.indexOf(activityModel.find("t0r-")), 0); - - QVERIFY(waitForWritten(":[m]!m@hidd.en MODE #uptimed -b *!*box@*.does.not.matter")); - QCOMPARE(activityModel.count(), count); - - QVERIFY(waitForWritten(":[m]!m@hidd.en KICK #uptimed _box :no reason")); - QCOMPARE(activityModel.count(), --count); - QVERIFY(!activityModel.contains("_box")); -} - -void tst_IrcUserModel::testActivity_euirc() -{ - IrcBufferModel bufferModel; - bufferModel.setConnection(connection); - - connection->open(); - QVERIFY(waitForOpened()); - - QVERIFY(waitForWritten(tst_IrcData::welcome("euirc"))); - QCOMPARE(bufferModel.count(), 0); - - QVERIFY(waitForWritten(tst_IrcData::join("euirc"))); - - QCOMPARE(bufferModel.count(), 1); - IrcChannel* channel = bufferModel.get(0)->toChannel(); - QVERIFY(channel); - - QStringList names = tst_IrcData::names("euirc"); - - IrcUserModel activityModel(channel); - activityModel.setSortMethod(Irc::SortByActivity); - - int count = names.count(); - - QVERIFY(waitForWritten(":Marko10_000!~marko@hidd.en JOIN :#euirc\n")); - QCOMPARE(activityModel.count(), ++count); - QCOMPARE(activityModel.indexOf(activityModel.find("Marko10_000")), 0); - - QVERIFY(waitForWritten(":Marko10_000!~marko@hidd.en NICK :Guest775\n")); - QCOMPARE(activityModel.count(), count); - QVERIFY(!activityModel.contains("Marko10_000")); - QCOMPARE(activityModel.indexOf(activityModel.find("Guest775")), 0); - - QVERIFY(waitForWritten(":Guest775!~marko@hidd.en QUIT :Quit: Verlassend\n")); - QCOMPARE(activityModel.count(), --count); - QVERIFY(!activityModel.contains("Guest775")); - - QVERIFY(waitForWritten(":Marko10_000!~marko@hidd.en JOIN :#euirc\n")); - QCOMPARE(activityModel.count(), ++count); - QCOMPARE(activityModel.indexOf(activityModel.find("Marko10_000")), 0); - - QVERIFY(waitForWritten(":Guest774!absk007@hidd.en QUIT :Quit: Good Bye. I Quit...\n")); - QCOMPARE(activityModel.count(), --count); - QVERIFY(!activityModel.contains("Guest774")); - - QVERIFY(waitForWritten(":absk007!absk007@hidd.en JOIN :#euirc\n")); - QCOMPARE(activityModel.count(), ++count); - QCOMPARE(activityModel.indexOf(activityModel.find("absk007")), 0); - - QVERIFY(waitForWritten(":charly6!~Miranda@hidd.en QUIT :Client exited\n")); - QCOMPARE(activityModel.count(), --count); - QVERIFY(!activityModel.contains("charly6")); - - QVERIFY(waitForWritten(":absk007!absk007@hidd.en NICK :Guest776\n")); - QCOMPARE(activityModel.count(), count); - QVERIFY(!activityModel.contains("absk007")); - QCOMPARE(activityModel.indexOf(activityModel.find("Guest776")), 0); - - QVERIFY(waitForWritten(":Tina-chan_onAir!~kvirc@hidd.en NICK :Tina-chan\n")); - QCOMPARE(activityModel.count(), count); - QVERIFY(!activityModel.contains("Tina-chan_onAir")); - QCOMPARE(activityModel.indexOf(activityModel.find("Tina-chan")), 0); - - QVERIFY(waitForWritten(":Guest776!absk007@hidd.en NICK :absk007\n")); - QCOMPARE(activityModel.count(), count); - QVERIFY(!activityModel.contains("Guest776")); - QCOMPARE(activityModel.indexOf(activityModel.find("absk007")), 0); - - QVERIFY(waitForWritten(":aleksandr!~aleksandr@hidd.en PRIVMSG #euirc :absk007, last warning. fix your client/script\n")); - QCOMPARE(activityModel.count(), count); - QCOMPARE(activityModel.indexOf(activityModel.find("aleksandr")), 0); - QCOMPARE(activityModel.indexOf(activityModel.find("absk007")), 1); - - QVERIFY(waitForWritten(":charly6!~Miranda@hidd.en JOIN :#euirc\n")); - QCOMPARE(activityModel.count(), ++count); - QCOMPARE(activityModel.indexOf(activityModel.find("charly6")), 0); - - QVERIFY(waitForWritten(":absk007!absk007@hidd.en PRIVMSG #euirc :aleksandr, what did i do this time?\n")); - QCOMPARE(activityModel.count(), count); - QCOMPARE(activityModel.indexOf(activityModel.find("absk007")), 0); - QCOMPARE(activityModel.indexOf(activityModel.find("aleksandr")), 1); - - QVERIFY(waitForWritten(":aleksandr!~aleksandr@hidd.en PRIVMSG #euirc :if you need help, join #opers\n")); - QCOMPARE(activityModel.count(), count); - QCOMPARE(activityModel.indexOf(activityModel.find("aleksandr")), 0); - - QVERIFY(waitForWritten(":charly6!~Miranda@hidd.en QUIT :Client exited\n")); - QCOMPARE(activityModel.count(), --count); - QVERIFY(!activityModel.contains("charly6")); - - QVERIFY(waitForWritten(":icefly!~icefly@hidd.en PART #euirc :Once you know what it is you want to be true, instinct is a very useful device for enabling you to know that it is\n")); - QCOMPARE(activityModel.count(), --count); - QVERIFY(!activityModel.contains("icefly")); - - QVERIFY(waitForWritten(":icefly!~icefly@hidd.en JOIN :#euirc\n")); - QCOMPARE(activityModel.count(), ++count); - QCOMPARE(activityModel.indexOf(activityModel.find("icefly")), 0); -} - -void tst_IrcUserModel::testChanges() -{ - IrcUserModel userModel; - - // IrcUserModel signals - QSignalSpy addedSpy(&userModel, SIGNAL(added(IrcUser*))); - QSignalSpy removedSpy(&userModel, SIGNAL(removed(IrcUser*))); - QSignalSpy aboutToBeAddedSpy(&userModel, SIGNAL(aboutToBeAdded(IrcUser*))); - QSignalSpy aboutToBeRemovedSpy(&userModel, SIGNAL(aboutToBeRemoved(IrcUser*))); - QSignalSpy countChangedSpy(&userModel, SIGNAL(countChanged(int))); - QSignalSpy namesChangedSpy(&userModel, SIGNAL(namesChanged(QStringList))); - QSignalSpy usersChangedSpy(&userModel, SIGNAL(usersChanged(QList<IrcUser*>))); - QSignalSpy channelChangedSpy(&userModel, SIGNAL(channelChanged(IrcChannel*))); - - QVERIFY(addedSpy.isValid()); - QVERIFY(removedSpy.isValid()); - QVERIFY(aboutToBeAddedSpy.isValid()); - QVERIFY(aboutToBeRemovedSpy.isValid()); - QVERIFY(countChangedSpy.isValid()); - QVERIFY(namesChangedSpy.isValid()); - QVERIFY(usersChangedSpy.isValid()); - QVERIFY(channelChangedSpy.isValid()); - - int aboutToBeAddedCount = 0, addedCount = 0; - int aboutToBeRemovedCount = 0, removedCount = 0; - int countChangedCount = 0; - int namesChangedCount = 0; - int usersChangedCount = 0; - int channelChangedCount = 0; - - // relevant QAbstractItemModel signals - QSignalSpy dataChangedSpy(&userModel, SIGNAL(dataChanged(QModelIndex,QModelIndex))); - QSignalSpy modelAboutToBeResetSpy(&userModel, SIGNAL(modelAboutToBeReset())); - QSignalSpy modelResetSpy(&userModel, SIGNAL(modelReset())); - QSignalSpy layoutAboutToBeChangedSpy(&userModel, SIGNAL(layoutAboutToBeChanged())); - QSignalSpy layoutChangedSpy(&userModel, SIGNAL(layoutChanged())); - QSignalSpy rowsAboutToBeInsertedSpy(&userModel, SIGNAL(rowsAboutToBeInserted(QModelIndex,int,int))); - QSignalSpy rowsInsertedSpy(&userModel, SIGNAL(rowsInserted(QModelIndex,int,int))); - QSignalSpy rowsAboutToBeRemovedSpy(&userModel, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int))); - QSignalSpy rowsRemovedSpy(&userModel, SIGNAL(rowsRemoved(QModelIndex,int,int))); - - QVERIFY(dataChangedSpy.isValid()); - QVERIFY(modelAboutToBeResetSpy.isValid()); - QVERIFY(modelResetSpy.isValid()); - QVERIFY(layoutAboutToBeChangedSpy.isValid()); - QVERIFY(layoutChangedSpy.isValid()); - QVERIFY(rowsAboutToBeInsertedSpy.isValid()); - QVERIFY(rowsInsertedSpy.isValid()); - QVERIFY(rowsAboutToBeRemovedSpy.isValid()); - QVERIFY(rowsRemovedSpy.isValid()); - - int dataChangedCount = 0; - int modelAboutToBeResetCount = 0, modelResetCount = 0; - int layoutAboutToBeChangedCount = 0, layoutChangedCount = 0; - int rowsAboutToBeInsertedCount = 0, rowsInsertedCount = 0; - int rowsAboutToBeRemovedCount = 0, rowsRemovedCount = 0; - - // ### setup #communi (5): communi @ChanServ +qtassistant Guest1234 +qout - IrcBufferModel bufferModel; - bufferModel.setConnection(connection); - - connection->open(); - QVERIFY(waitForOpened()); - - QVERIFY(waitForWritten(tst_IrcData::welcome())); - QVERIFY(waitForWritten(":communi!~communi@hidd.en JOIN :#communi")); - QVERIFY(waitForWritten(":irc.ifi.uio.no 353 communi = #communi :communi @ChanServ +qtassistant Guest1234 +qout")); - QVERIFY(waitForWritten(":irc.ifi.uio.no 366 communi #communi :End of NAMES list.")); - QCOMPARE(bufferModel.count(), 1); - IrcChannel* channel = bufferModel.get(0)->toChannel(); - QVERIFY(channel); - QCOMPARE(channel->title(), QString("#communi")); - - // ### ready to go! - userModel.setChannel(channel); - QCOMPARE(channelChangedSpy.count(), ++channelChangedCount); - QCOMPARE(channelChangedSpy.last().at(0).value<IrcChannel*>(), channel); - QCOMPARE(modelAboutToBeResetSpy.count(), ++modelAboutToBeResetCount); - QCOMPARE(modelResetSpy.count(), ++modelResetCount); - - QStringList names = QStringList() << "communi" << "ChanServ" << "qtassistant" << "Guest1234" << "qout"; - QStringList titles = QStringList() << "communi" << "@ChanServ" << "+qtassistant" << "Guest1234" << "+qout"; - QCOMPARE(userModel.count(), names.count()); - for (int i = 0; i < userModel.count(); ++i) { - QCOMPARE(userModel.get(i)->name(), names.at(i)); - QCOMPARE(userModel.get(i)->title(), titles.at(i)); - } - - QPointer<IrcUser> communi = userModel.get(0); - QVERIFY(communi); - QCOMPARE(communi->name(), QString("communi")); - QCOMPARE(communi->mode(), QString()); - QCOMPARE(communi->prefix(), QString()); - - QPointer<IrcUser> ChanServ = userModel.get(1); - QVERIFY(ChanServ); - QCOMPARE(ChanServ->name(), QString("ChanServ")); - QCOMPARE(ChanServ->mode(), QString("o")); - QCOMPARE(ChanServ->prefix(), QString("@")); - - QPointer<IrcUser> qtassistant = userModel.get(2); - QVERIFY(qtassistant); - QCOMPARE(qtassistant->name(), QString("qtassistant")); - QCOMPARE(qtassistant->mode(), QString("v")); - QCOMPARE(qtassistant->prefix(), QString("+")); - - QPointer<IrcUser> Guest1234 = userModel.get(3); - QVERIFY(Guest1234); - QCOMPARE(Guest1234->name(), QString("Guest1234")); - QCOMPARE(Guest1234->mode(), QString()); - QCOMPARE(Guest1234->prefix(), QString()); - - QPointer<IrcUser> qout = userModel.get(4); - QVERIFY(qout); - QCOMPARE(qout->name(), QString("qout")); - QCOMPARE(qout->mode(), QString("v")); - QCOMPARE(qout->prefix(), QString("+")); - - QCOMPARE(countChangedSpy.count(), ++countChangedCount); - QCOMPARE(countChangedSpy.last().at(0).toInt(), 5); - - QCOMPARE(namesChangedSpy.count(), ++namesChangedCount); - QCOMPARE(namesChangedSpy.last().at(0).toStringList(), QStringList() << "ChanServ" << "Guest1234" << "communi" << "qout" << "qtassistant"); - - QList<IrcUser*> users = QList<IrcUser*>() << communi << ChanServ << qtassistant << Guest1234 << qout; - QCOMPARE(usersChangedSpy.count(), ++usersChangedCount); - QCOMPARE(usersChangedSpy.last().at(0).value<QList<IrcUser*> >(), users); - - // ### trigger sort -> layout change - userModel.setSortMethod(Irc::SortByTitle); - QCOMPARE(layoutAboutToBeChangedSpy.count(), ++layoutAboutToBeChangedCount); - QCOMPARE(layoutChangedSpy.count(), ++layoutChangedCount); - - // Irc::SortByTitle - users = QList<IrcUser*>() << ChanServ << qout << qtassistant << communi << Guest1234; - names = QStringList() << "ChanServ" << "qout" << "qtassistant" << "communi" << "Guest1234"; - titles = QStringList() << "@ChanServ" << "+qout" << "+qtassistant" << "communi" << "Guest1234"; - - QCOMPARE(userModel.count(), names.count()); - for (int i = 0; i < userModel.count(); ++i) { - QCOMPARE(userModel.get(i)->name(), names.at(i)); - QCOMPARE(userModel.get(i)->title(), titles.at(i)); - QCOMPARE(userModel.get(i), users.at(i)); - } - - // ### trigger sort -> layout change - userModel.setSortMethod(Irc::SortByName); - QCOMPARE(layoutAboutToBeChangedSpy.count(), ++layoutAboutToBeChangedCount); - QCOMPARE(layoutChangedSpy.count(), ++layoutChangedCount); - - // Irc::SortByName - users = QList<IrcUser*>() << ChanServ << communi << Guest1234 << qout << qtassistant; - names = QStringList() << "ChanServ" << "communi" << "Guest1234" << "qout" << "qtassistant"; - titles = QStringList() << "@ChanServ" << "communi" << "Guest1234" << "+qout" << "+qtassistant"; - - QCOMPARE(userModel.count(), names.count()); - for (int i = 0; i < userModel.count(); ++i) { - QCOMPARE(userModel.get(i)->name(), names.at(i)); - QCOMPARE(userModel.get(i)->title(), titles.at(i)); - QCOMPARE(userModel.get(i), users.at(i)); - } - - // ### trigger model reset - userModel.setChannel(0); - QCOMPARE(channelChangedSpy.count(), ++channelChangedCount); - QCOMPARE(channelChangedSpy.last().at(0).value<IrcChannel*>(), static_cast<IrcChannel*>(0)); - QCOMPARE(modelAboutToBeResetSpy.count(), ++modelAboutToBeResetCount); - QCOMPARE(modelResetSpy.count(), ++modelResetCount); - - QCOMPARE(countChangedSpy.count(), ++countChangedCount); - QCOMPARE(countChangedSpy.last().at(0).toInt(), 0); - - QCOMPARE(namesChangedSpy.count(), ++namesChangedCount); - QCOMPARE(namesChangedSpy.last().at(0).toStringList(), QStringList()); - - QCOMPARE(usersChangedSpy.count(), ++usersChangedCount); - QCOMPARE(usersChangedSpy.last().at(0).value<QList<IrcUser*> >(), QList<IrcUser*>()); - - // ### empty model -> no layout change - userModel.setSortMethod(Irc::SortByActivity); - QCOMPARE(layoutAboutToBeChangedSpy.count(), layoutAboutToBeChangedCount); - QCOMPARE(layoutChangedSpy.count(), layoutChangedCount); - - // ### reset again - userModel.setChannel(channel); - QCOMPARE(modelAboutToBeResetSpy.count(), ++modelAboutToBeResetCount); - QCOMPARE(modelResetSpy.count(), ++modelResetCount); - - // Irc::SortByActivity - users = QList<IrcUser*>() << communi << ChanServ << qtassistant << Guest1234 << qout; - names = QStringList() << "communi" << "ChanServ" << "qtassistant" << "Guest1234" << "qout"; - titles = QStringList() << "communi" << "@ChanServ" << "+qtassistant" << "Guest1234" << "+qout"; - - QCOMPARE(userModel.count(), names.count()); - for (int i = 0; i < userModel.count(); ++i) { - QCOMPARE(userModel.get(i)->name(), names.at(i)); - QCOMPARE(userModel.get(i)->title(), titles.at(i)); - QCOMPARE(userModel.get(i), users.at(i)); - } - - QCOMPARE(countChangedSpy.count(), ++countChangedCount); - QCOMPARE(countChangedSpy.last().at(0).toInt(), users.count()); - - QCOMPARE(namesChangedSpy.count(), ++namesChangedCount); - QCOMPARE(namesChangedSpy.last().at(0).toStringList(), QStringList() << "ChanServ" << "Guest1234" << "communi" << "qout" << "qtassistant"); - - QCOMPARE(usersChangedSpy.count(), ++usersChangedCount); - QCOMPARE(usersChangedSpy.last().at(0).value<QList<IrcUser*> >(), users); - - QSignalSpy guestTitleChangedSpy(Guest1234, SIGNAL(titleChanged(QString))); - QSignalSpy guestNameChangedSpy(Guest1234, SIGNAL(nameChanged(QString))); - QSignalSpy guestPrefixChangedSpy(Guest1234, SIGNAL(prefixChanged(QString))); - QSignalSpy guestModeChangedSpy(Guest1234, SIGNAL(modeChanged(QString))); - QVERIFY(guestTitleChangedSpy.isValid()); - QVERIFY(guestNameChangedSpy.isValid()); - QVERIFY(guestPrefixChangedSpy.isValid()); - QVERIFY(guestModeChangedSpy.isValid()); - - int guestTitleChangedCount = 0; - int guestNameChangedCount = 0; - int guestPrefixChangedCount = 0; - int guestModeChangedCount = 0; - - // ### sorted by activity -> trigger a change in names & users, count remains intact - QVERIFY(waitForWritten(":Guest1234!~Guest1234@hidd.en NICK :Guest5678")); - - QCOMPARE(Guest1234->name(), QString("Guest5678")); - QCOMPARE(Guest1234->title(), QString("Guest5678")); - - QCOMPARE(guestTitleChangedSpy.count(), ++guestTitleChangedCount); - QCOMPARE(guestTitleChangedSpy.last().at(0).toString(), QString("Guest5678")); - - QCOMPARE(guestNameChangedSpy.count(), ++guestNameChangedCount); - QCOMPARE(guestNameChangedSpy.last().at(0).toString(), QString("Guest5678")); - - QCOMPARE(guestPrefixChangedSpy.count(), guestPrefixChangedCount); - QCOMPARE(guestModeChangedSpy.count(), guestModeChangedCount); - - int previousIndex = users.indexOf(Guest1234); - - // Irc::SortByActivity - users = QList<IrcUser*>() << Guest1234 << communi << ChanServ << qtassistant << qout; - names = QStringList() << "Guest5678" << "communi" << "ChanServ" << "qtassistant" << "qout"; - titles = QStringList() << "Guest5678" << "communi" << "@ChanServ" << "+qtassistant" << "+qout"; - - int nextIndex = users.indexOf(Guest1234); - - QCOMPARE(userModel.count(), names.count()); - for (int i = 0; i < userModel.count(); ++i) { - QCOMPARE(userModel.get(i)->name(), names.at(i)); - QCOMPARE(userModel.get(i)->title(), titles.at(i)); - QCOMPARE(userModel.get(i), users.at(i)); - } - - QCOMPARE(countChangedSpy.count(), countChangedCount); - - QCOMPARE(namesChangedSpy.count(), ++namesChangedCount); - QCOMPARE(namesChangedSpy.last().at(0).toStringList(), QStringList() << "ChanServ" << "Guest5678" << "communi" << "qout" << "qtassistant"); - - QCOMPARE(usersChangedSpy.count(), ++usersChangedCount); - QCOMPARE(usersChangedSpy.last().at(0).value<QList<IrcUser*> >(), users); - - QCOMPARE(dataChangedSpy.count(), ++dataChangedCount); - QModelIndex topLeft = dataChangedSpy.last().at(0).value<QModelIndex>(); - QModelIndex bottomRight = dataChangedSpy.last().at(0).value<QModelIndex>(); - QVERIFY(topLeft.isValid()); - QVERIFY(bottomRight.isValid()); - QVERIFY(topLeft == bottomRight); - QCOMPARE(topLeft.row(), previousIndex); - QCOMPARE(topLeft.column(), 0); - - // TODO: nick change AND activity promotion - // => would ideally still result to just one change... - rowsAboutToBeRemovedCount += 2; - rowsRemovedCount += 2; - rowsAboutToBeInsertedCount += 2; - rowsInsertedCount += 2; - - QCOMPARE(rowsAboutToBeRemovedSpy.count(), rowsAboutToBeRemovedCount); - QCOMPARE(rowsAboutToBeRemovedSpy.last().at(0).value<QModelIndex>(), topLeft.parent()); - QCOMPARE(rowsAboutToBeRemovedSpy.last().at(1).toInt(), previousIndex); - QCOMPARE(rowsAboutToBeRemovedSpy.last().at(2).toInt(), previousIndex); - - QCOMPARE(rowsRemovedSpy.count(), rowsRemovedCount); - QCOMPARE(rowsRemovedSpy.last().at(0).value<QModelIndex>(), topLeft.parent()); - QCOMPARE(rowsRemovedSpy.last().at(1).toInt(), previousIndex); - QCOMPARE(rowsRemovedSpy.last().at(2).toInt(), previousIndex); - - QCOMPARE(rowsAboutToBeInsertedSpy.count(), rowsAboutToBeInsertedCount); - QCOMPARE(rowsAboutToBeInsertedSpy.last().at(0).value<QModelIndex>(), topLeft.parent()); - QCOMPARE(rowsAboutToBeInsertedSpy.last().at(1).toInt(), nextIndex); - QCOMPARE(rowsAboutToBeInsertedSpy.last().at(2).toInt(), nextIndex); - - QCOMPARE(rowsInsertedSpy.count(), rowsInsertedCount); - QCOMPARE(rowsInsertedSpy.last().at(0).value<QModelIndex>(), topLeft.parent()); - QCOMPARE(rowsInsertedSpy.last().at(1).toInt(), nextIndex); - QCOMPARE(rowsInsertedSpy.last().at(2).toInt(), nextIndex); - - // ### trigger sort -> layout change - userModel.setSortMethod(Irc::SortByTitle); - QCOMPARE(layoutAboutToBeChangedSpy.count(), ++layoutAboutToBeChangedCount); - QCOMPARE(layoutChangedSpy.count(), ++layoutChangedCount); - - // Irc::SortByTitle - users = QList<IrcUser*>() << ChanServ << qout << qtassistant << communi << Guest1234; - names = QStringList() << "ChanServ" << "qout" << "qtassistant" << "communi" << "Guest5678"; - titles = QStringList() << "@ChanServ" << "+qout" << "+qtassistant" << "communi" << "Guest5678"; - - QCOMPARE(userModel.count(), names.count()); - for (int i = 0; i < userModel.count(); ++i) { - QCOMPARE(userModel.get(i)->name(), names.at(i)); - QCOMPARE(userModel.get(i)->title(), titles.at(i)); - QCOMPARE(userModel.get(i), users.at(i)); - } - - // ### sorted by title -> trigger a change in names & users, count remains intact - QVERIFY(waitForWritten(":Guest5678!~Guest1234@hidd.en NICK :Guest1234")); - - QCOMPARE(Guest1234->name(), QString("Guest1234")); - QCOMPARE(Guest1234->title(), QString("Guest1234")); - - QCOMPARE(guestTitleChangedSpy.count(), ++guestTitleChangedCount); - QCOMPARE(guestTitleChangedSpy.last().at(0).toString(), QString("Guest1234")); - - QCOMPARE(guestNameChangedSpy.count(), ++guestNameChangedCount); - QCOMPARE(guestNameChangedSpy.last().at(0).toString(), QString("Guest1234")); - - QCOMPARE(guestPrefixChangedSpy.count(), guestPrefixChangedCount); - QCOMPARE(guestModeChangedSpy.count(), guestModeChangedCount); - - previousIndex = users.indexOf(Guest1234); - - // Irc::SortByTitle - users = QList<IrcUser*>() << ChanServ << qout << qtassistant << communi << Guest1234; - names = QStringList() << "ChanServ" << "qout" << "qtassistant" << "communi" << "Guest1234"; - titles = QStringList() << "@ChanServ" << "+qout" << "+qtassistant" << "communi" << "Guest1234"; - - nextIndex = users.indexOf(Guest1234); - - QCOMPARE(userModel.count(), names.count()); - for (int i = 0; i < userModel.count(); ++i) { - QCOMPARE(userModel.get(i)->name(), names.at(i)); - QCOMPARE(userModel.get(i)->title(), titles.at(i)); - QCOMPARE(userModel.get(i), users.at(i)); - } - - QCOMPARE(countChangedSpy.count(), countChangedCount); - - QCOMPARE(namesChangedSpy.count(), ++namesChangedCount); - QCOMPARE(namesChangedSpy.last().at(0).toStringList(), QStringList() << "ChanServ" << "Guest1234" << "communi" << "qout" << "qtassistant"); - - QCOMPARE(usersChangedSpy.count(), usersChangedCount); - - QCOMPARE(dataChangedSpy.count(), ++dataChangedCount); - topLeft = dataChangedSpy.last().at(0).value<QModelIndex>(); - bottomRight = dataChangedSpy.last().at(1).value<QModelIndex>(); - QVERIFY(topLeft.isValid()); - QVERIFY(bottomRight.isValid()); - QVERIFY(topLeft == bottomRight); - QCOMPARE(topLeft.row(), 4); - QCOMPARE(topLeft.column(), 0); - - // TODO: nick change without index change - // => would ideally result to merely a data change... - QCOMPARE(previousIndex, nextIndex); - - QCOMPARE(rowsAboutToBeRemovedSpy.count(), ++rowsAboutToBeRemovedCount); - QCOMPARE(rowsAboutToBeRemovedSpy.last().at(0).value<QModelIndex>(), topLeft.parent()); - QCOMPARE(rowsAboutToBeRemovedSpy.last().at(1).toInt(), previousIndex); - QCOMPARE(rowsAboutToBeRemovedSpy.last().at(2).toInt(), previousIndex); - - QCOMPARE(rowsRemovedSpy.count(), ++rowsRemovedCount); - QCOMPARE(rowsRemovedSpy.last().at(0).value<QModelIndex>(), topLeft.parent()); - QCOMPARE(rowsRemovedSpy.last().at(1).toInt(), previousIndex); - QCOMPARE(rowsRemovedSpy.last().at(2).toInt(), previousIndex); - - QCOMPARE(rowsAboutToBeInsertedSpy.count(), ++rowsAboutToBeInsertedCount); - QCOMPARE(rowsAboutToBeInsertedSpy.last().at(0).value<QModelIndex>(), topLeft.parent()); - QCOMPARE(rowsAboutToBeInsertedSpy.last().at(1).toInt(), nextIndex); - QCOMPARE(rowsAboutToBeInsertedSpy.last().at(2).toInt(), nextIndex); - - QCOMPARE(rowsInsertedSpy.count(), ++rowsInsertedCount); - QCOMPARE(rowsInsertedSpy.last().at(0).value<QModelIndex>(), topLeft.parent()); - QCOMPARE(rowsInsertedSpy.last().at(1).toInt(), nextIndex); - QCOMPARE(rowsInsertedSpy.last().at(2).toInt(), nextIndex); - - // ### sorted by title -> trigger a change in users, count & names remain intact - QVERIFY(waitForWritten(":ChanServ!ChanServ@services. MODE #communi +v Guest1234")); - - QCOMPARE(Guest1234->name(), QString("Guest1234")); - QCOMPARE(Guest1234->title(), QString("+Guest1234")); - QCOMPARE(Guest1234->prefix(), QString("+")); - QCOMPARE(Guest1234->mode(), QString("v")); - - QCOMPARE(guestTitleChangedSpy.count(), ++guestTitleChangedCount); - QCOMPARE(guestTitleChangedSpy.last().at(0).toString(), QString("+Guest1234")); - - QCOMPARE(guestNameChangedSpy.count(), guestNameChangedCount); - - QCOMPARE(guestPrefixChangedSpy.count(), ++guestPrefixChangedCount); - QCOMPARE(guestPrefixChangedSpy.last().at(0).toString(), QString("+")); - - QCOMPARE(guestModeChangedSpy.count(), ++guestModeChangedCount); - QCOMPARE(guestModeChangedSpy.last().at(0).toString(), QString("v")); - - previousIndex = users.indexOf(Guest1234); - - // Irc::SortByTitle - users = QList<IrcUser*>() << ChanServ << Guest1234 << qout << qtassistant << communi; - names = QStringList() << "ChanServ" << "Guest1234" << "qout" << "qtassistant" << "communi"; - titles = QStringList() << "@ChanServ" << "+Guest1234" << "+qout" << "+qtassistant" << "communi"; - - nextIndex = users.indexOf(Guest1234); - - QCOMPARE(userModel.count(), names.count()); - for (int i = 0; i < userModel.count(); ++i) { - QCOMPARE(userModel.get(i)->name(), names.at(i)); - QCOMPARE(userModel.get(i)->title(), titles.at(i)); - QCOMPARE(userModel.get(i), users.at(i)); - } - - QCOMPARE(countChangedSpy.count(), countChangedCount); - - QCOMPARE(namesChangedSpy.count(), namesChangedCount); - - QCOMPARE(usersChangedSpy.count(), ++usersChangedCount); - QCOMPARE(usersChangedSpy.last().at(0).value<QList<IrcUser*> >(), users); - - QCOMPARE(dataChangedSpy.count(), ++dataChangedCount); - topLeft = dataChangedSpy.last().at(0).value<QModelIndex>(); - bottomRight = dataChangedSpy.last().at(1).value<QModelIndex>(); - QVERIFY(topLeft.isValid()); - QVERIFY(bottomRight.isValid()); - QVERIFY(topLeft == bottomRight); - QCOMPARE(topLeft.row(), previousIndex); - QCOMPARE(topLeft.column(), 0); - - QCOMPARE(rowsAboutToBeRemovedSpy.count(), ++rowsAboutToBeRemovedCount); - QCOMPARE(rowsAboutToBeRemovedSpy.last().at(0).value<QModelIndex>(), topLeft.parent()); - QCOMPARE(rowsAboutToBeRemovedSpy.last().at(1).toInt(), previousIndex); - QCOMPARE(rowsAboutToBeRemovedSpy.last().at(2).toInt(), previousIndex); - - QCOMPARE(rowsRemovedSpy.count(), ++rowsRemovedCount); - QCOMPARE(rowsRemovedSpy.last().at(0).value<QModelIndex>(), topLeft.parent()); - QCOMPARE(rowsRemovedSpy.last().at(1).toInt(), previousIndex); - QCOMPARE(rowsRemovedSpy.last().at(2).toInt(), previousIndex); - - QCOMPARE(rowsAboutToBeInsertedSpy.count(), ++rowsAboutToBeInsertedCount); - QCOMPARE(rowsAboutToBeInsertedSpy.last().at(0).value<QModelIndex>(), topLeft.parent()); - QCOMPARE(rowsAboutToBeInsertedSpy.last().at(1).toInt(), nextIndex); - QCOMPARE(rowsAboutToBeInsertedSpy.last().at(2).toInt(), nextIndex); - - QCOMPARE(rowsInsertedSpy.count(), ++rowsInsertedCount); - QCOMPARE(rowsInsertedSpy.last().at(0).value<QModelIndex>(), topLeft.parent()); - QCOMPARE(rowsInsertedSpy.last().at(1).toInt(), nextIndex); - QCOMPARE(rowsInsertedSpy.last().at(2).toInt(), nextIndex); - - // ### sorted by title -> trigger a change in users, count & names remain intact - QVERIFY(waitForWritten(":ChanServ!ChanServ@services. MODE #communi -v Guest1234")); - - QCOMPARE(Guest1234->name(), QString("Guest1234")); - QCOMPARE(Guest1234->title(), QString("Guest1234")); - QCOMPARE(Guest1234->prefix(), QString()); - QCOMPARE(Guest1234->mode(), QString()); - - QCOMPARE(guestTitleChangedSpy.count(), ++guestTitleChangedCount); - QCOMPARE(guestTitleChangedSpy.last().at(0).toString(), QString("Guest1234")); - - QCOMPARE(guestNameChangedSpy.count(), guestNameChangedCount); - - QCOMPARE(guestPrefixChangedSpy.count(), ++guestPrefixChangedCount); - QCOMPARE(guestPrefixChangedSpy.last().at(0).toString(), QString()); - - QCOMPARE(guestModeChangedSpy.count(), ++guestModeChangedCount); - QCOMPARE(guestModeChangedSpy.last().at(0).toString(), QString()); - - previousIndex = users.indexOf(Guest1234); - - // Irc::SortByTitle - users = QList<IrcUser*>() << ChanServ << qout << qtassistant << communi << Guest1234; - names = QStringList() << "ChanServ" << "qout" << "qtassistant" << "communi" << "Guest1234"; - titles = QStringList() << "@ChanServ" << "+qout" << "+qtassistant" << "communi" << "Guest1234"; - - nextIndex = users.indexOf(Guest1234); - - QCOMPARE(userModel.count(), names.count()); - for (int i = 0; i < userModel.count(); ++i) { - QCOMPARE(userModel.get(i)->name(), names.at(i)); - QCOMPARE(userModel.get(i)->title(), titles.at(i)); - QCOMPARE(userModel.get(i), users.at(i)); - } - - QCOMPARE(countChangedSpy.count(), countChangedCount); - - QCOMPARE(namesChangedSpy.count(), namesChangedCount); - - QCOMPARE(usersChangedSpy.count(), ++usersChangedCount); - QCOMPARE(usersChangedSpy.last().at(0).value<QList<IrcUser*> >(), users); - - QCOMPARE(dataChangedSpy.count(), ++dataChangedCount); - topLeft = dataChangedSpy.last().at(0).value<QModelIndex>(); - bottomRight = dataChangedSpy.last().at(1).value<QModelIndex>(); - QVERIFY(topLeft.isValid()); - QVERIFY(bottomRight.isValid()); - QVERIFY(topLeft == bottomRight); - QCOMPARE(topLeft.row(), previousIndex); - QCOMPARE(topLeft.column(), 0); - - QCOMPARE(rowsAboutToBeRemovedSpy.count(), ++rowsAboutToBeRemovedCount); - QCOMPARE(rowsAboutToBeRemovedSpy.last().at(0).value<QModelIndex>(), topLeft.parent()); - QCOMPARE(rowsAboutToBeRemovedSpy.last().at(1).toInt(), previousIndex); - QCOMPARE(rowsAboutToBeRemovedSpy.last().at(2).toInt(), previousIndex); - - QCOMPARE(rowsRemovedSpy.count(), ++rowsRemovedCount); - QCOMPARE(rowsRemovedSpy.last().at(0).value<QModelIndex>(), topLeft.parent()); - QCOMPARE(rowsRemovedSpy.last().at(1).toInt(), previousIndex); - QCOMPARE(rowsRemovedSpy.last().at(2).toInt(), previousIndex); - - QCOMPARE(rowsAboutToBeInsertedSpy.count(), ++rowsAboutToBeInsertedCount); - QCOMPARE(rowsAboutToBeInsertedSpy.last().at(0).value<QModelIndex>(), topLeft.parent()); - QCOMPARE(rowsAboutToBeInsertedSpy.last().at(1).toInt(), nextIndex); - QCOMPARE(rowsAboutToBeInsertedSpy.last().at(2).toInt(), nextIndex); - - QCOMPARE(rowsInsertedSpy.count(), ++rowsInsertedCount); - QCOMPARE(rowsInsertedSpy.last().at(0).value<QModelIndex>(), topLeft.parent()); - QCOMPARE(rowsInsertedSpy.last().at(1).toInt(), nextIndex); - QCOMPARE(rowsInsertedSpy.last().at(2).toInt(), nextIndex); - - // ### sorted by title -> trigger a change in count, users & names - QVERIFY(waitForWritten(":Guest1234!~Guest1234@hidd.en PART #communi")); - - QVERIFY(Guest1234); // deleteLater()'d - - QCOMPARE(aboutToBeRemovedSpy.count(), ++aboutToBeRemovedCount); - QCOMPARE(aboutToBeRemovedSpy.last().at(0).value<IrcUser*>(), Guest1234.data()); - - QCOMPARE(removedSpy.count(), ++removedCount); - QCOMPARE(removedSpy.last().at(0).value<IrcUser*>(), Guest1234.data()); - - previousIndex = users.indexOf(Guest1234); - - QCoreApplication::sendPostedEvents(Guest1234, QEvent::DeferredDelete); - QVERIFY(!Guest1234); - - // Irc::SortByTitle - users = QList<IrcUser*>() << ChanServ << qout << qtassistant << communi; - names = QStringList() << "ChanServ" << "qout" << "qtassistant" << "communi"; - titles = QStringList() << "@ChanServ" << "+qout" << "+qtassistant" << "communi"; - - nextIndex = users.indexOf(Guest1234); - - QCOMPARE(userModel.count(), names.count()); - for (int i = 0; i < userModel.count(); ++i) { - QCOMPARE(userModel.get(i)->name(), names.at(i)); - QCOMPARE(userModel.get(i)->title(), titles.at(i)); - QCOMPARE(userModel.get(i), users.at(i)); - } - - QCOMPARE(countChangedSpy.count(), ++countChangedCount); - QCOMPARE(countChangedSpy.last().at(0).toInt(), users.count()); - - QCOMPARE(namesChangedSpy.count(), ++namesChangedCount); - QCOMPARE(namesChangedSpy.last().at(0).toStringList(), QStringList() << "ChanServ" << "communi" << "qout" << "qtassistant"); - - QCOMPARE(usersChangedSpy.count(), ++usersChangedCount); - QCOMPARE(usersChangedSpy.last().at(0).value<QList<IrcUser*> >(), users); - - QCOMPARE(dataChangedSpy.count(), dataChangedCount); - - QCOMPARE(rowsAboutToBeRemovedSpy.count(), ++rowsAboutToBeRemovedCount); - QCOMPARE(rowsAboutToBeRemovedSpy.last().at(0).value<QModelIndex>(), topLeft.parent()); - QCOMPARE(rowsAboutToBeRemovedSpy.last().at(1).toInt(), previousIndex); - QCOMPARE(rowsAboutToBeRemovedSpy.last().at(2).toInt(), previousIndex); - - QCOMPARE(rowsRemovedSpy.count(), ++rowsRemovedCount); - QCOMPARE(rowsRemovedSpy.last().at(0).value<QModelIndex>(), topLeft.parent()); - QCOMPARE(rowsRemovedSpy.last().at(1).toInt(), previousIndex); - QCOMPARE(rowsRemovedSpy.last().at(2).toInt(), previousIndex); - - QCOMPARE(rowsAboutToBeInsertedSpy.count(), rowsAboutToBeInsertedCount); - - QCOMPARE(rowsInsertedSpy.count(), rowsInsertedCount); - - // ### sorted by title -> trigger a change in count, users & names - QVERIFY(waitForWritten(":Guest1234!~Guest1234@hidd.en JOIN #communi")); - - Guest1234 = userModel.find("Guest1234"); - QVERIFY(Guest1234); - - QCOMPARE(aboutToBeAddedSpy.count(), ++aboutToBeAddedCount); - QCOMPARE(aboutToBeAddedSpy.last().at(0).value<IrcUser*>(), Guest1234.data()); - - QCOMPARE(addedSpy.count(), ++addedCount); - QCOMPARE(addedSpy.last().at(0).value<IrcUser*>(), Guest1234.data()); - - previousIndex = users.indexOf(Guest1234); - - // Irc::SortByTitle - users = QList<IrcUser*>() << ChanServ << qout << qtassistant << communi << Guest1234; - names = QStringList() << "ChanServ" << "qout" << "qtassistant" << "communi" << "Guest1234"; - titles = QStringList() << "@ChanServ" << "+qout" << "+qtassistant" << "communi" << "Guest1234"; - - nextIndex = users.indexOf(Guest1234); - - QCOMPARE(userModel.count(), names.count()); - for (int i = 0; i < userModel.count(); ++i) { - QCOMPARE(userModel.get(i)->name(), names.at(i)); - QCOMPARE(userModel.get(i)->title(), titles.at(i)); - QCOMPARE(userModel.get(i), users.at(i)); - } - - QCOMPARE(countChangedSpy.count(), ++countChangedCount); - QCOMPARE(countChangedSpy.last().at(0).toInt(), users.count()); - - QCOMPARE(namesChangedSpy.count(), ++namesChangedCount); - QCOMPARE(namesChangedSpy.last().at(0).toStringList(), QStringList() << "ChanServ" << "Guest1234" << "communi" << "qout" << "qtassistant"); - - QCOMPARE(usersChangedSpy.count(), ++usersChangedCount); - QCOMPARE(usersChangedSpy.last().at(0).value<QList<IrcUser*> >(), users); - - QCOMPARE(dataChangedSpy.count(), dataChangedCount); - - QCOMPARE(rowsAboutToBeRemovedSpy.count(), rowsAboutToBeRemovedCount); - - QCOMPARE(rowsRemovedSpy.count(), rowsRemovedCount); - - QCOMPARE(rowsAboutToBeInsertedSpy.count(), ++rowsAboutToBeInsertedCount); - QCOMPARE(rowsAboutToBeInsertedSpy.last().at(0).value<QModelIndex>(), topLeft.parent()); - QCOMPARE(rowsAboutToBeInsertedSpy.last().at(1).toInt(), nextIndex); - QCOMPARE(rowsAboutToBeInsertedSpy.last().at(2).toInt(), nextIndex); - - QCOMPARE(rowsInsertedSpy.count(), ++rowsInsertedCount); - QCOMPARE(rowsInsertedSpy.last().at(0).value<QModelIndex>(), topLeft.parent()); - QCOMPARE(rowsInsertedSpy.last().at(1).toInt(), nextIndex); - QCOMPARE(rowsInsertedSpy.last().at(2).toInt(), nextIndex); - - QPointer<IrcUser> Bot = Guest1234; - - QSignalSpy botTitleChangedSpy(Guest1234, SIGNAL(titleChanged(QString))); - QSignalSpy botNameChangedSpy(Guest1234, SIGNAL(nameChanged(QString))); - QSignalSpy botPrefixChangedSpy(Guest1234, SIGNAL(prefixChanged(QString))); - QSignalSpy botModeChangedSpy(Guest1234, SIGNAL(modeChanged(QString))); - QVERIFY(botTitleChangedSpy.isValid()); - QVERIFY(botNameChangedSpy.isValid()); - QVERIFY(botPrefixChangedSpy.isValid()); - QVERIFY(botModeChangedSpy.isValid()); - - int botTitleChangedCount = 0; - int botNameChangedCount = 0; - int botPrefixChangedCount = 0; - int botModeChangedCount = 0; - - // ### sorted by title -> trigger a change in users & names, count remains intact - QVERIFY(waitForWritten(":Guest1234!~Guest1234@hidd.en NICK :Bot")); - - QCOMPARE(Bot->name(), QString("Bot")); - QCOMPARE(Bot->title(), QString("Bot")); - - QCOMPARE(botTitleChangedSpy.count(), ++botTitleChangedCount); - QCOMPARE(botTitleChangedSpy.last().at(0).toString(), QString("Bot")); - - QCOMPARE(botNameChangedSpy.count(), ++botNameChangedCount); - QCOMPARE(botNameChangedSpy.last().at(0).toString(), QString("Bot")); - - QCOMPARE(botPrefixChangedSpy.count(), botPrefixChangedCount); - QCOMPARE(botModeChangedSpy.count(), botModeChangedCount); - - previousIndex = users.indexOf(Bot); - - // Irc::SortByTitle - users = QList<IrcUser*>() << ChanServ << qout << qtassistant << Bot << communi; - names = QStringList() << "ChanServ" << "qout" << "qtassistant" << "Bot" << "communi"; - titles = QStringList() << "@ChanServ" << "+qout" << "+qtassistant" << "Bot" << "communi"; - - nextIndex = users.indexOf(Bot); - - QCOMPARE(userModel.count(), names.count()); - for (int i = 0; i < userModel.count(); ++i) { - QCOMPARE(userModel.get(i)->name(), names.at(i)); - QCOMPARE(userModel.get(i)->title(), titles.at(i)); - QCOMPARE(userModel.get(i), users.at(i)); - } - - QCOMPARE(countChangedSpy.count(), countChangedCount); - - QCOMPARE(namesChangedSpy.count(), ++namesChangedCount); - QCOMPARE(namesChangedSpy.last().at(0).toStringList(), QStringList() << "Bot" << "ChanServ" << "communi" << "qout" << "qtassistant"); - - QCOMPARE(usersChangedSpy.count(), ++usersChangedCount); - QCOMPARE(usersChangedSpy.last().at(0).value<QList<IrcUser*> >(), users); - - QCOMPARE(dataChangedSpy.count(), ++dataChangedCount); - topLeft = dataChangedSpy.last().at(0).value<QModelIndex>(); - bottomRight = dataChangedSpy.last().at(0).value<QModelIndex>(); - QVERIFY(topLeft.isValid()); - QVERIFY(bottomRight.isValid()); - QVERIFY(topLeft == bottomRight); - QCOMPARE(topLeft.row(), previousIndex); - QCOMPARE(topLeft.column(), 0); - - QCOMPARE(rowsAboutToBeRemovedSpy.count(), ++rowsAboutToBeRemovedCount); - QCOMPARE(rowsAboutToBeRemovedSpy.last().at(0).value<QModelIndex>(), topLeft.parent()); - QCOMPARE(rowsAboutToBeRemovedSpy.last().at(1).toInt(), previousIndex); - QCOMPARE(rowsAboutToBeRemovedSpy.last().at(2).toInt(), previousIndex); - - QCOMPARE(rowsRemovedSpy.count(), ++rowsRemovedCount); - QCOMPARE(rowsRemovedSpy.last().at(0).value<QModelIndex>(), topLeft.parent()); - QCOMPARE(rowsRemovedSpy.last().at(1).toInt(), previousIndex); - QCOMPARE(rowsRemovedSpy.last().at(2).toInt(), previousIndex); - - QCOMPARE(rowsAboutToBeInsertedSpy.count(), ++rowsAboutToBeInsertedCount); - QCOMPARE(rowsAboutToBeInsertedSpy.last().at(0).value<QModelIndex>(), topLeft.parent()); - QCOMPARE(rowsAboutToBeInsertedSpy.last().at(1).toInt(), nextIndex); - QCOMPARE(rowsAboutToBeInsertedSpy.last().at(2).toInt(), nextIndex); - - QCOMPARE(rowsInsertedSpy.count(), ++rowsInsertedCount); - QCOMPARE(rowsInsertedSpy.last().at(0).value<QModelIndex>(), topLeft.parent()); - QCOMPARE(rowsInsertedSpy.last().at(1).toInt(), nextIndex); - QCOMPARE(rowsInsertedSpy.last().at(2).toInt(), nextIndex); - - // ### sorted by name, descending -> trigger a change in count, users & names - userModel.setSortOrder(Qt::DescendingOrder); - userModel.setSortMethod(Irc::SortByName); - QVERIFY(waitForWritten(":fake!fake@hidd.en JOIN #communi")); - - QPointer<IrcUser> fake = userModel.find("fake"); - QVERIFY(fake); - - QCOMPARE(aboutToBeAddedSpy.count(), ++aboutToBeAddedCount); - QCOMPARE(aboutToBeAddedSpy.last().at(0).value<IrcUser*>(), fake.data()); - - QCOMPARE(addedSpy.count(), ++addedCount); - QCOMPARE(addedSpy.last().at(0).value<IrcUser*>(), fake.data()); - - previousIndex = users.indexOf(fake); - - // Irc::SortByName - descending - users = QList<IrcUser*>() << qtassistant << qout << fake << communi << ChanServ << Bot; - names = QStringList() << "qtassistant" << "qout" << "fake" << "communi" << "ChanServ" << "Bot"; - titles = QStringList() << "+qtassistant" << "+qout" << "fake" << "communi" << "@ChanServ" << "Bot"; - - nextIndex = users.indexOf(fake); - - QCOMPARE(userModel.count(), names.count()); - for (int i = 0; i < userModel.count(); ++i) { - QCOMPARE(userModel.get(i)->name(), names.at(i)); - QCOMPARE(userModel.get(i)->title(), titles.at(i)); - QCOMPARE(userModel.get(i), users.at(i)); - } - - QCOMPARE(countChangedSpy.count(), ++countChangedCount); - QCOMPARE(countChangedSpy.last().at(0).toInt(), users.count()); - - QCOMPARE(namesChangedSpy.count(), ++namesChangedCount); - QCOMPARE(namesChangedSpy.last().at(0).toStringList(), QStringList() << "Bot" << "ChanServ" << "communi" << "fake" << "qout" << "qtassistant"); - - QCOMPARE(usersChangedSpy.count(), ++usersChangedCount); - QCOMPARE(usersChangedSpy.last().at(0).value<QList<IrcUser*> >(), users); - - QCOMPARE(dataChangedSpy.count(), dataChangedCount); - - QCOMPARE(rowsAboutToBeRemovedSpy.count(), rowsAboutToBeRemovedCount); - - QCOMPARE(rowsRemovedSpy.count(), rowsRemovedCount); - - QCOMPARE(rowsAboutToBeInsertedSpy.count(), ++rowsAboutToBeInsertedCount); - QCOMPARE(rowsAboutToBeInsertedSpy.last().at(0).value<QModelIndex>(), topLeft.parent()); - QCOMPARE(rowsAboutToBeInsertedSpy.last().at(1).toInt(), nextIndex); - QCOMPARE(rowsAboutToBeInsertedSpy.last().at(2).toInt(), nextIndex); - - QCOMPARE(rowsInsertedSpy.count(), ++rowsInsertedCount); - QCOMPARE(rowsInsertedSpy.last().at(0).value<QModelIndex>(), topLeft.parent()); - QCOMPARE(rowsInsertedSpy.last().at(1).toInt(), nextIndex); - QCOMPARE(rowsInsertedSpy.last().at(2).toInt(), nextIndex); - - // QUIT -> no changes - QVERIFY(waitForWritten(":communi!communi@hidd.en QUIT :bye")); - - QCOMPARE(userModel.count(), names.count()); - for (int i = 0; i < userModel.count(); ++i) { - QCOMPARE(userModel.get(i)->name(), names.at(i)); - QCOMPARE(userModel.get(i)->title(), titles.at(i)); - QCOMPARE(userModel.get(i), users.at(i)); - } - - QCOMPARE(countChangedSpy.count(), countChangedCount); - QCOMPARE(namesChangedSpy.count(), namesChangedCount); - QCOMPARE(usersChangedSpy.count(), usersChangedCount); - QCOMPARE(dataChangedSpy.count(), dataChangedCount); - QCOMPARE(rowsAboutToBeRemovedSpy.count(), rowsAboutToBeRemovedCount); - QCOMPARE(rowsRemovedSpy.count(), rowsRemovedCount); - QCOMPARE(rowsAboutToBeInsertedSpy.count(), rowsAboutToBeInsertedCount); - QCOMPARE(rowsInsertedSpy.count(), rowsInsertedCount); - QCOMPARE(modelAboutToBeResetSpy.count(), modelAboutToBeResetCount); - QCOMPARE(modelResetSpy.count(), modelResetCount); -} - -void tst_IrcUserModel::testRoles() -{ - IrcUserModel model; - QHash<int, QByteArray> roles = model.roleNames(); - QCOMPARE(roles.take(Qt::DisplayRole), QByteArray("display")); - QCOMPARE(roles.take(Irc::UserRole), QByteArray("user")); - QCOMPARE(roles.take(Irc::NameRole), QByteArray("name")); - QCOMPARE(roles.take(Irc::PrefixRole), QByteArray("prefix")); - QCOMPARE(roles.take(Irc::ModeRole), QByteArray("mode")); - QCOMPARE(roles.take(Irc::TitleRole), QByteArray("title")); - QVERIFY(roles.isEmpty()); -} - -void tst_IrcUserModel::testAIM() -{ - IrcBufferModel bufferModel; - bufferModel.setConnection(connection); - - connection->open(); - QVERIFY(waitForOpened()); - - QVERIFY(waitForWritten(tst_IrcData::welcome())); - QCOMPARE(bufferModel.count(), 0); - waitForWritten(":communi!communi@hidd.en JOIN :#channel"); - QCOMPARE(bufferModel.count(), 1); - - IrcUserModel userModel(bufferModel.get(0)); - waitForWritten(":irc.ser.ver 353 communi = #channel :a @b +c"); - waitForWritten(":irc.ser.ver 366 communi #channel :End of /NAMES list."); - QCOMPARE(userModel.count(), 3); - - IrcUser* a = userModel.find("a"); - IrcUser* b = userModel.find("b"); - IrcUser* c = userModel.find("c"); - IrcUser* o = 0; - - QVERIFY(a); - QVERIFY(b); - QVERIFY(c); - - QAbstractItemModel* aim = &userModel; - QModelIndex ai = aim->index(0, 0); - QModelIndex bi = aim->index(1, 0); - QModelIndex ci = aim->index(2, 0); - QModelIndex oi = aim->index(100, 100); - - QVERIFY(ai.isValid()); - QVERIFY(bi.isValid()); - QVERIFY(ci.isValid()); - QVERIFY(!oi.isValid()); - - QCOMPARE(aim->rowCount(QModelIndex()), 3); - QCOMPARE(aim->rowCount(ai), 0); - - QCOMPARE(aim->columnCount(QModelIndex()), 1); - QCOMPARE(aim->columnCount(ai), 0); - - QCOMPARE(userModel.index(a), ai); - QCOMPARE(userModel.index(b), bi); - QCOMPARE(userModel.index(c), ci); - QVERIFY(!userModel.index(o).isValid()); - - QCOMPARE(userModel.user(ai), a); - QCOMPARE(userModel.user(bi), b); - QCOMPARE(userModel.user(ci), c); - QVERIFY(!userModel.user(oi)); - - userModel.setDisplayRole(Irc::TitleRole); - QCOMPARE(aim->data(ai, Qt::DisplayRole).toString(), a->title()); - QCOMPARE(aim->data(bi, Qt::DisplayRole).toString(), b->title()); - QCOMPARE(aim->data(ci, Qt::DisplayRole).toString(), c->title()); - QVERIFY(aim->data(oi, Qt::DisplayRole).toString().isEmpty()); - - userModel.setDisplayRole(Irc::UserRole); - QCOMPARE(aim->data(ai, Qt::DisplayRole).value<IrcUser*>(), a); - QCOMPARE(aim->data(bi, Qt::DisplayRole).value<IrcUser*>(), b); - QCOMPARE(aim->data(ci, Qt::DisplayRole).value<IrcUser*>(), c); - QVERIFY(!aim->data(oi, Qt::DisplayRole).value<IrcUser*>()); - - QCOMPARE(aim->data(ai, Irc::UserRole).value<IrcUser*>(), a); - QCOMPARE(aim->data(bi, Irc::UserRole).value<IrcUser*>(), b); - QCOMPARE(aim->data(ci, Irc::UserRole).value<IrcUser*>(), c); - QVERIFY(!aim->data(oi, Irc::UserRole).value<IrcUser*>()); - - QCOMPARE(aim->data(ai, Irc::TitleRole).toString(), a->title()); - QCOMPARE(aim->data(bi, Irc::TitleRole).toString(), b->title()); - QCOMPARE(aim->data(ci, Irc::TitleRole).toString(), c->title()); - QVERIFY(aim->data(oi, Irc::TitleRole).toString().isEmpty()); - - QCOMPARE(aim->data(ai, Irc::NameRole).toString(), a->name()); - QCOMPARE(aim->data(bi, Irc::NameRole).toString(), b->name()); - QCOMPARE(aim->data(ci, Irc::NameRole).toString(), c->name()); - QVERIFY(aim->data(oi, Irc::NameRole).toString().isEmpty()); - - QVERIFY(aim->data(ai, Irc::PrefixRole).toString().isEmpty()); - QCOMPARE(aim->data(bi, Irc::PrefixRole).toString(), QString("@")); - QCOMPARE(aim->data(ci, Irc::PrefixRole).toString(), QString("+")); - QVERIFY(aim->data(oi, Irc::PrefixRole).toString().isEmpty()); - - QVERIFY(aim->data(ai, Irc::ModeRole).toString().isEmpty()); - QCOMPARE(aim->data(bi, Irc::ModeRole).toString(), QString("o")); - QCOMPARE(aim->data(ci, Irc::ModeRole).toString(), QString("v")); - QVERIFY(aim->data(oi, Irc::ModeRole).toString().isEmpty()); -} - -void tst_IrcUserModel::testUser() -{ - IrcUserModel userModel; - - // ### setup #communi (5): communi @ChanServ +qtassistant Guest1234 +qout - IrcBufferModel bufferModel; - bufferModel.setConnection(connection); - - connection->open(); - QVERIFY(waitForOpened()); - - QVERIFY(waitForWritten(tst_IrcData::welcome())); - QVERIFY(waitForWritten(":communi!~communi@hidd.en JOIN :#communi")); - QVERIFY(waitForWritten(":irc.ifi.uio.no 353 communi = #communi :communi @ChanServ +qtassistant Guest1234 +qout")); - QVERIFY(waitForWritten(":irc.ifi.uio.no 366 communi #communi :End of NAMES list.")); - QCOMPARE(bufferModel.count(), 1); - IrcChannel* channel = bufferModel.get(0)->toChannel(); - QVERIFY(channel); - QCOMPARE(channel->title(), QString("#communi")); - - // ### ready to go! - userModel.setChannel(channel); - QCOMPARE(userModel.count(), 5); - - QPointer<IrcUser> communi = userModel.get(0); - QVERIFY(communi); - QCOMPARE(communi->name(), QString("communi")); - QVERIFY(!communi->isAway()); - QVERIFY(!communi->isServOp()); - - QPointer<IrcUser> ChanServ = userModel.get(1); - QVERIFY(ChanServ); - QCOMPARE(ChanServ->name(), QString("ChanServ")); - QVERIFY(!ChanServ->isAway()); - QVERIFY(!ChanServ->isServOp()); - - QPointer<IrcUser> qtassistant = userModel.get(2); - QVERIFY(qtassistant); - QCOMPARE(qtassistant->name(), QString("qtassistant")); - QVERIFY(!qtassistant->isAway()); - QVERIFY(!qtassistant->isServOp()); - - QPointer<IrcUser> Guest1234 = userModel.get(3); - QVERIFY(Guest1234); - QCOMPARE(Guest1234->name(), QString("Guest1234")); - QVERIFY(!Guest1234->isAway()); - QVERIFY(!Guest1234->isServOp()); - - QPointer<IrcUser> qout = userModel.get(4); - QVERIFY(qout); - QCOMPARE(qout->name(), QString("qout")); - QVERIFY(!qout->isAway()); - QVERIFY(!qout->isServOp()); - - QSignalSpy communiAwaySpy(communi.data(), SIGNAL(awayChanged(bool))); - QSignalSpy ChanServAwaySpy(ChanServ.data(), SIGNAL(awayChanged(bool))); - QSignalSpy qtassistantAwaySpy(qtassistant.data(), SIGNAL(awayChanged(bool))); - QSignalSpy Guest1234AwaySpy(Guest1234.data(), SIGNAL(awayChanged(bool))); - QSignalSpy qoutAwaySpy(qout.data(), SIGNAL(awayChanged(bool))); - - QVERIFY(communiAwaySpy.isValid()); - QVERIFY(ChanServAwaySpy.isValid()); - QVERIFY(qtassistantAwaySpy.isValid()); - QVERIFY(Guest1234AwaySpy.isValid()); - QVERIFY(qoutAwaySpy.isValid()); - - QSignalSpy communiServOpSpy(communi.data(), SIGNAL(servOpChanged(bool))); - QSignalSpy ChanServServOpSpy(ChanServ.data(), SIGNAL(servOpChanged(bool))); - QSignalSpy qtassistantServOpSpy(qtassistant.data(), SIGNAL(servOpChanged(bool))); - QSignalSpy Guest1234ServOpSpy(Guest1234.data(), SIGNAL(servOpChanged(bool))); - QSignalSpy qoutServOpSpy(qout.data(), SIGNAL(servOpChanged(bool))); - - QVERIFY(communiServOpSpy.isValid()); - QVERIFY(ChanServServOpSpy.isValid()); - QVERIFY(qtassistantServOpSpy.isValid()); - QVERIFY(Guest1234ServOpSpy.isValid()); - QVERIFY(qoutServOpSpy.isValid()); - - // first round - - QVERIFY(waitForWritten(":irc.ifi.uio.no 352 communi #communi ~communi hidd.en irc.ifi.uio.no communi H* :0 Communi")); - QVERIFY(!communi->isAway()); - QVERIFY(communi->isServOp()); - QCOMPARE(communiAwaySpy.count(), 0); - QCOMPARE(communiServOpSpy.count(), 1); - - QVERIFY(waitForWritten(":irc.ifi.uio.no 352 communi #communi ChanServ services. irc.ifi.uio.no ChanServ H@ :0 ChanServ")); - QVERIFY(!ChanServ->isAway()); - QVERIFY(!ChanServ->isServOp()); - QCOMPARE(ChanServAwaySpy.count(), 0); - QCOMPARE(ChanServServOpSpy.count(), 0); - - QVERIFY(waitForWritten(":irc.ifi.uio.no 352 communi #communi ~qtassistant hidd.en irc.ifi.uio.no qtassistant G+ :0 Qt Assistant")); - QVERIFY(qtassistant->isAway()); - QVERIFY(!qtassistant->isServOp()); - QCOMPARE(qtassistantAwaySpy.count(), 1); - QCOMPARE(qtassistantServOpSpy.count(), 0); - - QVERIFY(waitForWritten(":irc.ifi.uio.no 352 communi #communi ~guest hidd.en irc.ifi.uio.no Guest1234 H :0 Just a guest...")); - QVERIFY(!Guest1234->isAway()); - QVERIFY(!Guest1234->isServOp()); - QCOMPARE(Guest1234AwaySpy.count(), 0); - QCOMPARE(Guest1234ServOpSpy.count(), 0); - - QVERIFY(waitForWritten(":irc.ifi.uio.no 352 communi #communi ~qout hidd.en irc.ifi.uio.no qout G+ :0")); - QVERIFY(qout->isAway()); - QVERIFY(!qout->isServOp()); - QCOMPARE(qoutAwaySpy.count(), 1); - QCOMPARE(qoutServOpSpy.count(), 0); - - // second round - - QVERIFY(waitForWritten(":irc.ifi.uio.no 352 communi #communi ~communi hidd.en irc.ifi.uio.no communi G@ :0 Communi")); - QVERIFY(communi->isAway()); - QVERIFY(!communi->isServOp()); - QCOMPARE(communiAwaySpy.count(), 1); - QCOMPARE(communiServOpSpy.count(), 2); - - QVERIFY(waitForWritten(":irc.ifi.uio.no 352 communi #communi ChanServ services. irc.ifi.uio.no ChanServ H@ :0 ChanServ")); - QVERIFY(!ChanServ->isAway()); - QVERIFY(!ChanServ->isServOp()); - QCOMPARE(ChanServAwaySpy.count(), 0); - QCOMPARE(ChanServServOpSpy.count(), 0); - - QVERIFY(waitForWritten(":irc.ifi.uio.no 352 communi #communi ~qtassistant hidd.en irc.ifi.uio.no qtassistant H+ :0 Qt Assistant")); - QVERIFY(!qtassistant->isAway()); - QVERIFY(!qtassistant->isServOp()); - QCOMPARE(qtassistantAwaySpy.count(), 2); - QCOMPARE(qtassistantServOpSpy.count(), 0); - - QVERIFY(waitForWritten(":irc.ifi.uio.no 352 communi #communi ~guest hidd.en irc.ifi.uio.no Guest1234 G :0 Just a guest...")); - QVERIFY(Guest1234->isAway()); - QVERIFY(!Guest1234->isServOp()); - QCOMPARE(Guest1234AwaySpy.count(), 1); - QCOMPARE(Guest1234ServOpSpy.count(), 0); - - QVERIFY(waitForWritten(":irc.ifi.uio.no 352 communi #communi ~qout hidd.en irc.ifi.uio.no qout G+ :0")); - QVERIFY(qout->isAway()); - QVERIFY(!qout->isServOp()); - QCOMPARE(qoutAwaySpy.count(), 1); - QCOMPARE(qoutServOpSpy.count(), 0); -} - -QTEST_MAIN(tst_IrcUserModel) - -#include "tst_ircusermodel.moc" diff --git a/src/libcommuni/tests/auto/shared/shared.pri b/src/libcommuni/tests/auto/shared/shared.pri deleted file mode 100644 index 1b7258b..0000000 --- a/src/libcommuni/tests/auto/shared/shared.pri +++ /dev/null @@ -1,16 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -DEPENDPATH += $$PWD -INCLUDEPATH += $$PWD - -HEADERS += $$PWD/tst_euirc.h -HEADERS += $$PWD/tst_freenode.h -HEADERS += $$PWD/tst_ircnet.h - -HEADERS += $$PWD/tst_ircdata.h -SOURCES += $$PWD/tst_ircdata.cpp - -HEADERS += $$PWD/tst_ircclientserver.h -SOURCES += $$PWD/tst_ircclientserver.cpp diff --git a/src/libcommuni/tests/auto/shared/tst_euirc.h b/src/libcommuni/tests/auto/shared/tst_euirc.h deleted file mode 100644 index 116e8a2..0000000 --- a/src/libcommuni/tests/auto/shared/tst_euirc.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This test is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -#ifndef TST_EUIRC_H -#define TST_EUIRC_H - -static const char* euirc_welcome = - ":irc.rbx.fr.euirc.net 001 communi :Welcome to the euIRCnet IRC Network communi!~communi@hidd.en\n" - ":irc.rbx.fr.euirc.net 002 communi :Your host is irc.rbx.fr.euirc.net, running version euIRCd 1.3.4-e544f33+debug\n" - ":irc.rbx.fr.euirc.net 003 communi :This server was created Mon Jul 08 2013 at 07:09:56 CEST\n" - ":irc.rbx.fr.euirc.net 004 communi irc.rbx.fr.euirc.net euIRCd 1.3.4-e544f33+debug oOiRwhsSaHANCrxjWqBZ1dtcpPUnTI vhoaqpsmtinrRQKVHOAYCNcSXUTxW5beIwklfLBuFM\n" - ":irc.rbx.fr.euirc.net 005 communi NETWORK=euIRCnet WATCH=128 SAFELIST PREFIX=(qaohv)*!@%+ CHANMODES=bewI,k,flBL,cimnprstxACHKNOQRiTSVWXY5 CHANTYPES=#&+ KICKLEN=307 KNOCK MAP MAXLIST=bewI:100 MODES=6 NICKLEN=30 SILENCE=5 TOPICLEN=307 AWAYLEN=307 WALLCHOPS CHANNELLEN=32 MAXCHANNELS=30 MAXTARGETS=20 INVEX=I EXCEPT=e :are available on this server\n" - ":irc.rbx.fr.euirc.net 005 communi STARTTLS :are available on this server\n" - ":irc.rbx.fr.euirc.net 251 communi :There are 14 users and 2768 invisible on 10 servers\n" - ":irc.rbx.fr.euirc.net 252 communi 24 :operator(s) online\n" - ":irc.rbx.fr.euirc.net 253 communi 1 :unknown connection(s)\n" - ":irc.rbx.fr.euirc.net 254 communi 1671 :channels formed\n" - ":irc.rbx.fr.euirc.net 255 communi :I have 1060 clients and 1 servers\n" - ":irc.rbx.fr.euirc.net 265 communi :Current Local Users: 1060 Max: 1221\n" - ":irc.rbx.fr.euirc.net 266 communi :Current Global Users: 2782 Max: 11082\n" - ":irc.rbx.fr.euirc.net 375 communi :- irc.rbx.fr.euirc.net Message of the Day -\n" - ":irc.rbx.fr.euirc.net 376 communi :End of /MOTD command\n"; - -static const char* euirc_join = - ":communi!~communi@hidd.en JOIN :#euirc\n" - ":irc.rbx.fr.euirc.net 332 communi #euirc :Welcome to euIRC || Problems? Join #opers || www.euirc.net || SSL and S/MIME authentication now available on all servers (port 6697) || euIRC meets facebook: www.facebook.com/euirc\n" - ":irc.rbx.fr.euirc.net 333 communi #euirc Renne 1370272649\n" - ":irc.rbx.fr.euirc.net 353 communi = #euirc :communi Guest774 burning_rabbit %aleksandr netsplit Jerry Brueggus charly6 HermiNe %brue Mercutio stephan48 NeinnHomer Luthandorius Technomagier |Baron| Laknu_ Polizist1 !alamar rhonabwy @Vampi Mayday @Road radic MorkiTorki PRoTaGoNiST Simik|ZzZZ @][flat][ statsbot7 !mensch holygoth firefly Kanibal Luchs xinator CR|Noah|Away MrWolf !specon CR|Dani %leni CR|Sven @Renne Revi Arovin pinGUUin Vampire666 gastgast_\n" - ":irc.rbx.fr.euirc.net 353 communi = #euirc :konqui Tina-chan_onAir picoFF @medice SLXViper !TC sb Kn0p3XX SlySing faZe Icedream Der_Orwischer Goggy g00fy Burle klaxa [Chaos|Krieger] Guest14697 Tehlak icefly Herr_Vorragend Ding Nothing4You Sven|Off Zarquod !jun|per scaba meister Hikaru-Shindo Alx Kinji-san Guest13553 !Chibisuke\n" - ":irc.rbx.fr.euirc.net 366 communi #euirc :End of /NAMES list.\n"; - -static const char* euirc_names = - "communi Guest774 burning_rabbit aleksandr netsplit Jerry Brueggus charly6 HermiNe brue Mercutio stephan48 NeinnHomer Luthandorius Technomagier |Baron| Laknu_ Polizist1 alamar rhonabwy Vampi Mayday Road radic MorkiTorki PRoTaGoNiST Simik|ZzZZ ][flat][ statsbot7 mensch holygoth firefly Kanibal Luchs xinator CR|Noah|Away MrWolf specon CR|Dani leni CR|Sven Renne Revi Arovin pinGUUin Vampire666 gastgast_ " - "konqui Tina-chan_onAir picoFF medice SLXViper TC sb Kn0p3XX SlySing faZe Icedream Der_Orwischer Goggy g00fy Burle klaxa [Chaos|Krieger] Guest14697 Tehlak icefly Herr_Vorragend Ding Nothing4You Sven|Off Zarquod jun|per scaba meister Hikaru-Shindo Alx Kinji-san Guest13553 Chibisuke"; - -static const char* euirc_admins = "alamar mensch specon TC jun|per Chibisuke"; -static const char* euirc_ops = "Vampi Road ][flat][ Renne medice"; -static const char* euirc_halfops = "aleksandr brue leni"; -static const char* euirc_voices = ""; - -#endif // TST_EUIRC_H diff --git a/src/libcommuni/tests/auto/shared/tst_freenode.h b/src/libcommuni/tests/auto/shared/tst_freenode.h deleted file mode 100644 index 345abeb..0000000 --- a/src/libcommuni/tests/auto/shared/tst_freenode.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This test is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -#ifndef TST_FREENODE_H -#define TST_FREENODE_H - -static const char* freenode_welcome = - ":moorcock.freenode.net NOTICE * :*** Looking up your hostname...\r\n" - ":moorcock.freenode.net NOTICE * :*** Checking Ident\r\n" - ":moorcock.freenode.net NOTICE * :*** Found your hostname\r\n" - ":moorcock.freenode.net NOTICE * :*** No Ident response\r\n" - ":moorcock.freenode.net 001 communi :Welcome to the freenode Internet Relay Chat Network communi\r\n" - ":moorcock.freenode.net 002 communi :Your host is moorcock.freenode.net[50.22.136.18/6667], running version ircd-seven-1.1.3\r\n" - ":moorcock.freenode.net 003 communi :This server was created Mon Dec 31 2012 at 15:37:06 CST\r\n" - ":moorcock.freenode.net 004 communi moorcock.freenode.net ircd-seven-1.1.3 DOQRSZaghilopswz CFILMPQSbcefgijklmnopqrstvz bkloveqjfI\r\n" - ":moorcock.freenode.net 005 communi CHANTYPES=# EXCEPTS INVEX CHANMODES=eIbq,k,flj,CFLMPQScgimnprstz CHANLIMIT=#:120 PREFIX=(ov)@+ MAXLIST=bqeI:100 MODES=4 NETWORK=freenode KNOCK STATUSMSG=@+ CALLERID=g :are supported by this server\r\n" - ":moorcock.freenode.net 005 communi CASEMAPPING=rfc1459 CHARSET=ascii NICKLEN=16 CHANNELLEN=50 TOPICLEN=390 ETRACE CPRIVMSG CNOTICE DEAF=D MONITOR=100 FNC TARGMAX=NAMES:1,LIST:1,KICK:1,WHOIS:1,PRIVMSG:4,NOTICE:4,ACCEPT:,MONITOR: :are supported by this server\r\n" - ":moorcock.freenode.net 005 communi EXTBAN=$,arxz WHOX CLIENTVER=3.0 SAFELIST ELIST=CTU :are supported by this server\r\n" - ":moorcock.freenode.net 251 communi :There are 231 users and 88216 invisible on 29 servers\r\n" - ":moorcock.freenode.net 252 communi 36 :IRC Operators online\r\n" - ":moorcock.freenode.net 253 communi 12 :unknown connection(s)\r\n" - ":moorcock.freenode.net 254 communi 49792 :channels formed\r\n" - ":moorcock.freenode.net 255 communi :I have 4723 clients and 1 servers\r\n" - ":moorcock.freenode.net 265 communi 4723 7446 :Current local users 4723, max 7446\r\n" - ":moorcock.freenode.net 266 communi 88447 92550 :Current global users 88447, max 92550\r\n" - ":moorcock.freenode.net 250 communi :Highest connection count: 7447 (7446 clients) (1286042 connections received)\r\n" - ":moorcock.freenode.net 375 communi :- moorcock.freenode.net Message of the Day -\r\n" - ":moorcock.freenode.net 372 communi :- Welcome to moorcock.freenode.net in ...\r\n" - ":moorcock.freenode.net 376 communi :End of /MOTD command.\r\n"; - -static const char* freenode_join = - ":communi!~communi@hidd.en JOIN #freenode\r\n" - ":moorcock.freenode.net 332 communi #freenode :Welcome to #freenode | Staff are voiced; some may also be on /stats p -- feel free to /msg us at any time | FAQ: http://freenode.net/faq.shtml | Unwelcome queries? Use /mode your_nick +R to block them. | Channel guidelines: http://freenode.net/poundfreenode.shtml | Blog: http://blog.freenode.net | Please don't comment on spam/trolls.\r\n" - ":moorcock.freenode.net 333 communi #freenode erry 1379357591\r\n" - ":moorcock.freenode.net 353 communi = #freenode :communi straterra absk007 pefn xlys Gromit TooCool Sambler gat0rs KarneAsada danis_963 Kiryx chrismeller deefloo black_male sxlnxdx bjork Kinny phobos_anomaly T13|sleeps JuxTApose Kolega2357 rorx techhelper1 hermatize Azimi iqualfragile fwilson skasturi mwallacesd mayday Guest76549 mcjohansen MangaKaDenza ARISTIDES ketas `- claptor ylluminate Cooky Brand3n cheater_1 Kirito digitaloktay Will| Iarfen abrotman smurfy Inaunt +mist Karol RougeR_\r\n" - ":moorcock.freenode.net 353 communi = #freenode :publickeating An_Ony_Moose michagogo Guest915` davidfg4 Ragnor s1lent_1 keee GingerGeek[Away] hibari derp S_T_A_N anonymuse asantoni road|runner LLckfan neoian2 aviancarrier nipples danieldaniel Pyrus Bry8Star shadowm_desktop furtardo rdymac TTSDA seaworthy Chiyo yscc Zombiebaron redpill f4cl3y Boohbah applebloom zorael kameloso^ Zetetic XAMPP wheels_up Cuppy-Cake mindlessjohnny Kymru mquin_ Rodja babilen kirin` David Affix jshyeung_ DarkAceZ karakedi\r\n" - ":moorcock.freenode.net 353 communi = #freenode :jraglin AdriDJ ToApolytoXaos whaletechno jlf Ricardo__ TmvC Sigma00 Casmo breck7 Oldiesmann Rappy naomi thiras moli FRCorey_ iderik glebihan cool_name Dwade09 UniOn eMBee Samual johnnymoo_logsta darknyan mlk dyay xBytez hammond M2Ys4U kobain monoprotic MiLK_ Noldorin njm Nomado Alina-malina abchirk_ Johannes13_ scorche dreamfighter Lars_G DCMT TomyLobo King_Hual No_One fling Mike_H CoreISP djdoody fdd pipitas Subo1977 jef redarrow marcoecc bin_sh TReK\r\n" - ":moorcock.freenode.net 353 communi = #freenode :[MortiKi] traveller__ Catie DarkG HisaoNakai scounder alone Corycia rudyismydog ToBeFree mcalabrese micadeyeye_ Sembei candlejackson cobra-the-joker ElectricDuck fuzeman swoolley ali_h dungodung oleo brain8675 Jordach rdy4watever KillYourTV coffeee levine m4v dvu ty _nova jgeboski Olipro CheckDavid impulse150 Shadow` jarr0dsz an3k Sove daemon Sary t0rben monkeyjuice Blas alexa the_TORmentor Transfusion kensington Spaceghost wolfmitchell lubmil synick\r\n" - ":moorcock.freenode.net 353 communi = #freenode :bitnumus krassomat zerox kel39 basiclaser tristero blaxnake themill meznak chinkung DJJeff RBecker XDS2010_ iamblue_cloud excilan Ristovski +JamesTait DrJ pfffx d9b4bef9 Corvus` s0ckpuppet Guest73279 Fritz7 JBreit zinx KhashayaR p3lim_ krisha quackgyver salkaman j4jackj Guest86053 nmmm wiretapped lunchdump goose sam Zarthus jje sl3dge Vutral sins- weie_ +Myrtti _raymond_ KindOne youlysses Mizael jeffz` meet_praveen STalKer-X osxdude surfdue torako\r\n" - ":moorcock.freenode.net 353 communi = #freenode :niloc132_ connor_goodwolf \\mSg vemacs iViLe slobber zendeavor drbean Tonitrus Nightmare ssbr GorillaPatch TingPing +Pricey james41382 Chenguang Jyothis RansomTime zz_Enviious TakinOver chrisss404 Brando753 mduca SlashLife_ Fuchs DW-Drew Firzen__ Suprano duke johest_ infinem Birdman3131 tmtowtdi Guest61594 BearPerson GiGaHuRtZ Hausas sdamashek salamanderrake jwbirdsong themadhatter mahomet smeggysmeg +kloeri_ kameloso Simonn ryukafalz tigrmesh Borg\r\n" - ":moorcock.freenode.net 353 communi = #freenode :Kingdom RougeR Venusaur resistivecorpse rush2end destiny rylinaux gskellig Wonkaewt philip quelx hside tann bolt btcvixen joako pr0ggie Xiti` arpita_ Hewn Argus Shippo +Tabmow FrankZZ Olanzapin zhezhe swiatos Argure Cathy JKL1234- Elfix Suicide cali urkl laissez-f sig-wall Guest76477 Rix jok- Guest41925 Thehelpfulone Nimrod oscailt stalled anexus _val_ Luke-Jr Konomi German__ acanete knuth Wildblue` juser Reshesnik Saiban corelax brr JoeK DarkSkyes\r\n" - ":moorcock.freenode.net 353 communi = #freenode :BullShark Zhaofeng_Li vidplace7 aji APLU RiverRat jerome Bateau raSter^ chipster Vito PigFlu Sprocks evaldoxie Atlas petan javalover MobiusL yerodin Barras2 Barras Humbedooh Niichan SlicerDicer slax0r Brodeles Aurora tandoori Davey Culator|Away gtmanfred kPa ex0a contempt Xack ecks prawnsalad wirehack7 nyuszika7h around Kelsie CaHogan mrpeenut24 Mozart IceCraft LifeIspain andrex sloof thismat troybattey notori0us UbuPhillup lasers BlastHardcheese muskeg\r\n" - ":moorcock.freenode.net 353 communi = #freenode :archigos +jayne XJR-9 realazthat Geert ahf nim edk spb @ChanServ Azure +nhandler a3li edggeek zol Bigcheese stylus DrBash ingo ningrat zu +tomaw felipe QueenOfFrance dxrt Y_Ichiro sysdef Ju576 rwg [NOT|HERE] sili Snowolf Shnaw tapout Joori GriGore665 LoganCloud Osaka funtapaz MidnighToker codeM0nK3Y Zen kinlo +Corey raj c0ded Remco Vikrant_ xander chadi |L| Shockk nickg ajpiano guntbert funkyHat +erry Mkaysi meingtsla seaLne EvilBlueShark pdelvo Strog\r\n" - ":moorcock.freenode.net 353 communi = #freenode :geb Vlad Deathspawn mdan Zidonuke jjs999jjs Bry8Star4 inthecompanyof Motzfeldt jlouis mooky avelldiroll tonsofpcs d2r Loki JPT Jamesofur +kloeri Paradox924X Zx3 cruxeternus sdx23 adaptr PwnSauce mattb J21 likewhoa scorche|sh hellome Geek_Juice xorpp Sonar_Guy luckman212 danar psybear eir StarRain sparticus stux|RC-only go|dfish teneightypea BaW d10n riddle Tm_T dive EvilJStoker glowsticks kode54 stwalkerster pocoyo shiftplusone bburhans trucMuche\r\n" - ":moorcock.freenode.net 353 communi = #freenode :moonlight +yano kevank jmfcool BranchPredictor pppingme Namikaze EvilOne FZTMm Sakaki Lord_Aizen demosdemon JasonDC duracrisis IHateHavingToReg +D[_] AlexJFox Th0masR0ss back Exio4 kunwon1 kc8qvp jeblair Jeruvy Kadet EmLeX aways Kester Spr0cket Thorne csssuf iotku nb solution Zanzibar em mwheeler x56 ChauffeR_ phrozen77 ivan`` The_Cop Monkeh ishanyx Whopper ghz JStoker brabo_ Triskelios sosby PoohBear Clete2 ErrantEgo SebastianFlyte JT jose rubick\r\n" - ":moorcock.freenode.net 353 communi = #freenode :RDash[AW] wwraith Hazel|artemis mrgaryniger tabeaux crazedpsyc +denny mh0 TheDrums Nothing4You_ Fieldy akawaka thumbs +Dave2 aghos_ Carly-_ Necrosan K1rk ClaudiaU_ HeavyMetal Zenum KOD3N cooldude mshaw milky sepeck Nineain nxp ktr TheLordOfTime dmlloyd sunitknandi arikb pumba Webu `DiM danmackay zomGreg tomboy_ callumacrae Devels rsrx zz_dbRenaud trout Kye Romance _ruben sfan5 brabo lassefaxoe Arieh John13 +ldunn OldSoul|4SiOS501 evilmquin xrated Ishaq\r\n" - ":moorcock.freenode.net 353 communi = #freenode :phreak turboroot ra roxell topyli jeremias doily Nazca Aehmlo_away nutron +christel +niko DLange drdanick AndrewBarber mediko psk1 TheJH skrip_kid +jbroome +njan RainbowDashh +Plazma vedalken254 codethought md_5 michagogo|cloud brad lolcat +LoRez MissionCritical honzik666 variousnefarious AlanBell tdfischer EricK|AFK AsadH apollo13 Wug[Hyperspace] nullrouted|cloud PeerLesS DarthGandalf cbdev shroud badunkadunk Happzz fortytwo netchip Mike3620 newton\r\n" - ":moorcock.freenode.net 353 communi = #freenode :Detch Gnumarcoo Brownout Junaos ThalinVien evilErrantEgo Bladerunner +JonathanD Beothoric FloTiX Alenah Raccoon ow GLolol c45y coinspelunk mysteerimasa real_alien tburg SPF|Cloud Cloudiumn like2helpU iMast777 geoffw8__ troyt Hypnotoad nkuttler Sjsws1078_ apoplexy3 trawl AntiSpamMeta ShadowNinja Kernel|Panic vinylGhost GaelanAintAround dlu corentin shark KnownUnown pentiumone133 AimHere Mad7Scientist SaMOOrai Fabianius alamar morphium espiral Someguy123\r\n" - ":moorcock.freenode.net 353 communi = #freenode :LIP DURgod tehKitten an0nmat1r FuriousRage nanotube jrgifford Mez +gry n4x TDJACR phuzion ohm BradND TheUni OzBorne RumpledElf Internet13 Muzer lostlabyrinth SeySayux midnightmagic drathir Sling firebird +jtrucks Red_M Stary2001 localhost jefferai mosh sweet_kid +RichiH Nothing4You hvxgr FastLizard4 bren2010 Slasher VunKruz sohum MogDog DJones fooly Arokh swords anaconda rcombs Wiretap jeffmjack petteyg TW1920 grawity JakeOrrall mac-mini _Cr4zi3_VM\r\n" - ":moorcock.freenode.net 353 communi = #freenode :Djole ShapeShifter499 AccessDenied jlcl Jguy sucheta XgF avermedia_ Pyker evil alpha Affliction Spitfire Fohlen rtbt humvee ka6sox benhunter09 mavensk asherkin +Elwell amithkk SolarAquarion chalcedony amarshall mrtux GarethAdams gary_chiang SilentPenguin ebuch_ +jbroome_ TW1920__ LaserShark msimkins Playb3yond music2myear maksbotan tenobi noko eighty4 bitpushr bucketm0use Amrykid phantomcircuit WorldEmperor Reisen pjschmitt armansito piney Yajirobe\r\n" - ":moorcock.freenode.net 353 communi = #freenode :neuro_sys JordanJ2 z3uS kline Clinteger Taylor albel727 Kharec Rarity Tzunamii VictorRedtail|Sa Peng KWC10 Axew iPod Jasper_Deng_away RyanKnack unreal Haseo aegis mst SecretAgent wapiflapi ghoti _spk_ jeremyb LjL +marienz _TMM_ Archer +gheraint cebor Chris_G Schoentoon jsec Bradford|Nosta addshore cyphase jmbsvicetto liori Plasmastar Skunky chaoscon heinrich5991 nealph catsup SierraAR davidhadas levarnu ping- daurnimator Cr0iX ksx4system Lars_G_ Maple__\r\n" - ":moorcock.freenode.net 353 communi = #freenode :PcJamesy rej froggyman LanceBNC Vorpal RojoD asakura jaybe Kyle IsoAnon neal__ G ski ibenox Adran Shirik WaffleZ MRX Damage-X Guest90323 jericon irc_adama Nietzschale Mack d1b balrog ikonia GTAXL Michail1 CoJaBo SkyDreamer suborbital Stryyker farn Matrixiumn Fira benonsoftware kaictl jdiez spectra FriendlyFascist Cyclone Koma dwfreed Phoebus jamesd MichaelC|Mobile PennStater SwedFTP +spaceinvader jumperboy Zic Graet ake gbyers[Away] MJ94 keeleysam Dwarf\r\n" - ":moorcock.freenode.net 353 communi = #freenode :NiTeMaRe arkeet Jake_D alvinek_ debris` Guest13246 infojunky ChrisAM Novacha ImTheBitch capri MartynKeigher BlackoutIsHere WannabeZNC EViLSLuT DrRen KamusHadenes deadpool graphitemaster xy andy_ Cydrobolt Metaleer Oprah Hello71 dirtydawg [Derek] basic` wei2912 nesthib poutine Angelo Simba WormDrink robink zymurgy Guest89644 SirCmpwn enchilado dominikh vivekrai Utility Jason bazhang paddymahoney pinPoint brainproxy TheEpTic Revi N7 Lyude edibsk mb06cs\r\n" - ":moorcock.freenode.net 353 communi = #freenode :bray90820 IdleOne Console kPa_ shadowm winocm spot digikwondo blishchrot MichaelC swagemon Whiskey win2012 VideoDudeMike HavokOC FailPowah ix007 phenom JZTech101 ohama eric1212 Timbo zz_dlu joey Wooble Willis pseubodot lbft elky BlueShark haxxed JamesOff ndngvr` overrider lahwran plasticboy idoru DXtremz Adonis SeanieB Gizmokid2005 Aerox3 Disori ludkiller dhoss_ c xid b_jonas lurst TheLonelyGod Nietzsche MillHouse Guest19968 AlexP Stoo psycho_oreos G1eb\r\n" - ":moorcock.freenode.net 353 communi = #freenode :Obfuscate ggherdov dStruct auscompgeek bdfoster tharkun aperson GeordieNorman mfamos irv +tt argv Psi-Jack cups Cprossu TheBadShepperd Magiobiwan mkb Steakanbake three18ti lysobit raztoki Chex Sellyme caf Guest76346 Louis Lexi sa`tan truexfan81 nitrix CodesInChaos Deus N3LRX Tsunamifox tgs3 multiply JakeSaysSays epochwolf totte +t cam daemoneye stump Sargun ekeih tauntaun Milenko vvv upgrayeddd mrrothhcloud___ _anonymous +issyl0 smokex Pici\r\n" - ":moorcock.freenode.net 366 communi #freenode :End of /NAMES list.\r\n" - ":ChanServ!ChanServ@services. NOTICE communi :[#freenode] Welcome to #freenode. All network staff are voiced in here, but may not always be around - type /stats p to get a list of on call staff. Others may be hiding so do feel free to ping and /msg us at will! Also please read the channel guidelines at http://freenode.net/poundfreenode.shtml - thanks.\r\n" - ":services. 328 communi #freenode :http://freenode.net/\r\n"; - -static const char* freenode_names = - "communi straterra absk007 pefn xlys Gromit TooCool Sambler gat0rs KarneAsada danis_963 Kiryx chrismeller deefloo black_male sxlnxdx bjork Kinny phobos_anomaly T13|sleeps JuxTApose Kolega2357 rorx techhelper1 hermatize Azimi iqualfragile fwilson skasturi mwallacesd mayday Guest76549 mcjohansen MangaKaDenza ARISTIDES ketas `- claptor ylluminate Cooky Brand3n cheater_1 Kirito digitaloktay Will| Iarfen abrotman smurfy Inaunt mist Karol RougeR_ " - "publickeating An_Ony_Moose michagogo Guest915` davidfg4 Ragnor s1lent_1 keee GingerGeek[Away] hibari derp S_T_A_N anonymuse asantoni road|runner LLckfan neoian2 aviancarrier nipples danieldaniel Pyrus Bry8Star shadowm_desktop furtardo rdymac TTSDA seaworthy Chiyo yscc Zombiebaron redpill f4cl3y Boohbah applebloom zorael kameloso^ Zetetic XAMPP wheels_up Cuppy-Cake mindlessjohnny Kymru mquin_ Rodja babilen kirin` David Affix jshyeung_ DarkAceZ karakedi " - "jraglin AdriDJ ToApolytoXaos whaletechno jlf Ricardo__ TmvC Sigma00 Casmo breck7 Oldiesmann Rappy naomi thiras moli FRCorey_ iderik glebihan cool_name Dwade09 UniOn eMBee Samual johnnymoo_logsta darknyan mlk dyay xBytez hammond M2Ys4U kobain monoprotic MiLK_ Noldorin njm Nomado Alina-malina abchirk_ Johannes13_ scorche dreamfighter Lars_G DCMT TomyLobo King_Hual No_One fling Mike_H CoreISP djdoody fdd pipitas Subo1977 jef redarrow marcoecc bin_sh TReK " - "[MortiKi] traveller__ Catie DarkG HisaoNakai scounder alone Corycia rudyismydog ToBeFree mcalabrese micadeyeye_ Sembei candlejackson cobra-the-joker ElectricDuck fuzeman swoolley ali_h dungodung oleo brain8675 Jordach rdy4watever KillYourTV coffeee levine m4v dvu ty _nova jgeboski Olipro CheckDavid impulse150 Shadow` jarr0dsz an3k Sove daemon Sary t0rben monkeyjuice Blas alexa the_TORmentor Transfusion kensington Spaceghost wolfmitchell lubmil synick " - "bitnumus krassomat zerox kel39 basiclaser tristero blaxnake themill meznak chinkung DJJeff RBecker XDS2010_ iamblue_cloud excilan Ristovski JamesTait DrJ pfffx d9b4bef9 Corvus` s0ckpuppet Guest73279 Fritz7 JBreit zinx KhashayaR p3lim_ krisha quackgyver salkaman j4jackj Guest86053 nmmm wiretapped lunchdump goose sam Zarthus jje sl3dge Vutral sins- weie_ Myrtti _raymond_ KindOne youlysses Mizael jeffz` meet_praveen STalKer-X osxdude surfdue torako " - "niloc132_ connor_goodwolf \\mSg vemacs iViLe slobber zendeavor drbean Tonitrus Nightmare ssbr GorillaPatch TingPing Pricey james41382 Chenguang Jyothis RansomTime zz_Enviious TakinOver chrisss404 Brando753 mduca SlashLife_ Fuchs DW-Drew Firzen__ Suprano duke johest_ infinem Birdman3131 tmtowtdi Guest61594 BearPerson GiGaHuRtZ Hausas sdamashek salamanderrake jwbirdsong themadhatter mahomet smeggysmeg kloeri_ kameloso Simonn ryukafalz tigrmesh Borg " - "Kingdom RougeR Venusaur resistivecorpse rush2end destiny rylinaux gskellig Wonkaewt philip quelx hside tann bolt btcvixen joako pr0ggie Xiti` arpita_ Hewn Argus Shippo Tabmow FrankZZ Olanzapin zhezhe swiatos Argure Cathy JKL1234- Elfix Suicide cali urkl laissez-f sig-wall Guest76477 Rix jok- Guest41925 Thehelpfulone Nimrod oscailt stalled anexus _val_ Luke-Jr Konomi German__ acanete knuth Wildblue` juser Reshesnik Saiban corelax brr JoeK DarkSkyes " - "BullShark Zhaofeng_Li vidplace7 aji APLU RiverRat jerome Bateau raSter^ chipster Vito PigFlu Sprocks evaldoxie Atlas petan javalover MobiusL yerodin Barras2 Barras Humbedooh Niichan SlicerDicer slax0r Brodeles Aurora tandoori Davey Culator|Away gtmanfred kPa ex0a contempt Xack ecks prawnsalad wirehack7 nyuszika7h around Kelsie CaHogan mrpeenut24 Mozart IceCraft LifeIspain andrex sloof thismat troybattey notori0us UbuPhillup lasers BlastHardcheese muskeg " - "archigos jayne XJR-9 realazthat Geert ahf nim edk spb ChanServ Azure nhandler a3li edggeek zol Bigcheese stylus DrBash ingo ningrat zu tomaw felipe QueenOfFrance dxrt Y_Ichiro sysdef Ju576 rwg [NOT|HERE] sili Snowolf Shnaw tapout Joori GriGore665 LoganCloud Osaka funtapaz MidnighToker codeM0nK3Y Zen kinlo Corey raj c0ded Remco Vikrant_ xander chadi |L| Shockk nickg ajpiano guntbert funkyHat erry Mkaysi meingtsla seaLne EvilBlueShark pdelvo Strog " - "geb Vlad Deathspawn mdan Zidonuke jjs999jjs Bry8Star4 inthecompanyof Motzfeldt jlouis mooky avelldiroll tonsofpcs d2r Loki JPT Jamesofur kloeri Paradox924X Zx3 cruxeternus sdx23 adaptr PwnSauce mattb J21 likewhoa scorche|sh hellome Geek_Juice xorpp Sonar_Guy luckman212 danar psybear eir StarRain sparticus stux|RC-only go|dfish teneightypea BaW d10n riddle Tm_T dive EvilJStoker glowsticks kode54 stwalkerster pocoyo shiftplusone bburhans trucMuche " - "moonlight yano kevank jmfcool BranchPredictor pppingme Namikaze EvilOne FZTMm Sakaki Lord_Aizen demosdemon JasonDC duracrisis IHateHavingToReg D[_] AlexJFox Th0masR0ss back Exio4 kunwon1 kc8qvp jeblair Jeruvy Kadet EmLeX aways Kester Spr0cket Thorne csssuf iotku nb solution Zanzibar em mwheeler x56 ChauffeR_ phrozen77 ivan`` The_Cop Monkeh ishanyx Whopper ghz JStoker brabo_ Triskelios sosby PoohBear Clete2 ErrantEgo SebastianFlyte JT jose rubick " - "RDash[AW] wwraith Hazel|artemis mrgaryniger tabeaux crazedpsyc denny mh0 TheDrums Nothing4You_ Fieldy akawaka thumbs Dave2 aghos_ Carly-_ Necrosan K1rk ClaudiaU_ HeavyMetal Zenum KOD3N cooldude mshaw milky sepeck Nineain nxp ktr TheLordOfTime dmlloyd sunitknandi arikb pumba Webu `DiM danmackay zomGreg tomboy_ callumacrae Devels rsrx zz_dbRenaud trout Kye Romance _ruben sfan5 brabo lassefaxoe Arieh John13 ldunn OldSoul|4SiOS501 evilmquin xrated Ishaq " - "phreak turboroot ra roxell topyli jeremias doily Nazca Aehmlo_away nutron christel niko DLange drdanick AndrewBarber mediko psk1 TheJH skrip_kid jbroome njan RainbowDashh Plazma vedalken254 codethought md_5 michagogo|cloud brad lolcat LoRez MissionCritical honzik666 variousnefarious AlanBell tdfischer EricK|AFK AsadH apollo13 Wug[Hyperspace] nullrouted|cloud PeerLesS DarthGandalf cbdev shroud badunkadunk Happzz fortytwo netchip Mike3620 newton " - "Detch Gnumarcoo Brownout Junaos ThalinVien evilErrantEgo Bladerunner JonathanD Beothoric FloTiX Alenah Raccoon ow GLolol c45y coinspelunk mysteerimasa real_alien tburg SPF|Cloud Cloudiumn like2helpU iMast777 geoffw8__ troyt Hypnotoad nkuttler Sjsws1078_ apoplexy3 trawl AntiSpamMeta ShadowNinja Kernel|Panic vinylGhost GaelanAintAround dlu corentin shark KnownUnown pentiumone133 AimHere Mad7Scientist SaMOOrai Fabianius alamar morphium espiral Someguy123 " - "LIP DURgod tehKitten an0nmat1r FuriousRage nanotube jrgifford Mez gry n4x TDJACR phuzion ohm BradND TheUni OzBorne RumpledElf Internet13 Muzer lostlabyrinth SeySayux midnightmagic drathir Sling firebird jtrucks Red_M Stary2001 localhost jefferai mosh sweet_kid RichiH Nothing4You hvxgr FastLizard4 bren2010 Slasher VunKruz sohum MogDog DJones fooly Arokh swords anaconda rcombs Wiretap jeffmjack petteyg TW1920 grawity JakeOrrall mac-mini _Cr4zi3_VM " - "Djole ShapeShifter499 AccessDenied jlcl Jguy sucheta XgF avermedia_ Pyker evil alpha Affliction Spitfire Fohlen rtbt humvee ka6sox benhunter09 mavensk asherkin Elwell amithkk SolarAquarion chalcedony amarshall mrtux GarethAdams gary_chiang SilentPenguin ebuch_ jbroome_ TW1920__ LaserShark msimkins Playb3yond music2myear maksbotan tenobi noko eighty4 bitpushr bucketm0use Amrykid phantomcircuit WorldEmperor Reisen pjschmitt armansito piney Yajirobe " - "neuro_sys JordanJ2 z3uS kline Clinteger Taylor albel727 Kharec Rarity Tzunamii VictorRedtail|Sa Peng KWC10 Axew iPod Jasper_Deng_away RyanKnack unreal Haseo aegis mst SecretAgent wapiflapi ghoti _spk_ jeremyb LjL marienz _TMM_ Archer gheraint cebor Chris_G Schoentoon jsec Bradford|Nosta addshore cyphase jmbsvicetto liori Plasmastar Skunky chaoscon heinrich5991 nealph catsup SierraAR davidhadas levarnu ping- daurnimator Cr0iX ksx4system Lars_G_ Maple__ " - "PcJamesy rej froggyman LanceBNC Vorpal RojoD asakura jaybe Kyle IsoAnon neal__ G ski ibenox Adran Shirik WaffleZ MRX Damage-X Guest90323 jericon irc_adama Nietzschale Mack d1b balrog ikonia GTAXL Michail1 CoJaBo SkyDreamer suborbital Stryyker farn Matrixiumn Fira benonsoftware kaictl jdiez spectra FriendlyFascist Cyclone Koma dwfreed Phoebus jamesd MichaelC|Mobile PennStater SwedFTP spaceinvader jumperboy Zic Graet ake gbyers[Away] MJ94 keeleysam Dwarf " - "NiTeMaRe arkeet Jake_D alvinek_ debris` Guest13246 infojunky ChrisAM Novacha ImTheBitch capri MartynKeigher BlackoutIsHere WannabeZNC EViLSLuT DrRen KamusHadenes deadpool graphitemaster xy andy_ Cydrobolt Metaleer Oprah Hello71 dirtydawg [Derek] basic` wei2912 nesthib poutine Angelo Simba WormDrink robink zymurgy Guest89644 SirCmpwn enchilado dominikh vivekrai Utility Jason bazhang paddymahoney pinPoint brainproxy TheEpTic Revi N7 Lyude edibsk mb06cs " - "bray90820 IdleOne Console kPa_ shadowm winocm spot digikwondo blishchrot MichaelC swagemon Whiskey win2012 VideoDudeMike HavokOC FailPowah ix007 phenom JZTech101 ohama eric1212 Timbo zz_dlu joey Wooble Willis pseubodot lbft elky BlueShark haxxed JamesOff ndngvr` overrider lahwran plasticboy idoru DXtremz Adonis SeanieB Gizmokid2005 Aerox3 Disori ludkiller dhoss_ c xid b_jonas lurst TheLonelyGod Nietzsche MillHouse Guest19968 AlexP Stoo psycho_oreos G1eb " - "Obfuscate ggherdov dStruct auscompgeek bdfoster tharkun aperson GeordieNorman mfamos irv tt argv Psi-Jack cups Cprossu TheBadShepperd Magiobiwan mkb Steakanbake three18ti lysobit raztoki Chex Sellyme caf Guest76346 Louis Lexi sa`tan truexfan81 nitrix CodesInChaos Deus N3LRX Tsunamifox tgs3 multiply JakeSaysSays epochwolf totte t cam daemoneye stump Sargun ekeih tauntaun Milenko vvv upgrayeddd mrrothhcloud___ _anonymous issyl0 smokex Pici"; - -static const char* freenode_admins = ""; -static const char* freenode_ops = "ChanServ"; -static const char* freenode_halfops = ""; -static const char* freenode_voices = "mist JamesTait Myrtti Pricey kloeri_ Tabmow jayne nhandler tomaw Corey erry kloeri yano D[_] denny Dave2 ldunn christel niko jbroome njan Plazma LoRez JonathanD gry jtrucks RichiH Elwell jbroome_ marienz gheraint spaceinvader tt t issyl0"; - -#endif // TST_FREENODE_H diff --git a/src/libcommuni/tests/auto/shared/tst_ircclientserver.cpp b/src/libcommuni/tests/auto/shared/tst_ircclientserver.cpp deleted file mode 100644 index 2a76ead..0000000 --- a/src/libcommuni/tests/auto/shared/tst_ircclientserver.cpp +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This test is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -#include "tst_ircclientserver.h" - -tst_IrcClientServer::tst_IrcClientServer() -{ - server = new QTcpServer(this); -} - -void tst_IrcClientServer::initTestCase() -{ - QVERIFY(server->listen()); -} - -void tst_IrcClientServer::cleanupTestCase() -{ - server->close(); -} - -void tst_IrcClientServer::init() -{ - connection = new IrcConnection(this); - connection->setUserName("user"); - connection->setNickName("nick"); - connection->setRealName("real"); - connection->setPassword("secret"); - connection->setHost("127.0.0.1"); - connection->setPort(server->serverPort()); -} - -void tst_IrcClientServer::cleanup() -{ - delete connection; -} - -bool tst_IrcClientServer::waitForOpened(int timeout) -{ - if (!server->waitForNewConnection(timeout)) - return false; - serverSocket = server->nextPendingConnection(); - clientSocket = connection->socket(); - return serverSocket && clientSocket && clientSocket->waitForConnected(1000); -} - -bool tst_IrcClientServer::waitForWritten(const QByteArray& data, int timeout) -{ - if (!data.isNull()) { - if (data.count('\n') > 1) { - bool success = true; - foreach (const QByteArray& line, data.split('\n')) - success &= waitForWritten(line + '\n', timeout); - return success; - } - if (data.endsWith('\r') || data.endsWith('\n')) - serverSocket->write(data); - else - serverSocket->write(data + "\r\n"); - } - return serverSocket->waitForBytesWritten(timeout) && clientSocket->waitForReadyRead(timeout); -} diff --git a/src/libcommuni/tests/auto/shared/tst_ircclientserver.h b/src/libcommuni/tests/auto/shared/tst_ircclientserver.h deleted file mode 100644 index ae72f29..0000000 --- a/src/libcommuni/tests/auto/shared/tst_ircclientserver.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This test is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -#ifndef TST_IRCCLIENTSERVER_H -#define TST_IRCCLIENTSERVER_H - -#include <IrcConnection> - -#include <QtTest/QtTest> -#include <QtCore/QPointer> -#include <QtNetwork/QTcpServer> -#include <QtNetwork/QTcpSocket> - -#if QT_VERSION >= 0x050000 -#define Q4SKIP(description) QSKIP(description) -#else -#define Q4SKIP(description) QSKIP(description, SkipAll) -#endif - -class tst_IrcClientServer : public QObject -{ - Q_OBJECT - -public: - tst_IrcClientServer(); - -private slots: - void initTestCase(); - void cleanupTestCase(); - - void init(); - void cleanup(); - -protected: - bool waitForOpened(int timeout = 200); - bool waitForWritten(const QByteArray& data, int timeout = 1000); - - QPointer<QTcpServer> server; - QPointer<QTcpSocket> serverSocket; - QPointer<IrcConnection> connection; - QPointer<QAbstractSocket> clientSocket; -}; - -#endif // TST_IRCCLIENTSERVER_H diff --git a/src/libcommuni/tests/auto/shared/tst_ircdata.cpp b/src/libcommuni/tests/auto/shared/tst_ircdata.cpp deleted file mode 100644 index b3a11b2..0000000 --- a/src/libcommuni/tests/auto/shared/tst_ircdata.cpp +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This test is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -#include "tst_ircdata.h" -#include "tst_freenode.h" -#include "tst_ircnet.h" -#include "tst_euirc.h" - -QList<QByteArray> tst_IrcData::keys() -{ - return QList<QByteArray>() << "freenode" << "ircnet" << "euirc"; -} - -QByteArray tst_IrcData::welcome(const QByteArray& key) -{ - static QHash<QByteArray, QByteArray> blobs; - if (blobs.isEmpty()) { - blobs.insert("freenode", freenode_welcome); - blobs.insert("ircnet", ircnet_welcome); - blobs.insert("euirc", euirc_welcome); - } - return blobs.value(key.isEmpty() ? keys().first() : key); -} - -QByteArray tst_IrcData::join(const QByteArray& key) -{ - static QHash<QByteArray, QByteArray> blobs; - if (blobs.isEmpty()) { - blobs.insert("freenode", freenode_join); - blobs.insert("ircnet", ircnet_join); - blobs.insert("euirc", euirc_join); - } - return blobs.value(key.isEmpty() ? keys().first() : key); -} - -QStringList tst_IrcData::names(const QByteArray& key) -{ - static QHash<QByteArray, QStringList> blobs; - if (blobs.isEmpty()) { - blobs.insert("freenode", QString::fromUtf8(freenode_names).split(" ")); - blobs.insert("ircnet", QString::fromUtf8(ircnet_names).split(" ")); - blobs.insert("euirc", QString::fromUtf8(euirc_names).split(" ")); - } - return blobs.value(key.isEmpty() ? keys().first() : key); -} - -QStringList tst_IrcData::admins(const QByteArray& key) -{ - static QHash<QByteArray, QStringList> blobs; - if (blobs.isEmpty()) { - blobs.insert("freenode", QString::fromUtf8(freenode_admins).split(" ")); - blobs.insert("ircnet", QString::fromUtf8(ircnet_admins).split(" ")); - blobs.insert("euirc", QString::fromUtf8(euirc_admins).split(" ")); - } - return blobs.value(key.isEmpty() ? keys().first() : key); -} - -QStringList tst_IrcData::ops(const QByteArray& key) -{ - static QHash<QByteArray, QStringList> blobs; - if (blobs.isEmpty()) { - blobs.insert("freenode", QString::fromUtf8(freenode_ops).split(" ")); - blobs.insert("ircnet", QString::fromUtf8(ircnet_ops).split(" ")); - blobs.insert("euirc", QString::fromUtf8(euirc_ops).split(" ")); - } - return blobs.value(key.isEmpty() ? keys().first() : key); -} - -QStringList tst_IrcData::halfops(const QByteArray& key) -{ - static QHash<QByteArray, QStringList> blobs; - if (blobs.isEmpty()) { - blobs.insert("freenode", QString::fromUtf8(freenode_halfops).split(" ")); - blobs.insert("ircnet", QString::fromUtf8(ircnet_halfops).split(" ")); - blobs.insert("euirc", QString::fromUtf8(euirc_halfops).split(" ")); - } - return blobs.value(key.isEmpty() ? keys().first() : key); -} - -QStringList tst_IrcData::voices(const QByteArray& key) -{ - static QHash<QByteArray, QStringList> blobs; - if (blobs.isEmpty()) { - blobs.insert("freenode", QString::fromUtf8(freenode_voices).split(" ")); - blobs.insert("ircnet", QString::fromUtf8(ircnet_voices).split(" ")); - blobs.insert("euirc", QString::fromUtf8(euirc_voices).split(" ")); - } - return blobs.value(key.isEmpty() ? keys().first() : key); -} diff --git a/src/libcommuni/tests/auto/shared/tst_ircdata.h b/src/libcommuni/tests/auto/shared/tst_ircdata.h deleted file mode 100644 index c5126f8..0000000 --- a/src/libcommuni/tests/auto/shared/tst_ircdata.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This test is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -#ifndef TST_IRCDATA_H -#define TST_IRCDATA_H - -#include <QList> -#include <QString> -#include <QVariant> -#include <QByteArray> -#include <QStringList> - -class tst_IrcData -{ -public: - static QList<QByteArray> keys(); - static QByteArray welcome(const QByteArray& key = QByteArray()); - static QByteArray join(const QByteArray& key = QByteArray()); - static QStringList names(const QByteArray& key = QByteArray()); - static QStringList admins(const QByteArray& key = QByteArray()); - static QStringList ops(const QByteArray& key = QByteArray()); - static QStringList halfops(const QByteArray& key = QByteArray()); - static QStringList voices(const QByteArray& key = QByteArray()); -}; - -#endif // TST_IRCDATA_H diff --git a/src/libcommuni/tests/auto/shared/tst_ircnet.h b/src/libcommuni/tests/auto/shared/tst_ircnet.h deleted file mode 100644 index e0fb7d4..0000000 --- a/src/libcommuni/tests/auto/shared/tst_ircnet.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This test is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -#ifndef TST_IRCNET_H -#define TST_IRCNET_H - -static const char* ircnet_welcome = - ":irc.ifi.uio.no 020 * :Please wait while we process your connection.\r\n" - ":irc.ifi.uio.no 001 communi :Welcome to the Internet Relay Network communi!~communi@hidd.en\r\n" - ":irc.ifi.uio.no 002 communi :Your host is irc.ifi.uio.no, running version 2.11.2p3\r\n" - ":irc.ifi.uio.no 003 communi :This server was created Wed Aug 8 2012 at 10:28:47 CEST\r\n" - ":irc.ifi.uio.no 004 communi irc.ifi.uio.no 2.11.2p3 aoOirw abeiIklmnoOpqrRstv\r\n" - ":irc.ifi.uio.no 005 communi RFC2812 PREFIX=(ov)@+ CHANTYPES=#&!+ MODES=3 CHANLIMIT=#&!+:21 NICKLEN=15 TOPICLEN=255 KICKLEN=255 MAXLIST=beIR:64 CHANNELLEN=50 IDCHAN=!:5 CHANMODES=beIR,k,l,imnpstaqr :are supported by this server\r\n" - ":irc.ifi.uio.no 005 communi PENALTY FNC EXCEPTS=e INVEX=I CASEMAPPING=ascii NETWORK=IRCNet :are supported by this server\r\n" - ":irc.ifi.uio.no 042 communi 578IAAESX :your unique ID\r\n" - ":irc.ifi.uio.no 251 communi :There are 55235 users and 5 services on 27 servers\r\n" - ":irc.ifi.uio.no 252 communi 95 :operators online\r\n" - ":irc.ifi.uio.no 254 communi 30892 :channels formed\r\n" - ":irc.ifi.uio.no 255 communi :I have 447 users, 0 services and 4 servers\r\n" - ":irc.ifi.uio.no 265 communi 447 456 :Current local users 447, max 456\r\n" - ":irc.ifi.uio.no 266 communi 55235 58824 :Current global users 55235, max 58824\r\n" - ":irc.ifi.uio.no 375 communi :- irc.ifi.uio.no Message of the Day -\r\n" - ":irc.ifi.uio.no 376 communi :End of MOTD command.\r\n"; - -static const char* ircnet_join = - ":communi!~communi@hidd.en JOIN :#uptimed\r\n" - ":irc.ifi.uio.no 332 communi #uptimed :UPTIME CONTEST - STARTS WITH 600 VOICES / The winner gets a 1 year SHELL\r\n" - ":irc.ifi.uio.no 333 communi #uptimed t0r-!t0r@hidd.en 1380194318\r\n" - ":irc.ifi.uio.no 353 communi = #uptimed :communi +_box +Ste` +`ViRuS` +sensej +ip +\\x00 +Dos +Plato +sonik +[daro] +056DABT1Q @Voicer +Elcid +NICK +ComeAsYouAre +nightmare +AboutAGirl +once +Arwen +vizion @artico +OnceW3reWarrior +NT2000 +Coolio +babka +dziadek +OnceWereWarrior +kaban +nabak +uytrew +705AAFHDM +705AAFHDO +705AAFHDN +ggefew +233EAGIRG +adsfds +[jp] +233DADVTX +233DADVTW +vaginakkk +szok +datanetek +deeee +italiano +knbb +em +robo +dupeczka +233DADWSZ +mofaya +fogiel +[nsa]\r\n" - ":irc.ifi.uio.no 353 communi = #uptimed :+vagina +evil_ +vaginallo +why +evil` +inci +yhw +zazaza +ewe +bandoz +zeus +[animanera] +{artic} @Uptimed +sisiako +italianos +elite +polishpower +nsa` +`artic` +RedDevil +varna +s +rudy +draven +lupo +ijnnk +quest[2] +desapir +itsab +r0d +keep +An0nym0uz +_sparco +nsa- +KaPPa +devilkickers +wannie +PaulAnunda +TuOmaS- +Ainame +TeSsIer +MarkrIckeR +Markvillam +LasteS +JaMeS_ +CriStiaNo +IvanaCosta +brunodp +HackYou +Ducentesimo +Created +Ciwarshak\r\n" - ":irc.ifi.uio.no 353 communi = #uptimed :+BroLy +BriatoRe +tasya +cpanel +liana +shoutcast +humantourch +myznc +kopisusu +ainah +IRC +knb +ipv4 +zguba +{ +rudi +idur +ls_212 +[goku] +xman +josip +mushroom +ajo +Patty +alien^ +ReMoNDiNi +marselo +NiTr0 +iOrOxxo +DartagnaN +TheCure +FurisO +MetroNotte +ToRSoLo +register +init-zero +Pilszcz +DjCaro +wamper +ToRQUaTo +Alison +Wenni^_^ +Hambi +MzMaNdY +Howie^^ +Chiwai +EkinCheng +Jenny^_^ @abuser` +die @Mgla +rcu +|jp| +|be| +egg +suka +ircoholik\r\n" - ":irc.ifi.uio.no 353 communi = #uptimed :+|de| @ruciu +japanase +zncbot +latitanz +kafir +sparco +invisible +elk +jazz +esprit +strange +rex +grasshopper +miracle +outlaw @t0r- +veronica +artic| @[m] +ToRDo +ToRRoNe +MusSi +ToRBiDo +gozmit +ToReRo +ToRReNTe +Mediterraneo +Sugar +unregistered +bohjan +biskut +xdos +unix +cheap +android +birc +edit +Robocop +Neon +Temp +Apofis +Seth +Sokar +Iron +Control +Kiler +mrozek +widzewiak +klesk +Dj +Rcnet +mybsd +lis +[d] +resu` +ussus_ +ksychy +sp +kln\r\n" - ":irc.ifi.uio.no 353 communi = #uptimed :+psk +Kulf0n +daro +darecki +pan_ban +Anonymouz +atos +MarRosso +CommenDa +miglia +Spike +Sc0rpion +Krotone +ViboValentia +Arcaverde +AlcaTRaz +Adriatico +MescaliNa +PiPo_ +RogeS +sm0k +kakashi +naintails +smuga +howkey +aven[gers] +[neo] +[dill] +Aptajm +marcin +founder +roger +feedback +M-k +Madmax +Piramida +Hator +Loginek +Lill +Polibuda +Zeus` +bouncer +msdos +gurl +kongsi +mamak +scid +mylinux +sock +nana +ibm +samba +k-pop +gyna +k-chat +mail\r\n" - ":irc.ifi.uio.no 353 communi = #uptimed :+chat +yatie +ircap +Ho-Nam +mynet +rindunet +qip +eggies +db +fakap +loco +mircpro +mircbot +mynic +bladez +hackintosh +egghelp +kampung +cisco +girl +skepticals +nickname +Uncle-B +bohsia +mircx @Grypsio +kaktej +Asia +HelpAR +VaneSSaBeLL +AcHIni +DjuNaBarnEs +HydRA +WilHElm- +BrIanCHon +LiLi +Br0doWski +Apus +BoUdin0 +ERebpAR +RetIculum +TucANA +CAsIk +CANes +PuppIs +BeNaZech +BeRnaRDus +Lupus +IzrAileviC +UlAIn +AdaMI +Bartels +AGliNK +Helon +UlpAR\r\n" - ":irc.ifi.uio.no 353 communi = #uptimed :+BemELmaNS +DelphINus +AbBati +FoRNAx +BenKvicH +Ulseth +PIctoR +BeJJini +BroOWn +Br00k +AffanNU +Achenbach +BelloTTo +AbrHHam +CeNtAuRus +Agutte +AlbrECht +AnGeLico +Ar13S +TAuRus +BeReNIces +AzARfAR +AquIlA +Br0uwEr +BreYtenbaCH +CAsImAR +CAssIopeIA +ColumbA +CRux +EuGen +GeoFFrY +HiPPolyter +HoRologIum +LAceRtA +LeoMINoR +NIsAIn +NIsseth +NoRmA +PaVl0viC +ScoRpIus +SeRpeNs +ShuRImAR +artic +TitoAguiAri +ZIRpAR +TuRfAR +VAnIkAIn +VolANs +NIspAR\r\n" - ":irc.ifi.uio.no 353 communi = #uptimed :+CAsImAl +ThiErry +INdus +Cetus +PeTerFraNcio +GRus +MadDox +PIscIs +VulpeculA +CeCily +TRIANgulum +CApRIcoRNus +FraNtz +TuRIen +AdeMollo +BrIgnOni +AgReSti +AustRAle +BoTTinI +BouVIer +BrenTANA +BriNdiSi +CAelum +DoRAdo +ErNIeBarnEs +Helseth +JeNNiferBart +leBrocQUy +Lepus +LyNx +OctANs +OphIuchus +PeNeTriL +PIsces +PyxIs +roKkmAn +SAgIttA +TelescopIum +CRAteR +PeRseus +ShuRpAR +CAsseth +BeLLini +ChAmAeleoN +MIcRoscopIum +Ad0lphE +BoReAlIs +ARA_ +CARINA\r\n" - ":irc.ifi.uio.no 353 communi = #uptimed :+AquARIus_ +BartoLomeo +ShuRon +t0r__ +YaAcovAgam +Betty- +HydRus +ANDRoMeD2 +Mercurio +HeRcules_ +ORIoN- +Br00ker +Cepheus +276XAAAPU +PegAsus_ +CAspAR +BoUchE +MoNoceRos +URsAMAjoR +CAsIl +AivaZZovskKy +ERIdANus +BoUdeWijNS +LyR4 +ERebseth +ShuRseth +AleChiNskY +LIbRA +Leo +AceRbi +AuRIgA +BeNNo +Bootes_ +BriSSaud +CIRcINus +DRAco +SAgIttAR2us +WaSHingt0n +JUliUs- +TuRIk +HansBellmEs +PAvo +SculptoR +AddNet +GemINI +ANtlIA +ShuRkAn +BoUcheR +Br0wn\r\n" - ":irc.ifi.uio.no 353 communi = #uptimed :+URsAMINoR +VelA +CoRvus_ +BoWerANO +AustRINA +Agn0l +KaziMIerZ +PhoeNIx- +Scutum +SebAStieN +VIRgo_ +CANceR_ +CygNus_ +ZIRseth +t0r_ +ERebon +Equuleus +BouLAngeR +CAson +SextANs +JBelliNi +BourdiDIchoN +AzARAth +DiLDoSauRo +PumPinks +Callisto +Cosenza +Meschino +Portos +IoRobot +Eclipse +HighLander +T0XiC +Popoff +PaLLa +Indiano +MDma +Eastie +BleacH +PoSiX +Slash_ +InUtero +FormaGGino +riggiu +tirrenico +papera +MaXMerilio +MalandriNo +ToRTiGLia\r\n" - ":irc.ifi.uio.no 353 communi = #uptimed :+ToRToRa +BeLGo +NetBeans +NeverMind +BlackSp1rit +Ionico +Anfetamina +t0r +ladyshrew +ToRoNTo +AsTRo` +ToRCeTTo +EnSi +ToRNaDo +ToRReTTa +MaGReBiNo +ToRBoSo +ToRSiDa +ToRCia +ToRCiCoLLo +Wokie +RuMeNiNo +ToRTiNo +TheOne +NOP +oVaCoD +KiFFa +CLeMeNTiNo +ToRaCe +EviLDoG +PoPkiss +NeverDown +EleCTrO +CaM3LS_ +Hulk +StocaZZico +YoUbEgGaReD +Ocean +aLBaNiN0 +CaNeSeCCo +AlwaysBack +Crimson +OuRwEeRiCiN +Shorty +BeeDeePee +Punker +ToRaLBa +BeSTio +BaBy_BluE\r\n" - ":irc.ifi.uio.no 353 communi = #uptimed :+TeSTiCoLo^ +BieBeron +Prosexionist +svansen +artic^\r\n" - ":irc.ifi.uio.no 366 communi #uptimed :End of NAMES list.\r\n"; - -static const char* ircnet_names = - "communi _box Ste` `ViRuS` sensej ip \\x00 Dos Plato sonik [daro] 056DABT1Q Voicer Elcid NICK ComeAsYouAre nightmare AboutAGirl once Arwen vizion artico OnceW3reWarrior NT2000 Coolio babka dziadek OnceWereWarrior kaban nabak uytrew 705AAFHDM 705AAFHDO 705AAFHDN ggefew 233EAGIRG adsfds [jp] 233DADVTX 233DADVTW vaginakkk szok datanetek deeee italiano knbb em robo dupeczka 233DADWSZ mofaya fogiel [nsa] " - "vagina evil_ vaginallo why evil` inci yhw zazaza ewe bandoz zeus [animanera] {artic} Uptimed sisiako italianos elite polishpower nsa` `artic` RedDevil varna s rudy draven lupo ijnnk quest[2] desapir itsab r0d keep An0nym0uz _sparco nsa- KaPPa devilkickers wannie PaulAnunda TuOmaS- Ainame TeSsIer MarkrIckeR Markvillam LasteS JaMeS_ CriStiaNo IvanaCosta brunodp HackYou Ducentesimo Created Ciwarshak " - "BroLy BriatoRe tasya cpanel liana shoutcast humantourch myznc kopisusu ainah IRC knb ipv4 zguba { rudi idur ls_212 [goku] xman josip mushroom ajo Patty alien^ ReMoNDiNi marselo NiTr0 iOrOxxo DartagnaN TheCure FurisO MetroNotte ToRSoLo register init-zero Pilszcz DjCaro wamper ToRQUaTo Alison Wenni^_^ Hambi MzMaNdY Howie^^ Chiwai EkinCheng Jenny^_^ abuser` die Mgla rcu |jp| |be| egg suka ircoholik " - "|de| ruciu japanase zncbot latitanz kafir sparco invisible elk jazz esprit strange rex grasshopper miracle outlaw t0r- veronica artic| [m] ToRDo ToRRoNe MusSi ToRBiDo gozmit ToReRo ToRReNTe Mediterraneo Sugar unregistered bohjan biskut xdos unix cheap android birc edit Robocop Neon Temp Apofis Seth Sokar Iron Control Kiler mrozek widzewiak klesk Dj Rcnet mybsd lis [d] resu` ussus_ ksychy sp kln " - "psk Kulf0n daro darecki pan_ban Anonymouz atos MarRosso CommenDa miglia Spike Sc0rpion Krotone ViboValentia Arcaverde AlcaTRaz Adriatico MescaliNa PiPo_ RogeS sm0k kakashi naintails smuga howkey aven[gers] [neo] [dill] Aptajm marcin founder roger feedback M-k Madmax Piramida Hator Loginek Lill Polibuda Zeus` bouncer msdos gurl kongsi mamak scid mylinux sock nana ibm samba k-pop gyna k-chat mail " - "chat yatie ircap Ho-Nam mynet rindunet qip eggies db fakap loco mircpro mircbot mynic bladez hackintosh egghelp kampung cisco girl skepticals nickname Uncle-B bohsia mircx Grypsio kaktej Asia HelpAR VaneSSaBeLL AcHIni DjuNaBarnEs HydRA WilHElm- BrIanCHon LiLi Br0doWski Apus BoUdin0 ERebpAR RetIculum TucANA CAsIk CANes PuppIs BeNaZech BeRnaRDus Lupus IzrAileviC UlAIn AdaMI Bartels AGliNK Helon UlpAR " - "BemELmaNS DelphINus AbBati FoRNAx BenKvicH Ulseth PIctoR BeJJini BroOWn Br00k AffanNU Achenbach BelloTTo AbrHHam CeNtAuRus Agutte AlbrECht AnGeLico Ar13S TAuRus BeReNIces AzARfAR AquIlA Br0uwEr BreYtenbaCH CAsImAR CAssIopeIA ColumbA CRux EuGen GeoFFrY HiPPolyter HoRologIum LAceRtA LeoMINoR NIsAIn NIsseth NoRmA PaVl0viC ScoRpIus SeRpeNs ShuRImAR artic TitoAguiAri ZIRpAR TuRfAR VAnIkAIn VolANs NIspAR " - "CAsImAl ThiErry INdus Cetus PeTerFraNcio GRus MadDox PIscIs VulpeculA CeCily TRIANgulum CApRIcoRNus FraNtz TuRIen AdeMollo BrIgnOni AgReSti AustRAle BoTTinI BouVIer BrenTANA BriNdiSi CAelum DoRAdo ErNIeBarnEs Helseth JeNNiferBart leBrocQUy Lepus LyNx OctANs OphIuchus PeNeTriL PIsces PyxIs roKkmAn SAgIttA TelescopIum CRAteR PeRseus ShuRpAR CAsseth BeLLini ChAmAeleoN MIcRoscopIum Ad0lphE BoReAlIs ARA_ CARINA " - "AquARIus_ BartoLomeo ShuRon t0r__ YaAcovAgam Betty- HydRus ANDRoMeD2 Mercurio HeRcules_ ORIoN- Br00ker Cepheus 276XAAAPU PegAsus_ CAspAR BoUchE MoNoceRos URsAMAjoR CAsIl AivaZZovskKy ERIdANus BoUdeWijNS LyR4 ERebseth ShuRseth AleChiNskY LIbRA Leo AceRbi AuRIgA BeNNo Bootes_ BriSSaud CIRcINus DRAco SAgIttAR2us WaSHingt0n JUliUs- TuRIk HansBellmEs PAvo SculptoR AddNet GemINI ANtlIA ShuRkAn BoUcheR Br0wn " - "URsAMINoR VelA CoRvus_ BoWerANO AustRINA Agn0l KaziMIerZ PhoeNIx- Scutum SebAStieN VIRgo_ CANceR_ CygNus_ ZIRseth t0r_ ERebon Equuleus BouLAngeR CAson SextANs JBelliNi BourdiDIchoN AzARAth DiLDoSauRo PumPinks Callisto Cosenza Meschino Portos IoRobot Eclipse HighLander T0XiC Popoff PaLLa Indiano MDma Eastie BleacH PoSiX Slash_ InUtero FormaGGino riggiu tirrenico papera MaXMerilio MalandriNo ToRTiGLia " - "ToRToRa BeLGo NetBeans NeverMind BlackSp1rit Ionico Anfetamina t0r ladyshrew ToRoNTo AsTRo` ToRCeTTo EnSi ToRNaDo ToRReTTa MaGReBiNo ToRBoSo ToRSiDa ToRCia ToRCiCoLLo Wokie RuMeNiNo ToRTiNo TheOne NOP oVaCoD KiFFa CLeMeNTiNo ToRaCe EviLDoG PoPkiss NeverDown EleCTrO CaM3LS_ Hulk StocaZZico YoUbEgGaReD Ocean aLBaNiN0 CaNeSeCCo AlwaysBack Crimson OuRwEeRiCiN Shorty BeeDeePee Punker ToRaLBa BeSTio BaBy_BluE " - "TeSTiCoLo^ BieBeron Prosexionist svansen artic^"; - -static const char* ircnet_admins = ""; -static const char* ircnet_ops = "Voicer artico Uptimed abuser` Mgla ruciu t0r- [m] Grypsio"; -static const char* ircnet_halfops = ""; - -static const char* ircnet_voices = - "_box Ste` `ViRuS` sensej ip \\x00 Dos Plato sonik [daro] 056DABT1Q Elcid NICK ComeAsYouAre nightmare AboutAGirl once Arwen vizion OnceW3reWarrior NT2000 Coolio babka dziadek OnceWereWarrior kaban nabak uytrew 705AAFHDM 705AAFHDO 705AAFHDN ggefew 233EAGIRG adsfds [jp] 233DADVTX 233DADVTW vaginakkk szok datanetek deeee italiano knbb em robo dupeczka 233DADWSZ mofaya fogiel [nsa] " - "vagina evil_ vaginallo why evil` inci yhw zazaza ewe bandoz zeus [animanera] {artic} sisiako italianos elite polishpower nsa` `artic` RedDevil varna s rudy draven lupo ijnnk quest[2] desapir itsab r0d keep An0nym0uz _sparco nsa- KaPPa devilkickers wannie PaulAnunda TuOmaS- Ainame TeSsIer MarkrIckeR Markvillam LasteS JaMeS_ CriStiaNo IvanaCosta brunodp HackYou Ducentesimo Created Ciwarshak " - "BroLy BriatoRe tasya cpanel liana shoutcast humantourch myznc kopisusu ainah IRC knb ipv4 zguba { rudi idur ls_212 [goku] xman josip mushroom ajo Patty alien^ ReMoNDiNi marselo NiTr0 iOrOxxo DartagnaN TheCure FurisO MetroNotte ToRSoLo register init-zero Pilszcz DjCaro wamper ToRQUaTo Alison Wenni^_^ Hambi MzMaNdY Howie^^ Chiwai EkinCheng Jenny^_^ die rcu |jp| |be| egg suka ircoholik " - "|de| japanase zncbot latitanz kafir sparco invisible elk jazz esprit strange rex grasshopper miracle outlaw veronica artic| ToRDo ToRRoNe MusSi ToRBiDo gozmit ToReRo ToRReNTe Mediterraneo Sugar unregistered bohjan biskut xdos unix cheap android birc edit Robocop Neon Temp Apofis Seth Sokar Iron Control Kiler mrozek widzewiak klesk Dj Rcnet mybsd lis [d] resu` ussus_ ksychy sp kln " - "psk Kulf0n daro darecki pan_ban Anonymouz atos MarRosso CommenDa miglia Spike Sc0rpion Krotone ViboValentia Arcaverde AlcaTRaz Adriatico MescaliNa PiPo_ RogeS sm0k kakashi naintails smuga howkey aven[gers] [neo] [dill] Aptajm marcin founder roger feedback M-k Madmax Piramida Hator Loginek Lill Polibuda Zeus` bouncer msdos gurl kongsi mamak scid mylinux sock nana ibm samba k-pop gyna k-chat mail " - "chat yatie ircap Ho-Nam mynet rindunet qip eggies db fakap loco mircpro mircbot mynic bladez hackintosh egghelp kampung cisco girl skepticals nickname Uncle-B bohsia mircx kaktej Asia HelpAR VaneSSaBeLL AcHIni DjuNaBarnEs HydRA WilHElm- BrIanCHon LiLi Br0doWski Apus BoUdin0 ERebpAR RetIculum TucANA CAsIk CANes PuppIs BeNaZech BeRnaRDus Lupus IzrAileviC UlAIn AdaMI Bartels AGliNK Helon UlpAR " - "BemELmaNS DelphINus AbBati FoRNAx BenKvicH Ulseth PIctoR BeJJini BroOWn Br00k AffanNU Achenbach BelloTTo AbrHHam CeNtAuRus Agutte AlbrECht AnGeLico Ar13S TAuRus BeReNIces AzARfAR AquIlA Br0uwEr BreYtenbaCH CAsImAR CAssIopeIA ColumbA CRux EuGen GeoFFrY HiPPolyter HoRologIum LAceRtA LeoMINoR NIsAIn NIsseth NoRmA PaVl0viC ScoRpIus SeRpeNs ShuRImAR artic TitoAguiAri ZIRpAR TuRfAR VAnIkAIn VolANs NIspAR " - "CAsImAl ThiErry INdus Cetus PeTerFraNcio GRus MadDox PIscIs VulpeculA CeCily TRIANgulum CApRIcoRNus FraNtz TuRIen AdeMollo BrIgnOni AgReSti AustRAle BoTTinI BouVIer BrenTANA BriNdiSi CAelum DoRAdo ErNIeBarnEs Helseth JeNNiferBart leBrocQUy Lepus LyNx OctANs OphIuchus PeNeTriL PIsces PyxIs roKkmAn SAgIttA TelescopIum CRAteR PeRseus ShuRpAR CAsseth BeLLini ChAmAeleoN MIcRoscopIum Ad0lphE BoReAlIs ARA_ CARINA " - "AquARIus_ BartoLomeo ShuRon t0r__ YaAcovAgam Betty- HydRus ANDRoMeD2 Mercurio HeRcules_ ORIoN- Br00ker Cepheus 276XAAAPU PegAsus_ CAspAR BoUchE MoNoceRos URsAMAjoR CAsIl AivaZZovskKy ERIdANus BoUdeWijNS LyR4 ERebseth ShuRseth AleChiNskY LIbRA Leo AceRbi AuRIgA BeNNo Bootes_ BriSSaud CIRcINus DRAco SAgIttAR2us WaSHingt0n JUliUs- TuRIk HansBellmEs PAvo SculptoR AddNet GemINI ANtlIA ShuRkAn BoUcheR Br0wn " - "URsAMINoR VelA CoRvus_ BoWerANO AustRINA Agn0l KaziMIerZ PhoeNIx- Scutum SebAStieN VIRgo_ CANceR_ CygNus_ ZIRseth t0r_ ERebon Equuleus BouLAngeR CAson SextANs JBelliNi BourdiDIchoN AzARAth DiLDoSauRo PumPinks Callisto Cosenza Meschino Portos IoRobot Eclipse HighLander T0XiC Popoff PaLLa Indiano MDma Eastie BleacH PoSiX Slash_ InUtero FormaGGino riggiu tirrenico papera MaXMerilio MalandriNo ToRTiGLia " - "ToRToRa BeLGo NetBeans NeverMind BlackSp1rit Ionico Anfetamina t0r ladyshrew ToRoNTo AsTRo` ToRCeTTo EnSi ToRNaDo ToRReTTa MaGReBiNo ToRBoSo ToRSiDa ToRCia ToRCiCoLLo Wokie RuMeNiNo ToRTiNo TheOne NOP oVaCoD KiFFa CLeMeNTiNo ToRaCe EviLDoG PoPkiss NeverDown EleCTrO CaM3LS_ Hulk StocaZZico YoUbEgGaReD Ocean aLBaNiN0 CaNeSeCCo AlwaysBack Crimson OuRwEeRiCiN Shorty BeeDeePee Punker ToRaLBa BeSTio BaBy_BluE " - "TeSTiCoLo^ BieBeron Prosexionist svansen artic^"; - -#endif // TST_IRCNET_H diff --git a/src/libcommuni/tests/benchmarks/benchmarks.pri b/src/libcommuni/tests/benchmarks/benchmarks.pri deleted file mode 100644 index 537efa0..0000000 --- a/src/libcommuni/tests/benchmarks/benchmarks.pri +++ /dev/null @@ -1,9 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -QT = core network testlib -CONFIG += testcase -CONFIG -= app_bundle - -include(../tests.pri) diff --git a/src/libcommuni/tests/benchmarks/benchmarks.pro b/src/libcommuni/tests/benchmarks/benchmarks.pro deleted file mode 100644 index ec48f5f..0000000 --- a/src/libcommuni/tests/benchmarks/benchmarks.pro +++ /dev/null @@ -1,12 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -TEMPLATE = subdirs - -SUBDIRS += ircmessage -SUBDIRS += irctextformat - -# - windows has problems with symbols -# - mac with private headers (frameworks) -!win32:!mac:SUBDIRS += ircmessagedecoder diff --git a/src/libcommuni/tests/benchmarks/ircmessage/ircmessage.pro b/src/libcommuni/tests/benchmarks/ircmessage/ircmessage.pro deleted file mode 100644 index 0a94dc8..0000000 --- a/src/libcommuni/tests/benchmarks/ircmessage/ircmessage.pro +++ /dev/null @@ -1,7 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -SOURCES += tst_ircmessage.cpp - -include(../benchmarks.pri) diff --git a/src/libcommuni/tests/benchmarks/ircmessage/tst_ircmessage.cpp b/src/libcommuni/tests/benchmarks/ircmessage/tst_ircmessage.cpp deleted file mode 100644 index 47b1b5c..0000000 --- a/src/libcommuni/tests/benchmarks/ircmessage/tst_ircmessage.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This test is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -#include "ircmessage.h" -#include "ircconnection.h" -#include <QtTest/QtTest> - -static const QByteArray MSG_32_5("Vestibulum eu libero eget metus."); -static const QByteArray MSG_64_9("Phasellus enim dui, sodales sed tincidunt quis, ultricies metus."); -static const QByteArray MSG_128_19("Ut porttitor volutpat tristique. Aenean semper ligula eget nulla condimentum tempor in quis felis. Sed sem diam, tincidunt amet."); -static const QByteArray MSG_256_37("Vestibulum quis lorem velit, a varius augue. Suspendisse risus augue, ultricies at convallis in, elementum in velit. Fusce fermentum congue augue sit amet dapibus. Fusce ultrices urna ut tortor laoreet a aliquet elit lobortis. Suspendisse volutpat posuere."); -static const QByteArray MSG_512_75("Nam leo risus, accumsan a sagittis eget, posuere eu velit. Morbi mattis auctor risus, vel consequat massa pulvinar nec. Proin aliquam convallis elit nec egestas. Pellentesque accumsan placerat augue, id volutpat nibh dictum vel. Aenean venenatis varius feugiat. Nullam molestie, ipsum id dignissim vulputate, eros urna vestibulum massa, in vehicula lacus nisi vitae risus. Ut nunc nunc, venenatis a mattis auctor, dictum et sem. Nulla posuere libero ut tortor elementum egestas. Aliquam egestas suscipit posuere."); - -class tst_IrcMessage : public QObject -{ - Q_OBJECT - -private slots: - void testFromData_data(); - void testFromData(); -}; - -void tst_IrcMessage::testFromData_data() -{ - QTest::addColumn<QByteArray>("data"); - - QTest::newRow("null") << QByteArray(); - QTest::newRow("empty") << QByteArray(""); - - QTest::newRow("32 chars / 5 words") << MSG_32_5; - QTest::newRow("64 chars / 9 words") << MSG_64_9; - QTest::newRow("128 chars / 19 words") << MSG_128_19; - QTest::newRow("256 chars / 37 words") << MSG_256_37; - QTest::newRow("512 chars / 75 words") << MSG_512_75; - - QTest::newRow("32 chars / 5 words") << MSG_32_5; - QTest::newRow("64 chars / 9 words") << MSG_64_9; - QTest::newRow("128 chars / 19 words") << MSG_128_19; - QTest::newRow("256 chars / 37 words") << MSG_256_37; - QTest::newRow("512 chars / 75 words") << MSG_512_75; -} - -void tst_IrcMessage::testFromData() -{ - QFETCH(QByteArray, data); - - IrcConnection connection; - QBENCHMARK { - IrcMessage::fromData(data, &connection); - } -} - -QTEST_MAIN(tst_IrcMessage) - -#include "tst_ircmessage.moc" diff --git a/src/libcommuni/tests/benchmarks/ircmessagedecoder/ircmessagedecoder.pro b/src/libcommuni/tests/benchmarks/ircmessagedecoder/ircmessagedecoder.pro deleted file mode 100644 index 1ace28b..0000000 --- a/src/libcommuni/tests/benchmarks/ircmessagedecoder/ircmessagedecoder.pro +++ /dev/null @@ -1,7 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -SOURCES += tst_ircmessagedecoder.cpp - -include(../benchmarks.pri) diff --git a/src/libcommuni/tests/benchmarks/ircmessagedecoder/tst_ircmessagedecoder.cpp b/src/libcommuni/tests/benchmarks/ircmessagedecoder/tst_ircmessagedecoder.cpp deleted file mode 100644 index f26e1f8..0000000 --- a/src/libcommuni/tests/benchmarks/ircmessagedecoder/tst_ircmessagedecoder.cpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This test is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -#include "ircmessagedecoder_p.h" -#include <QtTest/QtTest> -#include <QtCore/QTextCodec> -#include <QtCore/QStringList> - -static const QByteArray MSG_32_5("Vestibulum eu libero eget metus."); -static const QByteArray MSG_64_9("Phasellus enim dui, sodales sed tincidunt quis, ultricies metus."); -static const QByteArray MSG_128_19("Ut porttitor volutpat tristique. Aenean semper ligula eget nulla condimentum tempor in quis felis. Sed sem diam, tincidunt amet."); -static const QByteArray MSG_256_37("Vestibulum quis lorem velit, a varius augue. Suspendisse risus augue, ultricies at convallis in, elementum in velit. Fusce fermentum congue augue sit amet dapibus. Fusce ultrices urna ut tortor laoreet a aliquet elit lobortis. Suspendisse volutpat posuere."); -static const QByteArray MSG_512_75("Nam leo risus, accumsan a sagittis eget, posuere eu velit. Morbi mattis auctor risus, vel consequat massa pulvinar nec. Proin aliquam convallis elit nec egestas. Pellentesque accumsan placerat augue, id volutpat nibh dictum vel. Aenean venenatis varius feugiat. Nullam molestie, ipsum id dignissim vulputate, eros urna vestibulum massa, in vehicula lacus nisi vitae risus. Ut nunc nunc, venenatis a mattis auctor, dictum et sem. Nulla posuere libero ut tortor elementum egestas. Aliquam egestas suscipit posuere."); - -class tst_IrcMessageDecoder : public QObject -{ - Q_OBJECT - -private slots: - void testDecode_data(); - void testDecode(); -}; - -void tst_IrcMessageDecoder::testDecode_data() -{ - QTest::addColumn<QByteArray>("data"); - - QTest::newRow("null") << QByteArray(); - QTest::newRow("empty") << QByteArray(""); - - QTest::newRow("32 chars / 5 words") << MSG_32_5; - QTest::newRow("64 chars / 9 words") << MSG_64_9; - QTest::newRow("128 chars / 19 words") << MSG_128_19; - QTest::newRow("256 chars / 37 words") << MSG_256_37; - QTest::newRow("512 chars / 75 words") << MSG_512_75; - - QTest::newRow("32 chars / 5 words") << MSG_32_5; - QTest::newRow("64 chars / 9 words") << MSG_64_9; - QTest::newRow("128 chars / 19 words") << MSG_128_19; - QTest::newRow("256 chars / 37 words") << MSG_256_37; - QTest::newRow("512 chars / 75 words") << MSG_512_75; -} - -void tst_IrcMessageDecoder::testDecode() -{ - QFETCH(QByteArray, data); - - IrcMessageDecoder decoder; - QBENCHMARK { - decoder.decode(data, "ISO-8859-15"); - } -} - -QTEST_MAIN(tst_IrcMessageDecoder) - -#include "tst_ircmessagedecoder.moc" diff --git a/src/libcommuni/tests/benchmarks/irctextformat/irctextformat.pro b/src/libcommuni/tests/benchmarks/irctextformat/irctextformat.pro deleted file mode 100644 index 61091aa..0000000 --- a/src/libcommuni/tests/benchmarks/irctextformat/irctextformat.pro +++ /dev/null @@ -1,7 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -SOURCES += tst_irctextformat.cpp - -include(../benchmarks.pri) diff --git a/src/libcommuni/tests/benchmarks/irctextformat/tst_irctextformat.cpp b/src/libcommuni/tests/benchmarks/irctextformat/tst_irctextformat.cpp deleted file mode 100644 index 1da9483..0000000 --- a/src/libcommuni/tests/benchmarks/irctextformat/tst_irctextformat.cpp +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This test is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -#include "irctextformat.h" -#include <QtTest/QtTest> - -class tst_IrcTextFormat : public QObject -{ - Q_OBJECT - -private slots: - void testToHtml_data(); - void testToHtml(); -}; - -void tst_IrcTextFormat::testToHtml_data() -{ - QTest::addColumn<QString>("text"); - - QTest::newRow("info") << QString("[freenode-info] if you're at a conference and other people are having trouble connecting, please mention it to staff: http://freenode.net/faq.shtml#gettinghelp"); - QTest::newRow("topic") << QString("Communi 1.2.2 - IRC framework || Home: http://communi.github.com || Docs: http://communi.github.com/doc || MeeGo: http://store.ovi.com/content/219150"); - QTest::newRow("commit") << QString("[communi-desktop] jpnurmi pushed 2 new commits to master: https://github.com/communi/communi-desktop/compare/257ca915a490...8832bfe8d0b8"); - QTest::newRow("welcome") << QString("Welcome to the Communi development lounge. Communi for MeeGo/Symbian users are kindly asked to submit a review in Nokia Store."); -} - -void tst_IrcTextFormat::testToHtml() -{ - QFETCH(QString, text); - - IrcTextFormat format; - QBENCHMARK { - format.toHtml(text); - } -} - -QTEST_MAIN(tst_IrcTextFormat) - -#include "tst_irctextformat.moc" diff --git a/src/libcommuni/tests/build/build.pro b/src/libcommuni/tests/build/build.pro deleted file mode 100644 index 4f1eb29..0000000 --- a/src/libcommuni/tests/build/build.pro +++ /dev/null @@ -1,6 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -TEMPLATE = subdirs -SUBDIRS += embed install namespace diff --git a/src/libcommuni/tests/build/embed/embed.pro b/src/libcommuni/tests/build/embed/embed.pro deleted file mode 100644 index 6dc3b5d..0000000 --- a/src/libcommuni/tests/build/embed/embed.pro +++ /dev/null @@ -1,11 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -TEMPLATE = app -TARGET = embed -QT += network - -include(../../../src/src.pri) - -SOURCES += main.cpp diff --git a/src/libcommuni/tests/build/embed/main.cpp b/src/libcommuni/tests/build/embed/main.cpp deleted file mode 100644 index 48449a8..0000000 --- a/src/libcommuni/tests/build/embed/main.cpp +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This test is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -#include <IrcCore> -#include <IrcModel> -#include <IrcUtil> - -int main() -{ - IrcConnection s; - IrcBuffer b; - IrcTextFormat f; -} diff --git a/src/libcommuni/tests/build/install/install.pro b/src/libcommuni/tests/build/install/install.pro deleted file mode 100644 index 5aa824e..0000000 --- a/src/libcommuni/tests/build/install/install.pro +++ /dev/null @@ -1,12 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -TEMPLATE = app -TARGET = embed -QT += network - -CONFIG += communi -COMMUNI += core model util - -SOURCES += main.cpp diff --git a/src/libcommuni/tests/build/install/main.cpp b/src/libcommuni/tests/build/install/main.cpp deleted file mode 100644 index e006424..0000000 --- a/src/libcommuni/tests/build/install/main.cpp +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This test is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -#include <IrcCore/ircconnection.h> -#include <IrcModel/ircbuffer.h> -#include <IrcUtil/irctextformat.h> - -int main() -{ - IrcConnection s; - IrcBuffer b; - IrcTextFormat f; -} diff --git a/src/libcommuni/tests/build/namespace/main.cpp b/src/libcommuni/tests/build/namespace/main.cpp deleted file mode 100644 index 73d7e10..0000000 --- a/src/libcommuni/tests/build/namespace/main.cpp +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright (C) 2008-2014 The Communi Project - * - * This test is free, and not covered by the BSD license. There is no - * restriction applied to their modification, redistribution, using and so on. - * You can study them, modify them, use them in your own program - either - * completely or partially. - */ - -#include <IrcCore> -#include <IrcModel> -#include <IrcUtil> - -int main() -{ - Communi::IrcConnection s; - Communi::IrcBuffer b; - Communi::IrcTextFormat f; -} diff --git a/src/libcommuni/tests/build/namespace/namespace.pro b/src/libcommuni/tests/build/namespace/namespace.pro deleted file mode 100644 index fdd1c92..0000000 --- a/src/libcommuni/tests/build/namespace/namespace.pro +++ /dev/null @@ -1,12 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -TEMPLATE = app -TARGET = embed -QT += network - -DEFINES += IRC_NAMESPACE=Communi -include(../../../src/src.pri) - -SOURCES += main.cpp diff --git a/src/libcommuni/tests/tests.pri b/src/libcommuni/tests/tests.pri deleted file mode 100644 index 04588b0..0000000 --- a/src/libcommuni/tests/tests.pri +++ /dev/null @@ -1,25 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -TARGET = tst_$$basename(_PRO_FILE_PWD_) - -DEPENDPATH += $$_PRO_FILE_PWD_ -INCLUDEPATH += $$_PRO_FILE_PWD_ - -CONFIG += install_name no_testcase_installs - -!verbose:CONFIG += silent - -CONFIG(debug, debug|release) { - OBJECTS_DIR = debug - MOC_DIR = debug -} else { - OBJECTS_DIR = release - MOC_DIR = release -} - -IRC_BUILDDIR = $$OUT_PWD/../../.. - -IRC_MODULES = IrcCore IrcModel IrcUtil -include(../src/module_deps.pri) diff --git a/src/libcommuni/tests/tests.pro b/src/libcommuni/tests/tests.pro deleted file mode 100644 index bbe5635..0000000 --- a/src/libcommuni/tests/tests.pro +++ /dev/null @@ -1,18 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -TEMPLATE = subdirs -SUBDIRS += auto -!no_benchmarks:SUBDIRS += benchmarks - -mac { - # TODO: install_name_tool? - check.commands += cd auto && - check.commands += DYLD_FRAMEWORK_PATH=$$OUT_PWD/../lib $(MAKE) check - !no_benchmarks { - check.commands += && cd ../benchmarks && - check.commands += DYLD_FRAMEWORK_PATH=$$OUT_PWD/../lib $(MAKE) check - } - QMAKE_EXTRA_TARGETS += check -} diff --git a/src/libcommuni/version.pri b/src/libcommuni/version.pri deleted file mode 100644 index a16d8d1..0000000 --- a/src/libcommuni/version.pri +++ /dev/null @@ -1,5 +0,0 @@ -###################################################################### -# Communi -###################################################################### - -IRC_VERSION = 3.2.0 |
