def refs(soup):
tags = raw_parser.ref_list(soup)<EOL>refs = []<EOL>position = <NUM_LIT:1><EOL>article_doi = doi(soup)<EOL>for tag in tags:<EOL><INDENT>ref = {}<EOL>ref['<STR_LIT>'] = ref_text(tag)<EOL>copy_attribute(tag.attrs, "<STR_LIT:id>", ref)<EOL>if raw_parser.article_title(tag):<EOL><INDENT>ref['<STR_LIT>'] = node_text(raw_parser.article_title(tag))<EOL>ref['<STR_LIT>'] = node_contents_str(raw_parser.article_title(tag))<EOL><DEDENT>if raw_parser.pub_id(tag, "<STR_LIT>"):<EOL><INDENT>ref['<STR_LIT>'] = node_contents_str(first(raw_parser.pub_id(tag, "<STR_LIT>")))<EOL><DEDENT>if raw_parser.pub_id(tag, "<STR_LIT>"):<EOL><INDENT>ref['<STR_LIT>'] = node_contents_str(first(raw_parser.pub_id(tag, "<STR_LIT>")))<EOL><DEDENT>if raw_parser.pub_id(tag, "<STR_LIT>"):<EOL><INDENT>ref['<STR_LIT>'] = node_contents_str(first(raw_parser.pub_id(tag, "<STR_LIT>")))<EOL>ref['<STR_LIT>'] = doi_uri_to_doi(node_contents_str(first(raw_parser.pub_id(tag, "<STR_LIT>"))))<EOL><DEDENT>uri_tag = None<EOL>if raw_parser.ext_link(tag, "<STR_LIT>"):<EOL><INDENT>uri_tag = first(raw_parser.ext_link(tag, "<STR_LIT>"))<EOL><DEDENT>elif raw_parser.uri(tag):<EOL><INDENT>uri_tag = first(raw_parser.uri(tag))<EOL><DEDENT>if uri_tag:<EOL><INDENT>set_if_value(ref, "<STR_LIT>", uri_tag.get('<STR_LIT>'))<EOL>set_if_value(ref, "<STR_LIT>", node_contents_str(uri_tag))<EOL><DEDENT>if not ref.get('<STR_LIT>') and raw_parser.pub_id(tag, "<STR_LIT>"):<EOL><INDENT>pub_id_tag = first(raw_parser.pub_id(tag, pub_id_type="<STR_LIT>"))<EOL>set_if_value(ref, "<STR_LIT>", pub_id_tag.get('<STR_LIT>'))<EOL><DEDENT>set_if_value(ref, "<STR_LIT>", node_contents_str(first(raw_parser.object_id(tag, "<STR_LIT>"))))<EOL>if not ref.get('<STR_LIT>'):<EOL><INDENT>set_if_value(ref, "<STR_LIT>", node_contents_str(first(raw_parser.pub_id(tag, pub_id_type="<STR_LIT>"))))<EOL><DEDENT>if not ref.get('<STR_LIT>'):<EOL><INDENT>set_if_value(ref, "<STR_LIT>", node_contents_str(first(raw_parser.pub_id(tag, pub_id_type="<STR_LIT>"))))<EOL><DEDENT>if(raw_parser.year(tag)):<EOL><INDENT>set_if_value(ref, "<STR_LIT>", node_text(raw_parser.year(tag)))<EOL>set_if_value(ref, "<STR_LIT>", raw_parser.year(tag).get('<STR_LIT>'))<EOL><DEDENT>if(raw_parser.date_in_citation(tag)):<EOL><INDENT>set_if_value(ref, "<STR_LIT>", node_text(first(raw_parser.date_in_citation(tag))))<EOL>set_if_value(ref, "<STR_LIT>", first(raw_parser.date_in_citation(tag)).get('<STR_LIT>'))<EOL><DEDENT>if(raw_parser.patent(tag)):<EOL><INDENT>set_if_value(ref, "<STR_LIT>", node_text(first(raw_parser.patent(tag))))<EOL>set_if_value(ref, "<STR_LIT>", first(raw_parser.patent(tag)).get('<STR_LIT>'))<EOL><DEDENT>set_if_value(ref, "<STR_LIT:source>", node_text(first(raw_parser.source(tag))))<EOL>set_if_value(ref, "<STR_LIT>", node_text(first(raw_parser.elocation_id(tag))))<EOL>if raw_parser.element_citation(tag):<EOL><INDENT>copy_attribute(first(raw_parser.element_citation(tag)).attrs, "<STR_LIT>", ref)<EOL><DEDENT>if "<STR_LIT>" not in ref and raw_parser.mixed_citations(tag):<EOL><INDENT>copy_attribute(first(raw_parser.mixed_citations(tag)).attrs, "<STR_LIT>", ref)<EOL><DEDENT>person_group = raw_parser.person_group(tag)<EOL>authors = []<EOL>for group in person_group:<EOL><INDENT>author_type = None<EOL>if "<STR_LIT>" in group.attrs:<EOL><INDENT>author_type = group["<STR_LIT>"]<EOL><DEDENT>for name_or_collab_tag in extract_nodes(group, ["<STR_LIT:name>", "<STR_LIT>", "<STR_LIT>"]):<EOL><INDENT>author = {}<EOL>set_if_value(author, "<STR_LIT>", author_type)<EOL>if name_or_collab_tag.name in ["<STR_LIT:name>", "<STR_LIT>"]:<EOL><INDENT>set_if_value(author, "<STR_LIT>", node_text(first(raw_parser.surname(name_or_collab_tag))))<EOL>set_if_value(author, "<STR_LIT>", node_text(first(raw_parser.given_names(name_or_collab_tag))))<EOL>set_if_value(author, "<STR_LIT>", node_text(first(raw_parser.suffix(name_or_collab_tag))))<EOL><DEDENT>if name_or_collab_tag.name == "<STR_LIT>":<EOL><INDENT>set_if_value(author, "<STR_LIT>", node_contents_str(name_or_collab_tag))<EOL><DEDENT>if len(author) > <NUM_LIT:0>:<EOL><INDENT>authors.append(author)<EOL><DEDENT><DEDENT>if first(raw_parser.etal(group)):<EOL><INDENT>author = {}<EOL>author['<STR_LIT>'] = True<EOL>set_if_value(author, "<STR_LIT>", author_type)<EOL>authors.append(author)<EOL><DEDENT><DEDENT>if len(person_group) == <NUM_LIT:0>:<EOL><INDENT>collab_tags = raw_parser.collab(tag)<EOL>for collab_tag in collab_tags:<EOL><INDENT>author = {}<EOL>set_if_value(author, "<STR_LIT>", "<STR_LIT>")<EOL>set_if_value(author, "<STR_LIT>", node_contents_str(collab_tag))<EOL>if len(author) > <NUM_LIT:0>:<EOL><INDENT>authors.append(author)<EOL><DEDENT><DEDENT><DEDENT>if len(authors) > <NUM_LIT:0>:<EOL><INDENT>ref['<STR_LIT>'] = authors<EOL><DEDENT>set_if_value(ref, "<STR_LIT>", node_text(first(raw_parser.volume(tag))))<EOL>set_if_value(ref, "<STR_LIT>", node_text(first(raw_parser.issue(tag))))<EOL>set_if_value(ref, "<STR_LIT>", node_text(first(raw_parser.fpage(tag))))<EOL>set_if_value(ref, "<STR_LIT>", node_text(first(raw_parser.lpage(tag))))<EOL>set_if_value(ref, "<STR_LIT>", node_text(first(raw_parser.collab(tag))))<EOL>set_if_value(ref, "<STR_LIT>", node_text(first(raw_parser.publisher_loc(tag))))<EOL>set_if_value(ref, "<STR_LIT>", node_text(first(raw_parser.publisher_name(tag))))<EOL>set_if_value(ref, "<STR_LIT>", node_contents_str(first(raw_parser.edition(tag))))<EOL>set_if_value(ref, "<STR_LIT:version>", node_contents_str(first(raw_parser.version(tag))))<EOL>set_if_value(ref, "<STR_LIT>", node_contents_str(first(raw_parser.chapter_title(tag))))<EOL>set_if_value(ref, "<STR_LIT>", node_text(first(raw_parser.comment(tag))))<EOL>set_if_value(ref, "<STR_LIT>", node_contents_str(first(raw_parser.data_title(tag))))<EOL>set_if_value(ref, "<STR_LIT>", node_text(first(raw_parser.conf_name(tag))))<EOL>if(len(ref) > <NUM_LIT:0>):<EOL><INDENT>ref['<STR_LIT>'] = article_doi<EOL>ref['<STR_LIT>'] = position<EOL>refs.append(ref)<EOL>position += <NUM_LIT:1><EOL><DEDENT><DEDENT>return refs<EOL>
Find and return all the references