
    AHj                    P    d dl mZ d dlmZ d dlmZ  G d de      Z edd      Zy)    )annotations)
NamedTuple)Offsetc                  L    e Zd ZU dZded<   	 ded<   	 ed	d       Zd
dZddZy)	SelectionzA selected range of lines.zOffset | Nonestartendc                ,    t        ||gd       } | | S )zCreate selection from 2 offsets.

        Args:
            offset1: First offset.
            offset2: Second offset.

        Returns:
            New Selection.
        c                2    | j                   | j                  fS )Nyx)offsets    I/root/tools/cai/cai_env/lib/python3.12/site-packages/textual/selection.py<lambda>z(Selection.from_offsets.<locals>.<lambda>   s    &((FHHAU     )key)sorted)clsoffset1offset2offsetss       r   from_offsetszSelection.from_offsets   s      '7+2UWG}r   c                    |j                         }|sy| j                  d}d}n| j                  j                  \  }}| j                  t	        |      }t	        |d         }n| j                  j                  \  }}t        t	        |      |      }||k(  r||   || S g }||| }t	        |      dk\  rC|^}	}
}|j                  |	|d        |j                  |
       |j                  |d|dz           n||   || S dj                  |      S )zExtract selection from text.

        Args:
            text: Raw text pulled from widget.

        Returns:
            Extracted text.
         Nr         
)	
splitlinesr   	transposer	   lenminappendextendjoin)selftextlines
start_linestart_offsetend_line
end_offset	selectionselected_lines
first_line	mid_lines	last_lines               r   extractzSelection.extract   s$    !::JL'+zz';';$J885zHU2YJ#'88#5#5 Hjs5z8,!$\*==!	z(3~!#0>-JIZ67Y'Y'7a89$\*==yy##r   c                   | \  }}||y||||j                   k  s||j                   kD  ry||j                   k(  r1|j                   |j                   k(  r|j                  |j                  fS ||j                   k(  rd|j                  fS ||j                   k(  r|j                  dfS y|0|.||j                   k(  rd|j                  fS ||j                   kD  ryy|0|.||j                   k(  r|j                  dfS ||j                   kD  ryyy)zGet the selected span in a given line.

        Args:
            y: Offset of the line.

        Returns:
            A tuple of x start and end offset, or None for no selection.
        N)r   r   r   r   r   )r'   r   r   r	   s       r   get_spanzSelection.get_spanE   s    
s=S[577{a#%%iEGG|355 0ww~%CEEz#%%xEGG|ww{"=S_CEEz#%%x355y;5,EGG|ww{"577{r   N)r   r   r   r   returnr   )r(   strr6   r7   )r   intr6   ztuple[int, int] | None)	__name__
__module____qualname____doc____annotations__classmethodr   r3   r5    r   r   r   r      s4    $%	# %$N*r   r   N)
__future__r   typingr   textual.geometryr   r   
SELECT_ALLr?   r   r   <module>rD      s+    "  #g
 gT tT"
r   