Sophie

Sophie

distrib > Fedora > 17 > i386 > media > updates > by-pkgid > 675c8c8167236dfcf8d66da674f931e8 > files > 1462

erlang-doc-R15B-03.3.fc17.noarch.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html xmlns:fn="http://www.w3.org/2005/02/xpath-functions">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="../../../../doc/otp_doc.css" type="text/css">
<title>Erlang -- igor</title>
</head>
<body bgcolor="white" text="#000000" link="#0000ff" vlink="#ff00ff" alink="#ff0000"><div id="container">
<script id="js" type="text/javascript" language="JavaScript" src="../../../../doc/js/flipmenu/flipmenu.js"></script><script id="js2" type="text/javascript" src="../../../../doc/js/erlresolvelinks.js"></script><script language="JavaScript" type="text/javascript">
            <!--
              function getWinHeight() {
                var myHeight = 0;
                if( typeof( window.innerHeight ) == 'number' ) {
                  //Non-IE
                  myHeight = window.innerHeight;
                } else if( document.documentElement && ( document.documentElement.clientWidth ||
                                                         document.documentElement.clientHeight ) ) {
                  //IE 6+ in 'standards compliant mode'
                  myHeight = document.documentElement.clientHeight;
                } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
                  //IE 4 compatible
                  myHeight = document.body.clientHeight;
                }
                return myHeight;
              }

              function setscrollpos() {
                var objf=document.getElementById('loadscrollpos');
                 document.getElementById("leftnav").scrollTop = objf.offsetTop - getWinHeight()/2;
              }

              function addEvent(obj, evType, fn){
                if (obj.addEventListener){
                obj.addEventListener(evType, fn, true);
                return true;
              } else if (obj.attachEvent){
                var r = obj.attachEvent("on"+evType, fn);
                return r;
              } else {
                return false;
              }
             }

             addEvent(window, 'load', setscrollpos);

             //--></script><div id="leftnav"><div class="innertube">
<img alt="Erlang logo" src="../../../../doc/erlang-logo.png"><br><small><a href="users_guide.html">User's Guide</a><br><a href="index.html">Reference Manual</a><br><a href="release_notes.html">Release Notes</a><br><a href="../pdf/syntax_tools-1.6.9.pdf">PDF</a><br><a href="../../../../doc/index.html">Top</a></small><p><strong>Syntax_Tools</strong><br><strong>Reference Manual</strong><br><small>Version 1.6.9</small></p>
<br><a href="javascript:openAllFlips()">Expand All</a><br><a href="javascript:closeAllFlips()">Contract All</a><p><small><strong>Table of Contents</strong></small></p>
<ul class="flipMenu">
<li id="no" title="epp_dodger " expanded="false">epp_dodger<ul>
<li><a href="epp_dodger.html">
                  Top of manual page
                </a></li>
<li title="parse-1"><a href="epp_dodger.html#parse-1">parse/1</a></li>
<li title="parse-2"><a href="epp_dodger.html#parse-2">parse/2</a></li>
<li title="parse-3"><a href="epp_dodger.html#parse-3">parse/3</a></li>
<li title="parse_file-1"><a href="epp_dodger.html#parse_file-1">parse_file/1</a></li>
<li title="parse_file-2"><a href="epp_dodger.html#parse_file-2">parse_file/2</a></li>
<li title="parse_form-2"><a href="epp_dodger.html#parse_form-2">parse_form/2</a></li>
<li title="parse_form-3"><a href="epp_dodger.html#parse_form-3">parse_form/3</a></li>
<li title="quick_parse-1"><a href="epp_dodger.html#quick_parse-1">quick_parse/1</a></li>
<li title="quick_parse-2"><a href="epp_dodger.html#quick_parse-2">quick_parse/2</a></li>
<li title="quick_parse-3"><a href="epp_dodger.html#quick_parse-3">quick_parse/3</a></li>
<li title="quick_parse_file-1"><a href="epp_dodger.html#quick_parse_file-1">quick_parse_file/1</a></li>
<li title="quick_parse_file-2"><a href="epp_dodger.html#quick_parse_file-2">quick_parse_file/2</a></li>
<li title="quick_parse_form-2"><a href="epp_dodger.html#quick_parse_form-2">quick_parse_form/2</a></li>
<li title="quick_parse_form-3"><a href="epp_dodger.html#quick_parse_form-3">quick_parse_form/3</a></li>
<li title="tokens_to_string-1"><a href="epp_dodger.html#tokens_to_string-1">tokens_to_string/1</a></li>
</ul>
</li>
<li id="no" title="erl_comment_scan " expanded="false">erl_comment_scan<ul>
<li><a href="erl_comment_scan.html">
                  Top of manual page
                </a></li>
<li title="file-1"><a href="erl_comment_scan.html#file-1">file/1</a></li>
<li title="join_lines-1"><a href="erl_comment_scan.html#join_lines-1">join_lines/1</a></li>
<li title="scan_lines-1"><a href="erl_comment_scan.html#scan_lines-1">scan_lines/1</a></li>
<li title="string-1"><a href="erl_comment_scan.html#string-1">string/1</a></li>
</ul>
</li>
<li id="no" title="erl_prettypr " expanded="false">erl_prettypr<ul>
<li><a href="erl_prettypr.html">
                  Top of manual page
                </a></li>
<li title="best-1"><a href="erl_prettypr.html#best-1">best/1</a></li>
<li title="best-2"><a href="erl_prettypr.html#best-2">best/2</a></li>
<li title="format-1"><a href="erl_prettypr.html#format-1">format/1</a></li>
<li title="format-2"><a href="erl_prettypr.html#format-2">format/2</a></li>
<li title="get_ctxt_hook-1"><a href="erl_prettypr.html#get_ctxt_hook-1">get_ctxt_hook/1</a></li>
<li title="get_ctxt_linewidth-1"><a href="erl_prettypr.html#get_ctxt_linewidth-1">get_ctxt_linewidth/1</a></li>
<li title="get_ctxt_paperwidth-1"><a href="erl_prettypr.html#get_ctxt_paperwidth-1">get_ctxt_paperwidth/1</a></li>
<li title="get_ctxt_precedence-1"><a href="erl_prettypr.html#get_ctxt_precedence-1">get_ctxt_precedence/1</a></li>
<li title="get_ctxt_user-1"><a href="erl_prettypr.html#get_ctxt_user-1">get_ctxt_user/1</a></li>
<li title="layout-1"><a href="erl_prettypr.html#layout-1">layout/1</a></li>
<li title="layout-2"><a href="erl_prettypr.html#layout-2">layout/2</a></li>
<li title="set_ctxt_hook-2"><a href="erl_prettypr.html#set_ctxt_hook-2">set_ctxt_hook/2</a></li>
<li title="set_ctxt_linewidth-2"><a href="erl_prettypr.html#set_ctxt_linewidth-2">set_ctxt_linewidth/2</a></li>
<li title="set_ctxt_paperwidth-2"><a href="erl_prettypr.html#set_ctxt_paperwidth-2">set_ctxt_paperwidth/2</a></li>
<li title="set_ctxt_precedence-2"><a href="erl_prettypr.html#set_ctxt_precedence-2">set_ctxt_precedence/2</a></li>
<li title="set_ctxt_user-2"><a href="erl_prettypr.html#set_ctxt_user-2">set_ctxt_user/2</a></li>
</ul>
</li>
<li id="no" title="erl_recomment " expanded="false">erl_recomment<ul>
<li><a href="erl_recomment.html">
                  Top of manual page
                </a></li>
<li title="quick_recomment_forms-2"><a href="erl_recomment.html#quick_recomment_forms-2">quick_recomment_forms/2</a></li>
<li title="recomment_forms-2"><a href="erl_recomment.html#recomment_forms-2">recomment_forms/2</a></li>
<li title="recomment_tree-2"><a href="erl_recomment.html#recomment_tree-2">recomment_tree/2</a></li>
</ul>
</li>
<li id="no" title="erl_syntax " expanded="false">erl_syntax<ul>
<li><a href="erl_syntax.html">
                  Top of manual page
                </a></li>
<li title="abstract-1"><a href="erl_syntax.html#abstract-1">abstract/1</a></li>
<li title="add_ann-2"><a href="erl_syntax.html#add_ann-2">add_ann/2</a></li>
<li title="add_postcomments-2"><a href="erl_syntax.html#add_postcomments-2">add_postcomments/2</a></li>
<li title="add_precomments-2"><a href="erl_syntax.html#add_precomments-2">add_precomments/2</a></li>
<li title="application-2"><a href="erl_syntax.html#application-2">application/2</a></li>
<li title="application-3"><a href="erl_syntax.html#application-3">application/3</a></li>
<li title="application_arguments-1"><a href="erl_syntax.html#application_arguments-1">application_arguments/1</a></li>
<li title="application_operator-1"><a href="erl_syntax.html#application_operator-1">application_operator/1</a></li>
<li title="arity_qualifier-2"><a href="erl_syntax.html#arity_qualifier-2">arity_qualifier/2</a></li>
<li title="arity_qualifier_argument-1"><a href="erl_syntax.html#arity_qualifier_argument-1">arity_qualifier_argument/1</a></li>
<li title="arity_qualifier_body-1"><a href="erl_syntax.html#arity_qualifier_body-1">arity_qualifier_body/1</a></li>
<li title="atom-1"><a href="erl_syntax.html#atom-1">atom/1</a></li>
<li title="atom_literal-1"><a href="erl_syntax.html#atom_literal-1">atom_literal/1</a></li>
<li title="atom_name-1"><a href="erl_syntax.html#atom_name-1">atom_name/1</a></li>
<li title="atom_value-1"><a href="erl_syntax.html#atom_value-1">atom_value/1</a></li>
<li title="attribute-1"><a href="erl_syntax.html#attribute-1">attribute/1</a></li>
<li title="attribute-2"><a href="erl_syntax.html#attribute-2">attribute/2</a></li>
<li title="attribute_arguments-1"><a href="erl_syntax.html#attribute_arguments-1">attribute_arguments/1</a></li>
<li title="attribute_name-1"><a href="erl_syntax.html#attribute_name-1">attribute_name/1</a></li>
<li title="binary-1"><a href="erl_syntax.html#binary-1">binary/1</a></li>
<li title="binary_comp-2"><a href="erl_syntax.html#binary_comp-2">binary_comp/2</a></li>
<li title="binary_comp_body-1"><a href="erl_syntax.html#binary_comp_body-1">binary_comp_body/1</a></li>
<li title="binary_comp_template-1"><a href="erl_syntax.html#binary_comp_template-1">binary_comp_template/1</a></li>
<li title="binary_field-1"><a href="erl_syntax.html#binary_field-1">binary_field/1</a></li>
<li title="binary_field-2"><a href="erl_syntax.html#binary_field-2">binary_field/2</a></li>
<li title="binary_field-3"><a href="erl_syntax.html#binary_field-3">binary_field/3</a></li>
<li title="binary_field_body-1"><a href="erl_syntax.html#binary_field_body-1">binary_field_body/1</a></li>
<li title="binary_field_size-1"><a href="erl_syntax.html#binary_field_size-1">binary_field_size/1</a></li>
<li title="binary_field_types-1"><a href="erl_syntax.html#binary_field_types-1">binary_field_types/1</a></li>
<li title="binary_fields-1"><a href="erl_syntax.html#binary_fields-1">binary_fields/1</a></li>
<li title="binary_generator-2"><a href="erl_syntax.html#binary_generator-2">binary_generator/2</a></li>
<li title="binary_generator_body-1"><a href="erl_syntax.html#binary_generator_body-1">binary_generator_body/1</a></li>
<li title="binary_generator_pattern-1"><a href="erl_syntax.html#binary_generator_pattern-1">binary_generator_pattern/1</a></li>
<li title="block_expr-1"><a href="erl_syntax.html#block_expr-1">block_expr/1</a></li>
<li title="block_expr_body-1"><a href="erl_syntax.html#block_expr_body-1">block_expr_body/1</a></li>
<li title="case_expr-2"><a href="erl_syntax.html#case_expr-2">case_expr/2</a></li>
<li title="case_expr_argument-1"><a href="erl_syntax.html#case_expr_argument-1">case_expr_argument/1</a></li>
<li title="case_expr_clauses-1"><a href="erl_syntax.html#case_expr_clauses-1">case_expr_clauses/1</a></li>
<li title="catch_expr-1"><a href="erl_syntax.html#catch_expr-1">catch_expr/1</a></li>
<li title="catch_expr_body-1"><a href="erl_syntax.html#catch_expr_body-1">catch_expr_body/1</a></li>
<li title="char-1"><a href="erl_syntax.html#char-1">char/1</a></li>
<li title="char_literal-1"><a href="erl_syntax.html#char_literal-1">char_literal/1</a></li>
<li title="char_value-1"><a href="erl_syntax.html#char_value-1">char_value/1</a></li>
<li title="class_qualifier-2"><a href="erl_syntax.html#class_qualifier-2">class_qualifier/2</a></li>
<li title="class_qualifier_argument-1"><a href="erl_syntax.html#class_qualifier_argument-1">class_qualifier_argument/1</a></li>
<li title="class_qualifier_body-1"><a href="erl_syntax.html#class_qualifier_body-1">class_qualifier_body/1</a></li>
<li title="clause-2"><a href="erl_syntax.html#clause-2">clause/2</a></li>
<li title="clause-3"><a href="erl_syntax.html#clause-3">clause/3</a></li>
<li title="clause_body-1"><a href="erl_syntax.html#clause_body-1">clause_body/1</a></li>
<li title="clause_guard-1"><a href="erl_syntax.html#clause_guard-1">clause_guard/1</a></li>
<li title="clause_patterns-1"><a href="erl_syntax.html#clause_patterns-1">clause_patterns/1</a></li>
<li title="comment-1"><a href="erl_syntax.html#comment-1">comment/1</a></li>
<li title="comment-2"><a href="erl_syntax.html#comment-2">comment/2</a></li>
<li title="comment_padding-1"><a href="erl_syntax.html#comment_padding-1">comment_padding/1</a></li>
<li title="comment_text-1"><a href="erl_syntax.html#comment_text-1">comment_text/1</a></li>
<li title="compact_list-1"><a href="erl_syntax.html#compact_list-1">compact_list/1</a></li>
<li title="concrete-1"><a href="erl_syntax.html#concrete-1">concrete/1</a></li>
<li title="cond_expr-1"><a href="erl_syntax.html#cond_expr-1">cond_expr/1</a></li>
<li title="cond_expr_clauses-1"><a href="erl_syntax.html#cond_expr_clauses-1">cond_expr_clauses/1</a></li>
<li title="conjunction-1"><a href="erl_syntax.html#conjunction-1">conjunction/1</a></li>
<li title="conjunction_body-1"><a href="erl_syntax.html#conjunction_body-1">conjunction_body/1</a></li>
<li title="cons-2"><a href="erl_syntax.html#cons-2">cons/2</a></li>
<li title="copy_ann-2"><a href="erl_syntax.html#copy_ann-2">copy_ann/2</a></li>
<li title="copy_attrs-2"><a href="erl_syntax.html#copy_attrs-2">copy_attrs/2</a></li>
<li title="copy_comments-2"><a href="erl_syntax.html#copy_comments-2">copy_comments/2</a></li>
<li title="copy_pos-2"><a href="erl_syntax.html#copy_pos-2">copy_pos/2</a></li>
<li title="data-1"><a href="erl_syntax.html#data-1">data/1</a></li>
<li title="disjunction-1"><a href="erl_syntax.html#disjunction-1">disjunction/1</a></li>
<li title="disjunction_body-1"><a href="erl_syntax.html#disjunction_body-1">disjunction_body/1</a></li>
<li title="eof_marker-0"><a href="erl_syntax.html#eof_marker-0">eof_marker/0</a></li>
<li title="error_marker-1"><a href="erl_syntax.html#error_marker-1">error_marker/1</a></li>
<li title="error_marker_info-1"><a href="erl_syntax.html#error_marker_info-1">error_marker_info/1</a></li>
<li title="flatten_form_list-1"><a href="erl_syntax.html#flatten_form_list-1">flatten_form_list/1</a></li>
<li title="float-1"><a href="erl_syntax.html#float-1">float/1</a></li>
<li title="float_literal-1"><a href="erl_syntax.html#float_literal-1">float_literal/1</a></li>
<li title="float_value-1"><a href="erl_syntax.html#float_value-1">float_value/1</a></li>
<li title="form_list-1"><a href="erl_syntax.html#form_list-1">form_list/1</a></li>
<li title="form_list_elements-1"><a href="erl_syntax.html#form_list_elements-1">form_list_elements/1</a></li>
<li title="fun_expr-1"><a href="erl_syntax.html#fun_expr-1">fun_expr/1</a></li>
<li title="fun_expr_arity-1"><a href="erl_syntax.html#fun_expr_arity-1">fun_expr_arity/1</a></li>
<li title="fun_expr_clauses-1"><a href="erl_syntax.html#fun_expr_clauses-1">fun_expr_clauses/1</a></li>
<li title="function-2"><a href="erl_syntax.html#function-2">function/2</a></li>
<li title="function_arity-1"><a href="erl_syntax.html#function_arity-1">function_arity/1</a></li>
<li title="function_clauses-1"><a href="erl_syntax.html#function_clauses-1">function_clauses/1</a></li>
<li title="function_name-1"><a href="erl_syntax.html#function_name-1">function_name/1</a></li>
<li title="generator-2"><a href="erl_syntax.html#generator-2">generator/2</a></li>
<li title="generator_body-1"><a href="erl_syntax.html#generator_body-1">generator_body/1</a></li>
<li title="generator_pattern-1"><a href="erl_syntax.html#generator_pattern-1">generator_pattern/1</a></li>
<li title="get_ann-1"><a href="erl_syntax.html#get_ann-1">get_ann/1</a></li>
<li title="get_attrs-1"><a href="erl_syntax.html#get_attrs-1">get_attrs/1</a></li>
<li title="get_pos-1"><a href="erl_syntax.html#get_pos-1">get_pos/1</a></li>
<li title="get_postcomments-1"><a href="erl_syntax.html#get_postcomments-1">get_postcomments/1</a></li>
<li title="get_precomments-1"><a href="erl_syntax.html#get_precomments-1">get_precomments/1</a></li>
<li title="has_comments-1"><a href="erl_syntax.html#has_comments-1">has_comments/1</a></li>
<li title="if_expr-1"><a href="erl_syntax.html#if_expr-1">if_expr/1</a></li>
<li title="if_expr_clauses-1"><a href="erl_syntax.html#if_expr_clauses-1">if_expr_clauses/1</a></li>
<li title="implicit_fun-1"><a href="erl_syntax.html#implicit_fun-1">implicit_fun/1</a></li>
<li title="implicit_fun-2"><a href="erl_syntax.html#implicit_fun-2">implicit_fun/2</a></li>
<li title="implicit_fun-3"><a href="erl_syntax.html#implicit_fun-3">implicit_fun/3</a></li>
<li title="implicit_fun_name-1"><a href="erl_syntax.html#implicit_fun_name-1">implicit_fun_name/1</a></li>
<li title="infix_expr-3"><a href="erl_syntax.html#infix_expr-3">infix_expr/3</a></li>
<li title="infix_expr_left-1"><a href="erl_syntax.html#infix_expr_left-1">infix_expr_left/1</a></li>
<li title="infix_expr_operator-1"><a href="erl_syntax.html#infix_expr_operator-1">infix_expr_operator/1</a></li>
<li title="infix_expr_right-1"><a href="erl_syntax.html#infix_expr_right-1">infix_expr_right/1</a></li>
<li title="integer-1"><a href="erl_syntax.html#integer-1">integer/1</a></li>
<li title="integer_literal-1"><a href="erl_syntax.html#integer_literal-1">integer_literal/1</a></li>
<li title="integer_value-1"><a href="erl_syntax.html#integer_value-1">integer_value/1</a></li>
<li title="is_atom-2"><a href="erl_syntax.html#is_atom-2">is_atom/2</a></li>
<li title="is_char-2"><a href="erl_syntax.html#is_char-2">is_char/2</a></li>
<li title="is_form-1"><a href="erl_syntax.html#is_form-1">is_form/1</a></li>
<li title="is_integer-2"><a href="erl_syntax.html#is_integer-2">is_integer/2</a></li>
<li title="is_leaf-1"><a href="erl_syntax.html#is_leaf-1">is_leaf/1</a></li>
<li title="is_list_skeleton-1"><a href="erl_syntax.html#is_list_skeleton-1">is_list_skeleton/1</a></li>
<li title="is_literal-1"><a href="erl_syntax.html#is_literal-1">is_literal/1</a></li>
<li title="is_proper_list-1"><a href="erl_syntax.html#is_proper_list-1">is_proper_list/1</a></li>
<li title="is_string-2"><a href="erl_syntax.html#is_string-2">is_string/2</a></li>
<li title="is_tree-1"><a href="erl_syntax.html#is_tree-1">is_tree/1</a></li>
<li title="join_comments-2"><a href="erl_syntax.html#join_comments-2">join_comments/2</a></li>
<li title="list-1"><a href="erl_syntax.html#list-1">list/1</a></li>
<li title="list-2"><a href="erl_syntax.html#list-2">list/2</a></li>
<li title="list_comp-2"><a href="erl_syntax.html#list_comp-2">list_comp/2</a></li>
<li title="list_comp_body-1"><a href="erl_syntax.html#list_comp_body-1">list_comp_body/1</a></li>
<li title="list_comp_template-1"><a href="erl_syntax.html#list_comp_template-1">list_comp_template/1</a></li>
<li title="list_elements-1"><a href="erl_syntax.html#list_elements-1">list_elements/1</a></li>
<li title="list_head-1"><a href="erl_syntax.html#list_head-1">list_head/1</a></li>
<li title="list_length-1"><a href="erl_syntax.html#list_length-1">list_length/1</a></li>
<li title="list_prefix-1"><a href="erl_syntax.html#list_prefix-1">list_prefix/1</a></li>
<li title="list_suffix-1"><a href="erl_syntax.html#list_suffix-1">list_suffix/1</a></li>
<li title="list_tail-1"><a href="erl_syntax.html#list_tail-1">list_tail/1</a></li>
<li title="macro-1"><a href="erl_syntax.html#macro-1">macro/1</a></li>
<li title="macro-2"><a href="erl_syntax.html#macro-2">macro/2</a></li>
<li title="macro_arguments-1"><a href="erl_syntax.html#macro_arguments-1">macro_arguments/1</a></li>
<li title="macro_name-1"><a href="erl_syntax.html#macro_name-1">macro_name/1</a></li>
<li title="make_tree-2"><a href="erl_syntax.html#make_tree-2">make_tree/2</a></li>
<li title="match_expr-2"><a href="erl_syntax.html#match_expr-2">match_expr/2</a></li>
<li title="match_expr_body-1"><a href="erl_syntax.html#match_expr_body-1">match_expr_body/1</a></li>
<li title="match_expr_pattern-1"><a href="erl_syntax.html#match_expr_pattern-1">match_expr_pattern/1</a></li>
<li title="meta-1"><a href="erl_syntax.html#meta-1">meta/1</a></li>
<li title="module_qualifier-2"><a href="erl_syntax.html#module_qualifier-2">module_qualifier/2</a></li>
<li title="module_qualifier_argument-1"><a href="erl_syntax.html#module_qualifier_argument-1">module_qualifier_argument/1</a></li>
<li title="module_qualifier_body-1"><a href="erl_syntax.html#module_qualifier_body-1">module_qualifier_body/1</a></li>
<li title="nil-0"><a href="erl_syntax.html#nil-0">nil/0</a></li>
<li title="normalize_list-1"><a href="erl_syntax.html#normalize_list-1">normalize_list/1</a></li>
<li title="operator-1"><a href="erl_syntax.html#operator-1">operator/1</a></li>
<li title="operator_literal-1"><a href="erl_syntax.html#operator_literal-1">operator_literal/1</a></li>
<li title="operator_name-1"><a href="erl_syntax.html#operator_name-1">operator_name/1</a></li>
<li title="parentheses-1"><a href="erl_syntax.html#parentheses-1">parentheses/1</a></li>
<li title="parentheses_body-1"><a href="erl_syntax.html#parentheses_body-1">parentheses_body/1</a></li>
<li title="prefix_expr-2"><a href="erl_syntax.html#prefix_expr-2">prefix_expr/2</a></li>
<li title="prefix_expr_argument-1"><a href="erl_syntax.html#prefix_expr_argument-1">prefix_expr_argument/1</a></li>
<li title="prefix_expr_operator-1"><a href="erl_syntax.html#prefix_expr_operator-1">prefix_expr_operator/1</a></li>
<li title="qualified_name-1"><a href="erl_syntax.html#qualified_name-1">qualified_name/1</a></li>
<li title="qualified_name_segments-1"><a href="erl_syntax.html#qualified_name_segments-1">qualified_name_segments/1</a></li>
<li title="query_expr-1"><a href="erl_syntax.html#query_expr-1">query_expr/1</a></li>
<li title="query_expr_body-1"><a href="erl_syntax.html#query_expr_body-1">query_expr_body/1</a></li>
<li title="receive_expr-1"><a href="erl_syntax.html#receive_expr-1">receive_expr/1</a></li>
<li title="receive_expr-3"><a href="erl_syntax.html#receive_expr-3">receive_expr/3</a></li>
<li title="receive_expr_action-1"><a href="erl_syntax.html#receive_expr_action-1">receive_expr_action/1</a></li>
<li title="receive_expr_clauses-1"><a href="erl_syntax.html#receive_expr_clauses-1">receive_expr_clauses/1</a></li>
<li title="receive_expr_timeout-1"><a href="erl_syntax.html#receive_expr_timeout-1">receive_expr_timeout/1</a></li>
<li title="record_access-2"><a href="erl_syntax.html#record_access-2">record_access/2</a></li>
<li title="record_access-3"><a href="erl_syntax.html#record_access-3">record_access/3</a></li>
<li title="record_access_argument-1"><a href="erl_syntax.html#record_access_argument-1">record_access_argument/1</a></li>
<li title="record_access_field-1"><a href="erl_syntax.html#record_access_field-1">record_access_field/1</a></li>
<li title="record_access_type-1"><a href="erl_syntax.html#record_access_type-1">record_access_type/1</a></li>
<li title="record_expr-2"><a href="erl_syntax.html#record_expr-2">record_expr/2</a></li>
<li title="record_expr-3"><a href="erl_syntax.html#record_expr-3">record_expr/3</a></li>
<li title="record_expr_argument-1"><a href="erl_syntax.html#record_expr_argument-1">record_expr_argument/1</a></li>
<li title="record_expr_fields-1"><a href="erl_syntax.html#record_expr_fields-1">record_expr_fields/1</a></li>
<li title="record_expr_type-1"><a href="erl_syntax.html#record_expr_type-1">record_expr_type/1</a></li>
<li title="record_field-1"><a href="erl_syntax.html#record_field-1">record_field/1</a></li>
<li title="record_field-2"><a href="erl_syntax.html#record_field-2">record_field/2</a></li>
<li title="record_field_name-1"><a href="erl_syntax.html#record_field_name-1">record_field_name/1</a></li>
<li title="record_field_value-1"><a href="erl_syntax.html#record_field_value-1">record_field_value/1</a></li>
<li title="record_index_expr-2"><a href="erl_syntax.html#record_index_expr-2">record_index_expr/2</a></li>
<li title="record_index_expr_field-1"><a href="erl_syntax.html#record_index_expr_field-1">record_index_expr_field/1</a></li>
<li title="record_index_expr_type-1"><a href="erl_syntax.html#record_index_expr_type-1">record_index_expr_type/1</a></li>
<li title="remove_comments-1"><a href="erl_syntax.html#remove_comments-1">remove_comments/1</a></li>
<li title="revert-1"><a href="erl_syntax.html#revert-1">revert/1</a></li>
<li title="revert_forms-1"><a href="erl_syntax.html#revert_forms-1">revert_forms/1</a></li>
<li title="rule-2"><a href="erl_syntax.html#rule-2">rule/2</a></li>
<li title="rule_arity-1"><a href="erl_syntax.html#rule_arity-1">rule_arity/1</a></li>
<li title="rule_clauses-1"><a href="erl_syntax.html#rule_clauses-1">rule_clauses/1</a></li>
<li title="rule_name-1"><a href="erl_syntax.html#rule_name-1">rule_name/1</a></li>
<li title="set_ann-2"><a href="erl_syntax.html#set_ann-2">set_ann/2</a></li>
<li title="set_attrs-2"><a href="erl_syntax.html#set_attrs-2">set_attrs/2</a></li>
<li title="set_pos-2"><a href="erl_syntax.html#set_pos-2">set_pos/2</a></li>
<li title="set_postcomments-2"><a href="erl_syntax.html#set_postcomments-2">set_postcomments/2</a></li>
<li title="set_precomments-2"><a href="erl_syntax.html#set_precomments-2">set_precomments/2</a></li>
<li title="size_qualifier-2"><a href="erl_syntax.html#size_qualifier-2">size_qualifier/2</a></li>
<li title="size_qualifier_argument-1"><a href="erl_syntax.html#size_qualifier_argument-1">size_qualifier_argument/1</a></li>
<li title="size_qualifier_body-1"><a href="erl_syntax.html#size_qualifier_body-1">size_qualifier_body/1</a></li>
<li title="string-1"><a href="erl_syntax.html#string-1">string/1</a></li>
<li title="string_literal-1"><a href="erl_syntax.html#string_literal-1">string_literal/1</a></li>
<li title="string_value-1"><a href="erl_syntax.html#string_value-1">string_value/1</a></li>
<li title="subtrees-1"><a href="erl_syntax.html#subtrees-1">subtrees/1</a></li>
<li title="text-1"><a href="erl_syntax.html#text-1">text/1</a></li>
<li title="text_string-1"><a href="erl_syntax.html#text_string-1">text_string/1</a></li>
<li title="tree-1"><a href="erl_syntax.html#tree-1">tree/1</a></li>
<li title="tree-2"><a href="erl_syntax.html#tree-2">tree/2</a></li>
<li title="try_after_expr-2"><a href="erl_syntax.html#try_after_expr-2">try_after_expr/2</a></li>
<li title="try_expr-2"><a href="erl_syntax.html#try_expr-2">try_expr/2</a></li>
<li title="try_expr-3"><a href="erl_syntax.html#try_expr-3">try_expr/3</a></li>
<li title="try_expr-4"><a href="erl_syntax.html#try_expr-4">try_expr/4</a></li>
<li title="try_expr_after-1"><a href="erl_syntax.html#try_expr_after-1">try_expr_after/1</a></li>
<li title="try_expr_body-1"><a href="erl_syntax.html#try_expr_body-1">try_expr_body/1</a></li>
<li title="try_expr_clauses-1"><a href="erl_syntax.html#try_expr_clauses-1">try_expr_clauses/1</a></li>
<li title="try_expr_handlers-1"><a href="erl_syntax.html#try_expr_handlers-1">try_expr_handlers/1</a></li>
<li title="tuple-1"><a href="erl_syntax.html#tuple-1">tuple/1</a></li>
<li title="tuple_elements-1"><a href="erl_syntax.html#tuple_elements-1">tuple_elements/1</a></li>
<li title="tuple_size-1"><a href="erl_syntax.html#tuple_size-1">tuple_size/1</a></li>
<li title="type-1"><a href="erl_syntax.html#type-1">type/1</a></li>
<li title="underscore-0"><a href="erl_syntax.html#underscore-0">underscore/0</a></li>
<li title="update_tree-2"><a href="erl_syntax.html#update_tree-2">update_tree/2</a></li>
<li title="variable-1"><a href="erl_syntax.html#variable-1">variable/1</a></li>
<li title="variable_literal-1"><a href="erl_syntax.html#variable_literal-1">variable_literal/1</a></li>
<li title="variable_name-1"><a href="erl_syntax.html#variable_name-1">variable_name/1</a></li>
<li title="warning_marker-1"><a href="erl_syntax.html#warning_marker-1">warning_marker/1</a></li>
<li title="warning_marker_info-1"><a href="erl_syntax.html#warning_marker_info-1">warning_marker_info/1</a></li>
</ul>
</li>
<li id="no" title="erl_syntax_lib " expanded="false">erl_syntax_lib<ul>
<li><a href="erl_syntax_lib.html">
                  Top of manual page
                </a></li>
<li title="analyze_application-1"><a href="erl_syntax_lib.html#analyze_application-1">analyze_application/1</a></li>
<li title="analyze_attribute-1"><a href="erl_syntax_lib.html#analyze_attribute-1">analyze_attribute/1</a></li>
<li title="analyze_export_attribute-1"><a href="erl_syntax_lib.html#analyze_export_attribute-1">analyze_export_attribute/1</a></li>
<li title="analyze_file_attribute-1"><a href="erl_syntax_lib.html#analyze_file_attribute-1">analyze_file_attribute/1</a></li>
<li title="analyze_form-1"><a href="erl_syntax_lib.html#analyze_form-1">analyze_form/1</a></li>
<li title="analyze_forms-1"><a href="erl_syntax_lib.html#analyze_forms-1">analyze_forms/1</a></li>
<li title="analyze_function-1"><a href="erl_syntax_lib.html#analyze_function-1">analyze_function/1</a></li>
<li title="analyze_function_name-1"><a href="erl_syntax_lib.html#analyze_function_name-1">analyze_function_name/1</a></li>
<li title="analyze_implicit_fun-1"><a href="erl_syntax_lib.html#analyze_implicit_fun-1">analyze_implicit_fun/1</a></li>
<li title="analyze_import_attribute-1"><a href="erl_syntax_lib.html#analyze_import_attribute-1">analyze_import_attribute/1</a></li>
<li title="analyze_module_attribute-1"><a href="erl_syntax_lib.html#analyze_module_attribute-1">analyze_module_attribute/1</a></li>
<li title="analyze_record_attribute-1"><a href="erl_syntax_lib.html#analyze_record_attribute-1">analyze_record_attribute/1</a></li>
<li title="analyze_record_expr-1"><a href="erl_syntax_lib.html#analyze_record_expr-1">analyze_record_expr/1</a></li>
<li title="analyze_record_field-1"><a href="erl_syntax_lib.html#analyze_record_field-1">analyze_record_field/1</a></li>
<li title="analyze_rule-1"><a href="erl_syntax_lib.html#analyze_rule-1">analyze_rule/1</a></li>
<li title="analyze_wild_attribute-1"><a href="erl_syntax_lib.html#analyze_wild_attribute-1">analyze_wild_attribute/1</a></li>
<li title="annotate_bindings-1"><a href="erl_syntax_lib.html#annotate_bindings-1">annotate_bindings/1</a></li>
<li title="annotate_bindings-2"><a href="erl_syntax_lib.html#annotate_bindings-2">annotate_bindings/2</a></li>
<li title="fold-3"><a href="erl_syntax_lib.html#fold-3">fold/3</a></li>
<li title="fold_subtrees-3"><a href="erl_syntax_lib.html#fold_subtrees-3">fold_subtrees/3</a></li>
<li title="foldl_listlist-3"><a href="erl_syntax_lib.html#foldl_listlist-3">foldl_listlist/3</a></li>
<li title="function_name_expansions-1"><a href="erl_syntax_lib.html#function_name_expansions-1">function_name_expansions/1</a></li>
<li title="is_fail_expr-1"><a href="erl_syntax_lib.html#is_fail_expr-1">is_fail_expr/1</a></li>
<li title="limit-2"><a href="erl_syntax_lib.html#limit-2">limit/2</a></li>
<li title="limit-3"><a href="erl_syntax_lib.html#limit-3">limit/3</a></li>
<li title="map-2"><a href="erl_syntax_lib.html#map-2">map/2</a></li>
<li title="map_subtrees-2"><a href="erl_syntax_lib.html#map_subtrees-2">map_subtrees/2</a></li>
<li title="mapfold-3"><a href="erl_syntax_lib.html#mapfold-3">mapfold/3</a></li>
<li title="mapfold_subtrees-3"><a href="erl_syntax_lib.html#mapfold_subtrees-3">mapfold_subtrees/3</a></li>
<li title="mapfoldl_listlist-3"><a href="erl_syntax_lib.html#mapfoldl_listlist-3">mapfoldl_listlist/3</a></li>
<li title="new_variable_name-1"><a href="erl_syntax_lib.html#new_variable_name-1">new_variable_name/1</a></li>
<li title="new_variable_name-2"><a href="erl_syntax_lib.html#new_variable_name-2">new_variable_name/2</a></li>
<li title="new_variable_names-2"><a href="erl_syntax_lib.html#new_variable_names-2">new_variable_names/2</a></li>
<li title="new_variable_names-3"><a href="erl_syntax_lib.html#new_variable_names-3">new_variable_names/3</a></li>
<li title="strip_comments-1"><a href="erl_syntax_lib.html#strip_comments-1">strip_comments/1</a></li>
<li title="to_comment-1"><a href="erl_syntax_lib.html#to_comment-1">to_comment/1</a></li>
<li title="to_comment-2"><a href="erl_syntax_lib.html#to_comment-2">to_comment/2</a></li>
<li title="to_comment-3"><a href="erl_syntax_lib.html#to_comment-3">to_comment/3</a></li>
<li title="variables-1"><a href="erl_syntax_lib.html#variables-1">variables/1</a></li>
</ul>
</li>
<li id="no" title="erl_tidy " expanded="false">erl_tidy<ul>
<li><a href="erl_tidy.html">
                  Top of manual page
                </a></li>
<li title="dir-0"><a href="erl_tidy.html#dir-0">dir/0</a></li>
<li title="dir-1"><a href="erl_tidy.html#dir-1">dir/1</a></li>
<li title="dir-2"><a href="erl_tidy.html#dir-2">dir/2</a></li>
<li title="file-1"><a href="erl_tidy.html#file-1">file/1</a></li>
<li title="file-2"><a href="erl_tidy.html#file-2">file/2</a></li>
<li title="module-1"><a href="erl_tidy.html#module-1">module/1</a></li>
<li title="module-2"><a href="erl_tidy.html#module-2">module/2</a></li>
</ul>
</li>
<li id="loadscrollpos" title="igor " expanded="true">igor<ul>
<li><a href="igor.html">
                  Top of manual page
                </a></li>
<li title="create_stubs-2"><a href="igor.html#create_stubs-2">create_stubs/2</a></li>
<li title="merge-2"><a href="igor.html#merge-2">merge/2</a></li>
<li title="merge-3"><a href="igor.html#merge-3">merge/3</a></li>
<li title="merge_files-3"><a href="igor.html#merge_files-3">merge_files/3</a></li>
<li title="merge_files-4"><a href="igor.html#merge_files-4">merge_files/4</a></li>
<li title="merge_sources-3"><a href="igor.html#merge_sources-3">merge_sources/3</a></li>
<li title="parse_transform-2"><a href="igor.html#parse_transform-2">parse_transform/2</a></li>
<li title="rename-2"><a href="igor.html#rename-2">rename/2</a></li>
<li title="rename-3"><a href="igor.html#rename-3">rename/3</a></li>
</ul>
</li>
<li id="no" title="prettypr " expanded="false">prettypr<ul>
<li><a href="prettypr.html">
                  Top of manual page
                </a></li>
<li title="above-2"><a href="prettypr.html#above-2">above/2</a></li>
<li title="beside-2"><a href="prettypr.html#beside-2">beside/2</a></li>
<li title="best-3"><a href="prettypr.html#best-3">best/3</a></li>
<li title="break-1"><a href="prettypr.html#break-1">break/1</a></li>
<li title="empty-0"><a href="prettypr.html#empty-0">empty/0</a></li>
<li title="floating-1"><a href="prettypr.html#floating-1">floating/1</a></li>
<li title="floating-3"><a href="prettypr.html#floating-3">floating/3</a></li>
<li title="follow-2"><a href="prettypr.html#follow-2">follow/2</a></li>
<li title="follow-3"><a href="prettypr.html#follow-3">follow/3</a></li>
<li title="format-1"><a href="prettypr.html#format-1">format/1</a></li>
<li title="format-2"><a href="prettypr.html#format-2">format/2</a></li>
<li title="format-3"><a href="prettypr.html#format-3">format/3</a></li>
<li title="nest-2"><a href="prettypr.html#nest-2">nest/2</a></li>
<li title="null_text-1"><a href="prettypr.html#null_text-1">null_text/1</a></li>
<li title="par-1"><a href="prettypr.html#par-1">par/1</a></li>
<li title="par-2"><a href="prettypr.html#par-2">par/2</a></li>
<li title="sep-1"><a href="prettypr.html#sep-1">sep/1</a></li>
<li title="text-1"><a href="prettypr.html#text-1">text/1</a></li>
<li title="text_par-1"><a href="prettypr.html#text_par-1">text_par/1</a></li>
<li title="text_par-2"><a href="prettypr.html#text_par-2">text_par/2</a></li>
</ul>
</li>
</ul>
</div></div>
<div id="content">
<div class="innertube">
<!-- refpage --><center><h1>igor</h1></center>

<h3>MODULE</h3>
<div class="REFBODY">igor</div>
<h3>MODULE SUMMARY</h3>
<div class="REFBODY">Igor: the Module Merger and Renamer.</div>
<h3>DESCRIPTION</h3>
<div class="REFBODY"><p>
<p>Igor: the Module Merger and Renamer.</p>
 
  <p>The program Igor merges the source code of one or more Erlang  
modules into a single module, which can then replace the original set  
of modules. Igor is also able to rename a set of (possibly  
interdependent) modules, without joining them into a single  
module.</p>
 
  <p>The main user interface consists of the functions <span class="bold_code"><a href="#merge-3">merge/3</a></span> and
  <span class="bold_code"><a href="#rename-3">rename/3</a></span>. See also the function <span class="bold_code"><a href="#parse_transform-2">parse_transform/2</a></span>.</p>
 
  <p>A note of warning: Igor cannot do anything about the case when the
  name of a remote function is passed to the built-in functions
  <span class="code">apply</span> and <span class="code">spawn</span> <strong>unless</strong> the module
  and function names are explicitly stated in the call, as in e.g.
  <span class="code">apply(lists, reverse, [Xs])</span>. In all other cases, Igor  
leaves such calls unchanged, and warns the user that manual editing  
might be necessary.</p>
 
  <p>Also note that Erlang records will be renamed as necessary to
  avoid non-equivalent definitions using the same record name. This
  does not work if the source code accesses the name field of such
  record tuples by <span class="code">element/2</span> or similar methods. Always  
use the record syntax to handle record tuples, if possible.</p>
 
  <p>Disclaimer: the author of this program takes no responsibility for  
the correctness of the produced output, or for any effects of its  
execution. In particular, the author may not be held responsible  
should Igor include the code of a deceased madman in the result.</p>
 
  <p>For further information on Igors in general, see e.g. "Young
  Frankenstein", Mel Brooks, 1974, and "The Fifth Elephant", Terry
  Pratchett, 1999.</p></p></div>
<h3><a name="id101727">DATA TYPES</a></h3>
<div class="REFBODY">
<a name="types"></a>

<dl>
<dt><strong><span class="code">stubDescriptor() = {ModuleName, Functions, [Attribute]}</span></strong></dt>
<dd>
<a name="type-stubDescriptor"></a>
<ul>
<li><span class="code">ModuleName = atom()</span></li>
<li><span class="code">Functions = [{FunctionName, {ModuleName, FunctionName}}]</span></li>
<li><span class="code">FunctionName = {atom(), integer()}</span></li>
<li><span class="code">Attribute = {atom(), term()}</span></li>
</ul>
<p>A stub module descriptor contains the module name, a list of
       exported functions, and a list of module attributes. Each
       function is described by its name (which includes its arity),
       and the corresponding module and function that it calls. (The
       arities should always match.) The attributes are simply
       described by key-value pairs.
 </p>
</dd>
</dl>
</div>
<h3>EXPORTS</h3>
<p><a name="create_stubs-2"><span class="bold_code">create_stubs(Stubs::[stubDescriptor()], Options::[term()]) -&gt; [string()]</span></a><br></p>
<div class="REFBODY"><p><a name="create_stubs-2"></a>

<p>Creates stub module source files corresponding to the given stub
  descriptors. The returned value is the list of names of the created
  files. See <span class="code">merge_sources/3</span> for more information about  
stub descriptors.</p>
 
  <p>Options:
  </p><dl>
    <dt><strong><span class="code">{backup_suffix, string()}</span></strong></dt>
    <dd></dd>
<dt><strong><span class="code">{backups, boolean()}</span></strong></dt>
    <dd></dd>
<dt><strong><span class="code">{printer, Function}</span></strong></dt>
    <dd></dd>
<dt><strong><span class="code">{stub_dir, filename()}</span></strong></dt>
    <dd></dd>
<dt><strong><span class="code">{suffix, string()}</span></strong></dt>
    <dd></dd>
<dt><strong><span class="code">{verbose, boolean()}</span></strong></dt>
  <dd></dd>
</dl>
 
  <p>See <span class="code">merge/3</span> for details on these options.
 </p>
<p><strong>See also:</strong> <span class="bold_code"><a href="#merge-3">merge/3</a></span>, <span class="bold_code"><a href="#merge_sources-3">merge_sources/3</a></span>.</p>
</p></div>
<p><a name="merge-2"><span class="bold_code">merge(Name::atom(), Files::[filename()]) -&gt; [filename()]</span></a><br></p>
<div class="REFBODY"><p><a name="merge-2"></a>
<p>Equivalent to <span class="bold_code"><a href="#merge-3">merge(Name, Files, [])</a></span>.</p>
</p></div>
<p><a name="merge-3"><span class="bold_code">merge(Name::atom(), Files::[filename()], Options::[term()]) -&gt; [filename()]</span></a><br></p>
<div class="REFBODY">
<p>Types:</p>
<div class="REFTYPES">
<span class="bold_code">filename() (see module file)</span><br>
</div>
</div>
<div class="REFBODY"><p><a name="merge-3"></a>

<p>Merges source code files to a single file. <span class="code">Name</span>
  specifies the name of the resulting module - not the name of the
  output file. <span class="code">Files</span> is a list of file names and/or module
  names of source modules to be read and merged (see
  <span class="code">merge_files/4</span> for details). All the input modules must  
be distinctly named.</p>
 
  <p>The resulting source code is written to a file named
  "<span class="code">&lt;em&gt;Name&lt;/em&gt;.erl</span>" in the current directory, unless
  otherwise specified by the options <span class="code">dir</span> and
  <span class="code">outfile</span> described below.</p>
 
  <p>Examples:
  </p><ul>
    <li><p>given a module <span class="code">m</span> in file "<span class="code">m.erl</span>"
    which uses the standard library module <span class="code">lists</span>, calling
    <span class="code">igor:merge(m, [m, lists])</span> will create a new file
    "<span class="code">m.erl</span> which contains the code from <span class="code">m</span> and
    exports the same functions, and which includes the referenced code
    from the <span class="code">lists</span> module. The original file will be
    renamed to "<span class="code">m.erl.bak</span>".</p></li>
 
    <li><p>given modules <span class="code">m1</span> and <span class="code">m2</span>, in
    corresponding files, calling <span class="code">igor:merge(m, [m1, m2])</span>
    will create a file "<span class="code">m.erl</span>" which contains the code
    from <span class="code">m1</span> and <span class="code">m2</span> and exports the functions
    of <span class="code">m1</span>.</p></li>
  </ul>
 
  <p>Stub module files are created for those modules that are to be
  exported by the target module (see options <span class="code">export</span>,
  <span class="code">stubs</span> and <span class="code">stub_dir</span>).</p>
 
  <p>The function returns the list of file names of all created  
modules, including any automatically created stub modules. The file  
name of the target module is always first in the list.</p>
 
  <p>Note: If you get a "syntax error" message when trying to merge
  files (and you know those files to be correct), then try the
  <span class="code">preprocess</span> option. It typically means that your code  
contains too strange macros to be handled without actually performing  
the preprocessor expansions.</p>
 
  <p>Options:
  </p><dl>
    <dt><strong><span class="code">{backup_suffix, string()}</span></strong></dt>
 
      <dd><p>Specifies the file name suffix to be used when a backup file
      is created; the default value is <span class="code">".bak"</span>.</p></dd>
 
    <dt><strong><span class="code">{backups, boolean()}</span></strong></dt>
 
      <dd><p>If the value is <span class="code">true</span>, existing files will be
      renamed before new files are opened for writing. The new names
      are formed by appending the string given by the
      <span class="code">backup_suffix</span> option to the original name. The
      default value is <span class="code">true</span>.</p></dd>
 
    <dt><strong><span class="code">{dir, filename()}</span></strong></dt>
 
      <dd><p>Specifies the name of the directory in which the output file
      is to be written. An empty string is interpreted as the current
      directory. By default, the current directory is used.</p></dd>
 
    <dt><strong><span class="code">{outfile, filename()}</span></strong></dt>
 
      <dd><p>Specifies the name of the file (without suffix) to which the
      resulting source code is to be written. By default, this is the
      same as the <span class="code">Name</span> argument.</p></dd>
 
    <dt><strong><span class="code">{preprocess, boolean()}</span></strong></dt>
 
      <dd><p>If the value is <span class="code">true</span>, preprocessing will be done
      when reading the source code. See <span class="code">merge_files/4</span> for
      details.</p></dd>
 
    <dt><strong><span class="code">{printer, Function}</span></strong></dt>
      <dd>
<ul>
        <li><p><span class="code">Function = (syntaxTree()) -&gt; string()</span></p></li>
      </ul>
<p>
      Specifies a function for prettyprinting Erlang syntax trees.
      This is used for outputting the resulting module definition, as
      well as for creating stub files. The function is assumed to
      return formatted text for the given syntax tree, and should raise
      an exception if an error occurs. The default formatting function
      calls <span class="code">erl_prettypr:format/2</span>.</p>
</dd>
 
    <dt><strong><span class="code">{stub_dir, filename()}</span></strong></dt>
 
      <dd><p>Specifies the name of the directory to which any generated
      stub module files are written. The default value is
      <span class="code">"stubs"</span>.</p></dd>
 
    <dt><strong><span class="code">{stubs, boolean()}</span></strong></dt>
 
      <dd><p>If the value is <span class="code">true</span>, stub module files will be
      automatically generated for all exported modules that do not have
      the same name as the target module. The default value is
      <span class="code">true</span>.</p></dd>
 
    <dt><strong><span class="code">{suffix, string()}</span></strong></dt>
 
      <dd><p>Specifies the suffix to be used for the output file names;
      the default value is <span class="code">".erl"</span>.</p></dd>
  </dl>
 
  <p>See <span class="code">merge_files/4</span> for further options.
 </p>
<p><strong>See also:</strong> <span class="bold_code"><a href="#merge-2">merge/2</a></span>, <span class="bold_code"><a href="#merge_files-4">merge_files/4</a></span>.</p>
</p></div>
<p><a name="merge_files-3"><span class="bold_code">merge_files(Name::atom(), Files::[filename()], Options::[term()]) -&gt; {syntaxTree(), [stubDescriptor()]}</span></a><br></p>
<div class="REFBODY"><p><a name="merge_files-3"></a>
<p>Equivalent to <span class="bold_code"><a href="#merge_files-4">merge_files(Name, [], Files, Options)</a></span>.</p>
</p></div>
<p><a name="merge_files-4"><span class="bold_code">merge_files(Name::atom(), Sources::[Forms], Files::[filename()], Options::[term()]) -&gt; {syntaxTree(), [stubDescriptor()]}</span></a><br></p>
<div class="REFBODY">
<p>Types:</p>
<div class="REFTYPES">
<span class="bold_code">Forms = syntaxTree() | [syntaxTree()]</span><br>
</div>
</div>
<div class="REFBODY"><p><a name="merge_files-4"></a>

<p>Merges source code files and syntax trees to a single syntax
  tree. This is a file-reading front end to
  <span class="code">merge_sources/3</span>. <span class="code">Name</span> specifies the name of
  the resulting module - not the name of the output file.
  <span class="code">Sources</span> is a list of syntax trees and/or lists of
  "source code form" syntax trees, each entry representing a module
  definition. <span class="code">Files</span> is a list of file names and/or module  
names of source modules to be read and included. All the input  
modules must be distinctly named.</p>
 
  <p>If a name in <span class="code">Files</span> is not the name of an existing
  file, Igor assumes it represents a module name, and tries to locate
  and read the corresponding source file. The parsed files are appended
  to <span class="code">Sources</span> and passed on to
  <span class="code">merge_sources/3</span>, i.e., entries in <span class="code">Sources</span>  
are listed before entries read from files.</p>
 
  <p>If no exports are listed by an <span class="code">export</span> option (see
  <span class="code">merge_sources/3</span> for details), then if <span class="code">Name</span>
  is also the name of one of the input modules, that module will be
  exported; otherwise, the first listed module will be exported. Cf.
  the examples under <span class="code">merge/3</span>.</p>
 
  <p>The result is a pair <span class="code">{Tree, Stubs}</span>, where
  <span class="code">Tree</span> represents the source code that is the result of
  merging all the code in <span class="code">Sources</span> and <span class="code">Files</span>,
  and <span class="code">Stubs</span> is a list of stub module descriptors (see
  <span class="code">merge_sources/3</span> for details).</p>
 
  <p>Options:
  </p><dl>
    <dt><strong><span class="code">{comments, boolean()}</span></strong></dt>
 
      <dd><p>If the value is <span class="code">true</span>, source code comments in
      the original files will be preserved in the output. The default
      value is <span class="code">true</span>.</p></dd>
 
    <dt><strong><span class="code">{find_src_rules, [{string(), string()}]}</span></strong></dt>
 
      <dd><p>Specifies a list of rules for associating object files with
      source files, to be passed to the function
      <span class="code">filename:find_src/2</span>. This can be used to change the
      way Igor looks for source files. If this option is not specified,
      the default system rules are used. The first occurrence of this
      option completely overrides any later in the option list.</p></dd>
 
    <dt><strong><span class="code">{includes, [filename()]}</span></strong></dt>
 
      <dd><p>Specifies a list of directory names for the Erlang
      preprocessor, if used, to search for include files (cf. the
      <span class="code">preprocess</span> option). The default value is the empty
      list. The directory of the source file and the current directory
      are automatically appended to the list.</p></dd>
 
    <dt><strong><span class="code">{macros, [{atom(), term()}]}</span></strong></dt>
 
      <dd><p>Specifies a list of "pre-defined" macro definitions for the
      Erlang preprocessor, if used (cf. the <span class="code">preprocess</span>
      option). The default value is the empty list.</p></dd>
 
    <dt><strong><span class="code">{preprocess, boolean()}</span></strong></dt>
 
      <dd>
<p>If the value is <span class="code">false</span>, Igor will read source
      files without passing them through the Erlang preprocessor
      (<span class="code">epp</span>), in order to avoid expansion of preprocessor
      directives such as <span class="code">-include(...).</span>,
      <span class="code">-define(...).</span> and <span class="code">-ifdef(...)</span>, and
      macro calls such as <span class="code">?LINE</span> and <span class="code">?MY_MACRO(x,
      y)</span>. The default value is <span class="code">false</span>, i.e.,
      preprocessing is not done. (See the module
      <span class="code">epp_dodger</span> for details.)</p>
 
      <p>Notes: If a file contains too exotic definitions or uses of
      macros, it will not be possible to read it without preprocessing.
      Furthermore, Igor does not currently try to sort out multiple
      inclusions of the same file, or redefinitions of the same macro
      name. Therefore, when preprocessing is turned off, it may become
      necessary to edit the resulting source code, removing such
      re-inclusions and redefinitions.</p>
</dd>
  </dl>
 
  <p>See <span class="code">merge_sources/3</span> for further options.
 </p>
<p><strong>See also:</strong> <span class="bold_code"><a href="epp_dodger.html">epp_dodger</a></span>, <span class="bold_code"><a href="javascript:erlhref('../../../../doc/../','stdlib','filename.html#find_src-2');">filename:find_src/2</a></span>, <span class="bold_code"><a href="#merge-3">merge/3</a></span>, <span class="bold_code"><a href="#merge_files-3">merge_files/3</a></span>, <span class="bold_code"><a href="#merge_sources-3">merge_sources/3</a></span>.</p>
</p></div>
<p><a name="merge_sources-3"><span class="bold_code">merge_sources(Name::atom(), Sources::[Forms], Options::[term()]) -&gt; {syntaxTree(), [stubDescriptor()]}</span></a><br></p>
<div class="REFBODY">
<p>Types:</p>
<div class="REFTYPES">
<span class="bold_code">Forms = syntaxTree() | [syntaxTree()]</span><br>
</div>
</div>
<div class="REFBODY"><p><a name="merge_sources-3"></a>

<p>Merges syntax trees to a single syntax tree. This is the main
  code merging "engine". <span class="code">Name</span> specifies the name of the
  resulting module. <span class="code">Sources</span> is a list of syntax trees of
  type <span class="code">form_list</span> and/or lists of "source code form" syntax  
trees, each entry representing a module definition. All the input  
modules must be distinctly named.</p>
 
  <p>Unless otherwise specified by the options, all modules are assumed
  to be at least "static", and all except the target module are assumed
  to be "safe". See the <span class="code">static</span> and <span class="code">safe</span>  
options for details.</p>
 
  <p>If <span class="code">Name</span> is also the name of one of the input modules,  
the code from that module will occur at the top of the resulting  
code, and no extra "header" comments will be added. In other words,  
the look of that module will be preserved.</p>
 
  <p>The result is a pair <span class="code">{Tree, Stubs}</span>, where
  <span class="code">Tree</span> represents the source code that is the result of
  merging all the code in <span class="code">Sources</span>, and <span class="code">Stubs</span>  
is a list of stub module descriptors (see below).</p>
 
  <p><span class="code">Stubs</span> contains one entry for each exported input
  module (cf. the <span class="code">export</span> option), each entry describing a
  stub module that redirects calls of functions in the original module
  to the corresponding (possibly renamed) functions in the new module.
  The stub descriptors can be used to automatically generate stub
  modules; see <span class="code">create_stubs/2</span>.</p>
 
  <p>Options:
  </p><dl>
    <dt><strong><span class="code">{export, [atom()]}</span></strong></dt>
 
      <dd><p>Specifies a list of names of input modules whose interfaces
      should be exported by the output module. A stub descriptor is
      generated for each specified module, unless its name is
      <span class="code">Name</span>. If no modules are specified, then if
      <span class="code">Name</span> is also the name of an input module, that
      module will be exported; otherwise the first listed module in
      <span class="code">Sources</span> will be exported. The default value is the
      empty list.</p></dd>
 
    <dt><strong><span class="code">{export_all, boolean()}</span></strong></dt>
 
      <dd><p>If the value is <span class="code">true</span>, this is equivalent to
      listing all of the input modules in the <span class="code">export</span>
      option. The default value is <span class="code">false</span>.</p></dd>
 
  <dt><strong><span class="code">{file_attributes, Preserve}</span></strong></dt>
      <dd>
<ul>
        <li><p><span class="code">Preserve = yes | comment | no</span></p></li>
      </ul>
<p>
      If the value is <span class="code">yes</span>, all file attributes
      <span class="code">-file(...)</span> in the input sources will be preserved in
      the resulting code. If the value is <span class="code">comment</span>, they
      will be turned into comments, but remain in their original
      positions in the code relative to the other source code forms. If
      the value is <span class="code">no</span>, all file attributes will be removed
      from the code, unless they have attached comments, in which case
      they will be handled as in the <span class="code">comment</span> case. The
      default value is <span class="code">no</span>.</p>
</dd>
 
  <dt><strong><span class="code">{no_banner, boolean()}</span></strong></dt>
 
      <dd><p>If the value is <span class="code">true</span>, no banner comment will be
      added at the top of the resulting module, even if the target
      module does not have the same name as any of the input modules.
      Instead, Igor will try to preserve the look of the module whose
      code is at the top of the output. The default value is
      <span class="code">false</span>.</p></dd>
 
  <dt><strong><span class="code">{no_headers, boolean()}</span></strong></dt>
 
      <dd><p>If the value is <span class="code">true</span>, no header comments will be
      added to the resulting module at the beginning of each section of
      code that originates from a particular input module. The default
      value is <span class="code">false</span>, which means that section headers are
      normally added whenever more than two or more modules are
      merged.</p></dd>
 
  <dt><strong><span class="code">{no_imports, boolean()}</span></strong></dt>
 
      <dd><p>If the value is <span class="code">true</span>, all
      <span class="code">-import(...)</span> declarations in the original code will
      be expanded in the result; otherwise, as much as possible of the
      original import declarations will be preserved. The default value
      is <span class="code">false</span>.</p></dd>
 
  <dt><strong><span class="code">{notes, Notes}</span></strong></dt>
      <dd>
<ul>
        <li><p><span class="code">Notes = always | yes | no</span></p></li>
      </ul>
<p>
      If the value is <span class="code">yes</span>, comments will be inserted where
      important changes have been made in the code. If the value is
      <span class="code">always</span>, <strong>all</strong> changes to the code will be
      commented. If the value is <span class="code">no</span>, changes will be made
      without comments. The default value is <span class="code">yes</span>.</p>
</dd>
 
  <dt><strong><span class="code">{redirect, [{atom(), atom()}]}</span></strong></dt>
 
      <dd><p>Specifies a list of pairs of module names, representing a
      mapping from old names to new. <strong>The set of old names may not
      include any of the names of the input modules.</strong> All calls to
      the listed old modules will be rewritten to refer to the
      corresponding new modules. <strong>The redirected calls will not be
      further processed, even if the new destination is in one of the
      input modules.</strong> This option mainly exists to support module
      renaming; cf. <span class="code">rename/3</span>. The default value is the
      empty list.</p></dd>
 
  <dt><strong><span class="code">{safe, [atom()]}</span></strong></dt>
 
      <dd><p>Specifies a list of names of input modules such that calls to
      these "safe" modules may be turned into direct local calls, that
      do not test for code replacement. Typically, this can be done for
      e.g. standard library modules. If a module is "safe", it is per
      definition also "static" (cf. below). The list may be empty. By
      default, all involved modules <strong>except the target module</strong>
      are considered "safe".</p></dd>
 
  <dt><strong><span class="code">{static, [atom()]}</span></strong></dt>
 
      <dd><p>Specifies a list of names of input modules which will be
      assumed never to be replaced (reloaded) unless the target module
      is also first replaced. The list may be empty. The target module
      itself (which may also be one of the input modules) is always
      regarded as "static", regardless of the value of this option. By
      default, all involved modules are assumed to be static.</p></dd>
 
  <dt><strong><span class="code">{tidy, boolean()}</span></strong></dt>
 
      <dd><p>If the value is <span class="code">true</span>, the resulting code will be
      processed using the <span class="code">erl_tidy</span> module, which removes
      unused functions and does general code cleanup. (See
      <span class="code">erl_tidy:module/2</span> for additional options.) The
      default value is <span class="code">true</span>.</p></dd>
 
  <dt><strong><span class="code">{verbose, boolean()}</span></strong></dt>
 
      <dd><p>If the value is <span class="code">true</span>, progress messages will be
      output while the program is running; the default value is
      <span class="code">false</span>.</p></dd>
  </dl>
 
  <p>Note: The distinction between "static" and "safe" modules is
  necessary in order not to break the semantics of dynamic code
  replacement. A "static" source module will not be replaced unless the
  target module also is. Now imagine a state machine implemented by
  placing the code for each state in a separate module, and suppose
  that we want to merge this into a single target module, marking all
  source modules as static. At each point in the original code where a
  call is made from one of the modules to another (i.e., the state
  transitions), code replacement is expected to be detected. Then, if
  we in the merged code do not check at these points if the
  <strong>target</strong> module (the result of the merge) has been replaced,  
we can not be sure in general that we will be able to do code  
replacement of the merged state machine - it could run forever  
without detecting the code change. Therefore, all such calls must  
remain remote-calls (detecting code changes), but may call the target  
module directly.</p>
 
  <p>If we are sure that this kind of situation cannot ensue, we may
  specify the involved modules as "safe", and all calls between them
  will become local. Note that if the target module itself is specified
  as safe, "remote" calls to itself will be turned into local calls.
  This would destroy the code replacement properties of e.g. a typical
  server loop.
 </p>
<p><strong>See also:</strong> <span class="bold_code"><a href="#create_stubs-2">create_stubs/2</a></span>, <span class="bold_code"><a href="#rename-3">rename/3</a></span>, <span class="bold_code"><a href="erl_tidy.html#module-2">erl_tidy:module/2</a></span>.</p>
</p></div>
<p><a name="parse_transform-2"><span class="bold_code">parse_transform(Forms::[syntaxTree()], Options::[term()]) -&gt; [syntaxTree()]</span></a><br></p>
<div class="REFBODY">
<p>Types:</p>
<div class="REFTYPES">
<span class="bold_code">syntaxTree() (see module erl_syntax)</span><br>
</div>
</div>
<div class="REFBODY"><p><a name="parse_transform-2"></a>

<p>Allows Igor to work as a component of the Erlang compiler.
  Including the term <span class="code">{parse_transform, igor}</span> in the
  compile options when compiling an Erlang module (cf.
  <span class="code">compile:file/2</span>), will call upon Igor to process the  
source code, allowing automatic inclusion of other source files. No  
files are created or overwritten when this function is used.</p>
 
  <p>Igor will look for terms <span class="code">{igor, List}</span> in the compile
  options, where <span class="code">List</span> is a list of Igor-specific options,
  as follows:
  </p><dl>
   <dt><strong><span class="code">{files, [filename()]}</span></strong></dt>
     <dd><p>The value specifies a list of source files to be merged with
     the file being compiled; cf. <span class="code">merge_files/4</span>.</p></dd>
  </dl>
 
  <p>See <span class="code">merge_files/4</span> for further options. Note, however,
  that some options are preset by this function and cannot be
  overridden by the user; in particular, all cosmetic features are
  turned off, for efficiency. Preprocessing is turned on.
 </p>
<p><strong>See also:</strong> <span class="bold_code"><a href="javascript:erlhref('../../../../doc/../','compiler','compile.html#file-2');">compile:file/2</a></span>, <span class="bold_code"><a href="#merge_files-4">merge_files/4</a></span>.</p>
</p></div>
<p><a name="rename-2"><span class="bold_code">rename(Files::[filename()], Renamings) -&gt; [string()]</span></a><br></p>
<div class="REFBODY"><p><a name="rename-2"></a>
<p>Equivalent to <span class="bold_code"><a href="#rename-3">rename(Files, Renamings, [])</a></span>.</p>
</p></div>
<p><a name="rename-3"><span class="bold_code">rename(Files::[filename()], Renamings, Options::[term()]) -&gt; [string()]</span></a><br></p>
<div class="REFBODY">
<p>Types:</p>
<div class="REFTYPES">
<span class="bold_code">Renamings = [{atom(), atom()}]</span><br>
</div>
</div>
<div class="REFBODY"><p><a name="rename-3"></a>

<p>Renames a set of possibly interdependent source code modules.
  <span class="code">Files</span> is a list of file names of source modules to be
  processed. <span class="code">Renamings</span> is a list of pairs of <strong>module
  names</strong>, representing a mapping from old names to new. The  
returned value is the list of output file names.</p>
 
  <p>Each file in the list will be read and processed separately. For
  every file, each reference to some module M, such that there is an
  entry <span class="code">{&lt;em&gt;M&lt;/em&gt;, &lt;em&gt;M1&lt;/em&gt;}</span> in
  <span class="code">Renamings</span>, will be changed to the corresponding M1.
  Furthermore, if a file F defines module M, and there is an entry
  <span class="code">{&lt;em&gt;M&lt;/em&gt;, &lt;em&gt;M1&lt;/em&gt;}</span> in <span class="code">Renamings</span>, a
  new file named <span class="code">&lt;em&gt;M1&lt;/em&gt;.erl</span> will be created in the
  same directory as F, containing the source code for module M, renamed
  to M1. If M does not have an entry in <span class="code">Renamings</span>, the
  module is not renamed, only updated, and the resulting source code is
  written to <span class="code">&lt;em&gt;M&lt;/em&gt;.erl</span> (typically, this overwrites
  the original file). The <span class="code">suffix</span> option (see below) can be
  used to change the default "<span class="code">.erl</span>" suffix for the  
generated files.</p>
 
  <p>Stub modules will automatically be created (see the
  <span class="code">stubs</span> and <span class="code">stub_dir</span> options below) for each  
module that is renamed. These can be used to redirect any calls still  
using the old module names. The stub files are created in the same  
directory as the source file (typically overwriting the original  
file).</p>
 
  <p>Options:
  </p><dl>
    <dt><strong><span class="code">{backup_suffix, string()}</span></strong></dt>
    <dd></dd>
<dt><strong><span class="code">{backups, boolean()}</span></strong></dt>
    <dd></dd>
<dt><strong><span class="code">{printer, Function}</span></strong></dt>
    <dd></dd>
<dt><strong><span class="code">{stubs, boolean()}</span></strong></dt>
    <dd></dd>
<dt><strong><span class="code">{suffix, string()}</span></strong></dt>
  <dd></dd>
</dl><p>
  See <span class="code">merge/3</span> for details on these options.</p>
 
  <dl>
    <dt><strong><span class="code">{comments, boolean()}</span></strong></dt>
    <dd></dd>
<dt><strong><span class="code">{preprocess, boolean()}</span></strong></dt>
  <dd></dd>
</dl><p>
  See <span class="code">merge_files/4</span> for details on these options.</p>
 
  <dl>
    <dt><strong><span class="code">{no_banner, boolean()}</span></strong></dt>
  <dd></dd>
</dl><p>
  For the <span class="code">rename</span> function, this option is
  <span class="code">true</span> by default. See <span class="code">merge_sources/3</span> for  
details.</p>
 
  <dl>
    <dt><strong><span class="code">{tidy, boolean()}</span></strong></dt>
  <dd></dd>
</dl><p>
  For the <span class="code">rename</span> function, this option is
  <span class="code">false</span> by default. See <span class="code">merge_sources/3</span> for  
details.</p>
 
  <dl>
    <dt><strong><span class="code">{no_headers, boolean()}</span></strong></dt>
    <dd></dd>
<dt><strong><span class="code">{stub_dir, filename()}</span></strong></dt>
  <dd></dd>
</dl><p>
  These options are preset by the <span class="code">rename</span> function and  
cannot be overridden by the user.</p>
 
  <p>See <span class="code">merge_sources/3</span> for further options.
 </p>
<p><strong>See also:</strong> <span class="bold_code"><a href="#merge-3">merge/3</a></span>, <span class="bold_code"><a href="#merge_files-4">merge_files/4</a></span>, <span class="bold_code"><a href="#merge_sources-3">merge_sources/3</a></span>.</p>
</p></div>



Richard Carlsson
carlsson.richard@gmail.com</div>
<div class="footer">
<hr>
<p>Copyright © 2006-2012 Ericsson AB. All Rights Reserved.</p>
</div>
</div>
</div></body>
</html>