name : checkers.cpython-39.pyc
a

�`��@sddZddlmZmZddlmZmZhd�ddhhd�gZdd	�Zd
d�Z	dd
�Z
dd�Ze�ZdS)z�
    babel.messages.checkers
    ~~~~~~~~~~~~~~~~~~~~~~~

    Various routines that help with validation of translations.

    :since: version 0.9

    :copyright: (c) 2013-2021 by the Babel Team.
    :license: BSD, see LICENSE for more details.
�)�TranslationError�
PYTHON_FORMAT)�string_types�izip>�i�d�u�x�X>�g�F�f�GcCsd|jst|jt�std��dS|dur*dS|j}t|ttf�sD|f}t|�|jkr`td|j��dS)z0Verify the number of plurals in the translation.z/Found plural forms for non-pluralizable messageNz*Wrong number of plural forms (expected %d))	Zpluralizable�
isinstance�stringrr�list�tuple�len�num_plurals)�catalog�message�msgstrs�r�;/usr/lib/python3.9/site-packages/babel/messages/checkers.pyrs�rcCshd|jvrdS|j}t|ttf�s(|f}|j}t|ttf�sB|f}t||�D]\}}|rLt||�qLdS)z9Verify the format string placeholders in the translation.z
python-formatN)�flags�idrrrrr�_validate_format)rrZmsgidsrZmsgidZmsgstrrrr�
python_format.s
rcCsdd�}dd�}dd�}t|||f�\}}t|||f�\}}|rR|sR|sRtd��n||krbtd��|r�t|�t|�kr~td	��tt||��D]4\}	\\}
}\}
}|||�s�td
|	d||f��q�nPt|�}
|D]B\}}||
vr�td|��q�|||
|�s�td
|||
|f��q�dS)a�Test format string `alternative` against `format`.  `format` can be the
    msgid of a message and `alternative` one of the `msgstr`\s.  The two
    arguments are not interchangeable as `alternative` may contain less
    placeholders if `format` uses named placeholders.

    The behavior of this function is undefined if the string does not use
    string formattings.

    If the string formatting of `alternative` is compatible to `format` the
    function returns `None`, otherwise a `TranslationError` is raised.

    Examples for compatible format strings:

    >>> _validate_format('Hello %s!', 'Hallo %s!')
    >>> _validate_format('Hello %i!', 'Hallo %d!')

    Example for an incompatible format strings:

    >>> _validate_format('Hello %(name)s!', 'Hallo %s!')
    Traceback (most recent call last):
      ...
    TranslationError: the format strings are of different kinds

    This function is used by the `python_format` checker.

    :param format: The original format string
    :param alternative: The alternative format string that should be checked
                        against format
    :raises TranslationError: on formatting errors
    cSsJg}t�|�D]6}|��\}}}|dkr2|dur2q|�|t|�f�q|S)N�%)r�finditer�groups�append�str)r�result�match�name�format�typecharrrr�_parse^sz _validate_format.<locals>._parsecSs0||krdStD]}||vr||vrdSqdS)NTF)�_string_format_compatibilities)�a�b�setrrr�_compatiblegsz%_validate_format.<locals>._compatiblecSs@d}|D].\}}|dur"|du}q|du|krtd��qt|�S)Nz5format string mixes positional and named placeholders)r�bool)�resultsZ
positionalr%�charrrr�_check_positionalos

z+_validate_format.<locals>._check_positionalzplaceholders are incompatiblez)the format strings are of different kindsz-positional format placeholders are unbalancedzDincompatible format for placeholder %d: %r and %r are not compatible�zunknown named placeholder %rzDincompatible format for placeholder %r: %r and %r are not compatibleN)�maprr�	enumerater�dict)r&�alternativer(r-r1r*r+Za_positionalZb_positional�idx�_�first�secondZtype_mapr%r'rrrr>s2 	
"
�
�rcCs^g}zddlm}Wnty&Yn 0|�d�D]}|�|���q2t|�dkrZttgS|S)Nr)�working_setzbabel.checkers)	Z
pkg_resourcesr;�ImportErrorZiter_entry_pointsr!�loadrrr)�checkersr;Zentry_pointrrr�_find_checkers�sr?N)
�__doc__Zbabel.messages.catalogrrZ
babel._compatrrr)rrrr?r>rrrr�<module>s�_

© 2025 Cubjrnet7