Skip to content

Commit

Permalink
Merge fcitx/master; use the shared copy of data files provided by pac…
Browse files Browse the repository at this point in the history
…kage 'rime-data' or 'brise'.
  • Loading branch information
lotem committed Sep 1, 2012
2 parents 0b10e2f + f9048ba commit 61f40a9
Show file tree
Hide file tree
Showing 5 changed files with 127 additions and 16 deletions.
7 changes: 7 additions & 0 deletions CMakeLists.txt
Expand Up @@ -8,6 +8,13 @@ include(FindPkgConfig)
find_package(Fcitx 4.2.0 REQUIRED)
find_package(Rime REQUIRED)

if(NOT DEFINED RIME_DATA_DIR)
find_package(Brise REQUIRED)
set(RIME_DATA_DIR ${BRISE_DIR})
endif(NOT DEFINED RIME_DATA_DIR)
message(STATUS "Precompiler macro RIME_DATA_DIR is set to \"${RIME_DATA_DIR}\"")
add_definitions(-DRIME_DATA_DIR="${RIME_DATA_DIR}")

set(CMAKE_C_FLAGS "-Wall -Wextra -Wno-sign-compare -Wno-unused-parameter -fvisibility=hidden ${CMAKE_C_FLAGS}")
set(CMAKE_CXX_FLAGS "-Wall -Wextra -Wno-sign-compare -Wno-unused-parameter -fvisibility=hidden ${CMAKE_CXX_FLAGS}")
set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--as-needed ${CMAKE_SHARED_LINKER_FLAGS}")
Expand Down
3 changes: 0 additions & 3 deletions README

This file was deleted.

63 changes: 63 additions & 0 deletions README.md
@@ -0,0 +1,63 @@
## RIME support for Fcitx

RIME(中州韻輸入法引擎) is _mainly_ a Traditional Chinese input method engine.

project: https://code.google.com/p/rimeime


## Build From Source:

### special notice of RIME dependency:

RIME split its devlopment source into a few sections, here we need librime.

In librime source, there are two directory, brise and librime.

According to your distribution, you might need brise+librime package(openSUSE) or only librime which includes brise at /usr/share/brise.

If your distribution doesn't have one you need to download librime and put brise directory into /usr/share/brise.

If you're a distribution packager, ask maintainer of librime to add brise sub-package.

### special notice of Boost dependency:

Boost is a RIME dependency, so without boost >= 1.46.1, you will not ble to install librime-devel.

Generally it means, distros that are a little old like openSUSE 11.4 or Ubuntu 10.10 might not be possible to build or install.

### Dependency

*cmake

*gcc-c++

*intltool

*fcitx-devel with all three skins

some distro like openSUSE split a fcitx-skin-classic and a fcitx-skin-dark, so you need them.

*librime-devel

*brise

*hicolor-icon-theme

optional, for directory ownership.

#### openSUSE:

sudo zypper ar -f http://download.opensuse.org/repositories/M17N/openSUSE_12.2/ M17N

sudo zypper in cmake gcc-c++ fcitx-devel fcitx-skin-classic fcitx-skin-dark librime-devel brise hicolor-icon-theme


## Install from Distribution

### openSUSE

sudo zypper ar -f http://download.opensuse.org/repositories/M17N/openSUSE_12.2/ M17N

sudo zypper in fcitx-rime


26 changes: 26 additions & 0 deletions cmake/FindBrise.cmake
@@ -0,0 +1,26 @@
# Author: Marguerite Su <i@marguerite.su>
# License: same as fcitx
# Description: find RIME brise schemas collection package.
# BRISE_FOUND - System has brise package
# BRISE_DIR - Brise absolute path

set(BRISE_FIND_DIR "${CMAKE_INSTALL_PREFIX}/share/brise"
"${CMAKE_INSTALL_PREFIX}/share/rime-data"
"${CMAKE_INSTALL_PREFIX}/share/rime/data"
"/usr/share/brise"
"/usr/share/rime-data"
"/usr/share/rime/data")

set(BRISE_FOUND FALSE)

foreach(_BRISE_DIR ${BRISE_FIND_DIR})
if (IS_DIRECTORY ${_BRISE_DIR})
set(BRISE_FOUND True)
set(BRISE_DIR ${_BRISE_DIR})
endif (IS_DIRECTORY ${_BRISE_DIR})
endforeach(_BRISE_DIR)

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Brise DEFAULT_MSG
BRISE_DIR)
mark_as_advanced(BRISE_DIR)
44 changes: 31 additions & 13 deletions src/fcitx-rime.c
Expand Up @@ -31,14 +31,15 @@ int ABI_VERSION = FCITX_ABI_VERSION;
static void* FcitxRimeCreate(FcitxInstance* instance)
{
FcitxRime* rime = (FcitxRime*) fcitx_utils_malloc0(sizeof(FcitxRime));
rime->owner = instance;

char* user_path = NULL;
FILE* fp = FcitxXDGGetFileUserWithPrefix("rime", ".place_holder", "w", NULL);
if (fp)
fclose(fp);
FcitxXDGGetFileUserWithPrefix("rime", "", NULL, &user_path);
//char* shared_data_dir = fcitx_utils_get_fcitx_path_with_filename("pkgdatadir", "rime");
const char* shared_data_dir = "/usr/share/rime-data";
const char* shared_data_dir = RIME_DATA_DIR;

RimeTraits ibus_rime_traits;
ibus_rime_traits.shared_data_dir = shared_data_dir;
Expand All @@ -51,22 +52,22 @@ static void* FcitxRimeCreate(FcitxInstance* instance)
// TODO: notification...
}

rime->owner = instance;
rime->session_id = RimeCreateSession();
FcitxInstanceRegisterIM(

FcitxIMIFace iface;
memset(&iface, 0, sizeof(FcitxIMIFace));
iface.Init = FcitxRimeInit;
iface.ResetIM = FcitxRimeReset;
iface.DoInput = FcitxRimeDoInput;
iface.GetCandWords = FcitxRimeGetCandWords;

FcitxInstanceRegisterIMv2(
instance,
rime,
"rime",
_("Rime"),
"rime",
FcitxRimeInit,
FcitxRimeReset,
FcitxRimeDoInput,
FcitxRimeGetCandWords,
NULL,
NULL,
NULL,
NULL,
iface,
10,
"zh"
);
Expand All @@ -87,7 +88,12 @@ void FcitxRimeDestroy(void* arg)
boolean FcitxRimeInit(void* arg)
{
FcitxRime* rime = (FcitxRime*) arg;
boolean flag = false;
FcitxInstanceSetContext(rime->owner, CONTEXT_IM_KEYBOARD_LAYOUT, "us");
FcitxInstanceSetContext(rime->owner, CONTEXT_DISABLE_AUTO_FIRST_CANDIDATE_HIGHTLIGHT, &flag);
FcitxInstanceSetContext(rime->owner, CONTEXT_DISABLE_AUTOENG, &flag);
FcitxInstanceSetContext(rime->owner, CONTEXT_DISABLE_QUICKPHRASE, &flag);

return true;
}

Expand All @@ -103,9 +109,18 @@ void FcitxRimeReset(void* arg)
}
}

INPUT_RETURN_VALUE FcitxRimeDoInput(void* arg, FcitxKeySym sym, unsigned int state)
INPUT_RETURN_VALUE FcitxRimeDoInput(void* arg, FcitxKeySym _sym, unsigned int _state)
{
FcitxRime *rime = (FcitxRime *)arg;
FcitxInputState *input = FcitxInstanceGetInputState(rime->owner);
uint32_t sym = FcitxInputStateGetKeySym(input);
uint32_t state = FcitxInputStateGetKeyState(input);

_state &= (FcitxKeyState_Ctrl | FcitxKeyState_Alt | FcitxKeyState_Shift | FcitxKeyState_Super);

if (_state & (~(FcitxKeyState_Ctrl | FcitxKeyState_Alt))) {
return IRV_TO_PROCESS;
}

state &= (FcitxKeyState_Ctrl | FcitxKeyState_Alt);

Expand Down Expand Up @@ -218,7 +233,10 @@ INPUT_RETURN_VALUE FcitxRimeGetCandWords(void* arg)
for (i = 0; i < context.menu.num_candidates; ++i) {
FcitxCandidateWord candWord;
candWord.strWord = strdup (context.menu.candidates[i].text);
candWord.wordType = MSG_OTHER;
if (i == context.menu.highlighted_candidate_index)
candWord.wordType = MSG_CANDIATE_CURSOR;
else
candWord.wordType = MSG_OTHER;
candWord.strExtra = context.menu.candidates[i].comment ? strdup (context.menu.candidates[i].comment) : NULL;
candWord.extraType = MSG_CODE;
candWord.callback = FcitxRimeGetCandWord;
Expand Down

0 comments on commit 61f40a9

Please sign in to comment.