#!/usr/bin/env python
# -*- coding: LATIN-1 -*-

"""Lue .po -tiedosto ja jaa se useaan tiedostoon siten ettei
   msgid -tietue jakaudu kahteen tiedostoon. Parametrina
   annetaan rivimäärä, tiedosto jaetaan näin monen rivin
   jälkeen ensimmäisen tietueiden välin kohdalla. Oletetaan
   tietueiden erottimena olevan tyhjä rivi.
   
   Tapio Lehtonen
"""


import sys
import string
import getopt

verbose = 0
lines = 100
fileN = "" # Name of file to split

# $Id: po-split.py,v 1.5 2006/01/16 12:39:41 tale Exp $
# Tapio Lehtonen tale@iki.fi

def usage():
    """Tulostaa ohjelman käyttöohjeet
    """
    print 'PO-split toimii kuten split, mutta jakaa .po-tiedoston'
    print 'tietueiden välistä. Tällöin msgid:tä vastaava tietue'
    print 'ei jakaudu kahteen eri tiedostoon.'
    print
    print 'Käyttö:\n' + sys.argv[0] + \
          ' -hl:f:'
    print '-h --help Näytä tämä ohje'
    print '-l --lines=1200 rivin jälkeen etsitään eka tietueväli'
    print '-f --filename= tiedosto, joka jaetaan pienempiin'


def komentorivi():

    global verbose
    global lines
    global fileN

    try:
        optlist, args = getopt.getopt(sys.argv[1:], 'hl:f:', \
          ["help", "lines=", "filename="])
    except getopt.GetoptError, instance:
        #Poikkeus jos komentorivillä oli jotain kökköä virhettä
        print "Virhe komentorivillä"
        print instance.msg
        print "Virheellinen valitsin: " + instance.opt
        usage()
        sys.exit(2)

    for i, j in optlist:
        if (verbose > 0): print "Optlist ", i, j
        if (i == "-h") or (i == "--help"):
            usage()
            sys.exit()
        if (i == "-l") or (i == "--lines"):
            lines = int(j)
        if (i == "-f") or (i == "--filename"):
            fileN = j

    print "lines=", lines, " Filename=", fileN
            
komentorivi()

if (verbose > 0): print "Pääohjelma alkaa"

#Open fileN for reading
try:
    infile=file(fileN, "r")
except IOError, extradata:
    print "Tiedostoa ei voi lukea " + fileN
    print extradata
    sys.exit(3)

l=0 #Luettujen rivien lkm
fn = 0 # Kirjoitusvuorossa oleva tiedosto

for line in infile:
    if (verbose > 0): print "luetaan rivi ", l, lines
    if l == 0:
        #Avataan tulostustiedosto
        if fn < 10:
            outfileN = fileN + "0" + str(fn)
        else:
            outfileN = fileN + str(fn)
        fn = fn + 1
        try:
            close(outfile)
        except NameError:
            # outfile does not exist yet
            pass
        try:
            outfile=file(outfileN, "w")
            if (verbose > 0): print "Avataan tiedosto " + outfileN
        except IOError, extradata:
            print "Tiedostoa ei voi avata kirjoittamista varten" + outfileN
            print extradata
            sys.exit(4)            

    # Lasketaan rivejä
    l=l+1
    if l < lines :
        # Kirjoitetaan rivi vuorossa olevaan tiedostoon
        outfile.write(line)
    else:
        if (verbose > 0): print len(line), ":", line
        if len(line) <= 1:
            # Tietueiden väli löytyi, suljetaan tiedosto
            # ja avataan uusi kirjoittamista varten.
            l = 0
        outfile.write(line)

        
    
#if __name__ == "__main__":
#    komentorivi()
