Data Types | Functions/Subroutines | Variables
dc_url Module Reference

Functions/Subroutines

character(len=string) function url_merge_cccca (file, var, attr, iorange)
 
character(len=string) function url_merge_cccc (file, var, attr, iorange)
 
subroutine, public url_chop_iorange (fullname, iorange, remainder)
 
character(len=string) function url_search_iorange (fullname, dimvar)
 
subroutine url_split_c (fullname, file, var, attr, iorange)
 
logical function urlonthesamefile (url_a, url_b)
 
character(len=string) function url_resolve_c (relative, base)
 

Variables

character, parameter, public gt_atmark = "@"
 
character, parameter, public gt_question = "?"
 
character, parameter, public gt_colon = ":"
 
character, parameter, public gt_comma = ","
 
character, parameter, public gt_equal = "="
 
character, parameter, public gt_circumflex = "^"
 
character, parameter, public gt_plus = "+"
 

Function/Subroutine Documentation

◆ url_chop_iorange()

subroutine, public dc_url::url_chop_iorange ( character(len = *), intent(in)  fullname,
character(len = *), intent(out)  iorange,
character(len = *), intent(out)  remainder 
)

Definition at line 201 of file dc_url.f90.

References dc_types::string, and url_merge_cccc().

201  !
202  ! fullname で与えられる変数 URL の入出力範囲指定部分と
203  ! 残りの部分とを分離し、それぞれ iorange と remainder に返します。
204  !
205  use dc_types, only: string
206  character(len = *), intent(in):: fullname
207  character(len = *), intent(out):: iorange ! 入出力範囲指定部分
208  character(len = *), intent(out):: remainder ! 残りの部分
209  character(STRING):: file, var, attr
210  call urlsplit(fullname, file=file, var=var, attr=attr, iorange=iorange)
211  remainder = url_merge_cccc(file=file, var=var, attr=attr, iorange="")
Provides kind type parameter values.
Definition: dc_types.f90:49
integer, parameter, public string
Character length for string.
Definition: dc_types.f90:118
Here is the call graph for this function:

◆ url_merge_cccc()

character(len = string) function dc_url::url_merge_cccc ( character(len = *), intent(in)  file,
character(len = *), intent(in)  var,
character(len = *), intent(in)  attr,
character(len = *), intent(in)  iorange 
)

Definition at line 171 of file dc_url.f90.

References gt_atmark, gt_colon, gt_comma, and dc_types::string.

171  !
172  ! ファイル名 file、変数名 var、属性 attr、
173  ! 入出力範囲 iorange を結合して relsult として返します。
174  !
175  use dc_types, only: string
176  character(len = STRING):: result
177  character(len = *), intent(in):: file
178  character(len = *), intent(in):: var
179  character(len = *), intent(in):: attr
180  character(len = *), intent(in):: iorange
181  continue
182  if (trim(file) /= "") then
183  result = trim(file) // gt_atmark
184  else
185  result = gt_atmark
186  endif
187  if (trim(var) /= "") result = trim(result) // var
188  if (trim(attr) /= "") then
189  result = trim(result) // gt_colon // attr
190  endif
191  if (trim(iorange) /= "") then
192  if (iorange(1:1) == gt_comma) then
193  result = trim(result) // iorange
194  else
195  result = trim(result) // gt_comma // iorange
196  endif
197  endif
Provides kind type parameter values.
Definition: dc_types.f90:49
integer, parameter, public string
Character length for string.
Definition: dc_types.f90:118

◆ url_merge_cccca()

character(len = string) function dc_url::url_merge_cccca ( character(len = *), intent(in)  file,
character(len = *), intent(in)  var,
character(len = *), intent(in)  attr,
character(len = *), dimension(:), intent(in)  iorange 
)

Definition at line 136 of file dc_url.f90.

References gt_atmark, gt_colon, gt_comma, and dc_types::string.

136  !
137  ! ファイル名 file、変数名 var、属性 attr、
138  ! 入出力範囲 iorange を結合して relsult として返します。
139  ! iorange には文字型配列を与えます。文字型配列のそれぞれの要素は
140  ! GT_COMMA で連結されてから結合されます。
141  !
142  use dc_types, only: string
143  character(len = STRING):: result
144  character(len = *), intent(in):: file
145  character(len = *), intent(in):: var
146  character(len = *), intent(in):: attr
147  character(len = *), intent(in):: iorange(:)
148  integer:: i
149  continue
150  if (file /= "") then
151  result = trim(file) // gt_atmark
152  else
153  result = gt_atmark
154  endif
155  if (var /= "") result = trim(result) // var
156  if (attr /= "") then
157  result = trim(result) // gt_colon // attr
158  endif
159  do i = 1, size(iorange)
160  if (iorange(i) /= "") then
161  if (iorange(i)(1:1) == gt_comma) then
162  result = trim(result) // trim(iorange(i))
163  else
164  result = trim(result) // gt_comma // trim(iorange(i))
165  endif
166  endif
167  end do
Provides kind type parameter values.
Definition: dc_types.f90:49
integer, parameter, public string
Character length for string.
Definition: dc_types.f90:118

◆ url_resolve_c()

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

Definition at line 405 of file dc_url.f90.

References dc_types::string.

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

◆ url_search_iorange()

character(len = string) function dc_url::url_search_iorange ( character(len = *), intent(in)  fullname,
character(len = *), intent(in)  dimvar 
)

Definition at line 215 of file dc_url.f90.

References gt_atmark, gt_comma, gt_equal, gt_question, and dc_types::string.

215  !
216  ! 変数 URL *fullname* 内の, 次元 *dimvar* に関する
217  ! 入出力範囲指定の値を取得します。
218  !
219  ! fullname には gtool4 変数全体または入出力範囲指定部分の値を与えます。
220  ! dimvar には入出力範囲指定部分に含まれる次元変数名を与えます。
221  ! dimvar に対応する次元変数が存在する場合、その値を返します。
222  ! dimvar に対応する次元変数が存在しない場合、空文字を返します。
223  !
224  use dc_types, only: string
225  use dc_string, only: split
226  character(len = *), intent(in):: fullname
227  character(len = *), intent(in):: dimvar
228  character(len = STRING):: result
229  character(STRING):: file, var, attr, iorange
230  character(STRING), pointer :: ioranges_slice(:) => null()
231  integer :: i, eqpos, atmark
232  continue
233  result = ""
234  ! @ または ? が含まれているなら urlsplit で分離
235  atmark = index(fullname, gt_question)
236  if (atmark == 0) atmark = index(fullname, gt_atmark)
237  if (atmark /= 0) then
238  call urlsplit(fullname, file=file, var=var, attr=attr, iorange=iorange)
239  else
240  iorange = fullname
241  end if
242  call split(iorange, ioranges_slice, gt_comma)
243  do i = 1, size(ioranges_slice)
244  eqpos = index(ioranges_slice(i), gt_equal)
245  if (ioranges_slice(i)(1:eqpos-1) == trim(dimvar)) then
246  result = trim(ioranges_slice(i)(eqpos+1:))
247  exit
248  end if
249  end do
250  deallocate(ioranges_slice)
Provides kind type parameter values.
Definition: dc_types.f90:49
integer, parameter, public string
Character length for string.
Definition: dc_types.f90:118

◆ url_split_c()

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

Definition at line 254 of file dc_url.f90.

References gt_atmark, gt_colon, gt_comma, gt_question, and dc_types::string.

254  !
255  ! fullname で与えられる変数 URL を、ファイル名 file、 変数名 var、
256  ! 属性名 attr、入出力範囲指定 iorange に分解して返します。
257  ! 見つからない成分には空文字列が代入されます。
258  !
259  use dc_types, only: string
260  character(len = *), intent(in):: fullname
261  character(len = *), intent(out), optional:: file, var, attr, iorange
262  character(len = STRING):: varpart
263  integer:: atmark, colon, comma
264  character(len = *), parameter:: varname_set &
265  = "0123456789eEdD+-=^,.:_" &
266  // "ABCDEFGHIJKLMNOPQRSTUVWXYZ" &
267  // "abcdefghijklmnopqrstuvwxyz"
268  continue
269  ! まず URL と変数属性指定 (? または @ 以降) を分離する。
270  ! URL は @ を含みうるため、最後の @ 以降に対して変数属性
271  ! として許されない文字(典型的には '/')が含まれていたら
272  ! 当該 @ は URL の一部とみなす。
273  atmark = index(fullname, gt_question)
274  if (atmark == 0) then
275  atmark = index(fullname, gt_atmark, back=.true.)
276  if (atmark /= 0) then
277  if (verify(trim(fullname(atmark+1: )), varname_set) /= 0) then
278  atmark = 0
279  endif
280  endif
281  endif
282  if (atmark == 0) then
283  ! 変数属性指定はなかった。
284  if (present(file)) file = fullname
285  if (present(var)) var = ''
286  if (present(attr)) attr = ''
287  if (present(iorange)) iorange = ''
288  return
289  endif
290  varpart = fullname(atmark+1: )
291  ! 変数属性指定があった。
292  if (present(file)) file = fullname(1: atmark - 1)
293  ! 範囲指定を探索する。
294  comma = index(varpart, gt_comma)
295  if (comma /= 0) then
296  ! 範囲指定がみつかった。
297  if (present(var)) var = varpart(1: comma - 1)
298  if (present(attr)) attr = ''
299  if (present(iorange)) iorange = varpart(comma + 1: )
300  return
301  endif
302  if (present(iorange)) iorange = ''
303  ! 範囲指定がなかったので、属性名の検索をする。
304  colon = index(varpart, gt_colon)
305  if (colon == 0) then
306  if (present(var)) var = varpart
307  if (present(attr)) attr = ''
308  varpart = ''
309  return
310  endif
311  if (present(var)) var = varpart(1: colon - 1)
312  if (present(attr)) attr = varpart(colon + 1: )
313  varpart = ''
Provides kind type parameter values.
Definition: dc_types.f90:49
integer, parameter, public string
Character length for string.
Definition: dc_types.f90:118

◆ urlonthesamefile()

logical function dc_url::urlonthesamefile ( character(len = *), intent(in)  url_a,
character(len = *), intent(in)  url_b 
)

Definition at line 383 of file dc_url.f90.

References dc_types::string.

383  !
384  ! 1 つ目の引数に与えられる変数 URL と 2 つ目の引数に与えられる
385  ! 変数 URL とが同じファイルを指しているかどうか判定します。
386  ! もしも同じファイルであれば <b><tt>.true.</tt></b> を、
387  ! 異なるファイルであれば <b><tt>.false.</tt></b> を返します。
388  !
389  use dc_string
390  use dc_types, only: string
391  character(len = *), intent(in) :: url_a
392  character(len = *), intent(in) :: url_b
393  character(len = STRING) :: filepart_a
394  character(len = STRING) :: filepart_b
395  call urlsplit(url_a, file=filepart_a)
396  call urlsplit(url_b, file=filepart_b)
397  result = (filepart_a == filepart_b)
Provides kind type parameter values.
Definition: dc_types.f90:49
integer, parameter, public string
Character length for string.
Definition: dc_types.f90:118

Variable Documentation

◆ gt_atmark

character, parameter, public dc_url::gt_atmark = "@"

Definition at line 79 of file dc_url.f90.

79  character, public, parameter:: gt_atmark = "@"

◆ gt_circumflex

character, parameter, public dc_url::gt_circumflex = "^"

Definition at line 89 of file dc_url.f90.

89  character, public, parameter:: gt_circumflex = "^"

◆ gt_colon

character, parameter, public dc_url::gt_colon = ":"

Definition at line 83 of file dc_url.f90.

83  character, public, parameter:: gt_colon = ":"

◆ gt_comma

character, parameter, public dc_url::gt_comma = ","

Definition at line 85 of file dc_url.f90.

85  character, public, parameter:: gt_comma = ","

◆ gt_equal

character, parameter, public dc_url::gt_equal = "="

Definition at line 87 of file dc_url.f90.

87  character, public, parameter:: gt_equal = "="

◆ gt_plus

character, parameter, public dc_url::gt_plus = "+"

Definition at line 92 of file dc_url.f90.

92  character, public, parameter:: gt_plus = "+"

◆ gt_question

character, parameter, public dc_url::gt_question = "?"

Definition at line 81 of file dc_url.f90.

81  character, public, parameter:: gt_question = "?"