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

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

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

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

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

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


# vim: set sts=4 sw=4 :
