64 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env bash
 | 
						||
# Copyright 2014, 2015 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 {
 | 
						||
    : ${REPO_DIR:=`dirname "$0"`}
 | 
						||
 | 
						||
    # 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|")
 | 
						||
    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|\+|−)"
 | 
						||
    while read line; do
 | 
						||
        if [[ $line =~ ^($date_re)\ +([^\ ]+)\ +-\ +([^\ ]+)(\ +$res_re-$res_re)? ]]; then
 | 
						||
            local date=${BASH_REMATCH[1]}
 | 
						||
            local white=${BASH_REMATCH[2]}
 | 
						||
            local black=${BASH_REMATCH[3]}
 | 
						||
            local result=${BASH_REMATCH[5]}-${BASH_REMATCH[6]}
 | 
						||
            local round=$(echo "($tour - 1)/($ply_count - 1) + 1" | bc)
 | 
						||
            parse_to_ini
 | 
						||
            (( game_counter++ ))
 | 
						||
        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"
 | 
						||
    [[ $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
 |