B
    \              %   @   s~  d Z ddlmZ ddlZddlmZ ddlmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZ ddlT dZe	eeeeeeee
eiZdZedd	 Zd
ZeeeeeeeedZddddddddddg
Zdd Z dddZ!G dd de"Z#G dd dee#Z$dd Z%d d! Z&G d"d# d#ee#Z'd$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdH$Z(ddefddIe	fdJdKefdLdMefdNdOe	fdPdQefdRdRe	fdSdSe
fdTdUefdVdWe	fdXdYe	fdZd[efgZ)i Z*x6e)D ].\Z+Z,Z-x e.e+e,d D ]Z/e-e*e/< qW qW [+[,[-[/e0d\Z1i Z2xe1e13  D ]Z4d]e2e4< q<W [4[1i Z5xe0d^D ]Z4de5e4< q`W e0d%d]e0d_d]e0d`d]iZ6e0d/de0dFde0d$de0dade0dbde0dGdiZ7e8dcj9Z:ddde Z;efdfdgZ<dhdi Z=djdk Z>dldm Z?dndo Z@dpdq ZAdrds ZBdtdu ZCdvdw ZDG dxdy dyee#ZEG dzd{ d{ee#ZFG d|d} d}ee#ZGG d~d dee#ZHG dd deZIdS )z$
Module for formatting information.
    )print_functionN)unpack   )FDTFGEFNUFTXFUNXL_CELL_DATEXL_CELL_NUMBERXL_CELL_TEXT	XL_FORMAT
XL_FORMAT2
BaseObject	XLRDErrorfprintfunpack_stringunpack_unicodeupkbitsupkbitsL)*)8)r   r   r   )   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )   r   r   )r   r   r   )   r   r   )r   3   f   )r   r      )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r      )8)r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )P   F   2   -   (            NormalZ	RowLevel_Z	ColLevel_ZCommaZCurrencyZPercentz	Comma [0]zCurrency [0]Z	HyperlinkzFollowed Hyperlinkc             C   s   i | _ i | _| jsd S xtdD ]}t| | j |< q W t| j }t|}x"t|D ]}|| | j |d < qRW d | j |d < d | j |d d < d | j d< d | j d< d S )N   r   Q   i  )
colour_mapcolour_indexes_usedformatting_infoxrangeexcel_default_palette_b8default_palettebiff_versionlen)bookiZdpalZndpal r6   .lib/python3.7/site-packages/xlrd/formatting.pyinitialise_colour_mapi   s    

r8   c       
      C   s   d}d}xh|   D ]\\}}|dkr$qd}x*t||D ]\}}	|||	 ||	  7 }q4W ||k r|}|}|dkrP qW dr|rtd||| | |f  |S )z
    General purpose function. Uses Euclidean distance.
    So far used only for pre-BIFF8 ``WINDOW2`` record.
    Doesn't have to be fast.
    Doesn't have to be fancy.
    i   r   Nz:nearest_colour_index for %r is %r -> %r; best_metric is %d)itemszipprint)
r,   ZrgbdebugZbest_metricZbest_colourxZcolourxZcand_rgbZmetricZv1Zv2r6   r6   r7   nearest_colour_index   s"    r=   c               @   s    e Zd ZdZdd Zdd ZdS )	EqNeAttrsz
    This mixin class exists solely so that :class:`Format`, :class:`Font`, and
    :class:`XF` objects can be compared by value of their attributes.
    c             C   s   | j |j kS )N)__dict__)selfotherr6   r6   r7   __eq__   s    zEqNeAttrs.__eq__c             C   s   | j |j kS )N)r?   )r@   rA   r6   r6   r7   __ne__   s    zEqNeAttrs.__ne__N)__name__
__module____qualname____doc__rB   rC   r6   r6   r6   r7   r>      s   r>   c               @   sP   e Zd ZdZdZdZdZdZdZdZ	dZ
dZedZdZdZdZdZdZdZdS )Fontz
    An Excel "font" contains the details of not only what is normally
    considered a font, but also several other display attributes.
    Items correspond to those in the Excel UI's Format -> Cells -> Font tab.

    .. versionadded:: 0.6.1
    r    i  N)rD   rE   rF   rG   boldcharacter_setcolour_index
escapementfamily
font_indexheightitalicUNICODE_LITERALname
struck_outunderline_type
underlinedweightoutlineshadowr6   r6   r6   r7   rH      s    
rH   c             C   s$   | j s
d S td|d | jd _d S )Nz<Hr   )r.   r   	font_listrL   )r4   datar6   r6   r7   handle_efont   s    r]   c          	   C   s  | j s
d S | js|   tp$| jdk}| j}t| j}|dkrht }t	d|_
||_| j| |d7 }t }||_| j| |dkr>td|dd \|_}|_|_|_|_|_|_|d@ |_|d@ d? |_|d@ d? |_|d	@ d
? |_|d@ d? |_|d@ d? |_|dkr&t|ddd|_
nt|d| jdd|_
nR|dkrtd|dd \|_}|_|d@ |_|d@ d? |_|d@ d? |_|d	@ d
? |_|d@ d? |_|d@ d? |_t|d| jdd|_
ddg|j |_d|_|j|_d|_d|_ntd|dd \|_}d|_|d@ |_|d@ d? |_|d@ d? |_|d	@ d
? |_d|_d|_t|d| jdd|_
ddg|j |_d|_|j|_d|_d|_|r|j| jd|j dd d S )N      z
Dummy Fontr   r#   z	<HHHHHBBBr      r*      r           r!      )lenlenr&   z<HHH   i  i  z<HHi  z--- handle_font: font[%d] ---z-------------------)headerfooter)r.   encodingderive_encodingDEBUG	verbosityr2   r3   r[   rH   rR   rS   rO   appendr   rP   rL   rW   rM   rU   rN   rK   rJ   rQ   rV   rT   rX   rY   r   r   dumplogfile)r4   r\   blahbvkfZoption_flagsr6   r6   r7   handle_font  sx    


0




rt   c               @   s(   e Zd ZdZdZeZedZdd Z	dS )Formatz\
    "Number format" information from a ``FORMAT`` record.

    .. versionadded:: 0.6.1
    r   rI   c             C   s   || _ || _|| _d S )N)
format_keytype
format_str)r@   rv   tyrx   r6   r6   r7   __init__d  s    zFormat.__init__N)
rD   rE   rF   rG   rv   r	   rw   rR   rx   rz   r6   r6   r6   r7   ru   L  s
   ru   ZGeneral0z0.00z#,##0z#,##0.00z$#,##0_);($#,##0)z$#,##0_);[Red]($#,##0)z$#,##0.00_);($#,##0.00)z$#,##0.00_);[Red]($#,##0.00)z0%z0.00%z0.00E+00z# ?/?z# ??/??zm/d/yyzd-mmm-yyzd-mmmzmmm-yyz
h:mm AM/PMzh:mm:ss AM/PMzh:mmzh:mm:sszm/d/yy h:mmz#,##0_);(#,##0)z#,##0_);[Red](#,##0)z#,##0.00_);(#,##0.00)z#,##0.00_);[Red](#,##0.00)z'_(* #,##0_);_(* (#,##0);_(* "-"_);_(@_)z*_($* #,##0_);_($* (#,##0);_($* "-"_);_(@_)z/_(* #,##0.00_);_(* (#,##0.00);_(* "-"??_);_(@_)z2_($* #,##0.00_);_($* (#,##0.00);_($* "-"??_);_(@_)zmm:ssz	[h]:mm:sszmm:ss.0z##0.0E+0@)$r   r   r^   ra   r_   rc   rf      r*   	   
         r`   rd      r             r(   r'      %   &   '   r%   )   *   +   ,   r$   .   /   0   1   r`   rd   r      $   r   r   r$   r   r   r   r#   :   ;   >   C   r"   G   r+   Zymdhsrc   z$-+/(): #?ZGENERALZgeneralz	\[[^]]*\]c       	      C   s  d}d}x|D ]}|dkrR|t dkr,d}qx|t dkr>d}qx|tkrHqx||7 }n&|dkrl|t dkrxd}n|dkrxd}d|  krdksn tqW | jdkrtdt| | jd	 td|}|tkrd
S d}d}d}d }}xH|D ]@}|t	kr|t	| 7 }q|t
kr|t
| 7 }q||krd}qW |r:|s:dS |rJ|sJd
S |rl| jrt| jd||| n|s| jrt| jd| ||kS )Nr   rI   "r   z\_*r^   r_   z+is_date_format_string: reduced format is %s)fileF;Tz7WARNING *** is_date_format: ambiguous d=%d n=%d fmt=%r
z/WARNING *** format %r produces constant result
)rR   skip_char_dictAssertionErrorrl   r;   ZREPRro   fmt_bracketed_subnon_date_formatsdate_char_dictnum_char_dictr   )	r4   fmtstatescZ	separatorZgot_sepZ
date_countZ	num_countr6   r6   r7   is_date_format_string  s`    







r   c             C   s  d}| j }|tkrt|d}| js*|   d}|dkrNtd|dd d }n| j}|dkr`d}|  jd7  _|dkrt|d}nt||| jdd}|p| j	d	k}|rt
| jd
| j||| | |}	ttg|	 }
|dks<|dk s<t|t}|tk}| j	r<d|  k rdk r<n n||	A r<d}t
| jd|| |dkrZt
| jd|
||	| t||
|}|r|j| jd| jd f d || j|< | j| d S )Nr   r&   r^   r#   z<Hr   r!   )re   ra   z)FORMAT: count=%d fmtkey=0x%04x (%d) s=%r
   zHWARNING *** Conflict between std format key %d and its format string %r
z2ty: %d; is_date_c: %r; is_date_s: %r; fmt_strg: %rz--- handle_format [%d] ---)rg   )r2   r   minri   rj   r   Zactualfmtcountr   r   rl   r   ro   r   r   r   std_format_code_typesgetr	   ru   rn   
format_mapformat_listrm   )r@   r\   Zrectyperk   rq   ZstrposZfmtkeyZunistrgrp   Z	is_date_sry   Zstd_tyZ	is_date_cfmtobjr6   r6   r7   handle_format
  sR    

.

r   c             C   sr  | j s
d S tp| jdk}td|d d \}d| jdk }tsH| jdkrb||krbt| jd|| n|rtt| jd| d| }d	| d }t|}d	}||  kr|| ksn td
||f t||d | }	| j	g kst
xt|D ]}
|	|
 }|d@ }|d? d@ }|d? d@ }| jd|
  }|||f}| j	| || jd|
 < |r||krtd|
||f | jd qW d S )Nr^   z<H)r    8   r#   r   z9NOTE *** Expected %d colours in PALETTE record, found %d
zPALETTE record with %d colours
z<xx%dir_   z0PALETTE record: expected size %d, actual size %dr   r*   r    z%2d: %r -> %r)r   )r.   rk   rl   r   r2   r   ro   r3   r   Zpalette_recordr   r/   r,   rm   r;   )r4   r\   rp   Z	n_coloursZexpected_n_coloursr   Zexpected_sizeZactual_sizeZ	toleranceZcoloursr5   r   ZredZgreenZblueZold_rgbZnew_rgbr6   r6   r7   handle_palette>  s@    

r   c             C   s   xr| j D ]h}|jdkrq|j}|dkr(q|| jkr>d| j|< q| jrtdt| j| jd t	| jd|j|j
| qW | jdkrt| j }td| | jd d S )Nr_   i  r   zSize of colour table:)r   z2*** Font #%d (%r): colour index 0x%04x is unknown
z
Colour indexes used:
%r
)r[   rO   rL   r,   r-   rl   r;   r3   ro   r   rS   sortedkeys)r4   fontZcxZusedr6   r6   r7   palette_epilogueb  s    


r   c       
   	   C   sx  | j s
d S tp| jdk}| j}td|d d \}}}|d@ }|dkrfd| jkrfd}d}d}d}	d	}n|d
@ rd}t| }	d|  krdkrn n|	t|d 7 }	nd}d}d}|dkryt|ddd}	W nN t	k
r   t
d||||f | jd t
dt|dd  | jd  Y nX nt|d| jdd}	|rJ|	sJt
d| jd ||f| j|	< |rtt| jd|||||	 d S )Nr^   z<HBBr_   i  s       r)   r   r   r   i   r!   )re   z6STYLE: built_in=%d xf_index=%d built_in_id=%d level=%d)r   z
raw bytes:z7WARNING *** A user-defined style has a zero-length namez?STYLE: built_in=%d xf_index=%d built_in_id=%d level=%d name=%r
)r.   rk   rl   r2   r   Zstyle_name_mapbuilt_in_style_namesstrr   UnicodeDecodeErrorr;   ro   reprr   ri   r   )
r4   r\   rp   rq   Zflag_and_xfxZbuilt_in_idlevelxf_indexZbuilt_inrS   r6   r6   r7   handle_stylev  sF    

r   c             C   s   t |j }xn|D ]f\}}t|dr4t| || q|ddkr|| jkrXd| j|< q|jj	}t
d||||f | jd qW d S )Nrn   rL   r   r   z&*** xf #%d : %s.%s =  0x%04x (unknown))r   )r   r?   r9   hasattrcheck_colour_indexes_in_objfindr,   r-   	__class__rD   r;   ro   )r4   objZ
orig_indexZalistattrZnobjZonamer6   r6   r7   r     s    


r   c             C   sH   xBt  D ]6}|| jkr
t | }t|}t|||}|| j|< q
W d S )N)r   r   r   std_format_stringsr   ru   )r4   xry   Zfmt_strr   r6   r6   r7   fill_in_standard_formats  s    

r   c       "      C   sb  t p| jdk}| j}t }t |_d|j_d|j_d|j_t	 |_
d|j
_d|j
_d|j
_d|j
_t |_t |_|dkr| jst|  |dkrd}t||dd \
|_|_}}|j_}}	}
}}t|j|d t||d t|j|d	 t|j|d
 |	d? }ddddddg}x2|D ]*}d| d }t|||d@  |dL }qW t|j
|
d t|j
|d t|j|d t|j|d n|dkrrd}t||dd \|_|_}}}}
}t|j|d t||d t|j|d	 |d@ }ddddg| |j_|d? }ddddddg}x2|D ]*}d| d }t|||d@  |dL }qW t|j|
d t|j
|
d t|j
|d  n|d!krXd"}t||dd# \|_|_}}}	}}t|j|d t||d t|j|d$ |d%@ d&? }ddddg| |j_|	d? }ddddddg}x2|D ]*}d| d }t|||d@  |dL }q
W t|j|d' t|j
|d( n|d)kr:d*}t||dd# \|_|_}}	}}}t|j|d t||d+ t|j|d, t||d- |	d? }ddddddg}x2|D ]*}d| d }t|||d@  |dL }qW t|j|d' t|j
|d( d|j_d|j_n|d.krJtd/|\|_}}|d0@ |_t|j|d1 t|j|d2 xRd3D ]J\}}||@ rd4\}}nd5\}}t|j
|d6 | t|j
|d7 | qW |j}|d8@ rd9|_nd|_d:|_d;|_d|_ d|j_d|j_ddddddg}x4|D ]}d| d }t||d q&W nt!d<| t"| j#|_$| j#%| |  jd7  _|r|j&| j'd=|j$ d>d? y| j(|j }t)|j* } W n t+k
r   t,} Y nX | | j-|j$< | j.r&| jr|j/r|j d@krdA}!t0| j'|!|j$|j  t1| ||j$ |j| j(kr^dB}!| jrXt0| j'|!|j$|j|j d|_d S )CNra   r   r#   r!   z<HHHBBBBIiHr(   ))r   r   cell_locked)r   r^   formula_hidden))r^   r_   is_style)ra   r*   lotus_123_prefix)r_   i  parent_style_index))r   r}   	hor_align)ra   r*   text_wrapped)r_   p   
vert_align))r   r   indent_level)r_   r    shrink_to_fit)rf   r   text_directionr^   formatr   	alignmentborder
background
protection_Z_flagr   ))r   r   left_line_style)r_      right_line_style)r*   i   top_line_style)r   i   bottom_line_style)r    i   left_colour_index)   i  ?right_colour_index)r&   i   @	diag_down)   l        diag_up))r      top_colour_index)r}   i?  bottom_colour_index)rd   i  diag_colour_index)r'   i  diag_line_style))   l      x fill_pattern))r   r   pattern_colour_index)r}   i?  background_colour_indexz<HHHBBIir    r   Z      ))r   r   r   )r}   i?  r   )r    i  ? r   ))r   i  r   )   l      | r   ))r   r}   r   )ra   r   r   )rf   i  r   )r~   i   r   )r    i   r   )r   i  ?r   r%   z<BBHBBHIr   ))r   r}   r   )ra   r*   r   )r_   r   r   r   rf   ))r   ?   r   )rf   i  r   )r   i   r   ))r   r}   r   )ra      r   )r*   i   r   )r   i   r   )r    i   r   )r   i   r   )   i   r   )r   l      p r   r&   z<BBBBHHI))r^   r_   r   )ra   r*   r   ))r   r}   r   )ra   r*   r   ))r_   i  r   r'   z<BxBBr   ))rf   @   r   )r}   r   r   ))r   r}   r   ))r*   left)r    right)rb   top)r   Zbottom)r*   r   )r   r   Z_colour_indexZ_line_styler   r   r~   r*   zprogrammer stuff-up: bv=%dz--- handle_xf: xf[%d] --- )rg   rh   i  zNWARNING *** XF[%d] is a style XF but parent_style_index is 0x%04x, not 0x0fff
z9WARNING *** XF[%d] unknown (raw) format key (%d, 0x%04x)
)2rk   rl   r2   XFXFAlignmentr   r   r   r   XFBorderr   r   r   r   r   XFBackgroundr   XFProtectionr   Zxfcountr   r   rO   rv   rotationr   setattrr   r   r   r   r   r   r   r3   xf_listr   rm   rn   ro   r   _cellty_from_fmttyrw   KeyErrorr   _xf_index_to_xl_type_mapr.   r   r   r   )"r@   r\   rp   rq   xfZ
unpack_fmtZpkd_type_parZ
pkd_align1Z
pkd_align2Zpkd_usedZpkd_brdbkg1Zpkd_brdbkg2Zpkd_brdbkg3ZregZ
attr_stemsZ	attr_stemr   Zpkd_orient_usedZorientationZpkd_align_orientZ
pkd_bkg_34Z
pkd_brd_34Zpkd_type_protZpkd_align_parZ
format_etcZ
halign_etcmaskZsiderL   Z
line_styleZbgr   celltymsgr6   r6   r7   	handle_xf  sr   
.
	

$


$

	
$
	






r  c       
      C   s  d| _ t| j}tp| jdk}tp*| jdk}|r<t| jd dd }xRt|D ]D}| j| }y| j|j	 }t
|j }W n tk
r   t}Y nX || j|j< | jsqP|jrqPd|j  kr|k sn |rt| jd|j|j|j d|_| jdkrP|rB|j|jkrt| jd	|j|j n$| j|j jsBt| jd
|j|j |rj|j|jkrjt| jd|j|j | j|j }	|js|	js|r|| ||	d |js|	js|r|| ||	d |js|	js|r|| ||	d |js|	js|r|| ||	d |js^|	js^|r^|j	|	j	kr^t| jd|j|j	|	j|	j	| j|j	 j| j|	j	 j |jsP|	jsP|rP|j|	jkrPt| jd|j|j|	j|	j qPW d S )Nr   ra   zxf_epilogue called ...
c             S   s.   t ||t ||kr*t| jd|j|j| d S )Nz(NOTE !!! XF[%d] parent[%d] %s different
)getattrr   ro   r   )Zbook_argZxf_argZ
parent_argr   r6   r6   r7   
check_same  s    zxf_epilogue.<locals>.check_samer   z:WARNING *** XF[%d]: is_style=%d but parent_style_index=%d
r&   z/NOTE !!! XF[%d]: parent_style_index is also %d
z>NOTE !!! XF[%d]: parent_style_index is %d; style flag not set
z9NOTE !!! XF[%d]: parent_style_index is %d; out of order?
r   r   r   r   z4NOTE !!! XF[%d] fmtk=%d, parent[%d] fmtk=%r
%r / %r
z.NOTE !!! XF[%d] fontx=%d, parent[%d] fontx=%r
)_xf_epilogue_doner3   r   rk   rl   r   ro   r/   r   rv   r   rw   r  r   r  r   r.   r   r   r2   _alignment_flag_background_flag_border_flag_protection_flag_format_flagrx   
_font_flagrO   )
r@   Znum_xfsrp   Zblah1r	  Zxfxr  r   r  parentr6   r6   r7   xf_epilogue  s    



    r  c          	   C   sF   t |  d| _tttttttt	t
f	}x|D ]}t| j|j| q*W d S )Nr   )r8   r
  rt   r]   r   r   r   r   r   r  r  r   r   rD   )r4   methodsmethodr6   r6   r7   initialise_book>  s    
r  c               @   s@   e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZdZdZdS )r   ao  
    A collection of the border-related attributes of an ``XF`` record.
    Items correspond to those in the Excel UI's Format -> Cells -> Border tab.

    An explanations of "colour index" is given in :ref:`palette`.

    There are five line style attributes; possible values and the
    associated meanings are::

      0 = No line,
      1 = Thin,
      2 = Medium,
      3 = Dashed,
      4 = Dotted,
      5 = Thick,
      6 = Double,
      7 = Hair,
      8 = Medium dashed,
      9 = Thin dash-dotted,
      10 = Medium dash-dotted,
      11 = Thin dash-dot-dotted,
      12 = Medium dash-dot-dotted,
      13 = Slanted medium dash-dotted.

    The line styles 8 to 13 appear in BIFF8 files (Excel 97 and later) only.
    For pictures of the line styles, refer to OOo docs s3.10 (p22)
    "Line Styles for Cell Borders (BIFF3-BIFF8)".</p>

    .. versionadded:: 0.6.1
    r   N)rD   rE   rF   rG   r   r   r   r   r   r   r   r   r   r   r   r   r6   r6   r6   r7   r   O  s   r   c               @   s   e Zd ZdZdZdZdZdS )r   a  
    A collection of the background-related attributes of an ``XF`` record.
    Items correspond to those in the Excel UI's Format -> Cells -> Patterns tab.

    An explanations of "colour index" is given in :ref:`palette`.

    .. versionadded:: 0.6.1
    r   N)rD   rE   rF   rG   r   r   r   r6   r6   r6   r7   r     s   r   c               @   s,   e Zd ZdZdZdZdZdZdZdZ	dZ
dS )r   z
    A collection of the alignment and similar attributes of an ``XF`` record.
    Items correspond to those in the Excel UI's Format -> Cells -> Alignment tab.

    .. versionadded:: 0.6.1
    r   N)rD   rE   rF   rG   r   r   r   r   r   r   r   r6   r6   r6   r7   r     s   r   c               @   s   e Zd ZdZdZdZdS )r   ad  
    A collection of the protection-related attributes of an ``XF`` record.
    Items correspond to those in the Excel UI's Format -> Cells -> Protection tab.
    Note the OOo docs include the "cell or style" bit in this bundle of
    attributes. This is incorrect; the bit is used in determining which bundles
    to use.

    .. versionadded:: 0.6.1
    r   N)rD   rE   rF   rG   r   r   r6   r6   r6   r7   r     s   	r   c               @   sL   e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZdZdZdZdZdZdS )r   a  
    eXtended Formatting information for cells, rows, columns and styles.

    Each of the 6 flags below describes the validity of
    a specific group of attributes.

    In cell XFs:

    - ``flag==0`` means the attributes of the parent style ``XF`` are
      used, (but only if the attributes are valid there);

    - ``flag==1`` means the attributes of this ``XF`` are used.

    In style XFs:

    - ``flag==0`` means the attribute setting is valid;
    - ``flag==1`` means the attribute should be ignored.

    .. note::
      the API provides both "raw" XFs and "computed" XFs. In the latter case,
      cell XFs have had the above inheritance mechanism applied.

    .. versionadded:: 0.6.1
    r   N)rD   rE   rF   rG   r   r   r  r  r  r  r  r  r   rO   rv   r   r   r   r   r6   r6   r6   r7   r     s    r   )r   )JrG   Z
__future__r   reZstructr   Zbiffhr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   Ztimemachinerk   r   Zexcel_default_palette_b5Zexcel_default_palette_b2r0   r1   r   r8   r=   objectr>   rH   r]   rt   ru   r   Zfmt_code_rangesr   lohiry   r/   r   rR   Z
date_charsr   upperZ_cr   r   r   compilesubr   r   r   r   r   r   r   r   r  r  r  r   r   r   r   r   r6   r6   r6   r7   <module>	   s   L
XI!?4$+  >IC"