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 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 )

Definition at line 404 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))
Provides kind type parameter values.
Definition dc_types.f90:49
integer, parameter, public string
Character length for string
Definition dc_types.f90:118

References dc_types::string.


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