Exemple #1
0
    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()])
Exemple #2
0
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())
Exemple #3
0
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())
Exemple #4
0
    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()])
Exemple #6
0
    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:]
Exemple #7
0
    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:]