# 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    = nb_NO.aff nb_NO.dic

all: $SPELLDIR/nb.latin1.spl $SPELLDIR/nb.utf-8.spl ../README_nb.txt

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

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

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


# vim: set sts=4 sw=4 :
