# Aap recipe for Czech Vim spell files.

# Use a freshly compiled Vim if it exists.
@if os.path.exists('../../../src/vim'):
    VIM = ../../../src/vim
@else:
    :progsearch VIM vim

SPELLDIR = ..
FILES    = cs_CZ.aff cs_CZ.dic

all: $SPELLDIR/cs.iso-8859-2.spl $SPELLDIR/cs.utf-8.spl \
        $SPELLDIR/cs.cp1250.spl ../README_cs.txt

$SPELLDIR/cs.iso-8859-2.spl : $FILES
        :sys env LANG=cs_CZ.ISO8859-2 $VIM -u NONE -e -c "mkspell! $SPELLDIR/cs cs_CZ" -c q

$SPELLDIR/cs.utf-8.spl : $FILES
        :sys env LANG=cs_CZ.UTF-8 $VIM -u NONE -e -c "mkspell! $SPELLDIR/cs cs_CZ" -c q

$SPELLDIR/cs.cp1250.spl : $FILES
        :sys $VIM -u NONE -e -c "set enc=cp1250" -c "mkspell! $SPELLDIR/cs cs_CZ" -c q

../README_cs.txt: README_cs_CZ.txt
        :copy $source $target

#
# Fetching the files from OpenOffice.org.
#
OODIR = http://ftp.services.openoffice.org/pub/OpenOffice.org/contrib/dictionaries
:attr {fetch = $OODIR/%file%} cs_CZ.zip

# The files don't depend on the .zip file so that we can delete it.
# Only download the zip file if the targets don't exist.
# This is a bit tricky, since the file name includes the date.
cs_CZ.aff cs_CZ.dic: {buildcheck=}
        :assertpkg unzip patch
        :fetch cs_CZ.zip
        :sys $UNZIP cs_CZ.zip
        :delete cs_CZ.zip
        @if not os.path.exists('cs_CZ.orig.aff'):
            :copy cs_CZ.aff cs_CZ.orig.aff
        @if not os.path.exists('cs_CZ.orig.dic'):
            :copy cs_CZ.dic cs_CZ.orig.dic
        @if os.path.exists('cs_CZ.diff'):
            :sys patch <cs_CZ.diff


# Generate diff files, so that others can get the OpenOffice files and apply
# the diffs to get the Vim versions.

diff:
        :assertpkg diff
        :sys {force} diff -a -C 1 cs_CZ.orig.aff cs_CZ.aff >cs_CZ.diff
        :sys {force} diff -a -C 1 cs_CZ.orig.dic cs_CZ.dic >>cs_CZ.diff


# Check for updated OpenOffice spell files.  When there are changes the
# ".new.aff" and ".new.dic" files are left behind for manual inspection.

check:
        :assertpkg unzip diff
        :fetch cs_CZ.zip
        :mkdir tmp
        :cd tmp
        @try:
            @import stat
            :sys $UNZIP ../cs_CZ.zip
            :sys {force} diff ../cs_CZ.orig.aff cs_CZ.aff >d
            @if os.stat('d')[stat.ST_SIZE] > 0:
                :copy cs_CZ.aff ../cs_CZ.new.aff
            :sys {force} diff ../cs_CZ.orig.dic cs_CZ.dic >d
            @if os.stat('d')[stat.ST_SIZE] > 0:
                :copy cs_CZ.dic ../cs_CZ.new.dic
        @finally:
            :cd ..
            :delete {r}{f}{q} tmp
            :delete cs_CZ.zip


# vim: set sts=4 sw=4 :
