Ë
    @¥'h¯  ã                   óB   — d dl Z d dlmZmZmZ d dlmZ  G d„ de«      Zy)é    N)ÚAnyÚListÚOptional)ÚRecursiveCharacterTextSplitterc                   óf   ‡ — e Zd ZdZ	 	 	 ddeee      dedededdf
ˆ fd„Z	d	edee   fˆ fd
„Z
ˆ xZS )ÚJSFrameworkTextSplitteral  Text splitter that handles React (JSX), Vue, and Svelte code.

    This splitter extends RecursiveCharacterTextSplitter to handle
    React (JSX), Vue, and Svelte code by:
    1. Detecting and extracting custom component tags from the text
    2. Using those tags as additional separators along with standard JS syntax

    The splitter combines:
    - Custom component tags as separators (e.g. <Component, <div)
    - JavaScript syntax elements (function, const, if, etc)
    - Standard text splitting on newlines

    This allows chunks to break at natural boundaries in
    React, Vue, and Svelte component code.
    NÚ
separatorsÚ
chunk_sizeÚchunk_overlapÚkwargsÚreturnc                 ó@   •— t        ‰|   d||dœ|¤Ž |xs g | _        y)aG  Initialize the JS Framework text splitter.

        Args:
            separators: Optional list of custom separator strings to use
            chunk_size: Maximum size of chunks to return
            chunk_overlap: Overlap in characters between chunks
            **kwargs: Additional arguments to pass to parent class
        )r
   r   N© )ÚsuperÚ__init__Ú_separators)Úselfr	   r
   r   r   Ú	__class__s        €úc/home/kushmeetdev/Regenta/Chatbot/venv/lib/python3.12/site-packages/langchain_text_splitters/jsx.pyr   z JSFrameworkTextSplitter.__init__   s)   ø€ ô 	‰ÑÐV J¸mÑVÈvÒVØ%Ò+¨ˆÕó    Útextc                 ó  •— t        j                  d|«      }g }|D ]  }||vsŒ|j                  |«       Œ |D cg c]  }d|› ‘Œ	 }}g d¢}| j                  |z   |z   g d¢z   }|| _        t        ‰	|   |«      }|S c c}w )aÊ  Split text into chunks.

        This method splits the text into chunks by:
        - Extracting unique opening component tags using regex
        - Creating separators list with extracted tags and JS separators
        - Splitting the text using the separators by calling the parent class method

        Args:
            text: String containing code to split

        Returns:
            List of text chunks split on component and JS boundaries
        z<\s*([a-zA-Z0-9]+)[^>]*>ú<)z
export z export z

function z
async function z async function z
const z
let z
var z
class z class z
if z if z
for z for z
while z while z
switch z switch z
case z case z	
default z	 default )z<>z

z&&
z||
)ÚreÚfindallÚappendr   r   Ú
split_text)
r   r   Úopening_tagsÚcomponent_tagsÚtagÚcomponent_separatorsÚjs_separatorsr	   Úchunksr   s
            €r   r   z"JSFrameworkTextSplitter.split_text*   s³   ø€ ô  —z‘zÐ"=¸tÓDˆàˆØò 	+ˆCØ˜.Ò(Ø×%Ñ% cÕ*ð	+ð 6DÖD¨c ! C 5¢	ÐDÐÐDò
ˆð2 ×ÑØñà"ñ#ò -ñ-ð 	ð &ˆÔÜ‘Ñ# DÓ)ˆØˆùòE  Es   »A<)NiÐ  r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   ÚstrÚintr   r   r   Ú__classcell__)r   s   @r   r   r      sm   ø„ ñð$ +/ØØñ	,à˜T #™YÑ'ð,ð ð,ð ð	,ð
 ð,ð 
õ,ð$8˜sð 8 t¨C¡y÷ 8ñ 8r   r   )r   Útypingr   r   r   Úlangchain_text_splittersr   r   r   r   r   ú<module>r-      s    ðÛ 	ß &Ñ &å Cô[Ð<õ [r   