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

all: $SPELLDIR/nn.latin1.spl $SPELLDIR/nn.utf-8.spl ../README_nn.txt

$SPELLDIR/nn.latin1.spl : $FILES
        :sys env LANG=nb_NO.ISO-8859-1
		$VIM -u NONE -e -c "mkspell! $SPELLDIR/nn nn_NO" -c q

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

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


# vim: set sts=4 sw=4 :
