Skip to content

Instantly share code, notes, and snippets.

@thypon
Last active January 7, 2021 21:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thypon/cc92fb6ca8fc6d658fe01050f44a4261 to your computer and use it in GitHub Desktop.
Save thypon/cc92fb6ca8fc6d658fe01050f44a4261 to your computer and use it in GitHub Desktop.
Italianize ZNC Module
/*
* Copyright (C) 2021 Andrea Brancaleoni ( @nJoyneer / https://github.com/thypon )
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <znc/Client.h>
#include <znc/Chan.h>
#include <znc/Modules.h>
#include<algorithm>
using std::array;
const std::array<std::pair<CString, CString>, 18+37+5> REPLACEMENTS = {{
// Italianize accents 18
{ CString("e`"), CString("è") },
{ CString("a`"), CString("à") },
{ CString("i`"), CString("ì") },
{ CString("o`"), CString("ò") },
{ CString("u`"), CString("ù") },
{ CString("e'"), CString("è") },
{ CString("a'"), CString("à") },
{ CString("i'"), CString("ì") },
{ CString("o'"), CString("ò") },
{ CString("u'"), CString("ù") },
{ CString(" nè"), CString(" né") },
{ CString(" sè"), CString(" sé") },
{ CString("chè"), CString("ché") },
{ CString("trè"), CString("tré") },
{ CString("potè"), CString("poté") },
{ CString("ripetè"), CString("ripeté") },
{ CString("vicerè"), CString("viceré") },
{ CString("nontiscordardimè"), CString("nontiscordardimé") },
// Slack Emoticons 37
{ CString(" <3"), CString(" \xE2\x9D\xA4") },
{ CString(" </3"), CString(" \xF0\x9F\x92\x94") },
{ CString(" 8)"), CString(" \xF0\x9F\x98\x8E") },
{ CString(" D:"), CString(" \xF0\x9F\x98\xB1") },
{ CString(" :|"), CString(" \xF0\x9F\x98\x91") },
{ CString(" :o)"), CString(" \xF0\x9F\x90\xB5") },
{ CString(" =)"), CString(" \xF0\x9F\x98\x83") },
{ CString(" =-)"), CString(" \xF0\x9F\x98\x83") },
{ CString(" :D"), CString(" \xF0\x9F\x98\x84") },
{ CString(" :-)"), CString(" \xF0\x9F\x98\x84") },
{ CString(" ;D"), CString(" \xF0\x9F\x98\x89") },
{ CString(" ;-)"), CString(" \xF0\x9F\x98\x89") },
{ CString(" :>"), CString(" \xF0\x9F\x98\x86") },
{ CString(" :->"), CString(" \xF0\x9F\x98\x86") },
{ CString(" :o"), CString(" \xF0\x9F\x98\xB2") },
{ CString(" :-o"), CString(" \xF0\x9F\x98\xB2") },
{ CString(" >:("), CString(" \xF0\x9F\x98\xA0") },
{ CString(" >:-("), CString(" \xF0\x9F\x98\xA0") },
{ CString(" :)"), CString(" \xF0\x9F\x98\x8A") },
{ CString(" (:"), CString(" \xF0\x9F\x98\x8A") },
{ CString(" :-)"), CString(" \xF0\x9F\x98\x8A") },
{ CString(" :("), CString(" \xF0\x9F\x98\x9E") },
{ CString(" ):"), CString(" \xF0\x9F\x98\x9E") },
{ CString(" :-("), CString(" \xF0\x9F\x98\x9E") },
{ CString(" :/"), CString(" \xF0\x9F\x98\x9E") },
{ CString(" :-/"), CString(" \xF0\x9F\x98\x9E") },
{ CString(" :\\"), CString(" \xF0\x9F\x98\x9E") },
{ CString(" :-\\"), CString(" \xF0\x9F\x98\x9E") },
{ CString(" :p"), CString(" \xF0\x9F\x98\x9B") },
{ CString(" :-p"), CString(" \xF0\x9F\x98\x9B") },
{ CString(" :-b"), CString(" \xF0\x9F\x98\x9B") },
{ CString(" ;p"), CString(" \xF0\x9F\x98\x9C") },
{ CString(" ;b"), CString(" \xF0\x9F\x98\x9C") },
{ CString(" ;-b"), CString(" \xF0\x9F\x98\x9C") },
{ CString(" ;-b"), CString(" \xF0\x9F\x98\x9C") },
{ CString(" :*"), CString(" \xF0\x9F\x92\x8B") },
{ CString(" :-*"), CString(" \xF0\x9F\x92\x8B") },
// Nice to have emojis 5
{ CString(" +1"), CString(" \xF0\x9F\x91\x8D") },
{ CString(" -1"), CString(" \xF0\x9F\x91\x8E") },
{ CString(" (c)"), CString(" \xC2\xA9") },
{ CString(" (r)"), CString(" \xC2\xAE") },
{ CString(" (tm)"), CString(" \xE2\x84\xA2") }
}};
class CItalianizeMod : public CModule {
public:
MODCONSTRUCTOR(CItalianizeMod) {}
EModRet OnUserMsg(CString& sTarget, CString& sMessage) {
std::for_each(REPLACEMENTS.begin(), REPLACEMENTS.end(), [&sMessage](std::pair<CString, CString> p) { sMessage.Replace(p.first, p.second); });
return CONTINUE;
}
};
template <>
void TModInfo<CItalianizeMod>(CModInfo& Info) {
Info.SetWikiPage("Italianize");
Info.SetHasArgs(true);
}
NETWORKMODULEDEFS(CItalianizeMod, "Italianize words that contains apices")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment