dispatch_group Subroutine

private subroutine dispatch_group(this, lines, n_lines, li, col, gname, prefix, group_seen, errors, n_err, path)

Resolve a group name to known / external / unknown and parse (or skip) its body up to the terminating ‘/’.

Arguments

Type IntentOptional Attributes Name
type(nml_schema_t), intent(inout) :: this
character(len=*), intent(in) :: lines(:)
integer, intent(in) :: n_lines
integer, intent(inout) :: li
integer, intent(inout) :: col
character(len=*), intent(in) :: gname
character(len=*), intent(in) :: prefix
logical, intent(inout), allocatable :: group_seen(:)
character(len=:), intent(inout), allocatable :: errors(:)
integer, intent(inout) :: n_err
character(len=*), intent(in) :: path

Calls

proc~~dispatch_group~~CallsGraph proc~dispatch_group dispatch_group names names proc~dispatch_group->names proc~add_err add_err proc~dispatch_group->proc~add_err proc~group_name_list group_name_list proc~dispatch_group->proc~group_name_list proc~parse_group_body parse_group_body proc~dispatch_group->proc~parse_group_body proc~schema_find_group nml_schema_t%schema_find_group proc~dispatch_group->proc~schema_find_group proc~schema_is_external nml_schema_t%schema_is_external proc~dispatch_group->proc~schema_is_external proc~skip_to_slash skip_to_slash proc~dispatch_group->proc~skip_to_slash proc~strip_nml strip_nml proc~dispatch_group->proc~strip_nml proc~suggest suggest proc~dispatch_group->proc~suggest proc~apply_one_pair apply_one_pair proc~parse_group_body->proc~apply_one_pair proc~collect_tokens collect_tokens proc~parse_group_body->proc~collect_tokens proc~schema_find_group->proc~strip_nml proc~lower lower proc~schema_find_group->proc~lower proc~schema_is_external->proc~strip_nml proc~schema_is_external->proc~lower proc~strip_comment strip_comment proc~skip_to_slash->proc~strip_comment proc~strip_nml->proc~lower proc~levenshtein levenshtein proc~suggest->proc~levenshtein proc~suggest->proc~lower proc~apply_one_pair->names proc~apply_one_pair->proc~add_err proc~apply_one_pair->proc~suggest parse_tokens parse_tokens proc~apply_one_pair->parse_tokens proc~append_val append_val proc~apply_one_pair->proc~append_val proc~group_find_key nml_group_t%group_find_key proc~apply_one_pair->proc~group_find_key proc~group_key_list group_key_list proc~apply_one_pair->proc~group_key_list proc~make_prefix make_prefix proc~apply_one_pair->proc~make_prefix proc~collect_tokens->proc~add_err proc~collect_tokens->proc~strip_comment proc~check_unsupported check_unsupported proc~collect_tokens->proc~check_unsupported proc~collect_tokens->proc~make_prefix proc~push_tok push_tok proc~collect_tokens->proc~push_tok proc~check_unsupported->proc~add_err proc~check_unsupported->proc~make_prefix proc~is_repeat_count is_repeat_count proc~check_unsupported->proc~is_repeat_count proc~group_find_key->proc~lower proc~fmt_int fmt_int proc~make_prefix->proc~fmt_int

Called by

proc~~dispatch_group~~CalledByGraph proc~dispatch_group dispatch_group proc~parse_from_lines parse_from_lines proc~parse_from_lines->proc~dispatch_group proc~parse_file parse_file proc~parse_file->proc~parse_from_lines proc~schema_parse_lines nml_schema_t%schema_parse_lines proc~schema_parse_lines->proc~parse_from_lines proc~read_config_from_string_impl read_config_from_string_impl proc~read_config_from_string_impl->proc~schema_parse_lines proc~schema_parse nml_schema_t%schema_parse proc~schema_parse->proc~parse_file proc~read_config_from_string read_config_from_string proc~read_config_from_string->proc~read_config_from_string_impl proc~read_config_impl read_config_impl proc~read_config_impl->proc~schema_parse proc~build_pending_handle build_pending_handle proc~build_pending_handle->proc~read_config_from_string proc~read_config read_config proc~read_config->proc~read_config_impl

Variables

Type Visibility Attributes Name Initial
integer, private :: gidx

Source Code

   subroutine dispatch_group(this, lines, n_lines, li, col, gname, prefix, &
                             group_seen, errors, n_err, path)
      !! Resolve a group name to known / external / unknown and parse
      !! (or skip) its body up to the terminating '/'.
      type(nml_schema_t), intent(inout) :: this
      character(len=*), intent(in) :: lines(:)
      integer, intent(in) :: n_lines
      integer, intent(inout) :: li, col
      character(len=*), intent(in) :: gname, prefix, path
      logical, allocatable, intent(inout) :: group_seen(:)
      character(len=:), allocatable, intent(inout) :: errors(:)
      integer, intent(inout) :: n_err
      integer :: gidx

      gidx = this%find_group(gname)
      if (gidx > 0) then
         if (group_seen(gidx)) then
            call add_err(errors, n_err, prefix//"duplicate occurrence of group '"//gname//"'")
            call skip_to_slash(lines, n_lines, li, col)
            return
         end if
         group_seen(gidx) = .true.
         this%groups(gidx)%found = .true.
         call parse_group_body(this%groups(gidx), lines, n_lines, li, col, &
                               path, errors, n_err)
         return
      end if
      if (this%is_external(gname)) then
         call skip_to_slash(lines, n_lines, li, col)
         return
      end if
      ! Unknown group.
      block
         character(len=:), allocatable :: names(:)
         character(len=:), allocatable :: sug
         names = group_name_list(this)
         sug = ""
         if (size(names) > 0) sug = suggest(strip_nml(gname), names)
         call add_err(errors, n_err, prefix//"unknown group '"//gname//"'"//sug)
      end block
      call skip_to_slash(lines, n_lines, li, col)
   end subroutine dispatch_group