Commit 57df7a7897f2fe75e9847681380a00b4e87b86e9
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.
Showing
11 changed files
with
127 additions
and
121 deletions
Show diff stats
| @@ -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. |
Makefile
| @@ -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;) |
Makefile.top
| @@ -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 |
README
| @@ -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 "C" | @@ -55,6 +52,11 @@ extern "C" | ||
| 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
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 |
| @@ -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 | +} |