def _parse_see_also(self, content):
items = []<EOL>def parse_item_name(text):<EOL><INDENT>"""<STR_LIT>"""<EOL>m = self._name_rgx.match(text)<EOL>if m:<EOL><INDENT>g = m.groups()<EOL>if g[<NUM_LIT:1>] is None:<EOL><INDENT>return g[<NUM_LIT:3>], None<EOL><DEDENT>else:<EOL><INDENT>return g[<NUM_LIT:2>], g[<NUM_LIT:1>]<EOL><DEDENT><DEDENT>raise ValueError("<STR_LIT>" % text)<EOL><DEDENT>def push_item(name, rest):<EOL><INDENT>if not name:<EOL><INDENT>return<EOL><DEDENT>name, role = parse_item_name(name)<EOL>items.append((name, list(rest), role))<EOL>del rest[:]<EOL><DEDENT>current_func = None<EOL>rest = []<EOL>for line in content:<EOL><INDENT>if not line.strip(): continue<EOL>m = self._name_rgx.match(line)<EOL>if m and line[m.end():].strip().startswith('<STR_LIT::>'):<EOL><INDENT>push_item(current_func, rest)<EOL>current_func, line = line[:m.end()], line[m.end():]<EOL>rest = [line.split('<STR_LIT::>', <NUM_LIT:1>)[<NUM_LIT:1>].strip()]<EOL>if not rest[<NUM_LIT:0>]:<EOL><INDENT>rest = []<EOL><DEDENT><DEDENT>elif not line.startswith('<STR_LIT:U+0020>'):<EOL><INDENT>push_item(current_func, rest)<EOL>current_func = None<EOL>if '<STR_LIT:U+002C>' in line:<EOL><INDENT>for func in line.split('<STR_LIT:U+002C>'):<EOL><INDENT>if func.strip():<EOL><INDENT>push_item(func, [])<EOL><DEDENT><DEDENT><DEDENT>elif line.strip():<EOL><INDENT>current_func = line<EOL><DEDENT><DEDENT>elif current_func is not None:<EOL><INDENT>rest.append(line.strip())<EOL><DEDENT><DEDENT>push_item(current_func, rest)<EOL>return items<EOL>
func_name : Descriptive text
    continued text
another_func_name : Descriptive text
func_name1, func_name2, :meth:`func_name`, func_name3