Commit 57df7a7897f2fe75e9847681380a00b4e87b86e9

Authored by Leonardo Domingues
1 parent f94789e8
Exists in master

Corrige problemas na geração da biblioteca (.so) e usa uma solução de captura do…

… clipboard com o utilitário XSel.
FIXME 0 → 100644
... ... @@ -0,0 +1,6 @@
  1 +------------------------------------------------------------
  2 + LISTA DE PROBLEMAS A SEREM RESOLVIDOS
  3 +------------------------------------------------------------
  4 +
  5 +1. Ao selecionar um texto de uma palavra por linha no editor gedit, por exemplo, o sistema só captura a primeira;
  6 +2.
... ...
Makefile
... ... @@ -15,32 +15,25 @@
15 15  
16 16 include Makefile.top
17 17  
18   -MODULE = vlibras_desktop
19   -LIBNAME = CorePlugin
  18 +MODULE = vlibras_desktop
  19 +LIBNAME = CorePlugin
20 20  
21   -VERSION = 0.2
  21 +VERSION = 0.2
22 22  
23   -CFLAGS = \
  23 +CFLAGS =\
24 24 -I$(INCDIR)\
25   - -I/usr/include/python2.7
  25 + `python-config --cflags`\
26 26  
27   -CFLAGS += -m64 -g -fPIC
28   -
29   -LDFLAGS = \
30   - -L/usr/lib/python2.7/config\
31   - -lpthread\
32   - -ldl\
33   - -lutil\
34   - -lm\
35   - -lpython2.7
  27 +LDFLAGS =\
  28 + `python-config --ldflags`
36 29  
37 30 HEADERS = \
38   - py_tradutor.h\
39   - core_plugin.h
  31 + py_tradutor.h\
  32 + core_plugin.h
40 33  
41 34 SOURCES = \
42   - py_tradutor.cpp\
43   - core_plugin.cpp
  35 + $(SRCDIR)/py_tradutor.cpp\
  36 + $(SRCDIR)/core_plugin.cpp
44 37  
45 38 .SUFFIXES: .cpp .o .h
46 39  
... ...
Makefile.build
... ... @@ -3,22 +3,17 @@ LIB = lib$(LIBNAME)-$(VERSION).so
3 3  
4 4 all: shared
5 5  
6   -shared: $(addprefix $(SRCDIR),$(OBJS))
  6 +shared:
7 7 @mkdir $(PLUGINDIR) > /dev/null 2>&1 && \
8 8 echo "Create directory $(PLUGINDIR)... $(OK)" || echo -n ""
9 9 @echo -n Linking $(LIB) ...
10   - @$(CC) -shared -o $(PLUGINDIR)$(LIB) $(addprefix $(SRCDIR),$(OBJS)) $(LDFLAGS) || \
  10 + @$(CXX) -shared -fPIC $(CFLAGS) $(SOURCES) $(LDFLAGS) -o $(PLUGINDIR)/$(LIB) || \
11 11 (echo " $(FAILED)"; exit 1;)
12 12 @cd $(PLUGINDIR); \
13 13 ln -f -s $(LIB) lib$(LIBNAME).so; \
14 14 cd .. && echo " $(OK)" || (echo " $(FAILED)"; exit 1;)
15 15  
16   -%.o: %.cpp
17   - @echo -n Compiling file $(notdir $<) to $(notdir $@) ...
18   - @$(CXX) $(CFLAGS) -c $< -o $@ && \
19   - echo " $(OK)" || (echo " $(FAILED)"; exit 1;)
20   -
21 16 clean:
22 17 @echo -n Cleaning...
23 18 @rm -rf $(addprefix $(SRCDIR),$(OBJS)) $(PLUGINDIR) 2> /dev/null && \
24   - echo " $(OK)" || (echo " $(FAILED)"; exit 1;)
  19 + echo " $(OK)" || (echo " $(FAILED)"; exit 1;)
... ...
Makefile.top
... ... @@ -3,11 +3,11 @@ INSTALL_PATH = .
3 3 CC = gcc
4 4 CXX = g++
5 5  
6   -INCDIR = ./include/
7   -SRCDIR = ./src/
8   -TESTSDIR = ./tests/
9   -PLUGINDIR = ./plugin/
10   -DOCDIR = ./doc/
  6 +INCDIR = ./include
  7 +SRCDIR = ./src
  8 +TESTSDIR = ./tests
  9 +PLUGINDIR = ./plugin
  10 +DOCDIR = ./doc
11 11  
12 12 OK = \033[30;32mOK\033[m
13 13 FAILED = \033[30;31mFAILED\033[m
... ...
README
... ... @@ -7,6 +7,7 @@
7 7 #
8 8 # *****************************************************************
9 9  
  10 +
10 11 -------------------------------------------------------------------
11 12 Compile and generate the shared library to VLibras-Core-Desktop
12 13 -------------------------------------------------------------------
... ... @@ -17,4 +18,5 @@ $ make
17 18 Clean object and shared library files
18 19 -------------------------------------------------------------------
19 20  
20   -$ make clean
21 21 \ No newline at end of file
  22 +$ make clean
  23 +
... ...
include/core_plugin.h
... ... @@ -13,24 +13,21 @@
13 13 * \date Janeiro 2015
14 14 */
15 15  
16   -#ifndef COREPLUGIN_H
17   -#define COREPLUGIN_H
  16 +#ifndef COREPLUGIN_H_
  17 +#define COREPLUGIN_H_
18 18  
19   -#include "py_tradutor.h"
20 19 #include <string>
21   -#include <stdio.h>
22   -
23   -/** \brief Encapsulamento do plugin
24   - *
25   - * Encapsula todo o funcionamento do core tornando-o acessível
26   - * a qualquer outra aplicação que importe o plugin gerado.
27   - * As funções de aqui declaradas realizam todas as ações
28   - * necessarias ao usuário que deseja utilizar este plugin.
29   - */
  20 +#include <stdio.h>
  21 +#include "py_tradutor.h"
  22 +
  23 +#define MAX_BUFFER_SELECTION 1024
  24 +
  25 +#ifdef __cplusplus
30 26 extern "C"
31 27 {
32   - static PyTradutor * tradutor = new PyTradutor();
  28 +#endif
33 29  
  30 + PyTradutor *tradutor;
34 31  
35 32 /** \brief Inicializa o ambiente core
36 33 *
... ... @@ -55,6 +52,11 @@ extern &quot;C&quot;
55 52 * das funcionalidades do core na aplicação.
56 53 */
57 54 int coreFinalize();
  55 +
  56 + char * get_text_selection();
  57 +
  58 +#ifdef __cplusplus
58 59 }
  60 +#endif
59 61  
60   -#endif /* COREPLUGIN_H */
61 62 \ No newline at end of file
  63 +#endif // COREPLUGIN_H_
62 64 \ No newline at end of file
... ...
include/py_tradutor.h
... ... @@ -16,7 +16,7 @@
16 16 #ifndef PYTRADUTOR_H
17 17 #define PYTRADUTOR_H
18 18  
19   -#include <Python.h>
  19 +#include "Python.h"
20 20  
21 21 /** \brief Classe para execução do Tradutor
22 22 *
... ...
src/core_plugin.cpp
... ... @@ -15,34 +15,38 @@
15 15  
16 16 #include "core_plugin.h"
17 17  
  18 +
18 19 int coreInitialize()
19 20 {
20   - // Initialize the translater (python) enviroment
21   - //tradutor = new PyTradutor();
22   - printf("[INFO]: CorePlugin initialized\n");
  21 + tradutor = new PyTradutor();
23 22 return 1;
24 23 }
25 24  
26 25 const char* coreExecute()
27 26 {
28   - printf("[INFO]: CorePlugin running\n");
29   - // Gets the content on Pasteboard and pass it as argument for the translater
30   - //std::string pasteboardContent = Pasteboard::getGeneralContent();
31   - printf("[WAR]: *** XSel not found!\n");
32   - char* str = new char[10];
33   - strcpy(str, "teste da biblioteca do sistema");
34   - std::string traducao = tradutor->convertStringToGlosa((const char*) str);
35   -
36   - // Puts the translater return in lowercase and convert it as char pointer to be returned
37   - //std::transform(traducao.begin(), traducao.end(), traducao.begin(), ::tolower);
38   - return traducao.c_str();
  27 +
  28 + return tradutor->convertStringToGlosa((const char*) get_text_selection());
39 29 }
40 30  
41 31 int coreFinalize()
42 32 {
43   - // Finalize the translater
44   - if (tradutor)
45   - delete tradutor;
46   - printf("[INFO]: CorePlugin finalized\n");
47   - return 1;
  33 + if (!tradutor)
  34 + return -1;
  35 + delete tradutor;
  36 + return 1;
  37 +}
  38 +
  39 +char * get_text_selection()
  40 +{
  41 + FILE *comm_file_p = popen("xsel -o ", "r");
  42 + if (!comm_file_p)
  43 + {
  44 + /* FIXME: add exception */
  45 + return NULL;
  46 + }
  47 + char line_buff [MAX_BUFFER_SELECTION];
  48 + char *output_str_p = fgets(line_buff, sizeof(line_buff), comm_file_p);
  49 + pclose(comm_file_p);
  50 +
  51 + return output_str_p;
48 52 }
49 53 \ No newline at end of file
... ...
src/main.cpp
... ... @@ -1,53 +0,0 @@
1   -//*****************************************************************
2   -/*
3   - VLibras: Automatic pasteboardContents translator from Portuguese to LIBRAS
4   -
5   - Copyright (c) 2015 Gustavo Sobral, Erickson Silva, Leonardo Araújo
6   - VLibras-Core group at LAViD, Federal University of Paraiba
7   -*/
8   -//*****************************************************************
9   -
10   -/**
11   - * \file main.cpp
12   - * \author Gustavo Sobral, Leonardo Araújo
13   - * \date Janeiro 2015
14   - */
15   -
16   -//#include <py_tradutor.h>
17   -#include <core_plugin.h>
18   -
19   -#include <iostream>
20   -#include <fstream>
21   -#include <string>
22   -
23   -int main()
24   -{
25   -
26   - // Inicializa o tradutor
27   - //PyTradutor *tradutorTest;
28   - //tradutorTest = new PyTradutor();
29   -
30   - // Pega o conteúdo do clipboard e salva em `pasteboardContent`
31   - //std::string pasteboardContent = Pasteboard::getGeneralContent();
32   - // Traduz o conteúdo do clipboard em `pasteboardContent` para a string `traducao`
33   - //char* str = new char[10];
34   - //strcpy(str, "o gato comeu o rato");
35   - //std::string traducao = tradutorTest->convertStringToGlosa(str);
36   -
37   - // [LOG] Exibe o conteudo do buffer de clipboard em `pasteboardContent` e traduz para glosa salvando seu resultado em `traducao`
38   - //std::cout << "[[ Conteudo em memoria ]]\n" << str << std::endl;
39   - //std::cout << "[[ Tradução ]]\n" << traducao << std::endl;
40   -
41   - //std::cout << "\n##### ##### #####" << std::endl;
42   -
43   - // Inicializa o plugin
44   - std::cout << "[[Initialize]] | " << coreInitialize() << std::endl;
45   - // Executa o CorePlugin
46   - std::cout << "[[Execute]] | " << coreExecute() << std::endl;
47   - // Finaliza o ambiente
48   - std::cout << "[[Finalize]] | " << coreFinalize() << std::endl;
49   -
50   - // Exclui o que foi utilizado
51   - // delete tradutorTest;
52   - return 0;
53   -}
54 0 \ No newline at end of file
src/py_tradutor.cpp
... ... @@ -18,7 +18,11 @@
18 18 PyTradutor::PyTradutor()
19 19 {
20 20 Py_Initialize();
21   - pName = PyString_FromString("ModuleTranslate");
  21 + // Imports the Aelius and Tradutor inside the Unity python interpreter
  22 + PyRun_SimpleString("import sys, os\n"
  23 + "sys.path.append(os.path.expanduser('~') + '/vlibras-libs/tradutor')\n"
  24 + "sys.path.append(os.path.expanduser('~') + '/vlibras-libs')\n");
  25 + pName = PyString_FromString("PortGlosa");
22 26 assert(pName!=NULL);
23 27 pModule = PyImport_Import(pName);
24 28 PyErr_Print();
... ... @@ -26,7 +30,7 @@ PyTradutor::PyTradutor()
26 30 pDict = PyModule_GetDict(pModule);
27 31 PyErr_Print();
28 32 assert(pDict!=NULL);
29   - pFunc = PyDict_GetItemString(pDict, "iniciar");
  33 + pFunc = PyDict_GetItemString(pDict, "traduzir");
30 34 PyErr_Print();
31 35 assert(pFunc!=NULL);
32 36  
... ...
test/main.cpp 0 → 100644
... ... @@ -0,0 +1,53 @@
  1 +//*****************************************************************
  2 +/*
  3 + VLibras: Automatic pasteboardContents translator from Portuguese to LIBRAS
  4 +
  5 + Copyright (c) 2015 Gustavo Sobral, Erickson Silva, Leonardo Araújo
  6 + VLibras-Core group at LAViD, Federal University of Paraiba
  7 +*/
  8 +//*****************************************************************
  9 +
  10 +/**
  11 + * \file main.cpp
  12 + * \author Gustavo Sobral, Leonardo Araújo
  13 + * \date Janeiro 2015
  14 + */
  15 +
  16 +#include <py_tradutor.h>
  17 +//#include <core_plugin.h>
  18 +
  19 +#include <iostream>
  20 +#include <fstream>
  21 +#include <string>
  22 +
  23 +int main()
  24 +{
  25 +
  26 + // Inicializa o tradutor
  27 + PyTradutor *tradutorTest;
  28 + tradutorTest = new PyTradutor();
  29 +
  30 + // Pega o conteúdo do clipboard e salva em `pasteboardContent`
  31 + //std::string pasteboardContent = Pasteboard::getGeneralContent();
  32 + // Traduz o conteúdo do clipboard em `pasteboardContent` para a string `traducao`
  33 + char* str = new char[10];
  34 + strcpy(str, "o gato comeu o rato");
  35 + std::string traducao = tradutorTest->convertStringToGlosa(str);
  36 +
  37 + // [LOG] Exibe o conteudo do buffer de clipboard em `pasteboardContent` e traduz para glosa salvando seu resultado em `traducao`
  38 + std::cout << "[[ Conteudo em memoria ]]\n" << str << std::endl;
  39 + std::cout << "[[ Tradução ]]\n" << traducao << std::endl;
  40 +
  41 + //std::cout << "\n##### ##### #####" << std::endl;
  42 +
  43 + // Inicializa o plugin
  44 + //std::cout << "[[Initialize]] | " << coreInitialize() << std::endl;
  45 + // Executa o CorePlugin
  46 + //std::cout << "[[Execute]] | " << coreExecute() << std::endl;
  47 + // Finaliza o ambiente
  48 + //std::cout << "[[Finalize]] | " << coreFinalize() << std::endl;
  49 +
  50 + // Exclui o que foi utilizado
  51 + // delete tradutorTest;
  52 + return 0;
  53 +}
... ...