
    Og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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     ^/var/www/html/public_html/myphp/venv/lib/python3.12/site-packages/ezdxf/addons/browser/data.py__init__zDXFDocument.__init__   s8     &*V37!KK!     c                ,    t        | j                        S N)r   r   r   s    r   filepathzDXFDocument.filepath(   s    DMM""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Cfqj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-     .2V 486 %&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   s;   .2f-1V+/
( 	#G 3!$-D/DD-4y1}I&II}&!__.446F (.?@
)&0JO&0JO'1V$'
 "SY]2!)3* "-	#2 !2A 5"#5 + " & a 01F6<&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/    kkooflln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    (++//&1K$))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    (++//&1K"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   sH    ;;--/ 	$K,,v5##D	$ 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    	!6F- % %?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      sn     !22EE
C E>Jc9%S^a''EQJE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     0C3::<0s   )join)r[   s    r   r   r      s    7704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    MM  !2!23##%DMM"}}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    ==KK!OE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    --KK!OEs7|#/  !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    DMM""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!%dmm!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)DD& 	 	 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 ##NE: 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    %&""#DMM"!&D-2QY*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DF//!3ICK'#99A=#dmm"441=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    ==//!3I1}#99A=1$1=D.DMM,781< + *.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    zz$2233r!   c                8    | j                  | j                        S r#   )r   r   r$   s    r   r   zSearchIndex.find_backwards  s    zz$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..t7I7I(($($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     Et{d*Es   )
r   rK   r   r   r   r   r   r   anysplit)r   coder   r   s      @r   r   zSearchIndex._match  sw    D>$<<JE  11KKKME++KEu{{}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4J1 1i iX%(>A"1:# :#zJ( J(r!   