CFG_write_markdown Subroutine

public subroutine CFG_write_markdown(cfg_in, filename, hide_unused)

Uses

  • proc~~cfg_write_markdown~~UsesGraph proc~cfg_write_markdown CFG_write_markdown iso_fortran_env iso_fortran_env proc~cfg_write_markdown->iso_fortran_env

This routine writes the current configuration to a markdown file

Arguments

Type IntentOptional Attributes Name
type(CFG_t), intent(in) :: cfg_in
character(len=*), intent(in) :: filename
logical, intent(in), optional :: hide_unused

Calls

proc~~cfg_write_markdown~~CallsGraph proc~cfg_write_markdown CFG_write_markdown proc~cfg_check CFG_check proc~cfg_write_markdown->proc~cfg_check proc~cfg_sort CFG_sort proc~cfg_write_markdown->proc~cfg_sort proc~handle_error handle_error proc~cfg_write_markdown->proc~handle_error proc~split_category split_category proc~cfg_write_markdown->proc~split_category proc~cfg_check->proc~handle_error proc~qsort_config qsort_config proc~cfg_sort->proc~qsort_config proc~qsort_config->proc~qsort_config proc~parition_var_list parition_var_list proc~qsort_config->proc~parition_var_list

Source Code

  subroutine CFG_write_markdown(cfg_in, filename, hide_unused)
    use iso_fortran_env
    type(CFG_t), intent(in)       :: cfg_in
    character(len=*), intent(in)  :: filename
    logical, intent(in), optional :: hide_unused
    logical                       :: hide_not_used
    integer                       :: i, j, io_state, myUnit
    type(CFG_t)                   :: cfg
    character(len=CFG_name_len)   :: name_format, var_name
    character(len=CFG_name_len)   :: category, prev_category
    character(len=CFG_string_len) :: err_string

    hide_not_used = .false.
    if (present(hide_unused)) hide_not_used = hide_unused

    ! Always print a sorted configuration
    cfg = cfg_in
    if (.not. cfg%sorted) call CFG_sort(cfg)

    write(name_format, FMT="(A,I0,A)") "(A,A", CFG_name_len, ",A)"

    if (filename == "stdout") then
       myUnit = output_unit
    else
       myUnit = 333
       open(myUnit, FILE=filename, ACTION="WRITE", ERR=999, IOSTAT=io_state)
    end if

    category      = ""
    prev_category = "X"
    write(myUnit, ERR=998, FMT="(A)") "# Configuration file (markdown format)"
    write(myUnit, ERR=998, FMT="(A)") ""

    do i = 1, cfg%num_vars

       if (.not. cfg%vars(i)%used .and. hide_not_used) cycle
       if (cfg%vars(i)%var_type == CFG_unknown_type) cycle

       ! Write category when it changes
       call split_category(cfg%vars(i), category, var_name)

       if (category /= prev_category) then
          if (category == "") category = "No category"
          write(myUnit, ERR=998, FMT="(A)") '## ' // trim(category)
          write(myUnit, ERR=998, FMT="(A)") ""
          prev_category = category
       end if

       write(myUnit, ERR=998, FMT="(A)") "* " // trim(cfg%vars(i)%description)
       write(myUnit, ERR=998, FMT="(A)") ""
       write(myUnit, ADVANCE="NO", ERR=998,&
           FMT="(A)") '        ' // trim(var_name) // " ="

       select case(cfg%vars(i)%var_type)
       case (CFG_integer_type)
          do j = 1, cfg%vars(i)%var_size
             write(myUnit, ADVANCE="NO", ERR=998, FMT="(A,I0)") " ",&
                 cfg%vars(i)%int_data(j)
          end do
       case (CFG_real_type)
          do j = 1, cfg%vars(i)%var_size
             write(myUnit, ADVANCE="NO", ERR=998, FMT="(A,E11.4)") " ",&
                 cfg%vars(i)%real_data(j)
          end do
       case (CFG_string_type)
          do j = 1, cfg%vars(i)%var_size
             write(myUnit, ADVANCE="NO", ERR=998,&
                 FMT="(A)") " '" // trim(cfg%vars(i)%char_data(j)) // "'"
          end do
       case (CFG_logic_type)
          do j = 1, cfg%vars(i)%var_size
             write(myUnit, ADVANCE="NO", ERR=998, FMT="(A,L1)") " ",&
                 cfg%vars(i)%logic_data(j)
          end do
       end select
       write(myUnit, ERR=998, FMT="(A)") ""
       write(myUnit, ERR=998, FMT="(A)") ""
    end do

    if (myUnit /= output_unit) close(myUnit, ERR=999, IOSTAT=io_state)
    call CFG_check(cfg_in)
    return

998 continue
    write(err_string, *) "CFG_write_markdown error: io_state = ", io_state,&
        " while writing ", trim(var_name), " to ", filename
    call handle_error(err_string)

999 continue ! If there was an error, the routine will end here
    write(err_string, *) "CFG_write_markdown error: io_state = ", io_state,&
        " while writing to ", filename
    call handle_error(err_string)

  end subroutine CFG_write_markdown