summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorRobert Pösel <robyer@seznam.cz>2014-04-14 09:29:01 +0000
committerRobert Pösel <robyer@seznam.cz>2014-04-14 09:29:01 +0000
commit14efff8cac3612ae7340e1f3ad791418c941468d (patch)
treede79e9f7666664d23b554c202f75fae93b5fc165 /plugins
parent1e8ce03c8fe14ee1238e15c41391e1c7a5346d7c (diff)
Add original sources for Name Day plugin from Tibor Szabo (not adopted)
git-svn-id: http://svn.miranda-ng.org/main/trunk@8969 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'plugins')
-rw-r--r--plugins/!NotAdopted/name_day/calendar/calendar.cpp157
-rw-r--r--plugins/!NotAdopted/name_day/calendar/calendar.h37
-rw-r--r--plugins/!NotAdopted/name_day/name_day.cpp76
-rw-r--r--plugins/!NotAdopted/name_day/name_day.ncbbin0 -> 175104 bytes
-rw-r--r--plugins/!NotAdopted/name_day/name_day.vcproj198
-rw-r--r--plugins/!NotAdopted/name_day/name_day_core.cpp298
-rw-r--r--plugins/!NotAdopted/name_day/name_day_core.h40
-rw-r--r--plugins/!NotAdopted/name_day/namedayplug.apsbin0 -> 45712 bytes
-rw-r--r--plugins/!NotAdopted/name_day/namedayplug.rc87
-rw-r--r--plugins/!NotAdopted/name_day/resource.h19
-rw-r--r--plugins/!NotAdopted/name_day/resources/baloons.icobin0 -> 3262 bytes
-rw-r--r--plugins/!NotAdopted/name_day/resources/icon1.icobin0 -> 3262 bytes
-rw-r--r--plugins/!NotAdopted/name_day/resources/icon2.icobin0 -> 3262 bytes
-rw-r--r--plugins/!NotAdopted/name_day/resources/icon3.icobin0 -> 2238 bytes
-rw-r--r--plugins/!NotAdopted/name_day/static_database.h492
-rw-r--r--plugins/!NotAdopted/name_day/utils/string_tokenizer.h40
16 files changed, 1444 insertions, 0 deletions
diff --git a/plugins/!NotAdopted/name_day/calendar/calendar.cpp b/plugins/!NotAdopted/name_day/calendar/calendar.cpp
new file mode 100644
index 0000000000..209ed2e6a2
--- /dev/null
+++ b/plugins/!NotAdopted/name_day/calendar/calendar.cpp
@@ -0,0 +1,157 @@
+/**
+ * FIXME:
+ *
+ *
+ */
+
+#include "calendar.h"
+
+
+
+/**
+ * @brief constructor
+ * @param static names Static array of calendar names.
+ *
+ * Insert the names into the dynamic array.
+ */
+calendar_t::calendar_t(const char *const *const static_names, const size_t names_count, const unsigned icon_id) //:
+ //country
+ //icon_id
+ //names
+{
+ names.resize(names_count);
+
+ // The first element of the static array is the country name.
+
+ country = static_names[0];
+
+ for (size_t i = 0; i < names_count - 1; ++i) {
+ names[i] = static_names[i + 1];
+ }
+
+ this->icon_id = icon_id;
+}
+
+
+/**
+ * @brief destructor
+ *
+ */
+calendar_t::~calendar_t(void)
+{
+ names.clear();
+}
+
+/**
+ * @brief get_name
+ * @param day_in_year
+ *
+ */
+const string &calendar_t::get_name(const unsigned day_in_year) const
+{
+ return names[day_in_year];
+}
+
+/**
+ * @brief get the day in the year.
+ * @return index
+ * @param month
+ * @param day
+ *
+ */
+unsigned calendar_t::get_day_in_year(const unsigned month, const unsigned day) const
+{
+ // NOTE: it's too late for me to come with some clever
+ // alg. for this... :)
+
+
+ unsigned index = day + 29 * (month - 1) - 1;
+
+ if (month == 1) {
+ return index;
+ }
+
+ // January
+ index += 2;
+
+ // Jan & Feb end.
+ if (month == 2 || month == 3) {
+ return index;
+ }
+
+
+ index += 2;
+
+ if (month == 4) {
+ return index;
+ }
+
+ index += 1;
+
+ if (month == 5) {
+ return index;
+ }
+
+ index += 2;
+
+ if (month == 6) {
+ return index;
+ }
+
+ index += 1;
+
+ if (month == 7) {
+ return index;
+ }
+
+ index += 2;
+
+ if (month == 8) {
+ return index;
+ }
+
+ index += 2;
+
+ if (month == 9) {
+ return index;
+ }
+
+ index += 1;
+
+ if (month == 10) {
+ return index;
+ }
+
+ index += 2;
+
+ if (month == 11) {
+ return index;
+ }
+
+ index += 1;
+
+ return index;
+}
+
+/**
+ * @brief get the name
+ * @param day Day in month
+ * @param month Month in year
+ *
+ */
+const string &calendar_t::get_name(const unsigned day, const unsigned month) const
+{
+ const unsigned day_in_year = get_day_in_year(day, month);
+
+ return get_name(day_in_year);
+}
+
+/**
+ * @brief get name count
+ * @return name_count
+ *
+ */
+unsigned calendar_t::get_name_count(void) const
+{
+ return names.size();
+} \ No newline at end of file
diff --git a/plugins/!NotAdopted/name_day/calendar/calendar.h b/plugins/!NotAdopted/name_day/calendar/calendar.h
new file mode 100644
index 0000000000..fda275297f
--- /dev/null
+++ b/plugins/!NotAdopted/name_day/calendar/calendar.h
@@ -0,0 +1,37 @@
+/**
+ * FIXME:
+ *
+ */
+#ifndef calendar_h
+#define calendar_h
+
+#include <vector>
+#include <string>
+using namespace std;
+
+class calendar_t
+{
+ public:
+ calendar_t (const char *const *const static_names, const size_t names_count, const unsigned icon_id);
+ ~calendar_t ();
+
+ const string &get_name (const unsigned day_in_year) const;
+ const string &get_name (const unsigned day, const unsigned month) const;
+
+ unsigned get_day_in_year (const unsigned month, const unsigned day) const;
+ unsigned get_name_count (void) const;
+
+
+
+ string country;
+ unsigned icon_id;
+
+ private:
+ calendar_t () {};
+
+ vector<string> names;
+
+};
+
+
+#endif // calendar_h \ No newline at end of file
diff --git a/plugins/!NotAdopted/name_day/name_day.cpp b/plugins/!NotAdopted/name_day/name_day.cpp
new file mode 100644
index 0000000000..822f6ba439
--- /dev/null
+++ b/plugins/!NotAdopted/name_day/name_day.cpp
@@ -0,0 +1,76 @@
+/**
+ * @file Name day plugin
+ */
+#include <windows.h>
+#include "../../headers_c/newpluginapi.h"
+
+#include "name_day_core.h"
+
+static name_day_core_t name_day_core;
+
+HINSTANCE hInst;
+PLUGINLINK *pluginLink;
+
+/**
+ * @brief Plugin info.
+ *
+ */
+PLUGININFO pluginInfo={
+ sizeof(PLUGININFO),
+ "Name Day Plugin",
+ PLUGIN_MAKE_VERSION(0, 0, 0, 7),
+ "The Name Day plugin.",
+ "Tibor Szabo",
+ "tibor.szabo@gmail.com",
+ "© 2005 Tibor Szabo",
+ "",
+ 0, //not transient
+ 0 //doesn't replace anything built-in
+};
+
+/**
+ * @brief DllMain
+ *
+ */
+BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
+{
+ hInst = hinstDLL;
+ return TRUE;
+}
+
+
+/**
+ * @brief Plugin Info
+ *
+ */
+extern "C" __declspec(dllexport) PLUGININFO* MirandaPluginInfo(DWORD mirandaVersion)
+{
+ return &pluginInfo;
+}
+
+/**
+ * @brief Load
+ *
+ */
+extern "C" int __declspec(dllexport) Load(PLUGINLINK *link)
+{
+ pluginLink = link;
+
+ //create_menu();
+
+ //check_contacts();
+
+ name_day_core.create_menu();
+ name_day_core.perform_name_day_test();
+
+ return 0;
+}
+
+/**
+ * @brief Unload
+ *
+ */
+extern "C" int __declspec(dllexport) Unload(void)
+{
+ return 0;
+} \ No newline at end of file
diff --git a/plugins/!NotAdopted/name_day/name_day.ncb b/plugins/!NotAdopted/name_day/name_day.ncb
new file mode 100644
index 0000000000..76b8eb2eab
--- /dev/null
+++ b/plugins/!NotAdopted/name_day/name_day.ncb
Binary files differ
diff --git a/plugins/!NotAdopted/name_day/name_day.vcproj b/plugins/!NotAdopted/name_day/name_day.vcproj
new file mode 100644
index 0000000000..0d90239c80
--- /dev/null
+++ b/plugins/!NotAdopted/name_day/name_day.vcproj
@@ -0,0 +1,198 @@
+<?xml version="1.0" encoding="windows-1250"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="namedayplug"
+ SccProjectName=""
+ SccLocalPath="">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory=".\Release"
+ IntermediateDirectory=".\Release"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ InlineFunctionExpansion="1"
+ PreprocessorDefinitions="WIN32;_WINDOWS;_USRDLL"
+ StringPooling="TRUE"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="TRUE"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderFile=".\Release/name_day.pch"
+ AssemblerListingLocation=".\Release/"
+ ObjectFile=".\Release/"
+ ProgramDataBaseFileName=".\Release/"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile=".\Release/name_day.dll"
+ LinkIncremental="1"
+ SuppressStartupBanner="TRUE"
+ ProgramDatabaseFile=".\Release/name_day.pdb"
+ ImportLibrary=".\Release/name_day.lib"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="TRUE"
+ SuppressStartupBanner="TRUE"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Release/name_day.tlb"
+ HeaderFileName=""/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="2057"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory=".\Debug"
+ IntermediateDirectory=".\Debug"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;TESTPLUG_EXPORTS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderFile=".\Debug/name_day.pch"
+ AssemblerListingLocation=".\Debug/"
+ ObjectFile=".\Debug/"
+ ProgramDataBaseFileName=".\Debug/"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile=".\Debug/name_day.dll"
+ LinkIncremental="1"
+ SuppressStartupBanner="TRUE"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile=".\Debug/name_day.pdb"
+ ImportLibrary=".\Debug/name_day.lib"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="TRUE"
+ SuppressStartupBanner="TRUE"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Debug/name_day.tlb"
+ HeaderFileName=""/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="2057"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
+ <File
+ RelativePath=".\name_day.cpp">
+ </File>
+ <File
+ RelativePath=".\name_day_core.cpp">
+ </File>
+ <File
+ RelativePath=".\name_day_core.h">
+ </File>
+ <File
+ RelativePath=".\namedayplug.rc">
+ </File>
+ <File
+ RelativePath=".\static_database.h">
+ </File>
+ <Filter
+ Name="calendar"
+ Filter="">
+ <File
+ RelativePath=".\calendar\calendar.cpp">
+ </File>
+ <File
+ RelativePath=".\calendar\calendar.h">
+ </File>
+ </Filter>
+ <Filter
+ Name="utils"
+ Filter="">
+ <File
+ RelativePath=".\utils\string_tokenizer.h">
+ </File>
+ </Filter>
+ </Filter>
+ <File
+ RelativePath=".\resources\baloons.ico">
+ </File>
+ <File
+ RelativePath=".\resources\icon1.ico">
+ </File>
+ <File
+ RelativePath=".\icon1.ico">
+ </File>
+ <File
+ RelativePath=".\resources\icon2.ico">
+ </File>
+ <File
+ RelativePath=".\resources\icon3.ico">
+ </File>
+ <File
+ RelativePath=".\resource.h">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/plugins/!NotAdopted/name_day/name_day_core.cpp b/plugins/!NotAdopted/name_day/name_day_core.cpp
new file mode 100644
index 0000000000..9d962f8ad3
--- /dev/null
+++ b/plugins/!NotAdopted/name_day/name_day_core.cpp
@@ -0,0 +1,298 @@
+/**
+ * FIXME:
+ *
+ *
+ */
+
+#include "name_day_core.h"
+#include "utils/string_tokenizer.h"
+
+#include "static_database.h"
+
+
+// Miranda stuff.
+#include "resource.h"
+#include "../../headers_c/newpluginapi.h"
+#include "../../headers_c/m_database.h"
+#include "../../headers_c/m_clist.h"
+#include "../../headers_c/m_popup.h"
+#include "../../headers_c/m_protocols.h"
+#include "../../headers_c/m_skin.h"
+#include "../../headers_c/m_protomod.h"
+#include "../../headers_c/m_ignore.h"
+
+#include <sstream>
+
+
+extern HINSTANCE hInst;
+
+static name_day_core_t *name_day_object = NULL;
+
+int command0(WPARAM wParam, LPARAM lParam)
+{
+ return name_day_object->perform_command(0);
+}
+
+int command1(WPARAM wParam, LPARAM lParam)
+{
+ return name_day_object->perform_command(1);
+}
+
+int command2(WPARAM wParam, LPARAM lParam)
+{
+ return name_day_object->perform_command(2);
+}
+
+/**
+ * @brief constructor
+ *
+ */
+name_day_core_t::name_day_core_t()
+{
+
+ name_day_object = this;
+
+ // Create the calendars from the provided static arrays.
+
+ // FIXME: this is not very optimal! It will create the const object and copy it
+ // into the array, right?
+ //
+
+ // FIXME: insert only the calendars that are wanted by the user (some option
+ // screen is needed.
+
+ calendars.push_back(calendar_t(czech_names, 366, IDI_ICON1));
+ calendars.push_back(calendar_t(slovak_names, 366, IDI_ICON2));
+ calendars.push_back(calendar_t(french_names, 366, IDI_ICON4));
+}
+
+/**
+ * @brief destructor
+ *
+ */
+name_day_core_t::~name_day_core_t(void)
+{
+ calendars.clear();
+}
+
+/**
+ * @brief perform name day test.
+ *
+ * Traverse the contact list and test the user first names against today name
+ * days.
+ */
+void name_day_core_t::perform_name_day_test(void)
+{
+ // Get the actual time.
+ // FIXME: this function returns the UTC!
+ SYSTEMTIME sys_time;
+ GetSystemTime(&sys_time);
+
+
+
+ // Get the first contact from the contact list.
+
+ HANDLE contact_handle = (HANDLE)CallService(MS_DB_CONTACT_FINDFIRST, 0, 0);
+
+ // Traverse the contacts.
+ // Get the first name for each contact.
+
+ while (contact_handle != NULL) {
+
+ // Get the contact proto.
+
+ char *proto = (char*)CallService(MS_PROTO_GETCONTACTBASEPROTO,(WPARAM)contact_handle,0);
+
+ if (! proto) {
+ contact_handle = (HANDLE)CallService(MS_DB_CONTACT_FINDNEXT, (WPARAM)contact_handle, 0);
+ continue;
+ }
+
+ // Determine the contact name.
+
+ string contact_name = (char*)CallService(MS_CLIST_GETCONTACTDISPLAYNAME, (WPARAM)contact_handle, 0);
+
+
+ // And the first name.
+
+ DBVARIANT dbv;
+ dbv.pszVal = NULL;
+ DBGetContactSetting(contact_handle, proto, "FirstName", &dbv);
+
+ if (dbv.pszVal) {
+
+ string first_name = dbv.pszVal;
+
+ for (unsigned i = 0; i < calendars.size(); ++i) {
+
+ const string name_day = calendars[i].get_name(sys_time.wMonth, sys_time.wDay);
+
+ // This user has name day.
+ // Create the miranda event.
+ if (has_name_day(name_day, first_name)) {
+ create_name_day_event(contact_handle, contact_name, first_name, calendars[i].country);
+ }
+ }
+ }
+
+ contact_handle = (HANDLE)CallService(MS_DB_CONTACT_FINDNEXT, (WPARAM)contact_handle, 0);
+ }
+}
+
+/**
+ * @brief create name day event
+ * @param handle
+ * @param contact_name
+ * @param first_name
+ * @param country
+ */
+void name_day_core_t::create_name_day_event(HANDLE &handle, const string &contact_name, const string &first_name, const string &country)
+{
+ CLISTEVENT cle;
+
+ ZeroMemory(&cle, sizeof(cle));
+
+ cle.cbSize = sizeof(cle);
+ cle.flags = CLEF_URGENT;
+ cle.hContact = handle;
+ //cle.hDbEvent = (HANDLE)(uniqueEventId++);
+ cle.hIcon = LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON3));
+ //cle.pszService = "";
+
+ const string tooltip = contact_name + "(" + first_name + ") has a Name Day today [" + country + "]! Congratulation!";
+
+ cle.pszTooltip = const_cast<char *>(tooltip.c_str());
+ CallService(MS_CLIST_ADDEVENT, 0,( LPARAM)&cle);
+}
+
+/**
+ * @brief Create miranda menu
+ *
+ */
+void name_day_core_t::create_menu(void)
+{
+ // Create the main menu.
+ CLISTMENUITEM mi;
+ ZeroMemory(&mi,sizeof(mi));
+ mi.cbSize = sizeof(mi);
+
+ // The main manu caption.
+ mi.pszPopupName = "Name Day";
+
+ // The submenu caption.
+ mi.pszName = "Happy Name Day to";
+
+ // The separator.
+ mi.hotKey=MAKELPARAM(0,VK_F1);
+
+ // Approx. position on the menu. lower numbers go nearer the top
+ // Try to set it as top as possible.
+ mi.popupPosition = -0x7FFFFFFF;
+ mi.position = -0x7FFFFFFF;
+ mi.hIcon = LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON3));
+
+ CallService(MS_CLIST_ADDMAINMENUITEM, 0, (LPARAM)&mi);
+
+
+ // FIXME: solve this some way
+ CreateServiceFunction("NameDay/0", command0);
+ CreateServiceFunction("NameDay/1", command1);
+ CreateServiceFunction("NameDay/2", command2);
+
+ // Add the submenus for each country database.
+
+ for (size_t i = 0; i < calendars.size(); ++i) {
+
+ std::stringstream sstr;
+ sstr << "NameDay/" << i;
+
+ create_sub_menu(calendars[i], sstr.str());
+ }
+
+ /*
+ HANDLE hContact;
+
+ hContact = (HANDLE)CallService(MS_DB_CONTACT_ADD, 0, 0);
+ CallService(MS_PROTO_ADDTOCONTACT, ( WPARAM )hContact, ( LPARAM )"PING" );
+ CallService(MS_IGNORE_IGNORE, (WPARAM)hContact, (WPARAM)IGNOREEVENT_USERONLINE);
+
+ DBWriteContactSettingString(hContact, "PING", "Nick", "yaaa");
+ */
+}
+/**
+ * @create sub menu
+ * @param calendar
+ *
+ */
+void name_day_core_t::create_sub_menu(const calendar_t &calendar, const string &function_name)
+{
+
+ // Get the actual date and time.
+ SYSTEMTIME sys_time;
+ GetSystemTime(&sys_time);
+
+ // Resolve the actual name for this database
+ string name_day = calendar.get_name(sys_time.wMonth, sys_time.wDay);
+
+ CLISTMENUITEM mi;
+ ZeroMemory(&mi,sizeof(mi));
+ mi.cbSize = sizeof(mi);
+ mi.pszPopupName = "Name Day";
+ mi.pszName = const_cast<char *>(name_day.c_str());
+ mi.position = 1;
+ mi.hIcon = LoadIcon(hInst, MAKEINTRESOURCE(calendar.icon_id));
+
+ mi.pszService = const_cast<char *>(function_name.c_str());
+
+ CallService(MS_CLIST_ADDMAINMENUITEM, 0, (LPARAM)&mi);
+}
+
+
+/**
+ * @brief has name day
+ * @param name_day
+ * @param first_name
+ *
+ */
+bool name_day_core_t::has_name_day(const string &name_day, const string &first_name)
+{
+ // Parse the name day string for today.
+ // Extract the names.
+
+ vector<string> today_names = string_tokenizer(name_day, " ");
+
+ // Try to match the first name with the extracted names.
+ for (size_t i = 0; i < today_names.size(); ++i) {
+
+ // Huray we have found the contact who could celebrate.
+ if (today_names[i] == first_name) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+int name_day_core_t::perform_command(const unsigned calendar_idx)
+{
+ const unsigned future_names_count = 7;
+
+ SYSTEMTIME sys_time;
+ GetSystemTime(&sys_time);
+
+ const unsigned day_in_year = calendars[calendar_idx].get_day_in_year(sys_time.wMonth, sys_time.wDay);
+
+ std::stringstream sstr;
+
+ for (unsigned i = 0; i < future_names_count; ++i) {
+ if (i + day_in_year >= calendars[calendar_idx].get_name_count()) {
+ break;
+ }
+ sstr << "+ " << i << " " << calendars[calendar_idx].get_name(day_in_year + i) << "\n";
+ }
+
+ MessageBox(NULL, sstr.str().c_str(), "Name Day", MB_OK);
+
+ return 0;
+}
+
diff --git a/plugins/!NotAdopted/name_day/name_day_core.h b/plugins/!NotAdopted/name_day/name_day_core.h
new file mode 100644
index 0000000000..d219dac240
--- /dev/null
+++ b/plugins/!NotAdopted/name_day/name_day_core.h
@@ -0,0 +1,40 @@
+/**
+ * FIXME:
+ *
+ */
+#ifndef name_day_core_h
+#define name_day_core_h
+
+#include "calendar/calendar.h"
+
+// WInd00z stuff
+#include <windows.h>
+
+
+/**
+ * FIXME:
+ *
+ */
+class name_day_core_t
+{
+ public:
+ name_day_core_t ();
+ ~name_day_core_t ();
+
+ void perform_name_day_test (void);
+ void create_menu (void);
+
+ int perform_command (const unsigned calendar_idx);
+
+ private:
+
+ void create_name_day_event (HANDLE &handle, const string &contact_name, const string &first_name, const string &country);
+ bool has_name_day (const string &name_day, const string &first_name);
+ void create_sub_menu (const calendar_t &calendar, const string &function_name);
+
+ vector<calendar_t> calendars;
+
+};
+
+
+#endif // calendar_h \ No newline at end of file
diff --git a/plugins/!NotAdopted/name_day/namedayplug.aps b/plugins/!NotAdopted/name_day/namedayplug.aps
new file mode 100644
index 0000000000..0367dd45e9
--- /dev/null
+++ b/plugins/!NotAdopted/name_day/namedayplug.aps
Binary files differ
diff --git a/plugins/!NotAdopted/name_day/namedayplug.rc b/plugins/!NotAdopted/name_day/namedayplug.rc
new file mode 100644
index 0000000000..a6ccdbc3e8
--- /dev/null
+++ b/plugins/!NotAdopted/name_day/namedayplug.rc
@@ -0,0 +1,87 @@
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// Czech resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CSY)
+#ifdef _WIN32
+LANGUAGE LANG_CZECH, SUBLANG_DEFAULT
+#pragma code_page(1250)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+IDI_ICON1 ICON "resources\\icon1.ico"
+IDI_ICON2 ICON "resources\\icon2.ico"
+IDI_ICON3 ICON "resources\\baloons.ico"
+IDI_ICON4 ICON "resources\\icon3.ico"
+#endif // Czech resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE
+BEGIN
+ "resource.h\0"
+END
+
+2 TEXTINCLUDE
+BEGIN
+ "#include ""afxres.h""\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE
+BEGIN
+ "\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+#endif // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/plugins/!NotAdopted/name_day/resource.h b/plugins/!NotAdopted/name_day/resource.h
new file mode 100644
index 0000000000..d40554d2b0
--- /dev/null
+++ b/plugins/!NotAdopted/name_day/resource.h
@@ -0,0 +1,19 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by namedayplug.rc
+//
+#define IDI_ICON1 108
+#define IDI_ICON2 109
+#define IDI_ICON3 110
+#define IDI_ICON4 111
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE 112
+#define _APS_NEXT_COMMAND_VALUE 40001
+#define _APS_NEXT_CONTROL_VALUE 1001
+#define _APS_NEXT_SYMED_VALUE 101
+#endif
+#endif
diff --git a/plugins/!NotAdopted/name_day/resources/baloons.ico b/plugins/!NotAdopted/name_day/resources/baloons.ico
new file mode 100644
index 0000000000..5d0b24882a
--- /dev/null
+++ b/plugins/!NotAdopted/name_day/resources/baloons.ico
Binary files differ
diff --git a/plugins/!NotAdopted/name_day/resources/icon1.ico b/plugins/!NotAdopted/name_day/resources/icon1.ico
new file mode 100644
index 0000000000..5384ac1d65
--- /dev/null
+++ b/plugins/!NotAdopted/name_day/resources/icon1.ico
Binary files differ
diff --git a/plugins/!NotAdopted/name_day/resources/icon2.ico b/plugins/!NotAdopted/name_day/resources/icon2.ico
new file mode 100644
index 0000000000..cc8e431677
--- /dev/null
+++ b/plugins/!NotAdopted/name_day/resources/icon2.ico
Binary files differ
diff --git a/plugins/!NotAdopted/name_day/resources/icon3.ico b/plugins/!NotAdopted/name_day/resources/icon3.ico
new file mode 100644
index 0000000000..5ecda459f1
--- /dev/null
+++ b/plugins/!NotAdopted/name_day/resources/icon3.ico
Binary files differ
diff --git a/plugins/!NotAdopted/name_day/static_database.h b/plugins/!NotAdopted/name_day/static_database.h
new file mode 100644
index 0000000000..9eabb913e5
--- /dev/null
+++ b/plugins/!NotAdopted/name_day/static_database.h
@@ -0,0 +1,492 @@
+#ifndef calendars_h
+#define calendars_h
+
+/**
+ * @brief Czech names database
+ *
+ */
+static char *czech_names[] = {
+ "CZE",
+ "Novy rok", "Karina", "Radmila", "Diana", "Dalimil", "Tri kralove", "Vilma",
+ "Cestmir", "Vladan", "Bretislav", "Bohdana", "Pravoslav", "Edita", "Radovan",
+ "Alice", "Ctirad", "Drahoslav", "Vladislav", "Doubravka", "Ilona", "Bila",
+ "Slavomir", "Zdenek", "Milena", "Milos", "Zora", "Ingrid", "Otylie", "Zdislava",
+ "Robin", "Marika",
+
+ "Hynek", "Nela", "Blazej", "Jarmila", "Dobromila", "Vanda", "Veronika", "Milada",
+ "Apolena", "Mojmir", "Bozena", "Slavina", "Vinceslav", "Valentyn", "Jirina",
+ "Ljuba", "Miloslava", "Gizela", "Patrik", "Oldrich", "Lenka", "Petr", "Svatopluk",
+ "Matej", "Liliana", "Dorota", "Alexandr", "Lumir", ".....",
+
+ "Bedrich", "Anezka", "Kamil", "Stela", "Kazimir", "Miroslav", "Tomas", "Gabriela",
+ "Frantiska", "Viktorie", "Andela", "Rehor", "Ruzena", "Rut a Matylda", "Ida",
+ "Elena a Herbert", "Vlastimil", "Eduard", "Josef", "Svetlana", "Radek", "Leona",
+ "Ivona", "Gabriel", "Marian", "Emanuel", "Dita", "Sona", "Tatana", "Arnost",
+ "Kvido",
+
+ "Hugo", "Erika", "Richard", "Ivana", "Miroslava", "Vendula", "Herman a Hermina",
+ "Ema", "Dusan", "Darja", "Izabela", "Julius", "Ales", "Vincenc", "Anastazie", "Irena",
+ "Rudolf", "Valerie", "Rostislav a Rosta", "Marcela", "Alexandra a Sasa", "Evzenie", "Vojtech a Vojta",
+ "Jiri a Jirka", "Marek", "Oto", "Jaroslav a Jarda", "Vlastislav", "Robert", "Blahoslav",
+
+ ".....", "Zikmund", "Alexej", "Kvetoslav", "Klaudie", "Radoslav", "Stanislav a Standa",
+ ".....", "Ctibor", "Blazena", "Svatava", "Pankrac", "Servac", "Bonifac", "Zofie",
+ "Premysl", "Aneta", "Natasa", "Ivo", "Zbysek", "Monika", "Emil", "Vladimir a Vlada",
+ "Jana", "Viola", "Filip", "Valdemar", "Vilem", "Maxmilian", "Ferdinand", "Kamila",
+
+ "Laura", "Jarmil", "Tamara", "Dalibor", "Dobroslav", "Norbert", "Iveta a Slavoj",
+ "Medard", "Stanislava", "Gita", "Bruno", "Antonie", "Antonin", "Roland", "Vit",
+ "Zbynek", "Adolf", "Milan", "Leos", "Kveta", "Alois", "Pavla", "Zdenka", "Jan a Honza",
+ "Ivan", "Adriana", "Ladislav", "Lubomir a Lubos", "Petr a Pavel", "Sarka",
+
+ "Jaroslava", "Patricie", "Radomir", "Prokop", ".....", ".....", "Bohuslava",
+ "Nora", "Drahoslava", "Libuse a Amalie", "Olga", "Borek", "Marketa", "Karolina",
+ "Jindrich", "Lubos", "Martina", "Drahomira", "Cenek", "Ilja", "Vitezslav", "Magdalena",
+ "Libor", "Kristyna", "Jakub", "Anna", "Veroslav", "Viktor", "Marta", "Borivoj", "Ignac",
+
+ "Oskar", "Gustav", "Miluse", "Dominik", "Kristian", "Oldriska", "Lada", "Sobeslav",
+ "Roman", "Vavrinec", "Zuzana", "Klara", "Alena", "Alan", "Hana", "Jachym", "Petra",
+ "Helena", "Ludvik", "Bernard", "Johana", "Bohuslav", "Sandra", "Bartolomej", "Radim",
+ "Ludek", "Otakar", "Augustyn", "Evelina", "Vladena", "Pavlína",
+
+ "Linda a Samuel", "Adela", "Bronislav", "Jindriska", "Boris", "Boleslav", "Regina",
+ "Mariana", "Daniela", "Irma", "Denisa", "Marie", "Lubor", "Radka", "Jolana", "Ludmila",
+ "Nadezda", "Krystof", "Zita", "Oleg", "Matous", "Darina", "Berta", "Jaromir", "Zlata",
+ "Andrea", "Jonas", "Vaclav a Vasek", "Michal", "Jeronym",
+
+ "Igor", "Olivie a Oliver", "Bohumil", "Frantisek", "Eliska", "Hanus", "Justyna",
+ "Vera", "Stefan a Sara", "Marina", "Andrej", "Marcel", "Renata", "Agata", "Tereza",
+ "Havel", "Hedvika", "Lukas", "Michaela", "Vendelin", "Brigita", "Sabina", "Teodor",
+ "Nina", "Beata", "Erik", "Sarlota a Zoe", ".....", "Silvie", "Tadeas", "Stepanka",
+
+ "Felix", ".....", "Hubert", "Karel", "Miriam", "Libina", "Saskie", "Bohumir",
+ "Bohdan", "Evzen", "Martin", "Benedikt", "Tibor", "Sava", "Leopold", "Otmar",
+ "Mahulena", "Romana", "Alzbeta", "Nikola", "Albert", "Cecilie", "Klement",
+ "Emilie", "Katerina", "Artur", "Xenie", "Rene", "Zina", "Ondrej a Ondra",
+
+ "Iva", "Blanka", "Svatoslav", "Barbora", "Jitka", "Mikulas", "Ambroz a Benjamin",
+ "Kvetoslava", "Vratislav", "Julie", "Dana", "Simona", "Lucie", "Lydie", "Radana a Radan",
+ "Albina", "Daniel", "Miloslav", "Ester", "Dagmar", "Natalie", "Simon", "Vlasta",
+ "Adam a Eva", "...", "Stepan", "Zaneta", "Bohumila", "Judita", "David",
+ "Silvestr" };
+
+/**
+ * @brief Slovak names database
+ *
+ */
+static char *slovak_names[] = {
+ "SVK",
+ "Novy rok", "Alexandra a Sasa", "Daniela", "Drahoslav", "Andrea a Ajka", "Antonia", "Bohuslava",
+ "Severin", "Alexej", "Dasa", "Malvina", "Ernest", "Rastislav", "Radovan", "Dobroslav", "Kristina",
+ "Natasa", "Bohdana", "Drahomira", "Dalibor", "Vincent", "Zora", "Milos", "Timotej", "Gejza", "Tamara",
+ "Bohus", "Alfonz", "Gaspar", "Ema", "Emil",
+
+ "Tatiana", "Erik a Erika", "Blazej", "Veronika", "Agata", "Dorota", "Vanda", "Zoja", "Zdenko",
+ "Gabriela", "Dezider", "Perla", "Arpad", "Valentin", "Pravoslav", "Ida a Liana", "Miloslava", "Jaromir",
+ "Vlasta", "Livia", "Eleonora", "Etela", "Roman a Romana", "Matej", "Frederik", "Viktor", "Alexander", "Zlatica", "....",
+
+ "Albin", "Anezka", "Bohumil a Bohumila", "Kazimir", "Fridrich", "Radoslav", "Tomas", "Alan", "Frantiska", "Branislav", "Angela", "Gregor", "Vlastimil", "Matilda", "Svetlana", "Boleslav", "Lubica", "Eduard", "Jozef", "Vítazoslav", "Blahoslav", "Benadik", "Adrian", "Gabriel", "Marian", "Emanuel", "Alena", "Sona", "Miroslav", "Vieroslava", "Benjamin",
+
+ "Hugo", "Zita", "Richard", "Izidor", "Miroslava", "Irena", "Zoltan", "Albert", "Milena", "Igor", "Julius", "Estera", "Ales", "Justina", "Fedor", "Dana a Danica", "Rudolf", "Valer", "Jela", "Marcel", "Ervin", "Slavomir", "Vojtech", "Juraj", "Marek", "Jaroslava", "Jaroslav", "Jarmila", "Lea", "Anastazia",
+
+ "Sviatok prace", "Zigmund", "Galina", "Florian", "Lesana", "Hermina", "Monika", "Ingrida", "Roland", "Viktoria", "Blazena", "Pankrac", "Servác", "Bonifac", "Zofia", "Svetozar", "Gizela", "Viola", "Gertruda", "Bernard", "Zina", "Julia a Juliana", "Zelmira", "Ela", "Urban", "Dusan", "Iveta", "Viliam", "Vilma", "Ferdinand", "Petronela",
+ "Zaneta", "Xenia", "Karolina", "Lenka", "Laura", "Norbert", "Robert", "Medard", "Stanislava", "Margareta", "Dobroslava", "Zlatko", "Anton", "Vasil", "Vit", "Blanka", "Adolf", "Vratislav", "Alfred", "Valeria", "Alojz", "Paulina", "Sidonia", "Jan", "Tadeas", "Adriana", "Ladislav", "Beata", "Peter a Pavol a Petra", "Melania",
+ "Diana", "Berta", "Miloslav", "Prokop", "Cyril a Metod", "Patrik a Patricia", "Oliver", "Ivan", "Lujza", "Amalia", "Milota", "Nina", "Margita", "Kamil", "Henrich", "Drahomir", "Bohuslav", "Kamila", "Dusana", "Ilja", "Daniel", "Magdalena", "Olga", "Vladimir", "Jakub", "Anna", "Bozena", "Kristof", "Marta", "Libusa", "Ignac",
+
+ "Bozidara", "Gustav", "Jergus", "Dominik", "Hortenzia", "Jozefina", "Stefania", "Oskar", "Lubomira", "Vavrinec", "Zuzana", "Darina", "Lubomir", "Mojmir", "Marcela", "Leonard", "Milica", "Elena", "Lydia", "Anabela", "Jana", "Tichomir", "Filip", "Bartolomej", "Ludovit", "Samuel", "Silvia", "Augustin", "Nikola", "Ruzena", "Nora",
+
+ "Drahoslava", "Linda", "Belo", "Rozalia", "Regina", "Alica", "Marianna", "Miriama", "Martina", "Oleg", "Bystrik", "Maria", "Ctibor", "Ludomil", "Jolana", "Ludomila a Ludmila", "Olympia", "Eugenia", "Konstantin", "Luboslava", "Matus", "Moric", "Zdenka", "Lubos", "Vladislav", "Edita", "Cyprian", "Vaclav", "Michal", "Jarolim",
+
+ "Arnold", "Levoslav", "Stela", "Frantisek", "Viera", "Natalia", "Eliska", "Brigita", "Dionyz", "Slavomira", "Valentina", "Maximilian", "Koloman", "Boris", "Terezia", "Vladimira", "Hedviga", "Lukas", "Kristian", "Vendelin", "Ursula", "Sergej", "Alojza", "Kvetoslava", "Aurel", "Demeter", "Sabina", "Dobromila", "Klara", "Simona", "Aurelia",
+
+ "Denisa", "Pamiatka zosnulych", "Hubert", "Karol", "Imrich", "Renata", "Rene", "Bohumir", "Teodor", "Tibor", "Martin", "Svatopluk", "Stanislav", "Irma", "Leopold", "Agnesa", "Klaudia", "Eugen", "Alzbeta", "Felix", "Elvira", "Cecilia", "Klement", "Emilia", "Katarina", "Kornel", "Milan", "Henrieta", "Vratko", "Ondrej a Andrej",
+
+ "Edmund", "Bibiana", "Oldrich", "Barbora", "Oto", "Mikulas", "Ambroz", "Marina", "Izabela", "Raduz", "Hilda", "Otilia", "Lucia", "Branislava", "Ivica", "Albina", "Kornelia", "Slava", "Judita", "Dagmara", "Bohdan", "Adela", "Nadezda", "Adam a Eva", "sviatok vianocny", "Stefan", "Filomena", "Ivana", "Milada",
+ "David", "Silvester" };
+
+/**
+ * @brief French names database
+ *
+ */
+static char *french_names[] = {
+"FRA",
+"Jour de l'An or Fulgence",
+"Basile or Clair or Vassili",
+"Genest or Geneviève or Ginette",
+"Odilon",
+"Edouard or Édouardine or Émilienne or Teddy",
+"Guérin or Melaine or Tiphaine",
+"Cédric or Ramon or Ramuntcho or Raymond or Raymonde or Virginie",
+"Gudule or Lucien or Lucienne or Peggy",
+"Alexia or Alix or Alix",
+"Billy or Guillaume or or Guillaumette or Guillem or Guillemette or William or Willy",
+"Paulin",
+"Césarine or Tania or Tatiana or Tatienne",
+"Hilaire or Hilarion or Yvette",
+"Nina",
+"Amaury or Macaire or Maur or Rémi or Rachel",
+"Honorat or Marceau or Marcel or Priscilla",
+"Anthony or Antoine or Roseline",
+"Prisca",
+"Marius",
+
+"Bastien or Bastienne or Fabien or Fabienne or Sébastien or Sébastienne",
+"Agnès",
+"Anastase or Vincent",
+"Barnard",
+"Babylas or François or Paquito",
+"Apollos or Paul",
+"Paola or Paula or Paule or Paulette or Pauline or Mélanie",
+"Angèle or Angélina or Angéline or Angélique or Dévote",
+"Thomas",
+"Gildas",
+"Bathilde or Bathylle or Jacinthe or Martina or Martine",
+"Marcelle or Marcellia or Nikita",
+
+"Ella or Ellénita or Viridiana",
+"Théophane",
+"Anatole or Anatolie or Blaise or Oscar",
+"Bérénice or Gilbert or Vanessa or Véronique",
+"Agathe or Avit",
+"Armand or Doris or Dorothée or Gaston",
+"Eugénie",
+"Apolline",
+"Jackie or Jacqueline or Jacquette or Jacquine or Jacquotte",
+"Arnaud",
+"Théodora",
+"Félix",
+"Béatrice or Béatrix or Jordane",
+"Tino or Valentin or Saint Valentin",
+"Claude or Claudius or Faust or Fausta or Faustin or Faustine or Georgetta or Georgette or Georgia or Georgina or Georgine",
+"Julienne or Lucile or Onésime or Paméla or Pamphile",
+"Alexis or Cendres",
+"Bernadette or Flavien or Flavienne or Nadette or Nadine or Siméon",
+"Gabin",
+"Aimée or Aymée",
+"Carême",
+"Isabeau or Isabelle",
+"Lazare",
+"Modeste",
+"Roméo",
+"Nestor",
+"Galmier or Honorin or Honorine",
+"Antoinette or Léandre or Romain or Toinon",
+"Augusta or Auguste",
+
+"Albin or Albine or Auban or Aubane or Aubin or Aubry",
+"Charles or Chad or Jaouen",
+"Cunégonde or Guénolé or Gwénola",
+"Casimir",
+"Olive or Olivette or Olivia or Olivier",
+"Coletta or Colette or Nicole or Nicoletta",
+"Félicie or Félicité or Perpétue",
+"Jean or Philémon",
+"Fanchon or France or Franceline or Francette or Francine or Françoise or Paquita",
+"Anastasie or Vivian or Viviane or Vivien",
+"Mi-Carême or Rosine",
+"Elphège or Justine or Justinien or Maxime or Maximilien or Maximilienne or Pol",
+"Rodrigue",
+"Mathilde or Maud",
+"Longin or Louise or Louisette or Lucrèce",
+"Bénédict or Bénédicte or Eusébie",
+"Patrice or Patricia or Patrick",
+"Cyrille or Salvador or Salvatore",
+"José or Joseph or Josèphe or Joséphin or Joséphine or Josette or Josiane",
+"Herbert or Svetlana",
+"Axel or Axelle or Béryl or Clémence",
+"Léa or Léïla or Lia or Liane or Lila",
+"Rébecca or Victorien",
+"Hildelitte",
+"Annonciade or Humbert or Violaine",
+"Lara or Larissa",
+"Habib",
+"Gontran",
+"Gladys or Gwladys or Jonas",
+"Amédée",
+"Amos or Balbine or Benjamin or Benjamine",
+
+"Hugues or Huguette or Hugo or Ugo or Valéry",
+"Sandie or Sandra or Sandrine or Sandy",
+"Richard",
+"Alèthe or Alette or Aliette or Isidore",
+"Irène",
+"Marcelin or Marcellin",
+"Jean-Baptiste or Hégésippe",
+"Constance or Julia or Julie",
+"Gautier or Walter",
+"Fulbert",
+"Stanislas",
+"Jules",
+"Ida",
+"Max or Maxence",
+"Paterne",
+"Benoît or José or Druon",
+"Anicet or Etienne",
+"Parfait",
+"Emma or Werner",
+"Giraud or Odette",
+"Anselme or Selma",
+"Alex or Alexandra or Alexandre or Alexandrine",
+"Adalbert or Fortunat or Georges or Georgette or Youri",
+"Fidèle or Fortunat",
+"Souv. or Déportés or Marc",
+"Alida or Alda or Clet or ",
+"Zita",
+"Valérie",
+"Tropez",
+"Robert or Roberte or Robertine or Robin or Roparz or Rosemonde",
+
+"Fête du Travail or Andéol or Brieux or Florine or Jérémie or Muguet or Muguette or Tamara",
+"Athanase or Boris or Zoé",
+"Juvéna or Philippe or Philippine",
+"Florian or Sylvain or Sylvaine",
+"Ange or Judith",
+"Marien or Prudence",
+"Domitille or Flavie or Flavia or Gisèle",
+"Victoire 1945 or Désiré or Désirée",
+"Fête Jeanne d'Arc or Isaïe or Pâcome or Tudi",
+"Solange",
+"Estelle or Epiphane or Etoile or Mayeul or Stella",
+"Achille or Nérée",
+"Rolande",
+"Mathias or Matthias",
+"Denise or Primaël or Victorin or Victorine",
+"Honoré",
+"Pascal or Pascale or Pascaline",
+"Coralie or Corinne or Cora or Coraline or Eric or Erich or Erick or Ericka",
+"Célestin or Célestine or Erwan or Yves or Yvon or Yvonne",
+"Bernardin or Bernardine",
+"Constantin",
+"Caste or Émile or Miloud or Quiterie or Rita",
+"Didier",
+"Amaël or Donatien or Donatienne or Maël or Maëlle or Rogatien",
+"Sophie",
+"Bérenger or Bérengère",
+"Auguste or Augustin or Hildebert",
+"Germain",
+"Aymar or Maximin",
+"Trinité or Ferdinand or Ivanne or Jane or Jeanne or Jeannette or Jenny or Jeanine or Jehanne or Juanita or Lorraine or Vanina",
+"Pernelle or Péroline or Perrette or Perrin or Perrine or Pétronille or Pierrette",
+
+"Justin or Ronan or Renan or Paméla",
+"Blandine or Elme or Erasme or Vital",
+"Kévin",
+"Clotilde",
+"Boniface or Igor",
+"Claude or or Claudia or Claudette or Claudie or Claudine or Dieu or Norbert",
+"Gilbert or Maité or Mériadec",
+"Armande or Armance or Médard",
+"Diane or Ephrem or Félicien or Félicienne",
+"Landry",
+"Aleyde or Barnabé or Yolande",
+"Guy or Guyonne",
+"Saint Antoine de Padoue or Antoine",
+"Elisée or Elysée or Rufin or Valère",
+"Germaine",
+"Aurélien or Ferréol or Régis",
+"Hervé or Rainier",
+"Ophélie or Léonce",
+"Déodat or Gervais or Gervaise or Micheline or Romuald",
+"Silvère or Sylvère",
+"Aloïs or Aloysius or Gina or Gino or Gonzague or Loïs or Ralph or Rodolphe or Rudolf or Rudy",
+"Alban or Alba or Albane or Albe",
+"Audrey",
+"Baptista or Baptiste or Baptistin or Baptistine or Jean-Baptiste",
+"Eléonore or Lore or Nora or Prosper or Salomon",
+"Anthelme or Maixent",
+"Fernand or Fernande",
+"Irénée",
+"Paul or Pablo or Peter or Pierre or Pierrick",
+"Adnette or Adolphe or Adolphine or Martial",
+
+"Aaron or Diétrich or Dirk or Esther or Goulven or Servan or Servane or Thierry",
+"Martinien",
+"Thomas",
+"Bertha or Berthe or Elia or Eliane or Florent or Lilian or Liliana or Liliane",
+"Hélie",
+"Marietta or Mariette or Nolwenn",
+"Aubierge or Raoul",
+"Edgar or Thibaud or Thibaut or Thiébaud",
+"Amanda or Amandine or Hermine or Herminie or Irma or Marianne",
+"Canut or Ulrich",
+"Benoît or Benoîte or Olga",
+"Olivier",
+"Clélia or Enrique or Eugène or Harry or Henri or Henriette or Joël or Joëlle or Mildred or Milfred",
+"Camille or Camille or Fête Nationale",
+"Bonaventure or Donald or Vladimir or Wladimir",
+"Carmen or Carmine or Elvire",
+"Arlette or Carol or Carole or Caroline or Charlotte or Chloé or Marceline or Marcelline",
+"Arnould or Freddy or Frédéric or Frédérique or Frédérique or Frida",
+"Arsène",
+"Elie or Eliette or Elyette or Gaud or Gaudeline or Hélyette or Marguerite or Marina or Marine or Marinette or Marjorie or May",
+"Domnin or Victor",
+"Maddy or Madeleine or Marie-Madeleine",
+"Brigitte",
+"Christel or Christelle or Christiane or Christilla or Christina or Christine or Ségolène",
+"Jacky or Jacme or Jacques or James or Jim or Valentine",
+"Anabelle or Anais or Anita or Anna or Annabella or Annabelle or Anne or AnneAnnette or Annick or Annie or Anouchka or Anouck or Joachim or Joris or Nancy or Océane",
+"Aurèle or Nathalie",
+"Celse or Innocent or Samson",
+"Loup or Marthe or Olaf or Olav",
+"Juliette",
+"Ignace",
+
+"Arcadius or Arcady or Alphonse or Alphonsin or Alphonsine or Eléazar",
+"Julien or Julian or Eusèbe",
+"Lydie or Lydiane",
+"Jean-Marie or Vianney",
+"Abel or Abella or Oswald",
+"Octavien",
+"Gaétan or Gaétane",
+"Cyrus or Cyr or Cyriaque or Dominique or Dominique",
+"Amour",
+"Dieudonné or Laurent or Laura or Laure or Laurie or Laurette or Laurentine or Laurence",
+"Claire or Clara or Clairette or Suzy or Suzon or Suzette or Suzel or Suzanne or Suzanna or Gilberte or Géry",
+"Clarisse or Clarence",
+"Hippolyte or Philomène",
+"Evrard or Arnold",
+"Assomption or Alfred or Alfréda or Napoléon or Manon or Maryvonne or Maria or Marie or Marielle or Mariannick or Mariam or Marlène or Marion or Maryline or Maryse or Mylène or Marielle or Marjolaine or Milène or Mireille or Murielle or Muriel or Mylène or Myriam",
+"Armel or Armelle or Arméla or Roch",
+"Hyacinthe",
+"Hélèna or Hélène or Laetitia or Liesse or Léna or Lénaïc or Nelly or Nella or Héliéna or Emmeline or Elina or Eline",
+"Jean or Eudes or Guerric",
+"Ahmed or Bernard or Samuel or Samy or Philibert or Philiberte",
+"Christophe or Ombeline",
+"Fabrice or Siegfried or Symphorien",
+"Eglantine or Rose or Rosy or Rosa or Rosette or Rosita or Rozenn",
+"Barthélémy or Bartholomé or Nathan or Nathanaëlle or Nathanaël",
+"Clovis or Louis or Loïc or Martian or Ludowig or Ludwig or Louison",
+"Natacha or Césaire or César",
+"Amédée or Monique",
+"Augustin or Augustine or Hermance or Hermès",
+"Sabine or Sabina or Sabrina",
+"Fiacre or Sacha",
+"Aristide",
+
+"Gilles or Gillette or Josué",
+"Ingrid",
+"Grégoire or Grégory",
+"Iris or Marin or Moïse or Rosalie",
+"Raïssa",
+"Bertin or Bertrand or Bertrande or Donat or Eva or Eve or Evelyne",
+"Reine or Régine or Réjane",
+"Hadrien or Nativité or Adrien or Adrienne or Adrian",
+"Alain or Omer",
+"Aubert or Inès",
+"Adelphe or Vinciane",
+"Apollinaire",
+"Amé or Aimé or Aymé or Dante",
+"Sainte Croix",
+"Dolorès or Lola or Lolita or Roland",
+"Corneille or Cornille or Cyprien or Edith or Ludmilla",
+"Hildegarde or Lambert or Réginald or Renald or Renaud or Ronald",
+"Ariane or Nadège or Nadia or Sonia or Véra",
+"Emilie or Janvier or Amélie",
+"Davy or Eustache",
+"Deborah or Mathieu or Matthieu",
+"Maurice or Mauricette or Morvan",
+"Constant",
+"Andoche or Thècle",
+"Hermann",
+"Côme / Dam or Côme or Cosme or Damien",
+"St Vincent de Paul or Vincent",
+"Venceslas or Wenceslas",
+"Gabriel or Gabrielle or Gaby or Michaël or Michel or Michelle or Michèle or Miguel or Raphaël or Raphaëlle",
+"Gérôme or Géromina or Jérôme",
+
+"Ariel or Arielle or Thérèse or Uriel or Urielle",
+"Léger",
+"Blanche or Blanchette or Candida or Candide or Candide or Gérard or Gérardin or Gérardine",
+"Aure or Francelin or Francis or Francisque or Franck or François or Frankie or Franklin or Frantz or Orianne or Paco or Soizic",
+"Bluette or Fleur or Capucine or Dahlia or Fleur or Foy or Hortense or Jasmine or Myrtille or Pâquerette or Pervenche or Placide or Violette",
+"Bruno",
+"Gustave or Serge or Sergine",
+"Pélagie",
+"Denis or Sara or Sibille or Sybil",
+"Ghislain or Ghislaine or Virgile",
+"Firmin or Soledad",
+"Séraphin or Séraphine or Wilfried",
+"Géraud",
+"Calliste or Céleste or Céleste or Gwendoline or Juste",
+"Aurélie or Aurélia or Térésa or Thérèse",
+"Bertin or Edwige or Gall or Hedwige or Perlette",
+"Baudouin or Solenne or Soline or Zélie",
+"Aimable or Amable or Gwenn or Luc or Lucas",
+"René or Renée or Rénata",
+"Adelin or Adeline or Alin or Aline or Lina or Linda or Line",
+"Céline or Ursula or Ursule or Gélase",
+"Elodie or Salomé",
+"Jean or Régina or Régine or Réjane",
+"Florentin or Florentine or Magloire",
+"Crépin or Daria or Darius or Doria or Dorian or Enguerran",
+"Dimitri or Évariste",
+"Emeline",
+"Jude or Simon or Simone or Thaddée",
+"Narcisse",
+"Bienvenue or Bienvenue",
+"Quentin or Wolfgang",
+
+"Toussaint or Toussainte or Adam or Aglaée or Anaël or Annibal or Arabelle or Archambaud or Archibald or Balthazar or Clodomir or Colas or Daphné or Diomède or Harold or Hector or Hectorine or Hégisippe or Héloïse or Hercule or Homère or Horace or Kléber or Mathurin or Mathurine or Mercédès or Pénélope or Quasimodo",
+"Défunts",
+"Gwennaël or Gwennaëlle or Hubert or Huberte or Malachie",
+"Amance or Aymeric or Carl or Carlos or Charlemagne or Charles or Charley or Charly or Emeric or Imré or Jessica or Jessy",
+"Sylvette or Sylviane or Sylvia or Sylvie or Zacharie",
+"Berthilde or Bertille or Léo or Léonard",
+"Carine or Ernest or Ernestine or Karell or Karen or Karina or Karine",
+"Dora or Dorine or Geoffrey or Geoffroy or Godefroy",
+"Maturin or Théodora or Théodore",
+"Léon or Léone or Léonie or Léonilde or Léontine or Lionel or Noé or Pulchérie",
+"Armistice 1918 or Martin or Vérane",
+"Christian or Emilien or Tristan",
+"Brice or Diégo",
+"Sidoine or Sidonie",
+"Albéric or Albert or Alberta or Alberte or Albertina or Albertine or Arthur or Léopold or Léopoldine or Malo or Ninon or Victoire or Victoria",
+"Daisy or Gertrude or Magali or Maggy or Marguerite",
+"Aude",
+"Tanguy",
+"Edma or Edme or Edmée or Edmond or Edmonde or Octave or Octavie",
+"Christ-Roi",
+"Cécile or Célia or Sheila",
+"Clément or Clémentine or Colomban or Rachilde",
+"Flora or Flore",
+"Cathel or Catherine or Katel or Katia or Katy or Katty or Ketty",
+"Conrad or Delphine or Kurt",
+"Astrid or Séverin or Séverine",
+"Avent",
+"Saturnin",
+"André or Andréa or Andrée",
+"Éloi or Florence or Tudal",
+
+"Florence",
+"Bibiane or Vivette or Viviane",
+"Xavier",
+"Ada or Adnette or Barbara or Barbe or Barberine",
+"Gérald or Géraldine",
+"Colin or Coline or Colinette or Nicolas or Colin",
+"Ambroise",
+"Immaculée Conception or Elfi or Elfried",
+"Fourier or Léocadie or Pierre",
+"Romaric",
+"Damase or Daniel or Danièle or Danielle or Danitza or Danny",
+"Chantal or Corentin or Corentine",
+"Aurore or Jocelyne or Josse or Josselin or Josseline or Luce or Lucette or Lucia or Lucie",
+"Odile",
+"Ninon",
+"Adelaïde or Alice or Chrétien or Chrétienne",
+"Gaël or Gaëla or Gaëlle or Judicaël or Tessa",
+"Briac or Gatien",
+"Urbain",
+"Achille or Isaac or Jacob or Théophile or Zéphyrin or Zéphyrine",
+"Pierre",
+"Xavière",
+"Armand",
+"Adèle or Delphin",
+"Noël or Noëlie or Noëlla or Noëlle or Emmanuel or Emmanuelle or Manoël or Manuel or Manuelle or Nello",
+"Sainte or Famille or Esteban or Etienne or Etiennette or Fanny or Stéphane or Stéphane or Stéphanette or Stéphanie or Stéphen or Steve",
+"Evelyne or Fabiola or Hans or Ivan or Jack or Jean or Jehan or John or Johnny or Yann or Yannick or Yoann or Yvain or Yvan",
+"Gaspard or Innocent",
+"David",
+"Roger",
+"Colomba or Colombe or Silvestre or Sylvestre" };
+
+#endif \ No newline at end of file
diff --git a/plugins/!NotAdopted/name_day/utils/string_tokenizer.h b/plugins/!NotAdopted/name_day/utils/string_tokenizer.h
new file mode 100644
index 0000000000..3f8cf33200
--- /dev/null
+++ b/plugins/!NotAdopted/name_day/utils/string_tokenizer.h
@@ -0,0 +1,40 @@
+/**
+ * @brief tokenizer
+ *
+ */
+#ifndef string_tokenizer_h
+#define string_tokenizer_h
+
+#include <string>
+#include <vector>
+using namespace std;
+
+static vector<string> string_tokenizer(const string &base_string, const string &delims)
+{
+ vector<string> tokens;
+
+ // Skip delimiters at beginning.
+ string::size_type last_pos = base_string.find_first_not_of(delims, 0);
+
+ // find first "non-delimiter".
+ string::size_type pos = base_string.find_first_of(delims, last_pos);
+
+ while (string::npos != pos || string::npos != last_pos) {
+
+ // found a token, add it to the vector.
+
+ tokens.push_back(base_string.substr(last_pos, pos - last_pos));
+
+ // skip delimiters.
+
+ last_pos = base_string.find_first_not_of(delims, pos);
+
+ // find next "non-delimiter"
+ pos = base_string.find_first_of(delims, last_pos);
+ }
+
+ return tokens;
+}
+
+
+#endif \ No newline at end of file