D-Bus examples
Revision as of 23:07, 19 December 2007 by Wynand.winterbach (talk | contribs) (→C++: Added description)
Here are some code snippets for various programming languages (complete with completely unnecessary comments) showing how you can interface with Apertium by means of D-Bus. You'll need to install the D-Bus service for Apertium.
Python
#!/usr/bin/python # coding=utf-8 # -*- encoding: utf-8 -*- import dbus, sys, codecs; sys.stdin = codecs.getwriter('utf-8')(sys.stdin); sys.stdout = codecs.getwriter('utf-8')(sys.stdout); mode_name = 'en-af'; # The name of the installed mode bus = dbus.SessionBus(); # Create a new session bus # Get the translator translator = dbus.Interface(bus.get_object('org.apertium.mode', '/'), 'org.apertium.Translate'); input = sys.stdin.read(); # Read the data print translator.translate(mode_name, {}, input); # Print the translation
Java
import org.freedesktop.DBus; import org.freedesktop.dbus.DBusConnection; import org.freedesktop.dbus.exceptions.DBusException; import org.apertium.Info; // The interface we use to access org.apertium.info/ class TestDBus { public static void main(String[] args) throws org.freedesktop.dbus.exceptions.DBusException { DBusConnection bus = null; Info info = null; bus = DBusConnection.getConnection(DBusConnection.SESSION); info = bus.getRemoteObject("org.apertium.info", "/", Info.class); for (String s : info.modes()) { System.out.println(s); } bus.disconnect(); } }
C++
#include <map> #include <iostream> #include <sstream> #include <string> #include <dbus-c++/dbus.h> #include "Translate-glue.h" static const char* TRANSLATE_SERVICE_NAME = "org.apertium.mode"; static const char* TRANSLATE_OBJECT_PATH = "/"; class Translate : public org::apertium::Translate, public DBus::IntrospectableProxy, public DBus::ObjectProxy { public: Translate(DBus::Connection& connection, const char* path, const char* name) : DBus::ObjectProxy(connection, path, name) { } }; DBus::BusDispatcher dispatcher; int main(int argc, char** argv) { DBus::default_dispatcher = &dispatcher; DBus::Connection bus = DBus::Connection::SessionBus(); std::stringstream input; std::string mode; std::map< ::DBus::String, ::DBus::String> translate_options; if (argc != 2) { std::cerr << "usage: dbus_test <mode>" << std::endl; return 1; } mode = std::string(argv[1]); while (!std::cin.eof() and std::cin) { std::string str; std::cin >> str; input << str << " "; } Translate translator(bus, TRANSLATE_OBJECT_PATH, TRANSLATE_SERVICE_NAME); std::cout << translator.translate(mode, translate_options, input.str()) << std::endl; }
This program is a simple emulation of the main apertium program. It takes a single parameter, which is the translation mode (something like en-ca). It reads words from stdin and calls the method <mode>translate</mode> on the D-Bus proxy object <mode>translator</mode> to translate the text read from stdin. When the translation is complete, it writes the translated string to stdout.