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

# I don't hava a Tetum locale, use the Dutch one instead.
all: $SPELLDIR/tet.latin1.spl $SPELLDIR/tet.utf-8.spl ../README_tet.txt

$SPELLDIR/tet.latin1.spl : $FILES
        :sys env LANG=nl_NL.ISO8859-1
		$VIM -u NONE -e -c "mkspell! $SPELLDIR/tet tet_ID" -c q

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

../README_tet.txt : README_tet_ID.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%} tet_ID.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.
tet_ID.aff tet_ID.dic: {buildcheck=}
        :assertpkg unzip patch
        :fetch tet_ID.zip
        :sys $UNZIP tet_ID.zip
        :delete tet_ID.zip
        @if not os.path.exists('tet_ID.orig.aff'):
            :copy tet_ID.aff tet_ID.orig.aff
        @if not os.path.exists('tet_ID.orig.dic'):
            :copy tet_ID.dic tet_ID.orig.dic
        @if os.path.exists('tet_ID.diff'):
            :sys patch <tet_ID.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 tet_ID.orig.aff tet_ID.aff >tet_ID.diff
        :sys {force} diff -a -C 1 tet_ID.orig.dic tet_ID.dic >>tet_ID.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 tet_ID.zip
        :mkdir tmp
        :cd tmp
        @try:
            @import stat
            :sys $UNZIP ../tet_ID.zip
            :sys {force} diff ../tet_ID.orig.aff tet_ID.aff >d
            @if os.stat('d')[stat.ST_SIZE] > 0:
                :copy tet_ID.aff ../tet_ID.new.aff
            :sys {force} diff ../tet_ID.orig.dic tet_ID.dic >d
            @if os.stat('d')[stat.ST_SIZE] > 0:
                :copy tet_ID.dic ../tet_ID.new.dic
        @finally:
            :cd ..
            :delete {r}{f}{q} tmp
            :delete tet_ID.zip


# vim: set sts=4 sw=4 :
