1
Fork 0
lorchess/schedule

130 lines
3.8 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#!/usr/bin/env bash
REPO=fat0troll/lorchess
TOURNEY=autumn2013
# Variables
date="[0-9]\{2\}\.[0-9]\{2\}\.[0-9]\{4\}"
result="\(0\|1\|0\.5\):\(0\|1\|0\.5\)"
# Colors
restore="\033[00m"
red="\033[01;31m"
green="\033[01;32m"
yellow="\033[01;33m"
cyan="\033[01;36m"
# Highlight output
highlight () {
line=$1
# Highlight the tour heading
line=$(sed "s/Тур/\\${green}\0\\${restore}/g" <<< "$line")
line=$(sed "s/№[0-9]\+/\\${cyan}\0\\${restore}/g" <<< "$line")
line=$(sed "s/^=*$/\\${green}\0\\${restore}/g" <<< "$line")
# Highlight the tour duration
line=$(sed "s/\(^.*\):/\\${green}\1\\${restore}:/g" <<< "$line")
# Highlight date
line=$(sed "s/${date}/\\${cyan}\0\\${restore}/g" <<< "$line")
echo -e "$line"
}
# Note that we use '"$@"' to let each command-line parameter expand to a
# separate word. The quotes around '$@' are essential!
# We need 'opts' as the 'eval set --' would nuke the return value of getopt
opts=$(getopt --options p: --longoptions player: -- "$@")
# Note the quotes around '$opts': they are essential!
eval set -- "$opts"
name=""
if [[ $1 == -p || $1 == --player ]]; then
name=$2
shift 2
fi
shift
# Generate the sequence of tours to search in
if [[ -z "$@" ]]; then
seq=$(seq -f "%02g" 1 99)
else
# Change tour numbers: '1' -> '01', '2' -> '02', and so on
seq=$(for i in "$@"; do printf "%02g " "$i"; done)
fi
for i in $seq; do
url="https://raw.github.com/${REPO}/master/${TOURNEY}/tour_${i}/tour_info"
# Store 'tour_info' in an array of lines.
# *NOTE* The incorporation of newline at the end of 'tour_info'
# (--write-out '\n') is important and allows one to read the last
# line without trailing '\n'
lines=()
while read line; do
lines+=("$line")
done <<< "$(curl --fail -q --silent --write-out '\n' $url)"
# Produce output only if 'tour_info' exists
if [[ -n $lines ]]; then
# Decide to skip the tour or not
unskip=""; player=""
for ((j=5; j<${#lines[@]}; ++j)); do
line="${lines[$j]}"
# Don't skip if an unfinished game exists
if [[ -z $(grep "$result" <<< "$line") ]]; then
if [[ -z "$name" ]]; then
unskip="yes"
# In addition, if the player was passed as an
# argument, check if this is his game or not
elif [[ -n $(grep -o "$name" <<< "$line") ]]; then
unskip="yes"
# Complete player's name
player=$(grep -o "[^ ]*${name}[^ ]*" <<< "$line")
fi
fi
done
if [[ -n "$unskip" ]]; then
# The separator between tours
echo -en "$yellow"
for j in {1..41}; do echo -n "-"; done
echo -e "$restore"
# Output the tour heading as is
for ((j=0; j<5; ++j)); do highlight "${lines[$j]}"; done
# Lines with game info
for ((j=5; j<${#lines[@]}; ++j)); do
line="${lines[$j]}"
# Output only unfinished games
if [[ -z $(grep "$result" <<< "$line") ]]; then
if [[ -z "$player" ]]; then
highlight "$line"
# If the player was passed as an argument,
# highlight his name
elif [[ -n $(grep -o "${player}" <<< "$line") ]]; then
line=$(sed "s/${player}/\\${red}\0\\${restore}/g" <<< "$line")
highlight "$line"
fi
fi
done
fi
else
# If the tour numbers were not passed as arguments, exit once
# the first non-existing 'tour_info' is reached
[[ -z "$@" ]] && break
fi
done
exit 0