72 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env bash
 | |
| # Copyright 2014 Vladimir Ivanov <ivvl82@gmail.com>
 | |
| # Distributed under the terms of the GNU General Public License v2
 | |
| 
 | |
| REPO_DIR=
 | |
| 
 | |
| # Specify the tournament here
 | |
| TOURNAMENT=
 | |
| 
 | |
| function parse_setup {
 | |
|     [[ -z $REPO_DIR ]] && REPO_DIR=`dirname "$0"`
 | |
|     # Convert REPO_DIR to an absolute path
 | |
|     [[ ! $REPO_DIR =~ ^/ ]] && REPO_DIR=$(cd ${REPO_DIR}; pwd)
 | |
| 
 | |
|     # If no tournament given, set it to the last one
 | |
|     if [[ -z $TOURNAMENT ]]; then
 | |
|         local year_dir=$(ls -1 -d ${REPO_DIR}/[0-9][0-9][0-9][0-9]/ | tail -1)
 | |
|         TOURNAMENT=$(ls -1 -d ${year_dir}[0-9]-*/ | tail -1 \
 | |
|             | sed -E "s|${REPO_DIR}/(.*)|\1|")
 | |
|         # Remove the trailing slash
 | |
|         TOURNAMENT=${TOURNAMENT%/}
 | |
|     fi
 | |
| }
 | |
| 
 | |
| function parse_tour_info {
 | |
|     # Add a newline at the end of 'tour_info' to parse the last line
 | |
|     local tour_info=$(cat "${REPO_DIR}/${TOURNAMENT}/tours/${tour}/tour_info"; echo)
 | |
| 
 | |
|     local date_re="[0-9?]{2}\.[0-9?]{2}\.[0-9?]{4}"
 | |
|     local res_re="(1-0|1/2|0-1)"
 | |
|     while read line; do
 | |
|         if [[ $line =~ ^($date_re)\ +([^\ ]+)\ +-\ +([^\ ]+)(\ +$res_re)? ]]; then
 | |
|             local date=${BASH_REMATCH[1]}
 | |
|             local white=${BASH_REMATCH[2]}
 | |
|             local black=${BASH_REMATCH[3]}
 | |
|             local result=${BASH_REMATCH[5]}
 | |
| 
 | |
|             # Change the representation of result
 | |
|             [[ $result == 1/2 ]] && result=1/2-1/2
 | |
| 
 | |
|             local round=$(echo "($tour - 1)/($ply_count - 1) + 1" | bc)
 | |
|             parse_to_ini
 | |
|             ((game_counter += 1))
 | |
|         fi
 | |
|     done <<< "$tour_info"
 | |
| }
 | |
| 
 | |
| function parse_to_ini {
 | |
|     echo "[game${game_counter}]"
 | |
|     echo "round  = $round"
 | |
|     [[ ! $date =~ \? ]] && echo "date   = $date"
 | |
|     echo "white  = $white"
 | |
|     echo "black  = $black"
 | |
|     [[ -n $result ]] && echo "result = \"$result\""
 | |
|     echo
 | |
| }
 | |
| 
 | |
| parse_setup
 | |
| # Configuration file for players
 | |
| ply_ini=${REPO_DIR}/${TOURNAMENT}/players.ini
 | |
| 
 | |
| ply_count=$(grep "^\[player" "$ply_ini" | wc -l)
 | |
| tour_seq=$(ls -1 -d ${REPO_DIR}/${TOURNAMENT}/tours/[0-9][0-9]/ \
 | |
|     | sed -E "s|${REPO_DIR}/${TOURNAMENT}/tours/([0-9]{2})/|\1|")
 | |
| 
 | |
| game_counter=1
 | |
| for tour in $tour_seq; do
 | |
|     parse_tour_info
 | |
| done
 | |
| 
 | |
| exit 0
 |