
settings = {
  # [[direction ]type ]arg[...](,|EOL)
  # 
  # Detailed expression:
  #function_args=(?:
  #                  matches () not to try to extract an argument for it
  #               ^\([ \t]*\)$
  #               |
  #                  type or modifier (e.g. "char *", "string?[42]" or "List<string>")
  #               (?:[a-zA-Z0-9_]+[ \t*?]*(?:(?:\\[|<)[a-zA-Z0-9_\[\]*?]*(?:\\]|>))?[ \t*?]+)*
  #                the argument name itself (only capture)
  #               ([a-zA-Z0-9_.]+)
  #                  prototype end (e.g. ")", end of (*arg))
  #               (?:[ \t]*\))?
  #               possible white-spaces
  #               [ \t]*
  #               permissive match for post-arg (any shit we didn't thought about)
  #               [^,]*
  #               , or EOL
  #               (?:,|$)
  #              )
  # note that \ are escaped, so to have a \ you need to put \\
  match_function_arguments = "(?:^\\([ \t]*\\)$|(?:[a-zA-Z0-9_]+[ \t*?]*(?:(?:\\[|<)[a-zA-Z0-9_\\[\\]*?]*(?:\\]|>))?[ \t*?]+)*([a-zA-Z0-9_.]+)[ \t]*[^,]*(?:,|$))";
  
  # global env
  global_environment = "write_since = 0;";
}

doctypes = {
  valadoc = {
    enumval.policy  = FORWARD;
    
    class.template  = "/**\n * {cursor}\n{if write_since} * \n * @since \n{end} */\n";
    field.template  = "/**\n * {cursor}\n{if write_since} * \n * @since \n{end} */\n";
    method.template = "/**\n * {cursor}\n * \n{for arg in argument_list} * @param {arg} {cursor}\n{end}{if returns} * @return {cursor}\n{end}{if write_since} * \n * @since {cursor}\n{end} */\n";
    enum.template   = "/**\n * {cursor}\n * \n{for enumval in enumval_list} * @param {enumval} {cursor}\n{end}{if write_since} * \n * @since {cursor}\n{end} */\n";
  }
}

