get_next_line Subroutine

private pure subroutine get_next_line(string, line_start, line, line_end)

Extract the next line from a string starting at line_start

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: string
integer, intent(in) :: line_start
character(len=*), intent(out) :: line
integer, intent(out) :: line_end

Called by

proc~~get_next_line~~CalledByGraph proc~get_next_line get_next_line proc~count_shells_for_element count_shells_for_element proc~count_shells_for_element->proc~get_next_line proc~fill_element_basis fill_element_basis proc~fill_element_basis->proc~get_next_line proc~parse_element_basis parse_element_basis proc~parse_element_basis->proc~count_shells_for_element proc~parse_element_basis->proc~fill_element_basis proc~build_molecular_basis build_molecular_basis proc~build_molecular_basis->proc~parse_element_basis

Variables

Type Visibility Attributes Name Initial
integer, private :: newline_pos

Source Code

   pure subroutine get_next_line(string, line_start, line, line_end)
      !! Extract the next line from a string starting at line_start
      character(len=*), intent(in) :: string
      integer, intent(in) :: line_start
      character(len=*), intent(out) :: line
      integer, intent(out) :: line_end

      integer :: newline_pos

      if (line_start > len(string)) then
         line = ''
         line_end = 0
         return
      end if

      newline_pos = index(string(line_start:), new_line('a'))

      if (newline_pos == 0) then
         ! Last line (no newline at end)
         line = string(line_start:)
         line_end = len(string) + 1
      else
         line = string(line_start:line_start + newline_pos - 2)
         line_end = line_start + newline_pos
      end if

   end subroutine get_next_line