Check that a module name is prefixed with the default package prefix: 1) It must be a valid FORTRAN name (<=63 chars, begin with letter, “_” is only allowed non-alphanumeric) 2) It must begin with the package name 3) If longer, package name must be followed by default separator plus at least one char
Basic check: check the name is Fortran-compliant
FPM package enforcing: check that the module name begins with the package name
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) | :: | package_name |
logical function has_valid_standard_prefix(module_name,package_name) result(valid)
type(string_t), intent(in) :: module_name
type(string_t), intent(in) :: package_name
!> Default package__module separator: two underscores
character(*), parameter :: SEP = "__"
character(len=:), allocatable :: fortranized_pkg
logical :: is_same,has_separator,same_beginning
integer :: lpkg,lmod,lsep
!> Basic check: check the name is Fortran-compliant
valid = is_fortran_name(module_name%s)
!> FPM package enforcing: check that the module name begins with the package name
if (valid) then
fortranized_pkg = to_fortran_name(package_name%s)
!> Query string lengths
lpkg = len_trim(fortranized_pkg)
lmod = len_trim(module_name)
lsep = len_trim(SEP)
same_beginning = str_begins_with_str(module_name%s,fortranized_pkg,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 = is_fortran_name(fortranized_pkg) .and. &
fortranized_pkg(lpkg:lpkg)/='_' .and. &
(same_beginning .and. (is_same .or. (lmod>lpkg+lsep .and. has_separator)))
end if
end function has_valid_standard_prefix