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

all: $SPELLDIR/id.latin1.spl $SPELLDIR/id.utf-8.spl ../README_id.txt

# I don't have an Indonesian locale, use the Dutch one instead.
$SPELLDIR/id.latin1.spl : $FILES
        :sys env LANG=nl_NL.ISO8859-1
		$VIM -u NONE -e -c "mkspell! $SPELLDIR/id id_ID" -c q

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

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


# vim: set sts=4 sw=4 :
