#!/bin/bash
# original filename: xboard-xiangqi-piece2svg.sh
# 2020-3-01 updated, by Careone

APPNAME="xboard-xiangqi-piece2svg"
APPVER="0.5-1beta1"
APPDESC=""

### HEAD ###
## debug switches
DEBUG=0
DEL_TMP_PIC=0

##
SUFFIX=
declare -i ID=1

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

# 自定义棋盘图片的技巧：
# 1. 推荐图片的 宽:高 = 9:10, 必须为PNG格式。默认尺寸 441x490.适用于 49x49棋格;
# 2. 棋盘河界不要有“楚河汉界”或其它文字。不然缩放棋格大小时，文字会变形残缺;
# 3. 自定义的棋盘图片，使用时，九宫斜线中间可能会残缺断点、错位、变双线；
# 4. 自定义的棋盘图片，棋子的定位可能不在中间，需要特别调整图片；
# 5. 如果原始棋盘图片的棋格大小是大于 49x49,则可以直接使用这个图片，不一定要缩放
#    到 441x490 尺寸。理由：原始大图片，通常使用时，九宫斜线中间会出现断点；
#    如果使用缩放后的标准尺寸图片，使用时，九宫斜线中间，会变成双线段，或者突起;
	       
## 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_DPXQ_WHITE='#11' 	#东萍象棋-棋盘底色白
COL_DPXQ_GRAY='#11' 	#东萍象棋-棋格线条灰

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

user_xxq_dir="$HOME/xboard/xiangqi"
user_theme_dir="$HOME/xboard/themes"

user_piece_dir= 		#for option --convert-piece
# sample:
#user_piece_dir="$user_theme_dir/xiangqi-01"

user_board_dir="$HOME/xboard/themes/textures" 	#for option --make-board
user_logo_dir="$HOME/xboard/plugins/logos"	#for option --make-logo

# TODO: for option --make-board 
declare -a box box_color box_size
declare -a frame_color
XQ_BOARD_PICNAME=	
#xq_board_picname=

# for option --nologo
AUTOLOGO=true	#optional: true (recommened), false

# for option --board
XQBOARD=xiangqi-9x10
## 中国象棋棋盘图片的主文件名，不带扩展名。
#    如: xiangqi-9x10, 对应 xiangqi-9x10.png
# 说明: xboard 选项      ~~/themes/textures/${XQBOARD}.png
# = /usr/share/games/xboard/themes/textures/${XQBOARD}.png
# 注: 棋盘图片必须是 PNG 格式，宽:高 = 9:10. 默认为 441x490, 即 49x49 的倍数

# for option --make-logo
declare -i POINTSIZE=18
declare -a program_name program_cmd fill_col bg_col

xqfont="$HOME/fonts/Alibaba-PuHuiTi-Bold.ttf" #可免费商用的字体，Bold 粗体
USE_CUSTOM_FONT=	#是否找到特定的字体
test_pic=
#test_pic="$user_piece_dir/WhiteGold.svg" #红帅图片
#test_pic="$user_piece_dir/BlackGold.svg" #黑将图片

# TODO: for option -md, --make-board

# xxq: Xboard XiangQi

declare -i XXQ_PIECE_THEME_ID
XXQ_PIECE_THEME_STR=	# 用于把 数字 XXQ_PIECE_THEME_ID ，强制转换成2位数字 

# for option --convert-piece
xxq_piece_theme_index="$user_xxq_dir/.xboard-xiangqi-piece-theme.index"

declare -a dpxq_picname dpxq_pic_desc
dpxq_picname=( ln_49.gif r8_36.gif b8_36.gif r0_49.gif b0_49.gif )

declare -a picname_src picname_desc picname_samp
declare -i PICNAME_ID=0

# array id  0: 适用于未知的棋子图片主题
picname_src[0]=
picname_desc[0]=
picname_samp[0]=

picname_src[1]="gmchess"
picname_desc[1]="Gmchess 天书棋谈 (Linux版)"
picname_samp[1]="red_king.png (红帅)"

picname_src[2]="xiangQiXuanFeng.exe"
picname_desc[2]="象棋旋风(Windows版)"
picname_samp[2]="rk.png (红帅)"

picname_src[3]="xqwzard.apk"
picname_desc[3]="象棋巫师(安卓版)"
picname_samp[3]="rk.png (红帅1/木纹), rk2.png (红帅2/红绿卡通)"

picname_src[4]="tianTianXiangqi.apk"
picname_desc[4]="腾迅天天象棋(安卓版)"
picname_samp[4]="redShuai0.png (红帅)"

picname_src[5]="ccbridge.exe"
picname_desc[5]="CCBridge 象棋桥 (Windows版)"
picname_samp[5]="r1k.png (红帅)"

picname_src[6]="xqstudio.exe"
picname_desc[6]="XQStudio 象棋演播室(Windows版)"
picname_samp[6]="z1_r5_60.png (红帅1), z2_r5_60.png (红帅2), r5_38.gif (红帅3)"

picname_src[7]="dpxq.html"
picname_desc[7]="东萍象棋(网页版)"
picname_samp[7]="zhcn/r8_36.gif (红方7子文字/简体), zhtw/r8_36.gif (红方7子文字/繁体)"


## for option --theme
# 已适配的中国象棋的棋子-棋盘配对主题
declare -a xxq_theme
XXQ_THEME=
# xxq_theme=( wood mono redblack redblack2 ccbridge dpxq dpxq-cn dpxq-tw )
xxq_theme=( wood mono ccbridge dpxq dpxq-cn dpxq-tw )
## 
# package 1: pgn-extract
# /usr/share/pgn-extract/eco.pgn
#
# package 2: gnome-chess
# /etc/gnome-chess/engines.conf
# [HoiChess]
# protocol=cecp
# binary=hoichess

### defines ###
declare -i ID=1
prefix="/usr/share/games/xboard"

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

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

## pid, Piece Image Directory, 棋子图片目录。默认为
# ~~/themes/xiangqi, 即
# /usr/share/games/xboard/themes/xiangqi
XXQ_PID=xiangqi

## ---------------------------
## tag 45: defines for option --convert-piece
BG_RED_CIRCLE=white	#红方棋子圆圈的底色。主要用于为腾迅天天象棋棋子主题添加底色
BG_BLK_CIRCLE=white

declare -a tmp_id 	
## 用于 xiangqi-xx 子目录对应的两位数字 xx 。常用于索引数字文件被错误删除，导致数值
#    重新从 1 开始编号的问题

declare -a red_picname blk_picname
# Xboard Xiangqi piece picture filenames
red_picname[0]="WhiteGold"
red_picname[1]="WhiteAdvisor"
red_picname[2]="WhiteElephant"
red_picname[3]="WhiteKnight"
red_picname[4]="WhiteRook"
red_picname[5]="WhiteCanon"
red_picname[6]="WhitePawn"

blk_picname[0]="BlackGold"
blk_picname[1]="BlackAdvisor"
blk_picname[2]="BlackElephant"
blk_picname[3]="BlackKnight"
blk_picname[4]="BlackRook"
blk_picname[5]="BlackCanon"
blk_picname[6]="BlackPawn"

# function 1.
	_usage_cn () {
cat<<EOF
  转换中国象棋棋子 PNG/GIF 图片为 Xboard 象棋的 SVG 图片格式
Usage: $APPNAME [选项]

Options:
  -p, --convert-piece  把当前目录下的图片，转换为 SVG 图片格式 (最多14张图片)
    如：自动转换其它程序包含的中国象棋棋子图片(PNG/GIF/BMP/JPG)。
    可以自动识别部分常见中国象棋程序的图片命名规则 
        技术说明: 先用 ImageMagick 的 convert 命令，转换成 PDF 图片；
        再用 pdf2svg 命令，转换成 SVG 图片 (注: 需要先安装软件包 pdf2svg)
  --gif, --png   显示原始 GIF 或者 PNG 棋子图片文件命名规则示例

  -a, --about-filename   显示已经适配的原始棋子图片文件命名规则

  -x, --extra       显示附加功能选项
  --tips           显示 xboard 常用选项和参数
  -v, --version    显示版本信息并退出
  -h, --help       显示帮助信息并退出

See also:
     命令: convert, identify, display, pdf2svg

Bugs: 
请发送缺陷报告给 Careone <emacslocale@126.com>. 

Homepage: 
https://gitee.com/atzlinux/xboard-xiangqi
EOF
}

# function 2.
	_option_extra () {
cat<<EOF
 $APPNAME 附加功能选项: 
  --dpxq, --ready4dpxq  对东萍象棋(网络版)的图片素材进行预处理。处理完成后，
    需要再对生成的 GIF 棋子图片，运行 $APPNAME -p 命令才能得到 SVG 棋子图片
  --ttxq, --ready4ttxq  对腾迅天天象棋(安卓版)的图片素材进行预处理。处理完成后，
    需要再对生成的 PNG 棋子图片，运行 $APPNAME -p 命令才能得到 SVG 棋子图片

  -ml, --make-logo  自动生成象棋引擎对应的 logo 图片。图片应保存到系统目录
    $global_logo_dir/ 下
    程序会在当前用户的 ~/fonts/ 目录下查找指定的字体 (建议选用 Bold 粗体)。
    如果没有找到字体，则使用默认字体

EOF
}

## function 3a. for option --convert-piece
	_about_piece_theme () {
cat<<EOF
  1.建议删除目录下多余的图片；或者把需要的图片，移动/复制到其它目录再运行;
  2.如果当前目录有多套棋子图片，建议把多余的棋子图片，移动/复制到其它目录再运行;
  3.如果当前目录的图片文件名，不能被有效识别、自动重命名，请先转换图片，再手动
    修改 SVG 图片的文件名
EOF
}


## function 3b. for option --convert-piece
	_about_supported_piece_theme () {
cat<<EOF
   转换 SVG 图片时，支持的象棋软件棋子图片目录、命名规则:
    ------------------------ 
   1. Gmchess 天书棋谈(Linux版)。如: /usr/share/gmchess/themes/wood/red_king.png 
   2. 象棋巫师(安卓版)。     如: assets/540/rk.png (红帅), rk2.png (红帅)
   3. 象棋旋风(Windows版)。命名规则同“2. 象棋巫师(安卓版)”
 * 4. 腾迅天天象棋(安卓版)。 如: assets/Images/redShuai0.png (红帅) 
     (提示: 从 天天象棋 转换生成的 SVG 图片为半成品，需要手动添加圆圈背景底色)
   5. CCBridge 象棋桥 (Windows版)。如: r1k.png, b1k.png 

   6. XQStudio 象棋演播室(Windows版)。棋子图片有三款，两种命名规则，如: 
      * z1_r5_60.png (红帅), z2_r5_60.png
      * r5_38.gif (红帅)
   7. 东萍象棋(网页版)。如: zhcn/r5_24.gif (红帅), zhtw/r5_24.gif 
   ------------------------ 
   
EOF
}


## xiangqi piece name style 2: xqwdroid.apk (xiangqiWuShi)
# assets/540/ , 57x57
# ba2.png  bc2.png  bn2.png  bp2.png  ra2.png  rc2.png  rn2.png  rr2.png
# bb2.png  bk2.png  br2.png  rb2.png  rk2.png  rp2.png
## ---------------------------
              

## XQStudio 象棋演播室(Windows版)，主题 6-1, 6-2：
#    图片命名规则：z[12]_[rb][1-7]_60.png (1-7: 车马相仕帅炮兵) 
## XQStudio 象棋演播室(Windows版)，主题 6-3：
#    图片命名规则：[rb][1-7]_38.gif (1-7: 车马相仕帅炮兵)
# b1_38.gif  b2_38.gif  b3_38.gif  b4_38.gif  b5_38.gif  b6_38.gif  b7_38.gif
# r1_38.gif  r2_38.gif  r3_38.gif  r4_38.gif  r5_38.gif  r6_38.gif  r7_38.gif
#

## function 4:
	_about_pic_src () {
cat<<EOF
   棋子图片来源: ${picname_src[PICNAME_ID]}
   棋子图片主题: ${picname_desc[PICNAME_ID]}
   棋子图片示例: ${picname_samp[PICNAME_ID]}
EOF
}

# function 5a.
	_about_filename () {
cat<<EOF
  $SUFFIX 棋子图片文件名示例

数字: 1  2     3      4      5    6    7
棋子: 车 马  相/象  仕/士  帅/将  炮  兵/卒

红方(r): r1.$SUFFIX(车) r2.$SUFFIX(马) r3.$SUFFIX(相) r4.$SUFFIX(仕)
         r5.$SUFFIX(帅) r6.$SUFFIX(炮) r7.$SUFFIX(兵)
黑方(b): b1.$SUFFIX(车) b2.$SUFFIX(马) b3.$SUFFIX(象) b4.$SUFFIX(士)
         b5.$SUFFIX(将) b6.$SUFFIX(炮) b7.$SUFFIX(卒)
EOF
}
    
## function 5:
	
		_show_tips () {
cat<<EOF

EOF
}
 
### defines ###

### HEAD ###

### BODY ###

for option in "$@"; do

    	case "$option" in

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

    	 -a | --about-piece)
	   _about_supported_piece_theme
	   exit 0 ;;

    	 -c | --convert-piece)
		ID=1	#init
	   echo " 把当前目录下的中国象棋棋子图片，转换成 XBoard 支持的 SVG 图片格式..."
	   echo -e " (转换过程: xxx -> PDF -> (pdf2svg) -> SVG  注: 无法直接转换生成 SVG)\n"
   	   echo " 提示：对于某些常见的中国象棋软件，转换成 SVG 图片格式后，还会自动"
   	   echo "       调整生成的图片文件名。详情请参考命令: $APPNAME -ap"
   	   
	       if [ ! -d "$user_xxq_dir/" ]; then
	         mkdir -p "$user_xxq_dir/"
	       fi
	       	    
	       	#如果 索引编号文件 不存在，或者数值错误，则默认值 = 1    
	       if [ ! -s "$xxq_piece_theme_index" ]; then
	         XXQ_PIECE_THEME_ID=1
	       else
	         XXQ_PIECE_THEME_ID=`head -1 "$xxq_piece_theme_index"`
	         if [ "$XXQ_PIECE_THEME_ID" = 0 ]; then
	           XXQ_PIECE_THEME_ID=1
	         fi  
	       fi
	       
	       if [ "$XXQ_PIECE_THEME_ID" -le 9 ]; then
	         # 如果 象棋主题目录 的编号是 1-9,则前面补0,强制转换为两位数字
	         XXQ_PIECE_THEME_STR="0${XXQ_PIECE_THEME_ID}"
	       else XXQ_PIECE_THEME_STR="${XXQ_PIECE_THEME_ID}"
	       fi
	       
	       ## 保险：如果索引编号文件 被错误地删除，或者文件不可读
	       # 或者文件不可写（无法更新数值），或者用户手动创建了类似于 xiangqi-xx
	       # 之类的目录名，则检测用户 user_piece_dir 目录名列表，得到最大的编号 
	       # 数字，再确定最终采用的子目录名称
	        
		user_piece_dir="$user_xxq_dir/xiangqi-${XXQ_PIECE_THEME_STR}"
		
		# --------------		  
		  ###
		  if [ -d "$user_piece_dir" ]; then
		    
		    tmp_id=( `ls $user_xxq_dir | grep xiangqi-[0-9][0-9] | cut -d'-' -f2 | sort` ) 
		    # array tmp_id value output: 01 - 99 
		    
		    ## 数组 tmp_id 的最后一个数值(2位数字)，即最大数字，用作
		    #    新的子目录名 xiangqi-xx 的序号
		    b="${#tmp_id[@]}"; let "b -= 1"
		    XXQ_PIECE_THEME_STR="${#tmp_id[b]}"
		    
		    # 1.如果 XXQ_PIECE_THEME_STR 的值是 00-09,如果有，则强行指定 
		    #   子目录名为 xiangqi-10, 不再检测 xiangqi-10/ 是否存在; 
		    # 2.如果值是 10-99, 则数值 +1; 
		    # 3.如果值是 99，则强行指定子目录名为 xiangqi-100, 且不再检测 
		    #   xiangqi-100/ 是否已经存在（如果存在，可能会覆盖目录下的
		    #   棋子图片文件）。说明：没必要永无休止地检测目录名。默认方案
		    #   支持 01-99 共99个子目录，常规使用完全足够；
		    
		    case "$XXQ_PIECE_THEME_STR" in
		      0[1-9]) #去除2位数前面的 0，转换成1位数字 1-9
			XXQ_PIECE_THEME_ID=`echo "$XXQ_PIECE_THEME_STR" | sed '/0/s///'`; 
			XXQ_PIECE_THEME_STR="0${XXQ_PIECE_THEME_ID}" 
				;;
		      [1-9][0-9]) 
			let "XXQ_PIECE_THEME_ID += 1"; 
			XXQ_PIECE_THEME_STR="$XXQ_PIECE_THEME_ID" ;;
		      *) XXQ_PIECE_THEME_ID=100; XXQ_PIECE_THEME_STR=100 ;;  
		    esac
		    
		    user_piece_dir="$user_xxq_dir/xiangqi-${XXQ_PIECE_THEME_STR}"
		    
		    if [ ! -d "$user_piece_dir" ]; then
		      mkdir -p "$user_piece_dir"
		    fi

	          else
	            mkdir -p "$user_piece_dir/"
	          fi
		# --------------
					       
	   sleep 1
	   _about_piece_theme
	   #_about_supported_piece_theme
	   
	   sleep 2
	   echo
	   
# tag 590:
	   echo " 检测图片命名规则..."

	   for a in *.png *.gif; do
	     if [ ! -s "$a" ]; then
	       continue
	     fi
	     
	     case "$a" in
	       red_king.png | black_king.png) echo -n " * $ID"; #break; 
	       	 	PICNAME_ID=1; echo " (${picname_desc[PICNAME_ID]})" ;;
	       
	       [rb][kabnrcp]2.png |[rb][kabnrcp].png) echo -n " * $ID"; #break; 
	       	 	PICNAME_ID=3; echo " (${picname_desc[PICNAME_ID]})" ;;
	       [rb][kabnrcp].png) echo -n " * $ID"; break; 
	       		PICNAME_ID=2; echo " (${picname_desc[PICNAME_ID]})" ;;
	       
	       redShuai0.png | blackShuai0.png) echo -n " * $ID"; #break; 
	       		PICNAME_ID=4; echo " (${picname_desc[PICNAME_ID]})" ;;
	       [rb][1-7][kabnrcp].png) echo -n " * $ID"; #break; 
	       		PICNAME_ID=5; echo " (${picname_desc[PICNAME_ID]})" ;;
	       
	       z[12]_[rb][1-7]_60.png | [rb][1-7]_38.gif) echo -n " * $ID"; #break; 
	       		PICNAME_ID=6; echo " (${picname_desc[PICNAME_ID]})" ;;
	       [rb][1-7]_24.gif | [rb][1-7].gif) echo -n " * $ID"; #break; 
	       		PICNAME_ID=7; echo " (${picname_desc[PICNAME_ID]})" ;;

	       	*) #PICNAME_ID=0; 
		 	echo " * $ID 未知图片: $a";
	       		;;
	     esac
	     let "ID += 1"
	     #sleep 1
	   done
	
# tag 560:
	ID=1	# init
 	   if ! which pdf2svg &>/dev/null; then
	     echo " 警告 (W180): 找不到命令 pdf2svg ! 请先安装软件包 pdf2svg, 然后重试" 1>&2
	     exit 1;
	   else
	     #OLD_PWD="`pwd`"
	     echo " 当前目录: '`pwd`'"
	     
	     # supported pic formats: png, gif, bmp, jpg/jpeg
	     
	     # ----------------
	     #for a in *.[pP][nN][gG]; do
	     for a in *.[pP][nN][gG] *.[gG][iI][fF] *.[bB][mM][pP] *.[jJ][pP][gG] *.[jJ][pP][eE][gG]; do
	       if [ ! -s "$a" ]; then
	         continue
	       fi
	       
	       echo -n " $ID"
	       
	       if [ ! -d "$user_piece_dir/_pdf/" ]; then
	         mkdir -p "$user_piece_dir/_pdf/"
	       fi
	      
## check pictures name style
	# 如果是 DPXQ 网页版的图片资源，或者腾迅天天象棋，先对原始图片做预处理，
	# 再提示 手动进行后续操作。
        # tag 590-4 (tianTianXiangqi, PNG):

	if ls redShuai0.png &>/dev/null; then
	  PICNAME_ID=4; _about_pic_src;
	  echo -e "\n 提示 (N600): 请切换到子目录 _png/ ，为透明图片添加\
 [背景颜色] (红/黑), 或者添加 [棋子背景图片] 后，再重新运行一次"

	# tag 590-7 (for DPXQ_HTML, GIF):   	
	elif ls [rb][1-7]_24.gif &>/dev/null; then
	  PICNAME_ID=7; _about_pic_src;
	  echo -e "\n 提示 (N600): 请切换到子目录 _png/ ，为透明图片添加\
 [背景颜色] (红/黑), 或者添加 [棋子背景图片] 后，再重新运行一次"

	else :
	fi
       # ============================	      
       ## piece filename style 2: 
	#	tencent tianTianXiangqi.apk (assets/Images/*.png)
       # 	 TODO
       # 注意：此主题下，棋子图片并非四面居中，需要 -trim +repage 自动裁切白边
       #   并居中。另外，棋子图片圆圈底色为透明，需要手动添加圆圈底色
       #  （红/黑/空白棋子底图）
        # blackBing0.png  blackMa0.png   blackShi0.png    blackXiang0.png
	# blackJu0.png    blackPao0.png  blackShuai0.png
	#
	# redBing0.png  redMa0.png   redShi0.png    redXiang0.png
	# redJu0.png    redPao0.png  redShuai0.png
 # ============================	      
 # piece filename style 1: gmchess for Linux
 # 	/usr/share/gmchess/themes/wood/
 #	/usr/share/gmchess/themes/west/
 # red_advisor.png  red_cannon.png    red_king.png    red_pawn.png
 # red_bishop.png   red_knight.png  red_rook.png
 # 
 # black_advisor.png  black_cannon.png    black_king.png    black_pawn.png
 # black_bishop.png   black_knight.png  black_rook.png

# tag 540: about DPXQ_Xiangqi_HTML theme
# r0_49.gif (48x48): 红色圆圈，用于红方棋子的背景底图
# b0_49.gif (48x48): 黑色圆圈，用于黑方棋子的背景底图
#
# b8_36.gif (258x36): 黑方7个连体字，车马象士将炮卒 
# r8_36.gif (258x36): 红方7个连体字，车马相仕帅炮兵
#
# ln_49.gif (443x492): 49x49 棋盘, 比最小参考尺寸 441x490 略大。可使用命令
# 直接裁切、格式转换，得到适用于 xboard-xianqi 的棋盘图片 xqboard-dpxq.png
# convert ln_49.gif -crop 441x490+1+1 xqboard-dpxq.png

# tag 705: for tianTianXiangqi.apk
         _piece_bg="piece-bg.png"

	       case "$a" in
	        # case 1: 
		# 如果检测东萍象棋 24x24 GIF 小图片,提示不采用。改为从其它棋子文字
		#   连体图片裁切、添加红/黑圆圈底图，生成棋子图。另外再自动剪切生成
		#   一张棋盘图
		 
## tag 625:
		 [rb][1-7]_24.gif) 
		   #if [ "$PICNAME_ID" = 6 ]; then
		   #  break
		   #fi
		   
		   echo " 提示: 当前目录发现 [东萍象棋] 24x24 GIF 小图片。缺点：清晰度不够。不采用。"
		   echo "     改为从其它棋子文字连体图片裁切、添加红/黑圆圈底图，生成棋子图..."

# ln_49.gif		棋盘图片，适用 49x49 棋格 
# r8_36.gif b8_36.gif 	红方/黑方棋子文字（背景透明）
# r0_39.gif b0_39.gif	红方/黑方圆圈底图

## 对于36x36 的棋子汉字，推荐选择 [rb]0_49.gif 或更大号圆圈底图。
#  如果底图圆圈小于49，红方 帅/炮/兵，这三子的左下角，可能超出圆圈外
# 
	    	   dpxq_pic_desc[0]="棋盘图片，适用 49x49 棋格"
	    	   dpxq_pic_desc[1]="红方棋子文字，背景透明"
	    	   dpxq_pic_desc[2]="黑方棋子文字，背景透明"
	    	   dpxq_pic_desc[3]="红色圆圈底图" 
	    	   dpxq_pic_desc[4]="黑色圆圈底图"  	   
	    	   
		  		   
		   if [ ! -d "$user_piece_dir/_gif-src" ]; then
		     mkdir -p "$user_piece_dir/_gif-src"
		   fi

		   if [ ! -d "$user_piece_dir/_alpha" ]; then
		     mkdir -p "$user_piece_dir/_alpha"
		   fi
		   if [ ! -d "$user_piece_dir/_png" ]; then
		     mkdir -p "$user_piece_dir/_png"
		   fi
		   if [ ! -d "$user_piece_dir/_pdf" ]; then
		     mkdir -p "$user_piece_dir/_pdf"
		   fi		   
		   echo
		   
		   # pic 1: board pic (ln_XX.gif)
		   if [ -s "${dpxq_picname[0]}" ] && [ ! -s "_png/${dpxq_picname[0]}" ]; then 
		     DPXQ_BOARD_PNG="xqboard-dpxq.png"
		     echo " * 找到原始图片: ${dpxq_picname[0]} (${dpxq_pic_desc[0]})"
		     echo "   生成 [棋盘] 图片 ( _png/$DPXQ_BOARD_PNG )..."
		     
		     convert -crop 441x490+1+1 "${dpxq_picname[0]}" -strip "_png/$DPXQ_BOARD_PNG"
		   elif [ -s "_png/${dpxq_picname[0]}" ]; then
			 echo " * 已存在 [棋盘] 图片: _png/$DPXQ_BOARD_PNG" 
		   else :
		   fi
		   
		   # pic 2-5: 原图: [rb]8.gif 红黑棋子连体图片；[rb]0_XX.gif 红黑圆圈

		   for a in `seq 1 4`; do
		     if [ -s "${dpxq_picname[a]}" ]; then 
		       echo "  * 找到原始图片: ${dpxq_picname[a]} (${dpxq_pic_desc[a]})"
		       cp "${dpxq_picname[a]}" "_gif-src/${dpxq_picname[a]}"
		     fi
		   done

		   
		   echo " 复制需要的 [棋子] 相关图片到新目录: _gif-src/"
			cd _gif-src

		   if [ -s "${dpxq_picname[1]}" ] || [ -s "${dpxq_picname[2]}" ]; then
		     echo " * 裁切棋子文字图片 (红方原图 = ${dpxq_picname[1]}  黑方原图 = ${dpxq_picname[2]})..."
		     # cmd: identify xxx.gif
		     # output: ln_49.gif GIF 443x492 443x492+0+0 8-bit sRGB 4c ...
		     
		     # a: piece size. example: 36 
		     a=`identify "${dpxq_picname[1]}" | cut -d' ' -f3 | cut -d'x' -f2`
		     #echo " L687: a = $a"; sleep 1;

		     declare -i x=0 y=0
		     
		     for b in `seq 1 7`; do
		        #echo " L693: option: -crop ${a}x${a}+${x}+${y}"; sleep 1

		        convert "${dpxq_picname[1]}" -crop "${a}x${a}+${x}+0" "../_alpha/r${b}_.gif"
			convert "${dpxq_picname[1]}" "../_alpha/r${b}_.gif" -gravity Center -composite "../_png/r${b}.gif"  

			#convert -crop "${a}x${a}+${x}+${y}" "${dpxq_picname[2]}" "_png/r${b}.png"
		       let "x += 37";
		     done
		   fi

# tag 720:		   
		  new_dir="../_alpha"; cd "$new_dir"

		   echo -e " L651: * 图片预处理 完成。切换到新的图片目录 \n `pwd`\n 请重新运行 $0 $1 转换图片。退出"
		   
		   #$APPNAME -cp
			#$0 -cp
		   
			exit;
		   #exit 
		   ## --- dpxq piece theme end
		   
		  ;;

# tag 808: for tencent tianTianXiangqi.apk
# ttxq-1
	         blackBing0.png) 
#黑卒的图片。文件名按字母顺序，这个图片通常会被最先读取
		   _bg_misc="body_default.png"

		   if [ ! -s "$_piece_bg" ]; then
			if [ -s "$_bg_misc" ]; then 
# 从棋子背景图片素材文件中，裁切第6个图片，另存为棋子底图（木纹）			
		     	  convert -crop 80x80+322+0 "$_bg_misc" "$_piece_bg"
			fi
		   else "  "
	           fi 
			b="${blk_picname[6]}"
			convert -trim "$a" +repage "$user_piece_dir/_png/$b.png"
# -composite: 把上一步修正得到的透明的棋子文字，添加到棋子底图上
	       convert "$_piece_bg" "$user_piece_dir/_png/$b.png" -gravity Center -composite "$user_piece_dir/_png/$b.png"
	       convert "$user_piece_dir/_png/$b.png" "$user_piece_dir/_pdf/$b.pdf"
	       pdf2svg "$user_piece_dir/_pdf/$b.pdf" "$user_piece_dir/$b.svg"
			 ;;
# ttxq-2
	         blackMa0.png) 
			b="${blk_picname[3]}"
			convert -trim "$a" +repage "$user_piece_dir/_png/$b.png"
# -composite: 把上一步修正得到的透明的棋子文字，添加到棋子底图上
	       convert "$_piece_bg" "$user_piece_dir/_png/$b.png" -gravity Center -composite "$user_piece_dir/_png/$b.png"
	       convert "$user_piece_dir/_png/$b.png" "$user_piece_dir/_pdf/$b.pdf"
	       pdf2svg "$user_piece_dir/_pdf/$b.pdf" "$user_piece_dir/$b.svg"
			 ;;
			#;;

# tag 812: for Red/White side
        
	         [rRwW][kK].* | [rRwW][kK]2.* | redShuai0.png | red_king.png | z[12]_r5_60.png | r5k.png | r5.gif | r5.png | r5_38.gif) 
			b="${red_picname[0]}" ;;
	         [rRwW][aA].* | [rRwW][aA]2.* | redShi0.png | red_advisor.png | z[12]_r4_60.png | r4a.png | r4.gif | r4.png | r4_38.gif) 
			b="${red_picname[1]}" ;;
	         [rRwW][bBeE].* | [rRwW][bBeE]2.* | redXiang0.png | red_bishop.png | z[12]_r3_60.png | r3b.png | r3.gif | r3.png | r3_38.gif) 
			b="${red_picname[2]}" ;;
	         [rRwW][nNhH].* | [rRwW][nNhH]2.* | redMa0.png | red_knight.png | z[12]_r2_60.png | r2n.png | r2.gif | r2.png | r2_38.gif) 
			b="${red_picname[3]}" ;;
	         [rRwW][rR].* | [rRwW][rR]2.* | redJu0.png | red_rook.png | z[12]_r1_60.png | r1r.png | r1.gif | r1.png | r1_38.gif) 
			b="${red_picname[4]}" ;;
	         [rRwW][cC].* | [rRwW][cC]2.* | redPao0.png | red_cannon.png | z[12]_r6_60.png | r6c.png | r6.gif | r6.png | r6_38.gif)
			 b="${red_picname[5]}" ;;
	         [rRwW][pP].* | [rRwW][pP]2.* | redBing0.png | red_pawn.png | z[12]_r7_60.png | r7p.png | r7.gif | r7.png | r7_38.gif)
			 b="${red_picname[6]}" ;;
	        
	        # for black side
	        
	         [bB][kK].* | [bB][kK]2.* | blackShuai0.png | black_king.png | z[12]_b5_60.png | b5k.png | b5.gif | b5.png | b5_38.gif)
		 	b="${blk_picname[0]}" ;;
	         [bB][aA].* | [bB][aA]2.* | blackShi0.png | black_advisor.png | z[12]_b4_60.png | b4a.png | b4.gif | b4.png | b4_38.gif) 
			b="${blk_picname[1]}" ;;
	         [bB][bBeE].* | [bB][bBeE]2.* | blackXiang0.png | black_bishop.png | z[12]_b3_60.png | b3b.png | b3.gif | b3.png | b3_38.gif) 
			b="${blk_picname[2]}" ;;
	         [bB][nNhH].* | [bB][nNhH]2.* | blackMa0.png | black_knight.png | z[12]_b2_60.png | b2n.png | b2.gif | b2.png | b2_38.gif) 
			b="${blk_picname[3]}" ;;
	         [bB][rR].* | [bB][rR]2.* | blackJu0.png | black_rook.png | z[12]_b1_60.png | b1r.png | b1.gif | b1.png | b1_38.gif) 
			b="${blk_picname[4]}" ;;
	         [bB][cC].* | [bB][cC]2.* | blackPao0.png | black_cannon.png | z[12]_b6_60.png | b6c.png | b6.gif | b6.png | b6_38.gif) 
			b="${blk_picname[5]}" ;;
	         [bB][pP].* | [bB][pP]2.* | blackBing0.png | black_pawn.png | z[12]_b7_60.png | b7p.png | b7.gif | b7.png | b7_38.gif) 
			b="${blk_picname[6]}" ;;
	          
	           *) # 如果无法识别棋子图片的命名规则 
	             b="${a%%.*}"	#获取主文件名，不带扩展名
		     # 风险：某些极端情况下，如果目录下有点号开头的 .png, .gif 
		     #   这类文件，得到的 b 值可能为空。注意添加避险方案 
	            ;;
	           
	       esac
	       # ============================
	       	       
	        #    批量文件的格式转换
    		# mogrify -path newdir -format png  *.gif
		echo " L885: PICNAME_ID = $PICNAME_ID"
		case "$PICNAME_ID" in
		  3) # for tianTianXiangqi
		convert -trim "$a" +repage "$user_piece_dir/_alpha/$b.png"
		convert "$_piece_bg" "$user_piece_dir/_alpha/$b.png" \
-gravity Center -composite "$user_piece_dir/_pdf/$b.pdf"
			;;
		  *) : 
	       convert -trim "$a" +repage "$user_piece_dir/_pdf/$b.pdf"

		;;

		esac
	       
	       
	       pdf2svg "$user_piece_dir/_pdf/$b.pdf" "$user_piece_dir/$b.svg"
	       #sleep 1

	       if [ "$DEL_TMP_PIC" = 1 ] && [ -e "$user_piece_dir/_pdf/$b.pdf" ]; then
	         #:
	         rm -f "$user_piece_dir/_pdf/$b.pdf" 
	       fi
	       let "ID += 1"
	     done 
	     # ----------------

	# 删除临时的子目录 ./_pdf/
	         if [ -d "$user_piece_dir/_pdf/" ]; then 
		  rmdir --ignore-fail-on-non-empty "$user_piece_dir/_pdf/"
		fi
	     echo
	   fi
	   
	## 对某些棋子图片来源特例，进行额外的转换处理。如：
	#  腾迅天天象棋（安卓版）：
	#  DPXQ 东萍象棋（网页版）：
 
	   echo -e " 查看生成的图片...\n 保存目录: $user_piece_dir/"
	   
	   test_pic="$user_piece_dir/WhiteGold.svg" #红帅图片

	   if [ -s "$test_pic" ]; then
	   	file "$test_pic"
	   	#identify "$test_pic"
		   sleep 1
	   fi
	   	   
	       if [ "$DEBUG" = 1 ] && [ -d "$user_piece_dir/" ]; then
	         xdg-open "$user_piece_dir/" &
	         #eog "$test_pic" &
	       fi
	       	
	   # 最后，更新棋子主题的目录编号 xiangqi-xx 数字 (+1), 新数值写入编号索引文件    	
	   let "XXQ_PIECE_THEME_ID += 1"
	   echo -n "$XXQ_PIECE_THEME_ID" > "$xxq_piece_theme_index"
	          
	   exit 0 ;;

##

    	 --tips)
	   _show_tips
	   exit 0 ;;

    	 --gif)
	    SUFFIX=gif
	   _about_filename
	   exit 0 ;;

    	 --png)
	    SUFFIX=png
	   _about_filename
	   exit 0 ;;

	   
## 

    	 -ml | --make-logo)

    	 ## 绘制象棋引擎的 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 "$xqfont" ]; then
    USE_CUSTOM_FONT=1
    echo " 找到字体: $xqfont"
  fi  
    	       if [ ! -d "$user_logo_dir" ]; then
	         mkdir -p "$user_logo_dir"
	       fi


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

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

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

# magenta 品红色

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

for a in `seq 0 4`; do
  STR="${program_name[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
 
  if [ "$USE_CUSTOM_FONT" = 1 ]; then
    
    convert -strip -font "$xqfont" -depth 8 -fill "${fill_col[a]}" \
    -background "${bg_col[a]}" \
    -pointsize $POINTSIZE label:"${program_name[a]}" -gravity Center -extent 100x50\
     "$user_logo_dir/${program_cmd[a]}.png"
  else
    convert -strip -depth 8 -fill "${fill_col[a]}"\
    -background "${bg_col[a]}" \
    -background "${bg_col[a]}" -pointsize $POINTSIZE label:"${program_name[a]}"\
    -gravity Center -extent 100x50 "$user_logo_dir/${program_cmd[a]}.png"
  fi
  
  #identify "$user_logo_dir/${program_cmd[a]}.png"
done
	   echo -e " 查看生成的 LOGO 图片... (目录: $user_logo_dir/)"
	   echo -e "  提示：可以把图片复制到以下目录 (需要以 root 用户身份复制)\n  $global_logo_dir/\n"
	   #identify "$user_logo_dir/"*.png
	   
	   ls "$user_logo_dir/"
	   sleep 1

	   test_pic="$user_logo_dir/${program_cmd[a]}.png"	   
	   
	   if [ -s "$test_pic" ]; then
	     #file "$test_pic"
	     #sleep 1
	     xdg-open "$user_logo_dir/" &
	     sleep 1
	     eog "$test_pic" &
	   fi
	   exit 0 ;;

## tag 890:
    	 --dpxq | --ready4dpxq)
# piece picture sources from Dpxq_html
	  echo " TODO..."
	  echo " 对 东萍象棋(网络版) 的图片素材进行预处理..."
	  echo "   说明: 预处理完成后，需要继续运行 $APPNAME -p 才能生成 SVG 棋子图片"


	   exit 0 ;;

##

## tag 920:
    	 --ttxq | --ready4ttxq)
# piece picture sources from tianTianXiangqi.apk
	  echo " 对 腾迅天天象棋(安卓版) 的图片素材进行预处理..."
	  echo "   说明: 预处理完成后，需要继续运行 $APPNAME -p 才能生成 SVG 棋子图片"
	  pic="body_default.png"

	  if [ -s "$pic" ]; then
	    identify "$pic"
# output sample: 
# body_default.png PNG 1024x512 1024x512+0+0 8-bit sRGB 1	    
	    P=`identify "$pic" | cut -d ' ' -f3`	
# sample for P: 1024x512
	    if [ "$P" = 1024x512 ]; then
# -crop 80x80+322+0: 截取棋子素材图片中，第1行，第6个图标（即第1个木纹棋子），
#   保存为棋子底图，再在上面添加透明的棋子文字（含红方、黑方）
		convert -crop 80x80+322+0 "$pic" piece-bg.png
	    fi
		pic="piece-bg.png"
		identify "$pic"
	    #thunar . & 
		# sleep 1;

#
		convert "$pic" "test.png" -gravity Center -composite "piece-test.png"	
		pic="piece-test.png"
		identify "$pic"
		eog "$pic" &
	
	  fi

	   exit 0 ;;

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

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

# ---

### BODY ###

exit 0;
