Module dc_url

module dc_url

        ! Uses
    use dcstring_base, only: VSTRING, operator(.cat.), operator(/=),  extract, operator(==)

        ! Variables
    character, public, parameter :: GT_ATMARK = "@"
    character, public, parameter :: GT_QUESTION = "?"
    character, public, parameter :: GT_COLON = ":"
    character, public, parameter :: GT_COMMA = ","
    character, public, parameter :: GT_EQUAL = "="
    character, public, parameter :: GT_CIRCUMFLEX = "^"
    character, public, parameter :: GT_PLUS = "+"

        ! Interfaces
    public interface UrlMerge
    public interface UrlSplit
    public interface UrlResolve
    public interface UrlSearchIORange
    public interface operator(.OnTheSameFile.)

        ! Subroutines and functions
    private type (VSTRING) function url_merge_v_vvv (file, var, attr, iorange)
    private function url_merge_cc (file, var) result (result)
    private function url_merge_cccca (file, var, attr, iorange) result (result)
    private function url_merge_cccc (file, var, attr, iorange) result (result)
    public subroutine Url_Chop_IOrange (fullname, iorange, remainder)
    private function url_search_iorange (fullname, dimvar) result (result)
    private subroutine url_split_c (fullname, file, var, attr, iorange)
    private subroutine url_split_v (fullname, file, var, attr, iorange)
    private logical function UrlOnTheSameFile (url_a, url_b)
    private function url_resolve_c (relative, base) result (result)

end module dc_url

Description of Variables

GT_ATMARK

character, public, parameter :: GT_ATMARK = "@"

GT_QUESTION

character, public, parameter :: GT_QUESTION = "?"

GT_COLON

character, public, parameter :: GT_COLON = ":"

GT_COMMA

character, public, parameter :: GT_COMMA = ","

GT_EQUAL

character, public, parameter :: GT_EQUAL = "="

GT_CIRCUMFLEX

character, public, parameter :: GT_CIRCUMFLEX = "^"

GT_PLUS

character, public, parameter :: GT_PLUS = "+"

Description of Interfaces

UrlMerge

public interface UrlMerge
    module procedure url_merge_v_vvv
    module procedure url_merge_cc
    module procedure url_merge_cccc
    module procedure url_merge_cccca
end interface UrlMerge

UrlSplit

public interface UrlSplit
    module procedure url_split_v
    module procedure url_split_c
end interface UrlSplit

UrlResolve

public interface UrlResolve
    module procedure url_resolve_c
end interface UrlResolve

UrlSearchIORange

public interface UrlSearchIORange
    module procedure url_search_iorange
end interface UrlSearchIORange

operator(.OnTheSameFile.)

public interface operator(.OnTheSameFile.)
    module procedure UrlOnTheSameFile
end interface operator(.OnTheSameFile.)

Description of Subroutines and Functions

url_merge_v_vvv

private function url_merge_v_vvv (file, var, attr, iorange) result (result)
    type (VSTRING), intent(in) :: file
    type (VSTRING), optional, intent(in) :: var
    type (VSTRING), optional, intent(in) :: attr
    type (VSTRING), optional, intent(in) :: iorange
    type (VSTRING) :: result
end function url_merge_v_vvv

url_merge_cc

private function url_merge_cc (file, var) result (result)
    character (len=*), intent(in) :: file
    character (len=*), intent(in) :: var
    character (len=STRING) :: result
end function url_merge_cc

url_merge_cccca

private function url_merge_cccca (file, var, attr, iorange) result (result)
    character (len=*), intent(in) :: file
    character (len=*), intent(in) :: var
    character (len=*), intent(in) :: attr
    character (len=*), intent(in), dimension (:) :: iorange
    character (len=STRING) :: result
end function url_merge_cccca

url_merge_cccc

private function url_merge_cccc (file, var, attr, iorange) result (result)
    character (len=*), intent(in) :: file
    character (len=*), intent(in) :: var
    character (len=*), intent(in) :: attr
    character (len=*), intent(in) :: iorange
    character (len=STRING) :: result
end function url_merge_cccc

Url_Chop_IOrange

public subroutine Url_Chop_IOrange (fullname, iorange, remainder)
    character (len=*), intent(in) :: fullname
    character (len=*), intent(out) :: iorange
    character (len=*), intent(out) :: remainder
    ! Calls: urlsplit
end subroutine Url_Chop_IOrange

url_search_iorange

private function url_search_iorange (fullname, dimvar) result (result)
    character (len=*), intent(in) :: fullname
    character (len=*), intent(in) :: dimvar
    character (len=STRING) :: result
    ! Calls: Split, urlsplit
end function url_search_iorange

url_split_c

private subroutine url_split_c (fullname, file, var, attr, iorange)
    character (len=*), intent(in) :: fullname
    character (len=*), optional, intent(out) :: file
    character (len=*), optional, intent(out) :: var
    character (len=*), optional, intent(out) :: attr
    character (len=*), optional, intent(out) :: iorange
end subroutine url_split_c

url_split_v

private subroutine url_split_v (fullname, file, var, attr, iorange)
    type (VSTRING), intent(in) :: fullname
    type (VSTRING), optional, intent(out) :: file
    type (VSTRING), optional, intent(out) :: var
    type (VSTRING), optional, intent(out) :: attr
    type (VSTRING), optional, intent(out) :: iorange
end subroutine url_split_v

UrlOnTheSameFile

private function UrlOnTheSameFile (url_a, url_b) result (result)
    character (len=*), intent(in) :: url_a
    character (len=*), intent(in) :: url_b
    logical :: result
    ! Calls: UrlSplit
end function UrlOnTheSameFile

url_resolve_c

private function url_resolve_c (relative, base) result (result)
    character (len=*), intent(in) :: relative
    character (len=*), intent(in) :: base
    character (len=STRING) :: result
    ! Calls: DbgMessage, UrlSplit, beginsub, endsub
end function url_resolve_c