<s> '''<STR_LIT>''' <EOL> import Tkinter as tk <EOL> import ttk <EOL> from dte_margin import DteMargin <EOL> from robotdte import RobotDTE <EOL> import codecs <EOL> import re <EOL> import os <EOL> import sys <EOL> import tkFont <EOL> import platform <EOL> from rwb import FONT_SCHEME , COLOR_SCHEME <EOL> import urllib2 <EOL> AUTOMATIC_VARS = [ "<STR_LIT>" , "<STR_LIT>" , "<STR_LIT>" , <EOL> "<STR_LIT>" , "<STR_LIT>" , <EOL> "<STR_LIT>" , "<STR_LIT>" , <EOL> "<STR_LIT>" , "<STR_LIT>" , "<STR_LIT>" , <EOL> "<STR_LIT>" , "<STR_LIT>" , "<STR_LIT>" , <EOL> "<STR_LIT>" , "<STR_LIT>" ] <EOL> KEYWORD_SETTINGS = [ "<STR_LIT>" , "<STR_LIT>" , "<STR_LIT>" , <EOL> "<STR_LIT>" , "<STR_LIT>" ] <EOL> TESTCASE_SETTINGS = [ "<STR_LIT>" , "<STR_LIT>" , "<STR_LIT>" , <EOL> "<STR_LIT>" , "<STR_LIT>" , "<STR_LIT>" <EOL> "<STR_LIT>" , "<STR_LIT>" , <EOL> "<STR_LIT>" , "<STR_LIT>" , <EOL> "<STR_LIT>" , "<STR_LIT>" ] <EOL> class EditorPage ( tk . Frame ) : <EOL> '''<STR_LIT>''' <EOL> encoding = "<STR_LIT:ascii>" <EOL> parent = None <EOL> notebook = None <EOL> is_uri = False <EOL> is_readonly = False <EOL> def __init__ ( self , parent , path = None , name = None , app = None ) : <EOL> self . parent = parent <EOL> self . app = app <EOL> self . path = path <EOL> self . name = name <EOL> self . _loaded = False <EOL> if name is None and path is not None : <EOL> self . name = os . path . basename ( path ) <EOL> if path is not None : <EOL> if path . split ( "<STR_LIT::>" , <NUM_LIT:1> ) [ <NUM_LIT:0> ] . lower ( ) in ( "<STR_LIT:http>" , "<STR_LIT>" ) : <EOL> self . is_uri = True <EOL> self . is_readonly = True <EOL> else : <EOL> self . path = os . path . abspath ( self . path ) <EOL> self . _name_var = tk . StringVar ( ) <EOL> self . _name_var . trace ( "<STR_LIT:w>" , self . _on_name_trace ) <EOL> tk . Frame . __init__ ( self , parent ) <EOL> self . _create_widgets ( ) <EOL> self . _last_winfo_height = self . winfo_height ( ) <EOL> self . bind ( "<STR_LIT>" , self . _on_visibility ) <EOL> def _on_visibility ( self , event ) : <EOL> if not self . _loaded : <EOL> self . after ( <NUM_LIT:1> , self . after_idle , self . load , self . path ) <EOL> def _on_linenumber_control_click ( self , event ) : <EOL> text_index = self . dte . index ( "<STR_LIT>" % ( event . x , event . y ) ) <EOL> self . dte . mark_set ( "<STR_LIT>" , "<STR_LIT>" % text_index ) <EOL> self . dte . tag_add ( "<STR_LIT>" , "<STR_LIT>" % text_index , "<STR_LIT>" % text_index ) <EOL> def _on_linenumber_click ( self , event ) : <EOL> try : <EOL> text_index = self . dte . index ( "<STR_LIT>" % ( event . x , event . y ) ) <EOL> self . dte . mark_set ( "<STR_LIT>" , "<STR_LIT>" % text_index ) <EOL> self . dte . tag_remove ( "<STR_LIT>" , "<STR_LIT:1.0>" , "<STR_LIT:end>" ) <EOL> self . dte . tag_add ( "<STR_LIT>" , "<STR_LIT>" % text_index , "<STR_LIT>" % text_index ) <EOL> self . dte . mark_set ( "<STR_LIT>" , "<STR_LIT>" % text_index ) <EOL> except Exception , e : <EOL> print "<STR_LIT>" , e <EOL> import sys ; sys . stdout . flush ( ) <EOL> def _on_linenumber_move ( self , event ) : <EOL> try : <EOL> text_index = self . dte . index ( "<STR_LIT>" % ( event . x , event . y ) ) <EOL> self . dte . tag_remove ( "<STR_LIT>" , "<STR_LIT:1.0>" , "<STR_LIT:end>" ) <EOL> if self . dte . compare ( text_index , "<STR_LIT:>>" , "<STR_LIT>" ) : <EOL> self . dte . tag_add ( "<STR_LIT>" , "<STR_LIT>" , "<STR_LIT>" % text_index ) <EOL> else : <EOL> self . dte . tag_add ( "<STR_LIT>" , "<STR_LIT>" % text_index , "<STR_LIT>" ) <EOL> self . dte . mark_set ( "<STR_LIT>" , "<STR_LIT>" % text_index ) <EOL> except Exception , e : <EOL> print "<STR_LIT>" , e <EOL> def _on_name_trace ( self , * args ) : <EOL> self . name = self . _name_var . get ( ) <EOL> self . event_generate ( "<STR_LIT>" ) <EOL> def focus ( self ) : <EOL> self . dte . focus_set ( ) <EOL> def toggle_linenumbers ( self , show = None ) : <EOL> if show is None : <EOL> show = not self . linenumbers . winfo_visible ( ) <EOL> if show : <EOL> self . linenumbers . grid ( ) <EOL> else : <EOL> self . linenumbers . grid_remove ( ) <EOL> def get_selected_rows ( self ) : <EOL> return self . dte . get_selected_rows ( ) <EOL> def get_row ( self , linenumber ) : <EOL> '''<STR_LIT>''' <EOL> return self . dte . get_row ( linenumber ) <EOL> def get_text ( self ) : <EOL> '''<STR_LIT>''' <EOL> return self . dte . get ( <NUM_LIT:1.0> , "<STR_LIT>" ) <EOL> def set_path ( self , path ) : <EOL> '''<STR_LIT>''' <EOL> self . path = path <EOL> self . name = os . path . basename ( path ) <EOL> self . namepath . configure ( text = path ) <EOL> sys . stdout . flush ( ) <EOL> self . _name_var . set ( self . name ) <EOL> def _create_widgets ( self ) : <EOL> self . nameframe = tk . Frame ( self , background = '<STR_LIT>' ) <EOL> self . nameentry = tk . Label ( self . nameframe , relief = "<STR_LIT>" , <EOL> font = ( "<STR_LIT>" , <NUM_LIT:16> , "<STR_LIT>" ) , <EOL> anchor = "<STR_LIT:w>" , <EOL> ) <EOL> self . close_button = tk . Button ( self . nameframe , text = "<STR_LIT>" , <EOL> borderwidth = <NUM_LIT:1> , relief = "<STR_LIT>" , <EOL> highlightthickness = <NUM_LIT:0> , <EOL> foreground = "<STR_LIT>" , <EOL> command = lambda : self . dte . event_generate ( "<STR_LIT>" ) ) <EOL> self . close_button . configure ( state = "<STR_LIT>" ) <EOL> self . nameentry . configure ( text = self . name ) <EOL> self . namepath = tk . Label ( self . nameframe , <EOL> text = "<STR_LIT>" , <EOL> anchor = "<STR_LIT>" , borderwidth = <NUM_LIT:0> , foreground = "<STR_LIT>" , background = "<STR_LIT>" ) <EOL> if self . path is not None : <EOL> self . namepath . configure ( text = self . path ) <EOL> hr = tk . Frame ( self . nameframe , borderwidth = <NUM_LIT:0> , height = <NUM_LIT:1> ) <EOL> self . nameentry . grid ( row = <NUM_LIT:0> , column = <NUM_LIT:0> , sticky = "<STR_LIT>" ) <EOL> self . close_button . grid ( row = <NUM_LIT:0> , column = <NUM_LIT:1> , sticky = "<STR_LIT:e>" , padx = <NUM_LIT:4> , ipadx = <NUM_LIT:4> ) <EOL> hr . grid ( row = <NUM_LIT:1> , column = <NUM_LIT:0> , columnspan = <NUM_LIT:2> , sticky = "<STR_LIT>" ) <EOL> self . namepath . grid ( row = <NUM_LIT:2> , column = <NUM_LIT:0> , columnspan = <NUM_LIT:2> , sticky = "<STR_LIT>" ) <EOL> self . nameframe . grid_columnconfigure ( <NUM_LIT:0> , weight = <NUM_LIT:1> ) <EOL> em = self . app . fonts . fixed . measure ( "<STR_LIT:M>" ) <EOL> tabwidth = <NUM_LIT:2> <EOL> wrap = "<STR_LIT:none>" <EOL> self . dte = RobotDTE ( self , <EOL> borderwidth = <NUM_LIT:0> , <EOL> insertbackground = "<STR_LIT>" , <EOL> wrap = wrap , <EOL> insertwidth = <NUM_LIT:1> , <EOL> highlightthickness = <NUM_LIT:0> , <EOL> tabstyle = "<STR_LIT>" , <EOL> undo = True , autoseparators = True , <EOL> tabs = tabwidth * em , <EOL> font = self . app . fonts . fixed ) <EOL> self . linenumbers = DteMargin ( self , background = "<STR_LIT>" , <EOL> borderwidth = <NUM_LIT:0> , <EOL> highlightthickness = <NUM_LIT:0> , width = <NUM_LIT:4> * em ) <EOL> self . linenumbers . attach ( self . dte ) <EOL> self . configure ( background = self . dte . cget ( "<STR_LIT>" ) ) <EOL> vsb = ttk . Scrollbar ( self , <EOL> command = self . dte . yview , <EOL> orient = "<STR_LIT>" ) <EOL> hsb = ttk . Scrollbar ( self , <EOL> command = self . dte . xview , <EOL> orient = "<STR_LIT>" ) <EOL> filler = tk . Frame ( self , <EOL> borderwidth = <NUM_LIT:0> , highlightthickness = <NUM_LIT:0> , background = self . nameframe . cget ( "<STR_LIT>" ) ) <EOL> self . dte . configure ( xscrollcommand = hsb . set , yscrollcommand = self . OnYviewChanged ) <EOL> self . nameframe . grid ( row = <NUM_LIT:0> , column = <NUM_LIT:0> , sticky = "<STR_LIT>" , columnspan = <NUM_LIT:3> ) <EOL> self . dte . grid ( row = <NUM_LIT:1> , column = <NUM_LIT:1> , sticky = "<STR_LIT>" , padx = <NUM_LIT:4> , pady = <NUM_LIT:4> ) <EOL> vsb . grid ( row = <NUM_LIT:1> , column = <NUM_LIT:2> , sticky = "<STR_LIT>" , pady = ( <NUM_LIT:4> , <NUM_LIT:0> ) ) <EOL> hsb . grid ( row = <NUM_LIT:2> , column = <NUM_LIT:0> , columnspan = <NUM_LIT:2> , sticky = "<STR_LIT>" ) <EOL> self . grid_rowconfigure ( <NUM_LIT:1> , weight = <NUM_LIT:1> ) <EOL> self . grid_columnconfigure ( <NUM_LIT:1> , weight = <NUM_LIT:1> ) <EOL> self . vsb = vsb <EOL> self . _define_tags ( ) <EOL> self . dte . add_post_change_hook ( self . OnDTEChange ) <EOL> self . dte . bind ( "<STR_LIT>" , self . on_autocomplete ) <EOL> self . dte . bind ( "<STR_LIT>" , self . on_star ) <EOL> self . dte . bind ( "<STR_LIT>" , self . _on_dollar ) <EOL> self . popup_menu = tk . Menu ( self . dte , tearoff = False ) <EOL> self . popup_menu . add_command ( label = "<STR_LIT>" , underline = <NUM_LIT:2> , <EOL> command = lambda : self . dte . event_generate ( "<STR_LIT>" ) ) <EOL> self . popup_menu . add_command ( label = "<STR_LIT>" , underline = <NUM_LIT:0> , <EOL> command = lambda : self . dte . event_generate ( "<STR_LIT>" ) ) <EOL> self . popup_menu . add_command ( label = "<STR_LIT>" , underline = <NUM_LIT:0> , <EOL> command = lambda : self . dte . event_generate ( "<STR_LIT>" ) ) <EOL> self . popup_menu . add_separator ( ) <EOL> self . popup_menu . add_cascade ( label = "<STR_LIT>" , menu = self . app . tools_menu ) <EOL> self . popup_menu . add_separator ( ) <EOL> self . popup_menu . add_command ( label = "<STR_LIT>" , <EOL> command = lambda : self . dte . event_generate ( "<STR_LIT>" ) ) <EOL> self . dte . bind ( "<STR_LIT>" , self . on_popup ) <EOL> self . dte . bind ( "<STR_LIT>" , lambda event : "<STR_LIT>" ) <EOL> def _compute_checksum ( self ) : <EOL> text = self . dte . get ( <NUM_LIT:1.0> , "<STR_LIT>" ) <EOL> try : <EOL> import zlib <EOL> encoded_text = text . encode ( self . encoding ) <EOL> self . _checksum = zlib . adler32 ( encoded_text ) <EOL> except Exception , e : <EOL> print "<STR_LIT>" , e <EOL> def save ( self ) : <EOL> self . _checksum = self . _compute_checksum ( ) <EOL> text = self . dte . get ( <NUM_LIT:1.0> , "<STR_LIT>" ) . rstrip ( ) + "<STR_LIT:\n>" <EOL> if self . encoding == "<STR_LIT:ascii>" and not self . _is_ascii ( text ) : <EOL> self . app . status_message ( "<STR_LIT>" ) <EOL> self . encoding = "<STR_LIT>" <EOL> encoded_text = text . encode ( self . encoding ) <EOL> with open ( self . path , "<STR_LIT:w>" ) as f : <EOL> f . write ( encoded_text ) <EOL> def _is_ascii ( self , s ) : <EOL> try : <EOL> s . decode ( '<STR_LIT:ascii>' ) <EOL> return True <EOL> except UnicodeEncodeError : <EOL> return False <EOL> def get_text_widget ( self ) : <EOL> '''<STR_LIT>''' <EOL> return self . dte <EOL> def on_autocomplete ( self , event ) : <EOL> line = self . dte . get ( "<STR_LIT>" , "<STR_LIT>" ) <EOL> if line . startswith ( "<STR_LIT:*>" ) : <EOL> self . dte . set_completion_choices ( [ "<STR_LIT>" , <EOL> "<STR_LIT>" , <EOL> "<STR_LIT>" , <EOL> "<STR_LIT>" ] ) <EOL> else : <EOL> try : <EOL> cell_contents = self . dte . get ( "<STR_LIT>" , "<STR_LIT>" ) <EOL> cell_contents = cell_contents . lower ( ) <EOL> except tk . TclError : <EOL> return <EOL> if cell_contents . startswith ( "<STR_LIT:[>" ) : <EOL> meta = set ( KEYWORD_SETTINGS + TESTCASE_SETTINGS ) <EOL> choices = [ s for s in meta if s . lower ( ) . startswith ( cell_contents ) ] <EOL> self . dte . set_completion_choices ( choices ) <EOL> elif cell_contents . startswith ( "<STR_LIT>" ) : <EOL> local_vars = re . findall ( r'<STR_LIT>' , self . dte . get ( <NUM_LIT:1.0> , "<STR_LIT>" ) ) <EOL> varnames = sorted ( set ( local_vars + AUTOMATIC_VARS ) ) <EOL> choices = [ s for s in varnames if s . lower ( ) . startswith ( cell_contents . rstrip ( "<STR_LIT:}>" ) ) ] <EOL> self . dte . set_completion_choices ( choices ) <EOL> else : <EOL> keywords = sorted ( self . app . kwdb . get_keywords ( ) ) <EOL> choices = [ s for s in keywords if s . lower ( ) . startswith ( cell_contents ) ] <EOL> self . dte . set_completion_choices ( choices ) <EOL> def on_popup ( self , event = None ) : <EOL> self . popup_menu . tk_popup ( event . x_root , event . y_root ) <EOL> def _on_dollar ( self , event ) : <EOL> '''<STR_LIT>''' <EOL> sel = self . dte . tag_ranges ( "<STR_LIT>" ) <EOL> if len ( sel ) > <NUM_LIT:0> : <EOL> self . dte . insert ( sel [ <NUM_LIT:1> ] , "<STR_LIT:}>" ) <EOL> self . dte . insert ( sel [ <NUM_LIT:0> ] , "<STR_LIT>" ) <EOL> return "<STR_LIT>" <EOL> def on_star ( self , event ) : <EOL> '''<STR_LIT>''' <EOL> if self . dte . compare ( "<STR_LIT>" , "<STR_LIT>" , "<STR_LIT>" ) : <EOL> self . dte . insert ( "<STR_LIT>" , "<STR_LIT>" ) <EOL> self . dte . mark_set ( "<STR_LIT>" , "<STR_LIT>" ) <EOL> self . dte . see ( "<STR_LIT>" ) <EOL> return "<STR_LIT>" <EOL> def on_close ( self ) : <EOL> print "<STR_LIT>" <EOL> def load ( self , path ) : <EOL> '''<STR_LIT>''' <EOL> if self . path is None : <EOL> raise Exception ( "<STR_LIT>" ) <EOL> self . dte . delete ( <NUM_LIT:1.0> , "<STR_LIT:end>" ) <EOL> data = "<STR_LIT>" <EOL> try : <EOL> if path . startswith ( "<STR_LIT>" ) or path . startswith ( "<STR_LIT>" ) : <EOL> f = urllib2 . urlopen ( self . path ) <EOL> data = f . read ( ) . replace ( "<STR_LIT:\r\n>" , "<STR_LIT:\n>" ) <EOL> f . close ( ) <EOL> else : <EOL> if os . path . exists ( self . path ) or True : <EOL> f = open ( self . path , "<STR_LIT>" ) <EOL> data = f . read ( ) . replace ( "<STR_LIT:\r\n>" , "<STR_LIT:\n>" ) <EOL> f . close ( ) <EOL> except Exception , e : <EOL> self . app . log . debug ( "<STR_LIT>" % ( self . path , str ( e ) ) ) <EOL> data = data . rstrip ( ) <EOL> if data . startswith ( codecs . BOM_UTF8 ) : <EOL> data = data . decode ( "<STR_LIT>" ) <EOL> self . encoding = "<STR_LIT>" <EOL> else : <EOL> self . encoding = "<STR_LIT:ascii>" <EOL> self . dte . insert ( <NUM_LIT:1.0> , data ) <EOL> self . dte . edit_reset ( ) <EOL> self . dte . mark_set ( "<STR_LIT>" , <NUM_LIT:1.0> ) <EOL> self . _checksum = self . _compute_checksum ( ) <EOL> self . _loaded = True <EOL> def get_test_cases ( self ) : <EOL> regions = self . get_table_regions ( "<STR_LIT>" ) <EOL> testcases = [ ] <EOL> for ( start , end ) in regions : <EOL> indexes = self . tk . call ( str ( self . dte ) , "<STR_LIT>" , "<STR_LIT>" , "<STR_LIT>" , <EOL> r'<STR_LIT>' , start , end ) <EOL> for index in indexes : <EOL> line = self . dte . get ( str ( index ) , "<STR_LIT>" % str ( index ) ) <EOL> testcases . append ( line . strip ( "<STR_LIT>" ) ) <EOL> return testcases <EOL> def get_table_regions ( self , table ) : <EOL> '''<STR_LIT>''' <EOL> if table . lower ( ) not in ( "<STR_LIT>" , "<STR_LIT>" , "<STR_LIT>" , "<STR_LIT>" ) : <EOL> raise Exception ( "<STR_LIT>" % table + <EOL> "<STR_LIT>" + <EOL> "<STR_LIT>" ) <EOL> any_heading_pattern = r'<STR_LIT>' <EOL> heading_pattern = r'<STR_LIT>' % table . lower ( ) <EOL> result = [ ] <EOL> end = "<STR_LIT:1.0>" <EOL> while True : <EOL> start = self . dte . search ( heading_pattern , end , stopindex = "<STR_LIT:end>" , regexp = True , nocase = True ) <EOL> if ( start == "<STR_LIT>" ) : break <EOL> end = self . dte . search ( any_heading_pattern , "<STR_LIT>" % start , <EOL> stopindex = "<STR_LIT:end>" , regexp = True , nocase = True ) <EOL> if end == "<STR_LIT>" : end = self . dte . index ( "<STR_LIT:end>" ) <EOL> result . append ( ( start , end ) ) <EOL> return result <EOL> def _define_tags ( self ) : <EOL> FORESTGREEN = "<STR_LIT>" <EOL> FIREBRICK = "<STR_LIT>" <EOL> DARKBLUE = "<STR_LIT>" <EOL> self . dte . tag_configure ( "<STR_LIT:name>" , foreground = FORESTGREEN , <EOL> font = self . app . fonts . fixed_bold ) <EOL> self . dte . tag_configure ( "<STR_LIT>" , foreground = "<STR_LIT>" ) <EOL> self . dte . tag_configure ( "<STR_LIT>" , font = self . app . fonts . fixed_bold , background = "<STR_LIT>" ) <EOL> self . dte . tag_configure ( "<STR_LIT>" , foreground = DARKBLUE , <EOL> font = self . app . fonts . fixed_bold ) <EOL> self . dte . tag_configure ( "<STR_LIT>" , foreground = "<STR_LIT>" ) <EOL> self . dte . tag_configure ( "<STR_LIT>" , foreground = FIREBRICK ) <EOL> self . dte . tag_configure ( "<STR_LIT>" , font = self . app . fonts . fixed_bold ) <EOL> self . dte . tag_configure ( "<STR_LIT>" , foreground = "<STR_LIT>" ) <EOL> self . dte . tag_raise ( "<STR_LIT>" ) <EOL> def OnYviewChanged ( self , * args ) : <EOL> '''<STR_LIT>''' <EOL> result = self . vsb . set ( * args ) <EOL> self . linenumbers . refresh ( ) <EOL> return result <EOL> def OnDTEChange ( self , * args ) : <EOL> '''<STR_LIT>''' <EOL> if ( self . dte . get ( "<STR_LIT>" , "<STR_LIT:end>" ) != "<STR_LIT>" ) : <EOL> insert = self . dte . index ( "<STR_LIT>" ) <EOL> self . dte . insert ( "<STR_LIT:end>" , "<STR_LIT:\n>" ) <EOL> self . dte . mark_set ( "<STR_LIT>" , insert ) <EOL> block_start = self . dte . index ( "<STR_LIT>" ) <EOL> block_end = self . dte . index ( "<STR_LIT>" ) <EOL> for tag in ( "<STR_LIT:name>" , "<STR_LIT>" , "<STR_LIT>" , "<STR_LIT>" , <EOL> "<STR_LIT>" , "<STR_LIT>" , "<STR_LIT>" , "<STR_LIT>" , "<STR_LIT>" ) : <EOL> self . dte . tag_remove ( tag , block_start , block_end ) <EOL> self . dte . highlight_pattern ( r'<STR_LIT>' , <EOL> "<STR_LIT>" , block_start , block_end , whole_lines = True ) <EOL> self . dte . highlight_pattern ( r'<STR_LIT>' , "<STR_LIT>" , block_start , block_end ) <EOL> self . dte . highlight_pattern ( r'<STR_LIT>' , "<STR_LIT>" , block_start , block_end ) <EOL> self . dte . highlight_pattern ( r'<STR_LIT>' , "<STR_LIT>" , block_start , block_end ) <EOL> self . dte . highlight_pattern ( r'<STR_LIT>' , "<STR_LIT>" , block_start , block_end ) <EOL> self . dte . highlight_pattern ( '<STR_LIT>' , "<STR_LIT>" , block_start , block_end ) <EOL> self . dte . highlight_pattern ( "<STR_LIT>" , "<STR_LIT>" , block_start , block_end ) <EOL> name_pattern = r'<STR_LIT>' <EOL> for ( start , end ) in self . get_table_regions ( "<STR_LIT>" ) : <EOL> self . dte . highlight_pattern ( name_pattern , "<STR_LIT:name>" , start , end ) <EOL> for ( start , end ) in self . get_table_regions ( "<STR_LIT>" ) : <EOL> self . dte . highlight_pattern ( name_pattern , "<STR_LIT:name>" , start , end ) <EOL> number_of_lines = int ( float ( self . dte . index ( "<STR_LIT:end>" ) ) ) - <NUM_LIT:1> <EOL> self . dte . tag_configure ( "<STR_LIT>" , background = "<STR_LIT>" ) <EOL> start_line = int ( float ( block_start ) ) <EOL> end_line = int ( float ( block_end ) ) <EOL> self . event_generate ( "<STR_LIT>" , data = "<STR_LIT>" ) </s>
