+
    Qi}0  c                   s    R t ^ RIt^ RIt^ RIt^RIHt ^RIHt ^RIHt ^RIH	t	 ^RIH
t
 ^RIHt ^RIHt ^R	IHt ^R
IHt  ! R R4      tR# )z:Provides the default implementation for bookmarks in Orca.N)cmdnames)debug)flat_review_presenter)keybindings)input_event)messages)settings_manager)
AXDocument)AXObjectc                   s   a  ] tR t^%t o RtR tRR ltRR ltR tR t	R t
R tRR
 ltR tR tR tR tR tRR ltRR ltR tR tR tR tR tRR ltRtV tR	# )	Bookmarksz&Represents a default bookmark handler.c                s    Wn         / V n        . V n        . V n        V P	                  4        R V n        V P                  R4      V n        \        P                  ! 4       V n
        R # )NT)_script
_bookmarks_saveObservers_loadObservers_loadBookmarks_currentbookmarkindexget_handlers	_handlersr   KeyBindings	_bindings)selfscript   &&3/usr/lib/python3.14/site-packages/orca/bookmarks.py__init__ZBookmarks.__init__'   sT      %)"**40$002    c                sH   V'       d`   Rp\         P                  ! \         P                  VR4       V P                  P	                  R4       V P                  4        V P                  # V P                  P                  4       '       d   V P                  4        V P                  # )z!Returns the bookmark keybindings.zBOOKMARKS: Refreshing bindings.T)r   print_message
LEVEL_INFOr   Zremove_key_grabs_setup_bindingsZis_empty)r   refreshZ
is_desktopmsg   &&& r   get_bindingsZBookmarks.get_bindings1   sz     3C 0 0#t<NN++,MN  " ~~ ^^$$&&  "~~r   c                s    V'       d:   Rp\         P                  ! \         P                  VRR4       V P                  4        V P                  # )zReturns the bookmark handlers.zBOOKMARKS: Refreshing handlers.T)r   r   r   _setup_handlersr   )r   r   r   s   && r   r   ZBookmarks.get_handlers>   s<     3C 0 0#tTB  "~~r   c                s   / V n         \        P                  ! V P                  \        P
                  4      V P                   R&   \        P                  ! V P                  \        P                  4      V P                   R&   \        P                  ! V P                  \        P                  4      V P                   R&   \        P                  ! V P                  \        P                  4      V P                   R&   \        P                  ! V P                  \        P                  4      V P                   R&   Rp\        P                  ! \        P                   VR4       R# )	z*Sets up the bookmark input event handlers.goToPrevBookmarkgoToNextBookmarkgoToBookmarkaddBookmarksaveBookmarkszBOOKMARKS: Handlers set up.TN)r   r   ZInputEventHandlerr"   r    ZBOOKMARK_GO_TO_PREVIOUSr#   ZBOOKMARK_GO_TO_NEXTr$   ZBOOKMARK_GO_TOr%   ZBOOKMARK_ADDr&   ZBOOKMARK_SAVEr   r   r   )r   r      & r   r!   ZBookmarks._setup_handlersH   s     ))%%002 	)* ))%%,,. 	)* ))!!'') 	~& ))  %%' 	}% ))""&&( 	'
 ,E,,c48r   c                s   \         P                  ! 4       V n        V P                  P                  \         P                  ! R\         P
                  \         P                  V P                  P                  R4      4      4       V P                  P                  \         P                  ! R\         P
                  \         P                  V P                  P                  R4      4      4       V P                  P                  \         P                  ! R\         P
                  \         P                  V P                  P                  R4      4      4       \        ^4       F  pV P                  P                  \         P                  ! \        V^,           4      \         P
                  \         P                  V P                  P                  R4      4      4       V P                  P                  \         P                  ! \        V^,           4      \         P
                  \         P                  V P                  P                  R4      4      4       K  	  Rp\        P                  ! \        P                  VR4       R	# )
z"Sets up the bookmark key bindings.Zbr#   r"   r&   r$   r%   zBOOKMARKS: Bindings set up.TN)r   r   r   ZaddZ
KeyBindingZDEFAULT_MODIFIER_MASKZORCA_MODIFIER_MASKr   ZgetZORCA_SHIFT_MODIFIER_MASKZORCA_ALT_MODIFIER_MASKZrangeZstrr   r   r   )r   Zir      &  r   r   ZBookmarks._setup_bindingsi   s    %002""11..""#56	8	9 	""1144""#56	8	9 	""1122""?3	5	6 qANN&&AJ5522NN&&~6	89 NN&&AJ5566NN&&}5	78  ,E,,c48r   c                <    V P                   P                  V4       R # N)r   appendr   Zobserverr   r   addSaveObserverZBookmarks.addSaveObserver       ""8,r   c                r)   r*   )r   r+   r,   r   r   addLoadObserverZBookmarks.addLoadObserver   r.   r   Nc                s   T;'       g    VP                   pV P                  4       p V P                  V,          pVP                  VR,          VR,          VR,          VR,          4       WPP                  V&   \        P                  ! 4       P                  Y4       Y0n        R#   \         d.    T P
                  P                  \        P                  4        R# i ; i)z1Go to the bookmark indexed by inputEvent.hw_code linezonewordcharN)hw_code_get_contextr   Z
setCurrentKeyErrorr
   present_messager   ZBOOKMARK_NOT_FOUNDr   get_presenterZpresent_itemr   )r   r   
inputEventindexcontextcontext_infos   &&&&  r   r$   ZBookmarks.goToBookmark   s     ++++##%	??51L|F3\&5I ,V 4l66JL%1OOE"
 	++-::6N &+"  	LL(()D)DE	s   AB% %4CCc                s    V P                  V P                  4       4      V P                  VP                  &   V P                  P                  \        P                  4       R# )z8Add an in-page accessible object bookmark for this key. N)_contextToBookmarkr5   r   r4   r
   r7   r   ZBOOKMARK_ENTERED)r   r   r9   s   &&&r   r%   ZBookmarks.addBookmark   sB    .2.E.EdFWFWFY.Z
**+$$X%>%>?r   c                s8    V P                  V P                  4       V P                  P                  \        P
                  4       V P                   F
  pV! 4        K  	  R#   \         d-    T P                  P                  \        P                  4        LRi ; i)z$Save the bookmarks for this script. N)	saveBookmarksToDiskr   r
   r7   r   ZBOOKMARKS_SAVEDIOErrorZBOOKMARKS_SAVED_FAILUREr   )r   r   r9   or   r   r&   ZBookmarks.saveBookmarks   st    	K$$T__5LL(()A)AB
 $$AC %	  	KLL(()I)IJ	Ks   AA" "4BBc                s   \        V P                  P                  4       4      p\        V4      ^ 8X  d,   V P                  P                  \        P                  4       R# \        V4      ^8X  g   V P                  f   V P                  RV^ ,          R7       R#  VP                  V P                  4      pV P                  RW4^,           ,          R7       R#   \        \        \        3 d    T P                  RT^ ,          R7        R# i ; i)zlGo to the next bookmark location.  If no bookmark has yet to be
selected, the first bookmark will be used.  Nr:   Zsortedr   ZkeysZlenr
   r7   r   ZBOOKMARKS_NOT_FOUNDr   r$   r:   Z
ValueErrorr6   Z
IndexErrorr   r   r9   Zhwkeysr:      &&&  r   r#   ZBookmarks.goToNextBookmark   s    
 ,,./ v;!LL(()E)EF[A!;!;!Cd&)4	5LL!;!;<Ed&q/:Hj1 	5d&)4	5   ;C 0D
Dc                s   \        V P                  P                  4       4      p\        V4      ^ 8X  d,   V P                  P                  \        P                  4       R# \        V4      ^8X  g   V P                  f   V P                  RV^ ,          R7       R#  VP                  V P                  4      pV P                  RW4^,
          ,          R7       R#   \        \        \        3 d    T P                  RT^ ,          R7        R# i ; i)    NrA   rB   rC   rD   r   r"   ZBookmarks.goToPrevBookmark   s    ,,./ v;!LL(()E)EF[A!;!;!Cd&)4	5LL!;!;<Ed&q/:Hj1 	5d&)4	5rE   c                sx    V P                  4       ;'       g    / V n        V P                   F
  pV! 4        K  	  R# )z"Load this scripts saved bookmarks.N)readBookmarksFromDiskr   r   )r   r@   r'   r   r   ZBookmarks._loadBookmarks   s1    446<<" $$AC %r   c                s   T;'       g-    V P                   P                  P                  R4      ^ ,          p\        P                  ! 4       P                  4       pV'       g   R# \        P                  P                  VR4      p \        \        P                  P                  VV R24      R4      p\        P                  ! VP                  4      pVP                  4        V#   \        \        \         3 d     R# i ; i)zZRead saved bookmarks from disk.  Currently an unpickled object
that represents a bookmark  N	bookmarks.pklZr)r
   namesplitr   get_managerget_prefs_dirospathjoinopenpickleZloadbuffercloser?   ZEOFErrorOSError)r   filenameorca_dirorca_bookmarks_dirZ	inputFilerI   s   &&    r   rG   ZBookmarks.readBookmarksFromDisk   s     >>t||0066s;A>#//1??AWW\\(K@	bggll,>#*D)+,/1II$4$45IOO7+ 		s   AC$ $C>=C>c                sL   T;'       g-    V P                   P                  P                  R4      ^ ,          p\        P                  ! 4       P                  4       p\        P                  P                  VR4      p \        P                  ! V4       \        \        P                  P                  VV R24      R\        P                  4      p\        P                  ! WP                   4       VP#                  4        R#   \         d    \        P                  ! T4        Li ; i)zEWrite bookmarks to disk.  bookmarksObj must be a pickleable 
object. rH   rI   rJ   ZwN)r
   rK   rL   r   rM   rN   rO   rP   rQ   ZstatrV   ZmkdirrR   ZO_CREATrS   ZdumprT   rU   )r   ZbookmarksObjrW   rX   rY   Zoutputs   &&&   r   r>   ZBookmarks.saveBookmarksToDisk  s     >>t||0066s;A>#//1??AWW\\(K@	)GG&' rww||%7j%'(+RZZ9L--0  	)HH'(	)s   ;C? ?!D#"D#c                sP    / pVP                  4       w  r4rVWBR&   WbR&   WRR&   W2R&   V# )z6Converts a flat_review.Context object into a bookmark.r1   r3   r2   r0   )Z
getCurrent)r   r;   r<   r0   r1   r2   r3   s   &&     r   r=   ZBookmarks._contextToBookmark  s@    !(!3!3!5D#V#V#V#Vr   c                s^    \         P                  ! 4       P                  V P                  4      # r*   )r   r8   Zget_or_create_contextr
   )r   s   &r   r5   ZBookmarks._get_context!  s     $224JJ4<<XXr   c                s    V P                  4       pVR,          VR,          VR,          VR,          3pVP                  V4       V# )z6Converts a bookmark into a flat_review.Context object.r0   r1   r2   r3   )r5   Zset_current_location)r   Zbookmarkr;   Zlocation   &&  r   _bookmarkToContextZBookmarks._bookmarkToContext$  sF    ##%F#Xf%5x7GRXIYY$$X.r   c                s    \         P                  ! V P                  P                  P	                  4       4      pV'       d8   \
        P                  P                  V4      pRP                  VR,          4      # R# )zhReturns the URI key for a given page as a URI stripped of
parameters?query#fragment as seen in urlparse. :rF   i   NN)	r   Zget_urir
   	utilitiesactive_documenturllibZparseZurlparserQ   )r   ZuriZ
parsed_urir(   r   	getURIKeyZBookmarks.getURIKey+  sT       !7!7!G!G!IJ..s3J77:c?++r   c                s    V P                   P                  P                  4       pV F$  p\        P                  ! W#4      pV'       d   K#   V# 	  V# )zHReturn the object with the given path (relative to the
document frame). )r
   r]   r^   r   Z	get_child)r   rP   Z	returnobjZchildnumberrZ   r   	pathToObjZBookmarks.pathToObj5  sL     LL**::<	K **9BI9  
 r   c                sN   V'       g'   V P                   P                  P                  4       w  rV'       g   . # V P                   P                  P                  V4      '       d   . # . pVP	                  \
        P                  ! V4      4       \
        P                  ! V4      pV'       d{   V P                   P                  P                  V4      '       d   VP                  4        V# VP	                  \
        P                  ! V4      4       \
        P                  ! V4      pK  . # )zxGiven an object, return it's path from the root accessible.  If obj
is not provided, the current caret context is used. )	r
   r]   Zget_caret_contextZis_documentr+   r   Zget_index_in_parentZ
get_parentZreverse)r   Z	start_objZ_characterOffsetrP   Zps   &&   r   
_objToPathZBookmarks._objToPath@  s     ,0LL,B,B,T,T,V)YI<<!!--i88IH00;<	*||%%11!44KK44Q78##A&A	r   )r   r   r   r   r   r   r
   )FT)Fr*   )Z__name__Z
__module__Z__qualname__Z__firstlineno____doc__r   r    r   r!   r   r-   r/   r$   r%   r&   r#   r"   r   rG   r>   r=   r5   r[   r`   ra   rb   Z__static_attributes__Z__classdictcell__)Z__classdict__s   @r   r	   r	   %   sz     039B*9X--+(@

505*$ Y	 r   r	   )rc   rS   rO   Zurllib.parser_   r\   r    r   r   r   r   r   r   Zax_documentr   Z	ax_objectr   r	   ) r   r   <module>rd      s;   ( A  	    #     # q qr   