Check that a module name is prefixed with a custom prefix: 1) It must be a valid FORTRAN name subset (<=63 chars, begin with letter, only alphanumeric allowed) 2) It must begin with the prefix 3) If longer, package name must be followed by default separator (“_”) plus at least one char
Basic check: check that both names are individually valid
FPM package enforcing: check that the module name begins with the custom prefix
Query string lengths 2) It must begin with the package name. 3) It can be equal to the package name, or, if longer, must be followed by the 4) Package name must not end with an underscore
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(string_t), | intent(in) | :: | module_name | |||
type(string_t), | intent(in) | :: | custom_prefix |
logical function has_valid_custom_prefix(module_name,custom_prefix) result(valid)
type(string_t), intent(in) :: module_name
type(string_t), intent(in) :: custom_prefix
!> custom_module separator: single underscore
character(*), parameter :: SEP = "_"
logical :: is_same,has_separator,same_beginning
integer :: lpkg,lmod,lsep
!> Basic check: check that both names are individually valid
valid = is_fortran_name(module_name%s) .and. &
is_valid_module_prefix(custom_prefix)
!> FPM package enforcing: check that the module name begins with the custom prefix
if (valid) then
!> Query string lengths
lpkg = len_trim(custom_prefix)
lmod = len_trim(module_name)
lsep = len_trim(SEP)
same_beginning = str_begins_with_str(module_name%s,custom_prefix%s,case_sensitive=.false.)
is_same = lpkg==lmod .and. same_beginning
if (lmod>=lpkg+lsep) then
has_separator = str_begins_with_str(module_name%s(lpkg+1:lpkg+lsep),SEP)
else
has_separator = .false.
endif
!> 2) It must begin with the package name.
!> 3) It can be equal to the package name, or, if longer, must be followed by the
! default separator plus at least one character
!> 4) Package name must not end with an underscore
valid = same_beginning .and. (is_same .or. (lmod>lpkg+lsep .and. has_separator))
end if
end function has_valid_custom_prefix