def append_fresh_table(self, fresh_table): """ Gets called by FreshTable instances when they get written to. """ if fresh_table.name: elements = [] if fresh_table.is_array: elements += [ element_factory.create_array_of_tables_header_element( fresh_table.name) ] else: elements += [ element_factory.create_table_header_element( fresh_table.name) ] elements += [fresh_table, element_factory.create_newline_element()] self.append_elements(elements) else: # It's an anonymous table self.prepend_elements( [fresh_table, element_factory.create_newline_element()])
def _do_table(table_elements): while table_elements and isinstance(table_elements[-1], WhitespaceElement): del table_elements[-1] if not table_elements: return if isinstance(table_elements[-1], NewlineElement): last_non_metadata_i = t.find_previous(table_elements, t.predicates.non_metadata) del table_elements[last_non_metadata_i+1:] table_elements.append(element_factory.create_newline_element()) table_elements.append(element_factory.create_newline_element())
def _do_table(table_elements): while table_elements and isinstance(table_elements[-1], WhitespaceElement): del table_elements[-1] if not table_elements: return if isinstance(table_elements[-1], NewlineElement): last_non_metadata_i = t.find_previous(table_elements, t.predicates.non_metadata) del table_elements[last_non_metadata_i + 1:] table_elements.append(element_factory.create_newline_element()) table_elements.append(element_factory.create_newline_element())
def turn_into_multiline(self): """ Turns this array into a multi-line array with each element lying on its own line. """ if self.is_multiline: return i = self._find_following_comma(-1) def next_entry_i(): return self._find_following_non_metadata(i) def next_newline_i(): return self._find_following_newline(i) def next_closing_bracket_i(): return self._find_following_closing_square_bracket(i) def next_comma_i(): return self._find_following_comma(i) while i < len(self.elements)-1: if next_newline_i() < next_entry_i(): self.elements.insert(i+1, factory.create_newline_element()) if float('-inf') < next_comma_i() < next_closing_bracket_i(): i = next_comma_i() else: i = next_closing_bracket_i()
def append_fresh_table(self, fresh_table): """ Gets called by FreshTable instances when they get written to. """ if fresh_table.name: elements = [] if fresh_table.is_array: elements += [element_factory.create_array_of_tables_header_element(fresh_table.name)] else: elements += [element_factory.create_table_header_element(fresh_table.name)] elements += [fresh_table, element_factory.create_newline_element()] self.append_elements(elements) else: # It's an anonymous table self.prepend_elements([fresh_table, element_factory.create_newline_element()])
def _insert(self, key, value): value_element = value if isinstance(value, Element) else factory.create_element(value) indentation_size = self._detect_indentation_size() indentation = [factory.create_whitespace_element(self._detect_indentation_size())] if indentation_size else [] inserted_elements = indentation + [ factory.create_string_element(key, bare_allowed=True), factory.create_whitespace_element(), factory.create_operator_element('='), factory.create_whitespace_element(), value_element, factory.create_newline_element(), ] insertion_index = self._find_insertion_index() self._sub_elements = \ self.sub_elements[:insertion_index] + inserted_elements + self.sub_elements[insertion_index:]
def _insert(self, key, value): value_element = value if isinstance( value, Element) else factory.create_element(value) indentation_size = self._detect_indentation_size() indentation = [ factory.create_whitespace_element(self._detect_indentation_size()) ] if indentation_size else [] inserted_elements = indentation + [ factory.create_string_element(key, bare_allowed=True), factory.create_whitespace_element(), factory.create_operator_element('='), factory.create_whitespace_element(), value_element, factory.create_newline_element(), ] insertion_index = self._find_insertion_index() self._sub_elements = \ self.sub_elements[:insertion_index] + inserted_elements + self.sub_elements[insertion_index:]