docs: def identify_and_tag_collaborations(line, collaborations_kb):
      """Given a line where Authors have been tagged, and all other tags
         and content has been replaced with underscores, go through and try
         to identify extra items of data which should be placed into 'h'
         subfields.
         Later on, these tagged pieces of information will be merged into
         the content of the most recently found author. This is separated
         from the author tagging procedure since separate tags can be used,
         which won't influence the reference splitting heuristics
         (used when looking at mulitple <AUTH> tags in a line).
      """
      for dummy_collab, re_collab in collaborations_kb.iteritems():
          matches = re_collab.finditer(strip_tags(line))
  
          for match in reversed(list(matches)):
              line = line[:match.start()] \
                  + CFG_REFEXTRACT_MARKER_OPENING_COLLABORATION \
                  + match.group(1).strip(".,:;- [](){}") \
                  + CFG_REFEXTRACT_MARKER_CLOSING_COLLABORATION \
                  + line[match.end():]
  
      return line