#!/bin/bash
# coding: utf8
# original filename: wps-check-report.sh
#
# command & package depends: zenity, xrandr
#
## --------------------------
# WPS Office 版本信息检测报告工具
# (自动填写当前Linux系统版本号、硬件平台；内核版本；WPS Office 版本号；以及其它相关信息)
## --------------------------
#
# v0.1, 2023-01-12 created, by Careone <emacslocale@126.com>
# v0.3, 2023-01-28 updated, by Careone
#
# ------
# * 已测试的 Linux 系统: Debian 11.6 amd64
#
# * 测试版本:
#    WPS Office 2019 for Linux 11.1.0.11664, amd64, 2020-6-08 发布
# ------
#  * WPS Office (Linux 版) 官方安装包下载网址：
#    https://linux.wps.cn/
#    或者
#    https://www.wps.cn/product/wpslinux
#
# ------
# WPS Office 论坛 (on Deepin)
#   https://bbs.deepin.org/user/129823
# ------
# mailto:wps@wps.cn
## --------------------------

APPNAME="wps-check"
APPVER="0.3"

#APPDESC="WPS Office 版本信息检测报告工具 (自动填写当前Linux系统版本号、硬件平台；内核版本；WPS Office 版本号；以及其它相关信息)"
APPDESC="WPS Office 版本信息检测报告工具"

#
WPS_STR=wps-office

WPS_VER=
#  $WPS_VER example: WPS Office (version 11.1.0.11664)

## v0.3 版本开始，已禁用下面2个变量
#APP_STR_CN="WPS-Office_版本信息检测报告"
#APP_STR_EN="WPS-Office_VerInfo"

## ID: 检测字体时的起始编号
declare -i ID=301

#
DEBUG=0		#set 1 to show debug output

## 是否启用检测 WPS Office 4个子程序的相关冗余代码
#  (见 tag 600:)
# 注1：对金山官方的 WPS Office 软件包，会执行检测操作（即 = 1）
#
# 注2：对 Deepin/UOS 专用版的 WPS Office 软件包，暂不执行检测操作（即 = 0）
#  (因无测试条件，不确定相关的几个子程序命令的完整路径。后续版本可能会增补功能)

PROBE_WPS_BINS=

## optional font-check modules (可选的中文字体检测模块) 
## 1: 是否检测并记录 Windows 系统常用 中文/英文/符号 字体信息
CHECK_WINDOWS_FONTS=0	# (默认方案：不检测、不记录 =0)

## 2: 是否检测并记录 Linux 系统常用 中文 字体信息 
CHECK_LINUX_FONTS=0	# (默认方案：不检测、不记录 =0)

## 3: 是否检测并记录 Founder 方正字库5种常用中文(书宋/仿宋/楷体/黑体；小标宋)字体信息 
CHECK_FOUNDER_FONTS=0	# (默认方案：不检测、不记录 =0)

## 4.是否检测并记录5种 CESI 中国电子5种常用中文字体：书宋/黑体/仿宋/黑体；小标宋
CHECK_CESI_FONTS=0	# (默认方案：不检测、不记录 =0)

## 5: 是否检测并记录 其它常用中文字体信息。包括：思源宋体/黑体 SC/CN，更纱黑体；隶书 
CHECK_EXTRA_FONTS=0	# (默认方案：不检测、不记录 =0)

## 6.是否检测并记录5种 Yozo 永中 Office 常用中文字体：宋体/黑体/仿宋/黑体；粗黑
CHECK_YOZO_FONTS=0	# (默认方案：不检测、不记录 =0)
	  
## tag 70:
## 报告创建后，是否在文件管理器中，打开报告所在的目录。
#  (默认状态：=1 打开；其他数值：不打开)
OPEN_REPORT_DIR=1

## tag 80: 是否生成报告文件（默认=1 生成报告文件）
CREAT_REPORT_FILE=1

### defines ###
## optional report format (suffix): *.txt, *.md (Markdown)
SUFFIX=md
#SUFFIX=txt

#
TIMESTAMP="`date +'%Y-%m-%d_%H%M-%S'`"	#sample: 2023-01-09_2151-31

## tag 88:
# 旧的报告保存目录。仅适用于 v0.1 ~ v0.2
#user_report_dir="$HOME/$WPS_STR/${APPNAME}_${APP_STR_CN}"

## 新的报告保存目录。从 v0.3 版本开始生效
user_report_dir="$HOME/$WPS_STR"

#
user_report_tmp=`mktemp`	#临时文件

# 最终生成的用户报告文件：
user_report_file=
#user_report_file="$user_report_dir/wps-office_${TIMESTAMP}.$SUFFIX"


## -------------
## 定义3个字体相关的数组，分别对应 Windows 操作系统下常用的：英文字体，简体中文字体，符号字体
declare -a winfont_en winfont_cn winfont_symbol

## 再定义几个开源字体数组，分别对应常见的几款开源中文字体的简体中文版：
# Noto Sans/Serif CJK SC, Source Han Sans/Serif SC/CN, Sarasa；
#
# 以及 Deepin/UOS 系统专用的 CESI 系列的5款常用中文字体（注：CESI 为非开源字体）

declare -a font_noto_cjk_sc
declare -a font_source_han_sc
declare -a font_sarasa_fixed_sc font_sarasa_mono_sc

## 文泉驿正黑、微米黑简体中文字体
declare -a font_wqy

## CESI (中国电子) 5款常用中文字体：书宋/黑体/仿宋/楷体；小标宋
declare -a font_cesi

## 方正字库5款常用中文字体：书宋/黑体/仿宋/楷体；小标宋
declare -a font_founder_sc

## tag 115: 永中 Office 自带的5款常用中文字体：
#    宋体/黑体/仿宋/楷体；粗黑（相当于“小标宋”的替代字体）
#
# 命令： fc-list | grep -i yozo
# ---
# yozo/yzdwsj6.ttf: 永中宋体,Yozo Song,Evermore Song:style=Regular
# yozo/yzdwhj6.ttf: 永中黑体,Yozo Hei,Evermore Hei:style=Regular
# yozo/yzdwkj6.ttf: 永中楷体,Yozo Kai,Evermore Kai:style=Regular
# yozo/yzdwfs6.ttf: 永中仿宋,Yozo FangSong,Evermore FangSong:style=Regular
# yozo/yzdwch6.ttf: 永中粗黑,Yozo CuHei,Evermore CuHei:style=Regular

declare -a font_yozo_office
font_yozo_office=( ",Yozo " )

winfont_en=( Arial:
Antiqua:
BKANT.TTF
BSSYM7.TTF
Calibri:
Cambria:
Candara:
Consolas:
'MT Extra:'
'Times New Roman'
)

##
## 因为 ttc 字体文件中的 [微软雅黑 UI] 系列字体，可能会造成视觉干扰，需要作一些过滤处理。
#    字符串 YaHei, 可以显示 Light 细体；
#    字符串 YaHei: 可以显示 常规 Regular 和 粗体 Bold；

winfont_cn=( 'Microsoft YaHei,' 'Microsoft YaHei:' SimSun SimHei FangSong KaiTi )

winfont_symbol=( Symbol: Wingdings )

#

font_wqy=( 'WenQuanYi Micro Hei' 'WenQuanYi Zen Hei' )

#
font_noto_cjk_sc=( 'Noto Sans CJK SC' 'Noto Serif CJK SC' )

font_source_han_sc=( 'Source Han Sans SC' 'Source Han Serif SC' 'Source Han Mono SC' 'Source Han Sans CN' 'Source Han Serif CN' )

font_sarasa_sc=( 'Sarasa Fixed SC' 'Sarasa Mono SC' 'Sarasa Term SC' 'Sarasa Slab SC' 'Sarasa Fixed Slab SC' )

font_cesi=( 'GB18030,CESI_' 'GB13000,CESI_' 'GB2312,CESI_' )

##---

#font_founder_sc=( 'FZHei\-B01'  FZXiaoBiaoSong )
font_founder_sc=( ',FZ' )

# 隶书 (LiSu)。在高考试卷标题中，有一行祝福语：祝考试顺利，用的就是 隶书 字体。
font_zh_lisu=( ',LiSu:' )

## v0.2, 2023.1.15 added
#  
declare -a font_cns11643_kai font_arphic_ukai

font_cns11643_kai=( 'TW\-Kai' )
font_arphic_ukai=( 'AR PL UKai CN' 'AR PL KaitiM GB' )

## ---
## 2023.1.19 added

#WPS_NAME="Kingsoft WPS Office"
WPS_NAME="WPS Office"

## tag 160: ---

declare -a wps_pkgname

## WPS_PKGNAME_STR：即 WPS Office 软件包名称。有3种值：
# 1. 早期包名(现已弃用): kingsoft-office
# 2. 现用包名(官方包): wps-office
# 3. 现用包名(Deepin, UOS 专用包名): cn.wps.wps-office
#  见 tag 530:

wps_pkgname[0]="wps-office"	# (*) 现在 WPS Office 官方版本的软件包名
wps_pkgname[1]="cn.wps.wps-office"	# Deepin/UOS 应用商店专版的 WPS Office 软件包名
#wps_pkgname[2]="kingsoft-office"	#早期的软件包名。现已经废止停用

WPS_PKGNAME_STR=wps-office	#默认值

## ---

#wps_global_dir="/opt/kingsoft/wps-office"

## 默认配置文件，程序读取这个文件的内容，获取已安装的 WPS Office 版本号信息
## global config file to get version information
#wps_setup_cfg=
wps_setup_cfg="/opt/kingsoft/wps-office/office6/cfgs/setup.cfg"

## wps_setup_cfg="$wps_global_dir/office6/cfgs/setup.cfg"
#wps_setup_cfg="/opt/apps/cn.wps.wps-office/files/kingsoft/wps-office/office6/cfgs/setup.cfg"

#declare -a wps_conf	#possiable user WPS Office config filenames
#declare -a wps_existed_conf	#config filenames found for current user

## default config file in version 9.1.0.4909 Alpha16patch1:
# differences: upper/caselowercase in [Kk]ingsoft and [Oo]ffice
#  wps_conf[0]=".config/Kingsoft/Office.conf"	#用户的 WPS Office 配置文件
## and may rename in OLD versions
# 	wps_conf[1]=".config/kingsoft/Office.conf"
#	wps_conf[2]=".config/kingsoft/office.conf"
#	wps_conf[3]=".config/Kingsoft/office.conf"

wps_cmd=( wps et wpp wpspdf )
cmd_desc=( "WPS 文字" "WPS 表格" "WPS 演示" "金山 PDF" )

# ---------
## tag 210: VARs for zenity
WLOGO="/usr/share/pixmaps/$APPNAME.png"

## tag 30:
declare -i WIDTH HEIGHT

## tag 920A: default X Y for current Screen 0:
WIDTH="800"
HEIGHT="540"	# 540 = 600 - 60

# CMD 1: xrandr | grep current
# output: Screen 0: minimum 320 x 200, current 1366 x 768, maximum 8192 x 8192
#
# CMD 2: xrandr | grep current | head -1 | cut -d',' -f2 | cut -d' ' -f3,5
# output: 1366 768

declare -a xrandr_current_size
# ---------


## tag 56:
# function 1
	_usage () {
cat<<EOF
Usage: $APPNAME
       $APPNAME [OPTION]
  creat a bug report for Kingsoft WPS Office

OPTIONS
  -v, --version     print the version information and exit
  -h, --help        print this message and exit
EOF
}

# function 2
	_usage_cn () {
cat<<EOF
用法: $APPNAME
      $APPNAME [选项]
  显示 $WPS_NAME 的软件版本和配置文件信息, 以及操作系统版本及硬件平台等信息，
  并自动生成一份报告文件 (默认为 *.md Markdown 标记文本格式)。
  注：生成的报告文件大小，一般为 1k ~ 17k
  
  报告文件保存目录:
  $user_report_dir/

选项
  -w, --windows-fonts
    [检测并保存] 已安装的常见 Windows 中文/英文/符号字体
    （友情提醒：请合法使用厂商的版权字体！）

    说明1：Windows 字体文件缺失，经常会导致文档显示/页面排版效果异常、
      总页数异常等情况
    说明2：默认状态下，本命令不会检测、也不会记录 Windows 字体文件的相关信息！

  -d, --opendir-only
    在文件管理器中，打开报告所在的目录
    $user_report_dir/
    (注：只打开目录，不进行检测、不生成报告)

字体检测相关

  -a, --all
    [检测并保存] Linux, Windows, CESI (中国电) 中文字体，
    以及 方正5种常用字体信息
    （友情提醒：请合法使用厂商的版权字体！）

  -c, --cesi-fonts
    [检测并保存] 已安装的 中国电子 (CESI) 5种常见中文字体信息。
    包括：书宋，仿宋，黑体，楷体；小标宋。
    注：CESI 中文字体，常见于 深度 (Deepin) 和 统信 (UOS) 这两种 Linux 系统

  -f, --founder-fonts
    [检测并保存] 已安装的 方正字库 (Founder) 5种常见
    中文字体信息（书宋，仿宋，黑体，楷体；小标宋）

  -l, --linux-fonts
    [检测并保存] 已安装的 Linux 系统常用中文字体信息。包括：
    * 文泉驿微米黑、文泉驿正黑 (软件包名: fonts-wqy-microhei, fonts-wqy-zenhei)
    * Noto Sans/Serif SC (谷歌 Noto 黑体/宋体的 SC 简体中文版)
      软件包名: fonts-noto-cjk
    * 台湾全字库楷体 (软件包名: fonts-cns11643-kai)
    * 台湾文鼎楷体 (软件包名: fonts-fonts-arphic-ukai, fonts-arphic-gkai00mp)

  -x, --extra-fonts
    [检测并保存] 已安装的其它常见中文字体信息。包括：
    1. 思源黑体/宋体 SC (Source Han Sans/Serif SC) 简体中文字体
    2. 思源黑体/宋体 CN (Source Han Sans/Serif CN) 简体中文字体
    3. 更纱黑体 (Sarasa) 简体中文字体

    4. 隶书 (LiSu) 简体中文字体
     (注：隶书为厂商版权字体，商用请购买或获取正式授权！)

  -y, --yozo-fonts
    [检测并保存] 已安装的 永中 (Yozo) Office 办公软件自带的5种常见
    中文字体信息（宋体，仿宋，黑体，楷体；粗黑）

杂项 

  -n, --not-showdir
    报告创建后，不在文件管理器中，打开报告所在的目录
    (如果未使用本选项，默认操作会打开目录)

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


# function 4: 报告模板
	_creat_report () {
cat <<EOF
# WPS Office Check Report

**WPS Office 检测报告**

**金山 (Kingsoft) WPS Office (Linux 版本) 官方下载：**

* [https://linux.wps.cn](https://linux.wps.cn)
* [https://www.wps.cn/product/wpslinux](https://www.wps.cn/product/wpslinux)

#### WPS Office 官方反馈电子邮箱: [mailto:wps@wps.cn](mailto:wps@wps.cn)

---

* 生成工具：$APPNAME $APPVER
* 命令选项：$*
* 报告日期：`date`

---

* WPS Office 版本：$WPS_VER
* 操作系统：`lsb_release -sd`
* 内核：`uname -a`

---

## 一、异常类型

1. [x] 字体缺失/字体显示异常
2. [ ] 打开文件后总页码变多了/变少了
3. [ ] 操作时崩溃/自动退出
4. [ ] 程序卡死/假死
5. [ ] （WPS 文字）排版格式异常
6. [ ] （WPS 表格）排版格式异常
7. [ ] （WPS 演示）排版格式异常
8. [ ] （WPS PDF）字符显示异常/打印异常

## 二、异常描述

EOF
}

### defines end ###

### body ###

# tag 140:

## case 2: if have option given
for option in "$@"; do
	case "$option" in
	-h | --help)
## sample:
# LANGUAGE: zh_CN:zh
# LANG: zh_CN:utf8
	  case "$LANG" in
	    zh_CN* | zh_*) _usage_cn ;;
	    en* | *) _usage ;;
	  esac
	exit 0 ;;


##
# tag 225: v0.3 added (2023.1.23)
	-d | --opendir-only)
	  CREAT_REPORT_FILE=0	#此选项下，不生成报告文件
	    echo "在文件管理器中，打开用户报告目录 (不进行检测、不生成新的报告)..."
	    echo "  目录: $user_report_dir/"
	  ##  
	  if [ -d "$user_report_dir" ]; then
	    sleep 2
  	    xdg-open "$user_report_dir/" &
	  else
	    echo "错误(E225): 用户报告目录不存在，或者无法读取！退出" 1>&2
	    exit 1
	  fi
	;;


##
# tag 410: v0.3 added (2023.1.19)
	-a | --all-fonts)
	  CHECK_FOUNDER_FONTS=1
	  CHECK_YOZO_FONTS=1
	  CHECK_CESI_FONTS=1
	  CHECK_LINUX_FONTS=1
	  CHECK_WINDOWS_FONTS=1
	  CHECK_EXTRA_FONTS=1
	  shift
	;;

# tag 412: v0.3 added (2023.1.19)
	-c | --cesi-fonts) CHECK_CESI_FONTS=1
	  shift
	;;

##
# tag 415: v0.3 added (2023.1.19)
	-f | --founder-fonts) CHECK_FOUNDER_FONTS=1
	  shift
	;;

##
# tag 420: v0.3 added (2023.1.19)
	-l | --linux-fonts) CHECK_LINUX_FONTS=1
	  shift
	;;

##
# tag 430: v0.2 added (2023.1.15)
	-n | --not-opendir)
	  ##  
	  OPEN_REPORT_DIR=0	#1: open directory; 0= not open directory
	  shift
	;;


# tag 440:
	-w | --windows-fonts)
	  ## 检测并记录 Windows 相关中英文字体到报告文件。
	  #  警告：请 [合法使用] 厂商版权字体！
	  CHECK_WINDOWS_FONTS=1
	  shift
	;;


# tag 450:
	-x | --extra-fonts)
	  ## 检测并记录其它常见字体，包括：
	  #  1. 思源宋体/黑体 SC/CN
	  #  2. Sarasa SC 更纱黑体简体中文版
	  #  3. 隶书
	  
	  CHECK_EXTRA_FONTS=1
	  shift
	;;

# tag 460:
	-y | --yozo-fonts)
	  ## 检测并记录5种 Yozo 永中 Office 常用中文字体，包括：
	  #  宋体/黑体/仿宋/黑体；粗黑

	  CHECK_YOZO_FONTS=1
	  shift
	;;

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

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

### BODY ###

echo "$APPNAME v$APPVER, $APPDESC"

## 在当前用户目录下，检查并自动创建报告目录：~/wps-office/bug-report/
if [ ! -d "$user_report_dir" ]; then
  mkdir -p "$user_report_dir"
fi

## tag 001
# probe current language setting. for examples: zh_CN, zh_TW
#CLANG=`echo $LANG | cut -d'.' -f1`

# case 1: if no option given, show information about Kingsoft WPS Office;
# case 2: else check and run options

## case 1: no option given
if [ "$#" -eq 0 ]; then

## tag 010
### check installed versions

## tag 011
## probe WPS Office version.
# read global config '.../office6/setup.cfg'. default method.

# tag 136: TODO:
#DIST_ID=`lsb_release -si`	#answer very slowly. example: Debian
#DIST_ID=`uname -n`		#answer very quickly. example: debian

## tag 530:

## step 101：
# 自动生成报告
if [ "$CREAT_REPORT_FILE" = 1 ]; then

# { _creat_report > "$user_report_tmp" } && { echo " ......报告创建完毕。" }
  
_creat_report > "$user_report_tmp"

sleep 1

for a in "${wps_pkgname[@]}"; do

  case "$a" in
    wps-office) WPS_PKGNAME_STR="$a"; PROBE_WPS_BINS=1
      wps_setup_cfg="/opt/kingsoft/wps-office/office6/cfgs/setup.cfg"
      	wps_cmd=( wps et wpp wpspdf )
	cmd_desc=( "WPS 文字" "WPS 表格" "WPS 演示" "金山 PDF" )
      ;;

    cn.wps.wps-office) WPS_PKGNAME_STR="$a"; PROBE_WPS_BINS=0
      wps_setup_cfg="/opt/apps/cn.wps.wps-office/files/kingsoft/wps-office/office6/cfgs/setup.cfg"
#      	wps_cmd=( wps et wpp wpspdf )
#	cmd_desc=( "WPS 文字" "WPS 表格" "WPS 演示" "金山 PDF" )

	  ## --- debug module ---
	  if [ "$DEBUG" = 1 ]; then
	    if head -5 "$wps_setup_cfg" &>/dev/null; then
	      echo "  ------------------- "
	      head -5 "$wps_setup_cfg"
	      echo "  ------------------- "
	    fi
	  fi
	  ## --- debug module end ---
      ;;

# ------
#    kingsoft-office) WPS_PKGNAME_STR="$a"
#      wps_setup_cfg="/opt/kingsoft/wps-office/office6/cfgs/setup.cfg"
#      ;;
# ------

    *) WPS_PKGNAME_STR="wps-office"; PROBE_WPS_BINS=0
       wps_setup_cfg="/opt/kingsoft/wps-office/office6/cfgs/setup.cfg"
#      	wps_cmd=( wps et wpp wpspdf )
#	cmd_desc=( "WPS 文字" "WPS 表格" "WPS 演示" "金山 PDF" )
      ;;
  esac

## ---------------
  if [ -s "$wps_setup_cfg" ]; then
    echo -e " * 找到 $WPS_NAME 配置文件: $wps_setup_cfg"
    WPS_VER="`echo $(sed '2,5!d' "$wps_setup_cfg" | cut -d'=' -f2) | sed '/\ /s//\./g'`"
    
    echo -e "#### 已安装的软件包名: $WPS_PKGNAME_STR (版本 $WPS_VER)" | tee -a "$user_report_tmp"
    
      if [ "$PROBE_WPS_BINS" = 1 ]; then
    	  for a in `seq 0 3`; do
	    if which ${wps_cmd[a]} &>/dev/null; then
	      echo -e " ** 找到命令: `which ${wps_cmd[a]}`\t( ${cmd_desc[a]} )"
	    fi
	  done
      fi
    echo "   ------ "
  else continue
  fi
## ---------------

  echo
done

## ---------------
# tag 230:

## --- tag 012b ---
## read frist 5 lines in config, to get installed version information
#  $WPS_VER example: WPS Office (version 11.1.0.11664)
## /opt/kingsoft/wps-office/office6/cfgs/setup.cfg
#--------------
# [Version]
# MajorVersion=11
# FirstVersion=1
# SecondVersion=0
# Version=11664
#==============

## tag 522:
fi
## ---

## === tag 012b end ===


## step 300: 检查字体 (以 中文字体 为主)

## tag 301:
if [ "$CHECK_LINUX_FONTS" = 1 ]; then

  echo

## 三、Linux 系统常用 [中文] 字体检测
echo -e "## 三、检测 Linux 系统常用（中文）字体\n" | tee -a "$user_report_tmp"

#echo "* 检测已安装的部分 [中文] 字体..."

#
echo "  (tmp file: $user_report_tmp)"

##
echo -e "\n### $ID. 检测（文泉驿 Wen Quan Yi）中文字体 (微米黑、正黑)...\n" | tee -a "$user_report_tmp"
echo -e "\`\`\`\n\t软件包安装命令：sudo apt-get install fonts-wqy-microhei fonts-wqy-zenhei\n" | tee -a "$user_report_tmp"
echo -e "\t字体检测命令：fc-list | grep -i \"WenQuanYi\"\n\`\`\`\n" | tee -a "$user_report_tmp"

for a in "${font_wqy[@]}"; do
  if ! fc-list | grep "$a" &>/dev/null; then
    continue
  fi

  fc-list | grep "$a" | grep -n . | sed '/:/s//. /' >> "$user_report_tmp"
  echo -e "\n   --- \n" >> "$user_report_tmp"
done

sleep 1
let "ID += 1"

## tag 301.1:
echo -e "\n### $ID. 检测（Noto Sans/Serif CJK SC）简体中文字体 (黑体、宋体)...\n" | tee -a "$user_report_tmp" 
echo -e "\`\`\`\n\t软件包安装命令：sudo apt-get install fonts-noto-cjk\n\`\`\`\n" | tee -a "$user_report_tmp"

for a in "${font_noto_cjk_sc[@]}"; do
  if ! fc-list | grep "$a" &>/dev/null; then
    continue
  fi

  fc-list | grep "$a" | grep -n . | sed '/:/s//. /' >> "$user_report_tmp"
  echo -e "\n   --- \n" >> "$user_report_tmp"
done

sleep 1
let "ID += 1"

## tag 301.2
echo -e "\n### $ID. 检测台湾（全字库正楷体）TW-Kai ...\n" | tee -a "$user_report_tmp" 
echo -e "\`\`\`\n\t软件包安装命令：sudo apt-get install fonts-cns11643-kai\n\`\`\`\n" | tee -a "$user_report_tmp"

for a in "${font_cns11643_kai[@]}"; do
  if ! fc-list | grep "$a" &>/dev/null; then
    continue
  fi

  fc-list | grep "$a" | grep -n . | sed '/:/s//. /' >> "$user_report_tmp"
  echo -e "\n   --- \n" >> "$user_report_tmp"
done

sleep 1
let "ID += 1"

## tag 301.3
echo -e "\n### $ID. 检测台湾（文鼎字库楷体）...\n" | tee -a "$user_report_tmp" 
echo -e "\`\`\`\n\t软件包安装命令：sudo apt-get install fonts-arphic-ukai fonts-arphic-gkai00mp\n\`\`\`\n" | tee -a "$user_report_tmp"

for a in "${font_arphic_ukai[@]}"; do
  if ! fc-list | grep "$a" &>/dev/null; then
    continue
  fi

  fc-list | grep "$a" | grep -n . | sed '/:/s//. /' >> "$user_report_tmp"
  echo -e "\n   --- \n" >> "$user_report_tmp"
done

sleep 1
let "ID += 1"

fi

## tag 302:
if [ "CHECK_CESI_FONTS" = 1 ]; then
  echo -e "\n### $ID. 检测（CESI 中国电子）中文字体 (书宋/黑体/仿宋/楷体；小标宋)...\n" | tee -a "$user_report_tmp"
  echo -e "\`\`\`\n\t软件包安装命令：sudo apt-get install fonts-cesi-ss fonts-cesi-ht fonts-cesi-fs fonts-cesi-kt fonts-cesi-xbs\n" | tee -a "$user_report_tmp"
  echo -e "\t注：CESI 中文字体为 Deepin (深度) 和 UOS (统信) 专用字体！\n\`\`\`\n" | tee -a "$user_report_tmp"

for a in "${font_cesi[@]}"; do
  if ! fc-list | grep "$a" &>/dev/null; then
    continue
  fi

  fc-list | grep "$a" | grep -n . | sed '/:/s//. /' >> "$user_report_tmp"
   echo -e "\n   --- \n" >> "$user_report_tmp"
done

  sleep 1
  let "ID += 1"
fi


##
#

## tag 303:
if [ "CHECK_EXTRA_FONTS" = 1 ]; then

echo -e "\n### $ID. 检测（思源 Source Han Sans/Serif SC/CN）简体中文字体 (黑体、宋体、等宽)...\n" | tee -a "$user_report_tmp" 

for a in "${font_source_han_sc[@]}"; do
  if ! fc-list | grep "$a" &>/dev/null; then
    continue
  fi

  fc-list | grep "$a" | grep -n . | sed '/:/s//. /' >> "$user_report_tmp"
  echo -e "\n   --- \n" >> "$user_report_tmp"
done

sleep 1
let "ID += 1"

## tag 304:

echo -e "\n### $ID. 检测（更纱 Sarasa）简体中文字体 (等宽黑体、斜体)...\n" | tee -a "$user_report_tmp" 

for a in "${font_sarasa_sc[@]}"; do
  if ! fc-list | grep "$a" &>/dev/null; then
    continue
  fi

  fc-list | grep "$a" | grep -n . | sed '/:/s//. /' >> "$user_report_tmp"
  echo -e "\n   --- \n" >> "$user_report_tmp"
done

sleep 1
let "ID += 1"

### ---
## tag 307:

echo -e "\n### $ID. 检测（隶书 LiSu）中文字体...\n" | tee -a "$user_report_tmp" 

for a in "${font_zh_lisu[@]}"; do
  if ! fc-list | grep "$a" &>/dev/null; then
    continue
  fi

  fc-list | grep "$a" | grep -n . | sed '/:/s//. /' >> "$user_report_tmp"
  echo -e "\n   --- \n" >> "$user_report_tmp"
done

  sleep 1
  let "ID += 1"
fi

### ---
## tag 305:
if [ "$CHECK_FOUNDER_FONTS" = 1 ]; then

  echo -e "\n### $ID. 检测（方正 Founder）简体/GBK 中文字体 (书宋/黑体/仿宋/楷体；小标宋)...\n" | tee -a "$user_report_tmp" 

for a in "${font_founder_sc[@]}"; do
  if ! fc-list | grep "$a" &>/dev/null; then
    continue
  fi

  fc-list | grep "$a" | grep -n . | sed '/:/s//. /' >> "$user_report_tmp"
  echo -e "\n   --- \n" >> "$user_report_tmp"
done

  sleep 1
  let "ID += 1"
fi

### ---
## tag 365:
if [ "$CHECK_YOZO_FONTS" = 1 ]; then

  echo -e "\n### $ID. 检测（永中办公软件 Yozo Office）自带的5种中文字体 (宋体/黑体/仿宋/楷体；粗黑)...\n" | tee -a "$user_report_tmp" 

for a in "${font_yozo_office[@]}"; do
  if ! fc-list | grep "$a" &>/dev/null; then
    continue
  fi

  fc-list | grep "$a" | grep -n . | sed '/:/s//. /' >> "$user_report_tmp"
  echo -e "\n   --- \n" >> "$user_report_tmp"
done

  sleep 1
  let "ID += 1"

fi

## --- 以下为 Windows 系统相关的中文/英文字体 ---
# 注：暂未实现对 Mac 电脑系统相关字体进行检测

## tag 320

if [ "$CHECK_WINDOWS_FONTS" = 1 ]; then

#  echo -e "\n## 四、检测 Windows 系统常见（中文/英文/符号）字体...\n" | tee -a "$user_report_tmp"

  echo -e "\n### $ID. 检测 Windows 系统（中文）字体...\n" | tee -a "$user_report_tmp"

for a in "${winfont_cn[@]}"; do
  if ! fc-list | grep "$a" &>/dev/null; then
    continue
  fi

    # 检测字体，并写入报告
	fc-list | grep "$a" | grep -n . | sed '/:/s//. /' >> "$user_report_tmp"
  	echo -e "\n    --- \n" >> "$user_report_tmp"
done

  sleep 1
  let "ID += 1"


## tag 330

echo -e "\n### $ID. 检测 Windows 系统（图形符号）字体...\n" | tee -a "$user_report_tmp" 

for a in "${winfont_symbol[@]}"; do
  if ! fc-list | grep "$a" &>/dev/null; then
    continue
  fi
  
 	# 检测并写入 
  	fc-list | grep "$a" | grep -n . | sed '/:/s//. /' >> "$user_report_tmp"
  	echo -e "\n    --- \n" >> "$user_report_tmp"


done

  echo >> "$user_report_tmp"

  sleep 1
  let "ID += 1"

## tag 340

echo -e "\n### $ID. 检测 Windows 系统（英文）字体...\n" | tee -a "$user_report_tmp" 

for a in "${winfont_en[@]}"; do
  if ! fc-list | grep "$a" &>/dev/null; then
    continue
  fi
  
  # 检测并写入 
  	fc-list | grep "$a" | grep -n . | sed '/:/s//. /' >> "$user_report_tmp"
  	echo -e "\n    --- \n" >> "$user_report_tmp"

done

  echo >> "$user_report_tmp"

  sleep 1
#  let "ID += 1"

fi

###

echo " ...... 报告记录完毕。"


## 技术提示：程序运行过程中，先把所有检测报告信息，保存到临时文件
#    $user_report_tmp, 最后再复制到用户目录并操作成功后，再删除临时文件。
#
# 作用：主要防止在某些极端情况下，如某个用户的相关目录或者下级子目录，
#  被 root 用户或者自己错误地禁止了 写权限，导致报告文件无法记录导致多次报错，
#  影响程序运行体验。

#user_report_file="$user_report_dir/wps-office_${TIMESTAMP}.$SUFFIX"

## “数值/文件名包含空格”时的安全性防护检测及处理措施
case "$WPS_VER" in
  *' '*) WPS_VER='' #如果得到的 WPS Office 版本号数字中，包含有空格，则忽略这个版本号数值，并设为空值

	;;
  *) : ;;
esac

user_report_file="$user_report_dir/${WPS_STR}_${WPS_VER}_${TIMESTAMP}.$SUFFIX"

{ cp "$user_report_tmp" "$user_report_file"; } && { rm -f "$user_report_tmp"; }

echo

### 最后，在文件管理器里，打开生成的报告所在的文件夹，方便用户查看/复制内容，或者发送到 WPS Office 官方反馈邮箱。

## step 910
#	echo -e " * 查看报告文件...\n   $user_report_file"
	echo " * 查看报告文件..."

	if [ -s "$user_report_file" ]; then
	  #echo "   ------ "
	  file "$user_report_file"
	  echo
	  ls -lh "$user_report_file"
	  #echo "   ------ "

#
   
### =================

## tag 222: read current Screen 0 settings (X, Y)
declare -a xrandr_current_size

if which xrandr &>/dev/null; then
#  echo " check current Screen 0: "
#  echo " (command: xrandr | grep current)"

  echo
  echo " ** 检测当前屏幕 (Screen 0) 的分辨率..."
  echo "    (命令: 'xrandr | grep current' )"

## CMD：
#  xrandr | grep --color=auto current
  
  xrandr_current_size=( `xrandr | grep current | head -1 | cut -d',' -f2 | cut -d' ' -f3,5` )

## tag 920b: default X Y for current Screen 0:
#WIDTH="800"
#HEIGHT="540"	# 540 = 600 - 60

  WIDTH="${xrandr_current_size[0]}"
  HEIGHT="${xrandr_current_size[1]}"

  let "HEIGHT = HEIGHT - 100"
fi

#
  if [ "$WIDTH" -lt 320 ] || [ "$WIDTH" -gt 800 ]; then
    WIDTH=800
  fi

  if [ "$HEIGHT" -lt 200 ] || [ "$HEIGHT" -gt 800 ]; then
    HEIGHT=540
  fi 
 
# 
  echo "    自动调整 zenity 窗口尺寸... (宽度 x 高度: ${WIDTH}x${HEIGHT} 像素)" 
  sleep 1
  echo

## tag 225:

##  正常情况下，会读取最新生成的报告文件
  if [ -s "$user_report_file" ]; then
    zenity --text-info --width=$WIDTH --height=$HEIGHT --window-icon=${WLOGO} \
 --title="($APPNAME $APPVER) $user_report_file"\
 --filename="$user_report_file" --editable &

## 如果用户报告目录下，没有正常生成报告文件，则
#  读取原来的临时文件（此时应还没有被自动清理删除掉）
  elif [ -s "$user_report_tmp" ]; then

    zenity --text-info --width=$WIDTH --height=$HEIGHT --window-icon=${WLOGO} \
 --title="($APPNAME $APPVER) $user_report_tmp"\
 --filename="$user_report_tmp" --editable &

  else
	sleep 2
	
## 如果未生成（或者无法读取报告文件，则直接在文件管理器中，打开报告目录）
	OPEN_REPORT_DIR=0
  	#xdg-open "$user_report_file" &
  	xdg-open "$user_report_dir/" &

  fi
fi

# TAG 940:
fi	# 结束：是否生成 报告文件 CREAT_REPORT_FILE=1

## step 920
## ------
## 报告创建后，是否打开报告所在的目录。(默认状态：打开)

if [ "$OPEN_REPORT_DIR" != 0 ]; then
	sleep 2
	echo -e " * 打开报告文件夹 $user_report_dir/ ..."

	if [ -d "$user_report_dir" ]; then
  	  xdg-open "$user_report_dir" &
  	else
  	  echo -e "错误(E640): 目录不存在，或者无法读取！\n  $user_report_dir/" 1>&2
  	  exit 1
	fi		
fi
## ------

exit 0;
exit;
