From d487bce0e46cc7163b2ecacdd884107147646ffe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hauke=20Z=C3=BChl?= Date: Fri, 29 Apr 2016 19:38:14 +0200 Subject: [PATCH 01/15] Initial commit --- .gitignore | 1 + CMakeLists.txt | 33 +++++++ README.md | 2 +- include/Audio.h | 23 +++++ include/Chat.h | 26 ++++++ include/Contact.h | 21 +++++ include/Document.h | 24 +++++ include/Location.h | 18 ++++ include/Message.h | 78 ++++++++++++++++ include/MessageEntity.h | 27 ++++++ include/PhotoSize.h | 21 +++++ include/Sticker.h | 24 +++++ include/TelegramBot.h | 63 +++++++++++++ include/User.h | 21 +++++ include/Venue.h | 22 +++++ include/Video.h | 26 ++++++ include/Voice.h | 21 +++++ include/exec.h | 8 ++ include/explode.h | 9 ++ include/http_build_query.h | 9 ++ include/json_encode.h | 10 +++ include/std.h | 23 +++++ src/Audio.cc | 11 +++ src/Chat.cc | 21 +++++ src/Contact.cc | 9 ++ src/Document.cc | 10 +++ src/Location.cc | 7 ++ src/Message.cc | 134 +++++++++++++++++++++++++++ src/MessageEntity.cc | 14 +++ src/PhotoSize.cc | 9 ++ src/Sticker.cc | 10 +++ src/TelegramBot.cc | 179 +++++++++++++++++++++++++++++++++++++ src/User.cc | 9 ++ src/Venue.cc | 9 ++ src/Video.cc | 12 +++ src/Voice.cc | 9 ++ src/exec.cc | 21 +++++ src/explode.cc | 28 ++++++ src/http_build_query.cc | 14 +++ src/json_encode.cc | 13 +++ src/std.cc | 97 ++++++++++++++++++++ 41 files changed, 1125 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 CMakeLists.txt create mode 100644 include/Audio.h create mode 100644 include/Chat.h create mode 100644 include/Contact.h create mode 100644 include/Document.h create mode 100644 include/Location.h create mode 100644 include/Message.h create mode 100644 include/MessageEntity.h create mode 100644 include/PhotoSize.h create mode 100644 include/Sticker.h create mode 100644 include/TelegramBot.h create mode 100644 include/User.h create mode 100644 include/Venue.h create mode 100644 include/Video.h create mode 100644 include/Voice.h create mode 100644 include/exec.h create mode 100644 include/explode.h create mode 100644 include/http_build_query.h create mode 100644 include/json_encode.h create mode 100644 include/std.h create mode 100644 src/Audio.cc create mode 100644 src/Chat.cc create mode 100644 src/Contact.cc create mode 100644 src/Document.cc create mode 100644 src/Location.cc create mode 100644 src/Message.cc create mode 100644 src/MessageEntity.cc create mode 100644 src/PhotoSize.cc create mode 100644 src/Sticker.cc create mode 100644 src/TelegramBot.cc create mode 100644 src/User.cc create mode 100644 src/Venue.cc create mode 100644 src/Video.cc create mode 100644 src/Voice.cc create mode 100644 src/exec.cc create mode 100644 src/explode.cc create mode 100644 src/http_build_query.cc create mode 100644 src/json_encode.cc create mode 100644 src/std.cc diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..378eac2 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +build diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..232c66a --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,33 @@ +set (HEADERS + Audio.h + Document.h + json_encode.h + PhotoSize.h + User.h + Chat.h + exec.h + Location.h + std.h + Venue.h + Contact.h + explode.h + MessageEntity.h + Sticker.h + Video.h + defines.h + http_build_query.h + Message.h + TelegramBot.h + Voice.h +) + +cmake_minimum_required(VERSION 2.8) + +project(libtg) + +include_directories(${CMAKE_CURRENT_SOURCE_DIR/include) +add_library(tg SHARED main.cc) + +install(TARGETS tg DESTINATION lib) +install(FILES ${HEADERS} DESTINATION include) + diff --git a/README.md b/README.md index a8ec413..9332261 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,2 @@ # LibTgBotPP -A simple Telegram Bot C++ library +A simple Telegram Bot C++ library diff --git a/include/Audio.h b/include/Audio.h new file mode 100644 index 0000000..79b4d5c --- /dev/null +++ b/include/Audio.h @@ -0,0 +1,23 @@ +#ifndef _TG_AUDIO_H_ +#define _TG_AUDIO_H_ + +#include +#include + +namespace Telegram { + + class Audio { + public: + Audio(Json::Value); + + private: + std::string file_id; + Json::Int64 duration; + std::string performer; + std::string title; + std::string mime_type; + Json::Int64 file_size; + }; +} + +#endif diff --git a/include/Chat.h b/include/Chat.h new file mode 100644 index 0000000..576b92c --- /dev/null +++ b/include/Chat.h @@ -0,0 +1,26 @@ +#ifndef _TG_CHAT_H_ +#define _TG_CHAT_H_ + +#include +#include + +namespace Telegram { + + class Chat { + public: + Chat(Json::Value); + + Json::Int64 getId(); + std::string getUsername(); + + private: + Json::Int64 id; + std::string type; + std::string title; + std::string username; + std::string first_name; + std::string last_name; + }; +} + +#endif diff --git a/include/Contact.h b/include/Contact.h new file mode 100644 index 0000000..765f2e5 --- /dev/null +++ b/include/Contact.h @@ -0,0 +1,21 @@ +#ifndef _TG_CONTACT_H_ +#define _TG_CONTACT_H_ + +#include +#include + +namespace Telegram { + + class Contact { + public: + Contact(Json::Value); + + private: + std::string phone_number; + std::string first_name; + std::string last_name; + Json::Int64 user_id; + }; +} + +#endif diff --git a/include/Document.h b/include/Document.h new file mode 100644 index 0000000..d5a1271 --- /dev/null +++ b/include/Document.h @@ -0,0 +1,24 @@ +#ifndef _TG_DOCUMENT_H_ +#define _TG_DOCUMENT_H_ + +#include +#include + +#include "PhotoSize.h" + +namespace Telegram { + + class Document { + public: + Document(Json::Value); + + private: + std::string file_id; + PhotoSize *thumb; + std::string file_name; + std::string mime_type; + Json::Int64 file_size; + }; +} + +#endif diff --git a/include/Location.h b/include/Location.h new file mode 100644 index 0000000..a7959f3 --- /dev/null +++ b/include/Location.h @@ -0,0 +1,18 @@ +#ifndef __TG_LOCATION_H_ +#define __TG_LOCATION_H_ + +#include + +namespace Telegram { + + class Location { + public: + Location(Json::Value); + + private: + float longitude; + float latitude; + }; +} + +#endif diff --git a/include/Message.h b/include/Message.h new file mode 100644 index 0000000..6d31ef2 --- /dev/null +++ b/include/Message.h @@ -0,0 +1,78 @@ +#ifndef _TG_MESSAGE_H_ +#define _TG_MESSAGE_H_ + +#include + +#include +#include + +#include "Audio.h" +#include "Chat.h" +#include "Contact.h" +#include "Document.h" +#include "Location.h" +#include "MessageEntity.h" +#include "PhotoSize.h" +#include "Sticker.h" +#include "User.h" +#include "Venue.h" +#include "Video.h" +#include "Voice.h" + +namespace Telegram { + + /** + * See https://core.telegram.org/bots/api#message + */ + class Message { + public: + // Constructors + Message(void); + Message(Json::Value); + Message(std::string); + + void setEntities(Json::Value); + std::vector setPhotos(Json::Value); + + Telegram::Chat *getChat(); + std::string getText(); + Telegram::TMessageEntities getEntities(); + + private: + Json::UInt64 message_id; + User *from; + Json::Int64 date; + Chat *chat; + User *forward_from; + Json::Int64 forward_date; + Message *reply_to_message; + std::string text; + Telegram::TMessageEntities entities; + Audio *audio; + Document *document; + std::vector photo; + Sticker *sticker; + Video *video; + Voice *voice; + std::string caption; + Contact *contact; + Location *location; + Venue *venue; + User *new_chat_member; + User *left_chat_member; + std::string new_chat_title; + std::vector new_chat_photo; + int delete_chat_photo; + int group_chat_created; + int supergroup_chat_created; + Json::Int64 migrate_to_chat_id; + Json::Int64 migrate_from_chat_id; + Message *pinned_message; + + // Methods + void init(void); + void init(Json::Value); + }; +} + +#endif diff --git a/include/MessageEntity.h b/include/MessageEntity.h new file mode 100644 index 0000000..6b3c320 --- /dev/null +++ b/include/MessageEntity.h @@ -0,0 +1,27 @@ +#ifndef _TG_MESSAGEENTITY_H_ +#define _TG_MESSAGEENTITY_H_ + +#include +#include +#include + +namespace Telegram { + + class MessageEntity { + public: + MessageEntity(Json::Value); + + std::string getType(); + + private: + std::string type; + Json::Int64 offset; + Json::Int64 length; + std::string url; + }; + + typedef std::vector TMessageEntities; + +} + +#endif diff --git a/include/PhotoSize.h b/include/PhotoSize.h new file mode 100644 index 0000000..45e8929 --- /dev/null +++ b/include/PhotoSize.h @@ -0,0 +1,21 @@ +#ifndef _TG_PHOTOSIZE_H_ +#define _TG_PHOTOSIZE_H_ + +#include +#include + +namespace Telegram { + + class PhotoSize { + public: + PhotoSize(Json::Value); + + private: + std::string file_id; + Json::Int64 width; + Json::Int64 height; + Json::Int64 file_size; + }; +} + +#endif diff --git a/include/Sticker.h b/include/Sticker.h new file mode 100644 index 0000000..da6d17c --- /dev/null +++ b/include/Sticker.h @@ -0,0 +1,24 @@ +#ifndef _TG_STICKER_H_ +#define _TG_STICKER_H_ + +#include +#include + +#include "PhotoSize.h" + +namespace Telegram { + + class Sticker { + public: + Sticker(Json::Value); + + private: + std::string file_id; + Json::Int64 width; + Json::Int64 height; + PhotoSize *thumb; + Json::Int64 file_size; + }; +} + +#endif diff --git a/include/TelegramBot.h b/include/TelegramBot.h new file mode 100644 index 0000000..e285943 --- /dev/null +++ b/include/TelegramBot.h @@ -0,0 +1,63 @@ +#ifndef _TELEGRAM_BOT_H_ +#define _TELEGRAM_BOT_H_ + +#include +#include + +#include +#include + +#include "Message.h" + +namespace Telegram { + + class TelegramBot; + + // Typedef for callbacks + typedef std::vector TCommandLine; + typedef std::string(*CommandCallback)(TelegramBot*, TCommandLine); + typedef struct { + std::string command; + CommandCallback callback; + std::string help_text; + } TCommand; + typedef std::map TCommandMap; + + class TelegramBot { + + public: + TelegramBot(); + TelegramBot(std::string); + + void addCommand(TCommand); + void setWebhook(std::string); + void processMessage(std::string); + void sendMessage(std::string, Json::Int64); + void sendMessage(std::string, std::string); + + Telegram::Message *getMessage(); + std::map getCommandMap(); + + // Callback methods + /* + std::string start(Telegram::TelegramBot, tvCommandLine); + std::string help(tvCommandLine); + std::string whoami(tvCommandLine); + std::string loadavg(tvCommandLine); + std::string proc(tvCommandLine); + */ + + private: + std::string api_url; + Telegram::Message *msg; + TCommandMap command_map; + Json::Int64 chat_id; + + void init(); + void apiRequest(std::string, std::map); + void apiRequestJson(std::string, std::map); + std::string processCommand(std::string); + }; +} + +#endif diff --git a/include/User.h b/include/User.h new file mode 100644 index 0000000..943e1b7 --- /dev/null +++ b/include/User.h @@ -0,0 +1,21 @@ +#ifndef _TG_USER_H_ +#define _TG_USER_H_ + +#include +#include + +namespace Telegram { + + class User { + public: + User(Json::Value); + + private: + Json::Int64 id; + std::string first_name; + std::string last_name; + std::string username; + }; +} + +#endif diff --git a/include/Venue.h b/include/Venue.h new file mode 100644 index 0000000..c2ef36f --- /dev/null +++ b/include/Venue.h @@ -0,0 +1,22 @@ +#ifndef _TG_VENUE_H_ +#define _TG_VENUE_H_ + +#include + +#include "Location.h" + +namespace Telegram { + + class Venue { + public: + Venue(Json::Value); + + private: + Location *location; + std::string title; + std::string address; + std::string foursquare_id; + }; +} + +#endif diff --git a/include/Video.h b/include/Video.h new file mode 100644 index 0000000..95401a4 --- /dev/null +++ b/include/Video.h @@ -0,0 +1,26 @@ +#ifndef _TG_VIDEO_H_ +#define _TG_VIDEO_H_ + +#include +#include + +#include "PhotoSize.h" + +namespace Telegram { + + class Video { + public: + Video(Json::Value); + + private: + std::string file_id; + Json::Int64 width; + Json::Int64 height; + Json::Int64 duration; + PhotoSize *thumb; + std::string mime_type; + Json::Int64 file_size; + }; +} + +#endif diff --git a/include/Voice.h b/include/Voice.h new file mode 100644 index 0000000..7d2b196 --- /dev/null +++ b/include/Voice.h @@ -0,0 +1,21 @@ +#ifndef _TG_VOICE_H_ +#define _TG_VOICE_H_ + +#include +#include + +namespace Telegram { + + class Voice { + public: + Voice(Json::Value); + + private: + std::string file_id; + Json::Int64 duration; + std::string mime_type; + Json::Int64 file_size; + }; +} + +#endif diff --git a/include/exec.h b/include/exec.h new file mode 100644 index 0000000..509a5a1 --- /dev/null +++ b/include/exec.h @@ -0,0 +1,8 @@ +#ifndef __EXEC_H__ +#define __EXEC_H__ + +#include + +std::string exec(const char*); + +#endif diff --git a/include/explode.h b/include/explode.h new file mode 100644 index 0000000..2be65b3 --- /dev/null +++ b/include/explode.h @@ -0,0 +1,9 @@ +#ifndef __explode_h__ +#define __explode_h__ + +#include +#include + +std::vector explode( const std::string&, const std::string &); + +#endif diff --git a/include/http_build_query.h b/include/http_build_query.h new file mode 100644 index 0000000..318c4af --- /dev/null +++ b/include/http_build_query.h @@ -0,0 +1,9 @@ +#ifndef __HTTP_BUILD_QUERY_H__ +#define __HTTP_BUILD_QUERY_H__ + +#include +#include + +std::string http_build_query(std::map); + +#endif diff --git a/include/json_encode.h b/include/json_encode.h new file mode 100644 index 0000000..e9c1068 --- /dev/null +++ b/include/json_encode.h @@ -0,0 +1,10 @@ +#ifndef __JSON_ENCODE_H__ +#define __JSON_ENCODE_H__ + +#include +#include +#include + +std::string json_encode(std::map); + +#endif diff --git a/include/std.h b/include/std.h new file mode 100644 index 0000000..30872b3 --- /dev/null +++ b/include/std.h @@ -0,0 +1,23 @@ +#ifndef __STD_H__ +#define __STD_H__ + +#include +#include +#include +#include + +// Makro(s) +#define SSTR( x ) static_cast< std::ostringstream & >(( std::ostringstream() << std::dec << x ) ).str() + +typedef unsigned long long int uint64; + +uint64 stoi(std::string); +std::string itos(uint64); +std::string currentDate(); +std::vector split(const std::string &text, char sep = ' '); +float stof(std::string); +std::string trim(const std::string&); +std::string gethome(); +void Log(std::string); + +#endif diff --git a/src/Audio.cc b/src/Audio.cc new file mode 100644 index 0000000..7cf1013 --- /dev/null +++ b/src/Audio.cc @@ -0,0 +1,11 @@ +#include "Audio.h" + +Telegram::Audio::Audio(Json::Value json) { + + this->file_id = json["file_id"].asString(); + this->duration = json["duration"].asUInt64(); + this->performer = json["performer"].asString(); + this->title = json["title"].asString(); + this->mime_type = json["mime_type"].asString(); + this->file_size = json["file_size"].asUInt64(); +} diff --git a/src/Chat.cc b/src/Chat.cc new file mode 100644 index 0000000..8541d1e --- /dev/null +++ b/src/Chat.cc @@ -0,0 +1,21 @@ +#include "Chat.h" + +Telegram::Chat::Chat(Json::Value json) { + + this->id = json["id"].asUInt64(); + this->type = json["type"].asString(); + this->title = json["title"].asString(); + this->username = json["username"].asString(); + this->first_name = json["first_name"].asString(); + this->last_name = json["last_name"].asString(); +} + +Json::Int64 Telegram::Chat::getId() { + + return(this->id); +} + +std::string Telegram::Chat::getUsername() { + + return(this->username); +} diff --git a/src/Contact.cc b/src/Contact.cc new file mode 100644 index 0000000..86cd5dd --- /dev/null +++ b/src/Contact.cc @@ -0,0 +1,9 @@ +#include "Contact.h" + +Telegram::Contact::Contact(Json::Value json) { + + this->phone_number = json["phone_number"].asString(); + this->first_name = json["first_name"].asString(); + this->last_name = json["last_name"].asString(); + this->user_id = json["user_id"].asInt64(); +} diff --git a/src/Document.cc b/src/Document.cc new file mode 100644 index 0000000..f55823b --- /dev/null +++ b/src/Document.cc @@ -0,0 +1,10 @@ +#include "Document.h" + +Telegram::Document::Document(Json::Value json) { + + this->file_id = json["file_id"].asString(); + this->thumb = new PhotoSize(json["thumb"]); + this->file_name = json["file_name"].asString(); + this->mime_type = json["mime_type"].asString(); + this->file_size = json["file_size"].asInt64(); +} diff --git a/src/Location.cc b/src/Location.cc new file mode 100644 index 0000000..5db5f5e --- /dev/null +++ b/src/Location.cc @@ -0,0 +1,7 @@ +#include "Location.h" + +Telegram::Location::Location(Json::Value json) { + + this->longitude = json["longitude"].asFloat(); + this->latitude = json["latitude"].asFloat(); +} diff --git a/src/Message.cc b/src/Message.cc new file mode 100644 index 0000000..e565a00 --- /dev/null +++ b/src/Message.cc @@ -0,0 +1,134 @@ +#include "Message.h" + +// Generic constructor +// @TODO: Make this an "init"-Method and call it from the constructor +Telegram::Message::Message(void) { + + this->init(); +} + +Telegram::Message::Message(Json::Value json) { + + if (json["message"].isNull()) { + this->init(); + return; + } + + this->init(json); +} + +Telegram::Message::Message(std::string message) { + + Json::Value json; + Json::Reader reader; + + reader.parse(message, json); + + this->init(json); +} + +void Telegram::Message::init(void) { + + this->message_id = 0; + this->from = NULL; + this->date = 0; + this->chat = NULL; + this->forward_from = NULL; + this->forward_date = 0; + this->reply_to_message = NULL; + this->text = ""; + this->entities.clear(); + this->audio = NULL; + this->document = NULL; + this->photo.clear(); + this->sticker = NULL; + this->video = NULL; + this->voice = NULL; + this->caption = ""; + this->contact = NULL; + this->location = NULL; + this->venue = NULL; + this->new_chat_member = NULL; + this->left_chat_member = NULL; + this->new_chat_title = ""; + this->new_chat_photo.clear(); + this->delete_chat_photo = 0; + this->group_chat_created = 0; + this->supergroup_chat_created = 0; + this->migrate_to_chat_id = 0; + this->pinned_message = NULL; +} + +void Telegram::Message::init(Json::Value json) { + + Json::Value msg = json["message"]; + + this->message_id = msg["message_id"].asUInt64(); + this->from = new Telegram::User(msg["from"]); + this->date = msg["date"].asUInt64(); + this->chat = new Telegram::Chat(msg["chat"]); + this->forward_from = new Telegram::User(msg["forward_from"]); + this->forward_date = msg["forward_date"].asUInt64(); + this->reply_to_message = new Telegram::Message(msg["reply_to_message"]); + this->text = msg["text"].asString(); + this->setEntities(msg["entities"]); + this->audio = new Audio(msg["audio"]); + this->document = new Document(msg["document"]); + this->photo = this->setPhotos(msg["photo"]); + this->sticker = new Sticker(msg["sticker"]); + this->video = new Video(msg["video"]); + this->voice = new Voice(msg["voice"]); + this->caption = msg["caption"].asString(); + this->contact = new Contact(msg["contact"]); + this->location = new Location(msg["location"]); + this->venue = new Venue(msg["venue"]); + this->new_chat_member = new User(msg["new_chat_member"]); + this->left_chat_member = new User(msg["left_chat_member"]); + this->new_chat_title = msg["new_chat_title"].asString(); + this->new_chat_photo = this->setPhotos(msg["new_chat_photo"]); + this->delete_chat_photo = msg["delete_chat_photo"].asInt64(); + this->group_chat_created = msg["group_chat_created"].asInt64(); + this->supergroup_chat_created = msg["supergroup_chat_created"].asInt64(); + this->migrate_to_chat_id = msg["migrate_to_chat_id"].asUInt64(); + this->migrate_from_chat_id = msg["migrate_from_chat_id"].asUInt64(); + this->pinned_message = new Message(msg["pinned_message"]); +} + +// Setter +void Telegram::Message::setEntities(Json::Value entities) { + + Json::ArrayIndex size = entities.size(); + for(Json::ArrayIndex i = 0; i < size; i++) { + Telegram::MessageEntity *entity = new Telegram::MessageEntity(entities[i]); + this->entities.push_back(entity); + } +} + +std::vector Telegram::Message::setPhotos(Json::Value photos) { + + Json::ArrayIndex size = photos.size(); + std::vector vPhotos; + + for(Json::ArrayIndex i = 0; i < size; i++) { + Telegram::PhotoSize *photo_size = new Telegram::PhotoSize(photos[i]); + vPhotos.push_back(photo_size); + } + + return(vPhotos); +} + +// Getter +Telegram::Chat *Telegram::Message::getChat() { + + return(this->chat); +} + +std::string Telegram::Message::getText() { + + return(this->text); +} + +Telegram::TMessageEntities Telegram::Message::getEntities() { + + return(this->entities); +} diff --git a/src/MessageEntity.cc b/src/MessageEntity.cc new file mode 100644 index 0000000..d903a5b --- /dev/null +++ b/src/MessageEntity.cc @@ -0,0 +1,14 @@ +#include "MessageEntity.h" + +Telegram::MessageEntity::MessageEntity(Json::Value json) { + + this->type = json["type"].asString(); + this->offset = json["offset"].asUInt64(); + this->length = json["length"].asUInt64(); + this->url = json["url"].asString(); +} + +std::string Telegram::MessageEntity::getType() { + + return(this->type); +} diff --git a/src/PhotoSize.cc b/src/PhotoSize.cc new file mode 100644 index 0000000..a110d1a --- /dev/null +++ b/src/PhotoSize.cc @@ -0,0 +1,9 @@ +#include "PhotoSize.h" + +Telegram::PhotoSize::PhotoSize(Json::Value json) { + + this->file_id = json["file_id"].asString(); + this->width = json["width"].asInt64(); + this->height = json["height"].asInt64(); + this->file_size = json["file_size"].asInt64(); +} diff --git a/src/Sticker.cc b/src/Sticker.cc new file mode 100644 index 0000000..b78aab2 --- /dev/null +++ b/src/Sticker.cc @@ -0,0 +1,10 @@ +#include "Sticker.h" + +Telegram::Sticker::Sticker(Json::Value json) { + + this->file_id = json["file_id"].asString(); + this->width = json["width"].asInt64(); + this->height = json["height"].asInt64(); + this->thumb = new PhotoSize(json["thumb"]); + this->file_size = json["file_size"].asInt64(); +} diff --git a/src/TelegramBot.cc b/src/TelegramBot.cc new file mode 100644 index 0000000..ec19a3a --- /dev/null +++ b/src/TelegramBot.cc @@ -0,0 +1,179 @@ +#include "TelegramBot.h" + +#include + +#include +#include +#include +#include + +#include "http_build_query.h" +#include "json_encode.h" +#include "std.h" + +#include "Message.h" +#include "MessageEntity.h" + +#define API_URL "https://api.telegram.org/bot" + +// Constructor of Bot +Telegram::TelegramBot::TelegramBot() { + + this->api_url = ""; + this->init(); +} + +Telegram::TelegramBot::TelegramBot(std::string token) { + + this->api_url = API_URL + token + "/"; + this->init(); +} + +void Telegram::TelegramBot::addCommand(TCommand cmd) { + + if (cmd.command[0] != '/') { + cmd.command = "/" + cmd.command; + } + this->command_map[cmd.command] = cmd; +} + +/** + * Set the webhook + * The web hook URL is like https:///cgi-bin/mybot.cgi + * A web hook must be set before you can get any messages from the Telegram + * network! + */ +void Telegram::TelegramBot::setWebhook(std::string url) { + + std::map params; + + params["url"] = url; + this->apiRequest("setWebhook", params); +} + +// Process incoming message +void Telegram::TelegramBot::processMessage(std::string message) { + + this->msg = new Telegram::Message(message); + + Telegram::TMessageEntities entities = this->msg->getEntities(); + + if (entities.size() && (entities[0]->getType() == "bot_command")) { + this->sendMessage(this->processCommand(this->msg->getText()), this->msg->getChat()->getId()); + } else { + this->sendMessage("Hello " + this->msg->getChat()->getUsername() + ", you told me: '" + msg->getText() + "'", this->msg->getChat()->getId()); + } +} + +// Send a text message to a user +void Telegram::TelegramBot::sendMessage(std::string message, Json::Int64 chat_id) { + + this->sendMessage(message, SSTR(chat_id)); +} + +void Telegram::TelegramBot::sendMessage(std::string message, std::string chat_id) { + + std::map params; + params["chat_id"] = chat_id; + params["text"] = message; + + this->apiRequestJson("sendMessage", params); +} + +Telegram::Message *Telegram::TelegramBot::getMessage() { + + return(this->msg); +} + +Telegram::TCommandMap Telegram::TelegramBot::getCommandMap() { + + return(this->command_map); +} + +// Private methods +void Telegram::TelegramBot::init() { + + std::cout << "Content-type: text/html\r\n\r\n" << std::endl; +} + +// A generic API request +void Telegram::TelegramBot::apiRequest(std::string method, std::map parameters) { + + parameters["method"] = method; + + Json::Value jValues; + Json::StyledWriter w; + + for(std::map::iterator it = parameters.begin(); it != parameters.end(); ++it) { + jValues[(*it).first] = (*it).second; + } + + try { + cURLpp::Easy handle; + std::string url = this->api_url + method + "?" + http_build_query(parameters); + + handle.setOpt(cURLpp::Options::Url(url)); + handle.setOpt(cURLpp::Options::ConnectTimeout(5)); + handle.setOpt(cURLpp::Options::Timeout(60)); + handle.perform(); // Do the curl request + + int code; + code = cURLpp::Infos::ResponseCode::get(handle); + } + catch(cURLpp::LogicError &e) { + Log(e.what()); + } + catch(cURLpp::RuntimeError &e) { + Log(e.what()); + } + catch(std::exception &e) { + Log(e.what()); + } +} + +// An API request, posting JSON data +void Telegram::TelegramBot::apiRequestJson(std::string method, std::map parameters) { + + parameters["method"] = method; + + try { + cURLpp::Easy handle; + std::list header; + header.push_back("Content-Type: application/json"); + + handle.setOpt(cURLpp::Options::Url(this->api_url)); + handle.setOpt(cURLpp::Options::ConnectTimeout(5)); + handle.setOpt(cURLpp::Options::Timeout(60)); + handle.setOpt(cURLpp::Options::HttpHeader(header)); + handle.setOpt(cURLpp::Options::PostFields(json_encode(parameters))); + handle.perform(); // Do the curl request + } + catch(cURLpp::LogicError &e) { + Log(e.what()); + } + catch(cURLpp::RuntimeError &e) { + Log(e.what()); + } + catch(std::exception &e) { + Log(e.what()); + } +} + +std::string Telegram::TelegramBot::processCommand(std::string cmd) { + + // Process command + std::string sCommand; + std::string sResult; + std::vector vCmdLine = split(cmd, ' '); + + if((vCmdLine.size() > 0) && (this->command_map.find(vCmdLine[0]) != this->command_map.end())) { + sCommand = vCmdLine[0]; + vCmdLine.erase(vCmdLine.begin()); // First value is the command itself + TCommand cs = this->command_map[sCommand]; + sResult = (*cs.callback)(this, vCmdLine); + } else { + sResult = "Unknown command"; + } + + return(sResult); +} diff --git a/src/User.cc b/src/User.cc new file mode 100644 index 0000000..3511782 --- /dev/null +++ b/src/User.cc @@ -0,0 +1,9 @@ +#include "User.h" + +Telegram::User::User(Json::Value json) { + + this->id = json["id"].asUInt64(); + this->first_name = json["first_name"].asString(); + this->last_name = json["last_name"].asString(); + this->username = json["username"].asString(); +} diff --git a/src/Venue.cc b/src/Venue.cc new file mode 100644 index 0000000..6517e8a --- /dev/null +++ b/src/Venue.cc @@ -0,0 +1,9 @@ +#include "Venue.h" + +Telegram::Venue::Venue(Json::Value json) { + + this->location = new Location(json["location"]); + this->title = json["title"].asString(); + this->address = json["address"].asString(); + this->foursquare_id = json["foursquare_id"].asString(); +} diff --git a/src/Video.cc b/src/Video.cc new file mode 100644 index 0000000..cd3fcfa --- /dev/null +++ b/src/Video.cc @@ -0,0 +1,12 @@ +#include "Video.h" + +Telegram::Video::Video(Json::Value json) { + + this->file_id = json["file_id"].asString(); + this->width = json["width"].asInt64(); + this->height = json["height"].asInt64(); + this->duration = json["duration"].asInt64(); + this->thumb = new PhotoSize(json["thumb"]); + this->mime_type = json["mime_type"].asString(); + this->file_size = json["file_size"].asInt64(); +} diff --git a/src/Voice.cc b/src/Voice.cc new file mode 100644 index 0000000..0560b81 --- /dev/null +++ b/src/Voice.cc @@ -0,0 +1,9 @@ +#include "Voice.h" + +Telegram::Voice::Voice(Json::Value json) { + + this->file_id = json["file_id"].asString(); + this->duration = json["duration"].asInt64(); + this->mime_type = json["mime_type"].asString(); + this->file_size = json["file_size"].asInt64(); +} diff --git a/src/exec.cc b/src/exec.cc new file mode 100644 index 0000000..4faad42 --- /dev/null +++ b/src/exec.cc @@ -0,0 +1,21 @@ +#include "exec.h" + +#include +#include + +std::string exec(const char* cmd) { + + FILE* pipe = popen(cmd, "r"); + if (!pipe) + return "ERROR"; + + char buffer[128]; + std::string result = ""; + while (!feof(pipe)) { + if (fgets(buffer, 128, pipe) != NULL) + result += buffer; + } + pclose(pipe); + + return result; +} diff --git a/src/explode.cc b/src/explode.cc new file mode 100644 index 0000000..009b5ec --- /dev/null +++ b/src/explode.cc @@ -0,0 +1,28 @@ +#include "explode.h" + +std::vector explode( const std::string &delimiter, const std::string &str) { + + std::vector arr; + + int strleng = str.length(); + int delleng = delimiter.length(); + if (delleng == 0) + return arr;//no change + + int i = 0; + int k = 0; + while(i < strleng) { + int j = 0; + while ((i+j < strleng) && (j < delleng) && (str[i+j] == delimiter[j])) + j++; + if (j == delleng) { + arr.push_back(str.substr(k, i-k)); + i += delleng; + k = i; + } else { + i++; + } + } + arr.push_back(str.substr(k, i-k)); + return arr; +} diff --git a/src/http_build_query.cc b/src/http_build_query.cc new file mode 100644 index 0000000..51ed26b --- /dev/null +++ b/src/http_build_query.cc @@ -0,0 +1,14 @@ +#include "http_build_query.h" + +std::string http_build_query(std::map data) { + + std::string result = ""; + + std::map::iterator it; + + for (it = data.begin(); it != data.end(); it++) { + result = result + it->first + "=" + it->second + "&"; + } + + return result; +} diff --git a/src/json_encode.cc b/src/json_encode.cc new file mode 100644 index 0000000..2b12a9f --- /dev/null +++ b/src/json_encode.cc @@ -0,0 +1,13 @@ +#include "json_encode.h" + +std::string json_encode(std::map parameters) { + + Json::Value jValues; + Json::StyledWriter w; + + for(std::map::iterator it = parameters.begin(); it != parameters.end(); ++it) { + jValues[(*it).first] = (*it).second; + } + + return(w.write(jValues)); +} diff --git a/src/std.cc b/src/std.cc new file mode 100644 index 0000000..7a94401 --- /dev/null +++ b/src/std.cc @@ -0,0 +1,97 @@ +#include "std.h" + +#include +#include +#include + +#include +#include +#include + +uint64 stoi(std::string st) { + + uint64 ret; + + if (st == "") { + st = "0"; + } + + std::istringstream convert(st); + convert >> ret; + + return(ret); +} + +std::string itos(uint64 i) { + + return(static_cast(&(std::ostringstream() << i))->str()); +} + +std::string currentDate() { + + time_t now = time(0); + struct tm tstruct; + char buf[32]; + tstruct = *localtime(&now); + + strftime(buf, sizeof(buf), "%Y-%m-%d", &tstruct); + + return(buf); +} + +std::vector split(const std::string &text, char sep) { + + std::vector tokens; + int start = 0, end = 0; + while ((int)(end = text.find(sep, start)) != (int)std::string::npos) { + std::string temp = text.substr(start, end - start); + if(temp != "") + tokens.push_back(temp); + start = end + 1; + } + std::string temp=text.substr(start); + if(temp != "") + tokens.push_back(temp); + + return tokens; +} + +float stof(std::string st) { + + // Conver , to . first + replace(st.begin(), st.end(), ',', '.'); + + return(atof(st.c_str())); +} + +std::string trim(const std::string &s) { + + std::string::const_iterator it = s.begin(); + while (it != s.end() && isspace(*it)) + it++; + + std::string::const_reverse_iterator rit = s.rbegin(); + while (rit.base() != it && isspace(*rit)) + rit++; + + return std::string(it, rit.base()); +} + +std::string gethome() { + + std::string homedir = getenv("HOME"); + if (homedir == "") { + homedir = getpwuid(getuid())->pw_dir; + } + + return(homedir); +} + +// A simple logger +void Log(std::string msg) { + + std::ofstream datei; + datei.open("/tmp/bot.log", std::ios::out | std::ios::app); + datei << "Msg: " << msg << std::endl; + datei.close(); +} From 7b61d316f6699f8a7a78906badcb460bf16dc548 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hauke=20Z=C3=BChl?= Date: Sat, 30 Apr 2016 06:57:42 +0200 Subject: [PATCH 02/15] Improved CMakeLists --- CMakeLists.txt | 75 ++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 54 insertions(+), 21 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 232c66a..5c21954 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,32 +1,65 @@ set (HEADERS - Audio.h - Document.h - json_encode.h - PhotoSize.h - User.h - Chat.h - exec.h - Location.h - std.h - Venue.h - Contact.h - explode.h - MessageEntity.h - Sticker.h - Video.h - defines.h + Audio.h + Document.h + json_encode.h + PhotoSize.h + User.h + Chat.h + exec.h + Location.h + std.h + Venue.h + Contact.h + explode.h + MessageEntity.h + Sticker.h + Video.h + defines.h http_build_query.h - Message.h - TelegramBot.h - Voice.h + Message.h + TelegramBot.h + Voice.h +) + +set (SOURCES + src/Audio.cc + src/Document.cc + src/json_encode.cc + src/PhotoSize.cc + src/User.cc + src/Chat.cc + src/exec.cc + src/Location.cc + src/std.cc + src/Venue.cc + src/Contact.cc + src/explode.cc + src/MessageEntity.cc + src/Sticker.cc + src/Video.cc + src/http_build_query.cc + src/Message.cc + src/TelegramBot.cc + src/Voice.cc ) cmake_minimum_required(VERSION 2.8) project(libtg) -include_directories(${CMAKE_CURRENT_SOURCE_DIR/include) -add_library(tg SHARED main.cc) +find_package(PkgConfig) + +pkg_check_modules(JSONCPP REQUIRED jsoncpp) +pkg_check_modules(CURL REQUIRED curlpp) + +include_directories(${JSONCPP_INCLUDE_DIRS}) +include_directories(${CURL_INCLUDE_DIRS}) + +set(LIBS ${LIBS} ${JSONCPP_LIBRARIES}) +set(LIBS ${LIBS} ${CURL_LIBRARIES}) + +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) +add_library(tg SHARED ${SOURCES}) install(TARGETS tg DESTINATION lib) install(FILES ${HEADERS} DESTINATION include) From dfe31b70e0b1b06cc6e9ad6dda2d325f3b4c06fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hauke=20Z=C3=BChl?= Date: Sat, 30 Apr 2016 07:18:32 +0200 Subject: [PATCH 03/15] Moved include files, changed include directives --- CMakeLists.txt | 39 +++++++++++------------ include/{ => Telegram}/Audio.h | 0 include/{ => Telegram}/Chat.h | 0 include/{ => Telegram}/Contact.h | 0 include/{ => Telegram}/Document.h | 2 +- include/{ => Telegram}/Location.h | 0 include/{ => Telegram}/Message.h | 24 +++++++------- include/{ => Telegram}/MessageEntity.h | 0 include/{ => Telegram}/PhotoSize.h | 0 include/{ => Telegram}/Sticker.h | 2 +- include/{ => Telegram}/TelegramBot.h | 2 +- include/{ => Telegram}/User.h | 0 include/{ => Telegram}/Venue.h | 2 +- include/{ => Telegram}/Video.h | 2 +- include/{ => Telegram}/Voice.h | 0 include/{ => Telegram}/exec.h | 0 include/{ => Telegram}/explode.h | 0 include/{ => Telegram}/http_build_query.h | 0 include/{ => Telegram}/json_encode.h | 0 include/{ => Telegram}/std.h | 0 src/Audio.cc | 2 +- src/Chat.cc | 2 +- src/Contact.cc | 2 +- src/Document.cc | 2 +- src/Location.cc | 2 +- src/Message.cc | 2 +- src/MessageEntity.cc | 2 +- src/PhotoSize.cc | 2 +- src/Sticker.cc | 2 +- src/TelegramBot.cc | 12 +++---- src/User.cc | 2 +- src/Venue.cc | 2 +- src/Video.cc | 2 +- src/Voice.cc | 2 +- src/exec.cc | 2 +- src/explode.cc | 2 +- src/http_build_query.cc | 2 +- src/json_encode.cc | 2 +- src/std.cc | 2 +- 39 files changed, 60 insertions(+), 61 deletions(-) rename include/{ => Telegram}/Audio.h (100%) rename include/{ => Telegram}/Chat.h (100%) rename include/{ => Telegram}/Contact.h (100%) rename include/{ => Telegram}/Document.h (91%) rename include/{ => Telegram}/Location.h (100%) rename include/{ => Telegram}/Message.h (79%) rename include/{ => Telegram}/MessageEntity.h (100%) rename include/{ => Telegram}/PhotoSize.h (100%) rename include/{ => Telegram}/Sticker.h (90%) rename include/{ => Telegram}/TelegramBot.h (97%) rename include/{ => Telegram}/User.h (100%) rename include/{ => Telegram}/Venue.h (89%) rename include/{ => Telegram}/Video.h (91%) rename include/{ => Telegram}/Voice.h (100%) rename include/{ => Telegram}/exec.h (100%) rename include/{ => Telegram}/explode.h (100%) rename include/{ => Telegram}/http_build_query.h (100%) rename include/{ => Telegram}/json_encode.h (100%) rename include/{ => Telegram}/std.h (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5c21954..9378459 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,24 +1,23 @@ set (HEADERS - Audio.h - Document.h - json_encode.h - PhotoSize.h - User.h - Chat.h - exec.h - Location.h - std.h - Venue.h - Contact.h - explode.h - MessageEntity.h - Sticker.h - Video.h - defines.h - http_build_query.h - Message.h - TelegramBot.h - Voice.h + include/Audio.h + include/Document.h + include/json_encode.h + include/PhotoSize.h + include/User.h + include/Chat.h + include/exec.h + include/Location.h + include/std.h + include/Venue.h + include/Contact.h + include/explode.h + include/MessageEntity.h + include/Sticker.h + include/Video.h + include/http_build_query.h + include/Message.h + include/TelegramBot.h + include/Voice.h ) set (SOURCES diff --git a/include/Audio.h b/include/Telegram/Audio.h similarity index 100% rename from include/Audio.h rename to include/Telegram/Audio.h diff --git a/include/Chat.h b/include/Telegram/Chat.h similarity index 100% rename from include/Chat.h rename to include/Telegram/Chat.h diff --git a/include/Contact.h b/include/Telegram/Contact.h similarity index 100% rename from include/Contact.h rename to include/Telegram/Contact.h diff --git a/include/Document.h b/include/Telegram/Document.h similarity index 91% rename from include/Document.h rename to include/Telegram/Document.h index d5a1271..6b64498 100644 --- a/include/Document.h +++ b/include/Telegram/Document.h @@ -4,7 +4,7 @@ #include #include -#include "PhotoSize.h" +#include namespace Telegram { diff --git a/include/Location.h b/include/Telegram/Location.h similarity index 100% rename from include/Location.h rename to include/Telegram/Location.h diff --git a/include/Message.h b/include/Telegram/Message.h similarity index 79% rename from include/Message.h rename to include/Telegram/Message.h index 6d31ef2..86757d8 100644 --- a/include/Message.h +++ b/include/Telegram/Message.h @@ -6,18 +6,18 @@ #include #include -#include "Audio.h" -#include "Chat.h" -#include "Contact.h" -#include "Document.h" -#include "Location.h" -#include "MessageEntity.h" -#include "PhotoSize.h" -#include "Sticker.h" -#include "User.h" -#include "Venue.h" -#include "Video.h" -#include "Voice.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include namespace Telegram { diff --git a/include/MessageEntity.h b/include/Telegram/MessageEntity.h similarity index 100% rename from include/MessageEntity.h rename to include/Telegram/MessageEntity.h diff --git a/include/PhotoSize.h b/include/Telegram/PhotoSize.h similarity index 100% rename from include/PhotoSize.h rename to include/Telegram/PhotoSize.h diff --git a/include/Sticker.h b/include/Telegram/Sticker.h similarity index 90% rename from include/Sticker.h rename to include/Telegram/Sticker.h index da6d17c..9098bde 100644 --- a/include/Sticker.h +++ b/include/Telegram/Sticker.h @@ -4,7 +4,7 @@ #include #include -#include "PhotoSize.h" +#include namespace Telegram { diff --git a/include/TelegramBot.h b/include/Telegram/TelegramBot.h similarity index 97% rename from include/TelegramBot.h rename to include/Telegram/TelegramBot.h index e285943..98f721c 100644 --- a/include/TelegramBot.h +++ b/include/Telegram/TelegramBot.h @@ -7,7 +7,7 @@ #include #include -#include "Message.h" +#include namespace Telegram { diff --git a/include/User.h b/include/Telegram/User.h similarity index 100% rename from include/User.h rename to include/Telegram/User.h diff --git a/include/Venue.h b/include/Telegram/Venue.h similarity index 89% rename from include/Venue.h rename to include/Telegram/Venue.h index c2ef36f..8401bd0 100644 --- a/include/Venue.h +++ b/include/Telegram/Venue.h @@ -3,7 +3,7 @@ #include -#include "Location.h" +#include namespace Telegram { diff --git a/include/Video.h b/include/Telegram/Video.h similarity index 91% rename from include/Video.h rename to include/Telegram/Video.h index 95401a4..c7563ed 100644 --- a/include/Video.h +++ b/include/Telegram/Video.h @@ -4,7 +4,7 @@ #include #include -#include "PhotoSize.h" +#include namespace Telegram { diff --git a/include/Voice.h b/include/Telegram/Voice.h similarity index 100% rename from include/Voice.h rename to include/Telegram/Voice.h diff --git a/include/exec.h b/include/Telegram/exec.h similarity index 100% rename from include/exec.h rename to include/Telegram/exec.h diff --git a/include/explode.h b/include/Telegram/explode.h similarity index 100% rename from include/explode.h rename to include/Telegram/explode.h diff --git a/include/http_build_query.h b/include/Telegram/http_build_query.h similarity index 100% rename from include/http_build_query.h rename to include/Telegram/http_build_query.h diff --git a/include/json_encode.h b/include/Telegram/json_encode.h similarity index 100% rename from include/json_encode.h rename to include/Telegram/json_encode.h diff --git a/include/std.h b/include/Telegram/std.h similarity index 100% rename from include/std.h rename to include/Telegram/std.h diff --git a/src/Audio.cc b/src/Audio.cc index 7cf1013..d599047 100644 --- a/src/Audio.cc +++ b/src/Audio.cc @@ -1,4 +1,4 @@ -#include "Audio.h" +#include "Telegram/Audio.h" Telegram::Audio::Audio(Json::Value json) { diff --git a/src/Chat.cc b/src/Chat.cc index 8541d1e..49edec2 100644 --- a/src/Chat.cc +++ b/src/Chat.cc @@ -1,4 +1,4 @@ -#include "Chat.h" +#include "Telegram/Chat.h" Telegram::Chat::Chat(Json::Value json) { diff --git a/src/Contact.cc b/src/Contact.cc index 86cd5dd..b864897 100644 --- a/src/Contact.cc +++ b/src/Contact.cc @@ -1,4 +1,4 @@ -#include "Contact.h" +#include "Telegram/Contact.h" Telegram::Contact::Contact(Json::Value json) { diff --git a/src/Document.cc b/src/Document.cc index f55823b..f3730cd 100644 --- a/src/Document.cc +++ b/src/Document.cc @@ -1,4 +1,4 @@ -#include "Document.h" +#include "Telegram/Document.h" Telegram::Document::Document(Json::Value json) { diff --git a/src/Location.cc b/src/Location.cc index 5db5f5e..839eabb 100644 --- a/src/Location.cc +++ b/src/Location.cc @@ -1,4 +1,4 @@ -#include "Location.h" +#include "Telegram/Location.h" Telegram::Location::Location(Json::Value json) { diff --git a/src/Message.cc b/src/Message.cc index e565a00..cc0c51b 100644 --- a/src/Message.cc +++ b/src/Message.cc @@ -1,4 +1,4 @@ -#include "Message.h" +#include "Telegram/Message.h" // Generic constructor // @TODO: Make this an "init"-Method and call it from the constructor diff --git a/src/MessageEntity.cc b/src/MessageEntity.cc index d903a5b..4da3263 100644 --- a/src/MessageEntity.cc +++ b/src/MessageEntity.cc @@ -1,4 +1,4 @@ -#include "MessageEntity.h" +#include "Telegram/MessageEntity.h" Telegram::MessageEntity::MessageEntity(Json::Value json) { diff --git a/src/PhotoSize.cc b/src/PhotoSize.cc index a110d1a..09f5b89 100644 --- a/src/PhotoSize.cc +++ b/src/PhotoSize.cc @@ -1,4 +1,4 @@ -#include "PhotoSize.h" +#include "Telegram/PhotoSize.h" Telegram::PhotoSize::PhotoSize(Json::Value json) { diff --git a/src/Sticker.cc b/src/Sticker.cc index b78aab2..5bb08f5 100644 --- a/src/Sticker.cc +++ b/src/Sticker.cc @@ -1,4 +1,4 @@ -#include "Sticker.h" +#include "Telegram/Sticker.h" Telegram::Sticker::Sticker(Json::Value json) { diff --git a/src/TelegramBot.cc b/src/TelegramBot.cc index ec19a3a..e919c19 100644 --- a/src/TelegramBot.cc +++ b/src/TelegramBot.cc @@ -1,4 +1,4 @@ -#include "TelegramBot.h" +#include "Telegram/TelegramBot.h" #include @@ -7,12 +7,12 @@ #include #include -#include "http_build_query.h" -#include "json_encode.h" -#include "std.h" +#include "Telegram/http_build_query.h" +#include "Telegram/json_encode.h" +#include "Telegram/std.h" -#include "Message.h" -#include "MessageEntity.h" +#include "Telegram/Message.h" +#include "Telegram/MessageEntity.h" #define API_URL "https://api.telegram.org/bot" diff --git a/src/User.cc b/src/User.cc index 3511782..e1ede50 100644 --- a/src/User.cc +++ b/src/User.cc @@ -1,4 +1,4 @@ -#include "User.h" +#include "Telegram/User.h" Telegram::User::User(Json::Value json) { diff --git a/src/Venue.cc b/src/Venue.cc index 6517e8a..a6d0ec6 100644 --- a/src/Venue.cc +++ b/src/Venue.cc @@ -1,4 +1,4 @@ -#include "Venue.h" +#include "Telegram/Venue.h" Telegram::Venue::Venue(Json::Value json) { diff --git a/src/Video.cc b/src/Video.cc index cd3fcfa..50b9655 100644 --- a/src/Video.cc +++ b/src/Video.cc @@ -1,4 +1,4 @@ -#include "Video.h" +#include "Telegram/Video.h" Telegram::Video::Video(Json::Value json) { diff --git a/src/Voice.cc b/src/Voice.cc index 0560b81..3db8670 100644 --- a/src/Voice.cc +++ b/src/Voice.cc @@ -1,4 +1,4 @@ -#include "Voice.h" +#include "Telegram/Voice.h" Telegram::Voice::Voice(Json::Value json) { diff --git a/src/exec.cc b/src/exec.cc index 4faad42..3b94c47 100644 --- a/src/exec.cc +++ b/src/exec.cc @@ -1,4 +1,4 @@ -#include "exec.h" +#include "Telegram/exec.h" #include #include diff --git a/src/explode.cc b/src/explode.cc index 009b5ec..7477e5d 100644 --- a/src/explode.cc +++ b/src/explode.cc @@ -1,4 +1,4 @@ -#include "explode.h" +#include "Telegram/explode.h" std::vector explode( const std::string &delimiter, const std::string &str) { diff --git a/src/http_build_query.cc b/src/http_build_query.cc index 51ed26b..31ce252 100644 --- a/src/http_build_query.cc +++ b/src/http_build_query.cc @@ -1,4 +1,4 @@ -#include "http_build_query.h" +#include "Telegram/http_build_query.h" std::string http_build_query(std::map data) { diff --git a/src/json_encode.cc b/src/json_encode.cc index 2b12a9f..c89d0ed 100644 --- a/src/json_encode.cc +++ b/src/json_encode.cc @@ -1,4 +1,4 @@ -#include "json_encode.h" +#include "Telegram/json_encode.h" std::string json_encode(std::map parameters) { diff --git a/src/std.cc b/src/std.cc index 7a94401..22aaba7 100644 --- a/src/std.cc +++ b/src/std.cc @@ -1,4 +1,4 @@ -#include "std.h" +#include "Telegram/std.h" #include #include From cb9e5561aa6117afcf7711643894baf39b7ad15d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hauke=20Z=C3=BChl?= Date: Sat, 30 Apr 2016 08:12:06 +0200 Subject: [PATCH 04/15] More to README --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index 9332261..9c9f45c 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,10 @@ # LibTgBotPP A simple Telegram Bot C++ library + +# Requirements + +To compile, you just need a C++-Compiler and CMake. + +To use the library, you need: +* libcurlpp +* libjsoncpp From b161d1cc56e5d247e427a9f4c3f85ed86ab2d9ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hauke=20Z=C3=BChl?= Date: Sat, 30 Apr 2016 08:30:21 +0200 Subject: [PATCH 05/15] Fixed typos, added pkgconfig file --- CMakeLists.txt | 49 +++++++++++++++++++++++++------------------------ tgbotpp.pc | 14 ++++++++++++++ 2 files changed, 39 insertions(+), 24 deletions(-) create mode 100644 tgbotpp.pc diff --git a/CMakeLists.txt b/CMakeLists.txt index 9378459..bb43ba6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,23 +1,23 @@ set (HEADERS - include/Audio.h - include/Document.h - include/json_encode.h - include/PhotoSize.h - include/User.h - include/Chat.h - include/exec.h - include/Location.h - include/std.h - include/Venue.h - include/Contact.h - include/explode.h - include/MessageEntity.h - include/Sticker.h - include/Video.h - include/http_build_query.h - include/Message.h - include/TelegramBot.h - include/Voice.h + include/Telegram/Audio.h + include/Telegram/Document.h + include/Telegram/json_encode.h + include/Telegram/PhotoSize.h + include/Telegram/User.h + include/Telegram/Chat.h + include/Telegram/exec.h + include/Telegram/Location.h + include/Telegram/std.h + include/Telegram/Venue.h + include/Telegram/Contact.h + include/Telegram/explode.h + include/Telegram/MessageEntity.h + include/Telegram/Sticker.h + include/Telegram/Video.h + include/Telegram/http_build_query.h + include/Telegram/Message.h + include/Telegram/TelegramBot.h + include/Telegram/Voice.h ) set (SOURCES @@ -44,7 +44,7 @@ set (SOURCES cmake_minimum_required(VERSION 2.8) -project(libtg) +project(libtgbotpp) find_package(PkgConfig) @@ -56,10 +56,11 @@ include_directories(${CURL_INCLUDE_DIRS}) set(LIBS ${LIBS} ${JSONCPP_LIBRARIES}) set(LIBS ${LIBS} ${CURL_LIBRARIES}) +set(INSTALL_PKGCONFIG_DIR "${CMAKE_INSTALL_PREFIX}/pkgconfig") include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) -add_library(tg SHARED ${SOURCES}) - -install(TARGETS tg DESTINATION lib) -install(FILES ${HEADERS} DESTINATION include) +add_library(tgbotpp SHARED ${SOURCES}) +install(TARGETS tgbotpp DESTINATION lib) +install(FILES ${HEADERS} DESTINATION include/Telegram) +install(FILES tgbotpp.pc DESTINATION "${INSTALL_PKGCONFIG_DIR}") diff --git a/tgbotpp.pc b/tgbotpp.pc new file mode 100644 index 0000000..3a580bf --- /dev/null +++ b/tgbotpp.pc @@ -0,0 +1,14 @@ +prefix=/usr +libdir=${prefix}/lib +includedir=${prefix}/include/Telegram + +version = 0.0.1 + +name = tgbotpp +pkgname = libtgbotpp + +Name: ${name} +Version: ${version} +Description: C++ library for Telegram bots +Cflags: -I${includedir} +Libs: -L${libdir} -ltgbotpp \ No newline at end of file From 48fe044c18f4521ddcb88807ed4aa35ca2a92f77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hauke=20Z=C3=BChl?= Date: Sat, 30 Apr 2016 08:57:35 +0200 Subject: [PATCH 06/15] Fixed path in CMakeLists.txt --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bb43ba6..aa04452 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -56,7 +56,7 @@ include_directories(${CURL_INCLUDE_DIRS}) set(LIBS ${LIBS} ${JSONCPP_LIBRARIES}) set(LIBS ${LIBS} ${CURL_LIBRARIES}) -set(INSTALL_PKGCONFIG_DIR "${CMAKE_INSTALL_PREFIX}/pkgconfig") +set(INSTALL_PKGCONFIG_DIR "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig") include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) add_library(tgbotpp SHARED ${SOURCES}) From 3e003fd1a3753e414bcc9eafc0bbc89466573bf4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hauke=20Z=C3=BChl?= Date: Sat, 30 Apr 2016 09:43:13 +0200 Subject: [PATCH 07/15] Added needed libs --- CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index aa04452..d27ad5b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -59,8 +59,11 @@ set(LIBS ${LIBS} ${CURL_LIBRARIES}) set(INSTALL_PKGCONFIG_DIR "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig") include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) + add_library(tgbotpp SHARED ${SOURCES}) +target_link_libraries(tgbotpp ${LIBS}) install(TARGETS tgbotpp DESTINATION lib) install(FILES ${HEADERS} DESTINATION include/Telegram) install(FILES tgbotpp.pc DESTINATION "${INSTALL_PKGCONFIG_DIR}") + From e39af3fc8ba068758f1b72f6566c26120bffefa4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hauke=20Z=C3=BChl?= Date: Mon, 2 May 2016 10:17:19 +0200 Subject: [PATCH 08/15] Added doxygen doc --- Doxyfile | 2303 +++++++++++++++++ doc/html/Audio_8cc.html | 121 + doc/html/Audio_8h.html | 138 + doc/html/Audio_8h_source.html | 151 ++ doc/html/Chat_8cc.html | 121 + doc/html/Chat_8h.html | 138 + doc/html/Chat_8h_source.html | 156 ++ doc/html/Contact_8cc.html | 121 + doc/html/Contact_8h.html | 138 + doc/html/Contact_8h_source.html | 147 ++ doc/html/Document_8cc.html | 121 + doc/html/Document_8h.html | 139 + doc/html/Document_8h_source.html | 153 ++ doc/html/Location_8cc.html | 121 + doc/html/Location_8h.html | 137 + doc/html/Location_8h_source.html | 142 + doc/html/MessageEntity_8cc.html | 121 + doc/html/MessageEntity_8h.html | 146 ++ doc/html/MessageEntity_8h.js | 5 + doc/html/MessageEntity_8h_source.html | 155 ++ doc/html/Message_8cc.html | 121 + doc/html/Message_8h.html | 151 ++ doc/html/Message_8h_source.html | 255 ++ doc/html/PhotoSize_8cc.html | 121 + doc/html/PhotoSize_8h.html | 138 + doc/html/PhotoSize_8h_source.html | 147 ++ doc/html/README_8md.html | 120 + doc/html/Sticker_8cc.html | 121 + doc/html/Sticker_8h.html | 139 + doc/html/Sticker_8h_source.html | 153 ++ doc/html/TelegramBot_8cc.html | 152 ++ doc/html/TelegramBot_8cc.js | 4 + doc/html/TelegramBot_8h.html | 154 ++ doc/html/TelegramBot_8h.js | 8 + doc/html/TelegramBot_8h_source.html | 208 ++ doc/html/User_8cc.html | 121 + doc/html/User_8h.html | 138 + doc/html/User_8h_source.html | 147 ++ doc/html/Venue_8cc.html | 121 + doc/html/Venue_8h.html | 138 + doc/html/Venue_8h_source.html | 150 ++ doc/html/Video_8cc.html | 121 + doc/html/Video_8h.html | 139 + doc/html/Video_8h_source.html | 157 ++ doc/html/Voice_8cc.html | 121 + doc/html/Voice_8h.html | 138 + doc/html/Voice_8h_source.html | 147 ++ doc/html/annotated.html | 140 + doc/html/annotated.js | 4 + doc/html/bc_s.png | Bin 0 -> 676 bytes doc/html/bdwn.png | Bin 0 -> 147 bytes doc/html/classTelegram_1_1Audio-members.html | 130 + doc/html/classTelegram_1_1Audio.html | 290 +++ doc/html/classTelegram_1_1Audio.js | 10 + doc/html/classTelegram_1_1Chat-members.html | 132 + doc/html/classTelegram_1_1Chat.html | 325 +++ doc/html/classTelegram_1_1Chat.js | 12 + .../classTelegram_1_1Contact-members.html | 128 + doc/html/classTelegram_1_1Contact.html | 246 ++ doc/html/classTelegram_1_1Contact.js | 8 + .../classTelegram_1_1Document-members.html | 129 + doc/html/classTelegram_1_1Document.html | 268 ++ doc/html/classTelegram_1_1Document.js | 9 + .../classTelegram_1_1Location-members.html | 126 + doc/html/classTelegram_1_1Location.html | 202 ++ doc/html/classTelegram_1_1Location.js | 6 + .../classTelegram_1_1Message-members.html | 162 ++ doc/html/classTelegram_1_1Message.html | 978 +++++++ doc/html/classTelegram_1_1Message.js | 42 + ...lassTelegram_1_1MessageEntity-members.html | 129 + doc/html/classTelegram_1_1MessageEntity.html | 264 ++ doc/html/classTelegram_1_1MessageEntity.js | 9 + .../classTelegram_1_1PhotoSize-members.html | 128 + doc/html/classTelegram_1_1PhotoSize.html | 246 ++ doc/html/classTelegram_1_1PhotoSize.js | 8 + .../classTelegram_1_1Sticker-members.html | 129 + doc/html/classTelegram_1_1Sticker.html | 268 ++ doc/html/classTelegram_1_1Sticker.js | 9 + .../classTelegram_1_1TelegramBot-members.html | 140 + doc/html/classTelegram_1_1TelegramBot.html | 537 ++++ doc/html/classTelegram_1_1TelegramBot.js | 20 + doc/html/classTelegram_1_1User-members.html | 128 + doc/html/classTelegram_1_1User.html | 246 ++ doc/html/classTelegram_1_1User.js | 8 + doc/html/classTelegram_1_1Venue-members.html | 128 + doc/html/classTelegram_1_1Venue.html | 246 ++ doc/html/classTelegram_1_1Venue.js | 8 + doc/html/classTelegram_1_1Video-members.html | 131 + doc/html/classTelegram_1_1Video.html | 312 +++ doc/html/classTelegram_1_1Video.js | 11 + doc/html/classTelegram_1_1Voice-members.html | 128 + doc/html/classTelegram_1_1Voice.html | 246 ++ doc/html/classTelegram_1_1Voice.js | 8 + doc/html/classes.html | 144 ++ doc/html/closed.png | Bin 0 -> 132 bytes .../dir_039e4b39e16cfa52f3a26599d20c8f92.html | 156 ++ .../dir_039e4b39e16cfa52f3a26599d20c8f92.js | 46 + .../dir_68267d1309a1af8e8297ef4c3efbcdba.html | 156 ++ .../dir_68267d1309a1af8e8297ef4c3efbcdba.js | 22 + .../dir_d44c64559bbebec7f509842c48db8b23.html | 120 + .../dir_d44c64559bbebec7f509842c48db8b23.js | 4 + doc/html/doxygen.css | 1366 ++++++++++ doc/html/doxygen.png | Bin 0 -> 3779 bytes doc/html/dynsections.js | 97 + doc/html/exec_8cc.html | 148 ++ doc/html/exec_8cc.js | 4 + doc/html/exec_8h.html | 148 ++ doc/html/exec_8h.js | 4 + doc/html/exec_8h_source.html | 129 + doc/html/explode_8cc.html | 156 ++ doc/html/explode_8cc.js | 4 + doc/html/explode_8h.html | 159 ++ doc/html/explode_8h.js | 4 + doc/html/explode_8h_source.html | 130 + doc/html/files.html | 164 ++ doc/html/files.js | 5 + doc/html/ftv2blank.png | Bin 0 -> 86 bytes doc/html/ftv2cl.png | Bin 0 -> 453 bytes doc/html/ftv2doc.png | Bin 0 -> 746 bytes doc/html/ftv2folderclosed.png | Bin 0 -> 616 bytes doc/html/ftv2folderopen.png | Bin 0 -> 597 bytes doc/html/ftv2lastnode.png | Bin 0 -> 86 bytes doc/html/ftv2link.png | Bin 0 -> 746 bytes doc/html/ftv2mlastnode.png | Bin 0 -> 246 bytes doc/html/ftv2mnode.png | Bin 0 -> 246 bytes doc/html/ftv2mo.png | Bin 0 -> 403 bytes doc/html/ftv2node.png | Bin 0 -> 86 bytes doc/html/ftv2ns.png | Bin 0 -> 388 bytes doc/html/ftv2plastnode.png | Bin 0 -> 229 bytes doc/html/ftv2pnode.png | Bin 0 -> 229 bytes doc/html/ftv2splitbar.png | Bin 0 -> 314 bytes doc/html/ftv2vertline.png | Bin 0 -> 86 bytes doc/html/functions.html | 530 ++++ doc/html/functions_func.html | 284 ++ doc/html/functions_vars.html | 433 ++++ doc/html/globals.html | 182 ++ doc/html/globals_defs.html | 131 + doc/html/globals_func.html | 173 ++ doc/html/globals_type.html | 128 + doc/html/http__build__query_8cc.html | 146 ++ doc/html/http__build__query_8cc.js | 4 + doc/html/http__build__query_8h.html | 149 ++ doc/html/http__build__query_8h.js | 4 + doc/html/http__build__query_8h_source.html | 130 + doc/html/index.html | 121 + doc/html/jquery.js | 72 + doc/html/json__encode_8cc.html | 146 ++ doc/html/json__encode_8cc.js | 4 + doc/html/json__encode_8h.html | 150 ++ doc/html/json__encode_8h.js | 4 + doc/html/json__encode_8h_source.html | 131 + doc/html/md_README.html | 98 + doc/html/namespaceTelegram.html | 219 ++ doc/html/namespaceTelegram.js | 18 + doc/html/namespacemembers.html | 135 + doc/html/namespacemembers_type.html | 135 + doc/html/namespaces.html | 124 + doc/html/namespaces.js | 4 + doc/html/nav_f.png | Bin 0 -> 153 bytes doc/html/nav_g.png | Bin 0 -> 95 bytes doc/html/nav_h.png | Bin 0 -> 98 bytes doc/html/navtree.css | 143 + doc/html/navtree.js | 554 ++++ doc/html/navtreeindex0.js | 253 ++ doc/html/navtreeindex1.js | 5 + doc/html/open.png | Bin 0 -> 123 bytes doc/html/pages.html | 95 + doc/html/resize.js | 97 + doc/html/search/all_0.html | 26 + doc/html/search/all_0.js | 12 + doc/html/search/all_1.html | 26 + doc/html/search/all_1.js | 18 + doc/html/search/all_10.html | 26 + doc/html/search/all_10.js | 17 + doc/html/search/all_11.html | 26 + doc/html/search/all_11.js | 11 + doc/html/search/all_12.html | 26 + doc/html/search/all_12.js | 15 + doc/html/search/all_13.html | 26 + doc/html/search/all_13.js | 4 + doc/html/search/all_2.html | 26 + doc/html/search/all_2.js | 10 + doc/html/search/all_3.html | 26 + doc/html/search/all_3.js | 10 + doc/html/search/all_4.html | 26 + doc/html/search/all_4.js | 11 + doc/html/search/all_5.html | 26 + doc/html/search/all_5.js | 13 + doc/html/search/all_6.html | 26 + doc/html/search/all_6.js | 8 + doc/html/search/all_7.html | 26 + doc/html/search/all_7.js | 6 + doc/html/search/all_8.html | 26 + doc/html/search/all_8.js | 6 + doc/html/search/all_9.html | 26 + doc/html/search/all_9.js | 13 + doc/html/search/all_a.html | 26 + doc/html/search/all_a.js | 16 + doc/html/search/all_b.html | 26 + doc/html/search/all_b.js | 6 + doc/html/search/all_c.html | 26 + doc/html/search/all_c.js | 4 + doc/html/search/all_d.html | 26 + doc/html/search/all_d.js | 13 + doc/html/search/all_e.html | 26 + doc/html/search/all_e.js | 5 + doc/html/search/all_f.html | 26 + doc/html/search/all_f.js | 18 + doc/html/search/classes_0.html | 26 + doc/html/search/classes_0.js | 4 + doc/html/search/classes_1.html | 26 + doc/html/search/classes_1.js | 5 + doc/html/search/classes_2.html | 26 + doc/html/search/classes_2.js | 4 + doc/html/search/classes_3.html | 26 + doc/html/search/classes_3.js | 4 + doc/html/search/classes_4.html | 26 + doc/html/search/classes_4.js | 5 + doc/html/search/classes_5.html | 26 + doc/html/search/classes_5.js | 4 + doc/html/search/classes_6.html | 26 + doc/html/search/classes_6.js | 4 + doc/html/search/classes_7.html | 26 + doc/html/search/classes_7.js | 5 + doc/html/search/classes_8.html | 26 + doc/html/search/classes_8.js | 4 + doc/html/search/classes_9.html | 26 + doc/html/search/classes_9.js | 6 + doc/html/search/close.png | Bin 0 -> 273 bytes doc/html/search/defines_0.html | 26 + doc/html/search/defines_0.js | 4 + doc/html/search/defines_1.html | 26 + doc/html/search/defines_1.js | 4 + doc/html/search/files_0.html | 26 + doc/html/search/files_0.js | 5 + doc/html/search/files_1.html | 26 + doc/html/search/files_1.js | 7 + doc/html/search/files_2.html | 26 + doc/html/search/files_2.js | 5 + doc/html/search/files_3.html | 26 + doc/html/search/files_3.js | 7 + doc/html/search/files_4.html | 26 + doc/html/search/files_4.js | 5 + doc/html/search/files_5.html | 26 + doc/html/search/files_5.js | 5 + doc/html/search/files_6.html | 26 + doc/html/search/files_6.js | 5 + doc/html/search/files_7.html | 26 + doc/html/search/files_7.js | 7 + doc/html/search/files_8.html | 26 + doc/html/search/files_8.js | 5 + doc/html/search/files_9.html | 26 + doc/html/search/files_9.js | 4 + doc/html/search/files_a.html | 26 + doc/html/search/files_a.js | 7 + doc/html/search/files_b.html | 26 + doc/html/search/files_b.js | 5 + doc/html/search/files_c.html | 26 + doc/html/search/files_c.js | 5 + doc/html/search/files_d.html | 26 + doc/html/search/files_d.js | 9 + doc/html/search/functions_0.html | 26 + doc/html/search/functions_0.js | 7 + doc/html/search/functions_1.html | 26 + doc/html/search/functions_1.js | 6 + doc/html/search/functions_2.html | 26 + doc/html/search/functions_2.js | 4 + doc/html/search/functions_3.html | 26 + doc/html/search/functions_3.js | 5 + doc/html/search/functions_4.html | 26 + doc/html/search/functions_4.js | 12 + doc/html/search/functions_5.html | 26 + doc/html/search/functions_5.js | 4 + doc/html/search/functions_6.html | 26 + doc/html/search/functions_6.js | 5 + doc/html/search/functions_7.html | 26 + doc/html/search/functions_7.js | 4 + doc/html/search/functions_8.html | 26 + doc/html/search/functions_8.js | 5 + doc/html/search/functions_9.html | 26 + doc/html/search/functions_9.js | 5 + doc/html/search/functions_a.html | 26 + doc/html/search/functions_a.js | 6 + doc/html/search/functions_b.html | 26 + doc/html/search/functions_b.js | 11 + doc/html/search/functions_c.html | 26 + doc/html/search/functions_c.js | 5 + doc/html/search/functions_d.html | 26 + doc/html/search/functions_d.js | 4 + doc/html/search/functions_e.html | 26 + doc/html/search/functions_e.js | 6 + doc/html/search/mag_sel.png | Bin 0 -> 563 bytes doc/html/search/namespaces_0.html | 26 + doc/html/search/namespaces_0.js | 4 + doc/html/search/nomatches.html | 12 + doc/html/search/pages_0.html | 26 + doc/html/search/pages_0.js | 4 + doc/html/search/search.css | 271 ++ doc/html/search/search.js | 807 ++++++ doc/html/search/search_l.png | Bin 0 -> 604 bytes doc/html/search/search_m.png | Bin 0 -> 158 bytes doc/html/search/search_r.png | Bin 0 -> 612 bytes doc/html/search/typedefs_0.html | 26 + doc/html/search/typedefs_0.js | 4 + doc/html/search/typedefs_1.html | 26 + doc/html/search/typedefs_1.js | 6 + doc/html/search/typedefs_2.html | 26 + doc/html/search/typedefs_2.js | 4 + doc/html/search/variables_0.html | 26 + doc/html/search/variables_0.js | 6 + doc/html/search/variables_1.html | 26 + doc/html/search/variables_1.js | 10 + doc/html/search/variables_10.html | 26 + doc/html/search/variables_10.js | 6 + doc/html/search/variables_11.html | 26 + doc/html/search/variables_11.js | 6 + doc/html/search/variables_12.html | 26 + doc/html/search/variables_12.js | 4 + doc/html/search/variables_2.html | 26 + doc/html/search/variables_2.js | 7 + doc/html/search/variables_3.html | 26 + doc/html/search/variables_3.js | 4 + doc/html/search/variables_4.html | 26 + doc/html/search/variables_4.js | 11 + doc/html/search/variables_5.html | 26 + doc/html/search/variables_5.js | 4 + doc/html/search/variables_6.html | 26 + doc/html/search/variables_6.js | 5 + doc/html/search/variables_7.html | 26 + doc/html/search/variables_7.js | 4 + doc/html/search/variables_8.html | 26 + doc/html/search/variables_8.js | 9 + doc/html/search/variables_9.html | 26 + doc/html/search/variables_9.js | 8 + doc/html/search/variables_a.html | 26 + doc/html/search/variables_a.js | 6 + doc/html/search/variables_b.html | 26 + doc/html/search/variables_b.js | 4 + doc/html/search/variables_c.html | 26 + doc/html/search/variables_c.js | 7 + doc/html/search/variables_d.html | 26 + doc/html/search/variables_d.js | 4 + doc/html/search/variables_e.html | 26 + doc/html/search/variables_e.js | 5 + doc/html/search/variables_f.html | 26 + doc/html/search/variables_f.js | 7 + doc/html/std_8cc.html | 286 ++ doc/html/std_8cc.js | 11 + doc/html/std_8h.html | 327 +++ doc/html/std_8h.js | 13 + doc/html/std_8h_source.html | 152 ++ .../structTelegram_1_1TCommand-members.html | 126 + doc/html/structTelegram_1_1TCommand.html | 176 ++ doc/html/structTelegram_1_1TCommand.js | 6 + doc/html/sync_off.png | Bin 0 -> 853 bytes doc/html/sync_on.png | Bin 0 -> 845 bytes doc/html/tab_a.png | Bin 0 -> 142 bytes doc/html/tab_b.png | Bin 0 -> 169 bytes doc/html/tab_h.png | Bin 0 -> 177 bytes doc/html/tab_s.png | Bin 0 -> 184 bytes doc/html/tabs.css | 60 + 361 files changed, 28241 insertions(+) create mode 100644 Doxyfile create mode 100644 doc/html/Audio_8cc.html create mode 100644 doc/html/Audio_8h.html create mode 100644 doc/html/Audio_8h_source.html create mode 100644 doc/html/Chat_8cc.html create mode 100644 doc/html/Chat_8h.html create mode 100644 doc/html/Chat_8h_source.html create mode 100644 doc/html/Contact_8cc.html create mode 100644 doc/html/Contact_8h.html create mode 100644 doc/html/Contact_8h_source.html create mode 100644 doc/html/Document_8cc.html create mode 100644 doc/html/Document_8h.html create mode 100644 doc/html/Document_8h_source.html create mode 100644 doc/html/Location_8cc.html create mode 100644 doc/html/Location_8h.html create mode 100644 doc/html/Location_8h_source.html create mode 100644 doc/html/MessageEntity_8cc.html create mode 100644 doc/html/MessageEntity_8h.html create mode 100644 doc/html/MessageEntity_8h.js create mode 100644 doc/html/MessageEntity_8h_source.html create mode 100644 doc/html/Message_8cc.html create mode 100644 doc/html/Message_8h.html create mode 100644 doc/html/Message_8h_source.html create mode 100644 doc/html/PhotoSize_8cc.html create mode 100644 doc/html/PhotoSize_8h.html create mode 100644 doc/html/PhotoSize_8h_source.html create mode 100644 doc/html/README_8md.html create mode 100644 doc/html/Sticker_8cc.html create mode 100644 doc/html/Sticker_8h.html create mode 100644 doc/html/Sticker_8h_source.html create mode 100644 doc/html/TelegramBot_8cc.html create mode 100644 doc/html/TelegramBot_8cc.js create mode 100644 doc/html/TelegramBot_8h.html create mode 100644 doc/html/TelegramBot_8h.js create mode 100644 doc/html/TelegramBot_8h_source.html create mode 100644 doc/html/User_8cc.html create mode 100644 doc/html/User_8h.html create mode 100644 doc/html/User_8h_source.html create mode 100644 doc/html/Venue_8cc.html create mode 100644 doc/html/Venue_8h.html create mode 100644 doc/html/Venue_8h_source.html create mode 100644 doc/html/Video_8cc.html create mode 100644 doc/html/Video_8h.html create mode 100644 doc/html/Video_8h_source.html create mode 100644 doc/html/Voice_8cc.html create mode 100644 doc/html/Voice_8h.html create mode 100644 doc/html/Voice_8h_source.html create mode 100644 doc/html/annotated.html create mode 100644 doc/html/annotated.js create mode 100644 doc/html/bc_s.png create mode 100644 doc/html/bdwn.png create mode 100644 doc/html/classTelegram_1_1Audio-members.html create mode 100644 doc/html/classTelegram_1_1Audio.html create mode 100644 doc/html/classTelegram_1_1Audio.js create mode 100644 doc/html/classTelegram_1_1Chat-members.html create mode 100644 doc/html/classTelegram_1_1Chat.html create mode 100644 doc/html/classTelegram_1_1Chat.js create mode 100644 doc/html/classTelegram_1_1Contact-members.html create mode 100644 doc/html/classTelegram_1_1Contact.html create mode 100644 doc/html/classTelegram_1_1Contact.js create mode 100644 doc/html/classTelegram_1_1Document-members.html create mode 100644 doc/html/classTelegram_1_1Document.html create mode 100644 doc/html/classTelegram_1_1Document.js create mode 100644 doc/html/classTelegram_1_1Location-members.html create mode 100644 doc/html/classTelegram_1_1Location.html create mode 100644 doc/html/classTelegram_1_1Location.js create mode 100644 doc/html/classTelegram_1_1Message-members.html create mode 100644 doc/html/classTelegram_1_1Message.html create mode 100644 doc/html/classTelegram_1_1Message.js create mode 100644 doc/html/classTelegram_1_1MessageEntity-members.html create mode 100644 doc/html/classTelegram_1_1MessageEntity.html create mode 100644 doc/html/classTelegram_1_1MessageEntity.js create mode 100644 doc/html/classTelegram_1_1PhotoSize-members.html create mode 100644 doc/html/classTelegram_1_1PhotoSize.html create mode 100644 doc/html/classTelegram_1_1PhotoSize.js create mode 100644 doc/html/classTelegram_1_1Sticker-members.html create mode 100644 doc/html/classTelegram_1_1Sticker.html create mode 100644 doc/html/classTelegram_1_1Sticker.js create mode 100644 doc/html/classTelegram_1_1TelegramBot-members.html create mode 100644 doc/html/classTelegram_1_1TelegramBot.html create mode 100644 doc/html/classTelegram_1_1TelegramBot.js create mode 100644 doc/html/classTelegram_1_1User-members.html create mode 100644 doc/html/classTelegram_1_1User.html create mode 100644 doc/html/classTelegram_1_1User.js create mode 100644 doc/html/classTelegram_1_1Venue-members.html create mode 100644 doc/html/classTelegram_1_1Venue.html create mode 100644 doc/html/classTelegram_1_1Venue.js create mode 100644 doc/html/classTelegram_1_1Video-members.html create mode 100644 doc/html/classTelegram_1_1Video.html create mode 100644 doc/html/classTelegram_1_1Video.js create mode 100644 doc/html/classTelegram_1_1Voice-members.html create mode 100644 doc/html/classTelegram_1_1Voice.html create mode 100644 doc/html/classTelegram_1_1Voice.js create mode 100644 doc/html/classes.html create mode 100644 doc/html/closed.png create mode 100644 doc/html/dir_039e4b39e16cfa52f3a26599d20c8f92.html create mode 100644 doc/html/dir_039e4b39e16cfa52f3a26599d20c8f92.js create mode 100644 doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html create mode 100644 doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.js create mode 100644 doc/html/dir_d44c64559bbebec7f509842c48db8b23.html create mode 100644 doc/html/dir_d44c64559bbebec7f509842c48db8b23.js create mode 100644 doc/html/doxygen.css create mode 100644 doc/html/doxygen.png create mode 100644 doc/html/dynsections.js create mode 100644 doc/html/exec_8cc.html create mode 100644 doc/html/exec_8cc.js create mode 100644 doc/html/exec_8h.html create mode 100644 doc/html/exec_8h.js create mode 100644 doc/html/exec_8h_source.html create mode 100644 doc/html/explode_8cc.html create mode 100644 doc/html/explode_8cc.js create mode 100644 doc/html/explode_8h.html create mode 100644 doc/html/explode_8h.js create mode 100644 doc/html/explode_8h_source.html create mode 100644 doc/html/files.html create mode 100644 doc/html/files.js create mode 100644 doc/html/ftv2blank.png create mode 100644 doc/html/ftv2cl.png create mode 100644 doc/html/ftv2doc.png create mode 100644 doc/html/ftv2folderclosed.png create mode 100644 doc/html/ftv2folderopen.png create mode 100644 doc/html/ftv2lastnode.png create mode 100644 doc/html/ftv2link.png create mode 100644 doc/html/ftv2mlastnode.png create mode 100644 doc/html/ftv2mnode.png create mode 100644 doc/html/ftv2mo.png create mode 100644 doc/html/ftv2node.png create mode 100644 doc/html/ftv2ns.png create mode 100644 doc/html/ftv2plastnode.png create mode 100644 doc/html/ftv2pnode.png create mode 100644 doc/html/ftv2splitbar.png create mode 100644 doc/html/ftv2vertline.png create mode 100644 doc/html/functions.html create mode 100644 doc/html/functions_func.html create mode 100644 doc/html/functions_vars.html create mode 100644 doc/html/globals.html create mode 100644 doc/html/globals_defs.html create mode 100644 doc/html/globals_func.html create mode 100644 doc/html/globals_type.html create mode 100644 doc/html/http__build__query_8cc.html create mode 100644 doc/html/http__build__query_8cc.js create mode 100644 doc/html/http__build__query_8h.html create mode 100644 doc/html/http__build__query_8h.js create mode 100644 doc/html/http__build__query_8h_source.html create mode 100644 doc/html/index.html create mode 100644 doc/html/jquery.js create mode 100644 doc/html/json__encode_8cc.html create mode 100644 doc/html/json__encode_8cc.js create mode 100644 doc/html/json__encode_8h.html create mode 100644 doc/html/json__encode_8h.js create mode 100644 doc/html/json__encode_8h_source.html create mode 100644 doc/html/md_README.html create mode 100644 doc/html/namespaceTelegram.html create mode 100644 doc/html/namespaceTelegram.js create mode 100644 doc/html/namespacemembers.html create mode 100644 doc/html/namespacemembers_type.html create mode 100644 doc/html/namespaces.html create mode 100644 doc/html/namespaces.js create mode 100644 doc/html/nav_f.png create mode 100644 doc/html/nav_g.png create mode 100644 doc/html/nav_h.png create mode 100644 doc/html/navtree.css create mode 100644 doc/html/navtree.js create mode 100644 doc/html/navtreeindex0.js create mode 100644 doc/html/navtreeindex1.js create mode 100644 doc/html/open.png create mode 100644 doc/html/pages.html create mode 100644 doc/html/resize.js create mode 100644 doc/html/search/all_0.html create mode 100644 doc/html/search/all_0.js create mode 100644 doc/html/search/all_1.html create mode 100644 doc/html/search/all_1.js create mode 100644 doc/html/search/all_10.html create mode 100644 doc/html/search/all_10.js create mode 100644 doc/html/search/all_11.html create mode 100644 doc/html/search/all_11.js create mode 100644 doc/html/search/all_12.html create mode 100644 doc/html/search/all_12.js create mode 100644 doc/html/search/all_13.html create mode 100644 doc/html/search/all_13.js create mode 100644 doc/html/search/all_2.html create mode 100644 doc/html/search/all_2.js create mode 100644 doc/html/search/all_3.html create mode 100644 doc/html/search/all_3.js create mode 100644 doc/html/search/all_4.html create mode 100644 doc/html/search/all_4.js create mode 100644 doc/html/search/all_5.html create mode 100644 doc/html/search/all_5.js create mode 100644 doc/html/search/all_6.html create mode 100644 doc/html/search/all_6.js create mode 100644 doc/html/search/all_7.html create mode 100644 doc/html/search/all_7.js create mode 100644 doc/html/search/all_8.html create mode 100644 doc/html/search/all_8.js create mode 100644 doc/html/search/all_9.html create mode 100644 doc/html/search/all_9.js create mode 100644 doc/html/search/all_a.html create mode 100644 doc/html/search/all_a.js create mode 100644 doc/html/search/all_b.html create mode 100644 doc/html/search/all_b.js create mode 100644 doc/html/search/all_c.html create mode 100644 doc/html/search/all_c.js create mode 100644 doc/html/search/all_d.html create mode 100644 doc/html/search/all_d.js create mode 100644 doc/html/search/all_e.html create mode 100644 doc/html/search/all_e.js create mode 100644 doc/html/search/all_f.html create mode 100644 doc/html/search/all_f.js create mode 100644 doc/html/search/classes_0.html create mode 100644 doc/html/search/classes_0.js create mode 100644 doc/html/search/classes_1.html create mode 100644 doc/html/search/classes_1.js create mode 100644 doc/html/search/classes_2.html create mode 100644 doc/html/search/classes_2.js create mode 100644 doc/html/search/classes_3.html create mode 100644 doc/html/search/classes_3.js create mode 100644 doc/html/search/classes_4.html create mode 100644 doc/html/search/classes_4.js create mode 100644 doc/html/search/classes_5.html create mode 100644 doc/html/search/classes_5.js create mode 100644 doc/html/search/classes_6.html create mode 100644 doc/html/search/classes_6.js create mode 100644 doc/html/search/classes_7.html create mode 100644 doc/html/search/classes_7.js create mode 100644 doc/html/search/classes_8.html create mode 100644 doc/html/search/classes_8.js create mode 100644 doc/html/search/classes_9.html create mode 100644 doc/html/search/classes_9.js create mode 100644 doc/html/search/close.png create mode 100644 doc/html/search/defines_0.html create mode 100644 doc/html/search/defines_0.js create mode 100644 doc/html/search/defines_1.html create mode 100644 doc/html/search/defines_1.js create mode 100644 doc/html/search/files_0.html create mode 100644 doc/html/search/files_0.js create mode 100644 doc/html/search/files_1.html create mode 100644 doc/html/search/files_1.js create mode 100644 doc/html/search/files_2.html create mode 100644 doc/html/search/files_2.js create mode 100644 doc/html/search/files_3.html create mode 100644 doc/html/search/files_3.js create mode 100644 doc/html/search/files_4.html create mode 100644 doc/html/search/files_4.js create mode 100644 doc/html/search/files_5.html create mode 100644 doc/html/search/files_5.js create mode 100644 doc/html/search/files_6.html create mode 100644 doc/html/search/files_6.js create mode 100644 doc/html/search/files_7.html create mode 100644 doc/html/search/files_7.js create mode 100644 doc/html/search/files_8.html create mode 100644 doc/html/search/files_8.js create mode 100644 doc/html/search/files_9.html create mode 100644 doc/html/search/files_9.js create mode 100644 doc/html/search/files_a.html create mode 100644 doc/html/search/files_a.js create mode 100644 doc/html/search/files_b.html create mode 100644 doc/html/search/files_b.js create mode 100644 doc/html/search/files_c.html create mode 100644 doc/html/search/files_c.js create mode 100644 doc/html/search/files_d.html create mode 100644 doc/html/search/files_d.js create mode 100644 doc/html/search/functions_0.html create mode 100644 doc/html/search/functions_0.js create mode 100644 doc/html/search/functions_1.html create mode 100644 doc/html/search/functions_1.js create mode 100644 doc/html/search/functions_2.html create mode 100644 doc/html/search/functions_2.js create mode 100644 doc/html/search/functions_3.html create mode 100644 doc/html/search/functions_3.js create mode 100644 doc/html/search/functions_4.html create mode 100644 doc/html/search/functions_4.js create mode 100644 doc/html/search/functions_5.html create mode 100644 doc/html/search/functions_5.js create mode 100644 doc/html/search/functions_6.html create mode 100644 doc/html/search/functions_6.js create mode 100644 doc/html/search/functions_7.html create mode 100644 doc/html/search/functions_7.js create mode 100644 doc/html/search/functions_8.html create mode 100644 doc/html/search/functions_8.js create mode 100644 doc/html/search/functions_9.html create mode 100644 doc/html/search/functions_9.js create mode 100644 doc/html/search/functions_a.html create mode 100644 doc/html/search/functions_a.js create mode 100644 doc/html/search/functions_b.html create mode 100644 doc/html/search/functions_b.js create mode 100644 doc/html/search/functions_c.html create mode 100644 doc/html/search/functions_c.js create mode 100644 doc/html/search/functions_d.html create mode 100644 doc/html/search/functions_d.js create mode 100644 doc/html/search/functions_e.html create mode 100644 doc/html/search/functions_e.js create mode 100644 doc/html/search/mag_sel.png create mode 100644 doc/html/search/namespaces_0.html create mode 100644 doc/html/search/namespaces_0.js create mode 100644 doc/html/search/nomatches.html create mode 100644 doc/html/search/pages_0.html create mode 100644 doc/html/search/pages_0.js create mode 100644 doc/html/search/search.css create mode 100644 doc/html/search/search.js create mode 100644 doc/html/search/search_l.png create mode 100644 doc/html/search/search_m.png create mode 100644 doc/html/search/search_r.png create mode 100644 doc/html/search/typedefs_0.html create mode 100644 doc/html/search/typedefs_0.js create mode 100644 doc/html/search/typedefs_1.html create mode 100644 doc/html/search/typedefs_1.js create mode 100644 doc/html/search/typedefs_2.html create mode 100644 doc/html/search/typedefs_2.js create mode 100644 doc/html/search/variables_0.html create mode 100644 doc/html/search/variables_0.js create mode 100644 doc/html/search/variables_1.html create mode 100644 doc/html/search/variables_1.js create mode 100644 doc/html/search/variables_10.html create mode 100644 doc/html/search/variables_10.js create mode 100644 doc/html/search/variables_11.html create mode 100644 doc/html/search/variables_11.js create mode 100644 doc/html/search/variables_12.html create mode 100644 doc/html/search/variables_12.js create mode 100644 doc/html/search/variables_2.html create mode 100644 doc/html/search/variables_2.js create mode 100644 doc/html/search/variables_3.html create mode 100644 doc/html/search/variables_3.js create mode 100644 doc/html/search/variables_4.html create mode 100644 doc/html/search/variables_4.js create mode 100644 doc/html/search/variables_5.html create mode 100644 doc/html/search/variables_5.js create mode 100644 doc/html/search/variables_6.html create mode 100644 doc/html/search/variables_6.js create mode 100644 doc/html/search/variables_7.html create mode 100644 doc/html/search/variables_7.js create mode 100644 doc/html/search/variables_8.html create mode 100644 doc/html/search/variables_8.js create mode 100644 doc/html/search/variables_9.html create mode 100644 doc/html/search/variables_9.js create mode 100644 doc/html/search/variables_a.html create mode 100644 doc/html/search/variables_a.js create mode 100644 doc/html/search/variables_b.html create mode 100644 doc/html/search/variables_b.js create mode 100644 doc/html/search/variables_c.html create mode 100644 doc/html/search/variables_c.js create mode 100644 doc/html/search/variables_d.html create mode 100644 doc/html/search/variables_d.js create mode 100644 doc/html/search/variables_e.html create mode 100644 doc/html/search/variables_e.js create mode 100644 doc/html/search/variables_f.html create mode 100644 doc/html/search/variables_f.js create mode 100644 doc/html/std_8cc.html create mode 100644 doc/html/std_8cc.js create mode 100644 doc/html/std_8h.html create mode 100644 doc/html/std_8h.js create mode 100644 doc/html/std_8h_source.html create mode 100644 doc/html/structTelegram_1_1TCommand-members.html create mode 100644 doc/html/structTelegram_1_1TCommand.html create mode 100644 doc/html/structTelegram_1_1TCommand.js create mode 100644 doc/html/sync_off.png create mode 100644 doc/html/sync_on.png create mode 100644 doc/html/tab_a.png create mode 100644 doc/html/tab_b.png create mode 100644 doc/html/tab_h.png create mode 100644 doc/html/tab_s.png create mode 100644 doc/html/tabs.css diff --git a/Doxyfile b/Doxyfile new file mode 100644 index 0000000..d3cdc98 --- /dev/null +++ b/Doxyfile @@ -0,0 +1,2303 @@ +# Doxyfile 1.8.6 + +# 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 = "LibTgBotPP" + +# 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 = + +# 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 = + +# 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 = + +# 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 + +# 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 = YES + +# 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 = 4 + +# 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, 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 = YES + +# 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 = YES + +# 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 = YES + +# 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 = NO + +# 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 = NO + +# 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 = NO + +# 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 = YES + +# 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 = NO + +# 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 = NO + +# 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 ... \endif and \cond +# ... \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 = YES + +# 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 = + +# 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 = + +# 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 = doc/ + +# 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 = + +# 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 = + +# 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 = + +# 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 = NO + +# 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 = + +# 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: +# +# +# +# where is the value of the INPUT_FILTER tag, and 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 = README.md + +#--------------------------------------------------------------------------- +# 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 = + +#--------------------------------------------------------------------------- +# 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 = + +# 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. +# 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 = YES + +# 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://cdn.mathjax.org/mathjax/latest + +# 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 + S +# (what the is depends on the OS and browser, but it is typically +# , /