
    'j8                       d dl mZ d dlmZmZmZmZ d dlmZ d dl	m
Z
 d dlmZmZ d dlmZ erd dlmZ g dZ G d	 d
          Z G d d          Z G d d          ZddZddZ G d d          Z G d d          ZdS )     )annotations)OptionalIterableAnyTYPE_CHECKING)Path)load_section_dict)	DXFVertextag_type)Tags)SectionDict)DXFDocument
IndexEntryget_row_from_line_numberdxfstrEntityHistorySearchIndexc                      e Zd Zd d!dZed             Zed"d            Zd#dZd$dZd Z	d%dZ
d&dZd'd(dZd)dZd*dZd*dZd+dZdS ),r   NsectionsOptional[SectionDict]c                    t                      | _        d | _        d | _        d| _        |r|                     |           d S d S )N )dictr   entity_indexvalid_handlesfilenameupdateselfr   s     S/DATA/AppData/hermes/venv/lib/python3.11/site-packages/ezdxf/addons/browser/data.py__init__zDXFDocument.__init__   sP     &*VV37! 	"KK!!!!!	" 	"    c                *    t          | j                  S N)r   r   r   s    r    filepathzDXFDocument.filepath(   s    DM"""r"   returnintc                ,    | j         r| j         j        S dS )N   )r   max_line_numberr%   s    r    r+   zDXFDocument.max_line_number,   s     	$441r"   r   strc                X    || _         |                     t          |                     d S r$   )r   r   r	   )r   r   s     r    loadzDXFDocument.load3   s*     %h//00000r"   r   c                F    || _         t          | j                   | _        d S r$   )r   EntityIndexr   r   s     r    r   zDXFDocument.update7   s!     '66r"   c                4    | j                                         S r$   )r&   absoluter%   s    r    absolute_filepathzDXFDocument.absolute_filepath;   s    }%%'''r"   name
list[Tags]c                6    | j                             |          S r$   )r   get)r   r4   s     r    get_sectionzDXFDocument.get_section>   s    }  &&&r"   handleOptional[Tags]c                H    | j         r| j                             |          S d S r$   )r   r7   r   r9   s     r    
get_entityzDXFDocument.get_entityA   s)     	1$((000tr"   r   entityr   offsetc                T    | j         r | j                             |          |dz  z   S dS )N   r   )r   get_start_line_for_entity)r   r>   r?   s      r    get_line_numberzDXFDocument.get_line_numberF   s6     	!;;FCCfqjP qr"   numberc                H    | j         r| j                             |          S d S r$   )r   get_entity_at_line)r   rD   s     r    rF   zDXFDocument.get_entity_at_lineM   s*     	@$77???tr"   c                6    | j                             |          S r$   )r   next_entityr   r>   s     r    rH   zDXFDocument.next_entityR   s     ,,V444r"   c                6    | j                             |          S r$   )r   previous_entityrI   s     r    rK   zDXFDocument.previous_entityU   s     00888r"   Optional[str]c                6    | j                             |          S r$   )r   
get_handlerI   s     r    rN   zDXFDocument.get_handleX   s     ++F333r"   r$   )r   r   r'   r(   )r   r,   r   r   )r4   r,   r'   r5   r9   r,   r'   r:   r   )r>   r   r?   r(   r'   r(   rD   r(   r'   r:   )r>   r   r'   r:   r'   rL   )__name__
__module____qualname__r!   propertyr&   r+   r.   r   r3   r8   r=   rC   rF   rH   rK   rN    r"   r    r   r      s0       " " " " "  # # X#    X1 1 1 17 7 7 7( ( (' ' ' '   
       
5 5 5 59 9 9 94 4 4 4 4 4r"   r   c                      e Zd Zdd	dZdS )
r   r   tagsr   liner(   c                >    || _         || _        d | _        d | _        d S r$   )r[   start_line_numberprevnext)r   r[   r\   s      r    r!   zIndexEntry.__init__]   s#    	&*,0	,0			r"   NrR   )r[   r   r\   r(   )rU   rV   rW   r!   rY   r"   r    r   r   \   s-        1 1 1 1 1 1 1r"   r   c                  n    e Zd ZddZddZdd
Zedd            ZddZddZ	ddZ
ddZd dZd!dZdS )"r0   r   r   c                    t                      | _        t                      | _        d| _        |                     |           d S Nr   )r   _index_dummy_handle_index_max_line_number_buildr   s     r    r!   zEntityIndex.__init__e   s=     .2VV 4866 %&Hr"   r'   Nonec           	     b   d}d}t                      }t                      }d }|                                D ]}|D ]}t          |t                    s
J d            t	          |          dk    s
J d            	 |                                                                }	n3# t          $ r& d|d}	|	|t          |d                   <   |dz  }Y nw xY wt          ||          }
|||
_
        |
|_        |
||	<   |
}|t	          |          dz  z  }|dz  }|dz
  | _        || _        || _        d S )	Nr*   zexpected class Tagsr   z!empty tags should not be possible*XrA      )r   values
isinstancer   lenrN   upper
ValueErroridr   r_   r`   rf   rd   re   )r   r   r^   dummy_handler   dummy_handle_index
prev_entrysectionr[   r9   
next_entrys              r    rg   zEntityIndex._buildp   sw   .2ff-1VV+/
(( 	# 	#G 3 3!$--DD/DDD-4yy1}}}&I}}}&!__..4466FF! & & &1111F6<&r$q'{{3 A%LLL	& (.?@@
)&0JO&0JO'1V$'
 "SYY]2!!" !2A 5"#5   s   :&B!!-CCr9   r,   boolc                8    |                                 | j        v S r$   )rp   rd   r<   s     r    __contains__zEntityIndex.__contains__   s    ||~~,,r"   r(   c                    | j         S r$   )rf   r%   s    r    r+   zEntityIndex.max_line_number   s    $$r"   r:   c                p    | j                             |                                          }||j        S d S r$   )rd   r7   rp   r[   )r   r9   index_entrys      r    r7   zEntityIndex.get   s1    koofllnn55"##4r"   r>   r   rL   c                    t          |          sd S 	 |                                S # t          $ r0 | j                            t          |d                             cY S w xY wrc   )ro   rN   rq   re   r7   rr   rI   s     r    rN   zEntityIndex.get_handle   sn    6{{ 	4	?$$&&& 	? 	? 	?+//6!9>>>>>	?s   ' 7A! A!c                    |                      |          }|r*| j                            |          }|j        }|r|j        S |S r$   )rN   rd   r7   r`   r[   )r   r>   r9   r}   rw   s        r    rH   zEntityIndex.next_entity   K    (( 	'+//&11K$)J '!&r"   c                    |                      |          }|r*| j                            |          }|j        }|r|j        S |S r$   )rN   rd   r7   r_   r[   )r   r>   r9   r}   ru   s        r    rK   zEntityIndex.previous_entity   r   r"   c                z    |                      |          }|r#| j                            |          }|r|j        S dS rc   )rN   rd   r7   r^   )r   r>   r9   r}   s       r    rB   z%EntityIndex.get_start_line_for_entity   sD    (( 	5+//&11K 5"44qr"   rD   c                n    d }| j                                         D ]}|j        |k    r|c S |j        }|S r$   )rd   rm   r^   r[   )r   rD   r[   r}   s       r    rF   zEntityIndex.get_entity_at_line   sJ    ;--// 	$ 	$K,v55#DDr"   NrP   )r   r   r'   rh   )r9   r,   r'   rx   rO   rQ   )r>   r   r'   rL   )r>   r   r'   r   )r>   r   r'   r(   rS   )rU   rV   rW   r!   rg   rz   rX   r+   r7   rN   rH   rK   rB   rF   rY   r"   r    r0   r0   d   s        	 	 	 	!6 !6 !6 !6F- - - - % % % X%   ? ? ? ?              r"   r0   r>   r   r^   r(   select_line_numberr'   c                    ||z
  }d}d}| D ]F}||k    r|c S t          |t                    r|t          |j                  dz  z  }n|dz  }|dz  }G|S )Nr   rA   r*   )rn   r
   ro   value)r>   r^   r   countlinesrowtags          r    r   r      s~     !22EE
C  E>>JJJc9%% 	S^^a''EEQJEqJr"   r[   r,   c                @    d                     d | D                       S )Nr   c              3  >   K   | ]}|                                 V  d S r$   )r   ).0r   s     r    	<genexpr>zdxfstr.<locals>.<genexpr>   s*      00C3::<<000000r"   )join)r[   s    r    r   r      s#    77004000000r"   c                  `    e Zd ZddZd Zed             Zd Zdd	ZddZ	ddZ
ddZddZdS )r   r'   rh   c                `    t                      | _        d| _        t                      | _        d S rc   )list_historyrd   _time_travelr%   s    r    r!   zEntityHistory.__init__   s&    $(FF(,r"   c                *    t          | j                  S r$   )ro   r   r%   s    r    __len__zEntityHistory.__len__   s    4=!!!r"   c                    | j         S r$   )rd   r%   s    r    indexzEntityHistory.index   s
    {r"   c                x    | j                                          | j                                         d| _        d S rc   )r   clearr   rd   r%   s    r    r   zEntityHistory.clear   s6    !!!r"   r>   r   c                   | j         r8| j                            | j                    | j                                          t	          | j                  }|r| j        d         |u rd S || _        | j                            |           d S N)r   r   extendr   ro   rd   append)r   r>   r   s      r    r   zEntityHistory.append   s     	&M  !2333##%%%DM"" 	}R F**V$$$$$r"   r:   c                ~    d }| j         r3| j        dz
  }|dk    r|                     |          }n| j         d         }|S )Nr*   r   )r   rd   
_time_wrap)r   r>   r   s      r    backzEntityHistory.back  sI    = 	*K!OEzz//q)r"   c                    d }| j         }|r;| j        dz   }|t          |          k     r|                     |          }n|d         }|S )Nr*   r   )r   rd   ro   r   )r   r>   historyr   s       r    forwardzEntityHistory.forward  sS    - 	%K!OEs7||##// r"   c                b    || _         | j        |         }| j                            |           |S r$   )rd   r   r   r   )r   r   r>   s      r    r   zEntityHistory._time_wrap  s1    u%  (((r"   r5   c                *    t          | j                  S r$   )r   r   r%   s    r    contentzEntityHistory.content  s    DM"""r"   Nr'   rh   )r>   r   )r'   r:   )r'   r   )r'   r5   )rU   rV   rW   r!   r   rX   r   r   r   r   r   r   r   rY   r"   r    r   r      s        / / / /
" " "   X  

% 
% 
% 
%   	 	 	 	   # # # # # #r"   r   c                      e Zd ZdZd*dZed+d            Zed,d	            Zd-d.dZd/dZ	d0dZ
d1d2dZd3dZd4dZd4dZd5dZ	 d6d7d!Zd0d"Zd0d#Zd0d$Zd8d(Zd)S )9r   r   entitiesIterable[Tags]c                    t          |          | _        d| _        d| _        d | _        d | _        d| _        t          | j                   | _        d| _	        d| _
        d| _        d| _        d S )Nr   FT)r   r   _current_entity_index_current_tag_index_search_term_search_term_lower	_backwardrx   _end_of_indexcase_insensitivewhole_wordsnumbersregex)r   r   s     r    r!   zSearchIndex.__init__%  sm    $(NN*+"'(+/15!%dm!4!44 $ 


r"   r'   rx   c                    | j         S r$   )r   r%   s    r    is_end_of_indexzSearchIndex.is_end_of_index2  s    !!r"   rL   c                    | j         S r$   )r   r%   s    r    search_termzSearchIndex.search_term6  s      r"   r   r>   r   	tag_indexr(   c                    || _         	 | j                            |          | _        d S # t          $ r |                                  Y d S w xY wr$   )r   r   r   r   rq   reset_cursor)r   r>   r   s      r    set_current_entityzSearchIndex.set_current_entity:  sc    "+	 )-)<)<V)D)DD&&& 	  	  	 	 s   * AAr5   c                v    |                                  \  }}|| _        |r|                     ||           d S d S r$   )current_entityr   r   )r   r   r   r   s       r    update_entitieszSearchIndex.update_entitiesA  sM     $ 3 3 5 5  	;##NE:::::	; 	;r"   tuple[Optional[Tags], int]c                ^    | j         r | j        s| j         | j                 | j        fS | j        S r$   )r   r   r   r   	NOT_FOUNDr%   s    r    r   zSearchIndex.current_entityG  s=    = 	!3 	d89'  ~r"   Fbackwardc                    d| _         d| _        t          | j                  }|r;d| _        |r0|dz
  | _         | j        d         }t          |          dz
  | _        d S d S d| _        d S )Nr   Fr*   r   T)r   r   ro   r   r   )r   r   r   r>   s       r    r   zSearchIndex.reset_cursorO  s    %&""#DM"" 	&!&D :-2QY*r**-f++/''': :
 "&Dr"   tuple[int, int]c                    | j         | j        fS r$   )r   r   r%   s    r    cursorzSearchIndex.cursor\  s    )4+BBBr"   rh   c                    | j         rs| j         | j                 }| j        dz   }|t          |          k    r;| j        dz   }|t          | j                   k     r|| _        d| _        d S d| _        d S || _        d S d S Nr*   r   T)r   r   r   ro   r   )r   r>   r   r   s       r    move_cursor_forwardzSearchIndex.move_cursor_forward_  s    = 	4=)CDF/!3ICKK''#9A=#dm"4"4441=D../D+++)-D&&&*3'''	4 	4r"   c                    | j         r]| j        dz
  }|dk     rD| j        dz
  }|dk    r+|| _        t          | j         |                   dz
  | _        d S d| _        d S || _        d S d S r   )r   r   r   ro   r   )r   r   r   s      r    move_cursor_backwardz SearchIndex.move_cursor_backwardm  s    = 	4/!3I1}}#9A=1$$1=D.DM,7881< +++ *.D&&&*3'''	4 	4r"   termr,   c                j    t          |          | _        | j                                        | _        d S r$   )r,   r   lowerr   )r   r   s     r    reset_search_termzSearchIndex.reset_search_term|  s-    II"&"3"9"9";";r"   Treset_indexc                    |                      |           |r|                     |           t          | j                  r1| j        s*|r|                                 S |                                 S | j        S r$   )r   r   ro   r   r   find_backwardsfind_forwardr   )r   r   r   r   s       r    findzSearchIndex.find  s     	t$$$ 	(h'''t} 	"d&8 	" +**,,,((***>!r"   c                6    |                      | j                  S r$   )_findr   r%   s    r    r   zSearchIndex.find_forward  s    zz$2333r"   c                6    |                      | j                  S r$   )r   r   r%   s    r    r   zSearchIndex.find_backwards  s    zz$3444r"   c                    | j         rQ| j        rJ| j        sC| j        s<|                                 \  }} |              | j        ||          r||fS | j        <| j        S r$   )r   r   r   r   _matchr   )r   move_cursorr>   r   s       r    r   zSearchIndex._find  s    = 	-T. 	-t7I 	-( -$($7$7$9$9!	4;y 12 -!9,,	 ( -
 ~r"   coder   r   c                $   t          |          t          ur| j        sdS t          |          }| j        r| j        |                                }n| j        | j        r-t          fd|	                                D                       S |v S )NFc              3  $   K   | ]
}|k    V  d S r$   rY   )r   wordr   s     r    r   z%SearchIndex._match.<locals>.<genexpr>  s(      EEt{d*EEEEEEr"   )
r   r,   r   r   r   r   r   r   anysplit)r   r   r   r   s      @r    r   zSearchIndex._match  s    D>>$$< uJJE  	,1KKKMMEE+K 	(EEEEu{{}}EEEEEE%''r"   N)r   r   )r'   rx   rT   rR   )r>   r   r   r(   )r   r5   )r'   r   )F)r   rx   )r'   r   r   )r   r,   r'   rh   )FT)r   r,   r   rx   r   rx   r'   r   )r   r(   r   r   r'   rx   )rU   rV   rW   r   r!   rX   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rY   r"   r    r   r   "  s       I    " " " X" ! ! ! X!         ; ; ; ;   & & & & &C C C C4 4 4 44 4 4 4< < < <
 FJ" " " " "4 4 4 45 5 5 5   ( ( ( ( ( (r"   r   N)r>   r   r^   r(   r   r(   r'   r(   )r[   r   r'   r,   )
__future__r   typingr   r   r   r   pathlibr   ezdxf.addons.browser.loaderr	   ezdxf.lldxf.typesr
   r   ezdxf.lldxf.tagsr   ezdxf.eztypesr   __all__r   r   r0   r   r   r   r   rY   r"   r    <module>r      s   # " " " " " 9 9 9 9 9 9 9 9 9 9 9 9       9 9 9 9 9 9 1 1 1 1 1 1 1 1 ! ! ! ! ! ! *))))))  B4 B4 B4 B4 B4 B4 B4 B4J1 1 1 1 1 1 1 1i i i i i i i iX   "1 1 1 1:# :# :# :# :# :# :# :#zJ( J( J( J( J( J( J( J( J( J(r"   