From c1e7e096d0e9d7f1c556a7e72692255fd2afd759 Mon Sep 17 00:00:00 2001 From: Tony Olagbaiye Date: Fri, 11 May 2018 22:04:06 +0100 Subject: [PATCH] Add perl emoji generation as option instead of python --- Makefile | 9 +++++- debian/control | 3 +- slack-emoji.pl | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++ slack-emoji.py | 3 +- 4 files changed, 92 insertions(+), 3 deletions(-) create mode 100644 slack-emoji.pl diff --git a/Makefile b/Makefile index 621ad4a..9480a0f 100644 --- a/Makefile +++ b/Makefile @@ -7,7 +7,7 @@ endif RM=rm -f CFLAGS+=$(DBGCFLAGS) -fno-omit-frame-pointer -fPIC -std=gnu99 -g -Wall -Wextra -Werror-implicit-function-declaration -Wno-missing-field-initializers -Ilibwebsockets/include -Ijson-c LDFLAGS+=-shared -g $(DBGCFLAGS) $(DBGLDFLAGS) -LDLIBS=-Wl,--push-state,--as-needed -lgnutls +LDLIBS=-lgnutls PREFIX ?= /usr/local LIBDIR ?= $(PREFIX)/lib @@ -47,8 +47,15 @@ all: libwebsockets/lib/libwebsockets.a json-c/libjson-c.a weechat-slack weechat-slack: $(OBJS) $(CXX) $(LDFLAGS) -o slack.so $(OBJS) $(LDLIBS) +ifeq ($(shell which python),) +slack-emoji.inc: slack-emoji.pl + cpan LWP::Simple + cpan JSON + perl slack-emoji.pl > slack-emoji.inc +else slack-emoji.inc: slack-emoji.py env python3 slack-emoji.py > slack-emoji.inc +endif libwebsockets/lib/libwebsockets.a: cd libwebsockets && env CFLAGS= LDFLAGS= cmake -DLWS_STATIC_PIC=ON -DLWS_WITH_SHARED=OFF -DLWS_WITHOUT_TESTAPPS=ON -DLWS_WITH_LIBEV=OFF -DLWS_WITH_LIBUV=OFF -DLWS_WITH_LIBEVENT=OFF -DCMAKE_BUILD_TYPE=DEBUG . diff --git a/debian/control b/debian/control index 5d845d0..71cf7cc 100644 --- a/debian/control +++ b/debian/control @@ -6,7 +6,8 @@ Build-Depends: cmake, pkg-config, debhelper (>= 11), libssl-dev, - libgnutls28-dev + libgnutls28-dev, + perl Standards-Version: 4.0.0 Homepage: https://weechat.org/ Vcs-Git: https://github.com/bqv/weechat-slack.git diff --git a/slack-emoji.pl b/slack-emoji.pl new file mode 100644 index 0000000..4d500fb --- /dev/null +++ b/slack-emoji.pl @@ -0,0 +1,80 @@ +#!/usr/bin/perl -l + +use strict; +use warnings; + +use LWP::Simple; +use Data::Dumper; +use JSON qw (decode_json); +use List::Util qw (max); + +our ($json, @array); + +$json = get('https://raw.githubusercontent.com/iamcal/emoji-data/master/emoji.json'); +@array = @{ decode_json($json) }; + +my $maxtexts = max (map { 1 + @{$_} } (grep defined, map { $_->{'texts'} } @array)); +my $maxnames = max (map { 1 + @{$_} } (grep defined, map { $_->{'short_names'} } @array)); + +print " +#include + +#define MAX_TEXTS $maxtexts +#define MAX_NAMES $maxnames + +struct t_slack_emoji_by_name { + const char *name; + const char *unicode; + const char *text_to; + const char *text_from[MAX_TEXTS]; +}; + +struct t_slack_emoji_by_text { + const char *text; + const char *unicode; + const char *name_to; + const char *name_from[MAX_NAMES]; +}; +"; + +print "static struct t_slack_emoji_by_name slack_emoji_by_name[] ="; +my $c = '{'; +my %byname = map { my $o = $_; map {($_, $o)} @{$o->{'short_names'}} } @array; +my @sortedbyname = sort { $a cmp $b } keys %byname; +foreach my $name (@sortedbyname) +{ + my $_0 = "\"$name\""; + my @_1 = split /-/, $byname{$name}->{'unified'}; + my $_1 = "\""; + foreach my $codepoint (@_1) { $_1 .= "\\u$codepoint" }; + $_1 .= "\""; + my $_2 = $byname{$name}->{'text'}; + if (defined $_2) { $_2 = "\"$_2\"" } else { $_2 = "NULL" }; + my $_3 = "{"; + foreach my $text (@{$byname{$name}->{'texts'}}) { if (defined $text) { $_3 .= "\"$text\", " } }; + $_3 .= "NULL}"; + print "$c { $_0, $_1, $_2, $_3 }"; + $c = ','; +} +print "};"; +print ""; +print "static struct t_slack_emoji_by_text slack_emoji_by_text[] ="; +$c = '{'; +my %bytext = map { my $o = $_; map {($_, $o)} @{$o->{'texts'}} } @array; +my @sortedbytext = sort { $a cmp $b } keys %bytext; +foreach my $text (@sortedbytext) +{ + my $_0 = "\"$text\""; + my @_1 = split /-/, $bytext{$text}->{'unified'}; + my $_1 = "\""; + foreach my $codepoint (@_1) { $_1 .= "\\u$codepoint" }; + $_1 .= "\""; + my $_2 = $bytext{$text}->{'short_name'}; + if (defined $_2) { $_2 = "\"$_2\"" } else { $_2 = "NULL" }; + my $_3 = "{"; + foreach my $name (@{$bytext{$text}->{'short_names'}}) { if (defined $name) { $_3 .= "\"$name\", " } }; + $_3 .= "NULL}"; + print "$c { $_0, $_1, $_2, $_3 }"; + $c = ','; +} +print "};"; diff --git a/slack-emoji.py b/slack-emoji.py index f6fcbd9..36e3eef 100755 --- a/slack-emoji.py +++ b/slack-emoji.py @@ -1,4 +1,5 @@ -#!/usr/bin/env python3 +#!/usr/bin/python +# Compatible with python v2 and v3 import requests import json