Create a new instance of a lexer by reading from a unit.
Currently, only sequential access units can be processed by this constructor.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(toml_lexer), | intent(out) | :: | lexer |
Instance of the lexer |
||
integer, | intent(in) | :: | io |
Unit to read from |
||
type(toml_error), | intent(out), | allocatable | :: | error |
Error code |
subroutine new_lexer_from_unit(lexer, io, error) !> Instance of the lexer type(toml_lexer), intent(out) :: lexer !> Unit to read from integer, intent(in) :: io !> Error code type(toml_error), allocatable, intent(out) :: error character(:, tfc), allocatable :: source, line integer, parameter :: bufsize = 512 character(bufsize, tfc) :: filename, mode integer :: stat inquire(unit=io, access=mode, name=filename) select case(trim(mode)) case default stat = 1 case("sequential", "SEQUENTIAL") allocate(character(0) :: source) do call read_whole_line(io, line, stat) if (stat > 0) exit source = source // line // TOML_NEWLINE if (stat < 0) then if (is_iostat_end(stat)) stat = 0 exit end if end do call new_lexer_from_string(lexer, source) end select if (len_trim(filename) > 0) lexer%filename = trim(filename) if (stat /= 0) then call make_error(error, "Failed to read from unit") end if end subroutine new_lexer_from_unit