# Aap recipe for Setswana 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    = tn_ZA.aff tn_ZA.dic

# I don't have a Setswana locale, use Romanian instead.
all: $SPELLDIR/tn.iso-8859-2.spl $SPELLDIR/tn.utf-8.spl \
        $SPELLDIR/tn.cp1250.spl ../README_tn.txt

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

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

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

../README_tn.txt: README_tn_ZA.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%} tn_ZA.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.
tn_ZA.aff tn_ZA.dic: {buildcheck=}
        :assertpkg unzip patch
        :fetch tn_ZA.zip
        :sys $UNZIP tn_ZA.zip
        :delete tn_ZA.zip
        @if not os.path.exists('tn_ZA.orig.aff'):
            :copy tn_ZA.aff tn_ZA.orig.aff
        @if not os.path.exists('tn_ZA.orig.dic'):
            :copy tn_ZA.dic tn_ZA.orig.dic
        @if os.path.exists('tn_ZA.diff'):
            :sys patch <tn_ZA.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 tn_ZA.orig.aff tn_ZA.aff >tn_ZA.diff
        :sys {force} diff -a -C 1 tn_ZA.orig.dic tn_ZA.dic >>tn_ZA.diff


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

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


# vim: set sts=4 sw=4 :
