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