mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-01-01 05:16:05 +01:00
35 lines
1.2 KiB
Text
35 lines
1.2 KiB
Text
# Utility for "calendar" to read entries into the array calendar_entries.
|
|
# This should be local to the caller.
|
|
# The only argument is the file to read. We expect options etc. to
|
|
# be correct.
|
|
#
|
|
# This is based on Emacs calendar syntax, which has two implications:
|
|
# - Lines beginning with whitespace are continuation lines.
|
|
# Hence we have to read the entire file first to determine entries.
|
|
# - Lines beginning with "&" are inhibited from producing marks in
|
|
# Emacs calendar window. This is irrelevant to us, so we
|
|
# we simply remove leading ampersands. This is necessary since
|
|
# we expect the date to start at the beginning of the line.
|
|
#
|
|
# TODO: Emacs has some special handling for entries where the first line
|
|
# has only the date and continuation lines indicate times. Actually,
|
|
# it doesn't parse the times as far as I can see, but if we want to
|
|
# handle that format sensibly we would need to here. It could
|
|
# be tricky to get right.
|
|
|
|
local calendar=$1 line
|
|
local -a lines
|
|
|
|
lines=(${(f)"$(<$calendar)"})
|
|
|
|
calendar_entries=()
|
|
# ignore blank lines
|
|
for line in $lines; do
|
|
if [[ $line = [[:space:]]* ]]; then
|
|
if (( ${#calendar_entries} )); then
|
|
calendar_entries[-1]+=$'\n'$line
|
|
fi
|
|
else
|
|
calendar_entries+=(${line##\&})
|
|
fi
|
|
done
|