def save_frame(self, _parent=None): _context = self.Context(_parent, self._scanner, self._pos, 'save_frame', []) save_heading = self._scan('save_heading') savehead = save_heading[5:] savebc = StarFile() savebc.NewBlock(savehead, StarBlock(overwrite=False)) while self._peek( 'save_end', 'save_heading', 'LBLOCK', 'data_name', 'END', 'data_heading') in ['save_heading', 'LBLOCK', 'data_name']: _token = self._peek('save_heading', 'LBLOCK', 'data_name') if _token != 'save_heading': dataseq = self.dataseq(savebc[savehead], _context) else: # == 'save_heading' save_frame = self.save_frame(_context) savebc.merge_fast(save_frame, parent=savehead) if self._peek() not in [ 'save_end', 'save_heading', 'LBLOCK', 'data_name', 'END', 'data_heading' ]: raise yappsrt.SyntaxError( charpos=self._scanner.get_prev_char_pos(), context=_context, msg='Need one of ' + ', '.join([ 'save_end', 'save_heading', 'LBLOCK', 'data_name', 'END', 'data_heading' ])) save_end = self._scan('save_end') return monitor('save_frame', savebc)
def loopvalues(self, _parent=None): _context = self.Context(_parent, self._scanner, self._pos, 'loopvalues', []) data_value = self.data_value(_context) dataloop = [data_value] while self._peek('data_value_1', 'triple_quote_data_value', 'single_quote_data_value', 'start_sc_line', 'o_s_b', 'o_c_b', 'LBLOCK', 'data_name', 'save_heading', 'save_end', 'END', 'data_heading') in [ 'data_value_1', 'triple_quote_data_value', 'single_quote_data_value', 'start_sc_line', 'o_s_b', 'o_c_b' ]: data_value = self.data_value(_context) dataloop.append(monitor('loopval', data_value)) if self._peek() not in [ 'data_value_1', 'triple_quote_data_value', 'single_quote_data_value', 'start_sc_line', 'o_s_b', 'o_c_b', 'LBLOCK', 'data_name', 'save_heading', 'save_end', 'END', 'data_heading' ]: raise yappsrt.SyntaxError( charpos=self._scanner.get_prev_char_pos(), context=_context, msg='Need one of ' + ', '.join([ 'data_value_1', 'triple_quote_data_value', 'single_quote_data_value', 'start_sc_line', 'o_s_b', 'o_c_b', 'LBLOCK', 'data_name', 'save_heading', 'save_end', 'END', 'data_heading' ])) return dataloop
def input(self, _parent=None): _context = self.Context(_parent, self._scanner, self._pos, 'input', []) _token = self._peek('END', 'data_heading') if _token == 'data_heading': dblock = self.dblock(_context) allblocks = StarFile() allblocks.NewBlock(dblock[0], blockcontents=dblock[1], fix=False, replace=False) while self._peek('END', 'data_heading') == 'data_heading': dblock = self.dblock(_context) allblocks.NewBlock(dblock[0], blockcontents=monitor('input', dblock[1]), fix=False, replace=False) if self._peek() not in ['END', 'data_heading']: raise yappsrt.SyntaxError( charpos=self._scanner.get_prev_char_pos(), context=_context, msg='Need one of ' + ', '.join(['END', 'data_heading'])) END = self._scan('END') else: # == 'END' END = self._scan('END') allblocks = StarFile() return allblocks
def nest_curly_bracket_expr(self, _parent=None): _context = self.Context(_parent, self._scanner, self._pos, 'nest_curly_bracket_expr', []) o_c_b = self._scan('o_c_b') _token = self._peek('dat_val_nocomma_nocurl', 'o_s_b', 'o_c_b', 'o_r_b') if _token == 'dat_val_nocomma_nocurl': dat_val_nocomma_nocurl = self._scan('dat_val_nocomma_nocurl') else: # in ['o_s_b', 'o_c_b', 'o_r_b'] nested_bracket_expression = self.nested_bracket_expression( _context) while self._peek('c_c_b', '","', 'c_s_b', 'c_r_b') == '","': self._scan('","') _token = self._peek('dat_val_nocomma_nocurl', 'o_s_b', 'o_c_b', 'o_r_b') if _token == 'dat_val_nocomma_nocurl': dat_val_nocomma_nocurl = self._scan('dat_val_nocomma_nocurl') else: # in ['o_s_b', 'o_c_b', 'o_r_b'] nested_bracket_expression = self.nested_bracket_expression( _context) if self._peek() not in ['c_c_b', '","', 'c_s_b', 'c_r_b']: raise yappsrt.SyntaxError( charpos=self._scanner.get_prev_char_pos(), context=_context, msg='Need one of ' + ', '.join(['","', 'c_c_b', 'c_s_b', 'c_r_b'])) c_c_b = self._scan('c_c_b')
def dataseq(self, starblock, _parent=None): _context = self.Context(_parent, self._scanner, self._pos, 'dataseq', [starblock]) data = self.data(starblock, _context) while self._peek('LBLOCK', 'data_name', 'save_end', 'save_heading', 'END', 'data_heading') in ['LBLOCK', 'data_name']: data = self.data(starblock, _context) if self._peek() not in ['LBLOCK', 'data_name', 'save_end', 'save_heading', 'END', 'data_heading']: raise yappsrt.SyntaxError(charpos=self._scanner.get_prev_char_pos(), context=_context, msg='Need one of ' + ', '.join(['LBLOCK', 'data_name', 'save_end', 'save_heading', 'END', 'data_heading']))
def dblock(self, _parent=None): _context = self.Context(_parent, self._scanner, self._pos, 'dblock', []) data_heading = self._scan('data_heading') heading = data_heading[5:] thisblock = StarBlock(overwrite=False) while self._peek( 'save_heading', 'save_end', 'LBLOCK', 'data_name', 'END', 'data_heading') in ['save_heading', 'LBLOCK', 'data_name']: _token = self._peek('save_heading', 'LBLOCK', 'data_name') if _token != 'save_heading': dataseq = self.dataseq(thisblock, _context) else: # == 'save_heading' save_frame = self.save_frame(_context) thisblock["saves"].NewBlock(save_frame[0], save_frame[1], fix=False, replace=True) if self._peek() not in [ 'save_heading', 'save_end', 'LBLOCK', 'data_name', 'END', 'data_heading' ]: raise yappsrt.SyntaxError( charpos=self._scanner.get_prev_char_pos(), context=_context, msg='Need one of ' + ', '.join([ 'save_heading', 'LBLOCK', 'data_name', 'save_end', 'END', 'data_heading' ])) return (heading, monitor('dblock', thisblock))
def nest_round_bracket_expr(self, _parent=None): _context = self.Context(_parent, self._scanner, self._pos, 'nest_round_bracket_expr', []) o_r_b = self._scan('o_r_b') _token = self._peek('dat_val_nocomma_nornd', 'o_s_b', 'o_c_b', 'o_r_b') if _token == 'dat_val_nocomma_nornd': dat_val_nocomma_nornd = self._scan('dat_val_nocomma_nornd') this_tuple = [stripstring(dat_val_nocomma_nornd)] else: # in ['o_s_b', 'o_c_b', 'o_r_b'] nested_bracket_expression = self.nested_bracket_expression( _context) this_tuple = [nested_bracket_expression] while self._peek('c_r_b', '","') == '","': self._scan('","') _token = self._peek('dat_val_nocomma_nornd', 'o_s_b', 'o_c_b', 'o_r_b') if _token == 'dat_val_nocomma_nornd': dat_val_nocomma_nornd = self._scan('dat_val_nocomma_nornd') this_tuple.append(stripstring(dat_val_nocomma_nornd)) else: # in ['o_s_b', 'o_c_b', 'o_r_b'] nested_bracket_expression = self.nested_bracket_expression( _context) this_tuple.append(nested_bracket_expression) if self._peek() not in ['c_r_b', '","']: raise yappsrt.SyntaxError( charpos=self._scanner.get_prev_char_pos(), context=_context, msg='Need one of ' + ', '.join(['","', 'c_r_b'])) c_r_b = self._scan('c_r_b') return tuple(this_tuple)
def dblock(self, prepared, _parent=None): _context = self.Context(_parent, self._scanner, self._pos, 'dblock', [prepared]) data_heading = self._scan('data_heading') heading = data_heading[5:] thisbc = StarFile(characterset='unicode', standard=prepared.standard) thisbc.NewBlock(heading, StarBlock(overwrite=False)) while self._peek( 'save_heading', 'LBLOCK', 'data_name', 'save_end', 'END', 'data_heading') in ['save_heading', 'LBLOCK', 'data_name']: _token = self._peek('save_heading', 'LBLOCK', 'data_name') if _token != 'save_heading': dataseq = self.dataseq(thisbc[heading], _context) else: # == 'save_heading' save_frame = self.save_frame(_context) thisbc.merge_fast(save_frame, parent=heading) if self._peek() not in [ 'save_heading', 'LBLOCK', 'data_name', 'save_end', 'END', 'data_heading' ]: raise yappsrt.SyntaxError( charpos=self._scanner.get_prev_char_pos(), context=_context, msg='Need one of ' + ', '.join([ 'save_heading', 'LBLOCK', 'data_name', 'save_end', 'END', 'data_heading' ])) thisbc[heading].setmaxnamelength(thisbc[heading].maxnamelength) return (monitor('dblock', thisbc))
def loopvalues(self, _parent=None): _context = self.Context(_parent, self._scanner, self._pos, 'loopvalues', []) data_value = self.data_value(_context) dataloop = [[data_value]] while self._peek('data_value_1', 'data_value_old', 'STOP', 'start_sc_line', 'LBLOCK', 'data_name', 'save_end', 'save_heading', 'END', 'data_heading') in [ 'data_value_1', 'data_value_old', 'STOP', 'start_sc_line' ]: _token = self._peek('data_value_1', 'data_value_old', 'STOP', 'start_sc_line') if _token != 'STOP': data_value = self.data_value(_context) dataloop[-1].append(monitor('loopval', data_value)) else: # == 'STOP' STOP = self._scan('STOP') dataloop.append([]) if self._peek() not in [ 'data_value_1', 'data_value_old', 'STOP', 'start_sc_line', 'LBLOCK', 'data_name', 'save_end', 'save_heading', 'END', 'data_heading' ]: raise yappsrt.SyntaxError( charpos=self._scanner.get_prev_char_pos(), context=_context, msg='Need one of ' + ', '.join([ 'data_value_1', 'data_value_old', 'STOP', 'start_sc_line', 'LBLOCK', 'data_name', 'save_end', 'save_heading', 'END', 'data_heading' ])) return dataloop
def curly_bracket_expr(self, _parent=None): _context = self.Context(_parent, self._scanner, self._pos, 'curly_bracket_expr', []) o_c_b = self._scan('o_c_b') table_as_list = [] while self._peek('c_c_b', 'triple_quote_data_value', 'single_quote_data_value', '","') in [ 'triple_quote_data_value', 'single_quote_data_value' ]: delimited_data_value = self.delimited_data_value(_context) table_as_list = [delimited_data_value] self._scan('":"') data_value = self.data_value(_context) table_as_list.append(data_value) while self._peek('","', 'triple_quote_data_value', 'single_quote_data_value', 'c_c_b') == '","': self._scan('","') delimited_data_value = self.delimited_data_value(_context) table_as_list.append(delimited_data_value) self._scan('":"') data_value = self.data_value(_context) table_as_list.append(data_value) if self._peek() not in [ '","', 'triple_quote_data_value', 'single_quote_data_value', 'c_c_b' ]: raise yappsrt.SyntaxError( charpos=self._scanner.get_prev_char_pos(), context=_context, msg='Need one of ' + ', '.join([ '","', 'triple_quote_data_value', 'single_quote_data_value', 'c_c_b' ])) if self._peek() not in [ 'c_c_b', 'triple_quote_data_value', 'single_quote_data_value', '","' ]: raise yappsrt.SyntaxError( charpos=self._scanner.get_prev_char_pos(), context=_context, msg='Need one of ' + ', '.join([ 'triple_quote_data_value', 'single_quote_data_value', 'c_c_b', '","' ])) c_c_b = self._scan('c_c_b') return StarDict(pairwise(table_as_list))
def square_bracket_expr(self, _parent=None): _context = self.Context(_parent, self._scanner, self._pos, 'square_bracket_expr', []) o_s_b = self._scan('o_s_b') this_list = [] while self._peek('c_s_b', 'data_value_1', '","', 'triple_quote_data_value', 'single_quote_data_value', 'start_sc_line', 'o_s_b', 'o_c_b') not in ['c_s_b', '","']: data_value = self.data_value(_context) this_list.append(data_value) while self._peek('","', 'data_value_1', 'c_s_b', 'triple_quote_data_value', 'single_quote_data_value', 'start_sc_line', 'o_s_b', 'o_c_b') == '","': self._scan('","') data_value = self.data_value(_context) this_list.append(data_value) if self._peek() not in [ '","', 'data_value_1', 'c_s_b', 'triple_quote_data_value', 'single_quote_data_value', 'start_sc_line', 'o_s_b', 'o_c_b' ]: raise yappsrt.SyntaxError( charpos=self._scanner.get_prev_char_pos(), context=_context, msg='Need one of ' + ', '.join([ '","', 'data_value_1', 'c_s_b', 'triple_quote_data_value', 'single_quote_data_value', 'start_sc_line', 'o_s_b', 'o_c_b' ])) if self._peek() not in [ 'c_s_b', 'data_value_1', '","', 'triple_quote_data_value', 'single_quote_data_value', 'start_sc_line', 'o_s_b', 'o_c_b' ]: raise yappsrt.SyntaxError( charpos=self._scanner.get_prev_char_pos(), context=_context, msg='Need one of ' + ', '.join([ 'data_value_1', 'c_s_b', 'triple_quote_data_value', 'single_quote_data_value', 'start_sc_line', '","', 'o_s_b', 'o_c_b' ])) c_s_b = self._scan('c_s_b') return StarList(this_list)
def save_frame(self, _parent=None): _context = self.Context(_parent, self._scanner, self._pos, 'save_frame', []) save_heading = self._scan('save_heading') savehead = save_heading[5:];savebody = StarBlock(overwrite=False) while self._peek('save_end', 'LBLOCK', 'data_name', 'save_heading', 'END', 'data_heading') in ['LBLOCK', 'data_name']: dataseq = self.dataseq(savebody, _context) if self._peek() not in ['save_end', 'LBLOCK', 'data_name', 'save_heading', 'END', 'data_heading']: raise yappsrt.SyntaxError(charpos=self._scanner.get_prev_char_pos(), context=_context, msg='Need one of ' + ', '.join(['save_end', 'LBLOCK', 'data_name', 'save_heading', 'END', 'data_heading'])) save_end = self._scan('save_end') return (savehead,monitor('save_frame',savebody))
def sc_lines_of_text(self, _parent=None): _context = self.Context(_parent, self._scanner, self._pos, 'sc_lines_of_text', []) start_sc_line = self._scan('start_sc_line') lines = start_sc_line while self._peek('end_sc_line', 'sc_line_of_text') == 'sc_line_of_text': sc_line_of_text = self._scan('sc_line_of_text') lines = lines+sc_line_of_text if self._peek() not in ['end_sc_line', 'sc_line_of_text']: raise yappsrt.SyntaxError(charpos=self._scanner.get_prev_char_pos(), context=_context, msg='Need one of ' + ', '.join(['sc_line_of_text', 'end_sc_line'])) end_sc_line = self._scan('end_sc_line') return monitor('sc_line_of_text',lines+end_sc_line)
def loopfield(self, _parent=None): _context = self.Context(_parent, self._scanner, self._pos, 'loopfield', []) toploop = [] while self._peek('data_name', 'data_value_1', 'start_sc_line') == 'data_name': data_name = self._scan('data_name') toploop.append(data_name) if self._peek() not in ['data_name', 'data_value_1', 'start_sc_line']: raise yappsrt.SyntaxError( charpos=self._scanner.get_prev_char_pos(), context=_context, msg='Need one of ' + ', '.join(['data_name', 'data_value_1', 'start_sc_line'])) return toploop
def loopfield(self, _parent=None): _context = self.Context(_parent, self._scanner, self._pos, 'loopfield', []) toploop=LoopBlock(dimension=1,overwrite=False);curloop=toploop;poploop=None;dim=1 while self._peek('data_name', 'LBLOCK', 'STOP', 'data_value_1', 'start_sc_line') not in ['data_value_1', 'start_sc_line']: _token = self._peek('data_name', 'LBLOCK', 'STOP') if _token == 'data_name': data_name = self._scan('data_name') curloop[data_name]=[] elif _token == 'LBLOCK': LBLOCK = self._scan('LBLOCK') dim=dim+1;newloop=LoopBlock(dimension=dim,overwrite=False);poploop=curloop;curloop.insert_loop(newloop,audit=False);curloop=newloop else: # == 'STOP' STOP = self._scan('STOP') curloop=poploop;dim=dim-1 if self._peek() not in ['data_name', 'LBLOCK', 'STOP', 'data_value_1', 'start_sc_line']: raise yappsrt.SyntaxError(charpos=self._scanner.get_prev_char_pos(), context=_context, msg='Need one of ' + ', '.join(['data_name', 'LBLOCK', 'STOP', 'data_value_1', 'start_sc_line'])) return toploop
def input(self, prepared, _parent=None): _context = self.Context(_parent, self._scanner, self._pos, 'input', [prepared]) _token = self._peek('END', 'data_heading') if _token == 'data_heading': dblock = self.dblock(prepared, _context) allblocks = prepared allblocks.merge_fast(dblock) while self._peek('END', 'data_heading') == 'data_heading': dblock = self.dblock(prepared, _context) allblocks.merge_fast(dblock) if self._peek() not in ['END', 'data_heading']: raise yappsrt.SyntaxError( charpos=self._scanner.get_prev_char_pos(), context=_context, msg='Need one of ' + ', '.join(['END', 'data_heading'])) END = self._scan('END') else: # == 'END' END = self._scan('END') allblocks = prepared return allblocks
def square_bracket_expr(self, _parent=None): _context = self.Context(_parent, self._scanner, self._pos, 'square_bracket_expr', []) o_s_b = self._scan('o_s_b') _token = self._peek('dat_val_nocomma_nosq', 'o_s_b', 'o_c_b', 'o_r_b') if _token == 'dat_val_nocomma_nosq': dat_val_nocomma_nosq = self._scan('dat_val_nocomma_nosq') this_list = [stripstring(dat_val_nocomma_nosq)] if self._peek('dat_val_internal_sq', '","', 'c_s_b') == 'dat_val_internal_sq': dat_val_internal_sq = self._scan('dat_val_internal_sq') this_list[0] += dat_val_internal_sq if self._peek('"\\*"', '","', 'c_s_b') == '"\\*"': self._scan('"\\*"') this_list[0] += "*" else: # in ['o_s_b', 'o_c_b', 'o_r_b'] nested_bracket_expression = self.nested_bracket_expression( _context) this_list = [nested_bracket_expression] while self._peek('c_s_b', '","') == '","': self._scan('","') _token = self._peek('dat_val_nocomma_nosq', 'o_s_b', 'o_c_b', 'o_r_b') if _token == 'dat_val_nocomma_nosq': dat_val_nocomma_nosq = self._scan('dat_val_nocomma_nosq') this_list.append(stripstring(dat_val_nocomma_nosq)) else: # in ['o_s_b', 'o_c_b', 'o_r_b'] nested_bracket_expression = self.nested_bracket_expression( _context) this_list.append(nested_bracket_expression) if self._peek() not in ['c_s_b', '","']: raise yappsrt.SyntaxError( charpos=self._scanner.get_prev_char_pos(), context=_context, msg='Need one of ' + ', '.join(['","', 'c_s_b'])) c_s_b = self._scan('c_s_b') return StarList(this_list)