
    h8                       S SK Jr  S SKJrJrJrJr  S SKJr  S SK	J
r
  S SKJrJr  S SKJr  \(       a  S SKJr  / SQr " S	 S
5      r " S S5      r " S S5      r        SS jrSS jr " S S5      r " S S5      rg)    )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                      \ rS rSrSSS jjr\S 5       r\SS j5       rSS jrSS jr	S r
SS	 jrSS
 jrSSS jjrSS jrSS jrSS jrSS jrSrg)r      Nc                ~    [        5       U l        S U l        S U l        SU l        U(       a  U R                  U5        g g )N )dictsectionsentity_indexvalid_handlesfilenameupdateselfr   s     K/var/www/html/env/lib/python3.13/site-packages/ezdxf/addons/browser/data.py__init__DXFDocument.__init__   s8     &*V37!KK!     c                ,    [        U R                  5      $ N)r   r   r   s    r    filepathDXFDocument.filepath(   s    DMM""r#   c                R    U R                   (       a  U R                   R                  $ g)N   )r   max_line_numberr&   s    r    r+   DXFDocument.max_line_number,   s     $$444r#   c                D    Xl         U R                  [        U5      5        g r%   )r   r   r	   )r   r   s     r    loadDXFDocument.load3   s     %h/0r#   c                D    Xl         [        U R                   5      U l        g r%   )r   EntityIndexr   r   s     r    r   DXFDocument.update7   s     '6r#   c                6    U R                   R                  5       $ r%   )r'   absoluter&   s    r    absolute_filepathDXFDocument.absolute_filepath;   s    }}%%''r#   c                8    U R                   R                  U5      $ r%   )r   get)r   names     r    get_sectionDXFDocument.get_section>   s    }}  &&r#   c                \    U R                   (       a  U R                   R                  U5      $ g r%   )r   r8   r   handles     r    
get_entityDXFDocument.get_entityA   s%    $$((00r#   c                h    U R                   (       a!  U R                   R                  U5      US-  -   $ g)N   r   )r   get_start_line_for_entity)r   entityoffsets      r    get_line_numberDXFDocument.get_line_numberF   s2    !!;;FCfqjP r#   c                \    U R                   (       a  U R                   R                  U5      $ g r%   )r   get_entity_at_line)r   numbers     r    rI   DXFDocument.get_entity_at_lineM   s%    $$77??r#   c                8    U R                   R                  U5      $ r%   )r   next_entityr   rD   s     r    rM   DXFDocument.next_entityR   s      ,,V44r#   c                8    U R                   R                  U5      $ r%   )r   previous_entityrN   s     r    rQ   DXFDocument.previous_entityU   s      0088r#   c                8    U R                   R                  U5      $ r%   )r   
get_handlerN   s     r    rT   DXFDocument.get_handleX   s      ++F33r#   )r   r   r   r   r%   )r   zOptional[SectionDict]returnint)r   strr   r   )r9   rY   rW   
list[Tags]r>   rY   rW   Optional[Tags]r   )rD   r   rE   rX   rW   rX   rJ   rX   rW   r]   )rD   r   rW   r]   rW   Optional[str])__name__
__module____qualname____firstlineno__r!   propertyr'   r+   r.   r   r5   r:   r?   rF   rI   rM   rQ   rT   __static_attributes__ r#   r    r   r      sa    "  # #  17('

594r#   r   c                  "    \ rS rSrSSS jjrSrg)r   \   c                8    Xl         X l        S U l        S U l        g r%   )tagsstart_line_numberprevnext)r   rl   lines      r    r!   IndexEntry.__init__]   s    	&*,0	,0	r#   )ro   rn   rm   rl   Nr^   )rl   r   rp   rX   )rb   rc   rd   re   r!   rg   rh   r#   r    r   r   \   s    1 1r#   r   c                      \ rS rSrSS jrSS jrSS jr\SS j5       rSS jr	SS jr
SS jrSS	 jrSS
 jrSS jrSrg)r1   d   c                p    [        5       U l        [        5       U l        SU l        U R	                  U5        g Nr   )r   _index_dummy_handle_index_max_line_number_buildr   s     r    r!   EntityIndex.__init__e   s-     .2V 486 %&Hr#   c           	        SnSn[        5       n[        5       nS nUR                  5        H  nU H  n[        U[        5      (       d   S5       e[	        U5      S:  d   S5       e UR                  5       R                  5       n	[        X5      n
Ub  Xjl
        Xl        XU	'   U
nU[	        U5      S-  -  nM     US-  nM     US-
  U l        X@l        XPl        g ! [         a    SUS 3n	X[        US   5      '   US-  n N|f = f)	Nr*   zexpected class Tagsr   z!empty tags should not be possible*XrB      )r   values
isinstancer   lenrT   upper
ValueErroridr   rn   ro   rx   rv   rw   )r   r   rm   dummy_handler   dummy_handle_index
prev_entrysectionrl   r>   
next_entrys              r    ry   EntityIndex._buildp   s$   .2f-1V+/
(G!$--D/DD-4y1}I&II}&!__.446F (@
)&0O&0O'1V$'
 "SY]2!)  * "- )2 !2A 5"#5 + " & a 01F6<r$q'{3 A%L	&s   &C%D Dc                <    UR                  5       U R                  ;   $ r%   )r   rv   r=   s     r    __contains__EntityIndex.__contains__   s    ||~,,r#   c                    U R                   $ r%   )rx   r&   s    r    r+   EntityIndex.max_line_number   s    $$$r#   c                t    U R                   R                  UR                  5       5      nUb  UR                  $ g r%   )rv   r8   r   rl   )r   r>   index_entrys      r    r8   EntityIndex.get   s/    kkooflln5"###r#   c                    [        U5      (       d  g  UR                  5       $ ! [         a*    U R                  R	                  [        US   5      5      s $ f = fru   )r   rT   r   rw   r8   r   rN   s     r    rT   EntityIndex.get_handle   sP    6{{	?$$&& 	?++//6!9>>	?s   # 1AAc                    U R                  U5      nU(       a:  U R                  R                  U5      nUR                  nU(       a  UR                  $ U$ r%   )rT   rv   r8   ro   rl   )r   rD   r>   r   r   s        r    rM   EntityIndex.next_entity   B    (++//&1K$))J!&r#   c                    U R                  U5      nU(       a:  U R                  R                  U5      nUR                  nU(       a  UR                  $ U$ r%   )rT   rv   r8   rn   rl   )r   rD   r>   r   r   s        r    rQ   EntityIndex.previous_entity   r   r#   c                    U R                  U5      nU(       a.  U R                  R                  U5      nU(       a  UR                  $ gru   )rT   rv   r8   rm   )r   rD   r>   r   s       r    rC   %EntityIndex.get_start_line_for_entity   s7    (++//&1K"444r#   c                    S nU R                   R                  5        H#  nUR                  U:  a  Us  $ UR                  nM%     U$ r%   )rv   r   rm   rl   )r   rJ   rl   r   s       r    rI   EntityIndex.get_entity_at_line   sC    ;;--/K,,v5##D 0 r#   )rw   rv   rx   NrZ   )r   r   rW   None)r>   rY   rW   boolrV   r\   )rD   r   rW   ra   )rD   r   rW   r   )rD   r   rW   rX   r_   )rb   rc   rd   re   r!   ry   r   rf   r+   r8   rT   rM   rQ   rC   rI   rg   rh   r#   r    r1   r1   d   sD    	!6F- % %?r#   r1   c                    X!-
  nSnSnU  HG  nXC:  a  Us  $ [        U[        5      (       a  U[        UR                  5      S-  -  nOUS-  nUS-  nMI     U$ )Nr   rB   r*   )r   r
   r   value)rD   rm   select_line_numbercountlinesrowtags          r    r   r      sg     2EE
C>Jc9%%S^a''EQJEq  Jr#   c                2    SR                  S U  5       5      $ )Nr   c              3  @   #    U  H  oR                  5       v   M     g 7fr%   )r   ).0r   s     r    	<genexpr>dxfstr.<locals>.<genexpr>   s     04C::<<4s   )join)rl   s    r    r   r      s    7704000r#   c                  l    \ rS rSrSS jrS r\S 5       rS rSS jr	SS jr
SS jrSS	 jrSS
 jrSrg)r      c                N    [        5       U l        SU l        [        5       U l        g ru   )list_historyrv   _time_travelr&   s    r    r!   EntityHistory.__init__   s    $(F(,r#   c                ,    [        U R                  5      $ r%   )r   r   r&   s    r    __len__EntityHistory.__len__   s    4==!!r#   c                    U R                   $ r%   )rv   r&   s    r    indexEntityHistory.index   s    {{r#   c                z    U R                   R                  5         U R                  R                  5         SU l        g ru   )r   clearr   rv   r&   s    r    r   EntityHistory.clear   s+    !r#   c                D   U R                   (       a?  U R                  R                  U R                   5        U R                   R                  5         [	        U R                  5      nU(       a  U R                  S   UL a  g X l        U R                  R                  U5        g N)r   r   extendr   r   rv   append)r   rD   r   s      r    r   EntityHistory.append   sq    MM  !2!23##%DMM"}}R F*V$r#   c                    S nU R                   (       a7  U R                  S-
  nUS:  a  U R                  U5      nU$ U R                   S   nU$ )Nr*   r   )r   rv   
_time_wrap)r   rD   r   s      r    backEntityHistory.back  sL    ==KK!OEz/  q)r#   c                    S nU R                   nU(       a6  U R                  S-   nU[        U5      :  a  U R                  U5      nU$ US   nU$ )Nr*   r   )r   rv   r   r   )r   rD   historyr   s       r    forwardEntityHistory.forward  sQ    --KK!OEs7|#/  !r#   c                f    Xl         U R                  U   nU R                  R                  U5        U$ r%   )rv   r   r   r   )r   r   rD   s      r    r   EntityHistory._time_wrap  s.    u%  (r#   c                ,    [        U R                  5      $ r%   )r   r   r&   s    r    contentEntityHistory.content  s    DMM""r#   )r   rv   r   NrW   r   )rD   r   )rW   r]   )rW   r   )rW   r[   )rb   rc   rd   re   r!   r   rf   r   r   r   r   r   r   r   rg   rh   r#   r    r   r      s>    /
"  

%	#r#   r   c                      \ rS rSrSrSS jr\SS j5       r\SS j5       rSSS jjr	SS jr
SS jrSSS	 jjrSS
 jrSS jrSS jrS S jr S!       S"S jjrSS jrSS jrSS jrS#S jrSrg)$r   i"  r   c                    [        U5      U l        SU l        SU l        S U l        S U l        SU l        [        U R                  5      (       + U l        SU l	        SU l
        SU l        SU l        g )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!   SearchIndex.__init__%  sf    $(N*+"'(+/15!%dmm!44 $ 
r#   c                    U R                   $ r%   )r   r&   s    r    is_end_of_indexSearchIndex.is_end_of_index2  s    !!!r#   c                    U R                   $ r%   )r   r&   s    r    search_termSearchIndex.search_term6  s       r#   c                    X l          U R                  R                  U5      U l        g ! [         a    U R                  5          g f = fr%   )r   r   r   r   r   reset_cursor)r   rD   	tag_indexs      r    set_current_entitySearchIndex.set_current_entity:  s?    "+	 )-)<)<V)DD& 	 	 s    ) AAc                f    U R                  5       u  p#Xl        U(       a  U R                  X#5        g g r%   )current_entityr   r   )r   r   r   r   s       r    update_entitiesSearchIndex.update_entitiesA  s.     $ 3 3 5 ##N: r#   c                    U R                   (       a6  U R                  (       d%  U R                   U R                     U R                  4$ U R                  $ r%   )r   r   r   r   	NOT_FOUNDr&   s    r    r   SearchIndex.current_entityG  sB    ==!3!3d889''  ~~r#   c                    SU l         SU l        [        U R                  5      nU(       a<  SU l        U(       a-  US-
  U l         U R                  S   n[        U5      S-
  U l        g g SU l        g )Nr   Fr*   r   T)r   r   r   r   r   )r   backwardr   rD   s       r    r   SearchIndex.reset_cursorO  sg    %&""#DMM"!&D-2QY*r**-f+/' 
 "&Dr#   c                2    U R                   U R                  4$ r%   )r   r   r&   s    r    cursorSearchIndex.cursor\  s    ))4+B+BBBr#   c                   U R                   (       a|  U R                   U R                     nU R                  S-   nU[        U5      :  a>  U R                  S-   nU[        U R                   5      :  a  X0l        SU l        g SU l        g X l        g g Nr*   r   T)r   r   r   r   r   )r   rD   r   r   s       r    move_cursor_forwardSearchIndex.move_cursor_forward_  s{    ====)C)CDF//!3ICK'#99A=#dmm"441=../D+)-D&*3' r#   c                    U R                   (       a`  U R                  S-
  nUS:  aD  U R                  S-
  nUS:  a'  X l        [        U R                   U   5      S-
  U l        g SU l        g Xl        g g r   )r   r   r   r   r   )r   r   r   s      r    move_cursor_backward SearchIndex.move_cursor_backwardm  sq    ==//!3I1}#99A=1$1=.DMM,781< + *.D&*3' r#   c                b    [        U5      U l        U R                  R                  5       U l        g r%   )rY   r   lowerr   )r   terms     r    reset_search_termSearchIndex.reset_search_term|  s%    I"&"3"3"9"9";r#   c                   U R                  U5        U(       a  U R                  U5        [        U R                  5      (       a8  U R                  (       d'  U(       a  U R                  5       $ U R                  5       $ U R                  $ r%   )r  r   r   r   r   find_backwardsfind_forwardr   )r   r   r   reset_indexs       r    findSearchIndex.find  se     	t$h't}}d&8&8**,,((**>>!r#   c                8    U R                  U R                  5      $ r%   )_findr   r&   s    r    r  SearchIndex.find_forward  s    zz$2233r#   c                8    U R                  U R                  5      $ r%   )r
  r   r&   s    r    r  SearchIndex.find_backwards  s    zz$3344r#   c                ,   U R                   (       ax  U R                  (       ag  U R                  (       dV  U R                  (       dE  U R                  5       u  p#U" 5         U R                  " X#   6 (       a  X#4$ U R                  (       d  ME  U R
                  $ r%   )r   r   r   r   _matchr   )r   move_cursorrD   r   s       r    r
  SearchIndex._find  sj    ==T..t7I7I(($($7$7$9!;; 12!,,	 (((
 ~~r#   c                H  ^ [        U5      [        La  U R                  (       d  g[        U5      nU R                  (       a  U R                  mUR                  5       nOU R                  mU R                  (       a#  [        U4S jUR                  5        5       5      $ TU;   $ )NFc              3  .   >#    U  H
  nTU:H  v   M     g 7fr%   rh   )r   wordr   s     r    r   %SearchIndex._match.<locals>.<genexpr>  s     E}t{d*}s   )
r   rY   r   r   r   r   r   r   anysplit)r   coder   r   s      @r    r  SearchIndex._match  sw    D>$<<JE  11KKKME++KEu{{}EEE%''r#   )r   r   r   r   r   r   r   r   r   r   r   N)r   zIterable[Tags])rW   r   r`   r^   )rD   r   r   rX   )r   r[   )rW   tuple[Optional[Tags], int])F)r   r   )rW   ztuple[int, int]r   )r   rY   rW   r   )FT)r   rY   r   r   r  r   rW   r  )r  rX   r   r   rW   r   )rb   rc   rd   re   r   r!   rf   r   r   r   r   r   r   r   r   r   r  r  r  r  r
  r  rg   rh   r#   r    r   r   "  s    I " " ! ! ;&C44<
 FJ""#'">B"	#"45(r#   r   N)rD   r   rm   rX   r   rX   rW   rX   )rl   r   rW   rY   )
__future__r   typingr   r   r   r   pathlibr   ezdxf.addons.browser.loaderr	   ezdxf.lldxf.typesr
   r   ezdxf.lldxf.tagsr   ezdxf.eztypesr   __all__r   r   r1   r   r   r   r   rh   r#   r    <module>r#     s    # 9 9  9 1 !)B4 B4J1 1i iX%(>A"1:# :#zJ( J(r#   