o
    jg5                     @   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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)get_indices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/wais.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d}dd | D }i }g d}tt|D ]#}	t|jdkrR|j||	  }
|
jD ]}dd |jD }|| qBq/t|jdkrr|jd }|jD ]}dd |jD }|| qb|D ]?}|D ]:}td t|d  td t	
||d t	jsd|v r|dkr||d< qxd|v r||d< d|d d< qx|||< qxqtt| |D ]"}|D ]}t	
|| |d r|| |vr|| |||| < qq|S )N)Verbal ComprehensionzPerceptual ReasoningzWorking MemoryzProcessing Speed
Full ScaleSimilarities
VocabularyInformationzBlock DesignzVisual PuzzleszMatrix ReasoningzFigure Weightsz
Digit Span
ArithmeticCodingzSymbol Search)SIVCINBDVPMRFWDSARCDSSc                 S   s   i | ]\}}||qS r   r   ).0keyvaluer   r   r   
<dictcomp>(       z+extract_table_from_docx.<locals>.<dictcomp>)                  r   c                 S      g | ]}|j  qS r   textstripr&   r   r   r   r   
<listcomp>3   r*   z+extract_table_from_docx.<locals>.<listcomp>r+   r-   c                 S   r1   r   r2   r5   r   r   r   r6   ;   r*   zr======================================================== Data ====================================================zq======================================================== End ====================================================r   Verbalr   Full Scale IQ)r   itemsrangelentablesrowscellsr   printresearch
IGNORECASE)	docx_pathdoctable_contentsubtest_content	rowLabelssubtestLabelsreversed_subtestLabelstable	tableNumsitable1rowrow_datatable2datalabelr   r   r   extract_table_from_docx   sp   



 

rS   c                 C   s.   t dd| } d| v rd} | S td|  S )Nz	\([^)]*\) r   r8   NFKC)r@   subunicodedata	normalizer4   )sr   r   r   normalize_string\   s
   rZ   c                 C   s   d |  d d  S )N )joinsplitr4   )r'   r   r   r   normalize_keyd   s   r_   c                 C   s  t | }t|d}g d}ddg}| D ]\}}td| td| |j|d  }	|d }
|	jd	d  D ]}|jd
 j }||v sIt	||v rt
|
D ]k\}}|j| }|dkrrdt	|v rdt	|}t|t	| ||  |_n8d|v r~t	|}d|v svd|| d
 v rqMtd t| td||  t|| ||  |_t|j td |jd
 }tj|_t|d qMq5qtjdkr|tjd| d S || d S )NWAIS)r,   r-   r/      r,   zTable name: zinfo: table_indexcolumnsr+   r   zWAIS-V IndexzVerbal Comprehension IndexIndexr8   z!---------------------------------zData: r   posix/home/ubuntu/flask/files/)r   r   r9   r?   r<   r=   r>   r3   r4   r_   	enumeratestr
paragraphsr   CENTER	alignmentr   osnamesavepathr]   )ro   rQ   filenamerD   table_indices
wais_indexwais_subtest
table_nameinforJ   column_indicesrN   r'   rL   column_indexr   	paragraphr   r   r   insert_table_into_wordh   sJ   






"ry   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rdrz   
   r-      d      rz   )min)number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@   rA   escape)r&   valsearch_valuer   r   	<genexpr>   s   ( z$find_key_by_value.<locals>.<genexpr>N)r9   any)rQ   r   r'   valuesr   r   r   find_key_by_value   s
   r   c                 C   s  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,	}|jD ]}|j}g }| D ]\}\}	}
|d-d. }t||}|d/krk	 |r|	|v r|| |
 }d0|v rt|}t| d1}d2}nEd|v rd3}d4}n<d|v rd5}d4}n3d|v rd6}d4}n*d|v rd7}d4}n!d8|v rd9}d4}nd:|v rd4}nd;|v rd<}n
|| |
  }d2}t	
t	|	|D ]}|| | ||f qqT|rP|  d.}|  |D ]O\}}}}|d2kr||||  ||}d=|_|}|d4kr.||||  ||}d=|_|}q|d<krF||||  ||}d=|_|}q|||d   qHtjd>krc|tjd?|}d S ||}d S )@NVCI_DESC)z
[VCI_DESC]r/   VCI_PCT)z	[VCI_PCT]r-   VCI_BOLD)z
[VCI_BOLD]ra   VCI_LONG_BOLD)z[VCI_LONG_BOLD]r   SI_UL)z[SI_UL]r   VC_UL)z[VC_UL]r   IN_UL)z[IN_UL]r   PRI_BOLD)z
[PRI_BOLD]ra   PRI_LONG_BOLD)z[PRI_LONG_BOLD]r   PRI_DESC)z
[PRI_DESC]r/   PRI_PCT)z	[PRI_PCT]r-   MR_UL)z[MR_UL]r   BD_UL)z[BD_UL]r   VP_UL)z[VP_UL]r   WMI_BOLD)z
[WMI_BOLD]ra   WMI_LONG_BOLD)z[WMI_LONG_BOLD]r   WMI_DESC)z
[WMI_DESC]r/   )z	[WMI_PCT]r-   )z[DS_UL]r   )z[AR_UL]r   )z
[PSI_BOLD]ra   )z[PSI_LONG_BOLD]r   )z
[PSI_DESC]r/   )z	[PSI_PCT]r-   )z[SS_UL]r   )z[CD_UL]r   )	WMI_PCTDS_ULAR_ULPSI_BOLDPSI_LONG_BOLDPSI_DESCPSI_PCTSS_ULCD_UL_r   r   PCTz percentileitalicz Verbal Comprehension Index (VCI)boldVCIz Perceptual Reasoning Index (PRI)zWorking Memory Index (WMI)r   zProcessing Speed Index (PSI)BOLDUL	underlineTre   rf   )r   ri   r3   r9   r^   r   intr   lowerr@   finditerr   r   startendsortclearadd_runr   r   r   rl   rm   rn   ro   r]   )template_pathrQ   rp   rD   placeholdersrx   original_textchangesr'   placeholderidxabbreviationfull_keydescriptionpercentile_valuetformatmlast_idxr   r   r3   
italic_runbold_runul_run	save_pathr   r   r   update_document   s   	
 






r   )r   )docxr   r@   rW   rl   docx.enum.textr   	docx.oxmlr   docx.oxml.nsr   hir   r   rS   rZ   r_   ry   r   r   r   r   r   r   r   <module>   s     
J9