64 lines
1.9 KiB
Bash
Executable File
64 lines
1.9 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 {
|
||
: ${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 += 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"
|
||
[[ $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
|