#!/usr/bin/env python

"""Extract localization related only to particular activity"""

import os
import sys
import glob
import shutil
import tempfile

if len(sys.argv) != 3:
    print 'Usage: activity-extract <activity-directory> <output-directory>'
    exit(1)

activity_dir = sys.argv[1]
out_dir = sys.argv[2]
src_names = []

def add_src(name):
    src_names.append(name)
    src_names.append(name.split('-activity')[0])

add_src(os.path.basename(activity_dir))
for i in os.listdir(activity_dir):
    if i.endswith('-activity'):
        add_src(i)

def build_po(po_file):
    output = ''
    output_buffer = ''
    buffer_accept = True

    for line in file(po_file).readlines():
        if not line.startswith('#:'):
            output_buffer += line
        else:
            if output_buffer:
                if buffer_accept:
                    output += output_buffer
                output_buffer = ''
                buffer_accept = False

            if not buffer_accept:
                for path in line.split()[1:]:
                    names = path.lstrip('./').split('/')
                    if names[0] == 'src':
                        del names[0]
                    if names[0] in ('gcompris') or set(names) & \
                            set(['python'] + src_names):
                        buffer_accept = True
                        break

    if buffer_accept:
        output += output_buffer

    return output

if not os.path.exists(out_dir):
    os.makedirs(out_dir)

for po_src in glob.glob(os.path.join(os.path.dirname(__file__), '*.po')):
    __, po_tmp = tempfile.mkstemp()
    os.close(__)
    try:
        po_file = file(po_tmp, 'w')
        po_file.write(build_po(po_src))
        po_file.close()

        lang = os.path.basename(po_src).split('.')[0]
        mo_dst = os.path.join(out_dir, 'locale', lang, 'LC_MESSAGES',
                'gcompris.mo')
        shutil.rmtree(os.path.dirname(mo_dst), ignore_errors=True)
        os.makedirs(os.path.dirname(mo_dst))
        if os.system('msgfmt --output-file=%s %s' % (mo_dst, po_tmp)):
            print 'Fail to build .mo for %s' % lang
            exit(1)
    finally:
        os.unlink(po_tmp)
