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 @@ @@ -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.
@@ -15,32 +15,25 @@ @@ -15,32 +15,25 @@
15 15
16 include Makefile.top 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 -I$(INCDIR)\ 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 HEADERS = \ 30 HEADERS = \
38 - py_tradutor.h\  
39 - core_plugin.h 31 + py_tradutor.h\
  32 + core_plugin.h
40 33
41 SOURCES = \ 34 SOURCES = \
42 - py_tradutor.cpp\  
43 - core_plugin.cpp 35 + $(SRCDIR)/py_tradutor.cpp\
  36 + $(SRCDIR)/core_plugin.cpp
44 37
45 .SUFFIXES: .cpp .o .h 38 .SUFFIXES: .cpp .o .h
46 39
Makefile.build
@@ -3,22 +3,17 @@ LIB = lib$(LIBNAME)-$(VERSION).so @@ -3,22 +3,17 @@ LIB = lib$(LIBNAME)-$(VERSION).so
3 3
4 all: shared 4 all: shared
5 5
6 -shared: $(addprefix $(SRCDIR),$(OBJS)) 6 +shared:
7 @mkdir $(PLUGINDIR) > /dev/null 2>&1 && \ 7 @mkdir $(PLUGINDIR) > /dev/null 2>&1 && \
8 echo "Create directory $(PLUGINDIR)... $(OK)" || echo -n "" 8 echo "Create directory $(PLUGINDIR)... $(OK)" || echo -n ""
9 @echo -n Linking $(LIB) ... 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 (echo " $(FAILED)"; exit 1;) 11 (echo " $(FAILED)"; exit 1;)
12 @cd $(PLUGINDIR); \ 12 @cd $(PLUGINDIR); \
13 ln -f -s $(LIB) lib$(LIBNAME).so; \ 13 ln -f -s $(LIB) lib$(LIBNAME).so; \
14 cd .. && echo " $(OK)" || (echo " $(FAILED)"; exit 1;) 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 clean: 16 clean:
22 @echo -n Cleaning... 17 @echo -n Cleaning...
23 @rm -rf $(addprefix $(SRCDIR),$(OBJS)) $(PLUGINDIR) 2> /dev/null && \ 18 @rm -rf $(addprefix $(SRCDIR),$(OBJS)) $(PLUGINDIR) 2> /dev/null && \
24 - echo " $(OK)" || (echo " $(FAILED)"; exit 1;) 19 + echo " $(OK)" || (echo " $(FAILED)"; exit 1;)
@@ -3,11 +3,11 @@ INSTALL_PATH = . @@ -3,11 +3,11 @@ INSTALL_PATH = .
3 CC = gcc 3 CC = gcc
4 CXX = g++ 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 OK = \033[30;32mOK\033[m 12 OK = \033[30;32mOK\033[m
13 FAILED = \033[30;31mFAILED\033[m 13 FAILED = \033[30;31mFAILED\033[m
@@ -7,6 +7,7 @@ @@ -7,6 +7,7 @@
7 # 7 #
8 # ***************************************************************** 8 # *****************************************************************
9 9
  10 +
10 ------------------------------------------------------------------- 11 -------------------------------------------------------------------
11 Compile and generate the shared library to VLibras-Core-Desktop 12 Compile and generate the shared library to VLibras-Core-Desktop
12 ------------------------------------------------------------------- 13 -------------------------------------------------------------------
@@ -17,4 +18,5 @@ $ make @@ -17,4 +18,5 @@ $ make
17 Clean object and shared library files 18 Clean object and shared library files
18 ------------------------------------------------------------------- 19 -------------------------------------------------------------------
19 20
20 -$ make clean  
21 \ No newline at end of file 21 \ No newline at end of file
  22 +$ make clean
  23 +
include/core_plugin.h
@@ -13,24 +13,21 @@ @@ -13,24 +13,21 @@
13 * \date Janeiro 2015 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 #include <string> 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 extern "C" 26 extern "C"
31 { 27 {
32 - static PyTradutor * tradutor = new PyTradutor(); 28 +#endif
33 29
  30 + PyTradutor *tradutor;
34 31
35 /** \brief Inicializa o ambiente core 32 /** \brief Inicializa o ambiente core
36 * 33 *
@@ -55,6 +52,11 @@ extern &quot;C&quot; @@ -55,6 +52,11 @@ extern &quot;C&quot;
55 * das funcionalidades do core na aplicação. 52 * das funcionalidades do core na aplicação.
56 */ 53 */
57 int coreFinalize(); 54 int coreFinalize();
  55 +
  56 + char * get_text_selection();
  57 +
  58 +#ifdef __cplusplus
58 } 59 }
  60 +#endif
59 61
60 -#endif /* COREPLUGIN_H */  
61 \ No newline at end of file 62 \ No newline at end of file
  63 +#endif // COREPLUGIN_H_
62 \ No newline at end of file 64 \ No newline at end of file
include/py_tradutor.h
@@ -16,7 +16,7 @@ @@ -16,7 +16,7 @@
16 #ifndef PYTRADUTOR_H 16 #ifndef PYTRADUTOR_H
17 #define PYTRADUTOR_H 17 #define PYTRADUTOR_H
18 18
19 -#include <Python.h> 19 +#include "Python.h"
20 20
21 /** \brief Classe para execução do Tradutor 21 /** \brief Classe para execução do Tradutor
22 * 22 *
src/core_plugin.cpp
@@ -15,34 +15,38 @@ @@ -15,34 +15,38 @@
15 15
16 #include "core_plugin.h" 16 #include "core_plugin.h"
17 17
  18 +
18 int coreInitialize() 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 return 1; 22 return 1;
24 } 23 }
25 24
26 const char* coreExecute() 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 int coreFinalize() 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 \ No newline at end of file 53 \ No newline at end of file
src/main.cpp
@@ -1,53 +0,0 @@ @@ -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 \ No newline at end of file 0 \ No newline at end of file
src/py_tradutor.cpp
@@ -18,7 +18,11 @@ @@ -18,7 +18,11 @@
18 PyTradutor::PyTradutor() 18 PyTradutor::PyTradutor()
19 { 19 {
20 Py_Initialize(); 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 assert(pName!=NULL); 26 assert(pName!=NULL);
23 pModule = PyImport_Import(pName); 27 pModule = PyImport_Import(pName);
24 PyErr_Print(); 28 PyErr_Print();
@@ -26,7 +30,7 @@ PyTradutor::PyTradutor() @@ -26,7 +30,7 @@ PyTradutor::PyTradutor()
26 pDict = PyModule_GetDict(pModule); 30 pDict = PyModule_GetDict(pModule);
27 PyErr_Print(); 31 PyErr_Print();
28 assert(pDict!=NULL); 32 assert(pDict!=NULL);
29 - pFunc = PyDict_GetItemString(pDict, "iniciar"); 33 + pFunc = PyDict_GetItemString(pDict, "traduzir");
30 PyErr_Print(); 34 PyErr_Print();
31 assert(pFunc!=NULL); 35 assert(pFunc!=NULL);
32 36
test/main.cpp 0 → 100644
@@ -0,0 +1,53 @@ @@ -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 +}