/* * Copyright (c) 2013-2017 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ #pragma once #include #include #include #include namespace Swift { /** * @brief The ChatMessageParser class takes an emoticon map, a \ref HighlightConfiguration, and a boolean that indicates if the message context is in a MUC or not. * The class handles parsing a message string and identifies emoticons, URLs, and various highlights. */ class ChatMessageParser { public: enum class Mode { Chat, GroupChat }; public: ChatMessageParser(const std::map& emoticons, std::shared_ptr highlightConfiguration, Mode mode = Mode::Chat); void setNick(const std::string& nick) { nick_ = nick; } std::string getNick() const { return nick_; } ChatWindow::ChatMessage parseMessageBody(const std::string& body, const std::string& sender = "", bool senderIsSelf = false); private: ChatWindow::ChatMessage emoticonHighlight(const ChatWindow::ChatMessage& parsedMessage); ChatWindow::ChatMessage splitHighlight(const ChatWindow::ChatMessage& parsedMessage); ChatWindow::ChatMessage fullMessageHighlight(const ChatWindow::ChatMessage& parsedMessage, const std::string& sender); private: std::map emoticons_; std::shared_ptr highlightConfiguration_; Mode mode_; std::string nick_; }; }