@@ -103,7 +103,7 @@ pure function major(version_string) result(major_value)
103103
104104 end function
105105
106- pure function minor (version_string ) result(minor_value)
106+ pure function minor (version_string ) result(minor_value)
107107 character (len=* ), intent (in ) :: version_string
108108 integer minor_value
109109 character (len= :), allocatable :: middle_digits
@@ -117,14 +117,14 @@ pure function minor(version_string) result(minor_value)
117117
118118 end function
119119
120- pure function patch (version_string ) result(patch_value)
120+ pure function patch (version_string ) result(patch_value)
121121 character (len=* ), intent (in ) :: version_string
122122 integer patch_value
123123 character (len= :), allocatable :: trailing_digits
124124
125125 associate( first_dot = > scan (version_string, ' .' ) )
126126 associate( second_dot = > first_dot + scan (version_string(first_dot+1 :), ' .' ) )
127- associate( first_non_digit= > second_dot + scan (version_string(second_dot+1 :), ' ' ) )
127+ associate( first_non_digit= > second_dot + first_printable_non_digit (version_string(second_dot+1 :)) )
128128 trailing_digits = version_string( second_dot+1 : first_non_digit-1 )
129129 read (trailing_digits,* ) patch_value
130130 end associate
@@ -133,4 +133,14 @@ pure function patch(version_string) result(patch_value)
133133
134134 end function
135135
136+ pure function first_printable_non_digit ( string ) result(location)
137+ character (len=* ), intent (in ) :: string
138+ integer i, location
139+ integer , parameter :: ASCII_non_digit(* )= [(i,i= 32 ,47 ),(i,i= 58 ,126 )]
140+ character (len= 1 ), parameter :: non_digit(* )= [( char (ASCII_non_digit(i)) , i= 1 , size (ASCII_non_digit) )]
141+ character (len= size (non_digit)) non_digit_string
142+ write (non_digit_string,' (85a)' ) non_digit
143+ location = scan (string,non_digit_string)
144+ end function
145+
136146end program
0 commit comments