U
    	ڲge)                     @   st   d dl Z d dlmZ d dlmZmZmZ G dd dZeeeeef ee f  Z	G dd dZ
G dd	 d	e
ZdS )
    N)filterfalse)ListTupleUnionc                   @   s   e Zd Zdd Zdd ZdS )_lazyclasspropertyc                 C   s   || _ |j| _|j| _d S N)fn__doc____name__)selfr    r   5/tmp/pip-unpacked-wheel-8n0dx3ox/pyparsing/unicode.py__init__	   s    z_lazyclassproperty.__init__c                    sl    d krt | t dr:t fdd jdd  D r@i  _| jj}| jkrb|   j|<  j| S )N_internc                 3   s    | ]} j t|d g kV  qdS )r   N)r   getattr).0
superclassclsr   r   	<genexpr>   s   z-_lazyclassproperty.__get__.<locals>.<genexpr>   )typehasattrany__mro__r   r   r
   )r   objr   attrnamer   r   r   __get__   s    
z_lazyclassproperty.__get__N)r
   
__module____qualname__r   r   r   r   r   r   r      s   r   c                   @   s   e Zd ZU dZg Zeed< eee	 dddZ
ee	dddZee	ddd	Zee	dd
dZee	dddZee	dddZee	dddZedd ZdS )unicode_seta  
    A set of Unicode characters, for language-specific strings for
    ``alphas``, ``nums``, ``alphanums``, and ``printables``.
    A unicode_set is defined by a list of ranges in the Unicode character
    set, in a class attribute ``_ranges``. Ranges can be specified using
    2-tuples or a 1-tuple, such as::

        _ranges = [
            (0x0020, 0x007e),
            (0x00a0, 0x00ff),
            (0x0100,),
            ]

    Ranges are left- and right-inclusive. A 1-tuple of (x,) is treated as (x, x).

    A unicode set can also be defined using multiple inheritance of other unicode sets::

        class CJK(Chinese, Japanese, Korean):
            pass
    _ranges)returnc                 C   s`   g }| j D ]>}|tkr qJt|ddD ] }|t|d |d d  q&q
tdd t|D S )Nr!   r   r   r   c                 s   s   | ]}t |V  qd S r   )chrr   cr   r   r   r   ?   s     z0unicode_set._chars_for_ranges.<locals>.<genexpr>)r   r    r   extendrangesortedset)r   retccrrr   r   r   _chars_for_ranges7   s    
 zunicode_set._chars_for_rangesc                 C   s   d ttj| jS )z+all non-whitespace characters in this range )joinr   strisspacer.   r   r   r   r   
printablesA   s    zunicode_set.printablesc                 C   s   d ttj| jS )z'all alphabetic characters in this ranger/   )r0   filterr1   isalphar.   r   r   r   r   alphasF   s    zunicode_set.alphasc                 C   s   d ttj| jS )z*all numeric digit characters in this ranger/   )r0   r4   r1   isdigitr.   r   r   r   r   numsK   s    zunicode_set.numsc                 C   s   | j | j S )z)all alphanumeric characters in this range)r6   r8   r   r   r   r   	alphanumsP   s    zunicode_set.alphanumsc                 C   s$   d ttttj| jtdB S )zVall characters in this range that are valid identifier characters, plus underscore '_'r/   u   ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzªµºÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ_)r0   r)   r*   r4   r1   isidentifierr.   r   r   r   r   
identcharsU   s    zunicode_set.identcharsc                 C   s4   t dd | jD }dt|t | jB t dB S )u   
        all characters in this range that are valid identifier body characters,
        plus the digits 0-9, and · (Unicode MIDDLE DOT)
        c                 s   s   | ]}d |   r|V  qdS )_N)r:   r%   r   r   r   r   i   s     z-unicode_set.identbodychars.<locals>.<genexpr>r/   u   0123456789·)r*   r.   r0   r)   r;   )r   Zidentifier_charsr   r   r   identbodycharsc   s    zunicode_set.identbodycharsc                 C   s   ddl m} || j| jS )z
        a pyparsing Word expression for an identifier using this range's definitions for
        identchars and identbodychars
        r   )Word)	pyparsingr>   r;   r=   )r   r>   r   r   r   
identifierp   s    zunicode_set.identifierN)r
   r   r   r	   r!   UnicodeRangeList__annotations__r   r   r1   r.   r3   r6   r8   r9   r;   r=   r@   r   r   r   r   r       s$   
	r    c                   @   s6  e Zd ZU dZdejfgZeed< G dd de	Z
G dd de	ZG dd	 d	e	ZG d
d de	ZG dd de	ZG dd de	ZG dd de	ZG dd de	ZG dd de	ZeZG dd deeeZG dd de	ZG dd de	ZG dd de	ZG dd de	Ze
ZeZeZeZeZeZeZeZ eZ!eZ"d S )!pyparsing_unicodezF
    A namespace class for defining common language unicode_sets.
        r!   c                   @   s    e Zd ZU dZdgZeed< dS )z(pyparsing_unicode.BasicMultilingualPlanez,Unicode set for the Basic Multilingual Plane)rD   i  r!   Nr
   r   r   r	   r!   rA   rB   r   r   r   r   BasicMultilingualPlane   s   
rF   c                   @   s"   e Zd ZU dZddgZeed< dS )zpyparsing_unicode.Latin1z/Unicode set for Latin-1 Unicode Character Range)rD   ~   )      r!   NrE   r   r   r   r   Latin1   s   
rJ   c                   @   s    e Zd ZU dZdgZeed< dS )zpyparsing_unicode.LatinAz/Unicode set for Latin-A Unicode Character Range)   i  r!   NrE   r   r   r   r   LatinA   s   
rL   c                   @   s    e Zd ZU dZdgZeed< dS )zpyparsing_unicode.LatinBz/Unicode set for Latin-B Unicode Character Range)i  iO  r!   NrE   r   r   r   r   LatinB   s   
rM   c                #   @   sd   e Zd ZU dZdddddddd	d
dddddddddddddddddddddd d!d"d#d$g#Zeed%< d&S )'zpyparsing_unicode.Greekz.Unicode set for Greek Unicode Character Ranges)iB  iE  )ip  iw  )iz  i  )i  i  )i  )i  i  )i  i  )i  i  )i&  i*  )i^  )i`  )if  ij  )i   i  )i  i  )i   iE  )iH  iM  )iP  iW  )iY  )i[  )i]  )i_  i}  )i  i  )i  i  )i  i  )i  i  )i  i  )i  i  )i  i  )i)!  )i'  i'  )ie  )i@ i )i )i  iE )i i r!   NrE   r   r   r   r   Greek   sJ   
rN   c                   @   s.   e Zd ZU dZdddddddd	gZeed
< dS )zpyparsing_unicode.Cyrillicz0Unicode set for Cyrillic Unicode Character Range)i   i/  )i  i  )i+  )ix  )i-  i-  )i@  ir  )it  i  )i.  i/  r!   NrE   r   r   r   r   Cyrillic   s   
rO   c                   @   sB   e Zd ZU dZdddddddd	d
dddddddddgZeed< dS )zpyparsing_unicode.Chinesez/Unicode set for Chinese Unicode Character Range)i.  i.  )i.  i.  )i1  i1  )i 4  iM  ) N  i  )i   i  )i   im  )ip  i  )io io )i i )i i; )i@ iH )i   i֦ )i  i4 )i@ i )i  i )i i )i  i r!   NrE   r   r   r   r   Chinese   s(   
rQ   c                   @   s^   e Zd ZdZG dd deZG dd deZG dd deZeZeZ	eZ
ejej ej ZdS )	zpyparsing_unicode.Japanesez`Unicode set for Japanese Unicode Character Range, combining Kanji, Hiragana, and Katakana rangesc                   @   s"   e Zd ZU dZddgZeed< dS )z pyparsing_unicode.Japanese.Kanjiz-Unicode set for Kanji Unicode Character Range)rP   i  )i 0  i?0  r!   NrE   r   r   r   r   Kanji   s   
rR   c                   @   s,   e Zd ZU dZdddddddgZeed	< d
S )z#pyparsing_unicode.Japanese.Hiraganaz0Unicode set for Hiragana Unicode Character Range)iA0  i0  )0  0  )i0  )ip  )i )iP iR )i  r!   NrE   r   r   r   r   Hiragana   s   
rU   c                	   @   s0   e Zd ZU dZdddddddd	d
g	Zeed< dS )z#pyparsing_unicode.Japanese.Katakanaz1Unicode set for Katakana  Unicode Character Range)rS   i0  )rT   i0  )i1  i1  )i2  i2  )ie  i  )i  )id ig )i i )i r!   NrE   r   r   r   r   Katakana  s   
rV   N)r
   r   r   r	   r    rR   rU   rV      漢字   カタカナ   ひらがなr!   r   r   r   r   Japanese   s   rZ   c                   @   s<   e Zd ZU dZdddddddd	d
ddddddgZeed< dS )zpyparsing_unicode.Hangulz7Unicode set for Hangul (Korean) Unicode Character Range)i   i  )i.0  i/0  )i11  i1  )i 2  i2  )i`2  i{2  )i~2  )i`  i|  )i   i  )i  i  )i  i  )i  i  )i  i  )i  i  )i  i  )i  i  r!   NrE   r   r   r   r   Hangul  s"   
r[   c                   @   s   e Zd ZdZdS )zpyparsing_unicode.CJKzTUnicode set for combined Chinese, Japanese, and Korean (CJK) Unicode Character RangeN)r
   r   r   r	   r   r   r   r   CJK0  s   r\   c                   @   s"   e Zd ZU dZddgZeed< dS )zpyparsing_unicode.Thaiz,Unicode set for Thai Unicode Character Range)i  i:  )i?  i[  r!   NrE   r   r   r   r   Thai3  s   
r]   c                   @   s$   e Zd ZU dZdddgZeed< dS )zpyparsing_unicode.Arabicz.Unicode set for Arabic Unicode Character Range)i   i  )i  i  )i   i  r!   NrE   r   r   r   r   Arabic:  s
   
r^   c                	   @   s0   e Zd ZU dZdddddddd	d
g	Zeed< dS )zpyparsing_unicode.Hebrewz.Unicode set for Hebrew Unicode Character Range)i  i  )i  i  )i  i  )i  i6  )i8  i<  )i>  )i@  iA  )iC  iD  )iF  iO  r!   NrE   r   r   r   r   HebrewB  s   
r_   c                   @   s"   e Zd ZU dZddgZeed< dS )zpyparsing_unicode.Devanagariz2Unicode set for Devanagari Unicode Character Range)i 	  i	  )i  i  r!   NrE   r   r   r   r   
DevanagariP  s   
r`   N)#r
   r   r   r	   sys
maxunicoder!   rA   rB   r    rF   rJ   rL   rM   rN   rO   rQ   rZ   r[   Koreanr\   r]   r^   r_   r`   ZBMP   العربية   中文   кириллица   Ελληνικά   עִברִית	   日本語	   한국어	   ไทย   देवनागरीr   r   r   r   rC   {   s8   
(.rC   )ra   	itertoolsr   typingr   r   r   r   intrA   r    rC   r   r   r   r   <module>   s   \