ó
    Ãu„jÁ� ã                  ó^  • S SK Jr  S SKrS SKrS SKJr  S SKJr  S SKJr  S SK	J
r
  S SKJrJrJrJrJrJr  S SKJr  S S	KJr  S S
KJr  S SKJr  S SKJr  S SKJr  S SKJrJ r   S SK!J"r"  S SK#J$r$  S SK%J&r&  S SK'J(r(  S SK)J*r*J+r+J,r,J-r-J.r.J/r/  S SK0J1r1  S SK2J3r3  S SK4J5r5  S SK6J7r7J8r8  S SK9J:r:  S SK;J<r<J=r=  S SK>J?r?  S S
K@JrA  \(       a  S SKBJCrCJDrD  S SKEJFrFJGrG  S SKHJIrIJJrJ  S SKKJLrL  S SKMJNrNJOrO  S S KPJQrQJRrRJSrSJTrTJUrU  S S!KVJWrWJXrX  S S"KYJZrZ  S S#K[J\r\  S$S%S&S'.r]\]R½                  5        V Vs0 s H  u  pX_M	     snn r_\
" \`5      RÂ                  S(-  rb\bS)-  rc\dre\\d   rf\grh\\e\f\h4   ri / S*Qrj  " S+ S,\k5      rl " S- S.\k5      rm\ " S/ S05      5       rn " S1 S2\Z5      ro\" S3S49S6S5 j5       rpgs  snn f )7é    )ÚannotationsN)Údefaultdict)Ú	dataclass)Ú	lru_cache)ÚPath)ÚTYPE_CHECKINGÚClassVarÚIterableÚOptionalÚSequenceÚTuple)ÚRenderableType)ÚSegment)ÚStyle)ÚText)ÚLiteral)ÚTextAreaTheme)ÚTREE_SITTERÚget_language)Ú
SkipAction)ÚLRUCache)ÚColor)ÚContent)ÚDocumentÚDocumentBaseÚ
EditResultÚLocationÚ	SelectionÚ_utf8_encode)ÚDocumentNavigator)ÚEdit)ÚEditHistory)ÚSyntaxAwareDocumentÚSyntaxAwareDocumentError)ÚWrappedDocument)Úexpand_tabs_inlineÚexpand_text_tabs_from_widths)ÚScreen)ÚLanguageÚQuery)ÚeventsÚlog)Úcell_lenÚcell_width_to_column_index)ÚBinding)ÚMessageÚ
MouseEvent)ÚOffsetÚRegionÚSizeÚSpacingÚclamp)ÚReactiveÚreactive)Ú
ScrollView)ÚStripÚ}Ú]Ú))Ú{Ú[Ú(z../tree-sitter/zhighlights/)ÚpythonÚmarkdownÚjsonÚtomlÚyamlÚhtmlÚcssÚ
javascriptÚrustÚgoÚregexÚsqlÚjavaÚbashÚxmlc                  ó   • \ rS rSrSrSrg)ÚThemeDoesNotExistéV   z…Raised when the user tries to use a theme which does not exist.
This means a theme which is not builtin, or has not been registered.
© N©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__rS   ó    Ú¨C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\textual/widgets/_text_area.pyrQ   rQ   V   ó   † ôr[   rQ   c                  ó   • \ rS rSrSrSrg)ÚLanguageDoesNotExisté\   z‹Raised when the user tries to use a language which does not exist.
This means a language which is not builtin, or has not been registered.
rS   NrT   rS   r[   r\   r_   r_   \   r]   r[   r_   c                  ó<   • \ rS rSr% SrS\S'    S\S'    S\S'   Srg	)
ÚTextAreaLanguageéb   zGA container for a language which has been registered with the TextArea.ÚstrÚnamez'Language | None'ÚlanguageÚhighlight_queryrS   N)rU   rV   rW   rX   rY   Ú__annotations__rZ   rS   r[   r\   rb   rb   b   s   ‡ áQà
ƒIØ"àÓØlàÓÚIr[   rb   c                  ó  ^ • \ rS rSr% Sr1 SkrS\S'    / \" SSSS	S
9P\" SSSS	S
9P\" SSSS	S
9P\" SSSS	S
9P\" SSSS	S
9P\" SSSS	S
9P\" SSSS	S
9P\" SSSS	S
9P\" S S!S"S	S
9P\" S#S$S%S	S
9P\" S&S'S(S	S
9P\" S)S*S+S	S
9P\" S,S-S.S	S
9P\" S/S0S1S	S
9P\" S2S3S4S	S
9P\" S5S6S7S	S
9P\" S8S9S:S	S
9P\" S;S<S=S	S
9P\" S>S?S@S	S
9P\" SASBSCS	S
9P\" SDSESFS	S
9P\" SGSHSIS	S
9P\" SJSKSLS	S
9P\" SMSNSOS	S
9P\" SPSQSRS	S
9P\" SSSTSUS	S
9P\" SVSWSXS	S
9P\" SYSZS[S	S
9P\" S\S]S^S	S
9P\" S_S`SaS	S
9P\" SbScSdS	S
9P\" SeSfSgS	S
9Pr \	" ShSiS	Sj9r
Sk\Sl'    \	" SmSiS	Sj9rSn\So'    \	" \" 5       S	SiSp9rSq\Sr'    \	" S	S	Ss9rSt\Su'    \	" SvS	Ss9rSw\Sx'    \	" SyS	Ss9rSw\Sz'    \	" SiS	Ss9rSt\S{'    \	" SiS	Ss9rSt\S|'    \	" SiS	Ss9rSt\S}'    \	" S	5      rSt\S~'    \	" Si5      rSt\S'    \	" S	S€S�9rS‚\Sƒ'    \	" Si5      rS‚\S„'    \	" S	S	S	S…9rSt\S†'    \	" S‡5      rSn\Sˆ'    \	" Si5      rSt\S‰'    \	" S‡5      rSŠ\S‹'    \ " SŒ S�\5      5       r\ " SŽ S�\5      5       r GSShSmSiS�S	SiS	SvS‘ShShShS	ShS	SiS‡S’.                                     GSU 4S“ jjjjr \! GSShS”S	S•S	SiSiSvS‘ShShShS	ShS	SiS‡S’.                                     GSS– jjj5       r"\#GSS— j5       r$GSU 4S˜ jjr%GSS™ jr&GSGSSš jjr'GSS› jr(GSSœ jr)      GS S� jr*GS!Sž jr+GS"SŸ jr,S  r-      GS#S¡ jr.GS$S¢ jr/GS%S£ jr0GSS¤ jr1GSS¥ jr2GSS¦ jr3GSS§ jr4GS&S¨ jr5GSS© jr6GS&Sª jr7\8GS'S« j5       r9GS(S¬ jr:\8GS'S­ j5       r;        GS)S® jr<GS*S¯ jr=GS+S° jr>\8GS,S± j5       r?GSS² jr@GSS³ jrAGS-S´ jrBGSSµ jrCGSS¶ jrD\8GS.S· j5       rEGSS¸ jrF\8GS/S¹ j5       rG    GS0Sº jrH    GS0S» jrIGSS¼ jrJ\8GS/S½ j5       rK\8GS/S¾ j5       rLGS1S¿ jrMGS2U 4SÀ jjrNGS3SÁ jrOGS3SÂ jrP\8GS4SÃ j5       rQ\QR¤                  GS5SÄ j5       rQ\8GS4SÅ j5       rS\8GS6SÆ j5       rTGS7SÇ jrUGS8SÈ jrVGSSÉ jrWGSSÊ jrXGSSË jrYGSSÌ jrZGS9SÍ jr[GS9SÎ jr\GS:SÏ jr]GS.SÐ jr^GS;SÑ jr_\8GS.SÒ j5       r`GS<SÓ jraGSSÔ jrbGSSÕ jrcGSSÖ jrdGS=GS>S× jjreGS?SØ jrfGS@SÙ jrgGSSÚ jrhGSASÛ jriGSBSÜ jrjGSCSÝ jrkGSDSÞ jrlGSESß jrm GSF     GSGSà jjrn   GSH         GSISá jjro     GSJ           GSKSâ jjrpGSLSã jrqGSSä jrrGSSå jrsGSSæ jrt\8GSMSç j5       ru\uR¤                  GSNSè j5       ru\8GSOSé j5       rv\8GS/Sê j5       rw\8GS/Së j5       rx\8GS/Sì j5       ry\8GS/Sí j5       rz\8GS/Sî j5       r{\8GS/Sï j5       r|GSPGSQSð jjr}GSMSñ jr~GSPGSQSò jjrGSMSó jr€GSPGSQSô jjr�GSMSõ jr‚GSPGSQSö jjrƒGSMS÷ jr„GSPGSQSø jjr…GSMSù jr†GSPGSQSú jjr‡GSPGSRSû jjrˆGSPGSQSü jjr‰GSMSý jrŠGSPGSQSþ jjr‹GSMSÿ jrŒGSGS  jr�GSGS jrŽGSSGS jr�GSGS jr� GSSiGS.       GSTGS jjjr‘SiGS.       GSUGS jjr’SiGS.         GSVGS jjr“GSWGS jr”      GSXGS	 jr•        GSYGS
 jr–GSGS jr—GSGS jr˜GSGS jr™GSZGS jršGSGS jr›GSGS jrœGSGS jr�GSGS jržGSGS jrŸGSGS jr GSGS jr¡GSGS jr¢GSr£U =r¤$ ([  ÚTextAreaép   aÍ  TextArea {
    width: 1fr;
    height: 1fr;
    border: tall $border-blurred;
    padding: 0 1;
    color: $foreground;
    background: $surface;
    pointer: text;
    &.-textual-compact {
        border: none !important;
    }
    & .text-area--cursor {
        text-style: $input-cursor-text-style;
    }
    & .text-area--gutter {
        color: $foreground 40%;
    }

    & .text-area--cursor-gutter {
        color: $foreground 60%;
        background: $boost;
        text-style: bold;
    }

    & .text-area--cursor-line {
       background: $boost;
    }

    & .text-area--selection {
        background: $input-selection-background;
        color: $input-selection-foreground;
    }

    & .text-area--matching-bracket {
        background: $foreground 30%;
    }

    & .text-area--suggestion {
        color: $text-muted;
    }

    & .text-area--placeholder {
        color: $text 40%;
    }

    &:focus {
        border: tall $border;
    }

    &:ansi {
        .text-area--cursor {
            color: $input-cursor-foreground;
            background: $input-cursor-background;
            text-style: reverse;
        }
        & .text-area--selection {
            background: transparent;
            text-style: reverse;
        }
    }

    &:dark {
        .text-area--cursor {
            color: $input-cursor-foreground;
            background: $input-cursor-background;
        }
        &.-read-only .text-area--cursor {
            background: $warning-darken-1;
        }
    }

    &:light {
        .text-area--cursor {
            color: $text 90%;
            background: $foreground 70%;
        }
        &.-read-only .text-area--cursor {
            background: $warning-darken-1;
        }
    }    
}
>   útext-area--cursorútext-area--gutterútext-area--selectionútext-area--suggestionútext-area--cursor-lineútext-area--placeholderútext-area--cursor-gutterútext-area--matching-bracketzClassVar[set[str]]ÚCOMPONENT_CLASSESÚupÚ	cursor_upz	Cursor upF)ÚshowÚdownÚcursor_downzCursor downÚleftÚcursor_leftzCursor leftÚrightÚcursor_rightzCursor rightz	ctrl+leftÚcursor_word_leftzCursor word leftz
ctrl+rightÚcursor_word_rightzCursor word rightzhome,ctrl+aÚcursor_line_startzCursor line startz
end,ctrl+eÚcursor_line_endzCursor line endÚpageupÚcursor_page_upzCursor page upÚpagedownÚcursor_page_downzCursor page downzctrl+shift+leftzcursor_word_left(True)zCursor left word selectzctrl+shift+rightzcursor_word_right(True)zCursor right word selectz
shift+homezcursor_line_start(True)zCursor line start selectz	shift+endzcursor_line_end(True)zCursor line end selectzshift+upzcursor_up(True)zCursor up selectz
shift+downzcursor_down(True)zCursor down selectz
shift+leftzcursor_left(True)zCursor left selectzshift+rightzcursor_right(True)zCursor right selectÚf6Úselect_linezSelect lineÚf7Ú
select_allz
Select allÚ	backspaceÚdelete_leftzDelete character leftz#ctrl+w,ctrl+backspace,alt+backspaceÚdelete_word_leftzDelete left to start of wordzdelete,ctrl+dÚdelete_rightzDelete character rightz
alt+deleteÚdelete_word_rightzDelete right to start of wordzctrl+x,super+xÚcutÚCutzctrl+c,super+cÚcopyÚCopyzctrl+vÚpasteÚPastezctrl+u,super+backspaceÚdelete_to_start_of_linezDelete to line startzctrl+kÚ$delete_to_end_of_line_or_delete_linezDelete to line endzctrl+shift+kÚdelete_linezDelete linezctrl+z,super+zÚundoÚUndozctrl+y,super+yÚredoÚRedoNT)Úalways_updateÚinitzReactive[str | None]rf   rG   zReactive[str]Útheme)r�   rœ   zReactive[Selection]Ú	selection©r�   zReactive[bool]Úshow_line_numbersé   zReactive[int]Úline_number_starté   Úindent_widthÚmatch_cursor_bracketÚcursor_blinkÚ	soft_wrapÚ	read_onlyÚshow_cursorz-textual-compact)Útoggle_classzreactive[bool]ÚcompactÚhighlight_cursor_line)Úrepaintr�   Ú_cursor_visibleÚ Ú
suggestionÚhide_suggestion_on_blurzReactive[str | Content]Úplaceholderc                  ó:   • \ rS rSr% SrS\S'    \SS j5       rSrg)	ÚTextArea.Changedi)  z§Posted when the content inside the TextArea changes.

Handle this message using the `on` decorator - `@on(TextArea.Changed)`
or a method named `on_text_area_changed`.
rj   Ú	text_areac                ó   • U R                   $ )z&The `TextArea` that sent this message.©r¶   ©Úselfs    r\   ÚcontrolÚTextArea.Changed.control4  s   € ð —>‘>Ð!r[   rS   N©Úreturnrj   ©	rU   rV   rW   rX   rY   rh   Úpropertyr»   rZ   rS   r[   r\   ÚChangedrµ   )  s$   ‡ ñ	ð ÓØ5à	ó	"ó 
ó	"r[   rÁ   c                  óF   • \ rS rSr% SrS\S'    S\S'    \S
S j5       rSrg	)ÚTextArea.SelectionChangedi9  zaPosted when the selection changes.

This includes when the cursor moves or when text is selected.r   rŸ   rj   r¶   c                ó   • U R                   $ ©Nr¸   r¹   s    r\   r»   Ú!TextArea.SelectionChanged.controlD  s   € à—>‘>Ð!r[   rS   Nr½   r¿   rS   r[   r\   ÚSelectionChangedrÃ   9  s.   ‡ ñ	Ið ÓØ ØÓØ5à	ó	"ó 
ó	"r[   rÇ   Úfocusé2   )rf   rž   r¨   Útab_behaviorr©   rª   r¡   r£   Úmax_checkpointsre   ÚidÚclassesÚdisabledÚtooltipr¬   r­   r³   c               óð  >• [         TU ]  X¼XÞS9  0 U l         0 U l         SU l         [
        R                  " S5      U l         [        U
SSS9U l	         SU l
         SU l         [        [        5      U l         SU l         [!        U5      U l         [%        U R"                  5      U l         [)        U R&                  5      U l         S	U l         U R/                  [0        R2                  U5        U R/                  [0        R4                  U5        U R/                  [0        R6                  U5        U R/                  [0        R8                  U5        U R/                  [0        R:                  U	5        U R/                  [0        R<                  U5        U R/                  [0        R>                  U5        [A        S
5      U l!        U RE                  X5        X l#        X0l$        U    XPl%        Ub  Xðl&        UU l'        g)a@  Construct a new `TextArea`.

Args:
    text: The initial text to load into the TextArea.
    language: The language to use.
    theme: The theme to use.
    soft_wrap: Enable soft wrapping.
    tab_behavior: If 'focus', pressing tab will switch focus. If 'indent', pressing tab will insert a tab.
    read_only: Enable read-only mode. This prevents edits using the keyboard.
    show_cursor: Show the cursor in read only mode (no effect otherwise).
    show_line_numbers: Show line numbers on the left edge.
    line_number_start: What line number to start on.
    max_checkpoints: The maximum number of undo history checkpoints to retain.
    name: The name of the `TextArea` widget.
    id: The ID of the widget, used to refer to it from Textual CSS.
    classes: One or more Textual CSS compatible class names separated by spaces.
    disabled: True if the widget is disabled.
    tooltip: Optional tooltip.
    compact: Enable compact style (without borders).
    highlight_cursor_line: Highlight the line under the cursor.
    placeholder: Text to display when there is not content.
)re   rÌ   rÍ   rÎ   Úspacesz(?<=\W)(?=\w)|(?<=\w)(?=\W)g       @éd   )rË   Úcheckpoint_timerÚcheckpoint_max_charactersFN©r   r   i   )(ÚsuperÚ__init__Ú
_languagesÚ_themesÚindent_typeÚreÚcompileÚ_word_patternr"   ÚhistoryÚ
_selectingÚ_matching_bracket_locationr   ÚlistÚ_highlightsÚ_highlight_queryr   Údocumentr%   Úwrapped_documentr    Ú	navigatorÚ_cursor_offsetÚset_reactiverj   r¨   r©   rª   r¡   r£   r­   r³   r   Ú_line_cacheÚ_set_documentrf   rž   rÊ   rÏ   r¬   )rº   Útextrf   rž   r¨   rÊ   r©   rª   r¡   r£   rË   re   rÌ   rÍ   rÎ   rÏ   r¬   r­   r³   Ú	__class__s                      €r\   r×   ÚTextArea.__init__H  sÉ  ø€ ôX 	‰Ñ˜d°7ÐÑNà79ˆŒð	ð 24ˆŒØ0à6>ˆÔØ5äŸZšZÐ(FÓGˆÔØNä$/Ø+Ø Ø&)ñ%
ˆŒð
 	XàˆŒØVà;?ˆÔ'ð	)ô 8CÄ4Ó7HˆÔØJà04ˆÔØEä&.¨t£nˆŒØ<ä1@ÀÇÁÓ1OˆÔØ/ä,=¸d×>SÑ>SÓ,TˆŒð	0ð %ˆÔØIà×Ñœ(×,Ñ,¨iÔ8Ø×Ñœ(×,Ñ,¨iÔ8Ø×Ñœ(×.Ñ.°Ô<Ø×Ñœ(×4Ñ4Ð6GÔHØ×Ñœ(×4Ñ4Ð6GÔHØ×Ñœ(×8Ñ8Ð:OÔPØ×Ñœ(×.Ñ.°Ô<ä3;¸D³>ˆÔà×Ñ˜4Ô*à ŒØŒ
áð	1ð )ÔàÑØ"ŒLàˆ�r[   ÚmonokaiÚindentc               óv   • U " U40 SU_SU_SU_SU_SU_SU_SU_SU	_S	U
_S
U_SU_SU_SU_SU_SU_SU_SU_6$ )a_  Construct a new `TextArea` with sensible defaults for editing code.

This instantiates a `TextArea` with line numbers enabled, soft wrapping
disabled, "indent" tab behavior, and the "monokai" theme.

Args:
    text: The initial text to load into the TextArea.
    language: The language to use.
    theme: The theme to use.
    soft_wrap: Enable soft wrapping.
    tab_behavior: If 'focus', pressing tab will switch focus. If 'indent', pressing tab will insert a tab.
    read_only: Enable read-only mode. This prevents edits using the keyboard.
    show_cursor: Show the cursor in read only mode (no effect otherwise).
    show_line_numbers: Show line numbers on the left edge.
    line_number_start: What line number to start on.
    name: The name of the `TextArea` widget.
    id: The ID of the widget, used to refer to it from Textual CSS.
    classes: One or more Textual CSS compatible class names separated by spaces.
    disabled: True if the widget is disabled.
    tooltip: Optional tooltip
    compact: Enable compact style (without borders).
    highlight_cursor_line: Highlight the line under the cursor.
rf   rž   r¨   rÊ   r©   rª   r¡   r£   rË   re   rÌ   rÍ   rÎ   rÏ   r¬   r­   r³   rS   )Úclsrë   rf   rž   r¨   rÊ   r©   rª   r¡   r£   rË   re   rÌ   rÍ   rÎ   rÏ   r¬   r­   r³   s                      r\   Úcode_editorÚTextArea.code_editorÄ  s½   € ñ\ Øò
áð
ñ ð
ñ  ð	
ñ
 &ð
ñ  ð
ñ $ð
ñ 0ð
ñ 0ð
ñ ,ð
ñ ð
ñ ð
ñ ð
ñ ð
ñ ð
ñ  ð!
ñ" #8ð#
ñ$ $ð%
ð 	
r[   c                óÔ   •  [        [        R                  5       5      U  S3-  nUR                  5       nU$ ! [         a&  n[
        R                  " SU 35        Sn SnAU$ SnAff = f)z�Get the highlight query for a builtin language.

Args:
    language_name: The name of the builtin language.

Returns:
    The highlight query.
z.scmz Unable to load highlight query. r°   N)r   Ú_HIGHLIGHTS_PATHÚresolveÚ	read_textÚOSErrorr,   Úwarning)Úlanguage_nameÚhighlight_query_pathrg   Úerrors       r\   Ú_get_builtin_highlight_queryÚ%TextArea._get_builtin_highlight_query  ss   € ð	!äÔ%×-Ñ-Ó/Ó0°m°_ÀDÐ3IÑIð !ð 3×<Ñ<Ó>ˆOð
 Ðøô	 ó 	!Ü�KŠKÐ:¸5¸'ÐBÔCØ ŒOàÐûð		!ús   ‚37 ·
A'ÁA"Á"A'c                óV   >• U R                   R                  5         [        TU ]  5         g rÅ   )ré   ÚclearrÖ   Únotify_style_update)rº   rì   s    €r\   r  ÚTextArea.notify_style_update  s    ø€ Ø×Ñ×ÑÔ Ü‰Ñ#Õ%r[   c                ó   • g)zSA hook to update the [`suggestion`][textual.widgets.TextArea.suggestion] attribute.NrS   r¹   s    r\   Úupdate_suggestionÚTextArea.update_suggestion   s   � r[   c                óŠ   • U R                   (       a  gU R                  S:X  a  US:X  a  gUSL=(       a    UR                  5       $ )aC  Check if the widget may consume the given key.

As a textarea we are expecting to capture printable keys.

Args:
    key: A key identifier.
    character: A character associated with the key, or `None` if there isn't one.

Returns:
    `True` if the widget may capture the key in its `Key` message, or `False` if it won't.
Frï   ÚtabTN)r©   rÊ   Úisprintable)rº   ÚkeyÚ	characters      r\   Úcheck_consume_keyÚTextArea.check_consume_key#  s>   € ð �>�>àØ×Ñ Ó(¨S°E«\àà Ð$×@¨×)>Ñ)>Ó)@Ð@r[   c                óD  • U R                   R                  5         U R                  nUR                  5         U R                  (       d  gU R                  R                  U R                  5      nUR                  5        HŸ  u  p4U H”  nUR                  u  pgUR                  u  p‰Xh:X  a  XyU4n
X   R                  U
5        M=  X   R                  USU45        [        US-   U5       H  nX   R                  SSU45        M     X   R                  SX“45        M–     M¡     g)zTQuery the tree for ranges to highlights, and update the internal highlights mapping.Nr¢   r   )ré   r   râ   rã   rä   Úquery_syntax_treeÚitemsÚstart_pointÚ	end_pointÚappendÚrange)rº   Ú
highlightsÚcapturesÚhighlight_nameÚnodesÚnodeÚnode_start_rowÚnode_start_columnÚnode_end_rowÚnode_end_columnÚ	highlightÚnode_rows               r\   Ú_build_highlight_mapÚTextArea._build_highlight_map8  s  € à×Ñ×ÑÔ Ø×%Ñ%ˆ
Ø×ÑÔØ×$×$Øà—=‘=×2Ñ2°4×3HÑ3HÓIˆØ%-§^¡^Ö%5Ñ!ˆNÛ�Ø48×4DÑ4DÑ1�Ø04·±Ñ-�à!Ó1Ø!2À^Ð T�IØÑ.×5Ñ5°iÖ@ð Ñ.×5Ñ5Ø*¨D°.ÐAôô
 %*¨.¸1Ñ*<¸lÖ$K˜Ø"Ñ,×3Ñ3°Q¸¸nÐ4MÖNñ %Lð Ñ,×3Ñ3Ø˜OÐ<öó% ò &6r[   c                óÈ   • Xl         U(       aF  U R                  5         U R                  U R                  l        U R
                  R                  5         g U R                  SS9  g )NF©Úvisible)r¯   Ú_restart_blinkÚcursor_screen_offsetÚappÚcursor_positionrÞ   Ú
checkpointÚ_pause_blink)rº   rÈ   s     r\   Ú_watch_has_focusÚTextArea._watch_has_focusX  sJ   € Ø$ÔÞØ×ÑÔ!Ø'+×'@Ñ'@ˆD�H‰HÔ$Ø�L‰L×#Ñ#Õ%à×Ñ eÐÒ,r[   c                óÚ  • U R                   (       d  gU R                  R                  5         UR                  nU R	                  5         Uu  pE U R
                  U   U   nU R                  Xc5      nXpl        Ub  U R                  u  p‰U R                  U	5        U R                  U R                  l        X:w  a!  U R                  U R                  X 5      5        gg! [         a    Sn N‰f = f)z+When the cursor moves, scroll it into view.Nr°   )Ú
is_mountedr&  Úclear_selectionÚendÚscroll_cursor_visiblerä   Ú
IndexErrorÚfind_matching_bracketrà   rç   Úrefresh_linesr%  r'  Úpost_messagerÇ   )
rº   Úprevious_selectionrŸ   Úcursor_locationÚ
cursor_rowÚcursor_columnr
  Úmatch_locationÚ_Úoffset_ys
             r\   Ú_watch_selectionÚTextArea._watch_selectiona  sØ   € ð ��Øà�‰× Ñ Ô"à#Ÿ-™-ˆà×"Ñ"Ô$à$3Ñ!ˆ
ð	ØŸ™ jÑ1°-Ñ@ˆIð
 ×3Ñ3°IÓOˆØ*8Ô'ØÑ%Ø×-Ñ-‰KˆAØ×Ñ˜xÔ(à#'×#<Ñ#<ˆ�‰Ô ØÓ*Ø×Ñ˜d×3Ñ3°IÓDÕEð +øô ó 	ØŠIð	ús   ÁC ÃC*Ã)C*c                ó¬   • U R                   (       d  g U(       a"  U R                  (       a  U R                  5         g U R                  U R                  S9  g )Nr"  )r-  Ú	has_focusr$  r)  )rº   Úblinks     r\   Ú_watch_cursor_blinkÚTextArea._watch_cursor_blink‚  s6   € Ø��ØÞ�T—^—^Ø×ÑÕ!à×Ñ d§n¡nÐÒ5r[   c                ór   • U R                  US5        U R                  U R                  R                  5        g )Nz
-read-only)Ú	set_classÚ
_set_themeÚ_themere   )rº   r©   s     r\   Ú_watch_read_onlyÚTextArea._watch_read_onlyŠ  s&   € Ø�‰�y ,Ô/Ø�‰˜Ÿ™×(Ñ(Õ)r[   c                óX   • U R                   R                  U R                  5      U l        g)zFRecompute the (x, y) coordinate of the cursor in the wrapped document.N)rå   Úlocation_to_offsetr6  rç   r¹   s    r\   Ú_recompute_cursor_offsetÚ!TextArea._recompute_cursor_offsetŽ  s$   € à"×3Ñ3×FÑFØ× Ñ ó
ˆÕr[   c                ó&  • Sn/ nU[         ;   a}  U R                  U5       He  u  pVU[         ;   a  UR                  U5        M"  U[        ;   d  M.  U(       d  M7  US   [        U   :X  d  MI  UR	                  5         U(       a  Mb  Un  U$     U$ U[        ;   a{  U R                  U5       Hf  u  nnU[        ;   a  UR                  U5        M#  U[         ;   d  M/  U(       d  M8  US   [         U   :X  d  MJ  UR	                  5         U(       a  Mc  Un  U$    U$ )a_  If the character is a bracket, find the matching bracket.

Args:
    bracket: The character we're searching for the matching bracket of.
    search_from: The location to start the search.

Returns:
    The `Location` of the matching bracket, or `None` if it's not found.
    If the character is not available for bracket matching, `None` is returned.
Néÿÿÿÿ)Ú_OPENING_BRACKETSÚ_yield_character_locationsr  Ú_CLOSING_BRACKETSÚpopÚ"_yield_character_locations_reverse)rº   ÚbracketÚsearch_fromr9  Úbracket_stackÚ	candidateÚcandidate_locations          r\   r2  ÚTextArea.find_matching_bracket”  s"  € ð ˆØ#%ˆØÔ'Ó'à15×1PÑ1PØö2Ñ-�	ð Ô 1Ó1Ø!×(Ñ(¨Ö3ØÔ"3Õ3ç%˜Ø)¨"Ñ-Ô1BÀ9Ñ1MÕMà%×)Ñ)Ô+ß,˜}Ø-?˜NØ!ð& ÐòA2ð@ Ðð% Ô)Ó)ð
 ×8Ñ8¸ÖEñØØ"àÔ 1Ó1Ø!×(Ñ(¨Ö3ØÔ"3Õ3ç%˜Ø)¨"Ñ-Ô1BÀ9Ñ1MÕMà%×)Ñ)Ô+ß,˜}Ø-?˜NØ!àÐñ Fð Ðr[   c                óR   • Uu  p#U R                   n[        U" U5      U" U5      5      $ )z'Clamp the selection to valid locations.)Úclamp_visitabler   )rº   rŸ   Ústartr/  r[  s        r\   Ú_validate_selectionÚTextArea._validate_selectionÇ  s+   € à‰
ˆØ×.Ñ.ˆÜ™¨Ó/±ÀÓ1EÓFÐFr[   c                óP   • U R                  U R                  R                  U5        g)z:When the language is updated, update the type of document.N)rê   rä   rë   )rº   rf   s     r\   Ú_watch_languageÚTextArea._watch_languageÍ  s   € à×Ñ˜4Ÿ=™=×-Ñ-¨xÕ8r[   c                óD   • U R                  5         U R                  5         g)zCThe line number gutter contributes to virtual size, so recalculate.N©Ú _rewrap_and_refresh_virtual_sizer0  r¹   s    r\   Ú_watch_show_line_numbersÚ!TextArea._watch_show_line_numbersÑ  ó   € à×-Ñ-Ô/Ø×"Ñ"Õ$r[   c                óD   • U R                  5         U R                  5         g)z]The line number gutter max size might change and contributes to virtual size, so recalculate.Nrc  r¹   s    r\   Ú_watch_line_number_startÚ!TextArea._watch_line_number_startÖ  rg  r[   c                óD   • U R                  5         U R                  5         g)z>Changing width of tabs will change the document display width.Nrc  r¹   s    r\   Ú_watch_indent_widthÚTextArea._watch_indent_widthÛ  rg  r[   c                óf   • U R                   (       a  U R                  5         U R                  5         g rÅ   )Ú
wrap_widthrd  r0  r¹   s    r\   Ú_watch_show_vertical_scrollbarÚ'TextArea._watch_show_vertical_scrollbarà  s!   € Ø�?�?Ø×1Ñ1Ô3Ø×"Ñ"Õ$r[   c                ó&   • U R                  U5        g)zpWe set the styles on this widget when the theme changes, to ensure that
if padding is applied, the colors match.N)rE  ©rº   rž   s     r\   Ú_watch_themeÚTextArea._watch_themeå  s   € ð 	�‰˜Õr[   c                óN   • U R                  U R                  R                  5        g rÅ   )rE  rF  re   r¹   s    r\   Ú_app_theme_changedÚTextArea._app_theme_changedê  s   € Ø�‰˜Ÿ™×(Ñ(Õ)r[   c                ó,  •  U R                   U   n[
        R                  " U5      U l        U(       a¨  UR                  nU(       ar  UR                  nUR                  nU(       a%  [        R                  " U5      U R                  l	        U(       a&  [        R                  " U5      U R                  l        g g S U R                  l	        S U R                  l        g g ! [         a-    [        R                  " U5      nUc  [	        U< S35      S e GNf = f)Nz½ is not a builtin theme, or it has not been registered. To use a custom theme, register it first using `register_theme`, then switch to that theme by setting the `TextArea.theme` attribute.)rÙ   ÚKeyErrorr   Úget_builtin_themerQ   ÚdataclassesÚreplacerF  Ú
base_styleÚcolorÚbgcolorr   Úfrom_rich_colorÚstylesÚ
background)rº   rž   Útheme_objectr~  r  rƒ  s         r\   rE  ÚTextArea._set_themeí  s÷   € ð		ØŸ<™<¨Ñ.ˆLô "×)Ò)¨,Ó7ˆŒÞØ%×0Ñ0ˆJÞØ"×(Ñ(�Ø'×/Ñ/�
ÞÜ(-×(=Ò(=¸eÓ(D�D—K‘KÔ%ÞÜ-2×-BÒ-BÀ:Ó-N�D—K‘KÕ*ð ð %)�—‘Ô!Ø)-�—‘Õ&ð! øô ó 	Ü(×:Ò:¸5ÓAˆLØÑ#Ü'Ø‘ið  [ð \óð ð	ò $ð	ús   ‚C Ã3DÄDc                ó    • [         R                  " 5        Vs1 s H  oR                  iM     snU R                  R	                  5       -  $ s  snf )aÍ  A list of the names of the themes available to the `TextArea`.

The values in this list can be assigned `theme` reactive attribute of
`TextArea`.

You can retrieve the full specification for a theme by passing one of
the strings from this list into `TextAreaTheme.get_by_name(theme_name: str)`.

Alternatively, you can directly retrieve a list of `TextAreaTheme` objects
(which contain the full theme specification) by calling
`TextAreaTheme.builtin_themes()`.
)r   Úbuiltin_themesre   rÙ   Úkeysrs  s     r\   Úavailable_themesÚTextArea.available_themes  sF   € ô %2×$@Ò$@Ô$Bó
Ú$B˜5�JŒJÑ$Bñ
à�L‰L×ÑÓñ ð 	 ùò 
s   ˜Ac                ó4   • XR                   UR                  '   g)ao  Register a theme for use by the `TextArea`.

After registering a theme, you can set themes by assigning the theme
name to the `TextArea.theme` reactive attribute. For example
`text_area.theme = "my_custom_theme"` where `"my_custom_theme"` is the
name of the theme you registered.

If you supply a theme with a name that already exists that theme
will be overwritten.
N)rÙ   re   rs  s     r\   Úregister_themeÚTextArea.register_theme!  s   € ð $)�‰�U—Z‘ZÒ r[   c                óV   • [        [        5      U R                  R                  5       -  $ )a&  A set of the names of languages available to the `TextArea`.

The values in this set can be assigned to the `language` reactive attribute
of `TextArea`.

The returned set contains the builtin languages installed with the syntax extras,
plus those registered via the `register_language` method.
)ÚsetÚBUILTIN_LANGUAGESrØ   rˆ  r¹   s    r\   Úavailable_languagesÚTextArea.available_languages.  s"   € ô Ô$Ó%¨¯©×(<Ñ(<Ó(>Ñ>Ð>r[   c                ó6   • [        XU5      U R                  U'   g)a“  Register a language and corresponding highlight query.

Calling this method does not change the language of the `TextArea`.
On switching to this language (via the `language` reactive attribute),
syntax highlighting will be performed using the given highlight query.

If a string `name` is supplied for a builtin supported language, then
this method will update the default highlight query for that language.

Registering a language only registers it to this instance of `TextArea`.

Args:
    name: The name of the language.
    language: A tree-sitter `Language` object.
    highlight_query: The highlight query to use for syntax highlighting this language.
N)rb   rØ   )rº   re   rf   rg   s       r\   Úregister_languageÚTextArea.register_language:  s   € ô, !1°ÀÓ Qˆ�‰˜Òr[   c                óÖ   • XR                   ;  a  [        USU5      U R                   U'   OX R                   U   l        XR                  :X  a  U R	                  U R
                  U5        gg)zÁUpdate the highlight query for an already registered language.

Args:
    name: The name of the language.
    highlight_query: The highlight query to use for syntax highlighting this language.
N)rØ   rb   rg   rf   rê   rë   )rº   re   rg   s      r\   Úupdate_highlight_queryÚTextArea.update_highlight_queryR  sY   € ð —‘Ó&Ü$4°T¸4ÀÓ$QˆD�O‰O˜DÒ!à4C�O‰O˜DÑ!Ô1ð —=‘=Ó Ø×Ñ˜tŸy™y¨$Õ/ð !r[   c                ó6  • SU l         [        (       a©  U(       a¢  X R                  ;   aA  U R                  U   R                  nU R                  U   R                  nUc  [        U5      nOU R                  U5      n[        U5      nUc  [        SU< S35      e [        X5      nUR                  U5      U l         O?U(       a-  [        (       d"  [        R                  " S5        [        U5      nO[        U5      nXPl        [        XPR                   S9U l        [%        U R"                  5      U l        U R)                  5         U R+                  S5        U R-                  5         g! [         a)    [        U5      n[        R                  " SU< S35         Nœf = f)	aO  Construct and return an appropriate document.

Args:
    text: The text of the document.
    language: The name of the language to use. This must correspond to a tree-sitter
        language available in the current environment (e.g. use `python` for `tree-sitter-python`).
        If None, the document will be treated as plain text.
NzMtree-sitter is available, but no built-in or user-registered language called zd.
Ensure the language is installed (e.g. `pip install tree-sitter-ruby`)
Falling back to plain text.zParser not found for language z. Parsing disabled.aæ  tree-sitter not available in this environment. Parsing disabled.
You may need to install the `syntax` extras alongside textual.
Try `pip install 'textual[syntax]'` or '`poetry add textual[syntax]' to get started quickly.

Alternatively, install tree-sitter manually (`pip install tree-sitter`) and then
install the required language (e.g. `pip install tree-sitter-ruby`), then register it.
and its highlight query using TextArea.register_language().

Falling back to plain text for now.©Ú	tab_widthrÕ   )rã   r   rØ   rg   rf   r   rý   r_   r#   Úprepare_queryr$   r   r,   rù   rä   r%   r¥   rå   r    ræ   r  Úmove_cursorrd  )rº   rë   rf   rg   Údocument_languagerä   s         r\   rê   ÚTextArea._set_documentc  sx  € ð !%ˆÔßŠ;ž8ØŸ?™?Ó*à"&§/¡/°(Ñ";×"KÑ"K�Ø$(§O¡O°HÑ$=×$FÑ$FÐ!Ø$Ñ,Ü(4°XÓ(>Ð%øð #'×"CÑ"CÀHÓ"M�Ü$0°Ó$:Ð!ð !Ñ(Ü*ØcÐdlÑcoð p2ð 3óð ðTÜ2°4ÓK�Hð -5×,BÑ,BÀ?Ó,S�DÕ)ÞŸkškô �KŠKð6ôô   “~‰Hô   “~ˆHà ŒÜ /°×DUÑDUÑ VˆÔÜ*¨4×+@Ñ+@ÓAˆŒØ×!Ñ!Ô#Ø×Ñ˜Ô Ø×-Ñ-Õ/øô= 0ó Ü'¨›~�HÜ—K’KØ8Ð9JÑ8MÐM`Ðaöðús   ÂE% Å%0FÆFc                óR   • U R                   u  pX"U R                  R                  -   4$ )z’Return the visible line indices as a tuple (top, bottom).

Returns:
    A tuple (top, bottom) indicating the top and bottom visible line indices.
)Úscroll_offsetÚsizeÚheight)rº   r:  Úscroll_offset_ys      r\   Ú_visible_line_indicesÚTextArea._visible_line_indices¤  s*   € ð "×/Ñ/ÑˆØ°$·)±)×2BÑ2BÑ BÐBÐBr[   c                ó:   • U R                   U R                  l        g rÅ   ©r%  r&  r'  r¹   s    r\   Ú_watch_scroll_xÚTextArea._watch_scroll_x®  ó   € Ø#'×#<Ñ#<ˆ�‰Õ r[   c                ó:   • U R                   U R                  l        g rÅ   r¨  r¹   s    r\   Ú_watch_scroll_yÚTextArea._watch_scroll_y±  r«  r[   c                óì   • U R                   R                  5         U R                  XR                  5        U R	                  U R                  U 5      R                  U 5      5        U R                  5         g)z¤Load text into the TextArea.

This will replace the text currently in the TextArea and clear the edit history.

Args:
    text: The text to load into the TextArea.
N)rÞ   r   rê   rf   r4  rÁ   Ú
set_senderr  )rº   rë   s     r\   Ú	load_textÚTextArea.load_text´  sT   € ð 	�‰×ÑÔØ×Ñ˜4§¡Ô/Ø×Ñ˜$Ÿ,™, tÓ,×7Ñ7¸Ó=Ô>Ø×ÑÕ r[   c                ó$   • U R                  5         g rÅ   )rd  r¹   s    r\   Ú
_on_resizeÚTextArea._on_resizeÁ  s   € Ø×-Ñ-Õ/r[   c                óX   • U R                  5         U R                  U R                  SS9  g )NT)Úcenter)rd  Úcall_after_refreshr0  r¹   s    r\   Ú_watch_soft_wrapÚTextArea._watch_soft_wrapÄ  s'   € Ø×-Ñ-Ô/Ø×Ñ × :Ñ :À4ÐÒHr[   c                ó�   • U R                   R                  u  pSnU R                  (       a  [        SXR                  -
  U-
  5      $ g)zZThe width which gets used when the document wraps.

Accounts for gutter, scrollbars, etc.
r¢   r   )Úscrollable_content_regionr¢  r¨   ÚmaxÚgutter_width)rº   Úwidthr:  Úcursor_widths       r\   ro  ÚTextArea.wrap_widthÈ  sA   € ð ×1Ñ1×6Ñ6‰ˆØˆØ�>�>Ü�q˜%×"3Ñ"3Ñ3°lÑBÓCÐCØr[   c                ó´   • U R                   R                  U R                  U R                  S9  U R                  R                  5         U R                  5         g )Nrš  )rå   Úwrapro  r¥   ré   r   Ú_refresh_sizer¹   s    r\   rd  Ú)TextArea._rewrap_and_refresh_virtual_sizeÔ  sC   € Ø×Ñ×"Ñ" 4§?¡?¸d×>OÑ>OÐ"ÑPØ×Ñ×ÑÔ Ø×ÑÕr[   c                ó6   • [        U R                  [        5      $ )zTTrue if the TextArea is currently syntax aware - i.e. it's parsing document content.)Ú
isinstancerä   r#   r¹   s    r\   Úis_syntax_awareÚTextArea.is_syntax_awareÙ  s   € ô ˜$Ÿ-™-Ô)<Ó=Ð=r[   c              #  óú   #   • Uu  p#U R                   nUR                  nSUs=::  a  U:  aN  O  gXB   nU[        U5      :  a  Xc   X#44v •  US-  nU[        U5      :  a  M  SnUS-  nSUs=::  a  U:  a  MH  g  gg7f)zðYields character locations starting from the given location.

Does not yield location of line separator characters like `\n`.

Args:
    start: The location to start yielding from.

Returns:
    Yields tuples of (character, (row, column)).
r   r¢   N©rä   Ú
line_countÚlen©rº   r\  ÚrowÚcolumnrä   rÌ  Úlines          r\   rP  Ú#TextArea._yield_character_locationsÞ  sŠ   é € ð ‰ˆØ—=‘=ˆØ×(Ñ(ˆ
à�3Õ#˜Ö#Ø‘=ˆDØœ3˜t›9Ó$Ø‘l S MÐ1Ò1Ø˜!‘�ð œ3˜t›9Õ$ð ˆFØ�1‰HˆCð �3Õ#˜×#Ñ#ùs   ‚AA;Á!A;Á7A;c              #  óö   #   • Uu  p#U R                   nUR                  nXRs=:”  a  S:¼  aM  O  g XB   nUS:X  a  [        U5      S-
  nUS:¼  a  Xc   X#44v •  US-  nUS:¼  a  M  US-  nXRs=:”  a  S:¼  a  MG  g   g g 7f)Nr   rN  r¢   rË  rÎ  s          r\   rS  Ú+TextArea._yield_character_locations_reverse÷  s‹   é € ð ‰ˆØ—=‘=ˆØ×(Ñ(ˆ
àÕ# !Ö#Ø‘=ˆDØ˜‹|Ü˜T› Q™�Ø˜A“+Ø‘l S MÐ1Ò1Ø˜!‘�ð ˜A•+ð �1‰HˆCð Õ# !×#Ñ#ùs   ‚AA9Á"A9Á5A9c                ó   • U R                   (       a&  [        SU R                  R                  5      U l        OGU R
                  R                  U R                  5      u  p[        XR                  -   S-   U5      U l        U R                  5         g)z(Update the virtual size of the TextArea.r   r¢   N)
r¨   r4   rå   r£  Úvirtual_sizerä   Úget_sizer¥   r¾  Ú_refresh_scrollbars)rº   r¿  r£  s      r\   rÄ  ÚTextArea._refresh_size  sk   € à�>�>Ü $ Q¨×(=Ñ(=×(DÑ(DÓ EˆDÕð !ŸM™M×2Ñ2°4×3DÑ3DÓE‰MˆEÜ $ U×->Ñ->Ñ%>ÀÑ%BÀFÓ KˆDÔØ× Ñ Õ"r[   c                óú   • U R                   (       a  U R                  =(       a    U R                  $ U R                  =(       a    U R                  (       + =(       d    U R                  =(       a    U R                  nU$ )zDraw the cursor?)r©   rª   r?  r§   r¯   )rº   Údraw_cursors     r\   Ú_draw_cursorÚTextArea._draw_cursor  s^   € ð �>�>à×#Ñ#×6¨¯©Ð6à�N‰N÷ &Ø×%Ñ%Ô%÷<à×!Ñ!×: d×&:Ñ&:ð 	ð
 Ðr[   c                óT   • U R                   =(       a    U R                  (       + (       + $ )zIs there a usable cursor?)r©   rª   r¹   s    r\   Ú_has_cursorÚTextArea._has_cursor  s   € ð —N‘N×;¨4×+;Ñ+;Ô';Ô<Ð<r[   c                óN   • U R                   R                  U5      n[        USSS9$ )zûRetrieve the line at the given line index.

You can stylize the Text object returned here to apply additional
styling to TextArea content.

Args:
    line_index: The index of the line.

Returns:
    A `rich.Text` object containing the requested line.
r°   T)r/  Úno_wrap)rä   Úget_liner   )rº   Ú
line_indexÚline_strings      r\   rã  ÚTextArea.get_line#  s'   € ð —m‘m×,Ñ,¨ZÓ8ˆÜ�K R°Ñ6Ð6r[   c                ój   >• U R                   nU(       a  UR                  U 5        [        TU ]  U5      $ rÅ   )rF  Ú	apply_cssrÖ   Úrender_lines)rº   Úcroprž   rì   s      €r\   ré  ÚTextArea.render_lines2  s+   ø€ Ø—‘ˆÞØ�O‰O˜DÔ!Ü‰wÑ# DÓ)Ð)r[   c                óä  • U R                   (       Gd  U R                  (       Ga  [        R                  " U R                  5      R	                  U R
                  R                  5      nU[        U5      :  a¹  U R                  S5      nX!   R                  U5      nU R                  (       aU  US:X  aO  U R                  nU(       a  UR                  OSnU(       a'  UR                  [        R                  " U5      SS5      n[        UR!                  U R"                  5      UR$                  5      $ U R&                  u  pxX�-   n	U R(                  n
U R*                  u  p¼U R,                  UU	U
R/                  U	5      (       d  U R0                  (       a  U
OU
R2                  S   U	:H  U R4                  (       a"  U R6                  (       a  Xœ:X  a  U
R2                  OSU R8                  U R:                  U R<                  U R0                  U R>                  U R@                  U RB                  U RD                  4nU RF                  RI                  U5      =nb  U$ U RK                  U5      nXðRF                  U'   U$ )úšRender a single line of the TextArea. Called by Textual.

Args:
    y: Y Coordinate of line relative to the widget region.

Returns:
    A rendered line.
rq   r   Nr¢   )&rë   r³   r   Ú	from_textrÃ  Úcontent_sizer¿  rÍ  Úget_visual_styleÚstylizerÜ  rF  Úcursor_styleÚContentStyleÚfrom_rich_styler:   Úrender_segmentsÚvisual_styleÚcell_lengthr¡  rŸ   rç   r¢  Úcontains_liner¨   r/  r¯   r§   rž   rà   r¦   r¡   r©   rª   r±   ré   ÚgetÚ_render_line)rº   ÚyÚplaceholder_linesÚstyleÚcontentrž   rò  Úscroll_xÚscroll_yÚ
absolute_yrŸ   r:  Úcursor_yÚ	cache_keyÚcached_linerÑ  s                   r\   Úrender_lineÚTextArea.render_line8  s  € ð �y�yˆy˜T×-×-Ð-Ü '× 1Ò 1°$×2BÑ2BÓ C× HÑ HØ×!Ñ!×'Ñ'ó!Ðð ”3Ð(Ó)Ó)Ø×-Ñ-Ð.FÓG�Ø+Ñ.×6Ñ6°uÓ=�Ø×$×$¨¨a«Ø ŸK™K�EÞ9> 5×#5Ò#5ÀD�LÞ#Ø")§/¡/Ü(×8Ò8¸ÓFÈÈ1ó#˜ô Ø×+Ñ+¨D×,=Ñ,=Ó>À×@SÑ@Sóð ð "×/Ñ/ÑˆØ‘\ˆ
Ø—N‘Nˆ	Ø×)Ñ)‰ˆà�I‰IØØð ×*Ñ*¨:×6Ñ6¸$¿.¿.ñ à—]‘] 1Ñ%¨Ñ3ð
 ×(×(Ø×)×)Ø"Ó.ð	 —’ð à�J‰JØ×+Ñ+Ø×%Ñ%Ø�N‰NØ×"Ñ"Ø�N‰NØ×ÑØ�O‰Oð3
ˆ	ð6  ×+Ñ+×/Ñ/°	Ó:Ð:ˆKÑGØÐØ× Ñ  Ó#ˆØ&*×Ñ˜Ñ#Øˆr[   c                óŽ  • U R                   nU(       a  UR                  b  UR                  OU R                  nU R                  nU R                  u  pVX-   nXtR
                  :¬  nU(       a+  [        R                  " U R                  R                  U5      $  UR                  U   n	U	c+  [        R                  " U R                  R                  U5      $ U	u  p«U R                  U
5      n[        U5      nU R                  Ul        UR!                  US-   5        U R"                  u  pïU R$                  nUu  nnUu  nn['        U5      u  nnUu  nnUu  nnU R(                  =(       a    U R*                  nU(       a  U(       a  UR,                  OSnU R*                  nU(       a  U(       a  UU
:X  a  UR/                  U5        UU:w  aÈ  UU
s=::  a  U::  a»  O  O¸U(       a  UR0                  OSnUu  nnU(       a—  US:X  a0  U
U:w  a*  SUl        UR/                  [5        UR6                  S95        OaU
Us=:X  a  U:X  a  O  OUR/                  UUUS9  O?U
U:X  a  UR/                  UUUS9  O'U
U:X  a  UR/                  UUS9  OUR/                  UUS9  U R8                  n U (       a—  U(       a�  [;        UR2                  5      n![=        U!5      n"UR>                  R@                  n#U U
   n$U$ HO  u  n%n&n'U#" U'5      n(U(c  M  UR/                  U(U"RA                  U%S5      U&(       a  U"RA                  U&5      OS5        MQ     U RB                  n)U RD                  n*U=(       a    U*=(       a    U)SL=(       a    UU:H  n+UU
:X  aì  U RF                  n,U+(       a2  U(       a  URH                  OSn-U-(       a  UR/                  U-UUS-   5        U RJ                  (       a]  U RL                  (       d  U RN                  (       d;  U RQ                  S5      n.[R        RT                  " USU U RJ                  U.4UUS 5      nU,(       a2  U(       a  URV                  OSn/U/(       a  UR/                  U/UUS-   5        U+(       a@  U)c   eU)u  n0n1U(       a/  U0U
:X  a)  URH                  n-U-(       a  UR/                  U-U1U1S-   5        U RX                  n2U RZ                  (       a_  UU
:X  a  U(       a  UR\                  n3OUR^                  n3U2S	-
  n4US:X  a  [a        X Rb                  -   5      OS
n5[e        U5SU4 3 S3U35      /n6O/ n6URg                  U
5      n7U7(       a“  URi                  U75      n8U8U   nURk                  U
5      n9S
Ul6        Sn:[o        U5       H$  n;U:U8U;   R2                  Rq                  S5      -  n:M&     UR2                  Rq                  S5      n<U9U:U:U<-    n=[s        UU=5      nOURu                  U R                  5        U Rv                  (       a   U Rx                  R                  R                  O([{        XàR|                  R                  R                  5      n>U>U RX                  -
  n?U R~                  R€                  n@[        URƒ                  U@5      UR„                  S9nAU Rv                  (       d  WAR‡                  XUU-   5      nAUU
:X  a  U R(                  (       a  UnBOU(       a  UR                  OSnBWAR‰                  U?WB5      nAU6(       a!  [        RŠ                  " [        U6U2S9WA/5      nCOWAnCWCR�                  U5      $ ! [         a    Sn	 GNœf = f)rí  Nr¢   r   u   â–Œ)r  )r\  r/  )r/  ro   é   r°   Ú>z  Ú	)r÷  )GrF  r~  Ú
rich_stylerå   r¡  r£  r:   Úblankr¢  r¿  Ú_offset_to_line_infor1  rã  rÍ  r¥   Útab_sizeÚ
set_lengthrÖ  rŸ   Úsortedr­   rß  Úcursor_line_stylerñ  Úselection_styleÚplainr   r€  râ   r   Úbuild_byte_to_codepoint_dictÚsyntax_stylesrù  rà   r¦   rÜ  Úbracket_matching_styler±   r?  r²   Úget_component_rich_styler   Úassemblerò  r¾  r¡   Úcursor_line_gutter_styleÚgutter_stylerd   r£   r   Úget_offsetsÚdivideÚget_tab_widthsr/  r  Úcountr'   Úexpand_tabsr¨   r¼  r½  Úregionr&  ÚconsoleÚrenderr-   rê  Úextend_cell_lengthÚjoinÚapply_style)Drº   rû  rž   r~  rå   rÿ  r   Úy_offsetÚout_of_boundsÚ	line_inforä  Úsection_offsetrÑ  Úline_character_countÚvirtual_widthÚ_virtual_heightrŸ   r\  r/  r7  r8  Úselection_topÚselection_bottomÚselection_top_rowÚselection_top_columnÚselection_bottom_rowÚselection_bottom_columnr­   r  Ú
has_cursorr  r:  r  Ú
line_bytesÚbyte_to_codepointÚget_highlight_from_themeÚline_highlightsÚhighlight_startÚhighlight_endr  Ú
node_styleÚmatching_bracketr¦   Údraw_matched_bracketsrÛ  Úmatching_bracket_styleÚsuggestion_stylerò  Úbracket_match_rowÚbracket_match_columnr¾  r  Úgutter_width_no_marginÚgutter_contentÚgutterÚwrap_offsetsÚsectionsÚline_tab_widthsÚtabs_beforeÚsection_indexÚtabs_withinÚsection_tab_widthsÚ
base_widthÚtarget_widthr!  Ú
text_stripÚ
line_styleÚstripsD                                                                       r\   rú  ÚTextArea._render_liney  sä  € ð —‘ˆö ˜×)Ñ)Ñ5ð ×Òà—‘ð 	ð  ×0Ñ0ÐØ!×/Ñ/Ñˆð ‘<ˆð !×$;Ñ$;Ñ;ˆæÜ—;’;˜tŸy™yŸ™°
Ó;Ð;ð	Ø(×=Ñ=¸hÑGˆIð ÑÜ—;’;˜tŸy™yŸ™°
Ó;Ð;à%.Ñ"ˆ
à�}‰}˜ZÓ(ˆÜ" 4›yÐØ×)Ñ)ˆŒØ�‰Ð,¨qÑ0Ô1Ø)-×):Ñ):Ñ&ˆà—N‘Nˆ	Ø‰
ˆˆsØ$'Ñ!ˆ
�Mä*0°Ó*;Ñ'ˆÐ'Ø2?Ñ/ÐÐ/Ø8HÑ5ÐÐ5à $× :Ñ :× O¸t×?OÑ?OÐæ(-Ö2GˆE×#Ò#Èdð 	ð ×%Ñ%ˆ
æÖ+°
¸jÓ0HØ�L‰LÐ*Ô+ð �C‹<Ð-°ÕSÐ?SÖSæ7<˜e×3Ò3À$ˆOØ‰MˆJ˜ÞØ'¨1Ó,°¸zÓ1Ià!&�D”JØ—L‘L¤¨_×-DÑ-DÑ!EÕFà!Ð%6ÕNÐ:NÖNàŸ™Ø+Ø"6Ø 7ð %ò ð &Ð):Ó:Ø ŸL™LØ /Ø&:Ø$8ð )ò ð
 (Ð+?Ó?Ø ŸL™L¨Ð>U˜LÒVà ŸL™L¨Ð>R˜LÑSà×%Ñ%ˆ
Þž%Ü% d§j¡jÓ1ˆJÜ <¸ZÓ HÐØ',×':Ñ':×'>Ñ'>Ð$Ø(¨Ñ4ˆOÛBQÑ>� °Ù5°nÓE�
ØÓ)Ø—L‘LØ"Ø)×-Ñ-¨o¸qÓAÞ@MÐ)×-Ñ-¨mÔ<ÐSWöñ CRð  ×:Ñ:ÐØ#×8Ñ8Ðà÷ Ø$÷à ¨Ð,÷ð ˜‘ð	 	ð ˜Ó#Ø×+Ñ+ˆKÞ$ÞIN¨×)EÒ)EÐTXÐ&Þ)Ø—L‘LØ.Ø%Ø%¨Ñ)ôð �� D§N§N¸$×:V×:VØ#'×#@Ñ#@Ø+ó$Ð ô —}’}Ø˜˜-Ð(Ø—_‘_Ð&6Ð7Ø˜˜Ð(ó�ö Þ5:˜u×1Ò1À�ÞØ—L‘L ¨}¸mÈaÑ>OÔPö !à#Ñ/Ð/Ð/Ø6FÑ3ÐÐ3ÞÐ*¨jÓ8Ø).×)EÑ)EÐ&Þ)Ø—L‘LØ.Ø,Ø,¨qÑ0ôð ×(Ñ(ˆØ×!×!Ø˜ZÓ'Ö,AØ$×=Ñ=‘à$×1Ñ1�à%1°AÑ%5Ð"à<JÈaÓ<O”�J×!7Ñ!7Ñ7Ô8ÐUWð ô ˜>¨!Ð,BÐ+CÐ)CÐDÀBÐGÈÓVð‰Fð ˆFð (×3Ñ3°JÓ?ˆÞØ—{‘{ <Ó0ˆHØ˜NÑ+ˆDØ.×=Ñ=¸jÓIˆOØˆDŒHð ˆKÜ!& ~Ö!6�Ø˜x¨Ñ6×<Ñ<×BÑBÀ4ÓHÑH’ñ "7ð Ÿ*™*×*Ñ*¨4Ó0ˆKØ!0Ø˜k¨KÑ7ð"Ðô 0°Ð6HÓI‰Dà×Ñ˜T×.Ñ.Ô/ð �~�~ð ×*Ñ*×/Ñ/×5Ò5ä�]§K¡K×$4Ñ$4×$:Ñ$:Ó;ð 	ð
 " D×$5Ñ$5Ñ5ˆð —(‘(×"Ñ"ˆÜ˜4Ÿ;™; wÓ/¸T¿]¹]ÑKˆ
Ø�~�~Ø#Ÿ™¨¸mÑ3KÓLˆJð ˜Ó#¨×(B×(BØ*‰Jæ-2˜×)Ò)¸ˆJà×2Ñ2°<ÀÓLˆ
ÞÜ—J’J¤ f¸,Ñ GÈÐTÓU‰EàˆEà× Ñ  Ó,Ð,øôK ó 	Ø‹Ið	ús   Â\4 Ü4]Ý]c                ó.   • U R                   R                  $ )z(The entire text content of the document.)rä   rë   r¹   s    r\   rë   ÚTextArea.text_  s   € ð �}‰}×!Ñ!Ð!r[   c                ó&   • U R                  U5        g)z´Replace the text currently in the TextArea. This is an alias of `load_text`.

Setting this value will clear the edit history.

Args:
    value: The text to load into the TextArea.
N)r±  )rº   Úvalues     r\   rë   rR  d  s   € ð 	�‰�uÕr[   c                ó@   • U R                   u  pU R                  X5      $ )zCThe text between the start and end points of the current selection.)rŸ   Úget_text_range©rº   r\  r/  s      r\   Úselected_textÚTextArea.selected_texto  s    € ð —^‘^‰
ˆØ×"Ñ" 5Ó.Ð.r[   c                ó   • U R                   $ )z6The location of the matching bracket, if there is one.)rà   r¹   s    r\   Úmatching_bracket_locationÚ"TextArea.matching_bracket_locationu  s   € ð ×.Ñ.Ð.r[   c                óT   • [        X45      u  pU R                  R                  X5      $ )zžGet the text between a start and end location.

Args:
    start: The start location.
    end: The end location.

Returns:
    The text between start and end.
)r  rä   rV  rW  s      r\   rV  ÚTextArea.get_text_rangez  s'   € ô ˜U˜LÓ)‰
ˆØ�}‰}×+Ñ+¨EÓ7Ð7r[   c                óä  • U R                   R                  UR                  5      (       a(  U R                   [        UR                  5      S U l         OSU l         U R                  nUR                  U 5      nU R                  R                  U5        U R                  nX$:w  a1  U R                  R                  U R                  U R                  5        O;U R                  R                  UR                  UR                  UR                  5        UR!                  U 5        U R#                  5         U R%                  U R'                  U 5      5        U R)                  5         U R+                  5         U$ )z»Perform an Edit.

Args:
    edit: The Edit to perform.

Returns:
    Data relating to the edit that may be useful. The data returned
    may be different depending on the edit performed.
Nr°   )r±   Ú
startswithrë   rÍ  r¾  ÚdorÞ   Úrecordrå   rÃ  ro  r¥   Ú
wrap_rangeÚtopÚbottomÚend_locationÚafterr  r4  rÁ   r  rÄ  )rº   ÚeditÚold_gutter_widthÚresultÚnew_gutter_widths        r\   rh  ÚTextArea.edit‡  s  € ð �?‰?×%Ñ% d§i¡i×0Ñ0Ø"Ÿo™o¬c°$·)±)«nÐ.>Ð?ˆD�Oà ˆDŒOØ×,Ñ,ÐØ—‘˜“ˆØ�‰×Ñ˜DÔ!Ø×,Ñ,ÐàÓ/Ø×!Ñ!×&Ñ& t§¡¸×8IÑ8IÕJà×!Ñ!×,Ñ,Ø—‘Ø—‘Ø×#Ñ#ôð 	�
‰
�4ÔØ×!Ñ!Ô#Ø×Ñ˜$Ÿ,™, tÓ,Ô-Ø×ÑÔ Ø×ÑÔØˆr[   c                ój   • U R                   R                  5       =n(       a  U R                  U5        gg©zJUndo the edits since the last checkpoint (the most recent batch of edits).N)rÞ   Ú	_pop_undoÚ_undo_batch©rº   Úeditss     r\   r˜   ÚTextArea.undoª  ó-   € à—L‘L×*Ñ*Ó,Ð,ˆ5Õ,Ø×Ñ˜UÕ#ð -r[   c                ó$   • U R                  5         grn  )r˜   r¹   s    r\   Úaction_undoÚTextArea.action_undo¯  ó   € à�	‰	�r[   c                ój   • U R                   R                  5       =n(       a  U R                  U5        gg©z-Redo the most recently undone batch of edits.N)rÞ   Ú	_pop_redoÚ_redo_batchrq  s     r\   rš   ÚTextArea.redo³  rt  r[   c                ó$   • U R                  5         grz  )rš   r¹   s    r\   Úaction_redoÚTextArea.action_redo¸  rx  r[   c                ó  • U(       d  gU R                   nUS   R                  nSnSn[        U5       H~  nUR                  U 5        UR                  (       a  UR                  R
                  OSnUR                  U:  a  UR                  nXt:”  a  UnUR                  U:”  d  Mr  UR                  nM€     U R                   nX(:w  a1  U R                  R                  U R                  U R                  5        OU R                  R                  X4U5        U R                  5         [        U5       H  nUR                  U 5        M     U R                  5         U R                  U R!                  U 5      5        U R#                  5         g)a  Undo a batch of Edits.

The sequence must be chronologically ordered by edit time.

There must be no edits missing from the sequence, or the resulting content
will be incorrect.

Args:
    edits: The edits to undo, in the order they were originally performed.
NrN  rÕ   )r¾  rd  Úreversedr˜   Ú_edit_resultrf  re  rå   rÃ  ro  r¥   rc  rÄ  rg  r  r4  rÁ   r  ©	rº   rr  ri  Úminimum_topÚmaximum_old_bottomÚmaximum_new_bottomrh  rf  rk  s	            r\   rp  ÚTextArea._undo_batch¼  sE  € ö Øà×,Ñ,ÐØ˜B‘i—m‘mˆØ#ÐØ#ÐÜ˜U–OˆDØ�I‰I�dŒOà26×2C×2C�×!Ñ!×.Ò.Èð ð �x‰x˜+Ó%Ø"Ÿh™h�ØÓ0Ø%1Ð"Ø�{‰{Ð/Õ/Ø%)§[¡[Ò"ñ $ð  ×,Ñ,ÐØÓ/Ø×!Ñ!×&Ñ& t§¡¸×8IÑ8IÕJà×!Ñ!×,Ñ,ØÐ1Côð 	×ÑÔÜ˜U–OˆDØ�J‰J�tÖñ $à×!Ñ!Ô#Ø×Ñ˜$Ÿ,™, tÓ,Ô-Ø×ÑÕ r[   c                óê  • U(       d  gU R                   nUS   R                  nSnSnU H}  nUR                  U SS9  UR                  (       a  UR                  R                  OSnUR                  U:  a  UR                  nXu:”  a  UnUR
                  U:”  d  Mq  UR
                  nM     U R                   nX(:w  a1  U R                  R                  U R                  U R                  5        OU R                  R                  UUU5        U R                  5         U H  nUR                  U 5        M     U R                  5         U R                  U R                  U 5      5        U R!                  5         g)a  Redo a batch of Edits in order.

The sequence must be chronologically ordered by edit time.

Edits are applied from the start of the sequence to the end.

There must be no edits missing from the sequence, or the resulting content
will be incorrect.

Args:
    edits: The edits to redo.
Nr   rÕ   F)Úrecord_selection)r¾  rd  ra  rƒ  rf  re  rå   rÃ  ro  r¥   rc  rÄ  rg  r  r4  rÁ   r  r„  s	            r\   r|  ÚTextArea._redo_batché  sE  € ö Øà×,Ñ,ÐØ˜A‘h—l‘lˆØ#ÐØ#ÐÛˆDØ�G‰G�D¨5ˆGÑ1à26×2C×2C�×!Ñ!×.Ò.Èð ð �x‰x˜+Ó%Ø"Ÿh™h�ØÓ0Ø%1Ð"Ø�{‰{Ð/Õ/Ø%)§[¡[Ò"ñ ð  ×,Ñ,ÐØÓ/Ø×!Ñ!×&Ñ& t§¡¸×8IÑ8IÕJà×!Ñ!×,Ñ,ØØ"Ø"ôð 	×ÑÔÛˆDØ�J‰J�tÖñ à×!Ñ!Ô#Ø×Ñ˜$Ÿ,™, tÓ,Ô-Ø×ÑÕ r[   c              ƒ  óX  #   • U R                  5         U R                  (       a  gUR                  nSS0nU R                  S:X  am  US:X  a;  UR	                  5         UR                  5         U R                  R                  5         gU R                  S:X  a  SUS'   OS	U R                  5       -  US'   UR                  (       d  X#;   aa  UR	                  5         UR                  5         UR                  X!R                  5      nUc   eU R                  u  pVU R                  XEU5        gg7f)
z8Handle key presses which correspond to document inserts.NÚenterÚ
rï   ÚescapeÚtabsr
  r  Ú )r$  r©   r	  rÊ   ÚstopÚprevent_defaultÚscreenÚ
focus_nextrÚ   Ú_find_columns_to_next_tab_stopÚis_printablerù  r
  rŸ   Ú_replace_via_keyboard)rº   Úeventr	  Úinsert_valuesÚinsertr\  r/  s          r\   Ú_on_keyÚTextArea._on_key  s  é € ð 	×ÑÔà�>�>Øà�i‰iˆà�Tð
ˆð ×Ñ Ó(Ø�h‹Ø—
‘
”Ø×%Ñ%Ô'Ø—‘×&Ñ&Ô(ØØ×Ñ 6Ó)Ø'+�˜eÒ$à'*¨T×-PÑ-PÓ-RÑ'R�˜eÑ$à×× Ó!5Ø�J‰JŒLØ×!Ñ!Ô#Ø"×&Ñ& s¯O©OÓ<ˆFð Ñ%Ð%Ð%ØŸ™‰JˆEØ×&Ñ& v°cÕ:ð "6ùs   ‚D(D*c                ó    • U R                   u  pU R                  U   nU R                  nU(       d  U$ U R                  X5      nUXE-   U-  -
  nU$ )a  Get the location of the next tab stop after the cursors position on the current line.

If the cursor is already at a tab stop, this returns the *next* tab stop location.

Returns:
    The number of cells to the next tab stop from the current cursor column.
)r6  rä   r¥   Úget_column_width)rº   r7  r8  Ú	line_textr¥   Úwidth_before_cursorÚspaces_to_inserts          r\   r–  Ú'TextArea._find_columns_to_next_tab_stop;  sc   € ð %)×$8Ñ$8Ñ!ˆ
Ø—M‘M *Ñ-ˆ	Ø×(Ñ(ˆÞØÐà"×3Ñ3°JÓNÐØ'ØÑ/°<Ñ?ñ
Ðð  Ðr[   c                ó  • U R                   u  p#UR                  U R                  -
  U-   U R                  R                  -
  nUR
                  U-   U R                  R                  -
  nU R                  R                  [        XE5      5      nU$ )zºGiven a MouseEvent, return the row and column offset of the event in document-space.

Args:
    event: The MouseEvent.

Returns:
    The location of the mouse event within the document.
)
r¡  Úxr¾  rC  rz   rû  rd  rå   Úoffset_to_locationr2   )rº   r™  rÿ  r   Útarget_xÚtarget_yÚlocations          r\   Úget_target_document_locationÚ%TextArea.get_target_document_locationP  su   € ð "×/Ñ/ÑˆØ—7‘7˜T×.Ñ.Ñ.°Ñ9¸D¿K¹K×<LÑ<LÑLˆØ—7‘7˜XÑ%¨¯©¯©Ñ7ˆØ×(Ñ(×;Ñ;¼FÀ8Ó<VÓWˆØˆr[   c                óª   • SnU R                   (       a=  [        [        U R                  R                  S-
  U R
                  -   5      5      U-   nU$ SnU$ )z¨The width of the gutter (the left column containing line numbers).

Returns:
    The cell-width of the line number column. If `show_line_numbers` is `False` returns 0.
r  r¢   r   )r¡   rÍ  rd   rä   rÌ  r£   )rº   Úgutter_marginr¾  s      r\   r¾  ÚTextArea.gutter_width_  sd   € ð ˆð ×%×%ô ”�D—M‘M×,Ñ,¨qÑ0°4×3IÑ3IÑIÓJÓKØñð 	ð Ðð ð	 	ð Ðr[   c                ó0  ^ • S	U 4S jjnT R                   R                  R                  T USS9  T R                  T R                  ST R
                  SS9  T R                  ST R                  T R                  =(       a    T R                  (       + S9T l
        g )
Nc                óP   >• [        TR                  TR                  5      Tl        g)zASignal callback to unselect when arbitrary text selection starts.N)r   r6  rŸ   )r”  rº   s    €r\   Útext_selection_startedÚ2TextArea._on_mount.<locals>.text_selection_startedq  s   ø€ ä& t×';Ñ';¸T×=QÑ=QÓRˆD�Nr[   T)Ú	immediaterž   Fr    g      à?)Úpause)r”  r(   r¾   ÚNone)r”  Útext_selection_started_signalÚ	subscribeÚwatchr&  rw  Úset_intervalÚ_toggle_cursor_blink_visibler§   r?  Úblink_timer)rº   r™  r±  s   `  r\   Ú	_on_mountÚTextArea._on_mountp  s‰   ø€ ÷	Sð 	�‰×1Ñ1×;Ñ;ØÐ(°Dð 	<ñ 	
ð
 	�
‰
�4—8‘8˜W d×&=Ñ&=ÀEˆ
ÑJØ×,Ñ,ØØ×-Ñ-Ø×(Ñ(×;¨T¯^©^Ô<ð -ð 
ˆÕr[   c                ó¦   • U R                   R                  (       d  gU R                  (       + U l        U R                  u  pU R	                  U5        g)zCToggle visibility of the cursor for the purposes of 'cursor blink'.N)r”  Ú	is_activer¯   rç   r3  ©rº   r:  r  s      r\   rº  Ú%TextArea._toggle_cursor_blink_visible�  s>   € à�{‰{×$×$Øà#'×#7Ñ#7Ô7ˆÔØ×)Ñ)‰ˆØ×Ñ˜8Õ$r[   c                óB   • U R                   u  pU R                  U5        g)zCWhen the cursor visibility is toggled, ensure the row is refreshed.N)rç   r3  rÀ  s      r\   Ú_watch__cursor_visibleÚTextArea._watch__cursor_visibleŠ  s   € à×)Ñ)‰ˆØ×Ñ˜8Õ$r[   c                óŽ   • U R                   (       a4  SU l        U R                  (       a  U R                  R	                  5         ggg)zReset the cursor blink timer.TN)r§   r¯   r-  r»  Úresetr¹   s    r\   r$  ÚTextArea._restart_blink�  s6   € à××Ø#'ˆDÔ Ø��Ø× Ñ ×&Ñ&Õ(ð ð r[   c                óh   • Xl         U R                  (       a  U R                  R                  5         gg)z6Pause the cursor blinking but ensure it stays visible.N)r¯   r-  r»  r´  )rº   r#  s     r\   r)  ÚTextArea._pause_blink–  s&   € à&ÔØ�?�?Ø×Ñ×"Ñ"Õ$ð r[   c              ƒ  óä   #   • U R                  U5      n[        R                  " U5      U l        SU l        U R                  5         U R                  SS9  U R                  R                  5         g7f)zBUpdate the cursor position, and begin a selection using the mouse.TFr"  N)	rª  r   ÚcursorrŸ   rß   Úcapture_mouser)  rÞ   r(  )rº   r™  Útargets      r\   Ú_on_mouse_downÚTextArea._on_mouse_downœ  s]   é € à×2Ñ2°5Ó9ˆÜ"×)Ò)¨&Ó1ˆŒØˆŒð 	×ÑÔØ×Ñ %ÐÑ(Ø�‰×ÑÕ!ùó   ‚A.A0c              ƒ  óŽ   #   • U R                   (       a0  U R                  U5      nU R                  u  p4[        X25      U l        gg7f)z<Handles click and drag to expand and contract the selection.N)rß   rª  rŸ   r   )rº   r™  rÍ  Úselection_startr:  s        r\   Ú_on_mouse_moveÚTextArea._on_mouse_move§  s9   é € à�?�?Ø×6Ñ6°uÓ=ˆFØ!%§¡ÑˆOÜ& Ó?ˆD�Nð ùs   ‚AAc                ó–   • U R                   (       a8  SU l         U R                  5         U R                  5         U R                  5         gg)ú:Finalize the selection that has been made using the mouse.FN)rß   Úrelease_mouseÚrecord_cursor_widthr$  r¹   s    r\   Ú_end_mouse_selectionÚTextArea._end_mouse_selection®  s9   € à�?�?Ø#ˆDŒOØ×ÑÔ Ø×$Ñ$Ô&Ø×ÑÕ!ð	 r[   c              ƒ  ó,   #   • U R                  5         g7f)rÖ  N©rÙ  ©rº   r™  s     r\   Ú_on_mouse_upÚTextArea._on_mouse_up¶  ó   é € à×!Ñ!Õ#ùó   ‚c              ƒ  ó,   #   • U R                  5         g7f)zTFinalize the selection that has been made using the mouse when the widget is hidden.NrÜ  rÝ  s     r\   Ú_on_hideÚTextArea._on_hideº  rà  rá  c              ƒ  óä   #   • U R                   (       a  gU R                  " UR                  /U R                  Q76 =n(       a,  U R	                  UR
                  5        U R                  5         gg7f)zLWhen a paste occurs, insert the text from the paste event into the document.N)r©   r˜  rë   rŸ   r�  rf  rÈ   )rº   r™  rj  s      r\   Ú	_on_pasteÚTextArea._on_paste¾  sU   é € à�>�>ØØ×/Ò/°·
±
ÐL¸T¿^¹^ÒLÐLˆ6ÕLØ×Ñ˜V×0Ñ0Ô1Ø�J‰J�Lð MùrÐ  c                óL   • U R                   U   n[        X1U R                  5      $ )zïReturn the column that the cell width corresponds to on the given row.

Args:
    cell_width: The cell width to convert.
    row_index: The index of the row to examine.

Returns:
    The column corresponding to the cell width on that row.
)rä   r.   r¥   )rº   Ú
cell_widthÚ	row_indexrÑ  s       r\   r.   Ú#TextArea.cell_width_to_column_indexÆ  s%   € ð �}‰}˜YÑ'ˆÜ)¨$¸D×<MÑ<MÓNÐNr[   c                ó¶   • U R                   nUu  p4 X#   n[        USUR                  S-
  5      n[        US[	        U5      5      nX44$ ! [         a    Sn NAf = f)zÃClamp the given location to the nearest visitable location.

Args:
    location: The location to clamp.

Returns:
    The nearest location that we could conceivably navigate to using the cursor.
r°   r   r¢   )rä   r1  r6   rÌ  rÍ  )rº   r©  rä   rÏ  rÐ  r   s         r\   r[  ÚTextArea.clamp_visitableÓ  sk   € ð —=‘=ˆà‰ˆð	Ø ™ˆIô �C˜˜H×/Ñ/°!Ñ3Ó4ˆÜ�v˜q¤# i£.Ó1ˆàˆ{Ðøô ó 	ØŠIð	ús   ’A	 Á	AÁAc           	     óÖ   • U R                   (       d  [        SS5      $ U R                  5         U R                  u  p4U R	                  [        X4SSS9[        U R                  S9USUS9nU$ )a  Scroll the `TextArea` such that the cursor is visible on screen.

Args:
    center: True if the cursor should be scrolled to the center.
    animate: True if we should animate while scrolling.

Returns:
    The offset that was scrolled to bring the cursor into view.
r   é   r¢   )r¿  r£  )r|   T)ÚspacingÚanimateÚforcer·  )rß  r2   rK  rç   Úscroll_to_regionr3   r5   r¾  )rº   r·  rñ  r¥  rû  r¡  s         r\   r0  ÚTextArea.scroll_cursor_visibleê  sr   € ð ××Ü˜!˜Q“<ÐØ×%Ñ%Ô'à×"Ñ"‰ˆØ×-Ñ-Ü�1˜q¨Ñ+Ü $×"3Ñ"3Ñ4ØØØð .ð 
ˆð Ðr[   c                ó<  • U R                   (       d  gU(       a  U R                  u  pV[        XQ5      U l        O[        R                  " U5      U l        U(       a  U R	                  5         U(       a  U R                  U5        U R                  R                  5         g)a”  Move the cursor to a location.

Args:
    location: The location to move the cursor to.
    select: If True, select text between the old and new location.
    center: If True, scroll such that the cursor is centered.
    record_width: If True, record the cursor column cell width after navigating
        so that we jump back to the same width the next time we move to a row
        that is wide enough.
N)rß  rŸ   r   rË  rØ  r0  rÞ   r(  )rº   r©  Úselectr·  Úrecord_widthr\  Ú_ends          r\   r�  ÚTextArea.move_cursor  sl   € ð" ××ØÞØŸ.™.‰KˆEÜ& uÓ7ˆD�Nä&×-Ò-¨hÓ7ˆDŒNæØ×$Ñ$Ô&æØ×&Ñ& vÔ.à�‰×ÑÕ!r[   c                ó€   • U R                   nU R                  u  pxUu  pšU" X‘-   X¢-   45      nU R                  X³XE5        g)a  Move the cursor relative to its current location in document-space.

Args:
    rows: The number of rows to move down by (negative to move up)
    columns:  The number of columns to move right by (negative to move left)
    select: If True, select text between the old and new location.
    center: If True, scroll such that the cursor is centered.
    record_width: If True, record the cursor column cell width after navigating
        so that we jump back to the same width the next time we move to a row
        that is wide enough.
N)r[  rŸ   r�  )rº   ÚrowsÚcolumnsrö  r·  r÷  r[  Ú_startr/  Úcurrent_rowÚcurrent_columnrÍ  s               r\   Úmove_cursor_relativeÚTextArea.move_cursor_relative%  sG   € ð& ×.Ñ.ˆØ—n‘n‰ˆØ&)Ñ#ˆÙ  +Ñ"4°nÑ6NÐ!OÓPˆØ×Ñ˜¨Õ>r[   c                ó    •  U R                   U   n[        US4U[        U5      45      U l        U R	                  5         g! [
         a     gf = f)zpSelect all the text in the specified line.

Args:
    index: The index of the line to select (starting from 0).
r   N)rä   r   rÍ  rŸ   rØ  r1  )rº   ÚindexrÑ  s      r\   r‡   ÚTextArea.select_line>  sR   € ð	'Ø—=‘= Ñ'ˆDô '¨¨q z°E¼3¸t»9Ð3EÓFˆDŒNØ×$Ñ$Õ&øô	 ó 	Ùð	ús   ‚A  Á 
AÁAc                óB   • U R                   u  pU R                  U5        g)z(Select all the text on the current line.N)r6  r‡   )rº   r7  r:  s      r\   Úaction_select_lineÚTextArea.action_select_lineL  s   € à×,Ñ,‰ˆ
Ø×Ñ˜Õ$r[   c                ó°   • U R                   R                  S-
  n[        U R                   U   5      nSnX4n[        X45      U l        U R                  5         g)z)Select all of the text in the `TextArea`.r¢   rÕ   N)rä   rÌ  rÍ  r   rŸ   rØ  )rº   Ú	last_lineÚlength_of_last_linerÒ  Úselection_ends        r\   r‰   ÚTextArea.select_allQ  sO   € à—M‘M×,Ñ,¨qÑ0ˆ	Ü! $§-¡-°	Ñ":Ó;ÐØ ˆØ"Ð8ˆÜ" ?ÓBˆŒØ× Ñ Õ"r[   c                ó$   • U R                  5         g)z$Select all the text in the document.N)r‰   r¹   s    r\   Úaction_select_allÚTextArea.action_select_allZ  s   € à�‰Õr[   c                ó.   • U R                   R                  $ )zxThe current location of the cursor in the document.

This is a utility for accessing the `end` of `TextArea.selection`.
©rŸ   r/  r¹   s    r\   r6  ÚTextArea.cursor_location^  s   € ð �~‰~×!Ñ!Ð!r[   c                óT   • U R                  XR                  R                  (       + S9  g)ziSet the cursor_location to a new location.

If a selection is in progress, the anchor point will remain.
©rö  N)r�  rŸ   Úis_empty)rº   r©  s     r\   r6  r  f  s"   € ð 	×Ñ˜¯n©n×.EÑ.EÔ*EÐÒFr[   c                ó¤   • U R                   u  pU R                  u  p4U R                  u  pVpxXQ-   U-
  U R                  -   n	Xb-   U-
  n
[	        Xš5      $ )z0The offset of the cursor relative to the screen.)rç   r¡  Úcontent_regionr¾  r2   )rº   Úcursor_xr  rÿ  r   Úregion_xÚregion_yÚ_widthÚ_heightÚoffset_xr;  s              r\   r%  ÚTextArea.cursor_screen_offsetn  s`   € ð "×0Ñ0ÑˆØ!×/Ñ/ÑˆØ.2×.AÑ.AÑ+ˆ˜FàÑ&¨Ñ1°D×4EÑ4EÑEˆØÑ&¨Ñ1ˆä�hÓ)Ð)r[   c                ó:   • U R                   R                  S   S:H  $ )z4True if and only if the cursor is on the first line.r   r  r¹   s    r\   Úcursor_at_first_lineÚTextArea.cursor_at_first_linez  ó   € ð �~‰~×!Ñ! !Ñ$¨Ñ)Ð)r[   c                óh   • U R                   R                  S   U R                  R                  S-
  :H  $ )z3True if and only if the cursor is on the last line.r   r¢   )rŸ   r/  rä   rÌ  r¹   s    r\   Úcursor_at_last_lineÚTextArea.cursor_at_last_line  s-   € ð �~‰~×!Ñ! !Ñ$¨¯©×(@Ñ(@À1Ñ(DÑDÐDr[   c                ó:   • U R                   R                  S   S:H  $ )z.True if and only if the cursor is at column 0.r¢   r   r  r¹   s    r\   Úcursor_at_start_of_lineÚ TextArea.cursor_at_start_of_line„  r"  r[   c                ón   • U R                   R                  u  p[        U R                  U   5      nX#:H  nU$ )z6True if and only if the cursor is at the end of a row.)rŸ   r/  rÍ  rä   )rº   r7  r8  Ú
row_lengthÚcursor_at_ends        r\   Úcursor_at_end_of_lineÚTextArea.cursor_at_end_of_line‰  s7   € ð %)§N¡N×$6Ñ$6Ñ!ˆ
Ü˜Ÿ™ zÑ2Ó3ˆ
Ø%Ñ3ˆØÐr[   c                ó4   • U R                   R                  S:H  $ )z4True if and only if the cursor is at location (0, 0)rÕ   r  r¹   s    r\   Úcursor_at_start_of_textÚ TextArea.cursor_at_start_of_text‘  s   € ð �~‰~×!Ñ! VÑ+Ð+r[   c                ó@   • U R                   =(       a    U R                  $ )zBTrue if and only if the cursor is at the very end of the document.)r$  r,  r¹   s    r\   Úcursor_at_end_of_textÚTextArea.cursor_at_end_of_text–  s   € ð ×'Ñ'×F¨D×,FÑ,FÐFr[   c                óî   • U R                   (       d  U R                  5         gU(       d  U R                  R                  (       a  U R	                  5       O[        U R                  6 nU R                  X!S9  g)a  Move the cursor one location to the left.

If the cursor is at the left edge of the document, try to move it to
the end of the previous line.

If text is selected, move the cursor to the start of the selection.

Args:
    select: If True, select the text while moving.
Nr  )rß  Úscroll_leftrŸ   r  Úget_cursor_left_locationÚminr�  ©rº   rö  rÍ  s      r\   Úaction_cursor_leftÚTextArea.action_cursor_leftœ  s_   € ð ××Ø×ÑÔØö ˜Ÿ™×0×0ð ×)Ñ)Ô+ä�d—n‘nÐ%ð 	ð
 	×Ñ˜ÐÒ/r[   c                óL   • U R                   R                  U R                  5      $ )zvGet the location the cursor will move to if it moves left.

Returns:
    The location of the cursor if it moves left.
)ræ   Úget_location_leftr6  r¹   s    r\   r6  Ú!TextArea.get_cursor_left_location±  s   € ð �~‰~×/Ñ/°×0DÑ0DÓEÐEr[   c                óH  • U R                   (       d  U R                  5         gU R                  (       a  U R                  U R                  5        gU(       d  U R                  R
                  (       a  U R                  5       O[        U R                  6 nU R                  X!S9  g)zýMove the cursor one location to the right.

If the cursor is at the end of a line, attempt to go to the start of the next line.

If text is selected, move the cursor to the end of the selection.

Args:
    select: If True, select the text while moving.
Nr  )	rß  Úscroll_rightr±   r›  rŸ   r  Úget_cursor_right_locationr½  r�  r8  s      r\   Úaction_cursor_rightÚTextArea.action_cursor_right¹  sy   € ð ××Ø×ÑÔØØ�?�?Ø�K‰K˜Ÿ™Ô(Øö ˜Ÿ™×0×0ð ×*Ñ*Ô,ä�d—n‘nÐ%ð 	ð
 	×Ñ˜ÐÒ/r[   c                óL   • U R                   R                  U R                  5      $ )z‚Get the location the cursor will move to if it moves right.

Returns:
    the location the cursor will move to if it moves right.
)ræ   Úget_location_rightr6  r¹   s    r\   r@  Ú"TextArea.get_cursor_right_locationÐ  ó   € ð �~‰~×0Ñ0°×1EÑ1EÓFÐFr[   c                óŠ   • U R                   (       d  U R                  5         gU R                  5       nU R                  USUS9  g)zYMove the cursor down one cell.

Args:
    select: If True, select the text while moving.
NF©r÷  rö  )rß  Úscroll_downÚget_cursor_down_locationr�  r8  s      r\   Úaction_cursor_downÚTextArea.action_cursor_downØ  s?   € ð ××Ø×ÑÔØØ×.Ñ.Ó0ˆØ×Ñ˜¨e¸FÐÒCr[   c                óL   • U R                   R                  U R                  5      $ )z€Get the location the cursor will move to if it moves down.

Returns:
    The location the cursor will move to if it moves down.
)ræ   Úget_location_belowr6  r¹   s    r\   rJ  Ú!TextArea.get_cursor_down_locationä  rF  r[   c                óŠ   • U R                   (       d  U R                  5         gU R                  5       nU R                  USUS9  g)zWMove the cursor up one cell.

Args:
    select: If True, select the text while moving.
NFrH  )rß  Ú	scroll_upÚget_cursor_up_locationr�  r8  s      r\   Úaction_cursor_upÚTextArea.action_cursor_upì  s=   € ð ××Ø�N‰NÔØØ×,Ñ,Ó.ˆØ×Ñ˜¨e¸FÐÒCr[   c                óL   • U R                   R                  U R                  5      $ )z|Get the location the cursor will move to if it moves up.

Returns:
    The location the cursor will move to if it moves up.
)ræ   Úget_location_abover6  r¹   s    r\   rR  ÚTextArea.get_cursor_up_locationø  rF  r[   c                ó†   • U R                   (       d  U R                  5         gU R                  5       nU R                  X!S9  g)z'Move the cursor to the end of the line.Nr  )rß  Ú
scroll_endÚget_cursor_line_end_locationr�  )rº   rö  r©  s      r\   Úaction_cursor_line_endÚTextArea.action_cursor_line_end 	  s7   € à××Ø�O‰OÔØØ×4Ñ4Ó6ˆØ×Ñ˜ÐÒ1r[   c                óL   • U R                   R                  U R                  5      $ )z‚Get the location of the end of the current line.

Returns:
    The (row, column) location of the end of the cursors current line.
)ræ   Úget_location_endr6  r¹   s    r\   rZ  Ú%TextArea.get_cursor_line_end_location	  s   € ð �~‰~×.Ñ.¨t×/CÑ/CÓDÐDr[   c                ó„   • U R                   (       d  U R                  5         gU R                  SS9nU R                  X!S9  g)z)Move the cursor to the start of the line.NT©Ú
smart_homer  )rß  Úscroll_homeÚget_cursor_line_start_locationr�  r8  s      r\   Úaction_cursor_line_startÚ!TextArea.action_cursor_line_start	  s>   € à××Ø×ÑÔØØ×4Ñ4ÀÐ4ÐEˆØ×Ñ˜ÐÒ/r[   c                óJ   • U R                   R                  U R                  US9$ )ac  Get the location of the start of the current line.

Args:
    smart_home: If True, use "smart home key" behavior - go to the first
        non-whitespace character on the line, and if already there, go to
        offset 0. Smart home only works when wrapping is disabled.

Returns:
    The (row, column) location of the start of the cursors current line.
ra  )ræ   Úget_location_homer6  )rº   rb  s     r\   rd  Ú'TextArea.get_cursor_line_start_location	  s+   € ð �~‰~×/Ñ/Ø× Ñ ¨Zð 0ð 
ð 	
r[   c                óŠ   • U R                   (       d  gU R                  (       a  gU R                  5       nU R                  X!S9  g)zƒMove the cursor left by a single word, skipping trailing whitespace.

Args:
    select: Whether to select while moving the cursor.
Nr  )rª   r/  Úget_cursor_word_left_locationr�  r8  s      r\   Úaction_cursor_word_leftÚ TextArea.action_cursor_word_left'	  s;   € ð ××ØØ×'×'ØØ×3Ñ3Ó5ˆØ×Ñ˜ÐÒ/r[   c                óL  • U R                   u  pUS:”  a&  US:X  a   US-
  [        U R                  US-
     5      4$ U R                  U   SU nUR                  5       n[	        [
        R                  " U R                  U5      5      nU(       a  US   R                  5       OSnX4$ )z†Get the location the cursor will jump to if it goes 1 word left.

Returns:
    The location the cursor will jump on "jump word left".
r   r¢   NrN  )	r6  rÍ  rä   Úrstriprá   rÛ   ÚfinditerrÝ   r\  )rº   r7  r8  rÑ  Úsearch_stringÚmatchess         r\   rk  Ú&TextArea.get_cursor_word_left_location4	  s�   € ð %)×$8Ñ$8Ñ!ˆ
Ø˜‹>˜m¨qÓ0à ‘>¤3 t§}¡}°ZÀ!±^Ñ'DÓ#EÐEÐEð �}‰}˜ZÑ(¨¨-Ð8ˆØŸ™›ˆÜ”r—{’{ 4×#5Ñ#5°}ÓEÓFˆÞ/6˜ ™×)Ñ)Ô+¸AˆØÐ(Ð(r[   c                óŠ   • U R                   (       d  gU R                  (       a  gU R                  5       nU R                  X!S9  g)zDMove the cursor right by a single word, skipping leading whitespace.Nr  )rª   r2  Úget_cursor_word_right_locationr�  r8  s      r\   Úaction_cursor_word_rightÚ!TextArea.action_cursor_word_rightF	  s9   € à××ØØ×%×%Øà×4Ñ4Ó6ˆØ×Ñ˜ÐÒ/r[   c                óÂ  • U R                   R                  u  pU R                  U   nXR                  R                  S-
  :  a  U[	        U5      :X  a  US-   S4$ X2S n[	        U5      nUR                  5       nU[	        U5      -
  n[        [        R                  " U R                  U5      5      nU(       a  X'S   R                  5       U-   -  nX4$ [	        U5      nX4$ )zˆGet the location the cursor will jump to if it goes 1 word right.

Returns:
    The location the cursor will jump on "jump word right".
r¢   r   N)rŸ   r/  rä   rÌ  rÍ  Úlstriprá   rÛ   rp  rÝ   r\  )rº   r7  r8  rÑ  rq  Úpre_strip_lengthÚstrip_offsetrr  s           r\   ru  Ú'TextArea.get_cursor_word_right_locationP	  sÞ   € ð %)§N¡N×$6Ñ$6Ñ!ˆ
Ø�}‰}˜ZÑ(ˆØŸ™×0Ñ0°1Ñ4Ó4¸Ì#ÈdË)Ó9Sà ‘> 1Ð$Ð$ð ˜^Ð,ˆÜ˜}Ó-ÐØ%×,Ñ,Ó.ˆØ'¬#¨mÓ*<Ñ<ˆä”r—{’{ 4×#5Ñ#5°}ÓEÓFˆÞØ Q™Z×-Ñ-Ó/°,Ñ>Ñ>ˆMð Ð(Ð(ô   ›IˆMàÐ(Ð(r[   c                ó  • U R                   (       d  U R                  5         gU R                  R                  nU R                  u  p#U R
                  R                  UU* 5      nU R                  U* SS9  U R                  U5        g)z'Move the cursor and scroll up one page.NF©rû  rñ  )	rª   Úscroll_page_uprï  r£  rŸ   ræ   Úget_location_at_y_offsetÚscroll_relativer�  ©rº   r£  r:  r6  rÍ  s        r\   Úaction_cursor_page_upÚTextArea.action_cursor_page_upj	  sx   € à××Ø×ÑÔ!ØØ×"Ñ"×)Ñ)ˆØ!Ÿ^™^ÑˆØ—‘×8Ñ8ØØˆGó
ˆð 	×Ñ ˜w°ÐÑ6Ø×Ñ˜Õ r[   c                ó
  • U R                   (       d  U R                  5         gU R                  R                  nU R                  u  p#U R
                  R                  UU5      nU R                  USS9  U R                  U5        g)z)Move the cursor and scroll down one page.NFr~  )	rª   Úscroll_page_downrï  r£  rŸ   ræ   r€  r�  r�  r‚  s        r\   Úaction_cursor_page_downÚ TextArea.action_cursor_page_downx	  st   € à××Ø×!Ñ!Ô#ØØ×"Ñ"×)Ñ)ˆØ!Ÿ^™^ÑˆØ—‘×8Ñ8ØØó
ˆð 	×Ñ˜v¨uÐÑ5Ø×Ñ˜Õ r[   c                ód   • U R                   U   n[        [        USU U R                  5      5      $ )zìGet the cell offset of the column from the start of the row.

Args:
    row: The row index.
    column: The column index (codepoint offset from start of row).

Returns:
    The cell width of the column relative to the start of the row.
N)rä   r-   r&   r¥   )rº   rÏ  rÐ  rÑ  s       r\   rŸ  ÚTextArea.get_column_width†	  s1   € ð �}‰}˜SÑ!ˆÜÔ*¨4°°¨=¸$×:KÑ:KÓLÓMÐMr[   c                ór   • U R                   R                  U R                  5      u  pXR                  l        g)a  Record the current cell width of the cursor.

This is used where we navigate up and down through rows.
If we're in the middle of a row, and go down to a row with no
content, then we go down to another row, we want our cursor to
jump back to the same offset that we were originally at.
N)rå   rJ  r6  ræ   Úlast_x_offset)rº   Úcursor_x_offsetr:  s      r\   rØ  ÚTextArea.record_cursor_width“	  s2   € ð "×2Ñ2×EÑEØ× Ñ ó
Ñˆð (7�‰Õ$r[   ©Úmaintain_selection_offsetc               ó”   • [        U5      S:”  a  U R                  5         Uc  U R                  nU R                  [	        XX#5      5      $ )aÌ  Insert text into the document.

Args:
    text: The text to insert.
    location: The location to insert text, or None to use the cursor location.
    maintain_selection_offset: If True, the active Selection will be updated
        such that the same text is selected before and after the selection,
        if possible. Otherwise, the cursor will jump to the end point of the
        edit.

Returns:
    An `EditResult` containing information about the edit.
r¢   )rÍ  r$  r6  rh  r!   )rº   rë   r©  r�  s       r\   r›  ÚTextArea.insert¡	  sB   € ô( ˆt‹9�q‹=Ø×ÑÔ!ØÑØ×+Ñ+ˆHØ�y‰yœ˜d¨hÓRÓSÐSr[   c               ó:   • U R                  [        SXU5      5      $ )a±  Delete the text between two locations in the document.

Args:
    start: The start location.
    end: The end location.
    maintain_selection_offset: If True, the active Selection will be updated
        such that the same text is selected before and after the selection,
        if possible. Otherwise, the cursor will jump to the end point of the
        edit.

Returns:
    An `EditResult` containing information about the edit.
r°   ©rh  r!   )rº   r\  r/  r�  s       r\   ÚdeleteÚTextArea.delete»	  s   € ð( �y‰yœ˜b %Ð.GÓHÓIÐIr[   c               ó8   • U R                  [        XX45      5      $ )aÅ  Replace text in the document with new text.

Args:
    insert: The text to insert.
    start: The start location
    end: The end location.
    maintain_selection_offset: If True, the active Selection will be updated
        such that the same text is selected before and after the selection,
        if possible. Otherwise, the cursor will jump to the end point of the
        edit.

Returns:
    An `EditResult` containing information about the edit.
r”  )rº   r›  r\  r/  r�  s        r\   r}  ÚTextArea.replaceÑ	  s   € ð, �y‰yœ˜f¨SÓLÓMÐMr[   c                óL   • U R                  SU R                  R                  SS9$ )zhDelete all text from the document.

Returns:
    An EditResult relating to the deletion of all content.
rÕ   Fr�  )r•  rä   r/  r¹   s    r\   r   ÚTextArea.clearé	  s$   € ð �{‰{˜6 4§=¡=×#4Ñ#4ÐPUˆ{ÐVÐVr[   c                óF   • U R                   (       a  gU R                  XSS9$ )a
  Handle a deletion performed using a keyboard (as opposed to the API).

Args:
    start: The start location of the text to delete.
    end: The end location of the text to delete.

Returns:
    An EditResult or None if no edit was performed (e.g. on read-only mode).
NFr�  )r©   r•  rW  s      r\   Ú_delete_via_keyboardÚTextArea._delete_via_keyboardñ	  s!   € ð �>�>ØØ�{‰{˜5Àˆ{ÐGÐGr[   c                óH   • U R                   (       a  gU R                  XUSS9$ )aA  Handle a replacement performed using a keyboard (as opposed to the API).

Args:
    insert: The text to insert into the document.
    start: The start location of the text to replace.
    end: The end location of the text to replace.

Returns:
    An EditResult or None if no edit was performed (e.g. on read-only mode).
NFr�  )r©   r}  )rº   r›  r\  r/  s       r\   r˜  ÚTextArea._replace_via_keyboard
  s#   € ð  �>�>ØØ�|‰|˜F¨3È%ˆ|ÐPÐPr[   c                ó¬   • U R                   (       a  gU R                  nUu  p#UR                  (       a  U R                  5       nU R	                  X#5        g)z�Deletes the character to the left of the cursor and updates the cursor location.

If there's a selection, then the selected range is deleted.N)r©   rŸ   r  r6  rœ  ©rº   rŸ   r\  r/  s       r\   Úaction_delete_leftÚTextArea.action_delete_left
  sC   € ð
 �>�>Øà—N‘Nˆ	Ø‰
ˆà××Ø×/Ñ/Ó1ˆCà×!Ñ! %Õ-r[   c                ó¬   • U R                   (       a  gU R                  nUu  p#UR                  (       a  U R                  5       nU R	                  X#5        g)z˜Deletes the character to the right of the cursor and keeps the cursor at the same location.

If there's a selection, then the selected range is deleted.N)r©   rŸ   r  r@  rœ  r¡  s       r\   Úaction_delete_rightÚTextArea.action_delete_right'
  sC   € ð �>�>Øà—N‘Nˆ	Ø‰
ˆà××Ø×0Ñ0Ó2ˆCà×!Ñ! %Õ-r[   c                óH   • U R                   (       a  gU R                  5         g)z5Deletes the lines which intersect with the selection.N)r©   Ú_delete_cursor_liner¹   s    r\   Úaction_delete_lineÚTextArea.action_delete_line6
  s   € à�>�>ØØ× Ñ Õ"r[   c                óØ   • U R                   u  p[        X45      u  pUu  p4Uu  pVX5:w  a  US:X  a  US:¼  a  US-  nUS4nUS-   S4nU R                  Xx5      n	U	b  U R                  USS9  U	$ )zGDeletes the line (including the line terminator) that the cursor is on.r   r¢   F)rü  r÷  )rŸ   r  rœ  r   )
rº   r\  r/  Ú	start_rowÚ_start_columnÚend_rowÚ
end_columnÚfrom_locationÚto_locationÚdeletions
             r\   r¨  ÚTextArea._delete_cursor_line<
  s�   € à—^‘^‰
ˆÜ˜U˜LÓ)‰
ˆØ#(Ñ ˆ	Ø!Ñˆð Ó J°!£O¸À1»Ø�q‰LˆGà" A˜ˆØ ‘{ AÐ&ˆà×,Ñ,¨]ÓHˆØÑØ×%Ñ%¨jÀuÐ%ÑMØˆr[   c                óä   • U R                   (       a  gU R                  u  pX:X  a  U R                  5       nOU R                  X5      nUb&  U R                  R                  UR                  5        gg)z(Cut text (remove and copy to clipboard).N)r©   rŸ   r¨  rœ  r&  Úcopy_to_clipboardÚreplaced_text)rº   r\  r/  Úedit_results       r\   Ú
action_cutÚTextArea.action_cutP
  s]   € à�>�>ØØ—^‘^‰
ˆØ‹<Ø×2Ñ2Ó4‰Kà×3Ñ3°EÓ?ˆKàÑ"Ø�H‰H×&Ñ& {×'@Ñ'@ÕAð #r[   c                ót   • U R                   nU(       a  U R                  R                  U5        g[        5       e)zCopy selection to clipboard.N)rX  r&  rµ  r   )rº   rX  s     r\   Úaction_copyÚTextArea.action_copy]
  s*   € à×*Ñ*ˆÞØ�H‰H×&Ñ& }Õ5ä“,Ðr[   c                óÔ   • U R                   (       a  gU R                  R                  nU R                  " U/U R                  Q76 =n(       a  U R                  UR                  5        gg)zPaste from local clipboard.N)r©   r&  Ú	clipboardr˜  rŸ   r�  rf  )rº   r¾  rj  s      r\   Úaction_pasteÚTextArea.action_pastee
  sT   € à�>�>ØØ—H‘H×&Ñ&ˆ	Ø×/Ò/°	ÐK¸D¿N¹NÒKÐKˆ6ÕKØ×Ñ˜V×0Ñ0Õ1ð Lr[   c                ó>  • U R                   (       a  gU R                  (       aC  U R                  nUu  p#UR                  (       a  U R	                  5       nU R                  X#5        gU R                  R                  nU R                  5       nU R                  XE5        g)z:Deletes from the cursor location to the start of the line.N)r©   r'  rŸ   r  r6  rœ  r/  rd  )rº   rŸ   r\  r/  r°  r±  s         r\   Úaction_delete_to_start_of_lineÚ'TextArea.action_delete_to_start_of_linem
  su   € à�>�>Øà×'×'ØŸ™ˆIØ"‰JˆEØ×!×!Ø×3Ñ3Ó5�Ø×%Ñ% eÕ1à ŸN™N×.Ñ.ˆMØ×=Ñ=Ó?ˆKØ×%Ñ% mÕAr[   c                ór   • U R                   R                  nU R                  5       nU R                  X5        g)z8Deletes from the cursor location to the end of the line.N)rŸ   r/  rZ  rœ  )rº   r°  r±  s      r\   Úaction_delete_to_end_of_lineÚ%TextArea.action_delete_to_end_of_line}
  s-   € àŸ™×*Ñ*ˆØ×7Ñ7Ó9ˆØ×!Ñ! -Õ=r[   c              ƒ  ó   #   • SnU R                  5       U R                  5       :X  a  SnOHU R                  R                  U R                  R                  s=:X  a  U R                  5       :X  a  O  OSnU R                  U5      I Sh  v•N   g N7f)z~Deletes from the cursor location to the end of the line, or deletes the line.

The line will be deleted if the line is empty.
Údelete_to_end_of_liner—   r�   N)rd  rZ  rŸ   r\  r/  Ú
run_action)rº   Úactions     r\   Ú+action_delete_to_end_of_line_or_delete_lineÚ4TextArea.action_delete_to_end_of_line_or_delete_lineƒ
  st   é € ð )ˆØ×.Ñ.Ó0°D×4UÑ4UÓ4WÓWà"‰Fà�N‰N× Ñ Ø�~‰~×!Ñ!õ3à×0Ñ0Ó2ö3ð $ˆFØ�o‰o˜fÓ%×%Ó%ùs   ‚BBÂBÂBc                óÞ   • U R                   (       a  gU R                  u  pX:w  a  U R                  X5        gU R                  5       nU R                  U R                  R                  U5        g)zKDeletes the word to the left of the cursor and updates the cursor location.N)r/  rŸ   rœ  rk  r/  )rº   r\  r/  r±  s       r\   Úaction_delete_word_leftÚ TextArea.action_delete_word_left—
  sY   € à×'×'Øð —^‘^‰
ˆØ‹<Ø×%Ñ% eÔ1Øà×8Ñ8Ó:ˆØ×!Ñ! $§.¡.×"4Ñ"4°kÕBr[   c                óÆ  • U R                   (       a  gU R                  u  pX:w  a  U R                  X5        gUu  p4U R                  U   US n[	        [
        R                  " SU5      5      n[        U R                  U   5      nU(       a  X4US   R                  5       -   4nO,X0R                  R                  S-
  :  a  XG:X  a  US-   S4nOX74nU R                  X(5        g)a9  Deletes the word to the right of the cursor and keeps the cursor at the same location.

Note that the location that we delete to using this action is not the same
as the location we move to when we move the cursor one word to the right.
This action does not skip leading whitespace, whereas cursor movement does.
Nz\s*\w+r   r¢   )
r2  rŸ   rœ  rä   rá   rÛ   rp  rÍ  r/  rÌ  )	rº   r\  r/  r7  r8  rÑ  rr  Úcurrent_row_lengthr±  s	            r\   Úaction_delete_word_rightÚ!TextArea.action_delete_word_right¦
  sÓ   € ð ×%×%Øà—^‘^‰
ˆØ‹<Ø×%Ñ% eÔ1Øà$'Ñ!ˆ
ð �}‰}˜ZÑ(¨¨Ð8ˆÜ”r—{’{ 9¨dÓ3Ó4ˆä  §¡¨zÑ!:Ó;ÐÞØ%°w¸q±z·~±~Ó7GÑ'GÐH‰KàŸ™×1Ñ1°AÑ5Ó5ØÓ3à%¨™>¨1Ð-‰Kà%Ð:ˆKà×!Ñ! #Õ3r[   )rç   r¯   rã   râ   rØ   ré   rà   rß   rF  rÙ   rÝ   r»  r¬   rä   rÞ   rÚ   rf   ræ   rŸ   r±   rÊ   rž   rÏ   rÖ  rå   )r°   )&rë   rd   rf   ú
str | Nonerž   rd   r¨   ÚboolrÊ   úLiteral['focus', 'indent']r©   rÕ  rª   rÕ  r¡   rÕ  r£   ÚintrË   r×  re   rÔ  rÌ   rÔ  rÍ   rÔ  rÎ   rÕ  rÏ   úRenderableType | Noner¬   rÕ  r­   rÕ  r³   ústr | Contentr¾   rµ  )&rë   rd   rf   rÔ  rž   rd   r¨   rÕ  rÊ   rÖ  r©   rÕ  rª   rÕ  r¡   rÕ  r£   r×  rË   r×  re   rÔ  rÌ   rÔ  rÍ   rÔ  rÎ   rÕ  rÏ   rØ  r¬   rÕ  r­   rÕ  r³   rÙ  r¾   rj   )rú   rd   r¾   rd   )r¾   rµ  rÅ   )r	  rd   r
  rÔ  r¾   rÕ  )rÈ   rÕ  r¾   rµ  )r5  r   rŸ   r   r¾   rµ  )r@  rÕ  r¾   rµ  )r©   rÕ  r¾   rµ  )rT  rd   rU  r   r¾   úLocation | None)rŸ   r   r¾   r   )rf   rÔ  r¾   rµ  )rž   rd   r¾   rµ  )r¾   zset[str])rž   r   r¾   rµ  )re   rd   rf   z
'Language'rg   rd   r¾   rµ  )re   rd   rg   rd   r¾   rµ  )rë   rd   rf   rÔ  r¾   rµ  )r¾   ztuple[int, int])rë   rd   r¾   rµ  )r¾   r×  )r¾   rÕ  )r\  r   r¾   zIterable[tuple[str, Location]])rä  r×  r¾   r   )rê  r3   r¾   zlist[Strip])rû  r×  r¾   r:   )r¾   rd   )rT  rd   r¾   rµ  )r¾   rÚ  )r\  r   r/  r   r¾   rd   )rh  r!   r¾   r   )rr  zSequence[Edit]r¾   rµ  )r™  z
events.Keyr¾   rµ  )r™  r1   r¾   r   )r™  zevents.Mountr¾   rµ  )T)r#  rÕ  r¾   rµ  )r™  zevents.MouseDownr¾   rµ  )r™  zevents.MouseMover¾   rµ  )r™  zevents.MouseUpr¾   rµ  )r™  zevents.Hider¾   rµ  )r™  zevents.Paster¾   rµ  )ré  r×  rê  r×  r¾   r×  )r©  r   r¾   r   )FF)r·  rÕ  rñ  rÕ  r¾   r2   )FFT)
r©  r   rö  rÕ  r·  rÕ  r÷  rÕ  r¾   rµ  )r   r   FFT)rû  r×  rü  r×  rö  rÕ  r·  rÕ  r÷  rÕ  r¾   rµ  )r  r×  r¾   rµ  )r¾   r   )r©  r   r¾   rµ  )r¾   r2   )F)rö  rÕ  r¾   rµ  )rb  rÕ  r¾   r   )rÏ  r×  rÐ  r×  r¾   r×  )rë   rd   r©  rÚ  r�  rÕ  r¾   r   )r\  r   r/  r   r�  rÕ  r¾   r   )
r›  rd   r\  r   r/  r   r�  rÕ  r¾   r   )r¾   r   )r\  r   r/  r   r¾   úEditResult | None)r›  rd   r\  r   r/  r   r¾   rÛ  )r¾   rÛ  )¥rU   rV   rW   rX   ÚDEFAULT_CSSrt   rh   r/   ÚBINDINGSr8   rf   rž   r   rŸ   r¡   r£   r¥   r¦   r§   r¨   r©   rª   r¬   r­   r¯   r±   r²   r³   r   r0   rÁ   rÇ   r×   Úclassmethodrò   Ústaticmethodrý   r  r  r  r  r*  r<  rA  rG  rK  r2  r]  r`  re  ri  rl  rp  rt  rw  rE  rÀ   r‰  rŒ  r‘  r”  r—  rê   r¥  r©  r­  r±  r´  r¹  ro  rd  rÈ  rP  rS  rÄ  rÜ  rß  rã  ré  r  rú  rë   ÚsetterrX  r[  rV  rh  r˜   rv  rš   r  rp  r|  rœ  r–  rª  r¾  r¼  rº  rÃ  r$  r)  rÎ  rÓ  rÙ  rÞ  rã  ræ  r.   r[  r0  r�  r   r‡   r  r‰   r  r6  r%  r   r$  r'  r,  r/  r2  r9  r6  rA  r@  rK  rJ  rS  rR  r[  rZ  re  rd  rl  rk  rv  ru  rƒ  r‡  rŸ  rØ  r›  r•  r}  r   rœ  r˜  r¢  r¥  r©  r¨  r¸  r»  r¿  rÂ  rÅ  rË  rÎ  rÒ  rZ   Ú__classcell__)rì   s   @r\   rj   rj   p   s/  ø‡ ðR€Kòh	-ÐÐ)ó 	ðð"FáØØØØñ		
ðFñ 	ØØØØñ		
ðFñ 	ØØØØñ		
ðFñ( 	ØØØØñ		
ð)Fñ4 	ØØØØñ		
ð5Fñ@ 	ØØØØñ		
ðAFñL 	ØØØØñ		
ðMFñX 	ØØØØñ		
ðYFñd 	ØØØØñ		
ðeFñp 	ØØØØñ		
ðqFñ~ 	ØØ$Ø%Øñ		
ðFñJ 	ØØ%Ø&Øñ		
ðKFñV 	ØØ%Ø&Øñ		
ðWFñb 	ØØ#Ø$Øñ		
ðcFñn 	ØØØØñ		
ðoFñz 	ØØØ Øñ		
ð{FñF 	ØØØ Øñ		
ðGFñR 	ØØ Ø!Øñ		
ðSFñb 	ØØØØñ		
ðcFñn 	ØØØØñ		
ðoFñ| 	ØØØ#Øñ		
ð}FñH 	Ø1ØØ*Øñ		
ðIFñT 	ØØØ$Øñ		
ðUFñ` 	ØØØ+Øñ		
ðaFñl 	ØØØØñ		
ðmFñx 	ØØØØñ		
ðyFñD 	ØØØØñ		
ðEFñP 	Ø$Ø%Ø"Øñ		
ðQFñ\ 	ØØ2Ø Øñ		
ð]Fñh 	ØØØØñ		
ðiFñt 	ØØØØñ		
ðuFñ@ 	ØØØØñ		
ðAF€HðN#ñJ &.¨dÀ$ÈUÑ%S€HÐ"ÓSðñ $ E¸ÀEÑJ€Eˆ=ÓJðñ &.Ù‹˜%¨tñ&€IÐ"ó ð	ñ )1°¸UÑ(CÐ�~ÓCðFñ (0°¸Ñ'>Ð�}Ó>Ø3á"*¨1°5Ñ"9€L�-Ó9ðñ ,4°D¸uÑ+EÐ˜.ÓEØSá#+¨D°uÑ#=€L�.Ó=Ø*á (¨°EÑ :€Iˆ~Ó:Ø(á (¨£€Iˆ~Ó/ðñ #+¨4£.€K�Ó0ðñ ' uÐ;MÑN€Gˆ^ÓNØ!á,4°T«NÐ˜>Ó:Ø.á&.¨u¸eÈ%Ñ&P€O�^ÓPð3ñ !)¨£€J�Ó,ØIá.6°t«nÐ˜^Ó<Ø@á+3°B«<€KÐ(Ó7Ø9àô"�'ó "ó ð"ð ô"˜7ó "ó ð"ð  ñzð  $ØØØ3:ØØ Ø"'Ø!"Ø!ØØØ"ØØ)-ØØ&*Ø%'ñ)zàðzð ð	zð
 ðzð ðzð 1ðzð ðzð ðzð  ðzð ðzð ðzð ðzð ðzð ðzð  ð!zð" 'ð#zð$ ð%zð&  $ð'zð( #ð)zð* 
÷+zò zðx ð ñ@
ð  $ØØØ3;ØØ Ø"&Ø!"Ø!ØØØ"ØØ)-ØØ&*Ø%'ñ)@
àð@
ð ð	@
ð
 ð@
ð ð@
ð 1ð@
ð ð@
ð ð@
ð  ð@
ð ð@
ð ð@
ð ð@
ð ð@
ð ð@
ð  ð!@
ð" 'ð#@
ð$ ð%@
ð&  $ð'@
ð( #ð)@
ð* 
ö+@
ó ð@
ðD ôó ð÷(&ð &õb÷Að Aõ*õ@-ðFØ"+ðFØ8AðFà	õFõB6õ*ò
ð1Øð1Ø)1ð1à	õ1õfGõ9õ%õ
%õ
%õ
%õ
õ
*õ .ðD ô ó ð õ")ð ô	?ó ð	?ðRàðRð ðRð ð	Rð
 
õRõ00õ"?0ðB ôCó ðCõ=õ=õ!õ0õIð ô	ó ð	õð
 ô>ó ð>ðØðà	'õð2Øðà	'õõ #ð ô
ó ð
ð ô=ó ð=õ7÷*ð *õ?õBd-ðL ô"ó ð"ð 
‡[�[ôó ðð ô/ó ð/ð
 ô/ó ð/õ8õ!õF$õ
õ$õ
õ+!õZ/!õb;õB õ*ð ôó ðõ 
õ"%õ%õ
)÷%ð %õ	"õ@õ"õ$õ$õõOõð0 5:ñØðØ-1ðà	öð: ØØ!ñ"àð"ð ð"ð ð	"ð
 ð"ð 
ö"ðF ØØØØ!ñ?àð?ð ð?ð ð	?ð
 ð?ð ð?ð 
ö?õ2'õ%õ
#õð ô"ó ð"ð ×ÑôGó ðGð ô	*ó ð	*ð ô*ó ð*ð ôEó ðEð ô*ó ð*ð ôó ðð ô,ó ð,ð ôGó ðG÷
0ð 0õ*F÷0ð 0õ.G÷
Dð 
DõG÷
Dð 
DõG÷2ð 2õE÷0ð 0÷
ð 
÷0ð 0õ)÷$0ð 0õ)ö4!ö!öNö7ð" %)ñTð
 +/òTàðTð "ðTð
 $(ðTð 
÷Tð Tð> +/òJàðJð ðJð
 $(ðJð 
÷Jð8 +/òNàðNð ðNð ð	Nð $(ðNð 
÷Nö0WðHàðHð ðHð 
ö	Hð$QàðQð ðQð ð	Qð
 
öQö(.ö .ö#öö(Böö2öBö >ö&ö(C÷ 4õ  4r[   rj   é€   )Úmaxsizec                ó  • 0 nSnSnU[        U 5      :  ah  X1U'   X   nUS-  S:X  a  US-  nO;US-  S:X  a  US-  nO,US-  S:X  a  US-  nOUS	-  S:X  a  US
-  nO[        SU 35      eUS-  nU[        U 5      :  a  Mh  X1U'   U$ )zÇBuild a mapping of utf-8 byte offsets to codepoint offsets for the given data.

Args:
    data: utf-8 bytes.

Returns:
    A `dict[int, int]` mapping byte indices to codepoint indices within `data`.
r   râ  r¢   éà   éÀ   r  éð   rï  éø   r¤   zInvalid UTF-8 byte: )rÍ  Ú
ValueError)Údatar5  Úcurrent_byte_offsetÚcode_point_offsetÚ
first_bytes        r\   r  r  É
  sÒ   € ð )+ÐØÐØÐà
¤ D£	Ó
)Ø1BÐ-Ñ.ØÑ.ˆ
ð ˜Ñ#¨Ó)Ø 1Ñ$Ñà˜:Ñ%¨*Ó4Ø 1Ñ$Ñà˜:Ñ%¨*Ó4Ø 1Ñ$Ñà˜:Ñ%¨*Ó4Ø 1Ñ$ÑäÐ3°J°<Ð@ÓAÐAà˜QÑÐð' ¤ D£	Õ
)ð, .?Ð)Ñ*ØÐr[   )rê  Úbytesr¾   zdict[int, int])qÚ
__future__r   r|  rÛ   Úcollectionsr   r   Ú	functoolsr   Úpathlibr   Útypingr   r	   r
   r   r   r   Úrich.consoler   Úrich.segmentr   Ú
rich.styler   Ú	rich.textr   Útyping_extensionsr   Útextual._text_area_themer   Útextual._tree_sitterr   r   Útextual.actionsr   Útextual.cacher   Útextual.colorr   Útextual.contentr   Útextual.document._documentr   r   r   r   r   r   Ú$textual.document._document_navigatorr    Útextual.document._editr!   Útextual.document._historyr"   Ú'textual.document._syntax_aware_documentr#   r$   Ú"textual.document._wrapped_documentr%   Útextual.expand_tabsr&   r'   Útextual.screenr(   Útextual.styleró  Útree_sitterr)   r*   Útextualr+   r,   Útextual._cellsr-   r.   Útextual.bindingr/   Útextual.eventsr0   r1   Útextual.geometryr2   r3   r4   r5   r6   Útextual.reactiver7   r8   Útextual.scroll_viewr9   Útextual.stripr:   rO  r  rQ  Ú__file__ÚparentÚ_TREE_SITTER_PATHrõ   r×  ÚStartColumnÚ	EndColumnrd   ÚHighlightNameÚ	Highlightr�  Ú	ExceptionrQ   r_   rb   rj   r  )ÚkÚvs   00r\   Ú<module>r     sv  ðÝ "ã Û 	Ý #Ý !Ý Ý ß O× Oå 'Ý  Ý Ý Ý %å 2ß :Ý &Ý "Ý Ý #÷÷ õ CÝ 'Ý 1÷õ ?ß PÝ !Ý /æß+ç ß ?Ý #ß .ß AÕ Aß /Ý *Ý à C¨cÑ2Ð Ø&7×&=Ñ&=Ô&?Ô@Ò&?™d˜a�Q’TÑ&?Ò@Ð Ù˜“N×)Ñ)Ð,=Ñ=Ð Ø$ }Ñ4Ð à€Ø�S‰M€	Ø€Ø�+˜y¨-Ð7Ñ8€	Ø >òÐ ð" :ô˜	ô ô˜9ô ð ÷
Jð 
Jó ð
JôV)4ˆzô V)4ñrR �3Ñó$ó ñ$ùóeT As   Ä'F)