
mR\              :   @   s
  d  Z  d d l m Z d Z d d l Z d d l m Z d d l Td 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 i e e 6e e 6e e 6e e 6e e 6Z d d d f d d d f d d d f d d d f d d d f d d d f d d d f d d d f d	 d d f d d	 d f d d d	 f d	 d	 d f d	 d d	 f d d	 d	 f d
 d
 d
 f d	 d	 d	 f d d d f d d d f d d d f d d d f d d d f d d	 d	 f d d d f d d d f d d d	 f d d d f d d d f d d d f d	 d d	 f d	 d d f d d	 d	 f d d d f d d d f d d d f d d d f d d d f d d d f d d d f d d d f d d d f d d d f d d d f d d d f d d d f d d d f d d d f d d d f d d d f d d d f d d d f d d d f d d d f d d d f d d d f d d d f d d d f f8 Z e d d  Z d d d f d d d f d d d f d d d f d d d f d d d f d d d f d d d f d	 d d f d d	 d f d d d	 f d	 d	 d f d	 d d	 f d d	 d	 f d
 d
 d
 f d	 d	 d	 f d d d f d d d f d d d f d d d f d d d f d d	 d	 f d d d f d d d f d d d	 f d d d f d d d f d d d f d	 d d	 f d	 d d f d d	 d	 f d d d f d d d f d d d f d d d f d d d f d d d f d d d f d d d f d d d f d d d f d d d f d d d f d d d f d d d f d d d f d d d f d d d f d d d f d d d f d d d f d d d f d d d f d d d f d d d f d d d f f8 Z i e d 6e d 6e d 6e d 6e d 6e d 6e d 6e d 6Z d d d d d d d  d! d" d# g
 Z d$ d%   Z  d d& d'  Z! Gd( d)   d) e"  Z# Gd* d+   d+ e	 e#  Z$ d, d-   Z% d. d/   Z& Gd0 d1   d1 e	 e#  Z' i$ d2 d 6d3 d 6d4 d5 6d6 d7 6d8 d9 6d: d; 6d< d= 6d> d? 6d@ dA 6dB dC 6dD dE 6dF dG 6dH dI 6dJ dK 6dL dM 6dN dO 6dP d 6dQ dR 6dS dT 6dU dV 6dW d 6dX d 6dY dZ 6d[ d\ 6d] d^ 6d_ d` 6da d 6db dc 6dd de 6df dg 6dh di 6dj d 6dk dl 6dm dn 6do dp 6dq dr 6Z( d d e f d dK e f dM dZ e f ds dt e f d\ di e f d dn e f dp dp e f dr dr e f d du e f dv dw e f dx d e f dy dz e f g Z) i  Z* x? e) D]7 \ Z+ Z, Z- x% e. e+ e, d  D] Z/ e- e* e/ <qWqW[+ [, [- [/ e0 d{  Z1 i  Z2 x" e1 e1 j3   D] Z4 d; e2 e4 <q#	W[4 [1 i  Z5 x e0 d|  D] Z4 d e5 e4 <qP	Wi d; e0 d3  6d; e0 d}  6d; e0 d~  6Z6 i d e0 dF  6d e0 do  6d e0 d2  6d e0 d  6d e0 d  6d e0 dq  6Z7 e j8 d  j9 Z: d d   Z; e d d  Z< d d   Z= d d   Z> d d   Z? d d   Z@ d d   ZA d d   ZB d d   ZC d d   ZD Gd d   d e	 e#  ZE Gd d   d e	 e#  ZF Gd d   d e	 e#  ZG Gd d   d e	 e#  ZH Gd d   d e	  ZI d S)z$
Module for formatting information.
    )print_functionN)unpack   )*)
BaseObjectunpack_unicodeunpack_stringupkbitsupkbitsLfprintfFUNFDTFNUFGEFTXXL_CELL_NUMBERXL_CELL_DATEXL_CELL_TEXT	XL_FORMAT
XL_FORMAT2	XLRDError            3   f               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  Sx% t d  D] } t | |  j  | <q, Wt |  j } t |  } x) t |  D] } | | |  j  | d <qm Wd  |  j  | d <d  |  j  | d d <x d D] } d  |  j  | <q Wd  S)N   r   Q     )r+   r,   )
colour_mapcolour_indexes_usedformatting_infoxrangeexcel_default_palette_b8default_palettebiff_versionlen)bookiZdpalZndpalZci r7   3/var/www/dbchiro/venv/build/xlrd/xlrd/formatting.pyinitialise_colour_mapg   s     			 
r9   c       
      C   s   d } d } x |  j    D] \ } } | d k r7 q n  d } x3 t | |  D]" \ } }	 | | |	 | |	 7} qM W| | k  r | } | } | d k r Pq q q Wd r | r t d | | |  | | f  n  | 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.
          r   Nz:nearest_colour_index for %r is %r -> %r; best_metric is %di   i   )itemszipprint)
r-   ZrgbdebugZbest_metricZbest_colourxZcolourxZcand_rgbZmetricv1v2r7   r7   r8   nearest_colour_index   s"    rB   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otherr7   r7   r8   __eq__   s    zEqNeAttrs.__eq__c             C   s   |  j  | j  k S)N)rD   )rE   rF   r7   r7   r8   __ne__   s    zEqNeAttrs.__ne__N)__name__
__module____qualname____doc__rG   rH   r7   r7   r7   r8   rC      s   rC   c               @   sv   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)rI   rJ   rK   rL   boldcharacter_setcolour_index
escapementfamily
font_indexheightitalicUNICODE_LITERALname
struck_outunderline_type
underlinedweightoutlineshadowr7   r7   r7   r8   rM      s    
rM   c             C   s.   |  j  s d  St d |  d |  j d _ d  S)Nz<Hr   r   )r/   r   	font_listrQ   )r5   datar7   r7   r8   handle_efont   s    	rb   c          	   C   s  |  j  s d  S|  j s# |  j   n  t p5 |  j d k } |  j } t |  j  } | d k r t   } t	 d  | _
 | | _ |  j j |  | d 7} n  t   } | | _ |  j 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 | _
 qt | d |  j d d | _
 n| d k rt 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 | _ n t 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 d | j d d n  d  S)N      z
Dummy Fontr   r#   z	<HHHHHBBBr      r*   r:   r           r!      lenlenr&   z<HHH   i  i  z<HHi  headerz--- handle_font: font[%d] ---footerz-------------------)r/   encodingderive_encodingDEBUG	verbosityr3   r4   r`   rM   rW   rX   rT   appendr   rU   rQ   r\   rR   rZ   rS   rP   rO   rV   r[   rY   r]   r^   r   r   dumplogfile)r5   ra   blahbvkfZoption_flagsr7   r7   r8   handle_font  sx    							F!(		"							rx   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   rN   c             C   s   | |  _  | |  _ | |  _ d  S)N)
format_keytype
format_str)rE   rz   tyr|   r7   r7   r8   __init__b  s    		zFormat.__init__N)
rI   rJ   rK   rL   rz   r   r{   rW   r|   r~   r7   r7   r7   r8   ry   J  s
   ry   ZGeneral0z0.00rc   z#,##0r:   z#,##0.00rd   z$#,##0_);($#,##0)rg   z$#,##0_);[Red]($#,##0)rj   z$#,##0.00_);($#,##0.00)   z$#,##0.00_);[Red]($#,##0.00)r*   z0%	   z0.00%
   z0.00E+00   z# ?/?   z# ??/??re   zm/d/yyrh   zd-mmm-yy   zd-mmmzmmm-yy   z
h:mm AM/PM   zh:mm:ss AM/PM   zh:mmzh:mm:sszm/d/yy h:mm   z#,##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:ss.   zmm:ss.0/   z##0.0E+00   @1      $   :   ;   >   C   G   r+   Zymdhsz$-+/(): #?ZGENERALZgeneralz	\[[^]]*\]c       	      C   s(  d } d } x | D] } | d k rw | t  d  k r@ d } q | t  d  k r[ d } q | t k rj q | | 7} n? | d k r | t  d  k r d } q n | d k r d } n  d | k o d k n s t  q W|  j d k rt d t |  d	 |  j n  t d |  } | t k r*d
 Sd } d } d } d } } x] | D]U } | t	 k rp| t	 | 7} qM| t
 k r| t
 | 7} qM| | k rMd } qMqMW| r| rd S| r| rd
 S| r|  j rt |  j d | | |  qn( | s|  j rt |  j d |  qn  | | k S)Nr   rN   "r   z\_*rc   rd   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
)rW   skip_char_dictAssertionErrorrp   r>   ZREPRrs   fmt_bracketed_subnon_date_formatsdate_char_dictnum_char_dictr   )	r5   fmtstatesc	separatorZgot_sepZ
date_countZ	num_countr7   r7   r8   is_date_format_string  s`    
			& 
				r   c             C   sI  d } |  j  } | t k r- t | d  } n  |  j sC |  j   n  d } | d k ru t d | d d   d } n |  j } | d k r d } n  |  j d 7_ | d k r t | d  } n t | | |  j d d } | p |  j	 d	 k } | rt
 |  j d
 |  j | | |  n  |  j |  }	 t t g |	 }
 | d k pL| d k  st j | t  } | t k } |  j	 rd | k  od k  n r| |	 Ard } t
 |  j d | |  qn  | d k rt
 |  j d |
 | |	 |  n  t | |
 |  } | r(| j |  j d d |  j d f n  | |  j | <|  j j |  d  S)Nr   r&   rc   r#   z<Hr   r!   ri   r:   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: %rrk   z--- handle_format [%d] ---)r3   r   minrm   rn   r   Zactualfmtcountr   r   rp   r   rs   r   r   r   std_format_code_typesgetr   ry   rr   
format_mapformat_listrq   )rE   ra   Zrectypero   ru   ZstrposZfmtkeyZunistrgrt   Z	is_date_sr}   Zstd_tyZ	is_date_cfmtobjr7   r7   r8   handle_format  sR    		 			/		r   c             C   s  |  j  s d  St p |  j d k } t d | d  d   \ } d |  j d k } t sf |  j d k r | | k r t |  j d | |  n | r t |  j d |  n  d	 | } d
 | d } t |  } d
 } | | k o | | k n s
t d | | f   n  t | | d  |   }	 |  j	 g  k s8t
  x t |  D] }
 |	 |
 } | d @} | d ?d @} | d ?d @} |  j d |
 } | | | f } |  j	 j |  | |  j d |
 <| rE| | k rt d |
 | | f d |  j qqEqEWd  S)Nrc   z<Hr    8   r#   r   z9NOTE *** Expected %d colours in PALETTE record, found %d
zPALETTE record with %d colours
z<xx%dird   z0PALETTE record: expected size %d, actual size %dr   r*   z%2d: %r -> %rr   )r    r   )r/   ro   rp   r   r3   r   rs   r4   r   Zpalette_recordr   r0   r-   rq   r>   )r5   ra   rt   Z	n_coloursZexpected_n_coloursr   Zexpected_sizeZactual_sizeZ	toleranceZcoloursr6   r   ZredZgreenZblueZold_rgbZnew_rgbr7   r7   r8   handle_palette<  sB    			
 

r   c             C   s   x |  j  D] } | j d k r% q
 n  | j } | d k r@ q
 n  | |  j k r_ d |  j | <q
 |  j r
 t d t |  j  d |  j t	 |  j d | j | j
 |  q
 q
 W|  j d k r t |  j j    } t d | d |  j n  d  S)Nrd   i  r   zSize of colour table:r   z2*** Font #%d (%r): colour index 0x%04x is unknown
z
Colour indexes used:
%r
)r`   rT   rQ   r-   r.   rp   r>   r4   rs   r   rX   sortedkeys)r5   fontZcxusedr7   r7   r8   palette_epiloguea  s    		r   c       
      C   s  |  j  s d  St p |  j d k } |  j } t d | d  d   \ } } } | d @} | d k r d |  j k r d } d } d } d }	 d	 } n)| d
 @r d } t | }	 d | k o d k n r|	 t | d  7}	 qn d } d } d } | d k r~y t | d d d }	 Wqt	 k
 rzt
 d | | | | f d |  j t
 d t | d d    d |  j   YqXn t | d |  j d d }	 | r|	 rt
 d d |  j n  | | f |  j |	 <| rt |  j d | | | | |	  n  d  S)Nrc   z<HBBrd   i  s       r)   r   r   r   i   r!   ri   z6STYLE: built_in=%d xf_index=%d built_in_id=%d level=%dr   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/   ro   rp   r3   r   Zstyle_name_mapbuilt_in_style_namesstrr   UnicodeDecodeErrorr>   rs   reprr   rm   r   )
r5   ra   rt   ru   Zflag_and_xfxZbuilt_in_idlevelxf_indexZbuilt_inrX   r7   r7   r8   handle_styleu  sH    		"
	

&r   c             C   s   t  | j j    } x | D] \ } } t | d  rJ t |  | |  q | j d  d k r | |  j k r d |  j | <q n  | j j	 } t
 d | | | | f d |  j q q Wd  S)Nrr   rQ   r   r   z&*** xf #%d : %s.%s =  0x%04x (unknown)r   )r   rD   r<   hasattrcheck_colour_indexes_in_objfindr-   r.   	__class__rI   r>   rs   )r5   objZ
orig_indexalistattrZnobjZonamer7   r7   r8   r     s    r   c             C   se   x^ t  j   D]P } | |  j k r t  | } t j |  } t | | |  } | |  j | <q q Wd  S)N)r   r   r   std_format_stringsr   ry   )r5   xr}   Zfmt_strr   r7   r7   r8   fill_in_standard_formats  s    
r   c       !      C   s4  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 r t |   n  | d k rd } t | | d d   \
 | _ | _ } } | j _ } }	 }
 } } t | j | du  t | | dy  t | j | d}  t | j | d  |	 d	 ?} x@ d j   D]2 } d | d } t | | | d @ | d L} qWt | j
 |
 d  t | j
 | d  t | j | d  t | j | d  n| d k r3dB } t | | d d   \ | _ | _ } } } }
 } t | j | d  t | | d  t | j | d  | d @} d dC dD dE g | | j _ | d	 ?} x@ d j   D]2 } d | d } t | | | d @ | d L} qWt | j |
 d  t | j
 |
 d  t | j
 | d  n| dO k rOdP } t | | d d%   \ | _ | _ } } }	 } } t | j | d  t | | d  t | j | d  | d @d ?} d dC dD dE g | | j _ |	 d	 ?} x@ d j   D]2 } d | d } t | | | d @ | d L} qWt | j | d  t | j
 | d  n| d- k rid_ } t | | d d%   \ | _ | _ } }	 } } } t | j | d  t | | d  t | j | d  t | | d  |	 d	 ?} x@ d j   D]2 } d | d } t | | | d @ | d L} qWt | j | d  t | j
 | d  d	 | j _ d | j _ ng| d: k rt d` |  \ | _ } } | dR @| _ t | j | d  t | j | d  xg d D]_ \ } } | | @rd \ } } n d \ } } t | j
 | dh |  t | j
 | di |  qW| j } | db @rLdj | _ n	 d | _ dM | _ d | _  d | _! d	 | j _ d | j _ xE d j   D]$ } d | d } t | | d  qWn t" dk |   t# |  j$  | _% |  j$ j& |  |  j d 7_ | r-| j' |  j( dl dm | j% dn do n  y! |  j) | j } t* | j+ } Wn t, k
 rht- } Yn X| |  j. | j% <|  j/ r|  j r| j0 r| j! dp k rdq }  t1 |  j( |  | j% | j!  n  t2 |  | | j%  n  | j |  j) k r0dr }  |  j r$t1 |  j( |  | j% | j | j  n  d | _ n  d  S)Nr:   r   r#   r!   z<HHHBBBBIiHr(   r   cell_lockedrc   formula_hiddenrd   is_styler*   lotus_123_prefix  parent_style_indexr   	hor_aligntext_wrappedp   
vert_alignr   indent_levelr    shrink_to_fitrj   r   text_directionz2format font alignment border background protection__flagleft_line_style   right_line_style   top_line_styler      bottom_line_style   left_colour_index     ?right_colour_indexr&      @	diag_down           diag_up   top_colour_index?  bottom_colour_indexrh     diag_colour_indexr'     diag_line_style         x fill_patternpattern_colour_indexbackground_colour_indexz<HHHBBIir   Z        ? r              | r     r      r%   z<BBHBBHIr   ?     r               r            r         p z<BBBBHHIz<BxBB@   r   leftrightrf   topbottomZ_colour_indexZ_line_styler   zprogrammer stuff-up: bv=%drk   z--- handle_xf: xf[%d] ---rl    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)
r   r   cell_lockedr   rc   formula_hidden)r  r  rc   rd   is_styler:   r*   r   rd   r   parent_style_index)r  r  r  r   r   	hor_alignr:   r*   text_wrappedrd   r   
vert_align)r  r  r   r   r   zindent_levelrd   r    zshrink_to_fitrj   r   ztext_direction)r"  r#  r$  r   r   left_line_stylerd   r   right_line_styler*   r   top_line_styler   r   bottom_line_styler    r   left_colour_indexr   r   right_colour_indexr&   r   z	diag_downr   r   zdiag_up)r%  r'  r)  r+  r-  r/  r1  r2  r   r   top_colour_indexr   r   bottom_colour_indexrh   r   zdiag_colour_indexr'   r   zdiag_line_style)r3  r5  r7  r8  r   r   fill_pattern)r9  r   r   pattern_colour_indexr   r   background_colour_index)r;  r=  r   r   r  r   rc   r  )r?  r@  rc   rd   r  r:   r*   r   rd   r   r  )rA  rB  rC  r   r   r  r:   r*   r  rd   r   r!  )rD  rE  rF  r   r   r<  r   r   r>  r    r   r:  )rG  rH  rI  r   r   r,  r   r   r6  )rJ  rK  r   r   r*  r:   r   r&  rj   r  r(  r   r  r4  r    r   r.  r   r   r0  )rL  rM  rN  rO  rP  rQ  r   r   r  r   rc   r  )rR  rS  rc   rd   r  r:   r*   r   rd   r   r  )rT  rU  rV  r   r   r  r:   r*   r  rd   r   r!  )rW  rX  rY  r   r  r:  rj   r  r<  r   r  r>  )rZ  r[  r\  r   r   r*  r:   r  r4  r*   r  r&  r   r  r.  r    r  r,  r   r	  r6  r
  r  r(  r   r  r0  )r]  r^  r_  r`  ra  rb  rc  rd  r   r   r  r   rc   r  )re  rf  rc   rd   r  r:   r*   r   )rg  rh  r   r   r  r:   r*   r  )ri  rj  rd   r   r  )rk  r   r  r:  rj   r  r<  r   r  r>  )rl  rm  rn  r   r   r*  r:   r  r4  r*   r  r&  r   r  r.  r    r  r,  r   r	  r6  r
  r  r(  r   r  r0  )ro  rp  rq  rr  rs  rt  ru  rv  rj   r  r  r   r   r  )rw  rx  r   r   r  )ry  r*   zleftr    zrightrf   ztopr  r  )rz  r{  r|  r}  )r*   r   )r   r   )3ro   rp   r3   XFXFAlignment	alignmentr   r   r   XFBorderborderr   r   r   r   XFBackground
backgroundXFProtection
protectionZxfcountr   r   rT   rz   rotationr	   splitsetattrr
   r   r   r   r   r   r   r4   xf_listr   rq   rr   rs   r   _cellty_from_fmttyr{   KeyErrorr   _xf_index_to_xl_type_mapr/   r   r   r   )!rE   ra   rt   ru   xfZ
unpack_fmtZpkd_type_parZ
pkd_align1Z
pkd_align2Zpkd_usedZpkd_brdbkg1Zpkd_brdbkg2Zpkd_brdbkg3regZ	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siderQ   Z
line_stylebgr   celltymsgr7   r7   r8   	handle_xf  s   		C 	      
           
4 	    

        
4 	    
         
4 	  	
          
	
					
	!	r  c       
      C   s  d |  _  t |  j  } t p* |  j d k } t p? |  j d k } | r[ t |  j d  n  d d   } xFt |  D]8} |  j | } y! |  j | j	 } t
 | j } Wn t k
 r t } Yn X| |  j | j <|  j s qt n  | j r qt n  d | j k o| k  n sG| r;t |  j d | j | j | j  n  d | _ n  |  j d k rt | r| j | j k rt |  j d	 | j | j  q|  j | j j st |  j d
 | j | j  qn  | r| j | j k rt |  j d | j | j  n  |  j | j }	 | j r<|	 j r<| r<| |  | |	 d  q<n  | j ro|	 j ro| ro| |  | |	 d  qon  | j r|	 j r| r| |  | |	 d  qn  | j r|	 j r| r| |  | |	 d  qn  | j rO|	 j rO| rO| j	 |	 j	 k rOt |  j d | j | j	 |	 j |	 j	 |  j | j	 j |  j |	 j	 j  qOn  | j r|	 j r| r| j |	 j k rt |  j d | j | j |	 j |	 j  qqqt qt Wd  S)Nr   r:   zxf_epilogue called ...
c             S   sD   t  | |  t  | |  k r@ t |  j d | j | j |  n  d  S)Nz(NOTE !!! XF[%d] parent[%d] %s different
)getattrr   rs   r   )Zbook_argZxf_argZ
parent_argr   r7   r7   r8   
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_doner4   r  ro   rp   r   rs   r0   r   rz   r  r{   r  r   r  r   r/   r   r   r3   _alignment_flag_background_flag_border_flag_protection_flag_format_flagr|   
_font_flagrT   )
rE   Znum_xfsrt   Zblah1r  Zxfxr  r   r  parentr7   r7   r8   xf_epilogue  s    							    		r  c          	   C   s_   t  |   d |  _ t t t t t t t t	 t
 f	 } x$ | D] } t |  j | j |  q; Wd  S)Nr   )r9   r  rx   rb   r   r   r   r   r   r  r  r  r   rI   )r5   methodsmethodr7   r7   r8   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)rI   rJ   rK   rL   r   r   r   r   r   r   r   r   r   r   r   r   r7   r7   r7   r8   r  (  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)rI   rJ   rK   rL   r   r   r   r7   r7   r7   r8   r  k  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)rI   rJ   rK   rL   r   r   r  r   r   r   r   r7   r7   r7   r8   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)rI   rJ   rK   rL   r   r   r7   r7   r7   r8   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 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)rI   rJ   rK   rL   r   r   r  r  r  r  r  r  r   rT   rz   r  r  r  r  r7   r7   r7   r8   r~    s    r~  )JrL   
__future__r   ro   restructr   ZtimemachineZbiffhr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r  Zexcel_default_palette_b5Zexcel_default_palette_b2r1   r2   r   r9   rB   objectrC   rM   rb   rx   ry   r   Zfmt_code_rangesr   lohir}   r0   r   rW   Z
date_charsr   upperZ_cr   r   r   compilesubr   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r~  r7   r7   r7   r8   <module>	   s:  
p
0000000000000600000000000006
	XI
?4%, IC"