#!/bin/bash

# -------------------------------------------------------------------
# imelib for PCLinuxOS  ver.0.86
#
# このスクリプトは、setime 及び gsetime スクリプトの実行に必要です。
#
# このスクリプトは Vine Linux 5.0 の imelib スクリプトを基にして、
# PCLinuxOS 用として改変したものです。
# Vine Linux の imelib の開発者である Jun Nishii 氏に謝意を表します。
#
#                               tomcat <webmaster2@tomcat.nyanta.jp>
# -------------------------------------------------------------------

## バージョンセット =====================================
VER=$(rpm -q setime | cut -c 8-11)


## ロケール設定 =========================================
setLocale(){
case $LANG in
    ja*) LOCALE=ja ;;
    *) LOCALE=C ;;
esac
[ "$TERM" = "linux" ] && LOCALE=C
}


## システムに変更が加えられていないかのチェック =========
CheckSystem(){
NEED_FIX=0
grep GTK_IM_MODULE /usr/share/X11/xdm/Xsession > /dev/null && NEED_FIX=1
if [ -f "$HOME/.xsession" ]; then
  grep GTK_IM_MODULE $HOME/.xsession > /dev/null && NEED_FIX=1
fi
grep "comment out for setime" /etc/profile.d/10lang.sh > /dev/null || NEED_FIX=1
}

CheckSystemMsg_ja(){
cat <<EOF
システムに問題が見付かりました。

setime パッケージのインストール後に、入力メソッドの動作に影響を与える変更がシステムに加えられた可能性があります。

setime によって設定される入力メソッドが正常に動作する為には、この問題を修正するスクリプト（setime-delete-old-settings）をroot権限で実行必要があります。

ENTER キーを押すと修正スクリプトを実行します。
EOF
}

CheckSystemMsg_C(){
cat <<EOF
[Warning]
The settings by setime of a previous version or Localisation Manager (addlocale) has already existed.

If you do not remove these settings, there is a possibility that the Input Method doesn't operate normally.

Please hit ENTER key.
EOF
}


## 現在の入力メソッドを調べる ===========================
CheckXIMStatus() {
STATUS=
if [ "$XMODIFIERS" = "" ]; then
  STATUS="none"
  return 0
fi
case "$XMODIFIERS" in
  @im=SCIM)
    [ "$(pgrep scim-bridge)" = "" ] && STATUS="scim" || STATUS="scim-bridge"
    ;;
  @im=uim) STATUS="uim" ;;
  @im=ibus) STATUS="ibus" ;;
  @im=fcitx) STATUS="fcitx" ;;
  *) STATUS="unknown" ;;
esac
}


# ステータス表示用メッセージ ============================
CurIMEMsg_ja(){
if [ "$STATUS" = "none" ]; then
  echo "入力メソッドは何も設定されていません。"
else
  echo "現在の入力メソッドは $STATUS です。"
fi
}

CurIMEMsg_C(){
echo "Current input method is $STATUS ."
}

PackageStatMsg_ja(){
echo "【パッケージのインストール状況】"
}

PackageStatMsg_C(){
echo "[Package status]"
}

EnvVarMsg_ja(){
echo "【現在の入力メソッドに関する環境変数】"
}

EnvVarMsg_C(){
echo "[Current Environment Variables]"
}


## パッケージのインストール状況 =========================
CheckPackages() {
# mozc パッケージのチェック
[ "$HOSTTYPE" = "x86_64" ] && LIB_PATH="/usr/lib64" || LIB_PATH="/usr/lib"
if [ -f $LIB_PATH/mozc/mozc_server ]; then
  for i in mozc mozc+sawadict mozc+utdict;do
    rpm -q --quiet $i && MOZC="$(rpm -q $i 2>&1)"
  done
else
  MOZC=""
fi
# その他のパッケージのチェック
rpm -q --quiet anthy && ANTHY="$(rpm -q anthy 2>&1)" || ANTHY=""
rpm -q --quiet libkkc && LIBKKC="$(rpm -q libkkc 2>&1)" || LIBKKC=""
#
rpm -q --quiet scim && SCIM="$(rpm -q scim 2>&1)" || SCIM=""
rpm -q --quiet scim-qt4 && SCIM_QT4="$(rpm -q scim-qt4 2>&1)" || SCIM_QT4=""
rpm -q --quiet scim-gtk3 && SCIM_GTK3="$(rpm -q scim-gtk3 2>&1)" || SCIM_GTK3=""
rpm -q --quiet scim-anthy && SCIM_ANTHY="$(rpm -q scim-anthy 2>&1)" || SCIM_ANTHY=""
#rpm -q --quiet scim-mozc && SCIM_MOZC="$(rpm -q scim-mozc 2>&1)" || SCIM_MOZC=""
rpm -q --quiet scim-bridge && SCIM_BRIDGE="$(rpm -q scim-bridge 2>&1)" || SCIM_BRIDGE=""
rpm -q --quiet scim-bridge-gtk && SCIM_BRIDGE_GTK="$(rpm -q scim-bridge-gtk 2>&1)" || SCIM_BRIDGE_GTK=""
rpm -q --quiet scim-bridge-qt4 && SCIM_BRIDGE_QT4="$(rpm -q scim-bridge-qt4 2>&1)" || SCIM_BRIDGE_QT4=""
rpm -q --quiet uim && UIM="$(rpm -q uim 2>&1)" || UIM=""
rpm -q --quiet uim-gtk3 && UIM_GTK3="$(rpm -q uim-gtk3 2>&1)" || UIM_GTK3=""
rpm -q --quiet uim-qt4 && UIM_QT4="$(rpm -q uim-qt4 2>&1)" || UIM_QT4=""
rpm -q --quiet uim-mozc && UIM_MOZC="$(rpm -q uim-mozc 2>&1)" || UIM_MOZC=""
rpm -q --quiet ibus && IBUS="$(rpm -q ibus 2>&1)" || IBUS=""
rpm -q --quiet ibus-gtk && IBUS_GTK="$(rpm -q ibus-gtk 2>&1)" || IBUS_GTK=""
rpm -q --quiet ibus-gtk3 && IBUS_GTK3="$(rpm -q ibus-gtk3 2>&1)" || IBUS_GTK3=""
rpm -q --quiet ibus-qt4 && IBUS_QT4="$(rpm -q ibus-qt4 2>&1)" || IBUS_QT4=""
rpm -q --quiet ibus-mozc && IBUS_MOZC="$(rpm -q ibus-mozc 2>&1)" || IBUS_MOZC=""
rpm -q --quiet ibus-anthy && IBUS_ANTHY="$(rpm -q ibus-anthy 2>&1)" || IBUS_ANTHY=""
rpm -q --quiet ibus-kkc && IBUS_KKC="$(rpm -q ibus-kkc 2>&1)" || IBUS_KKC=""
rpm -q --quiet fcitx && FCITX="$(rpm -q fcitx 2>&1)" || FCITX=""
rpm -q --quiet fcitx-mozc && FCITX_MOZC="$(rpm -q fcitx-mozc 2>&1)" || FCITX_MOZC=""
}


# 終了メッセージ ================================
ExitMsg_ja(){
echo ""
if [ $1 = none ]; then
  echo "入力メソッドを使用しない設定にしました。"
else
  echo "$1 を使用する為の設定が完了しました。"
fi
if [ $2 = 1 ]; then
  echo "この変更はシステムの全てのユーザーに適用されます。"
  echo "（但しユーザーのホームディレクトリ下に .i18n ファイルが存在する場合には、その設定内容が優先されます）"
else
  echo "この変更は現在のユーザーのみに適用されます。"
  if [ $1 = none ]; then
    echo "（システムの入力メソッドの設定が使用されます）"
  fi
fi
echo ""
if [ -f /tmp/setime_REQUIRE_PKG.txt ]; then
  echo "$1 を使用する為には、下記のパッケージをインストールする必要があります。"
  echo "$(cat /tmp/setime_REQUIRE_PKG.txt)"
  echo ""
fi
if [ -f /tmp/setime_SUGGESTS_PKG.txt ]; then
  echo "次のパッケージのインストールを推奨します。"
  echo "$(cat /tmp/setime_SUGGESTS_PKG.txt)"
  echo ""
fi
echo "新しい設定を有効にするには 再ログイン する必要があります。"
echo ""
}

ExitMsg_C(){
echo "Configuration finished."
echo ""
if [ $2 = 1 ]; then
  echo "This setting is applied to all users."
else
  echo "This setting is applied only to a current user."
fi
echo ""
if [ -f /tmp/setime_REQUIRE_PKG.txt ]; then
  echo "You need to install the following packages."
  echo "  $(cat /tmp/setime_REQUIRE_PKG.txt)"
  echo ""
fi
if [ -f /tmp/setime_SUGGESTS_PKG.txt ]; then
  echo "Suggest following packages."
  echo "  $(cat /tmp/setime_SUGGESTS_PKG.txt)"
  echo ""
fi
  echo "To effect this configuration, You should re-login."
  echo ""
}


## 関数・変数 消去 ======================================
unsetImeFuncs(){
unset -f CurIMEMsg_ja CurIMEMsg_C PackageStatMsg_ja PackageStatMsg_C
unset -f EnvVarMsg_ja EnvVarMsg_C ExitMsg_ja ExitMsg_C
unset -f setLocale CheckXIMStatus ShowIMEStatus
unset -f CheckSystem CheckSystemMsg_ja CheckSystemMsg_C
unset -f CheckPackages
unset VER LOCALE NEED_FIX STATUS ANS ASROOT IM MSG LIST MENU
unset MOZC ANTHY IBUS IBUS_ANTHY IBUS_GTK IBUS_QT4 IBUS_MOZC
unset LIBKKC IBUS_KKC
unset SCIM SCIM_QT4 SCIM_GTK3 SCIM_BRIDGE SCIM_BRIDGE_GTK SCIM_BRIDGE_QT4
unset UIM UIM_MOZC UIM_QT4 FCITX
[ -f /tmp/setime_REQUIRE_PKG.txt ] && rm -f /tmp/setime_REQUIRE_PKG.txt
[ -f /tmp/setime_SUGGESTS_PKG.txt ] && rm -f /tmp/setime_SUGGESTS_PKG.txt
}
