[bug#33203] Rime Input Method Engine

Message ID 871s874i7x.fsf@gmail.com
State New
Headers show
Series
  • [bug#33203] Rime Input Method Engine
Related show

Checks

Context Check Description
cbaines/applying patch fail Apply failed

Commit Message

Meiyo Peng Oct. 30, 2018, 2:33 p.m. UTC
Hi,

These patches add Rime Input Method Engine to guix.

Rime Input Method Engine is a lightweight, extensible input method
engine supporting various input schemas including glyph-based input
methods, romanization-based input methods as well as those for Chinese
dialects.  It has the ability to compose phrases and sentences
intelligently and provide very accurate traditional Chinese output.

Rime is very popular among Chinese users. I prefer it over libpinyin.
But sadly, libpinyin (both in ibus and fcitx) is the only option for
pinyin in guix.

I have already tested these patches on my computer. It works fine.
Please inform me if there is any issue with the code.

--
Meiyo Peng

Comments

Meiyo Peng Oct. 31, 2018, 4:33 a.m. UTC | #1
Hi,

Hold on, please.

The output of rime-data is not deterministic. I'll investigate into
this.

#+BEGIN_EXAMPLE
  guix build: error: build failed: derivation `/gnu/store/mca8qb66dfjzhqqjm2cl3ayjwz7pd5cq-rime-data-0.38.20181029.drv' may not be deterministic: output `/gnu/store/iw354qfwd3mz5x34w99qz73n1fmc1gyz-rime-data-0.38.20181029' differs
#+END_EXAMPLE

--
Meiyo Peng

Patch

From 80a75361b8c47e80495a068c810a5f5ff0a845b0 Mon Sep 17 00:00:00 2001
From: Meiyo Peng <meiyo.peng@gmail.com>
Date: Mon, 29 Oct 2018 11:46:03 +0800
Subject: [PATCH 6/6] gnu: Add ibus-rime.

* gnu/packages/ibus.scm (ibus-rime): New variable.
---
 gnu/packages/ibus.scm | 59 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 59 insertions(+)

diff --git a/gnu/packages/ibus.scm b/gnu/packages/ibus.scm
index 870d28562..0a07b5190 100644
--- a/gnu/packages/ibus.scm
+++ b/gnu/packages/ibus.scm
@@ -34,6 +34,7 @@ 
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
   #:use-module (gnu packages boost)
+  #:use-module (gnu packages cmake)
   #:use-module (gnu packages databases)
   #:use-module (gnu packages datastructures)
   #:use-module (gnu packages freedesktop)
@@ -586,3 +587,61 @@  traditional Chinese output.")
     (description "@dfn{rime-data} provides the schema data of Rime Input
 Method Engine.")
     (license lgpl3+)))
+
+(define-public ibus-rime
+  (package
+    (name "ibus-rime")
+    (version "1.3.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/rime/" name
+                           "/archive/" version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0mfbz0vwky7n4wvxrwabnn1i9n9adnql0dd1rx57w1anaslr5amj"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f                      ; no tests
+       #:make-flags (list (string-append "PREFIX=" %output))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-source
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             ;; Define RIME_DATA_DIR. It's required but not used by the code.
+             (substitute* "Makefile"
+               (("cmake")
+                (string-append "cmake -DRIME_DATA_DIR="
+                               (assoc-ref inputs "rime-data")
+                               "/share/rime-data")))
+             (substitute* "rime_config.h"
+               (("#define IBUS_RIME_INSTALL_PREFIX .*")
+                (string-append "#define IBUS_RIME_INSTALL_PREFIX \""
+                               (assoc-ref outputs "out")
+                               "\"\n")))
+             ;; rime_config.h defines the actual data directory.
+             (substitute* "rime_config.h"
+               (("#define IBUS_RIME_SHARED_DATA_DIR .*")
+                (string-append "#define IBUS_RIME_SHARED_DATA_DIR \""
+                               (assoc-ref inputs "rime-data")
+                               "/share/rime-data\"\n")))
+             #t))
+         (delete 'configure))))
+    (inputs
+     `(("gdk-pixbuf" ,gdk-pixbuf)
+       ("glib" ,glib)
+       ("ibus" ,ibus)
+       ("libnotify" ,libnotify)
+       ("librime" ,librime)
+       ("rime-data" ,rime-data)))
+    (native-inputs
+     `(("cmake" ,cmake)
+       ("pkg-config" ,pkg-config)))
+    (home-page "https://rime.im/")
+    (synopsis "Rime Input Method Engine for IBus")
+    (description "@dfn{Rime} Input Method Engine is a lightweight, extensible
+input method engine supporting various input schemas including glyph-based
+input methods, romanization-based input methods as well as those for Chinese
+dialects.  It has the ability to compose phrases and sentences intelligently
+and provide very accurate traditional Chinese output.")
+    (license gpl3+)))
-- 
2.19.1