o
    +gf9                     @   s   d dl mZ d dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
 dddZd	d
 Zdd Zdd Zdd Zdd Zdd Zdd ZdS )    )DocumentN)WD_ALIGN_PARAGRAPH)OxmlElement)qncenterc                 C   s4   | j }| }td}|td| || dS )z1Set the vertical alignment of text within a cell.zw:vAlignzw:valN)_tcget_or_add_tcPrr   setr   append)cellaligntctcPrvalign r   /home/ubuntu/flask/wisc.pyset_cell_vertical_alignment
   s
   r   c                 C   s@  t | }g }g }g d}dddddddd	d
dd
}i }t|jdkr:|jd }|jD ]}dd |jD }	||	 q*t|jdkrY|jd }
|
jD ]}dd |jD }	||	 qI|D ]}|D ]}t||d tjrx|dkrt||d< q_|||< q_q[|D ]!}|D ]}t|| |d r|| |vr|dd  ||| < qq||S )N)VerbalVisual SpatialFluid ReasoningWorking MemoryProcessing SpeedFull Scale IQSimilarities
VocabularyBlock DesignVisual PuzzlesMatrix ReasoningFigure Weights
Digit SpanPicture SpanCodingSymbol Search
SIVCBDVPMRFWDSPSCDSSr      c                 S      g | ]}|j  qS r   textstrip.0r   r   r   r   
<listcomp>.       z+extract_table_from_docx.<locals>.<listcomp>      c                 S   r/   r   r0   r3   r   r   r   r5   4   r6   r   Verbal Comprehension)	r   lentablesrowscellsr
   research
IGNORECASE)	docx_pathdoctable_contentsubtest_content	rowLabelssubtestLabelstabletable1rowrow_datatable2datalabelr   r   r   extract_table_from_docx   sR   




 rN   c                 C   sH  t | }g }g }g d}dddddddd	d
dd
}i }|D ]}|jdkrn|d}|jdd d g }	d }
|D ].}|d |d |d }}}|
d u sTt||
 dkra|	r[||	 |g}	|}
q8|	| q8|	rn||	 |jdkr|d}|jdd d g }	d }
|D ].}|d |d |d }}}|
d u st||
 dkr|	r||	 |g}	|}
q|	| q|	r||	 q|D ]}|D ]}t||d tj	r|d 
d||< qq|D ]E}|D ]@}t|| |d r || |vr |d 
dd || kr|d 
dd || krq|d 
ddd  ||| < qq|S )N)r9   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#      blocksc                 S      | d | d fS Nr7   r   r   blockr   r   r   <lambda>_       z(extract_table_from_pdf.<locals>.<lambda>)keyr   r7      r8   c                 S   rQ   rR   r   rS   r   r   r   rU   p   rV   
)fitzopennumberget_textsortabsr
   r>   r?   r@   split)pdf_pathrB   rC   rD   rE   rF   rG   pagerP   current_row	current_yrT   x0y0r1   rL   rM   r   r   r   extract_table_from_pdfF   s~   








$8rg   c                 C   s   t dd| } td|  S )Nz	\([^)]*\) NFKC)r>   subunicodedata	normalizer2   )sr   r   r   normalize_string   s   rn   c                 C   s  t | }|jd }|jdd  D ]=}|jd j}t|}t| ||v rMttddg dD ]\}}|j| }	|| | |	_|	j	d }
t
j|
_t|	d q.q|jd }|jdd  D ]d}|jd j}t|}||v rttddddgD ]I\}}d|v sd|v sd	|v sd
|v r|j| }	|| | |	_|	j	d }
t
j|
_t|	d qt|j| }	|| | |	_|	j	d }
t
j|
_t|	d qtqZtjdkr|tjd|}d S |d}d S )Nr   r7   rX   )r.   rX      r   r.   PuzzlesWeightPictureSymbolposix/home/ubuntu/flask/files/zupdated_template.docx)r   r;   r<   r=   r1   rn   printziprange
paragraphsr   CENTER	alignmentr   osnamesavepathjoin)r   rL   filenamerB   rG   rI   rW   icontent_indexr   	paragraph	save_pathr   r   r   insert_table_into_word   sF   



 




r   c                 C   sB   g dt | d d }d| d   krdkrn nd}|  | S )z3Convert an integer into its ordinal representation.)thstndrdr   
   rX      d      r   )min)r\   suffixr   r   r   ordinal   s   r   c                    s4   |   D ]\}}t fdd|D r|  S qdS )zCSearch through dictionary to find a key based on a value substring.c                 3   s*    | ]}t d t   d  |V  qdS )z\bN)r>   r?   escape)r4   valsearch_valuer   r   	<genexpr>   s   ( z$find_key_by_value.<locals>.<genexpr>N)itemsany)rL   r   rW   valuesr   r   r   find_key_by_value   s
   r   c                 C   sl  t | }i 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#d$d%d&d'd(d)d*d+d,d-d.d/d0}td1 t| |jD ]G}|j}g }| D ]\}\}	}
|d2d3 }t||}|r,|	|v r,|| |
 }td4|  d5|v rt|}t| d6}d7}nyd|v rd8}d9}npd|v rd:}d9}ngd|v rd;}d9}n^d<|v rd=}d9}nUd>|v rd?}d9}nLd@|v rdA}d9}nCdB|v rd9}tdC|  tdD|	  tdE|  n'dF|v rdG}tdC|  tdD|	  tdE|  n
|| |
 	 }d7}t
t
|	|D ]}|| | ||f qq`tdH| |r|  d3}|  |D ]Q\}}}}|d7kr_||||  ||}dI|_|}|d9kry||||  ||}dI|_|}qA|dGkr||||  ||}dI|_|}qA|||d   qTtjdJkr|tjdK|}d S ||}d S )LNVCI_DESC)z
[VCI_DESC]ro   VCI_PCT)z	[VCI_PCT]rX   VSI_DESC)z
[VSI_DESC]ro   VSI_PCT)z	[VSI_PCT]rX   FRI_DESC)z
[FRI_DESC]ro   FRI_PCT)z	[FRI_PCT]rX   WMI_DESC)z
[WMI_DESC]ro   WMI_PCT)z	[WMI_PCT]rX   PSI_DESC)z
[PSI_DESC]ro   PSI_PCT)z	[PSI_PCT]rX   VCI_BOLD)z
[VCI_BOLD]r7   VCI_LONG_BOLD)z[VCI_LONG_BOLD]r   SI_UL)z[SI_UL]r   VC_UL)z[VC_UL]r   VSI_BOLD)z
[VSI_BOLD]r7   VSI_LONG_BOLD)z[VSI_LONG_BOLD]r   BD_UL)z[BD_UL]r   )z[VP_UL]r   )z
[FRI_BOLD]r7   )z[FRI_LONG_BOLD]r   )z[MR_UL]r   )z[FW_UL]r   )z
[WMI_BOLD]r7   )z[WMI_LONG_BOLD]r   )z[PS_UL]r   )z[DS_UL]r   )z
[PSI_BOLD]r7   )z[PSI_LONG_BOLD]r   )z[SS_UL]r   )z[CD_UL]r   )VP_ULFRI_BOLDFRI_LONG_BOLDMR_ULFW_ULWMI_BOLDWMI_LONG_BOLDPS_ULDS_ULPSI_BOLDPSI_LONG_BOLDSS_ULCD_ULzhere is the data_r   zkey: PCTz percentileitalicz Verbal Comprehension Index (VCI)boldVCIzVisual Spatial Index (VSI)r   zFluid Reasoning Index (FRI)r   zWorking Memory Index (WMI)r   zProcessing Speed Index (PSI)BOLDz
full_key: zplaceholder: zabbreviation: UL	underlinezchanges:Trt   ru   )r   rv   ry   r1   r   r`   r   intr   lowerr>   finditerr   r
   startendr^   clearadd_runr   r   r   r|   r}   r~   r   r   )template_pathrL   r   rB   placeholdersr   original_textchangesrW   placeholderidxabbreviationfull_keydescriptionpercentile_valuetformatmlast_idxr   r   r1   
italic_runbold_runul_runr   r   r   r   update_document   s   	
!








r   )r   )docxr   r>   rk   r|   docx.enum.textr   	docx.oxmlr   docx.oxml.nsr   r   rN   rg   rn   r   r   r   r   r   r   r   r   <module>   s   
4I6