#!/bin/bash

## =================================================================
## setime-sub  ver.0.87
##   setime|gsetime の為のスクリプト（入力メソッド別設定）です。
##   このスクリプトは setime|gsetime の実行に必要です。
##
## usage: setime-sub $1 $2
##   第1引数: 入力メソッド名 (ibus|scim-bridge|scim|uim|fcitx|none)
##   第2引数: 設定方法指定　(1=システムワイド設定 2=ユーザー別設定)
##
##   システムワイドな設定：
##     /etc/sysconfig/i18n に環境変数を記述
##
##   ユーザ別設定：
##     $HOME/.i18n に環境変数を記述
## ==================================================================

## 引数の数が2個でない場合は異常終了
[ $# = 2 ] || exit 1


# 変数設定
REQUIRE_PKG="/tmp/setime_REQUIRE_PKG.txt"
SUGGESTS_PKG="/tmp/setime_SUGGESTS_PKG.txt"


## 入力メソッド別 設定サブルーチン
setSCIM() {
  NAME="scim"
  COMMENT="Smart Common Input Method platform"
  XIM_PROGRAM='"scim -d"'
  XMODIFIERS="@im=SCIM"
  GTK_IM_MODULE=scim
  if rpm -q --quiet scim-qt4; then
    QT_IM_MODULE=scim
  else
    QT_IM_MODULE=xim
  fi
  rpm -q --quiet scim || echo scim >> $REQUIRE_PKG
  rpm -q --quiet scim-qt4 || echo "scim-qt4" >> $SUGGESTS_PKG
  if [ "$HOSTTYPE" = "x86_64" ]; then
    rpm -q --quiet scim-gtk3 || echo "scim-gtk3 " >> $SUGGESTS_PKG
  fi
  return 0
}

setSCIM_BRIDGE() {
  NAME="scim-bridge"
  COMMENT="scim-bridge"
  XIM_PROGRAM="scim-bridge"
  XMODIFIERS="@im=SCIM"
  GTK_IM_MODULE=scim-bridge
  if rpm -q --quiet scim-bridge-qt4; then
    QT_IM_MODULE=scim-bridge
  else
    QT_IM_MODULE=xim
  fi
  rpm -q --quiet scim || echo "scim " >> $REQUIRE_PKG
  rpm -q --quiet scim-bridge || echo "scim-bridge " >> $REQUIRE_PKG
  rpm -q --quiet scim-bridge-gtk || echo "scim-bridge-gtk " >> $REQUIRE_PKG
  rpm -q --quiet scim-bridge-qt4 || echo "scim-gridge-qt4" >> $SUGGESTS_PKG
  return 0
}

setUIM(){
  NAME="uim"
  COMMENT="UIM"
  XIM_PROGRAM="uim-xim"
  XMODIFIERS="@im=uim"
  GTK_IM_MODULE=uim
  if rpm -q --quiet uim-qt4; then
    QT_IM_MODULE=uim
  else
    QT_IM_MODULE=xim
  fi
  rpm -q --quiet uim || echo "uim " >> $REQUIRE_PKG
  if [ "$HOSTTYPE" = "x86_64" ]; then
    rpm -q --quiet uim-gtk3 || echo "uim-gtk3 " >> $SUGGESTS_PKG
  fi
  rpm -q --quiet uim-qt4 || echo "uim-qt4" >> $SUGGESTS_PKG
  return 0
}

setIBUS() {
  NAME="ibus"
  COMMENT="IBus"
  XIM_PROGRAM='"ibus-daemon -d -x"'
  XMODIFIERS="@im=ibus"
  GTK_IM_MODULE=ibus
  if rpm -q --quiet ibus-qt4; then
    QT_IM_MODULE=ibus
  else
    QT_IM_MODULE=xim
  fi
  rpm -q --quiet ibus || echo "ibus " >> $REQUIRE_PKG
  rpm -q --quiet ibus-gtk || echo "ibus-gtk " >> $REQUIRE_PKG
  if [ "$HOSTTYPE" = "x86_64" ]; then
    rpm -q --quiet ibus-gtk3 || echo "ibus-gtk3 " >> $SUGGESTS_PKG
  fi
  rpm -q --quiet ibus-qt4 || echo "ibus-qt4" >> $SUGGESTS_PKG
  return 0
}

setFCITX() {
  NAME="fcitx"
  COMMENT="fcitx"
  XIM_PROGRAM='"fcitx -d"'
  XMODIFIERS="@im=fcitx"
  GTK_IM_MODULE=fcitx
  if rpm -q --quiet fcitx-qt4; then
    QT_IM_MODULE=fcitx
  else
    QT_IM_MODULE=xim
  fi
  rpm -q --quiet fcitx || echo "fcitx " >> $REQUIRE_PKG
  return 0
  }
 
setNone(){
  #XMODIFIERS=
  return 0
}


## 設定ファイルへの書き込みのサブルーチン
write_settings(){
if [ -f ${SETTING_FILE} ]; then
for i in GTK_IM_MODULE QT_IM_MODULE XMODIFIERS XIM_PROGRAM XIM;do
  sed -i "/^$i/D" ${SETTING_FILE}
done
cat << EOF >> ${SETTING_FILE}
GTK_IM_MODULE=${GTK_IM_MODULE}
QT_IM_MODULE=${QT_IM_MODULE}
XIM_PROGRAM=${XIM_PROGRAM}
XMODIFIERS=${XMODIFIERS}
EOF
else
cat << EOF > ${SETTING_FILE}
LANGUAGE=ja_JP.UTF-8:ja
LC_ADDRESS=ja_JP.UTF-8
LC_COLLATE=ja_JP.UTF-8
LC_NAME=ja_JP.UTF-8
LC_NUMERIC=ja_JP.UTF-8
LC_MEASUREMENT=ja_JP.UTF-8
LC_TIME=ja_JP.UTF-8
LANG=ja_JP.UTF-8
LC_IDENTIFICATION=ja_JP.UTF-8
LC_MESSAGES=ja_JP.UTF-8
LC_CTYPE=ja_JP.UTF-8
LC_TELEPHONE=ja_JP.UTF-8
CONSOLE_NOT_LOCALIZED=yes
ENC=utf8
LC_MONETARY=ja_JP.UTF-8
LC_PAPER=ja_JP.UTF-8
GTK_IM_MODULE=${GTK_IM_MODULE}
QT_IM_MODULE=${QT_IM_MODULE}
XIM_PROGRAM=${XIM_PROGRAM}
XMODIFIERS=${XMODIFIERS}
EOF
fi
return 0
}


## メイン =====================================================
# 第１引数をチェックし、入力メソッド別環境変数設定を行う
case $1 in
  scim) setSCIM ;;
  scim-bridge) setSCIM_BRIDGE ;;
  uim) setUIM ;;
  ibus) setIBUS ;;
  fcitx) setFCITX ;;
  none) setNone ;;
  *) echo "error in \$1" && exit 1 ;;
esac

# 第２引数をチェックし、設定を書き込む
case $2 in
  1)
		SETTING_FILE="/etc/sysconfig/i18n"
    if [ $1 = none ]; then
      for i in GTK_IM_MODULE QT_IM_MODULE XMODIFIERS XIM_PROGRAM;do
        sed -i "/^$i/D" ${SETTING_FILE}
      done
		else
		  write_settings $SETTING_FILE
		fi
		[ -f "$REQUIRE_PKG" ] && chown $USER:$USER $REQUIRE_PKG
		[ -f "$SUGGESTS_PKG" ] && chown $USER:$USER $SUGGESTS_PKG
		;;
  2)
		SETTING_FILE="$HOME/.i18n"
    if [ $1 = none ]; then
			rm -f $SETTING_FILE
		else
		  write_settings $SETTING_FILE
		fi
		;;
  *) echo "error in \$2" && exit 1 ;;
esac


## 関数・変数消去 =============================================
unset -f setSCIM setSCIM_BRIDGE setUIM setIBUS setFCITX setNone
unset -f write_settings
unset NAME COMMENT SETTING_FILE
unset REQUIRE_PKG SUGGESTS_PKG 


exit 0
