dc_url::urlresolve Interface Reference

Private Member Functions

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

Detailed Description

Definition at line 66 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 
)
private

Definition at line 405 of file dc_url.f90.

405  !
406  ! relative で与えられる変数 URL が完全でない (ファイル名、 変数名、
407  ! 属性名、入出力範囲指定のどれかが無い) 場合に、 base
408  ! から補完します。
409  !
410  use dc_string, only: strhead
411  use dc_types, only: string
412  use dc_trace, only: beginsub, endsub, dbgmessage
413  implicit none
414  character(len = *), intent(in):: relative
415  character(len = *), intent(in):: base
416  character(len = STRING):: result
417  integer, parameter:: file = 1, var = 2, attr = 3, ior = 4
418  character(len = STRING):: rel(file:ior), bas(file:ior)
419  character(3), parameter:: pathdelim = "/:" // achar(94)
420  integer:: idir_r, idir_b
421  continue
422  call beginsub('urlresolve', 'rel=<%c> base=<%c>', c1=relative, c2=base)
423  call urlsplit(trim(relative), file=rel(file), var=rel(var), &
424  & attr=rel(attr), iorange=rel(ior))
425  call dbgmessage('rel -> file=<%c> var=<%c> attr=<%c>', &
426  & c1=trim(rel(file)), c2=trim(rel(var)), &
427  & c3=(trim(rel(attr)) // '> ior=<' // trim(rel(ior))))
428  call urlsplit(base, file=bas(file), var=bas(var), &
429  & attr=bas(attr), iorange=bas(ior))
430  call dbgmessage('base -> file=<%s> var=<%s> attr=<%s> ior=<%s>', &
431  & c1=trim(bas(file)), c2=trim(bas(var)), &
432  & c3=(trim(bas(attr)) // '> ior=<' // trim(bas(ior))))
433  ! --- ファイル名を欠くばあいは単に補う ---
434  if (rel(file) == "") then
435  rel(file) = bas(file)
436  if (rel(var) == "") &
437  & rel(var) = bas(var)
438  result = urlmerge(file=rel(file), var=rel(var), &
439  & attr=rel(attr), iorange=rel(ior))
440  call endsub('urlresolve', '1 result=%c', c1=trim(result))
441  return
442  endif
443  ! --- 絶対パス (と見られる) ファイル名はそのまま使用 ---
444  if (strhead(rel(file), "file:") &
445  & .OR. strhead(rel(file), "http:") &
446  & .OR. strhead(rel(file), "ftp:") &
447  & .OR. strhead(rel(file), "news:") &
448  & .OR. strhead(rel(file), "www") &
449  & .OR. strhead(rel(file), "/") &
450  & .OR. strhead(rel(file), achar(94)) &
451  & .OR. rel(file)(2:2) == ":" &
452  ) then
453  result = relative
454  call endsub('urlresolve', '2 result=%c', c1=trim(result))
455  return
456  endif
457  ! ディレクトリ名の取り出し
458  idir_b = scan(bas(file), pathdelim, back=.true.)
459  if (idir_b == 0) then
460  ! が、できなければ、(エラーとすべきかもしれぬが)
461  ! 相対パスをそのまま使用
462  result = relative
463  call endsub('urlresolve', '3 result=%c', c1=trim(result))
464  return
465  endif
466  ! 相対パスのほうのディレクトリ名の取り出し
467  idir_r = scan(rel(file), pathdelim, back=.true.)
468  if (idir_r == 0) then
469  ! ができなければ全体を使用
470  idir_r = 1
471  endif
472  result = base(1: idir_b) // relative(idir_r: )
473  call endsub('urlresolve', '4 result=%c', c1=trim(result))
subroutine, public dbgmessage(fmt, i, r, d, L, n, c1, c2, c3, ca)
Definition: dc_trace.f90:509
subroutine, public beginsub(name, fmt, i, r, d, L, n, c1, c2, c3, ca, version)
Definition: dc_trace.f90:351
文字型変数の操作.
Definition: dc_string.f90:24
種別型パラメタを提供します。
Definition: dc_types.f90:49
subroutine, public endsub(name, fmt, i, r, d, L, n, c1, c2, c3, ca)
Definition: dc_trace.f90:446
integer, parameter, public string
文字列を保持する 文字型変数の種別型パラメタ
Definition: dc_types.f90:118

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