§
    ™Štjï  ã                   óF   — d Z ddlZddlmZ ddlmZ  G d„ de¦  «        ZdS )z#JavaScript framework text splitter.é    N)ÚAny)ÚRecursiveCharacterTextSplitterc                   ón   ‡ — e Zd ZdZ	 	 	 ddee         dz  dededed	df
ˆ fd
„Zded	ee         fd„Z	ˆ xZ
S )ÚJSFrameworkTextSplitterat  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éÐ  r   Ú
separatorsÚ
chunk_sizeÚchunk_overlapÚkwargsÚreturnc                 óR   •—  t          ¦   «         j        d||dœ|¤Ž |pg | _        dS )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        €úZ/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_text_splitters/jsx.pyr   z JSFrameworkTextSplitter.__init__   s<   ø€ ð 	�‰ŒÔÐV J¸mÐVÐVÈvÐVÐVÐVØ%Ð+¨ˆÔÐÐó    Útextc                 óÜ   — t          j        d|¦  «        }g }|D ]}||vr|                     |¦  «         Œd„ |D ¦   «         }g d¢}| j        |z   |z   g d¢z   }|                      ||¦  «        S )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]+)[^>]*>c                 ó   — g | ]}d |› �‘ŒS )ú<r   )Ú.0Útags     r   ú
<listcomp>z6JSFrameworkTextSplitter.split_text.<locals>.<listcomp>E   s   € ÐDÐDÐD¨c 	 C 	 	ÐDÐDÐDr   )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   Ú_split_text)r   r   Úopening_tagsÚcomponent_tagsr   Úcomponent_separatorsÚjs_separatorsr   s           r   Ú
split_textz"JSFrameworkTextSplitter.split_text.   s´   € õ" ”zÐ"=¸tÑDÔDˆàˆØð 	+ð 	+ˆCØ˜.Ð(Ð(Ø×%Ò% cÑ*Ô*Ð*øØDÐD°^ÐDÑDÔDÐð
ð 
ð 
ˆð< ÔØñà"ñ#ð -Ð,Ð,ñ-ð 	ð ×Ò  jÑ1Ô1Ð1r   )Nr   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚlistÚstrÚintr   r   r%   Ú__classcell__)r   s   @r   r   r   	   s¶   ø€ € € € € ðð ð( (,ØØð	,ð ,à˜”I Ñ$ð,ð ð,ð ð	,ð
 ð,ð 
ð,ð ,ð ,ð ,ð ,ð ,ð$<2˜sð <2 t¨C¤yð <2ð <2ð <2ð <2ð <2ð <2ð <2ð <2r   r   )r)   r   Útypingr   Úlangchain_text_splittersr   r   r   r   r   ú<module>r0      sw   ðØ )Ð )à 	€	€	€	Ø Ð Ð Ð Ð Ð à CÐ CÐ CÐ CÐ CÐ Cða2ð a2ð a2ð a2ð a2Ð<ñ a2ô a2ð a2ð a2ð a2r   