def process_need_nodes(app, doctree, fromdocname):
if not app.config.needs_include_needs:<EOL><INDENT>for node in doctree.traverse(Need):<EOL><INDENT>node.parent.remove(node)<EOL><DEDENT>return<EOL><DEDENT>env = app.builder.env<EOL>if not hasattr(env, "<STR_LIT>"):<EOL><INDENT>return<EOL><DEDENT>needs = env.needs_all_needs<EOL>resolve_dynamic_values(env)<EOL>create_back_links(env)<EOL>for node_need in doctree.traverse(Need):<EOL><INDENT>need_id = node_need.attributes["<STR_LIT>"][<NUM_LIT:0>]<EOL>need_data = needs[need_id]<EOL>find_and_replace_node_content(node_need, env, need_data)<EOL>node_headline = construct_headline(need_data, app)<EOL>node_meta = construct_meta(need_data, env)<EOL>if need_data["<STR_LIT>"] and "<STR_LIT>" in app.builder.name.upper():<EOL><INDENT>node_need_toogle_container = nodes.container(classes=['<STR_LIT>'])<EOL>node_need_toogle_head_container = nodes.container(classes=['<STR_LIT>'])<EOL>node_need_toogle_head_container += node_headline.children<EOL>node_need_toogle_container.append(node_need_toogle_head_container)<EOL>if node_meta.children:<EOL><INDENT>node_need_toogle_container.append(node_meta)<EOL><DEDENT>node_need.insert(<NUM_LIT:0>, node_need_toogle_container)<EOL><DEDENT>else:<EOL><INDENT>node_meta.insert(<NUM_LIT:0>, node_headline)<EOL>node_need.insert(<NUM_LIT:0>, node_meta)<EOL><DEDENT><DEDENT>
Event handler to add title meta data (status, tags, links, ...) information to the Need node.

:param app:
:param doctree:
:param fromdocname:
:return: