#!/bin/bash
# original filename: make-xboard-engine-logo.sh
# 2020-3-18 updated, ver 0.5-2, by Careone
# 2020-4-13 updated, ver 0.6, by Careone

APPNAME="make-xboard-engine-logo"
APPVER="0.6"
APPDESC=""

### HEAD ###
## debug switches
DEBUG=0
MAKE_MINI_PIC=0
##

SUFFIX=png

declare -i ID
ID=1

OPT_STR=

# useful commands
#   -transparent white: 把白色背景，替换成 透明
# convert xqboard-9x10.png -fuzz 2% -transparent white xqboard-alpha.png
#
#   -flatten 平整图像。即使用指定的背景色，替换原来的透明背景
# convert xqboard-alpha.png -background blue -flatten xqboard-gray.png

## hot colors
COL_GTK_GRAY='#eae9e7' 	#GTK 主题灰, 可用作象棋引擎 LOGO 图片的底色

COL_BD_WHITE='#f6d9a6'	#白格底色
COL_BD_YELLOW1='#d6904e' 	#棋盘黄木色/黑格底色
COL_BD_YELLOW2='#eb9a31' #棋盘鵝黃色

COL_BD_PINK='#f7c094' #淡粉红色

COL_ELEEYE_BLUE='#008080' # 象眼蓝

#COL_DPXQ_WHITE='#11' 	#东萍象棋-棋盘底色白
#COL_DPXQ_GRAY='#11' 	#东萍象棋-棋格线条灰

# tag 40: default Fill/Background color settings
COL_FILL_DEFAULT=white
COL_BG_DEFAULT=red
DEPTH_STR=
#COL_DEPTH_STR="-depth 8"

# Dir defines
global_logo_dir="/usr/share/games/plugins/logos"

user_xxq_dir="$HOME/xboard/xiangqi"
user_logo_dir="$HOME/xboard/plugins/logos"	#for option --make-logo

pic_dir=

BATCH_MODE=	# optional: 0, 1

declare -i POINTSIZE MAX
POINTSIZE=18

declare -a engine_str engine_cmd fill_col bg_col

logofont="$HOME/fonts/Alibaba-PuHuiTi-Bold.ttf" #可免费商用的字体，Bold 粗体
USE_CUSTOM_FONT=	#是否找到特定的字体
test_pic=
#test_pic="$user_logo_dir/xxx.png"


##
# package: gnome-chess
# /etc/gnome-chess/engines.conf
# [HoiChess]
# protocol=cecp
# binary=hoichess

### defines ###


# -----------
# 棋盘配色参考:
# 东萍棋盘粉底：#ecd2b4
# 东萍棋盘粗边灰：#646664

# xqboard-9x10.png 默认淡绿：#acf8f4
# -----------

## function 1.
# Xboard engines need make logos:
# maxqi hoixiangqi eleeye hoichess shamax
	_usage_cn () {
cat<<EOF
  制作 Xboard 象棋引擎的 LOGO 图片。图片规格: 100x50 像素, PNG 图片格式。
  也可以使用其它尺寸大小，但长宽比应为 2:1。
    生成的 LOGO 图片保存在 ~/xboard/plugins/logos/  目录下。
  使用时, 需要以 root 用户复制到系统目录: $global_logo_dir/
  字体说明: 程序会在当前用户的 ~/fonts/ 目录下查找指定的字体
   (建议选用 Bold 粗体)。如果字体缺失，则使用默认字体

用法: $APPNAME [引擎程序命令] [LOGO文字] [字体颜色] [背景颜色]
示例: $APPNAME eleeye_engine ELEEYE '#000000' yellow

选项:
  -bmp, --winboard    图片保存为 BMP 格式 (默认为 PNG 格式)
  -s, --suffix [png|bmp]
    指定图片格式

  -bg, --background [颜色]
    指定背景颜色。如: white 或者 '#ffffff' 代表白色, none 代表透明
  -fill, --fill-color [颜色]
    指定文字颜色
  --alpha, --none  图片使用透明背景
  -eb, --eleeye-blue   图片使用“ 象眼 (ELEEYE)”程序的蓝色色调背景 ('#008080')
  
  -50, --50x50     把小图片批量缩放、扩展为 50x50 像素
  -100, --100x50   把小图片批量缩放、扩展为 100x50 像素
 
  -cn2, -cn3, -cn4, -cn5, -cn6
    -cn2 表示图片内容包含2个中文汉字。这样可以自动使用较大的字体。
    后面的 -cn3 ... -cn6, 则使用更小号的字体 
  --xxq, --auto    批量生成以下引擎的 LOGO 图片:
      maxqi, hoixiangqi; eleeye; hoichess, shamax

  -v, --version    显示版本信息并退出
  -h, --help       显示帮助信息并退出
EOF
}

## function 2.
# Xboard engines need make logos:
# maxqi hoixiangqi eleeye hoichess shamax
	_show_sample () {
cat<<EOF
 $APPNAME $APPVER
   制作 Xboard 象棋引擎的 LOGO 图片。图片规格: 100x50 像素, PNG 图片格式

 用法: $APPNAME [引擎程序命令] [LOGO文字] [字体颜色] [背景颜色]
 示例: $APPNAME eleeye_engine ELEEYE '#000000' yellow
EOF
}
### defines ###

### HEAD ###

### BODY ###

for option in "$@"; do

    	case "$option" in

    	 -h | --help)
	   _usage_cn
	   exit 0 ;;

#
    	 -bg | --background)
	   if [ "$#" -ge 2 ]; then
    	     bg_col[0]="$2"; shift 2
    	   else
	     shift
	   fi ;;

    	 -fill | --fill-color)
	   if [ "$#" -ge 2 ]; then
    	     fill_col[0]="$2"; shift 2
    	   else
	     shift
	   fi ;;

#	   
    	 --alpha | --none)
	   bg_col[0]=none
	   shift ;;

    	 -eb | --eleeye-blue)
	   bg_col[0]="$COL_ELEEYE_BLUE"
	   shift ;;

#
    	 -bmp | --winboard)
	   SUFFIX=bmp
	   shift ;;

    	 -s | --suffix)
# -s [png|bmp]
	   if [ "$#" -ge 2 ]; then
    	     SUFFIX="$2"; shift 2
    	   else
	     shift
	   fi
	    ;;

#
    	 -cn2 | -cn3 | -cn4 | -cn5 | -cn6)
    	   OPT_STR="$1"

	   case "$OPT_STR" in
	     -cn2) POINTSIZE=26 ;;
	     -cn3) POINTSIZE=24 ;;
	     -cn4) POINTSIZE=22 ;;	     
	     -cn5) POINTSIZE=16 ;;	
	     -cn6 | *) POINTSIZE=14 ;;		          	   
	   esac
	   
	   if [ "$#" -ge 2 ];then
	     engine_str[0]="$2"
	   else
	     engine_str[0]="logo"
	   fi

	   if [ -z "${fill_col[0]}" ];then
	     fill_col[0]="$COL_FILL_DEFAULT"
	   fi	   

	   if [ -z "${bg_col[0]}" ];then
	     bg_col[0]="$COL_BG_DEFAULT"
	   fi	   
	   	   
#
DEBUG=1
	   if [ "$DEBUG" = 1 ];then
	     echo "   L220: fill_col[0]=${fill_col[0]}  bg_col[0]=${bg_col[0]}"
	     echo "       engine_str[0]=${engine_str[0]}  POINTSIZE=$POINTSIZE"
	   fi	   

  if [ "$MAKE_MINI_PIC" = 1 ]; then	   	   
    convert -strip $DEPTH_STR -fill "${fill_col[0]}" -background "${bg_col[0]}" \
     -pointsize $POINTSIZE -font "$logofont" label:"${engine_str[0]}"\
     -gravity Center "$user_logo_dir/${engine_str[0]}_mini.$SUFFIX"
  fi
  
    convert -strip $DEPTH_STR -fill "${fill_col[0]}" -background "${bg_col[0]}" \
     -pointsize $POINTSIZE -font "$logofont" label:"${engine_str[0]}"\
     -gravity Center -extent 100x50 "$user_logo_dir/${engine_str[0]}.$SUFFIX"

#
	   test_pic="$user_logo_dir/${engine_str[0]}.$SUFFIX"
	   echo -e "\n * show new picture: $test_pic"
	   
	   if [ -s "$test_pic" ];then
	     identify "$test_pic"
	     sleep 1
	     xdg-open "$user_logo_dir/" &
	     sleep 1
	     xdg-open "$test_pic" &
	   else echo "   Error: no picture found: $test_pic" 1>&2
	   fi	
     
         	   exit 0
    	   ;;
    	   
#
    	 -50 | --50x50 | -100 | --100x50)
    	   OPT_STR="$1"; shift
    	   
    	   case "$OPT_STR" in
    	     -50 | --50x50) SIZE_STR="50x50"; pic_dir="$user_logo_dir/$SIZE_STR"
    	     	;;
    	     -100 | --100x50) SIZE_STR="100x50"; pic_dir="$user_logo_dir/$SIZE_STR"
    	     	;;
	     *) SIZE_STR="other"; pic_dir="$user_logo_dir/$SIZE_STR"
    	     	;; 	    	     	
    	   esac
    	   
    	   #
	   echo " 调整小图片，扩充大小到 $SIZE_STR 像素..."
	    
	     if [ ! -d "$pic_dir" ]; then
		mkdir -p "$pic_dir"	    
	     fi
#
	   if [ -z "${fill_col[0]}" ];then
	     fill_col[0]="$COL_FILL_DEFAULT"
	   fi	   

	   if [ -z "${bg_col[0]}" ];then
	     bg_col[0]="$COL_BG_DEFAULT"
	   fi	 
#	   	    
	   for a in "$@"; do 
	     if [ -s "$a" ]; then
	       b="${a%.*}"	# 去掉最后面的扩展名
	       echo -n " * $ID "
	       convert -resize 48x48 "$a" -background ${bg_col[0]} -gravity Center \
	       -extent $SIZE_STR "$pic_dir/${b}_${SIZE_STR}.$SUFFIX"
	       
	     else echo -n " * $ID (Error: void file. skip)" | grep --color=auto "Error|skip"

	     fi
	       let "ID += 1"
	   done
	   
	   #
	   test_pic="$pic_dir/${b}_${SIZE_STR}.$SUFFIX"
	   echo -e "\n * show new picture: $test_pic"
	   
	   if [ -s "$test_pic" ];then
	     identify "$test_pic"
	     sleep 1
	     xdg-open "$pic_dir/" &
	     sleep 1
	     xdg-open "$test_pic" &
	   else echo "   Error: no picture found: $test_pic" 1>&2
	   fi
	   
	   exit 0 ;;
	   
#	   
    	 --xxq | --auto)
	   BATCH_MODE=1
	   echo " auto creat LOGO pictures for Xboard engines..."

# tag 440b:

## old color defines for ver 4.9.1-6 and early
#engine_cmd=( maxqi hoixiangqi eleeye hoichess shamax )
#engine_str=( Maxqi HoiXiangqi ELEEYE HoiChess Shamax ) #array id: 0-4
#bg_col=( '#d6904e' '#f7c094' 'yellow' '#eae9e7' '#eae9e7' )
#fill_col=( 'red' 'black' 'black' 'magenta' 'green' )

## new color defines for ver 4.9.1-7.
# modified for: maxqi.png, hoixiangqi.png, eleeye.png
# added: ELEEYE.png
engine_cmd=( maxqi hoixiangqi eleeye hoichess shamax ELEEYE )
engine_str=( Maxqi HoiXiangqi ELEEYE HoiChess Shamax ELEEYE ) #array id: 0-4
bg_col=( '#eae9e7' '#f7c094' 'yellow' '#eae9e7' '#eae9e7' '#008080' )
fill_col=( '#008080' '#008080' 'black' 'magenta' 'green' 'white' )

	   echo -e "  引擎命令:  ${engine_cmd[*]}\n  LOGO 文字: ${engine_str[*]}"
	   shift ;;

	   	#
    	-v | --version)
	  echo "  $APPNAME $APPVER"
	  exit 0 ;;

    	-*)
	  echo "Unrecognized option \`$option'" 1>&2
	  exit 1 ;;	
	esac
	
done

if [ "$BATCH_MODE" != 1 ]; then
# ---
# 用法: $APPNAME [引擎程序命令] [LOGO文字] [字体颜色] [图片背景色]
# 示例: $APPNAME eleeye_engine ELEEYE '#000000' yellow
# 
# 如果给齐了4个参数，或者更多参数，则只取4个，忽略其它;
# 如果只提供3个参数，则默认最后的参数4 (背景颜色) 为 透明;
# 如果只提供2个参数，则默认缺失的字体/背景配色方案为 白底黑字;
# 如果只提供1个参数，则默认第2个参数同 第1个;
# 如果没有给出参数，则显示用法示例，并退出.

  if [ "$#" -ge 4 ]; then
    engine_cmd[0]="$1"; engine_str[0]="$2";
      if [ -z "${fill_col[0]}" ]; then
        fill_col[0]="$3"; 
      fi  
      if [ -z "${bg_col[0]}" ]; then
        bg_col[0]="$4"  
      fi  
  elif [ "$#" = 3 ]; then
    engine_cmd[0]="$1"; engine_str[0]="$2";
    
      if [ -z "${fill_col[0]}" ]; then
        fill_col[0]="$3"; 
      fi    
          
      if [ -z "${bg_col[0]}" ]; then
        bg_col[0]="$COL_BG_DEFAULT"  
      fi    
  elif [ "$#" = 2 ]; then
    engine_cmd[0]="$1"; engine_str[0]="$2";
      if [ -z "${fill_col[0]}" ]; then
        fill_col[0]="$COL_FILL_DEFAULT"  
      fi    
      
      if [ -z "${bg_col[0]}" ]; then
        bg_col[0]="$COL_BG_DEFAULT"  
      fi    
  elif [ "$#" = 1 ]; then
    engine_cmd[0]="$1"; engine_str[0]="$1";

      if [ -z "${fill_col[0]}" ]; then
        fill_col[0]="$COL_FILL_DEFAULT"  
      fi    
      
      if [ -z "${bg_col[0]}" ]; then
        bg_col[0]="$COL_BG_DEFAULT"  
      fi    
     
  else 
	_show_sample;
	exit 0;
    #engine_cmd[0]="engine"; engine_str[0]="Engine";
    #fill_col[0]="black"; bg_col[0]="white"  
  
  fi
fi

# tag 190:
    	 ## 绘制象棋引擎的 logo 图片 100x50, 8-bit, png
    	 # /usr/share/games/plugins/logos/fairymax.png
	 # /usr/share/games/plugins/logos/maxqi.png
	 #
	 # /usr/share/games/plugins/xboard/fairymax.eng
	 # /usr/share/games/plugins/xboard/maxqi.eng

	echo " 制作象棋引擎 LOGO 图片 (格式: 100x50, 8-bit, png)..."
	echo -e " 查找现有的象棋引擎 LOGO 图片... (目录: $global_logo_dir/)"
	  ls "$global_logo_dir/"
	  echo

	echo " 开始制图..."
  if [ -r "$logofont" ]; then
    USE_CUSTOM_FONT=1
    echo " 找到字体: $logofont"
  fi  
    	       if [ ! -d "$user_logo_dir" ]; then
	         mkdir -p "$user_logo_dir"
	       fi


## 象棋引擎 LOGO 配色方案参考：
# 1. 中国象棋相关引擎：maxqi, hoixiangqi, ELEEYE
#   底色：木纹色。字体红色。如果是未适配的引擎，底色为黄色，如 ELEEYE
#   注：底色尽量不要用黑色或白色。
#
# 2. 国际象棋/其它象棋相关引擎：如 hoichess, shamax
#   底色：GTK灰。字体不带描边

# tag 440a:
#engine_str=( Maxqi HoiXiangqi ELEEYE HoiChess Shamax ) #array id: 0-4
#engine_cmd=( maxqi hoixiangqi eleeye hoichess shamax )

#bg_col=( '#d6904e' '#f7c094' 'yellow' '#eae9e7' '#eae9e7' )
#fill_col=( 'red' 'black' 'black' 'magenta' 'green' )

# magenta 品红色

# 说明：如果颜色代码是 #00ff00 格式，数组值需要加上单引号，或者双引号，否则报错。
#       如： '#00ff00'

MAX="${#engine_cmd[@]}"
let "MAX -= 1"

for a in `seq 0 1 $MAX`; do
  STR="${engine_str[a]}"
  
  if [ -z "$STR" ]; then
    continue;
  fi
  
  declare -i SIZEOF="${#STR}" #how many letters in String
  
  if [ "$SIZEOF" -le 5 ]; then
    POINTSIZE=30 #sample: Maxqi
  elif [ "$SIZEOF" -ge 6 ] && [ "$SIZEOF" -le 7 ]; then
    POINTSIZE=22 #sample: ELEEYE
  elif [ "$SIZEOF" -ge 8 ] && [ "$SIZEOF" -le 10 ]; then
    POINTSIZE=16 #sample: Hoichess, Hoixiangqi
  else POINTSIZE=14  
  fi
 
  echo -e " * $ID: 引擎命令: ${engine_cmd[a]}  文字颜色: ${fill_col[a]}"
  echo -e "      LOGO文字: ${engine_str[a]}  背景颜色: ${bg_col[a]}"

  if [ "$USE_CUSTOM_FONT" = 1 ]; then
    
    convert -strip -font "$logofont" $DEPTH_STR -fill "${fill_col[a]}" \
    -background "${bg_col[a]}" \
    -pointsize $POINTSIZE label:"${engine_str[a]}" -gravity Center -extent 100x50\
     "$user_logo_dir/${engine_cmd[a]}.$SUFFIX"
  else
    convert -strip $DEPTH_STR -fill "${fill_col[a]}"\
    -background "${bg_col[a]}" \
    -pointsize $POINTSIZE label:"${engine_str[a]}"\
    -gravity Center -extent 100x50 "$user_logo_dir/${engine_cmd[a]}.$SUFFIX"
  fi
  
  #identify "$user_logo_dir/${engine_cmd[a]}.$SUFFIX"
  let "ID += 1"
done
	   echo -e " 查看生成的 LOGO 图片... (目录: $user_logo_dir/)"
	   echo -e "  提示：可以把图片复制到以下目录 (需要以 root 用户身份复制)\n  $global_logo_dir/\n"
	   #identify "$user_logo_dir/"*.$SUFFIX
	   
	   ls "$user_logo_dir/"
	   sleep 1

	   test_pic="$user_logo_dir/${engine_cmd[a]}.$SUFFIX"	   
	   
	   if [ -s "$test_pic" ]; then
	     file "$test_pic"
	     #identify "$test_pic"
	     sleep 1
	     xdg-open "$user_logo_dir/" &
	     sleep 1
	     eog "$test_pic" &
	   fi

### BODY ###

exit 0;
