#!/usr/bin/env bash # Copyright 2014 Vladimir Ivanov # 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|\+|−)" 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