gtool5 Fortran 90/95 ライブラリ 1.0.0-rc5
English
Loading...
Searching...
No Matches
dc_url::urlresolve Interface Reference

Public Member Functions

character(len=string) function url_resolve_c (relative, base)

Detailed Description

Definition at line 83 of file dc_url.f90.

Member Function/Subroutine Documentation

◆ url_resolve_c()

character(len = string) function dc_url::urlresolve::url_resolve_c ( character(len = *), intent(in) relative,
character(len = *), intent(in) base )

変数 URL の補完

relative で与えられる変数 URL が完全でない (ファイル名、変数名、 属性名、入出力範囲指定のどれかが無い) 場合に、base から補完します。

Parameters
[in]relative補完する相対変数 URL
[in]base補完に使用する基準変数 URL
Returns
補完された変数 URL

Definition at line 584 of file dc_url.f90.

585 use dc_string, only: strhead
586 use dc_types, only: string
588 implicit none
589 character(len = *), intent(in):: relative
590 character(len = *), intent(in):: base
591 character(len = STRING):: result
592 integer, parameter:: FILE = 1, var = 2, attr = 3, ior = 4
593 character(len = STRING):: rel(FILE:IOR), bas(FILE:IOR)
594 character(3), parameter:: PATHDELIM = "/:" // achar(94)
595 integer:: idir_r, idir_b
596 continue
597 call beginsub('urlresolve', 'rel=<%c> base=<%c>', c1=relative, c2=base)
598 call urlsplit(trim(relative), file=rel(file), var=rel(var), &
599 & attr=rel(attr), iorange=rel(ior))
600 call dbgmessage('rel -> file=<%c> var=<%c> attr=<%c>', &
601 & c1=trim(rel(file)), c2=trim(rel(var)), &
602 & c3=(trim(rel(attr)) // '> ior=<' // trim(rel(ior))))
603 call urlsplit(base, file=bas(file), var=bas(var), &
604 & attr=bas(attr), iorange=bas(ior))
605 call dbgmessage('base -> file=<%s> var=<%s> attr=<%s> ior=<%s>', &
606 & c1=trim(bas(file)), c2=trim(bas(var)), &
607 & c3=(trim(bas(attr)) // '> ior=<' // trim(bas(ior))))
608 ! --- ファイル名を欠くばあいは単に補う ---
609 if (rel(file) == "") then
610 rel(file) = bas(file)
611 if (rel(var) == "") &
612 & rel(var) = bas(var)
613 result = urlmerge(file=rel(file), var=rel(var), &
614 & attr=rel(attr), iorange=rel(ior))
615 call endsub('urlresolve', '1 result=%c', c1=trim(result))
616 return
617 endif
618 ! --- 絶対パス (と見られる) ファイル名はそのまま使用 ---
619 if (strhead(rel(file), "file:") &
620 & .OR. strhead(rel(file), "http:") &
621 & .OR. strhead(rel(file), "ftp:") &
622 & .OR. strhead(rel(file), "news:") &
623 & .OR. strhead(rel(file), "www") &
624 & .OR. strhead(rel(file), "/") &
625 & .OR. strhead(rel(file), achar(94)) &
626 & .OR. rel(file)(2:2) == ":" &
627 ) then
628 result = relative
629 call endsub('urlresolve', '2 result=%c', c1=trim(result))
630 return
631 endif
632 ! ディレクトリ名の取り出し
633 idir_b = scan(bas(file), pathdelim, back=.true.)
634 if (idir_b == 0) then
635 ! が、できなければ、(エラーとすべきかもしれぬが)
636 ! 相対パスをそのまま使用
637 result = relative
638 call endsub('urlresolve', '3 result=%c', c1=trim(result))
639 return
640 endif
641 ! 相対パスのほうのディレクトリ名の取り出し
642 idir_r = scan(rel(file), pathdelim, back=.true.)
643 if (idir_r == 0) then
644 ! ができなければ全体を使用
645 idir_r = 1
646 endif
647 result = base(1: idir_b) // relative(idir_r: )
648 call endsub('urlresolve', '4 result=%c', c1=trim(result))
文字型変数の操作
Definition dc_string.f90:83
デバッグ時の追跡用モジュール
Definition dc_trace.f90:150
subroutine, public dbgmessage(fmt, i, r, d, l, n, c1, c2, c3, ca)
Definition dc_trace.f90:661
subroutine, public beginsub(name, fmt, i, r, d, l, n, c1, c2, c3, ca, version)
Definition dc_trace.f90:457
subroutine, public endsub(name, fmt, i, r, d, l, n, c1, c2, c3, ca)
Definition dc_trace.f90:580
種別型パラメタを提供します。
Definition dc_types.f90:55
integer, parameter, public string
文字列を保持する 文字型変数の種別型パラメタ
Definition dc_types.f90:137

References dc_trace::beginsub(), dc_trace::dbgmessage(), dc_trace::endsub(), and dc_types::string.

Here is the call graph for this function:

The documentation for this interface was generated from the following file: