# Path: lib/robot/parsing/comments.py
# class CommentCache(object):
# 
#     def __init__(self):
#         self._comments = []
# 
#     def add(self, comment):
#         self._comments.append(comment)
# 
#     def consume_with(self, function):
#         map(function, self._comments)
#         self.__init__()
# 
# class Comments(object):
# 
#     def __init__(self):
#         self._comments = []
# 
#     def add(self, row):
#         if row.comments:
#             self._comments.extend(c.strip() for c in row.comments if c.strip())
# 
#     @property
#     def value(self):
#         return self._comments
# 
# Path: lib/robot/parsing/settings.py
# class Documentation(Setting):
# 
#     def _set_initial_value(self):
#         self.value = ''
# 
#     def _populate(self, value):
#         self.value = self._concat_string_with_value(self.value, value)
# 
#     def _string_value(self, value):
#         return value if isinstance(value, basestring) else ''.join(value)
# 
#     def _data_as_list(self):
#         return [self.setting_name, self.value]
# 
# class MetadataList(_DataList):
# 
#     def populate(self, name, value, comment):
#         self._add(Metadata(self._parent, name, value, comment, joined=True))


import re
from .comments import CommentCache, Comments
from .settings import Documentation, MetadataList
            return
        if not self._test_or_uk:
            self._test_or_uk = self._test_or_uk_creator(row.head)
        dedented_row = row.dedent()
        if dedented_row:
            self._handle_data_row(dedented_row)

    def _handle_data_row(self, row):
        if not self._continues(row):
            self._populator.populate()
            self._populator = self._get_populator(row)
            self._comment_cache.consume_with(self._populate_comment_row)
        else:
            self._comment_cache.consume_with(self._populator.add)
        self._populator.add(row)

    def _populate_comment_row(self, crow):
        populator = StepPopulator(self._test_or_uk.add_step)
        populator.add(crow)
        populator.populate()

    def populate(self):
        self._populator.populate()
        self._comment_cache.consume_with(self._populate_comment_row)

    def _get_populator(self, row):
        if row.starts_test_or_user_keyword_setting():
            setter = self._setting_setter(row)
            if not setter:
                return NullPopulator()

# Path: lib/robot/parsing/comments.py
# class CommentCache(object):
# 
#     def __init__(self):
#         self._comments = []
# 
#     def add(self, comment):
#         self._comments.append(comment)
# 
#     def consume_with(self, function):
#         map(function, self._comments)
#         self.__init__()
# 
# class Comments(object):
# 
#     def __init__(self):
#         self._comments = []
# 
#     def add(self, row):
#         if row.comments:
#             self._comments.extend(c.strip() for c in row.comments if c.strip())
# 
#     @property
#     def value(self):
#         return self._comments
# 
# Path: lib/robot/parsing/settings.py
# class Documentation(Setting):
# 
#     def _set_initial_value(self):
#         self.value = ''
# 
#     def _populate(self, value):
#         self.value = self._concat_string_with_value(self.value, value)
# 
#     def _string_value(self, value):
#         return value if isinstance(value, basestring) else ''.join(value)
# 
#     def _data_as_list(self):
#         return [self.setting_name, self.value]
# 
# class MetadataList(_DataList):
# 
#     def populate(self, name, value, comment):
#         self._add(Metadata(self._parent, name, value, comment, joined=True))


# Path: lib/robot/parsing/tablepopulators.py
import re
from .comments import CommentCache, Comments
from .settings import Documentation, MetadataList

            return
        if not self._test_or_uk:
            self._test_or_uk = self._test_or_uk_creator(row.head)
        dedented_row = row.dedent()
        if dedented_row:
            self._handle_data_row(dedented_row)

    def _handle_data_row(self, row):
        if not self._continues(row):
            self._populator.populate()
            self._populator = self._get_populator(row)
            self._comment_cache.consume_with(self._populate_comment_row)
        else:
            self._comment_cache.consume_with(self._populator.add)
        self._populator.add(row)

    def _populate_comment_row(self, crow):
        populator = StepPopulator(self._test_or_uk.add_step)
        populator.add(crow)
        populator.populate()

    def populate(self):
        self._populator.populate()
        self._comment_cache.consume_with(self._populate_comment_row)

    def _get_populator(self, row):
        if row.starts_test_or_user_keyword_setting():
            setter = self._setting_setter(row)
            if not setter:
                return NullPopulator()

            if setter.im_class is Documentation: