#!/usr/bin/env python
#encoding:UTF-8
import sys
"""
Сын учится читать, у него хорошо получается читать по слогам,
но читать тексты с целыми словами получается пока плохо.
Поиск книг типа "читаем по слогам" выдал где то штук 10 разных, мало :(.
Так появилась идея написать скриптик для разбивки текста на слоги.
Написал за вечер для того, что бы разбивать сказки для чтения по слогам :)
01.06.2013
Sergey Poterianski
s@poterianski.ru
"""

"""
объявляем словарики для согласных, глухих, гласных
"""
consonants = ['б', 'в', 'г', 'д', 'ж', 'з', 'й', 'к',
'л', 'м', 'н', 'п', 'р', 'с', 'т', 'ф', 'х', 'ц', 'ч', 'ш', 'щ']
thud = ['к', 'п', 'с', 'т', 'ф', 'х', 'ц', 'ч', 'ш', 'щ']
vowels = ['а', 'у', 'о', 'ы', 'и', 'э', 'я', 'ю', 'ё', 'е']

"""
usage:
    pbs.py [filename] - файлик с текстом для разбивки на слоги
    результат выводится в консоль
"""
def main():
    filename = sys.argv[1]
    file = open(filename, 'r')
    for line in file:
        split2words(line)

"""
Перебирает строки
"""
def split2words(line):
    i = 0
    result = ''
    word = ''
    while i < len(line):
        c = line[i]
        if isconsonant(c) or isvowel(c) \
        or c == 'ь' or c == 'Ь' or c == 'ъ' or c == 'Ъ':
            word += c
        else:
            if len(word) > 0:
                if len(word) <= 2:
                    result += word
                else:
                    result += split2syllables(word)
                word = ''
            result += c
        i += 1
    print((result.strip()))

"""
Делит слово на слоги
"""
def split2syllables(word):
    splited = ''
    slog = ''
    i =  0
    #v = False
    scount = vowelcount(word)
    if scount == 1:
        return word

    while i < len(word):
        c = word[i]
        #добавляем букву в слог
        slog += c
        # если гласная
        if isvowel(c):
            # смотрим что идет после
            # есть буквы
            if i+1 < len(word):
                c1 = word[i+1]
                # если согласная
                if isconsonant(c1):
                    # если последняя в слове - добавляем в слог и выходим
                    if i+1 >= len(word) - 1:
                        slog += word[i+1]
                        i+=1
                    else:
                        # не последняя,запоминем проверяем что идет после нее
                        c2 = word[i+2]
                        # если идет Й и следом согласный - добавляем в слог
                        if (c1 == 'й' or c1 == 'Й') and isconsonant(c2):
                            slog += c1
                            i += 1
                        # если после звонкой не парной идет глухой согласный - добавляем в слог
                        elif (c1 in ['м','н','р','л'] or c1 in ['М','Н','Р','Л']) and isthud(c2):
                            slog += c1
                            i += 1
                        elif i+2 >= len(word) - 1 and (c2 == 'ь' or c2 == 'Ь' or c2 == 'ъ' or c2 == 'Ъ'):
                            # заканчивается на мягкий
                            i+=2
                            slog += c1 + c2
            splited += slog
            if i+1 < len(word):
                splited += '-'
            slog = ''
        i += 1
    return splited
"""
считает гласные
"""
def vowelcount(word):
    cnt = 0
    for c in word:
        if(isvowel(c)):
            cnt += 1
"""
Если согласный
"""
def isconsonant(char):
    x = char.lower()[0]
    for c in consonants:
        if c == x:
            return True
"""
Если глухой
"""
def isthud(char):
    x = char.lower()[0]
    for c in thud:
        if c == x:
            return True
"""
Если гласный
"""
def isvowel(char):
    x = char.lower()[0]
    for c in vowels:
        if c == x:
            return True
    return False


if __name__ == '__main__':
    main()