# Path: pymorphy/py3k.py
# PY3 = sys.version_info[0] == 3
# 
# Path: pymorphy/django_conf.py
#     PYMORPHY_DICTS = settings.PYMORPHY_DICTS
# MARKER_OPEN = getattr(settings, 'PYMORPHY_MARKER_OPEN', '\[\[')
# MARKER_CLOSE = getattr(settings, 'PYMORPHY_MARKER_CLOSE', '\]\]')
# 
# Path: pymorphy/contrib/tokenizers.py
# SPACE_REGEX = re.compile('[^\w_-]|[+]', re.U)
# GROUPING_SPACE_REGEX = re.compile('([^\w_-]|[+])', re.U)
# def extract_tokens(text):
# def extract_words(text):
# 
# Path: pymorphy/contrib/word_case.py
# def restore_word_case(word, original_word):
#     """
#     Восстанавливает регистр слова (расположение строчных-заглавных букв).
# 
#     * word - слово, у которого требуется восстановить
#       регистр (в любом регистре);
#     * original_word - исходное слово (в исходном регистре);
# 
#     Пример:
# 
#     >>> from pymorphy.contrib.word_case import restore_word_case
#     >>> print restore_word_case(u'ЛЮДИ', u'Человек')
#     Люди
# 
#     Если сопоставить регистр слов не удается, то результат возвращается
#     в нижнем регистре.
#     """
#     if '-' in original_word:
#         parts = zip(word.split('-'), original_word.split('-'))
#         return '-'.join(restore_word_case(*p) for p in parts)
# 
#     if original_word.isupper():
#         return word.upper()
#     elif original_word.islower():
#         return word.lower()
#     elif original_word.istitle():
#         return word.title()
#     else:
#         return word.lower()


import re
from django import template
from pymorphy.py3k import text_type
from pymorphy.django_conf import default_morph, MARKER_OPEN, MARKER_CLOSE
from pymorphy.contrib import tokenizers
from pymorphy.contrib.word_case import restore_word_case
    def process(m):
        return _process_phrase(m.group(1)[2:-2],
                               process_func, *args, **kwargs)
    return re.sub(markup_re, process, phrase)


def _process_unmarked_phrase(phrase, process_func, *args, **kwargs):
    """
    Обработать фразу. В фразе не обрабатываются куски, заключенные
    в двойные квадратные скобки (например, "лошадь [[Пржевальского]]").
    """
    def process(part):
        if not re.match(markup_re, part):
            return _process_phrase(part, process_func, *args, **kwargs)
        return part[2:-2]

    parts = [process(s) for s in re.split(markup_re, phrase)]
    return "".join(parts)


@register.filter
def inflect(phrase, form):
    if not phrase:
        return phrase
    return _process_unmarked_phrase(text_type(phrase), default_morph.inflect_ru, text_type(form))

@register.filter
def inflect_marked(phrase, form):
    if not phrase:
        return phrase

# Path: pymorphy/py3k.py
# PY3 = sys.version_info[0] == 3
# 
# Path: pymorphy/django_conf.py
#     PYMORPHY_DICTS = settings.PYMORPHY_DICTS
# MARKER_OPEN = getattr(settings, 'PYMORPHY_MARKER_OPEN', '\[\[')
# MARKER_CLOSE = getattr(settings, 'PYMORPHY_MARKER_CLOSE', '\]\]')
# 
# Path: pymorphy/contrib/tokenizers.py
# SPACE_REGEX = re.compile('[^\w_-]|[+]', re.U)
# GROUPING_SPACE_REGEX = re.compile('([^\w_-]|[+])', re.U)
# def extract_tokens(text):
# def extract_words(text):
# 
# Path: pymorphy/contrib/word_case.py
# def restore_word_case(word, original_word):
#     """
#     Восстанавливает регистр слова (расположение строчных-заглавных букв).
# 
#     * word - слово, у которого требуется восстановить
#       регистр (в любом регистре);
#     * original_word - исходное слово (в исходном регистре);
# 
#     Пример:
# 
#     >>> from pymorphy.contrib.word_case import restore_word_case
#     >>> print restore_word_case(u'ЛЮДИ', u'Человек')
#     Люди
# 
#     Если сопоставить регистр слов не удается, то результат возвращается
#     в нижнем регистре.
#     """
#     if '-' in original_word:
#         parts = zip(word.split('-'), original_word.split('-'))
#         return '-'.join(restore_word_case(*p) for p in parts)
# 
#     if original_word.isupper():
#         return word.upper()
#     elif original_word.islower():
#         return word.lower()
#     elif original_word.istitle():
#         return word.title()
#     else:
#         return word.lower()


# Path: pymorphy/templatetags/pymorphy_tags.py
import re
from django import template
from pymorphy.py3k import text_type
from pymorphy.django_conf import default_morph, MARKER_OPEN, MARKER_CLOSE
from pymorphy.contrib import tokenizers
from pymorphy.contrib.word_case import restore_word_case

    def process(m):
        return _process_phrase(m.group(1)[2:-2],
                               process_func, *args, **kwargs)
    return re.sub(markup_re, process, phrase)


def _process_unmarked_phrase(phrase, process_func, *args, **kwargs):
    """
    Обработать фразу. В фразе не обрабатываются куски, заключенные
    в двойные квадратные скобки (например, "лошадь [[Пржевальского]]").
    """
    def process(part):
        if not re.match(markup_re, part):
            return _process_phrase(part, process_func, *args, **kwargs)
        return part[2:-2]

    parts = [process(s) for s in re.split(markup_re, phrase)]
    return "".join(parts)


@register.filter
def inflect(phrase, form):
    if not phrase:
        return phrase
    return _process_unmarked_phrase(text_type(phrase), default_morph.inflect_ru, text_type(form))

@register.filter
def inflect_marked(phrase, form):
    if not phrase:
        return phrase

    return _process_marked_phrase(text_type(phrase), default_morph.inflect_ru, text_type(form))