Ë
    £èh+:  ã                  óø   — 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y)é    )Ú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y)r   Nc                ót   — t        «       | _        d | _        d | _        d| _        |r| j                  |«       y y )NÚ )ÚdictÚsectionsÚentity_indexÚvalid_handlesÚfilenameÚupdate©Úselfr   s     ú9lib/python3.12/site-packages/ezdxf/addons/browser/data.pyÚ__init__zDXFDocument.__init__   s8   € ô &*£VˆŒØ37ˆÔØ!ˆÔØˆŒÙØ�K‰K˜Õ!ð ó    c                ó,   — t        | j                  «      S ©N)r   r   ©r   s    r   ÚfilepathzDXFDocument.filepath(   s   € ä�D—M‘MÓ"Ð"r!   c                óH   — | j                   r| j                   j                  S y)Né   )r   Úmax_line_numberr$   s    r   r(   zDXFDocument.max_line_number,   s    € à×ÒØ×$Ñ$×4Ñ4Ð4àr!   c                óF   — || _         | j                  t        |«      «       y r#   )r   r   r	   )r   r   s     r   ÚloadzDXFDocument.load3   s   € Ø ˆŒØ�‰Ô% hÓ/Õ0r!   c                óF   — || _         t        | j                   «      | _        y r#   )r   ÚEntityIndexr   r   s     r   r   zDXFDocument.update7   s   € Ø ˆŒÜ'¨¯©Ó6ˆÕr!   c                ó6   — | j                   j                  «       S r#   )r%   Úabsoluter$   s    r   Úabsolute_filepathzDXFDocument.absolute_filepath;   s   € Ø�}‰}×%Ñ%Ó'Ð'r!   c                ó8   — | j                   j                  |«      S r#   )r   Úget)r   Únames     r   Úget_sectionzDXFDocument.get_section>   s   € Ø�}‰}× Ñ  Ó&Ð&r!   c                óR   — | j                   r| j                   j                  |«      S y r#   )r   r1   ©r   Úhandles     r   Ú
get_entityzDXFDocument.get_entityA   s%   € Ø×ÒØ×$Ñ$×(Ñ(¨Ó0Ð0Ør!   c                ó^   — | j                   r!| j                   j                  |«      |dz  z   S y)Né   r   )r   Úget_start_line_for_entity)r   ÚentityÚoffsets      r   Úget_line_numberzDXFDocument.get_line_numberF   s2   € Ø×Òà×!Ñ!×;Ñ;¸FÓCÀfÈqÁjÑPðð r!   c                óR   — | j                   r| j                   j                  |«      S y r#   )r   Úget_entity_at_line)r   Únumbers     r   r?   zDXFDocument.get_entity_at_lineM   s%   € Ø×ÒØ×$Ñ$×7Ñ7¸Ó?Ð?Ør!   c                ó8   — | j                   j                  |«      S r#   )r   Únext_entity©r   r;   s     r   rB   zDXFDocument.next_entityR   s   € Ø× Ñ ×,Ñ,¨VÓ4Ð4r!   c                ó8   — | j                   j                  |«      S r#   )r   Úprevious_entityrC   s     r   rE   zDXFDocument.previous_entityU   s   € Ø× Ñ ×0Ñ0°Ó8Ð8r!   c                ó8   — | j                   j                  |«      S r#   )r   Ú
get_handlerC   s     r   rG   zDXFDocument.get_handleX   s   € Ø× Ñ ×+Ñ+¨FÓ3Ð3r!   r#   )r   zOptional[SectionDict]©ÚreturnÚint)r   Ústr©r   r   )r2   rK   rI   ú
list[Tags]©r6   rK   rI   úOptional[Tags]©r   )r;   r   r<   rJ   rI   rJ   ©r@   rJ   rI   rO   )r;   r   rI   rO   ©rI   úOptional[str])Ú__name__Ú
__module__Ú__qualname__r    Úpropertyr%   r(   r*   r   r/   r3   r7   r=   r?   rB   rE   rG   © r!   r   r   r      sa   „ ô"ð  ñ#ó ð#ð òó ðó1ó7ò(ó'óô
óó
5ó9ô4r!   r   c                  ó   — e Zd Zddd„Zy)r   c                ó<   — || _         || _        d | _        d | _        y r#   )ÚtagsÚstart_line_numberÚprevÚnext)r   r[   Úlines      r   r    zIndexEntry.__init__]   s   € ØˆŒ	Ø&*ˆÔØ,0ˆŒ	Ø,0ˆ�	r!   NrP   )r[   r   r_   rJ   )rT   rU   rV   r    rX   r!   r   r   r   \   s   „ õ1r!   r   c                  óf   — 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y)r,   c                óp   — t        «       | _        t        «       | _        d| _        | j	                  |«       y ©Nr   )r   Ú_indexÚ_dummy_handle_indexÚ_max_line_numberÚ_buildr   s     r   r    zEntityIndex.__init__e   s-   € ô .2«VˆŒô 48³6ˆÔ Ø%&ˆÔØ�‰�HÕr!   c           	     óþ  — d}d}t        «       }t        «       }d }|j                  «       D ]�  }|D ]�  }t        |t        «      sJ d«       ‚t	        |«      dkD  sJ d«       ‚	 |j                  «       j                  «       }	t        ||«      }
|�||
_
        |
|_        |
||	<   |
}|t	        |«      dz  z  }Œƒ |dz  }Œ� |dz
  | _        || _        || _        y # t        $ r d|d›�}	|	|t        |d   «      <   |dz  }Y Œ}w xY w)	Nr'   zexpected class Tagsr   z!empty tags should not be possibleÚ*ÚXr9   é   )r   ÚvaluesÚ
isinstancer   ÚlenrG   ÚupperÚ
ValueErrorÚidr   r]   r^   re   rc   rd   )r   r   r\   Údummy_handler   Údummy_handle_indexÚ
prev_entryÚsectionr[   r6   Ú
next_entrys              r   rf   zEntityIndex._buildp   s1  € ØÐØˆÜ.2«fˆÜ-1«VÐØ+/ˆ
Ø—‘Ö(ˆGÛ�Ü! $¬Ô-ÐDÐ/DÓDÐ-Ü˜4“y 1’}ÐIÐ&IÓI�}ð&Ø!Ÿ_™_Ó.×4Ñ4Ó6�Fô (¨Ð.?Ó@�
ØÐ)Ø&0�J”OØ&0�J”OØ'1�˜VÑ$Ø'�
ð "¤S¨£Y°¡]Ñ2Ñ!ð)  ð*  Ñ"Ñð- )ð2 !2°AÑ 5ˆÔØ"ˆŒØ#5ˆÕ øô+ "ò &Ø  ¨aÐ 0Ð1�Fà6<Ð&¤r¨$¨q©'£{Ñ3Ø  AÑ%’Lð	&ús   Á CÃ%C<Ã;C<c                ó:   — |j                  «       | j                  v S r#   )rn   rc   r5   s     r   Ú__contains__zEntityIndex.__contains__“   s   € Ø�|‰|‹~ §¡Ð,Ð,r!   c                ó   — | j                   S r#   )re   r$   s    r   r(   zEntityIndex.max_line_number–   s   € à×$Ñ$Ð$r!   c                ór   — | j                   j                  |j                  «       «      }|�|j                  S y r#   )rc   r1   rn   r[   )r   r6   Úindex_entrys      r   r1   zEntityIndex.getš   s/   € Ø—k‘k—o‘o f§l¡l£nÓ5ˆØÐ"Ø×#Ñ#Ð#àr!   c                ó¨   — t        |«      sy 	 |j                  «       S # t        $ r* | j                  j	                  t        |d   «      «      cY S w xY wrb   )rm   rG   ro   rd   r1   rp   rC   s     r   rG   zEntityIndex.get_handle¡   sN   € Ü�6Œ{Øð	?Ø×$Ñ$Ó&Ð&øÜò 	?à×+Ñ+×/Ñ/´°6¸!±9³Ó>Ò>ð	?ús   Ž ž0AÁAc                ó–   — | j                  |«      }|r5| j                  j                  |«      }|j                  }|r|j                  S |S r#   )rG   rc   r1   r^   r[   )r   r;   r6   rz   ru   s        r   rB   zEntityIndex.next_entity«   óB   € Ø—‘ Ó(ˆÙØŸ+™+Ÿ/™/¨&Ó1ˆKØ$×)Ñ)ˆJáØ!—‘Ð&Øˆr!   c                ó–   — | j                  |«      }|r5| j                  j                  |«      }|j                  }|r|j                  S |S r#   )rG   rc   r1   r]   r[   )r   r;   r6   rz   rs   s        r   rE   zEntityIndex.previous_entityµ   r}   r!   c                ó|   — | j                  |«      }|r)| j                  j                  |«      }|r|j                  S yrb   )rG   rc   r1   r\   )r   r;   r6   rz   s       r   r:   z%EntityIndex.get_start_line_for_entity¿   s7   € Ø—‘ Ó(ˆÙØŸ+™+Ÿ/™/¨&Ó1ˆKÙØ"×4Ñ4Ð4Ør!   c                ó†   — d }| j                   j                  «       D ]!  }|j                  |kD  r|c S |j                  }Œ# |S r#   )rc   rk   r\   r[   )r   r@   r[   rz   s       r   r?   zEntityIndex.get_entity_at_lineÇ   sC   € ØˆØŸ;™;×-Ñ-Ö/ˆKØ×,Ñ,¨vÒ5Ø’Ø×#Ñ#‰Dð 0ð ˆr!   NrL   )r   r   rI   ÚNone)r6   rK   rI   ÚboolrH   rN   )r;   r   rI   rS   )r;   r   rI   r   )r;   r   rI   rJ   rQ   )rT   rU   rV   r    rf   rw   rW   r(   r1   rG   rB   rE   r:   r?   rX   r!   r   r,   r,   d   sD   „ ó	ó!6óF-ð ò%ó ð%óó?óóóôr!   r,   c                ó¤   — ||z
  }d}d}| D ]A  }||k\  r|c S t        |t        «      r|t        |j                  «      dz  z  }n|dz  }|dz  }ŒC |S )Nr   r9   r'   )rl   r
   rm   Úvalue)r;   r\   Úselect_line_numberÚcountÚlinesÚrowÚtags          r   r   r   Ð   si   € ð Ð!2Ñ2€EØ€EØ
€CÛˆØ�EŠ>ØŠJÜ�cœ9Ô%Ø”S˜Ÿ™“^ aÑ'Ñ'‰Eà�Q‰JˆEØˆq‰‰ð ð €Jr!   c                ó2   — dj                  d„ | D «       «      S )Nr   c              3  ó<   K  — | ]  }|j                  «       –— Œ y ­wr#   )r   )Ú.0r‰   s     r   Ú	<genexpr>zdxfstr.<locals>.<genexpr>â   s   è ø€ Ð0©4 C�3—:‘:—<©4ùs   ‚)Újoin)r[   s    r   r   r   á   s   € Ø�7‰7Ñ0©4Ó0Ó0Ð0r!   c                  óX   — 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y
)r   c                óN   — t        «       | _        d| _        t        «       | _        y rb   )ÚlistÚ_historyrc   Ú_time_travelr$   s    r   r    zEntityHistory.__init__æ   s   € Ü$(£FˆŒØˆŒÜ(,«ˆÕr!   c                ó,   — t        | j                  «      S r#   )rm   r’   r$   s    r   Ú__len__zEntityHistory.__len__ë   s   € Ü�4—=‘=Ó!Ð!r!   c                ó   — | j                   S r#   )rc   r$   s    r   ÚindexzEntityHistory.indexî   s   € à�{‰{Ðr!   c                óz   — | j                   j                  «        | j                  j                  «        d| _        y rb   )r’   Úclearr“   rc   r$   s    r   r™   zEntityHistory.clearò   s+   € Ø�‰×ÑÔØ×Ñ×ÑÔ!Øˆ�r!   c                ó0  — | j                   r?| j                  j                  | j                   «       | j                   j                  «        t	        | j                  «      }|r| j                  d   |u ry || _        | j                  j                  |«       y ©Néÿÿÿÿ)r“   r’   Úextendr™   rm   rc   Úappend)r   r;   r†   s      r   rž   zEntityHistory.append÷   ss   € Ø×ÒØ�M‰M× Ñ  ×!2Ñ!2Ô3Ø×Ñ×#Ñ#Ô%Ü�D—M‘MÓ"ˆÙà�}‰}˜RÑ  FÑ*ØØˆŒØ�‰×Ñ˜VÕ$r!   c                óŽ   — d }| j                   r6| j                  dz
  }|dk\  r| j                  |«      }|S | j                   d   }|S )Nr'   r   )r’   rc   Ú
_time_wrap)r   r;   r—   s      r   ÚbackzEntityHistory.back  sL   € ØˆØ�=Š=Ø—K‘K !‘OˆEØ˜ŠzØŸ™¨Ó/�ð ˆð Ÿ™ qÑ)�Øˆr!   c                ó�   — d }| j                   }|r5| j                  dz   }|t        |«      k  r| j                  |«      }|S |d   }|S )Nr'   rœ   )r’   rc   rm   r    )r   r;   Úhistoryr—   s       r   ÚforwardzEntityHistory.forward  sQ   € ØˆØ—-‘-ˆÙØ—K‘K !‘OˆEØ”s˜7“|Ò#ØŸ™¨Ó/�ð ˆð ! ™�Øˆr!   c                óh   — || _         | j                  |   }| j                  j                  |«       |S r#   )rc   r’   r“   rž   )r   r—   r;   s      r   r    zEntityHistory._time_wrap  s0   € ØˆŒØ—‘˜uÑ%ˆØ×Ñ× Ñ  Ô(Øˆr!   c                ó,   — t        | j                  «      S r#   )r‘   r’   r$   s    r   ÚcontentzEntityHistory.content  s   € Ü�D—M‘MÓ"Ð"r!   N©rI   r�   )r;   r   )rI   rO   )rI   r   )rI   rM   )rT   rU   rV   r    r•   rW   r—   r™   rž   r¡   r¤   r    r§   rX   r!   r   r   r   å   s>   „ ó/ò
"ð ñó ðòó

%óó	óô#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	dd„Z
ddd„Zdd	„Zdd
„Zdd„Zdd„Z	 d	 	 	 	 	 	 	 d d„Zdd„Zdd„Zdd„Zd!d„Zy)"r   r›   c                óØ   — t        |«      | _        d| _        d| _        d | _        d | _        d| _        t        | j                  «       | _        d| _	        d| _
        d| _        d| _        y )Nr   FT)r‘   ÚentitiesÚ_current_entity_indexÚ_current_tag_indexÚ_search_termÚ_search_term_lowerÚ	_backwardr‚   Ú_end_of_indexÚcase_insensitiveÚwhole_wordsÚnumbersÚregex)r   r«   s     r   r    zSearchIndex.__init__%  sf   € Ü$(¨£NˆŒØ*+ˆÔ"Ø'(ˆÔØ+/ˆÔØ15ˆÔØˆŒÜ!% d§m¡mÓ!4Ð4ˆÔØ $ˆÔØ ˆÔØˆŒØˆ�
r!   c                ó   — | j                   S r#   )r±   r$   s    r   Úis_end_of_indexzSearchIndex.is_end_of_index2  s   € à×!Ñ!Ð!r!   c                ó   — | j                   S r#   )r®   r$   s    r   Úsearch_termzSearchIndex.search_term6  s   € à× Ñ Ð r!   c                ó’   — || _         	 | j                  j                  |«      | _        y # t        $ r | j                  «        Y y w xY wr#   )r­   r«   r—   r¬   ro   Úreset_cursor)r   r;   Ú	tag_indexs      r   Úset_current_entityzSearchIndex.set_current_entity:  sA   € Ø"+ˆÔð	 Ø)-¯©×)<Ñ)<¸VÓ)DˆDÕ&øÜò 	 Ø×ÑÖð	 ús   ‰ * ªAÁAc                ób   — | j                  «       \  }}|| _        |r| j                  ||«       y y r#   )Úcurrent_entityr«   r½   )r   r«   r¿   r—   s       r   Úupdate_entitieszSearchIndex.update_entitiesA  s4   € Ø $× 3Ñ 3Ó 5Ñˆ˜Ø ˆŒÙØ×#Ñ# N°EÕ:ð r!   c                ó”   — | j                   r1| j                  s%| j                   | j                     | j                  fS | j                  S r#   )r«   r±   r¬   r­   Ú	NOT_FOUNDr$   s    r   r¿   zSearchIndex.current_entityG  sB   € Ø�=Š= ×!3Ò!3à—‘˜d×8Ñ8Ñ9Ø×'Ñ'ðð ð �~‰~Ðr!   c                óÊ   — d| _         d| _        t        | j                  «      }|r7d| _        |r-|dz
  | _         | j                  d   }t        |«      dz
  | _        y y d| _        y )Nr   Fr'   rœ   T)r¬   r­   rm   r«   r±   )r   Úbackwardr†   r;   s       r   r»   zSearchIndex.reset_cursorO  sg   € Ø%&ˆÔ"Ø"#ˆÔÜ�D—M‘MÓ"ˆÙØ!&ˆDÔÙØ-2°Q©Y�Ô*ØŸ™ rÑ*�Ü*-¨f«+¸©/�Õ'ð ð
 "&ˆDÕr!   c                ó2   — | j                   | j                  fS r#   )r¬   r­   r$   s    r   ÚcursorzSearchIndex.cursor\  s   € Ø×)Ñ)¨4×+BÑ+BÐBÐBr!   c                ó  — | j                   r|| j                   | j                     }| j                  dz   }|t        |«      k\  r>| j                  dz   }|t        | j                   «      k  r|| _        d| _        y d| _        y || _        y y ©Nr'   r   T)r«   r¬   r­   rm   r±   )r   r;   r¼   r   s       r   Úmove_cursor_forwardzSearchIndex.move_cursor_forward_  s   € Ø�=Š=ØŸ=™=¨×)CÑ)CÑDˆFØ×/Ñ/°!Ñ3ˆIØœC ›KÒ'Ø#×9Ñ9¸AÑ=�Ø¤# d§m¡mÓ"4Ò4Ø1=�DÔ.Ø./�DÕ+à)-�DÕ&à*3�Õ'ð r!   c                óÜ   — | j                   r`| j                  dz
  }|dk  rD| j                  dz
  }|dk\  r(|| _        t        | j                   |   «      dz
  | _        y d| _        y || _        y y rÈ   )r«   r­   r¬   rm   r±   )r   r¼   r   s      r   Úmove_cursor_backwardz SearchIndex.move_cursor_backwardm  su   € Ø�=Š=Ø×/Ñ/°!Ñ3ˆIØ˜1Š}Ø#×9Ñ9¸AÑ=�Ø 1Ò$Ø1=�DÔ.ä˜DŸM™M¨,Ñ7Ó8¸1Ñ<ð Õ+ð *.�DÕ&à*3�Õ'ð r!   c                ób   — t        |«      | _        | j                  j                  «       | _        y r#   )rK   r®   Úlowerr¯   )r   Úterms     r   Úreset_search_termzSearchIndex.reset_search_term|  s%   € Ü ›IˆÔØ"&×"3Ñ"3×"9Ñ"9Ó";ˆÕr!   c                óè   — | j                  |«       |r| j                  |«       t        | j                  «      r.| j                  s"|r| j                  «       S | j                  «       S | j                  S r#   )rÏ   r»   rm   r«   r±   Úfind_backwardsÚfind_forwardrÂ   )r   rÎ   rÄ   Úreset_indexs       r   ÚfindzSearchIndex.find€  sb   € ð 	×Ñ˜tÔ$ÙØ×Ñ˜hÔ'Üˆt�}‰}Ô d×&8Ò&8ÙØ×*Ñ*Ó,Ð,à×(Ñ(Ó*Ð*à—>‘>Ð!r!   c                ó8   — | j                  | j                  «      S r#   )Ú_findrÉ   r$   s    r   rÒ   zSearchIndex.find_forwardŽ  s   € Ø�z‰z˜$×2Ñ2Ó3Ð3r!   c                ó8   — | j                  | j                  «      S r#   )rÖ   rË   r$   s    r   rÑ   zSearchIndex.find_backwards‘  s   € Ø�z‰z˜$×3Ñ3Ó4Ð4r!   c                óô   — | j                   ra| j                  rU| j                  sI| j                  s=| j                  «       \  }} |«         | j                  ||   Ž r||fS | j                  sŒ=| j
                  S r#   )r«   r®   r±   r¿   Ú_matchrÂ   )r   Úmove_cursorr;   r¼   s       r   rÖ   zSearchIndex._find”  so   € Ø�=Š=˜T×.Ò.°t×7IÒ7IØ×(Ò(Ø$(×$7Ñ$7Ó$9Ñ!�˜	Ù”Ø�4—;‘;  yÑ 1Ñ2Ø! 9Ð,Ð,ð	 ×(Ó(ð
 �~‰~Ðr!   c                ó$  ‡— t        |«      t        ur| j                  syt        |«      }| j                  r| j                  Š|j                  «       }n| j                  Š| j                  r"t        ˆfd„|j                  «       D «       «      S ‰|v S )NFc              3  ó(   •K  — | ]	  }‰|k(  –— Œ y ­wr#   rX   )rŒ   Úwordr¹   s     €r   r�   z%SearchIndex._match.<locals>.<genexpr>ª  s   øè ø€ ÐE±}¨t�{ dÕ*±}ùs   ƒ)
r   rK   r´   r²   r¯   rÍ   r®   r³   ÚanyÚsplit)r   Úcoder„   r¹   s      @r   rÙ   zSearchIndex._match�  sw   ø€ Ü�D‹>¤Ñ$Ø—<’<ØÜ˜“JˆEà× Ò Ø×1Ñ1ˆKØ—K‘K“M‰Eà×+Ñ+ˆKà×ÒÜÓE°u·{±{´}ÓEÓEÐEà %Ð'Ð'r!   N)r«   zIterable[Tags])rI   r‚   rR   rP   )r;   r   r¼   rJ   )r«   rM   )rI   útuple[Optional[Tags], int])F)rÄ   r‚   )rI   ztuple[int, int]r¨   )rÎ   rK   rI   r�   )FT)rÎ   rK   rÄ   r‚   rÓ   r‚   rI   rá   )rà   rJ   r„   r   rI   r‚   )rT   rU   rV   rÂ   r    rW   r·   r¹   r½   rÀ   r¿   r»   rÆ   rÉ   rË   rÏ   rÔ   rÒ   rÑ   rÖ   rÙ   rX   r!   r   r   r   "  s�   „ Ø€Ióð ò"ó ð"ð ò!ó ð!ô ó;óô&óCó4ó4ó<ð
 FJð"Øð"Ø#'ð"Ø>Bð"à	#ó"ó4ó5óô(r!   r   N)r;   r   r\   rJ   r…   rJ   rI   rJ   )r[   r   rI   rK   )Ú
__future__r   Útypingr   r   r   r   Úpathlibr   Úezdxf.addons.browser.loaderr	   Úezdxf.lldxf.typesr
   r   Úezdxf.lldxf.tagsr   Úezdxf.eztypesr   Ú__all__r   r   r,   r   r   r   r   rX   r!   r   Ú<module>rê      sŽ   ðõ #ß 9Ó 9Ý Ý 9ß 1Ý !áÝ)ò€÷B4ñ B4÷J1ñ 1÷iñ iðXØðØ%(ðØ>Aðàóó"1÷:#ñ :#÷zJ(ò J(r!   