@@ -103,7 +103,7 @@ pure function major(version_string) result(major_value)
103
103
104
104
end function
105
105
106
- pure function minor (version_string ) result(minor_value)
106
+ pure function minor (version_string ) result(minor_value)
107
107
character (len=* ), intent (in ) :: version_string
108
108
integer minor_value
109
109
character (len= :), allocatable :: middle_digits
@@ -117,14 +117,14 @@ pure function minor(version_string) result(minor_value)
117
117
118
118
end function
119
119
120
- pure function patch (version_string ) result(patch_value)
120
+ pure function patch (version_string ) result(patch_value)
121
121
character (len=* ), intent (in ) :: version_string
122
122
integer patch_value
123
123
character (len= :), allocatable :: trailing_digits
124
124
125
125
associate( first_dot = > scan (version_string, ' .' ) )
126
126
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 :)) )
128
128
trailing_digits = version_string( second_dot+1 : first_non_digit-1 )
129
129
read (trailing_digits,* ) patch_value
130
130
end associate
@@ -133,4 +133,14 @@ pure function patch(version_string) result(patch_value)
133
133
134
134
end function
135
135
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
+
136
146
end program
0 commit comments