Revision: 6110
Author: iratqq
Date: Mon Dec  7 20:12:36 2009
Log: * uim/Makefile.am:
  - Add libuim_eb.
* gtk/uim-eb.c:
* gtk/uim-eb.h:
  - Move to ../uim.
* gtk/uim-scm-eb.c:
  - Move to ../uim/eb.c.
* gtk/Makefile.am:
  - Link ../uim/uim-eb.c
  - Remove libuim_eb.

http://code.google.com/p/uim/source/detail?r=6110

Added:
 /trunk/uim/eb.c
 /trunk/uim/uim-eb.c
 /trunk/uim/uim-eb.h
Modified:
 /trunk/gtk/Makefile.am
 /trunk/uim/Makefile.am

=======================================
--- /dev/null
+++ /trunk/uim/eb.c     Mon Dec  7 20:12:36 2009
@@ -0,0 +1,82 @@
+/*
+
+  Copyright (c) 2009- uim Project http://code.google.com/p/uim/
+
+  All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+
+  1. Redistributions of source code must retain the above copyright
+     notice, this list of conditions and the following disclaimer.
+  2. Redistributions in binary form must reproduce the above copyright
+     notice, this list of conditions and the following disclaimer in the
+     documentation and/or other materials provided with the distribution.
+  3. Neither the name of authors nor the names of its contributors
+     may be used to endorse or promote products derived from this software
+     without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
+  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+  SUCH DAMAGE.
+
+*/
+
+#include <config.h>
+
+#include <stdio.h>
+
+#include "uim.h"
+#include "uim-scm.h"
+#include "uim-scm-abbrev.h"
+#include "uim-helper.h"
+#include "uim-notify.h"
+#include "dynlib.h"
+
+#include "uim-eb.h"
+
+static uim_lisp
+c_uim_eb_new(uim_lisp bookpath_)
+{
+  void *ret;
+
+  if ((ret = uim_eb_new(REFER_C_STR(bookpath_))) == NULL)
+    return uim_scm_f();
+  return MAKE_PTR(ret);
+}
+
+static uim_lisp
+c_uim_eb_search_text(uim_lisp ueb_, uim_lisp text_)
+{
+  return MAKE_STR(uim_eb_search_text(C_PTR(ueb_), REFER_C_STR(text_)));
+}
+
+static uim_lisp
+c_uim_eb_destroy(uim_lisp ueb_)
+{
+  uim_eb_destroy(C_PTR(ueb_));
+  return uim_scm_t();
+}
+
+void
+uim_plugin_instance_init(void)
+{
+  uim_scm_init_proc1("eb-new", c_uim_eb_new);
+  uim_scm_init_proc2("eb-search-text", c_uim_eb_search_text);
+  uim_scm_init_proc1("eb-destroy", c_uim_eb_destroy);
+}
+
+void
+uim_plugin_instance_quit(void)
+{
+}
+
=======================================
--- /dev/null
+++ /trunk/uim/uim-eb.c Mon Dec  7 20:12:36 2009
@@ -0,0 +1,229 @@
+/*
+
+  Copyright (c) 2003-2009 uim Project http://code.google.com/p/uim/
+
+  All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+
+  1. Redistributions of source code must retain the above copyright
+     notice, this list of conditions and the following disclaimer.
+  2. Redistributions in binary form must reproduce the above copyright
+     notice, this list of conditions and the following disclaimer in the
+     documentation and/or other materials provided with the distribution.
+  3. Neither the name of authors nor the names of its contributors
+     may be used to endorse or promote products derived from this software
+     without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
+  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+  SUCH DAMAGE.
+
+*/
+
+/* FIXME! This is a ad-hoc solution to advance
+   annotation related discussion. */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <iconv.h>
+#include <gettext.h>
+#include <eb/eb.h>
+#include <eb/text.h>
+#include <eb/font.h>
+#include <eb/binary.h>
+#include <eb/error.h>
+
+#include "uim.h"
+#include "uim-util.h"
+#include "uim-notify.h"
+
+#include "uim-eb.h"
+
+
+#define MAX_HITS   10
+#define MAX_TEXT   1000
+#define MAX_LENGTH 10000
+
+struct _uim_eb {
+  EB_Book         book;
+  EB_Subbook_Code subCodes[EB_MAX_SUBBOOKS];
+  int             subCount;
+};
+
+static void go_text_eb (uim_eb *ueb,
+                       EB_Position position,
+                       char **str);
+
+static unsigned int eb_ref_count = 0;
+
+static int
+uim_eb_strappend(char **dest, const char *append, size_t append_len)
+{
+  if (*dest) {
+    char *str;
+    size_t dest_len = strlen(*dest);
+    size_t len = dest_len + append_len;
+
+    str = uim_realloc(*dest, len + 1);
+    memcpy(&str[dest_len], append, append_len);
+    str[len] = '\0';
+    *dest = str;
+  } else {
+    char *str;
+
+    str = uim_malloc(append_len + 1);
+    memcpy(str, append, append_len);
+    str[append_len] = '\0';
+    *dest = str;
+  }
+  return 1;
+}
+
+uim_eb *
+uim_eb_new (const char *bookpath)
+{
+  uim_eb *ueb;
+  EB_Error_Code err;
+
+  ueb = uim_malloc(sizeof(uim_eb));
+  eb_ref_count++;
+
+  err = eb_initialize_library();
+  if (err != EB_SUCCESS)
+ uim_notify_fatal(_("eb: failed to initialize EB library : error = %s\n"),
+            eb_error_message(err));
+
+  eb_initialize_book(&ueb->book);
+
+  err = eb_bind(&ueb->book, bookpath);
+  if (err != EB_SUCCESS) {
+    uim_notify_fatal(N_("eb: wrong bookpath"));
+    free(ueb);
+    return NULL;
+  }
+
+  err = eb_subbook_list(&ueb->book, ueb->subCodes, &ueb->subCount);
+  if (err != EB_SUCCESS) {
+    uim_notify_fatal(N_("eb: eb_subbook_list() failed\n"));
+    free(ueb);
+    return NULL;
+  }
+
+  return ueb;
+}
+
+
+void
+uim_eb_destroy (uim_eb *ueb)
+{
+  if (!ueb)
+    return;
+
+  eb_finalize_book(&ueb->book);
+
+  eb_ref_count--;
+  if (eb_ref_count == 0)
+    eb_finalize_library();
+  free(ueb);
+}
+
+
+char *
+uim_eb_search_text (uim_eb *ueb, const char *text_utf8)
+{
+  char *text;
+  int i;
+  char *str = NULL;
+  iconv_t cd;
+
+  /* FIXME! check return value */
+  cd = (iconv_t)uim_iconv->create("EUC-JP", "UTF-8");
+  text = uim_iconv->convert(cd, text_utf8);
+  uim_iconv->release(cd);
+
+  if (!text)
+         return NULL;
+
+  for (i = 0; i < ueb->subCount; i++) {
+    EB_Hit hits[MAX_HITS];
+    int hitCount;
+    int j;
+
+    /* specify subbook */
+    if (eb_set_subbook(&ueb->book, ueb->subCodes[i]) != EB_SUCCESS) {
+      uim_notify_fatal(N_("eb: eb_set_subbook() failed")); continue;
+    }
+
+    eb_search_word(&ueb->book, text);
+    eb_hit_list(&ueb->book, MAX_HITS, hits, &hitCount);
+    for (j = 0; j < hitCount; j++) {
+      /*EB_Position headp = hits[j].heading;*/
+      EB_Position textp = hits[j].text;
+
+      go_text_eb(ueb, textp, &str);
+      uim_eb_strappend(&str, "\n", sizeof("\n"));
+    }
+  }
+
+  free(text);
+
+  return str;
+}
+
+
+static void
+go_text_eb (uim_eb *ueb, EB_Position position, char **str)
+{
+  EB_Hookset hookset;
+  char text[MAX_TEXT + 1];
+  ssize_t text_length;
+  ssize_t bytes;
+  int i;
+
+  if (eb_seek_text(&ueb->book, &position) != EB_SUCCESS) {
+    uim_notify_fatal(N_("eb: eb_seek_text error occurs"));
+    return;
+  }
+
+  eb_initialize_hookset(&hookset);
+  for (i = 0; i < 1; i++) {
+    char *text_utf8;
+    iconv_t cd;
+
+    if (eb_read_text(&ueb->book, NULL, &hookset,
+                    NULL, MAX_TEXT, text, &text_length) != EB_SUCCESS) {
+      bytes = 0;
+      uim_notify_fatal(N_("eb_read_text : an error occurs"));
+      return;
+    }
+
+    bytes += text_length;
+    if (text_length < 1)
+      break;
+
+    /* FIXME! check return value */
+    cd = (iconv_t)uim_iconv->create("UTF-8", "EUC-JP");
+    text_utf8 = uim_iconv->convert(cd, text);
+    uim_iconv->release(cd);
+
+    uim_eb_strappend(str, text_utf8, strlen(text_utf8));
+
+    free(text_utf8);
+  }
+  eb_finalize_hookset(&hookset);
+}
=======================================
--- /dev/null
+++ /trunk/uim/uim-eb.h Mon Dec  7 20:12:36 2009
@@ -0,0 +1,47 @@
+/*
+
+  Copyright (c) 2003-2009 uim Project http://code.google.com/p/uim/
+
+  All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+
+  1. Redistributions of source code must retain the above copyright
+     notice, this list of conditions and the following disclaimer.
+  2. Redistributions in binary form must reproduce the above copyright
+     notice, this list of conditions and the following disclaimer in the
+     documentation and/or other materials provided with the distribution.
+  3. Neither the name of authors nor the names of its contributors
+     may be used to endorse or promote products derived from this software
+     without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
+  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+  SUCH DAMAGE.
+
+*/
+
+/* FIXME! This is a ad-hoc solution to advance
+   annotation related discussion. */
+
+#ifndef UIM_GTK_UIM_EB_H
+#define UIM_GTK_UIM_EB_H
+
+typedef struct _uim_eb uim_eb;
+
+uim_eb *uim_eb_new         (const char *bookpath);
+char   *uim_eb_search_text (uim_eb *ueb,
+                           const char *text);
+void    uim_eb_destroy     (uim_eb *ueb);
+
+#endif /* UIM_GTK_UIM_EB_H */
=======================================
--- /trunk/gtk/Makefile.am      Mon Dec  7 20:01:19 2009
+++ /trunk/gtk/Makefile.am      Mon Dec  7 20:12:36 2009
@@ -34,21 +34,7 @@
        compose.c compose.h text-util.c text-util.h

 if EB
-IM_UIM_SOURCES += uim-eb.c uim-eb.h
-
-uim_plugindir = $(pkglibdir)/plugin
-uim_plugin_LTLIBRARIES = libuim-eb.la
-libuim_eb_la_SOURCES = uim-eb.c uim-eb.h uim-scm-eb.c
-libuim_eb_la_LIBADD = ../uim/libuim-scm.la ../uim/libuim.la @EBCONF_EBLIBS@ @EBCONF_ZLIBLIBS@ \
-                     @EBCONF_INTLLIBS@
-libuim_eb_la_LDFLAGS = -rpath $(uim_plugindir) -avoid-version -module \
-                      @EBCONF_PTHREAD_LDFLAGS@
-libuim_eb_la_CPPFLAGS = -I$(top_srcdir) \
-                       @EBCONF_EBINCS@ @EBCONF_ZLIBINCS@ \
-                       @EBCONF_PTHREAD_CPPFLAGS@ \
-                       @EBCONF_INTLINCS@ \
-                       @GTK2_CFLAGS@
-libuim_eb_la_CFLAGS = @EBCONF_PTHREAD_CFLAGS@ -Wall
+IM_UIM_SOURCES += ../uim/uim-eb.lo
 endif

 noinst_PROGRAMS = gtk-rc-get-immodule-file
=======================================
--- /trunk/uim/Makefile.am      Mon Dec  7 02:48:20 2009
+++ /trunk/uim/Makefile.am      Mon Dec  7 20:12:36 2009
@@ -173,6 +173,21 @@
 libuim_ffi_la_CPPFLAGS = -I$(top_srcdir) @FFI_CFLAGS@
 endif

+if EB
+uim_plugin_LTLIBRARIES += libuim-eb.la
+libuim_eb_la_SOURCES = uim-eb.c uim-eb.h eb.c
+libuim_eb_la_LIBADD = @EBCONF_EBLIBS@ @EBCONF_ZLIBLIBS@ \
+                     @EBCONF_INTLLIBS@
+libuim_eb_la_LDFLAGS = -rpath $(uim_plugindir) -avoid-version -module \
+                      @EBCONF_PTHREAD_LDFLAGS@
+libuim_eb_la_CPPFLAGS = -I$(top_srcdir) \
+                       @EBCONF_EBINCS@ @EBCONF_ZLIBINCS@ \
+                       @EBCONF_PTHREAD_CPPFLAGS@ \
+                       @EBCONF_INTLINCS@ \
+                       @GTK2_CFLAGS@
+libuim_eb_la_CFLAGS = @EBCONF_PTHREAD_CFLAGS@ -Wall
+endif
+
 uim_plugin_LTLIBRARIES += libuim-skk.la
 libuim_skk_la_SOURCES = skk.c bsdlook.h
 libuim_skk_la_LIBADD = libuim-scm.la libuim.la libuim-bsdlook.la @NETLIBS@

Reply via email to